From 6f1b78c980b5250b2bb8408a5fe422997b52eb0e Mon Sep 17 00:00:00 2001 From: Matt Hoosier Date: Wed, 2 Dec 2015 14:02:02 -0600 Subject: 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 Reviewed-by: Oswald Buddenhagen --- mkspecs/features/data/unix/findclasslist.pl | 17 +++++++++++++++-- mkspecs/features/qt_module.prf | 5 +++-- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'mkspecs') 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 \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 = ) { + chomp($line); + push @headers, $line; +} +close ARGFILE; + $\ = $/; while () { chomp; @@ -44,7 +57,7 @@ while () { } # 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 = ) { 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 -- cgit v1.2.3