From aeb036ed8715d0c099d3dca87f7def4dbaf8e9b4 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Tue, 27 Nov 2012 20:40:16 +0100 Subject: centralize and fixup example sources install targets it's confusing for the users if the examples' project files contain code to install their own sources. also, this constitutes an enormous code duplication, and lots of mistakes. consequently, automate it. more or less as a side effect, this also removes the entirely meaningless target installs in subdirs projects. Task-number: QTBUG-28184 Change-Id: I9fc1367a06db9e2c46aeb67d68729a4f67163ef9 Reviewed-by: hjk --- mkspecs/features/qt_build_config.prf | 1 + mkspecs/features/qt_example_installs.prf | 71 ++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 mkspecs/features/qt_example_installs.prf (limited to 'mkspecs') diff --git a/mkspecs/features/qt_build_config.prf b/mkspecs/features/qt_build_config.prf index df07630ffa..63d6b43c7c 100644 --- a/mkspecs/features/qt_build_config.prf +++ b/mkspecs/features/qt_build_config.prf @@ -28,6 +28,7 @@ mac { CONFIG += \ create_prl link_prl \ prepare_docs qt_docs_targets \ + qt_example_installs \ no_private_qt_headers_warning QTDIR_build \ # Qt modules get compiled without exceptions enabled by default. # However, testcases should be still built with exceptions. diff --git a/mkspecs/features/qt_example_installs.prf b/mkspecs/features/qt_example_installs.prf new file mode 100644 index 0000000000..72f0b141a7 --- /dev/null +++ b/mkspecs/features/qt_example_installs.prf @@ -0,0 +1,71 @@ +probase = $$relative_path($$_PRO_FILE_PWD_, $$dirname(_QMAKE_CONF_)/examples) +!contains(probase, ^\\..*) { + for(ex, EXAMPLE_FILES): \ + sourcefiles += $$files($$absolute_path($$ex, $$_PRO_FILE_PWD_)) + for(res, RESOURCES) { + rfile = $$cat($$absolute_path($$res, $$_PRO_FILE_PWD_), lines) + for(rline, rfile) { + resrc = $$replace(rline, ^[ \\t]*]*>([^<]+)[ \\t]*$, \\1) + !equals(resrc, $$rline): \ + sourcefiles += $$resrc + } + } + for(res, RC_FILE) { + rfile = $$cat($$absolute_path($$res, $$_PRO_FILE_PWD_), lines) + for(rline, rfile) { + resrc = $$replace(rline, "^\\d+\\s+ICON\\s+[^\"]*\"([^\"]+)\"\$", \\1) + !equals(resrc, $$rline): \ + sourcefiles += $$resrc + } + } + extras = \ + $$_PRO_FILE_PWD_/README \ + $$files($$_PRO_FILE_PWD_/*.pri) \ + $$replace(_PRO_FILE_, \\.pro$, .json) \ + $$replace(_PRO_FILE_, \\.pro$, .inf) + for(extra, extras): \ + exists($$extra): \ + sourcefiles += $$extra + + # Just for Qt Creator + OTHER_FILES += $$sourcefiles + + sourcefiles += \ + $$_PRO_FILE_ $$RC_FILE $$DEF_FILE \ + $$SOURCES $$HEADERS $$FORMS $$RESOURCES $$TRANSLATIONS \ + $$DBUS_ADAPTORS $$DBUS_INTERFACES + for(sf, sourcefiles) { + sf = $$relative_path($$sf, $$_PRO_FILE_PWD_) + contains(sf, \\..*) { + check_examples: message("Notice: $$_PRO_FILE_ refers to $$sf") + } else { + sfp = $$replace(sf, /.*, ) + !equals(sfp, $$sf): \ + sources.files *= $$sfp + else: \ + sources.files += $$sf + } + } + sources.path = $$[QT_INSTALL_EXAMPLES]/$$probase + INSTALLS += sources + + check_examples { + thefiles = $$files($$_PRO_FILE_PWD_/*) + for(i, thefiles): \ + allfiles += $$relative_path($$i, $$_PRO_FILE_PWD_) + for(i, sources.files): \ + allfiles -= $$relative_path($$i, $$_PRO_FILE_PWD_) + for(i, SUBDIRS) { + sd = $$eval($${i}.file) + !isEmpty(sd) { + sd ~= s,/.*,, + } else { + sd = $$eval($${i}.subdir) + isEmpty(sd): sd = $$i + } + allfiles -= $$sd + } + allfiles -= doc + !isEmpty(allfiles): warning("remaining files in $$_PRO_FILE_PWD_: $$allfiles") + } +} -- cgit v1.2.3