From 8ea19caacf281240411541b5af37c2f9a103a7d1 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Date: Tue, 7 May 2013 17:10:22 +0200
Subject: [PATCH] add -compile-examples configure option
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

this overrides the magic that makes examples only install their sources
in production builds.

packagers may want to force the build of the examples, so they can
package them up for demo purposes.
this is actually why we formerly had the split between demos and
examples ...

Task-number: QTBUG-30788
Change-Id: I5633f69404c5aa6846f5496e8f161a273a7a7da3
Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
Reviewed-by: Lisandro Damián Nicanor Pérez Meyer <perezmeyer@gmail.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
---
 configure                                | 22 ++++++++++++++++++++++
 mkspecs/features/qt_example_installs.prf |  3 +--
 tools/configure/configureapp.cpp         | 20 ++++++++++++++++++++
 3 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/configure b/configure
index e633a780bdc..d11a50554f2 100755
--- a/configure
+++ b/configure
@@ -880,6 +880,7 @@ QT_DEFAULT_BUILD_PARTS="libs tools examples"
 CFG_BUILD_PARTS=""
 CFG_NOBUILD_PARTS=""
 CFG_SKIP_MODULES=""
+CFG_COMPILE_EXAMPLES=auto
 CFG_RELEASE_QMAKE=no
 CFG_AUDIO_BACKEND=auto
 CFG_V8SNAPSHOT=auto
@@ -1404,6 +1405,13 @@ while [ "$#" -gt 0 ]; do
         fi
         CFG_SKIP_MODULES="$CFG_SKIP_MODULES $VAL"
         ;;
+    compile-examples)
+        if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
+            CFG_COMPILE_EXAMPLES="$VAL"
+        else
+            UNKNOWN_OPT=yes
+        fi
+        ;;
     sdk)
         if [ "$BUILD_ON_MAC" = "yes" ]; then
             DeviceVar set !host_build:QMAKE_MAC_SDK "$VAL"
@@ -3151,6 +3159,18 @@ else
     QT_HOST_DATA=`"$relpath/config.tests/unix/makeabs" "$QT_HOST_DATA"`
 fi
 
+# Do not actually build the examples in production builds with -prefix, unless requested
+if [ "$CFG_COMPILE_EXAMPLES" = auto ]; then
+    if [ "$CFG_DEV" = "yes" ] || [ "x$outpath" = "x$QT_INSTALL_PREFIX" ]; then
+        CFG_COMPILE_EXAMPLES=yes
+    else
+        CFG_COMPILE_EXAMPLES=no
+    fi
+fi
+if [ "$CFG_COMPILE_EXAMPLES" = "yes" ]; then
+    QMAKE_CONFIG="$QMAKE_CONFIG compile_examples"
+fi
+
 #-------------------------------------------------------------------------------
 # help - interactive parts of the script _after_ this section please
 #-------------------------------------------------------------------------------
@@ -3452,6 +3472,8 @@ Additional options:
 
     -skip <module> ..... Exclude an entire module from the build.
 
+    -compile-examples .. Compile examples even in a production build.
+
     -no-gui ............ Don't build the Qt GUI module and dependencies.
  +  -gui ............... Build the Qt GUI module and dependencies.
 
diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf
index 479a16a90be..2db752c1e4e 100644
--- a/mkspecs/features/qt_example_installs.prf
+++ b/mkspecs/features/qt_example_installs.prf
@@ -93,8 +93,7 @@ probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples)
         !isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles")
     }
 
-    # Do not actually build the examples in production builds with -prefix
-    !equals(TEMPLATE, subdirs):prefix_build:!contains(QT_CONFIG, private_tests) {
+    !equals(TEMPLATE, subdirs):!compile_examples {
         TEMPLATE = aux
         CONFIG -= have_target qt staticlib dll
         SOURCES =
diff --git a/tools/configure/configureapp.cpp b/tools/configure/configureapp.cpp
index a0303514437..a83f451b815 100644
--- a/tools/configure/configureapp.cpp
+++ b/tools/configure/configureapp.cpp
@@ -276,6 +276,8 @@ Configure::Configure(int& argc, char** argv)
 
     dictionary[ "BUILDDEV" ]        = "no";
 
+    dictionary[ "COMPILE_EXAMPLES" ] = "auto";
+
     dictionary[ "C++11" ]           = "auto";
 
     dictionary[ "SHARED" ]          = "yes";
@@ -458,6 +460,13 @@ void Configure::parseCmdLine()
             dictionary[ "BUILDALL" ] = "yes";
         else if (configCmdLine.at(i) == "-force-debug-info")
             dictionary[ "FORCEDEBUGINFO" ] = "yes";
+
+        else if (configCmdLine.at(i) == "-compile-examples") {
+            dictionary[ "COMPILE_EXAMPLES" ] = "yes";
+        } else if (configCmdLine.at(i) == "-no-compile-examples") {
+            dictionary[ "COMPILE_EXAMPLES" ] = "no";
+        }
+
         else if (configCmdLine.at(i) == "-c++11")
             dictionary[ "C++11" ] = "yes";
         else if (configCmdLine.at(i) == "-no-c++11")
@@ -1696,6 +1705,8 @@ bool Configure::displayHelp()
 
         desc(                   "-skip <module>",       "Exclude an entire module from the build.\n");
 
+        desc(                   "-compile-examples",    "Compile examples even in a production build.\n");
+
         desc("WIDGETS", "no", "-no-widgets",            "Disable Qt Widgets module.\n");
         desc("GUI", "no", "-no-gui",                    "Disable Qt GUI module.\n");
 
@@ -1979,6 +1990,13 @@ QString Configure::defaultTo(const QString &option)
         && (!QFile::exists(sourcePath + "/bin/syncqt.pl")))
         return "no";
 
+    // Do not actually build the examples in production builds with -prefix, unless requested
+    if (option == "COMPILE_EXAMPLES"
+        && QDir::cleanPath(dictionary[ "QT_BUILD_TREE" ])
+            != QDir::cleanPath(dictionary[ "QT_INSTALL_PREFIX" ])
+        && dictionary[ "BUILDDEV" ] == "no")
+        return "no";
+
     return "yes";
 }
 
@@ -2560,6 +2578,8 @@ void Configure::generateOutputVars()
     if (!buildParts.contains("libs"))
         buildParts += "libs";
     buildParts.removeDuplicates();
+    if (dictionary[ "COMPILE_EXAMPLES" ] == "yes")
+        qmakeConfig += "compile_examples";
 
     if (dictionary["MSVC_MP"] == "yes")
         qmakeConfig += "msvc_mp";
-- 
GitLab