source: trunk/mkspecs/features/exclusive_builds.prf@ 200

Last change on this file since 200 was 200, checked in by Dmitry A. Kuminov, 16 years ago

mkspecs: Misplaced else which led to indistinguishable OBJECTS_DIR and friends in debug_and_release builds under some conditions (e.g. OBJECTS_DIR contained neither 'debug' nor 'release').

File size: 4.5 KB
Line 
1# fixExclusiveOutputDirs(1config, 2config)
2# Change all output paths that references 2config to have the string 1config in them
3defineTest(fixExclusiveOutputDirs) {
4 unset(firstBuild)
5 unset(secondBuild)
6 unset(appendFirstBuild)
7 firstBuild = $$1
8 secondBuild = $$2
9 count(ARGS, 2, greaterThan):isEqual($$list($$lower($$3)), false):appendFirstBuild = false
10 else:appendFirstBuild = true
11
12 isEmpty(QMAKE_DIR_REPLACE):QMAKE_DIR_REPLACE += OBJECTS_DIR MOC_DIR RCC_DIR
13 lessThan(firstBuild, $$secondBuild):eval($${firstBuild}_and_$${secondBuild}_target:QMAKE_DIR_REPLACE += DESTDIR)
14 else:eval($${secondBuild}_and_$${firstBuild}_target:QMAKE_DIR_REPLACE += DESTDIR)
15 for(fix, QMAKE_DIR_REPLACE) {
16 isEmpty($$fix)|isEqual($$fix, .) {
17 eval($$fix = $${firstBuild})
18 } else:contains($$list($$first($$fix)), .*$${secondBuild}.*) {
19 eval($$fix ~= s/$${secondBuild}/$${firstBuild}/gi)
20 } else:isEqual(appendFirstBuild, true):!contains($$list($$first($$fix)), .*$${firstBuild}.*) {
21 contains($$list($${first($$fix)}), .*/$):eval($$fix = $${first($$fix)}$${firstBuild})
22 } else {
23 eval($$fix = $${first($$fix)}-$${firstBuild})
24 }
25 export($$fix)
26 }
27 return(true)
28}
29
30# addExclusiveBuilds(1config, 1name, 2config, 2name)
31# Adds two BUILDS which are exclusive to each other.
32defineTest(addExclusiveBuilds) {
33 unset(firstBuild)
34 unset(firstBuildName)
35 unset(secondBuild)
36 unset(secondBuildName)
37
38 firstBuild = $$1
39 firstBuildName = $$2
40 secondBuild = $$3
41 secondBuildName = $$4
42
43 contains(TEMPLATE, subdirs) {
44 eval(sub_$${firstBuildName}.target = $$firstBuild)
45 export(sub_$${firstBuildName}.target)
46 eval(sub_$${firstBuildName}.CONFIG = recursive)
47 export(sub_$${firstBuildName}.CONFIG)
48 eval(sub_$${secondBuildName}.target = $$secondBuild)
49 export(sub_$${secondBuildName}.target)
50 eval(sub_$${secondBuildName}.CONFIG = recursive)
51 export(sub_$${secondBuildName}.CONFIG)
52 QMAKE_EXTRA_TARGETS += sub_$${firstBuildName} sub_$${secondBuildName}
53 export(QMAKE_EXTRA_TARGETS)
54 } else:!build_pass {
55 first_BUILDS =
56 second_BUILDS =
57 suffix_BUILDS = Build
58
59 isEmpty(BUILDS): BUILDPERMUTATIONS = $$suffix_BUILDS
60 else: BUILDPERMUTATIONS = $$BUILDS
61
62 for(permutation, BUILDPERMUTATIONS) {
63 permutation ~= s/$${suffix_BUILDS}$//
64 isEmpty(permutation): permutationName =
65 else: permutationName = -$$permutation
66 # Makefile target rule
67 eval($${firstBuildName}$${permutation}.target = $${firstBuild}$$lower($${permutationName}))
68 export($${firstBuildName}$${permutation}.target)
69 # IDE name
70 eval($${firstBuildName}$${permutation}.name = $${firstBuildName}$${permutationName})
71 export($${firstBuildName}$${permutation}.name)
72 # prl import CONFIG option
73 eval($${firstBuildName}$${permutation}.PRL_CONFIG = $${firstBuild}$${permutation})
74 export($${firstBuildName}$${permutation}.PRL_CONFIG)
75 # Individual CONFIG option
76 eval($${firstBuildName}$${permutation}.CONFIG = $${firstBuild} $${firstBuildName}Build $$eval($${permutation}.CONFIG))
77 export($${firstBuildName}$${permutation}.CONFIG)
78
79 eval($${secondBuildName}$${permutation}.target = $${secondBuild}$$lower($${permutationName}))
80 export($${secondBuildName}$${permutation}.target)
81 eval($${secondBuildName}$${permutation}.name = $${secondBuildName}$${permutationName})
82 export($${secondBuildName}$${permutation}.name)
83 eval($${secondBuildName}$${permutation}.PRL_CONFIG = $${secondBuild}$${permutation})
84 export($${secondBuildName}$${permutation}.PRL_CONFIG)
85 eval($${secondBuildName}$${permutation}.CONFIG = $${secondBuild} $${secondBuildName}Build $$eval($${permutation}.CONFIG))
86 export($${secondBuildName}$${permutation}.CONFIG)
87
88 first_BUILDS += $${firstBuildName}$${permutation}
89 second_BUILDS += $${secondBuildName}$${permutation}
90 }
91
92 # A mutual exclusive block.
93 CONFIG($${firstBuild}, $${firstBuild}|$${secondBuild}): BUILDS = $$first_BUILDS $$second_BUILDS
94 else: BUILDS = $$second_BUILDS $$first_BUILDS
95 export(BUILDS)
96 } else {
97 eval($${firstBuildName}Build:fixExclusiveOutputDirs($$firstBuild, $$secondBuild, false))
98 eval($${secondBuildName}Build:fixExclusiveOutputDirs($$secondBuild, $$firstBuild, false))
99 }
100 return(true)
101}
Note: See TracBrowser for help on using the repository browser.