[Qt] Build on Windows requires bison/flex in PATH
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Sep 2012 14:35:03 +0000 (14:35 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 12 Sep 2012 14:35:03 +0000 (14:35 +0000)
https://bugs.webkit.org/show_bug.cgi?id=96358

Patch by Simon Hausmann <simon.hausmann@nokia.com> on 2012-09-12
Reviewed by Tor Arne Vestbø.

Source/ThirdParty/ANGLE:

Use MAKEFILE_NOOP_COMMAND instead of the \n\t trick to generate a dummy command. Otherwise
the PATH prepend trick will break because it generates a command line along the lines of
(set PATH="...") && with just that trailing ampersand pair.

* DerivedSources.pri:

Tools:

The build requires flex, bison, etc. and they need to be in the PATH when building. On Mac OS X
and Linux that is rarely a problem given how easily available the tools are. On Windows however
a separate installation of various GNU tools is required as the operating system doesn't come with
them. To make the development more convenient, Qt 5 provides a copy of the most essential tools in
the gnuwin32 directory of the qt5.git top-level repository.

This patch tries to detect the presence of those tools and prepends them to the PATH if found.

This is required in preparation for the elimination of qt5/qtwebkit.pri, which currently expands
PATH before calling build-webkit. It it also required for the upcoming introduction of win_flex
as dependency over flex, which can be done with less hassle when qt5's gnuwin32 directory has been
updated with the new tool.

* Scripts/webkitdirs.pm:
(checkRequiredSystemConfig):
* qmake/mkspecs/features/default_post.prf:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@128308 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/ThirdParty/ANGLE/ChangeLog
Source/ThirdParty/ANGLE/DerivedSources.pri
Tools/ChangeLog
Tools/Scripts/webkitdirs.pm
Tools/qmake/mkspecs/features/default_post.prf

index faed94e..d1acdb1 100644 (file)
@@ -1,3 +1,16 @@
+2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>
+
+        [Qt] Build on Windows requires bison/flex in PATH
+        https://bugs.webkit.org/show_bug.cgi?id=96358
+
+        Reviewed by Tor Arne Vestbø.
+
+        Use MAKEFILE_NOOP_COMMAND instead of the \n\t trick to generate a dummy command. Otherwise
+        the PATH prepend trick will break because it generates a command line along the lines of
+        (set PATH="...") && with just that trailing ampersand pair.
+
+        * DerivedSources.pri:
+
 2012-09-10  Dean Jackson  <dino@apple.com>
 
         [Apple] Install plist for Apple Open Source build system
index 791e527..04ae8c1 100644 (file)
@@ -31,7 +31,7 @@ anglebison_decl.variable_out = GENERATED_FILES
 GENERATORS += anglebison_decl
 
 anglebison_impl.input = ANGLE_BISON_SOURCES
-anglebison_impl.commands = $$escape_expand(\\n)
+anglebison_impl.commands = $$MAKEFILE_NOOP_COMMAND
 anglebison_impl.depends = $$GENERATED_SOURCES_DESTDIR/${QMAKE_FILE_BASE}_tab.h
 anglebison_impl.output = ${QMAKE_FILE_BASE}_tab.cpp
 GENERATORS += anglebison_impl
index a588124..b886473 100644 (file)
@@ -1,3 +1,27 @@
+2012-09-12  Simon Hausmann  <simon.hausmann@nokia.com>
+
+        [Qt] Build on Windows requires bison/flex in PATH
+        https://bugs.webkit.org/show_bug.cgi?id=96358
+
+        Reviewed by Tor Arne Vestbø.
+
+        The build requires flex, bison, etc. and they need to be in the PATH when building. On Mac OS X
+        and Linux that is rarely a problem given how easily available the tools are. On Windows however
+        a separate installation of various GNU tools is required as the operating system doesn't come with
+        them. To make the development more convenient, Qt 5 provides a copy of the most essential tools in
+        the gnuwin32 directory of the qt5.git top-level repository.
+
+        This patch tries to detect the presence of those tools and prepends them to the PATH if found.
+
+        This is required in preparation for the elimination of qt5/qtwebkit.pri, which currently expands
+        PATH before calling build-webkit. It it also required for the upcoming introduction of win_flex
+        as dependency over flex, which can be done with less hassle when qt5's gnuwin32 directory has been
+        updated with the new tool.
+
+        * Scripts/webkitdirs.pm:
+        (checkRequiredSystemConfig):
+        * qmake/mkspecs/features/default_post.prf:
+
 2012-09-12  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
 
         [Qt] Update build-jsc after r128174
index 5c0e8d3..baafbda 100755 (executable)
@@ -1544,6 +1544,14 @@ sub checkRequiredSystemConfig
     } elsif (isGtk() or isQt() or isWx() or isEfl()) {
         my @cmds = qw(flex bison gperf);
         my @missing = ();
+        my $oldPath = $ENV{PATH};
+        if (isQt() and isWindows()) {
+            chomp(my $gnuWin32Dir = `$qmakebin -query QT_HOST_DATA`);
+            $gnuWin32Dir = File::Spec->catfile($gnuWin32Dir, "..", "gnuwin32", "bin");
+            if (-d "$gnuWin32Dir") {
+                $ENV{PATH} = $gnuWin32Dir . ";" . $ENV{PATH};
+            }
+        }
         foreach my $cmd (@cmds) {
             push @missing, $cmd if not commandExists($cmd);
         }
@@ -1552,6 +1560,9 @@ sub checkRequiredSystemConfig
             my $list = join ", ", @missing;
             die "ERROR: $list missing but required to build WebKit.\n";
         }
+        if (isQt() and isWindows()) {
+            $ENV{PATH} = $oldPath;
+        }
     }
     # Win32 and other platforms may want to check for minimum config
 }
index 66828d8..8f57e1c 100644 (file)
@@ -75,6 +75,17 @@ contains(TEMPLATE, derived) {
     fake_release.depends = first
     QMAKE_EXTRA_TARGETS += fake_release
 
+    # A lot of our code generators require GNU tools, readily available
+    # on Linux and Mac OS X. On Windows we do have a convenience copy in
+    # Qt5's top-level repository, so let's add that to the PATH if we can
+    # find it.
+    win32 {
+        GNUTOOLS=$$[QT_HOST_DATA]/../gnuwin32/bin
+        exists($$GNUTOOLS/gperf.exe) {
+            GNUTOOLS = "(set $$escape_expand(\\\")PATH=$$toSystemPath($$GNUTOOLS);%PATH%$$escape_expand(\\\"))"
+        }
+    }
+
     for(generator, GENERATORS) {
         eval($${generator}.CONFIG = target_predeps no_link)
         eval($${generator}.dependency_type = TYPE_C)
@@ -86,6 +97,11 @@ contains(TEMPLATE, derived) {
         script = $$eval($${generator}.script)
         eval($${generator}.depends += $$script)
 
+        commands = $$eval($${generator}.commands)
+        !isEmpty(commands):!isEmpty(GNUTOOLS) {
+            eval($${generator}.commands = $${GNUTOOLS} && $$val_escape($${generator}.commands))
+        }
+
         !isEmpty($${generator}.input) {
             # Compiler-style generator
             QMAKE_EXTRA_COMPILERS += $$generator