summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-02-03 22:22:14 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-28 03:17:11 +0100
commitf8c5dd9857211601e2ea4b704df92e240b2c3b4b (patch)
treee7d8fa8694dacbaa73686611bd8b997f506ff1b6
parent13455344d7e55118733dfca6abba8662a334eba6 (diff)
automate handling of generated headers some more
let the syncqt + qt_module_header.prf pair handle generation of forwarding headers. in qtbase this is ineffective to some degree, as the need to create QtCore's forwarding headers early for QtBootstrap requires qtbase.pro already doing the real work, but at least we get the verification that nothing breaks. Other Modules (TM) will need the full functionality. Change-Id: Ifd3dfa05c4c8a91698a365160edb6dabc84e553f Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
-rwxr-xr-xbin/syncqt.pl23
-rw-r--r--mkspecs/features/qt_module_headers.prf14
-rw-r--r--src/corelib/global/global.pri9
-rw-r--r--sync.profile1
4 files changed, 34 insertions, 13 deletions
diff --git a/bin/syncqt.pl b/bin/syncqt.pl
index bbd514e58b..826d3fc6fa 100755
--- a/bin/syncqt.pl
+++ b/bin/syncqt.pl
@@ -833,6 +833,7 @@ foreach my $lib (@modules_to_sync) {
my $pri_install_files = "";
my $pri_install_pfiles = "";
my $pri_install_qpafiles = "";
+ my $pri_injections = "";
my $libcapitals = uc($lib);
my $master_contents =
@@ -905,8 +906,15 @@ foreach my $lib (@modules_to_sync) {
#calc files and "copy" them
foreach my $subdir (@subdirs) {
my @headers = findFiles($subdir, "^[-a-z0-9_]*\\.h\$" , 0);
+ if (defined $inject_headers{$subdir}) {
+ foreach my $if (@{$inject_headers{$subdir}}) {
+ @headers = grep(!/^\Q$if\E$/, @headers); #in case we configure'd previously
+ push @headers, "*".$if;
+ }
+ }
my $header_dirname = "";
foreach my $header (@headers) {
+ my $shadow = ($header =~ s/^\*//);
$header = 0 if($header =~ /^ui_.*.h/);
foreach (@ignore_headers) {
$header = 0 if($header eq $_);
@@ -928,6 +936,7 @@ foreach my $lib (@modules_to_sync) {
}
my $iheader = $subdir . "/" . $header;
+ $iheader =~ s/^\Q$basedir\E/$out_basedir/ if ($shadow);
my @classes = $public_header && (!$minimal && $is_qt) ? classNames($iheader) : ();
if($showonly) {
print "$header [$lib]\n";
@@ -935,7 +944,7 @@ foreach my $lib (@modules_to_sync) {
print "SYMBOL: $_\n";
}
} else {
- my $ts = (stat($iheader))[9];
+ my $ts = $shadow ? 0 : (stat($iheader))[9];
#find out all the places it goes..
my $oheader;
if ($public_header) {
@@ -949,19 +958,20 @@ foreach my $lib (@modules_to_sync) {
# class =~ s,::,/,g;
# }
- $header_copies++ if (syncHeader($lib, "$out_basedir/include/$lib/$class", "$out_basedir/include/$lib/$header", 0, $ts));
+ $header_copies++ if (!$shadow && syncHeader($lib, "$out_basedir/include/$lib/$class", "$out_basedir/include/$lib/$header", 0, $ts));
}
} elsif ($create_private_headers && !$qpa_header) {
$oheader = "$out_basedir/include/$lib/$module_version/$lib/private/$header";
} elsif ($create_private_headers) {
$oheader = "$out_basedir/include/$lib/$module_version/$lib/qpa/$header";
}
- $header_copies++ if (syncHeader($lib, $oheader, $iheader, $copy_headers, $ts));
+ $header_copies++ if (!$shadow && syncHeader($lib, $oheader, $iheader, $copy_headers, $ts));
my $pri_install_iheader = fixPaths($iheader, $dir);
+ my $injection = "";
if($public_header) {
#put it into the master file
- $master_contents .= "#include \"$public_header\"\n" if (shouldMasterInclude($iheader));
+ $master_contents .= "#include \"$public_header\"\n" if (!$shadow && shouldMasterInclude($iheader));
#deal with the install directives
foreach my $class (@classes) {
@@ -973,6 +983,7 @@ foreach my $lib (@modules_to_sync) {
my $class_header = fixPaths("$out_basedir/include/$lib/$class", $dir) . " ";
$pri_install_classes .= $class_header
unless($pri_install_classes =~ $class_header);
+ $injection .= ":$class";
}
$pri_install_files.= "$pri_install_iheader ";;
}
@@ -982,6 +993,9 @@ foreach my $lib (@modules_to_sync) {
else {
$pri_install_pfiles.= "$pri_install_iheader ";;
}
+ $pri_injections .= fixPaths($iheader, "$out_basedir/include/$lib")
+ .":".fixPaths($oheader, "$out_basedir/include/$lib")
+ .$injection." " if ($shadow);
}
if ($verbose_level && $header_copies) {
@@ -1112,6 +1126,7 @@ foreach my $lib (@modules_to_sync) {
$headers_pri_contents .= "SYNCQT.HEADER_CLASSES = $pri_install_classes\n";
$headers_pri_contents .= "SYNCQT.PRIVATE_HEADER_FILES = $pri_install_pfiles\n";
$headers_pri_contents .= "SYNCQT.QPA_HEADER_FILES = $pri_install_qpafiles\n";
+ $headers_pri_contents .= "SYNCQT.INJECTIONS = $pri_injections\n";
my $headers_pri_file = "$out_basedir/include/$lib/headers.pri";
writeFile($headers_pri_file, $headers_pri_contents, $lib, "headers.pri file");
}
diff --git a/mkspecs/features/qt_module_headers.prf b/mkspecs/features/qt_module_headers.prf
index ca26eb674b..0baa9ec7b2 100644
--- a/mkspecs/features/qt_module_headers.prf
+++ b/mkspecs/features/qt_module_headers.prf
@@ -35,6 +35,20 @@ else: \
INC_PATH = $$MODULE_BASE_INDIR
include($$INC_PATH/include/$$MODULE_INCNAME/headers.pri, "", true)
+for (injection, SYNCQT.INJECTIONS) {
+ injects = $$split(injection, :)
+ fwd_hdr = $$member(injects, 1)
+ MAIN_FWD = $$INC_PATH/include/$$MODULE_INCNAME/$$fwd_hdr
+ MAIN_FWD_CONT = '$${LITERAL_HASH}include "$$member(injects, 0)"'
+ write_file($$MAIN_FWD, MAIN_FWD_CONT)|error("Aborting.")
+ injects = $$member(injects, 2, -1)
+ for (inject, injects) {
+ CLASS_FWD = $$INC_PATH/include/$$MODULE_INCNAME/$$inject
+ CLASS_FWD_CONT = '$${LITERAL_HASH}include "$$fwd_hdr"'
+ write_file($$CLASS_FWD, CLASS_FWD_CONT)|error("Aborting.")
+ }
+}
+
autogen_warning = \
"/* This file was generated by qmake with the info from <root>/$$relative_path($$_PRO_FILE_, $$MODULE_BASE_INDIR). */"
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index 789f500cab..efa585ff3e 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -29,15 +29,6 @@ SOURCES += \
# qlibraryinfo.cpp includes qconfig.cpp
INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global
-# configure creates these, not syncqt, so we need to manually inject them
-qconfig_h_files = \
- $$OUT_PWD/global/qfeatures.h \
- $$OUT_PWD/global/qconfig.h \
- $$QT_BUILD_TREE/include/QtCore/QtConfig
-targ_headers.files += $$qconfig_h_files
-contains(QMAKE_BUNDLE_DATA, FRAMEWORK_HEADERS): \
- FRAMEWORK_HEADERS.files += $$qconfig_h_files
-
# Only used on platforms with CONFIG += precompile_header
PRECOMPILED_HEADER = global/qt_pch.h
diff --git a/sync.profile b/sync.profile
index 9c759297ce..9823aa16bd 100644
--- a/sync.profile
+++ b/sync.profile
@@ -24,6 +24,7 @@
%classnames = (
"qglobal.h" => "QtGlobal",
"qendian.h" => "QtEndian",
+ "qconfig.h" => "QtConfig",
"qplugin.h" => "QtPlugin",
"qalgorithms.h" => "QtAlgorithms",
"qcontainerfwd.h" => "QtContainerFwd",