diff options
Diffstat (limited to 'mkspecs/features/exclusive_builds.prf')
-rw-r--r-- | mkspecs/features/exclusive_builds.prf | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/mkspecs/features/exclusive_builds.prf b/mkspecs/features/exclusive_builds.prf new file mode 100644 index 0000000..8898c96 --- /dev/null +++ b/mkspecs/features/exclusive_builds.prf @@ -0,0 +1,100 @@ +# fixExclusiveOutputDirs(1config, 2config) +# Change all output paths that references 2config to have the string 1config in them +defineTest(fixExclusiveOutputDirs) { + unset(firstBuild) + unset(secondBuild) + unset(appendFirstBuild) + firstBuild = $$1 + secondBuild = $$2 + count(ARGS, 2, greaterThan):isEqual($$list($$lower($$3)), false):appendFirstBuild = false + else:appendFirstBuild = true + + isEmpty(QMAKE_DIR_REPLACE):QMAKE_DIR_REPLACE += OBJECTS_DIR MOC_DIR RCC_DIR + lessThan(firstBuild, $$secondBuild):eval($${firstBuild}_and_$${secondBuild}_target:QMAKE_DIR_REPLACE += DESTDIR) + else:eval($${secondBuild}_and_$${firstBuild}_target:QMAKE_DIR_REPLACE += DESTDIR) + for(fix, QMAKE_DIR_REPLACE) { + isEmpty($$fix)|isEqual($$fix, .) { + eval($$fix = $${firstBuild}) + } else:contains($$list($$first($$fix)), .*$${secondBuild}.*) { + eval($$fix ~= s/$${secondBuild}/$${firstBuild}/gi) + } else:isEqual(appendFirstBuild, true):!contains($$list($$first($$fix)), .*$${firstBuild}.*) { + contains($$list($${first($$fix)}), .*/$):eval($$fix = $${first($$fix)}$${firstBuild}) + else:eval($$fix = $${first($$fix)}-$${firstBuild}) + } + export($$fix) + } + return(true) +} + +# addExclusiveBuilds(1config, 1name, 2config, 2name) +# Adds two BUILDS which are exclusive to each other. +defineTest(addExclusiveBuilds) { + unset(firstBuild) + unset(firstBuildName) + unset(secondBuild) + unset(secondBuildName) + + firstBuild = $$1 + firstBuildName = $$2 + secondBuild = $$3 + secondBuildName = $$4 + + contains(TEMPLATE, subdirs) { + eval(sub_$${firstBuildName}.target = $$firstBuild) + export(sub_$${firstBuildName}.target) + eval(sub_$${firstBuildName}.CONFIG = recursive) + export(sub_$${firstBuildName}.CONFIG) + eval(sub_$${secondBuildName}.target = $$secondBuild) + export(sub_$${secondBuildName}.target) + eval(sub_$${secondBuildName}.CONFIG = recursive) + export(sub_$${secondBuildName}.CONFIG) + QMAKE_EXTRA_TARGETS += sub_$${firstBuildName} sub_$${secondBuildName} + export(QMAKE_EXTRA_TARGETS) + } else:!build_pass { + first_BUILDS = + second_BUILDS = + suffix_BUILDS = Build + + isEmpty(BUILDS): BUILDPERMUTATIONS = $$suffix_BUILDS + else: BUILDPERMUTATIONS = $$BUILDS + + for(permutation, BUILDPERMUTATIONS) { + permutation ~= s/$${suffix_BUILDS}$// + isEmpty(permutation): permutationName = + else: permutationName = -$$permutation + # Makefile target rule + eval($${firstBuildName}$${permutation}.target = $${firstBuild}$$lower($${permutationName})) + export($${firstBuildName}$${permutation}.target) + # IDE name + eval($${firstBuildName}$${permutation}.name = $${firstBuildName}$${permutationName}) + export($${firstBuildName}$${permutation}.name) + # prl import CONFIG option + eval($${firstBuildName}$${permutation}.PRL_CONFIG = $${firstBuild}$${permutation}) + export($${firstBuildName}$${permutation}.PRL_CONFIG) + # Individual CONFIG option + eval($${firstBuildName}$${permutation}.CONFIG = $${firstBuild} $${firstBuildName}Build $$eval($${permutation}.CONFIG)) + export($${firstBuildName}$${permutation}.CONFIG) + + eval($${secondBuildName}$${permutation}.target = $${secondBuild}$$lower($${permutationName})) + export($${secondBuildName}$${permutation}.target) + eval($${secondBuildName}$${permutation}.name = $${secondBuildName}$${permutationName}) + export($${secondBuildName}$${permutation}.name) + eval($${secondBuildName}$${permutation}.PRL_CONFIG = $${secondBuild}$${permutation}) + export($${secondBuildName}$${permutation}.PRL_CONFIG) + eval($${secondBuildName}$${permutation}.CONFIG = $${secondBuild} $${secondBuildName}Build $$eval($${permutation}.CONFIG)) + export($${secondBuildName}$${permutation}.CONFIG) + + first_BUILDS += $${firstBuildName}$${permutation} + second_BUILDS += $${secondBuildName}$${permutation} + } + + # A mutual exclusive block. + CONFIG($${firstBuild}, $${firstBuild}|$${secondBuild}): BUILDS = $$first_BUILDS $$second_BUILDS + else: BUILDS = $$second_BUILDS $$first_BUILDS + export(BUILDS) + } else { + eval($${firstBuildName}Build:fixExclusiveOutputDirs($$firstBuild, $$secondBuild, false)) + eval($${secondBuildName}Build:fixExclusiveOutputDirs($$secondBuild, $$firstBuild, false)) + } + return(true) +} |