From 0dd092f366077f2392b9faeae3d92cab12ac194d Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sun, 26 Apr 2015 11:54:25 +0100
Subject: [PATCH 6/6] Add some missing files.

Seems 1.4.0 was created without:
src/lib/corelib/tools/generateoptions.{cpp,h}

.. which were added originally in:
5447c5 : * Add an API to support build system generators.
---
 src/lib/corelib/tools/generateoptions.cpp | 92 +++++++++++++++++++++++++++++++
 src/lib/corelib/tools/generateoptions.h   | 62 +++++++++++++++++++++
 2 files changed, 154 insertions(+)
 create mode 100644 src/lib/corelib/tools/generateoptions.cpp
 create mode 100644 src/lib/corelib/tools/generateoptions.h

diff --git a/src/lib/corelib/tools/generateoptions.cpp b/src/lib/corelib/tools/generateoptions.cpp
new file mode 100644
index 0000000..406cf88
--- /dev/null
+++ b/src/lib/corelib/tools/generateoptions.cpp
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2015 Jake Petroules.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "generateoptions.h"
+
+#include <QtCore/qshareddata.h>
+#include <QtCore/qstring.h>
+
+namespace qbs {
+namespace Internal {
+
+class GenerateOptionsPrivate : public QSharedData
+{
+public:
+    GenerateOptionsPrivate()
+        : generatorName()
+    {}
+
+    QString generatorName;
+};
+
+} // namespace Internal
+
+/*!
+ * \class GenerateOptions
+ * \brief The \c GenerateOptions class comprises parameters that influence the behavior of
+ * generate operations.
+ */
+
+GenerateOptions::GenerateOptions() : d(new Internal::GenerateOptionsPrivate)
+{
+}
+
+GenerateOptions::GenerateOptions(const GenerateOptions &other) : d(other.d)
+{
+}
+
+GenerateOptions &GenerateOptions::operator=(const GenerateOptions &other)
+{
+    d = other.d;
+    return *this;
+}
+
+GenerateOptions::~GenerateOptions()
+{
+}
+
+/*!
+ * Returns the name of the generator used to create the external build system files.
+ * The default is empty.
+ */
+QString GenerateOptions::generatorName() const
+{
+    return d->generatorName;
+}
+
+/*!
+ * \brief Sets the name of the generator used to create the external build system files.
+ */
+void GenerateOptions::setGeneratorName(const QString &generatorName)
+{
+    d->generatorName = generatorName;
+}
+
+} // namespace qbs
diff --git a/src/lib/corelib/tools/generateoptions.h b/src/lib/corelib/tools/generateoptions.h
new file mode 100644
index 0000000..06d08ba
--- /dev/null
+++ b/src/lib/corelib/tools/generateoptions.h
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2015 Jake Petroules.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the Qbs.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+#ifndef QBS_GENERATEOPTIONS_H
+#define QBS_GENERATEOPTIONS_H
+
+#include "qbs_export.h"
+
+#include <QtCore/qshareddata.h>
+
+QT_BEGIN_NAMESPACE
+class QString;
+QT_END_NAMESPACE
+
+namespace qbs {
+namespace Internal { class GenerateOptionsPrivate; }
+
+class QBS_EXPORT GenerateOptions
+{
+public:
+    GenerateOptions();
+    GenerateOptions(const GenerateOptions &other);
+    GenerateOptions &operator=(const GenerateOptions &other);
+    ~GenerateOptions();
+
+    QString generatorName() const;
+    void setGeneratorName(const QString &generatorName);
+
+private:
+    QSharedDataPointer<Internal::GenerateOptionsPrivate> d;
+};
+
+} // namespace qbs
+
+#endif // QBS_GENERATEOPTIONS_H
-- 
2.3.5

