summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Hoosier <matt.hoosier@garmin.com>2015-12-02 14:02:02 -0600
committerMatt Hoosier <matt.hoosier@garmin.com>2015-12-21 16:18:29 +0000
commit6f1b78c980b5250b2bb8408a5fe422997b52eb0e (patch)
tree69905c13b1115e1b2e2b2e0bdf7097f0252e4c6f
parenta206583da1bee8fdc90b58bbc8d067ba724de203 (diff)
Fix version script generation when cross-compiling from Windows to QNX
Recent versions of Qt have apparently added sufficient numbers of headers that the command lines used to spawn a custom header- parsing tool, started overflowing Windows' maximum command-line length. This change restructures the mechanism to use a GCC-style command- line arguments file rather than passing filenames all directly in the argv[] vector. Although QNX is the usual ELF target whose cross-build is supported on Windows, the mechanics introduced in this patch happen to affect all other ELF Unix systems' builds too. Change-Id: I5a7383cf9f2ebf9dffde8dbfdcdeca888265e085 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
-rw-r--r--mkspecs/features/data/unix/findclasslist.pl17
-rw-r--r--mkspecs/features/qt_module.prf5
2 files changed, 18 insertions, 4 deletions
diff --git a/mkspecs/features/data/unix/findclasslist.pl b/mkspecs/features/data/unix/findclasslist.pl
index 9113b4921c..ac010ae0a7 100644
--- a/mkspecs/features/data/unix/findclasslist.pl
+++ b/mkspecs/features/data/unix/findclasslist.pl
@@ -33,8 +33,21 @@
#############################################################################
use strict;
-my $syntax = "findclasslist.pl [private header list]\n" .
+my $syntax = "findclasslist.pl <file (containing private header list)>\n" .
"Replaces \@CLASSLIST\@ with the classes found in the header files\n";
+
+die("Expected exactly one argument") if (@ARGV != 1);
+
+my @headers = ();
+
+# Expand contents of the command-line arguments file
+open ARGFILE, "<$ARGV[0]" or die("Could not open arguments file $ARGV[0]: $!");
+while (my $line = <ARGFILE>) {
+ chomp($line);
+ push @headers, $line;
+}
+close ARGFILE;
+
$\ = $/;
while (<STDIN>) {
chomp;
@@ -44,7 +57,7 @@ while (<STDIN>) {
}
# Replace @CLASSLIST@ with the class list
- for my $header (@ARGV) {
+ for my $header (@headers) {
open HDR, "<$header" or die("Could not open header $header: $!");
my $comment = " /* $header */";
while (my $line = <HDR>) {
diff --git a/mkspecs/features/qt_module.prf b/mkspecs/features/qt_module.prf
index 9a4ed20af8..1dae370630 100644
--- a/mkspecs/features/qt_module.prf
+++ b/mkspecs/features/qt_module.prf
@@ -215,11 +215,12 @@ android: CONFIG += qt_android_deps no_linker_version_script
}
# Add a post-processing step to replace the @CLASSLIST@
- verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < $^ > $@
+ verscriptprocess.commands = perl $${PWD}/data/unix/findclasslist.pl < $${verscript}.in $${verscript}.in.args > $@
verscriptprocess.target = $$verscript
- verscriptprocess.depends = $${verscript}.in
for(header, SYNCQT.PRIVATE_HEADER_FILES): \
verscriptprocess.depends += $${_PRO_FILE_PWD_}/$$header
+ write_file($${verscript}.in.args, verscriptprocess.depends)|error("Aborting.")
+ verscriptprocess.depends += $${verscript}.in $${verscript}.in.args
QMAKE_EXTRA_TARGETS += verscriptprocess
PRE_TARGETDEPS += $$verscript
verscript = $${verscript}.in