bake-toolkit 2.20.4 → 2.21.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (139) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile.rb +3 -3
  3. data/bin/bake +46 -46
  4. data/bin/bake-doc +11 -11
  5. data/bin/bakery +179 -179
  6. data/bin/createVSProjects +213 -213
  7. data/documentation/_build/html/_sources/changelog.txt +456 -451
  8. data/documentation/_build/html/_sources/commandline/commandline.txt +107 -107
  9. data/documentation/_build/html/_sources/concepts/build_hierarchy.txt +34 -34
  10. data/documentation/_build/html/_sources/concepts/concepts.txt +14 -14
  11. data/documentation/_build/html/_sources/concepts/inject.txt +65 -65
  12. data/documentation/_build/html/_sources/concepts/link_order.txt +91 -91
  13. data/documentation/_build/html/_sources/concepts/prebuild.txt +56 -56
  14. data/documentation/_build/html/_sources/concepts/the_main_project.txt +45 -45
  15. data/documentation/_build/html/_sources/concepts/the_project_meta_file.txt +72 -72
  16. data/documentation/_build/html/_sources/ide/eclipse/eclipse.txt +25 -25
  17. data/documentation/_build/html/_sources/ide/eclipse/how_to_convert_existing_cdt_workspace.txt +31 -31
  18. data/documentation/_build/html/_sources/ide/eclipse/how_to_create_a_new_project_in_eclipse.txt +18 -18
  19. data/documentation/_build/html/_sources/ide/eclipse/how_to_create_a_workspace_in_eclipse.txt +27 -27
  20. data/documentation/_build/html/_sources/ide/eclipse/how_to_debug_in_eclipse.txt +38 -38
  21. data/documentation/_build/html/_sources/ide/eclipse/how_to_install_eclipse_plugin.txt +44 -44
  22. data/documentation/_build/html/_sources/ide/eclipse/how_to_use_bake_in_eclipse.txt +86 -86
  23. data/documentation/_build/html/_sources/ide/ide_integrations.txt +8 -8
  24. data/documentation/_build/html/_sources/ide/vs/how_to_create_vs_projects.txt +15 -15
  25. data/documentation/_build/html/_sources/ide/vs/how_to_debug_in_vs.txt +35 -35
  26. data/documentation/_build/html/_sources/ide/vs/how_to_used_bake_in_vs.txt +35 -35
  27. data/documentation/_build/html/_sources/ide/vs/vs.txt +10 -10
  28. data/documentation/_build/html/_sources/ide/vs/vs_install.txt +43 -43
  29. data/documentation/_build/html/_sources/index.txt +33 -33
  30. data/documentation/_build/html/_sources/install/install_bake.txt +112 -112
  31. data/documentation/_build/html/_sources/internal.txt +50 -50
  32. data/documentation/_build/html/_sources/known_issues.txt +9 -9
  33. data/documentation/_build/html/_sources/license.txt +4 -4
  34. data/documentation/_build/html/_sources/performance/performance.txt +104 -104
  35. data/documentation/_build/html/_sources/quickstart/quickstart.txt +70 -70
  36. data/documentation/_build/html/_sources/syntax/adapt_configs.txt +143 -143
  37. data/documentation/_build/html/_sources/syntax/auto_adjustment.txt +43 -43
  38. data/documentation/_build/html/_sources/syntax/derive_configs.txt +93 -94
  39. data/documentation/_build/html/_sources/syntax/project_meta_syntax.txt +19 -19
  40. data/documentation/_build/html/_sources/syntax/syntax.txt +11 -11
  41. data/documentation/_build/html/_sources/syntax/variable_substitutions.txt +147 -147
  42. data/documentation/_build/html/_sources/tips_and_tricks/dot.txt +34 -34
  43. data/documentation/_build/html/_sources/tips_and_tricks/how_to_use_bake_with_cygwin.txt +62 -62
  44. data/documentation/_build/html/_sources/tips_and_tricks/static_code_analysis.txt +122 -122
  45. data/documentation/_build/html/_sources/tips_and_tricks/the_bakery.txt +72 -72
  46. data/documentation/_build/html/_sources/tips_and_tricks/the_clang.txt +43 -43
  47. data/documentation/_build/html/_sources/tips_and_tricks/tips_and_tricks.txt +34 -34
  48. data/documentation/_build/html/_sources/why_bake/why_bake.txt +40 -40
  49. data/documentation/_build/html/changelog.html +7 -0
  50. data/documentation/_build/html/commandline/commandline.html +2 -2
  51. data/documentation/_build/html/concepts/link_order.html +2 -2
  52. data/documentation/_build/html/concepts/prebuild.html +2 -2
  53. data/documentation/_build/html/index.html +4 -4
  54. data/documentation/_build/html/performance/performance.html +2 -2
  55. data/documentation/_build/html/searchindex.js +1 -1
  56. data/documentation/_build/html/syntax/adapt_configs.html +2 -2
  57. data/documentation/_build/html/syntax/syntax.html +2 -2
  58. data/documentation/_build/html/tips_and_tricks/the_clang.html +2 -2
  59. data/documentation/_build/html/why_bake/why_bake.html +2 -2
  60. data/lib/adapt/config/loader.rb +112 -112
  61. data/lib/bake/bundle.rb +158 -158
  62. data/lib/bake/cache.rb +179 -180
  63. data/lib/bake/config/checks.rb +68 -68
  64. data/lib/bake/config/loader.rb +363 -363
  65. data/lib/bake/libElement.rb +176 -176
  66. data/lib/bake/mergeConfig.rb +208 -208
  67. data/lib/bake/model/language.rb +45 -45
  68. data/lib/bake/model/loader.rb +99 -99
  69. data/lib/bake/model/metamodel.rb +307 -307
  70. data/lib/bake/model/metamodel_ext.rb +27 -27
  71. data/lib/bake/options/create.rb +95 -95
  72. data/lib/bake/options/options.rb +315 -310
  73. data/lib/bake/options/showDoc.rb +20 -20
  74. data/lib/bake/options/showLicense.rb +9 -9
  75. data/lib/bake/options/showToolchains.rb +38 -38
  76. data/lib/bake/options/usage.rb +79 -68
  77. data/lib/bake/subst.rb +313 -313
  78. data/lib/bake/toolchain/clang.rb +44 -44
  79. data/lib/bake/toolchain/clang_analyze.rb +31 -31
  80. data/lib/bake/toolchain/colorizing_formatter.rb +125 -125
  81. data/lib/bake/toolchain/diab.rb +53 -53
  82. data/lib/bake/toolchain/errorparser/diab_compiler_error_parser.rb +40 -40
  83. data/lib/bake/toolchain/errorparser/diab_linker_error_parser.rb +41 -41
  84. data/lib/bake/toolchain/errorparser/error_parser.rb +71 -71
  85. data/lib/bake/toolchain/errorparser/gcc_compiler_error_parser.rb +35 -35
  86. data/lib/bake/toolchain/errorparser/gcc_linker_error_parser.rb +35 -35
  87. data/lib/bake/toolchain/errorparser/greenhills_compiler_error_parser.rb +32 -32
  88. data/lib/bake/toolchain/errorparser/greenhills_linker_error_parser.rb +44 -44
  89. data/lib/bake/toolchain/errorparser/keil_compiler_error_parser.rb +40 -40
  90. data/lib/bake/toolchain/errorparser/keil_linker_error_parser.rb +30 -30
  91. data/lib/bake/toolchain/errorparser/lint_error_parser.rb +34 -34
  92. data/lib/bake/toolchain/errorparser/msvc_compiler_error_parser.rb +63 -63
  93. data/lib/bake/toolchain/errorparser/msvc_linker_error_parser.rb +42 -42
  94. data/lib/bake/toolchain/errorparser/process_output.rb +2 -2
  95. data/lib/bake/toolchain/errorparser/ti_compiler_error_parser.rb +30 -30
  96. data/lib/bake/toolchain/errorparser/ti_linker_error_parser.rb +30 -30
  97. data/lib/bake/toolchain/gcc.rb +49 -49
  98. data/lib/bake/toolchain/gcc_env.rb +55 -55
  99. data/lib/bake/toolchain/greenhills.rb +52 -52
  100. data/lib/bake/toolchain/keil.rb +53 -53
  101. data/lib/bake/toolchain/lint.rb +20 -20
  102. data/lib/bake/toolchain/msvc.rb +58 -58
  103. data/lib/bake/toolchain/provider.rb +146 -146
  104. data/lib/bake/toolchain/ti.rb +47 -47
  105. data/lib/bake/util.rb +149 -149
  106. data/lib/bakery/buildPattern.rb +24 -24
  107. data/lib/bakery/model/language.rb +22 -22
  108. data/lib/bakery/model/loader.rb +55 -55
  109. data/lib/bakery/model/metamodel.rb +48 -48
  110. data/lib/bakery/options/options.rb +87 -87
  111. data/lib/bakery/toBake.rb +81 -81
  112. data/lib/blocks/block.rb +324 -324
  113. data/lib/blocks/blockBase.rb +204 -204
  114. data/lib/blocks/commandLine.rb +38 -38
  115. data/lib/blocks/compile.rb +529 -528
  116. data/lib/blocks/convert.rb +41 -41
  117. data/lib/blocks/docu.rb +30 -30
  118. data/lib/blocks/executable.rb +174 -174
  119. data/lib/blocks/has_execute_command.rb +31 -31
  120. data/lib/blocks/library.rb +114 -114
  121. data/lib/blocks/lint.rb +56 -56
  122. data/lib/blocks/makefile.rb +100 -100
  123. data/lib/blocks/showIncludes.rb +140 -125
  124. data/lib/common/abortException.rb +4 -4
  125. data/lib/common/cleanup.rb +10 -10
  126. data/lib/common/exit_helper.rb +38 -38
  127. data/lib/common/ext/file.rb +88 -88
  128. data/lib/common/ext/rtext.rb +11 -11
  129. data/lib/common/ext/stdout.rb +45 -45
  130. data/lib/common/ide_interface.rb +194 -194
  131. data/lib/common/options/parser.rb +95 -85
  132. data/lib/common/process.rb +64 -64
  133. data/lib/common/utils.rb +52 -52
  134. data/lib/common/version.rb +31 -23
  135. data/lib/multithread/job.rb +44 -44
  136. data/lib/tocxx.rb +558 -555
  137. data/lib/vs/options.rb +69 -69
  138. data/license.txt +90 -90
  139. metadata +2 -2
@@ -1,143 +1,143 @@
1
- Adapt configs
2
- =============
3
-
4
- Introduction
5
- ************
6
-
7
- If you want to manipulate existing configs without changing them, you can "adapt" them via command line.
8
-
9
- .. code-block:: console
10
-
11
- User@Host:~$ bake test --adapt abc
12
-
13
- bake searches for abc/Adapt.meta within the workspace roots. If found, the configs from the adapt file are parsed:
14
-
15
- .. code-block:: text
16
-
17
- Adapt {
18
- ExecutableConfig ... # 0..n
19
- LibraryConfig ... # 0..n
20
- CustomConfig ... # 0..n
21
- }
22
-
23
- Here is an example to change the DefaultToolchain
24
-
25
- .. code-block:: text
26
-
27
- Adapt {
28
- ExecutableConfig test, project: __MAIN__, type: replace {
29
- DefaultToolchain GCC
30
- }
31
- }
32
-
33
- Effectiveness
34
- *************
35
-
36
- The adapt configs can be applied to all configs from regular build. This can be controlled by the config names and the project attributes. The example above
37
- is adapted only to the config "test" of the main project. __MAIN__ and __ALL__ are keywords. __MAIN__ means the main project or config, __ALL__ means all
38
- projects or configs. If you want to apply the changes only to the top level config, write:
39
-
40
- .. code-block:: text
41
-
42
- ExecutableConfig __MAIN__, project: __MAIN__, ...
43
-
44
- If you want to apply the changes to all configs, write:
45
-
46
- .. code-block:: text
47
-
48
- ExecutableConfig __ALL__, project: __ALL__, ...
49
-
50
- It is possible to mix the keywords with reals project or config names.
51
-
52
- Occurrences
53
- ***********
54
-
55
- You can specify more configs in one adapt file and you can specify more than one adapt file:
56
-
57
- .. code-block:: text
58
-
59
- Adapt {
60
- ExecutableConfig ..., project: ..., type: ... {
61
- ...
62
- }
63
- ExecutableConfig ..., project: ..., type: ... {
64
- ...
65
- }
66
- LibraryConfig ..., project: ..., type: ... {
67
- ...
68
- }
69
- ...
70
- }
71
-
72
- .. code-block:: console
73
-
74
- User@Host:~$ bake test --adapt abc --adapt xy
75
-
76
- They will be applied in the specified order.
77
-
78
- Types
79
- *****
80
-
81
- It is possible to specify the type of adaption:
82
-
83
- .. code-block:: text
84
-
85
- ExecutableConfig ..., type: replace
86
-
87
- The type can be "replace", "remove" or "extend".
88
-
89
- Type: extend
90
- ------------
91
-
92
- This works exactly like for :doc:`derive_configs`.
93
-
94
- Type: remove
95
- ------------
96
-
97
- If parent elements can be found which matches to the child elements, they will be removed.
98
-
99
- Example project config:
100
-
101
- .. code-block:: text
102
-
103
- ExecutableConfig test {
104
- DefaultToolchain GCC
105
- }
106
-
107
- Example adapt configs:
108
-
109
- .. code-block:: text
110
-
111
- ExecutableConfig __ALL__, project: __ALL__, type: remove {
112
- DefaultToolchain # remove ok
113
- }
114
-
115
- ExecutableConfig __ALL__, project: __ALL__, type: remove {
116
- DefaultToolchain GCC # remove ok
117
- }
118
-
119
- ExecutableConfig __ALL__, project: __ALL__, type: remove {
120
- DefaultToolchain Diab # remove NOT ok
121
- }
122
-
123
- ExecutableConfig __ALL__, project: __ALL__, type: remove {
124
- DefaultToolchain GCC, eclipseOrder: true # remove NOT ok
125
- }
126
-
127
- Type: replace
128
- -------------
129
-
130
- This is for convenience. "replace" will remove all elements with the same type and extends the configs.
131
-
132
- Example:
133
-
134
- .. code-block:: text
135
-
136
- ExecutableConfig __ALL__, project: __ALL__, type: replace {
137
- Files "*.cpp"
138
- DefaultToolchain GCC {
139
- Linker command: "link.exe"
140
- }
141
- }
142
-
143
- This removes all "Files" and the "DefaultToolchain" from the original config regardless their attributes and replaces them by the elements of the adapt config.
1
+ Adapt configs
2
+ =============
3
+
4
+ Introduction
5
+ ************
6
+
7
+ If you want to manipulate existing configs without changing them, you can "adapt" them via command line.
8
+
9
+ .. code-block:: console
10
+
11
+ User@Host:~$ bake test --adapt abc
12
+
13
+ bake searches for abc/Adapt.meta within the workspace roots. If found, the configs from the adapt file are parsed:
14
+
15
+ .. code-block:: text
16
+
17
+ Adapt {
18
+ ExecutableConfig ... # 0..n
19
+ LibraryConfig ... # 0..n
20
+ CustomConfig ... # 0..n
21
+ }
22
+
23
+ Here is an example to change the DefaultToolchain
24
+
25
+ .. code-block:: text
26
+
27
+ Adapt {
28
+ ExecutableConfig test, project: __MAIN__, type: replace {
29
+ DefaultToolchain GCC
30
+ }
31
+ }
32
+
33
+ Effectiveness
34
+ *************
35
+
36
+ The adapt configs can be applied to all configs from regular build. This can be controlled by the config names and the project attributes. The example above
37
+ is adapted only to the config "test" of the main project. __MAIN__ and __ALL__ are keywords. __MAIN__ means the main project or config, __ALL__ means all
38
+ projects or configs. If you want to apply the changes only to the top level config, write:
39
+
40
+ .. code-block:: text
41
+
42
+ ExecutableConfig __MAIN__, project: __MAIN__, ...
43
+
44
+ If you want to apply the changes to all configs, write:
45
+
46
+ .. code-block:: text
47
+
48
+ ExecutableConfig __ALL__, project: __ALL__, ...
49
+
50
+ It is possible to mix the keywords with reals project or config names.
51
+
52
+ Occurrences
53
+ ***********
54
+
55
+ You can specify more configs in one adapt file and you can specify more than one adapt file:
56
+
57
+ .. code-block:: text
58
+
59
+ Adapt {
60
+ ExecutableConfig ..., project: ..., type: ... {
61
+ ...
62
+ }
63
+ ExecutableConfig ..., project: ..., type: ... {
64
+ ...
65
+ }
66
+ LibraryConfig ..., project: ..., type: ... {
67
+ ...
68
+ }
69
+ ...
70
+ }
71
+
72
+ .. code-block:: console
73
+
74
+ User@Host:~$ bake test --adapt abc --adapt xy
75
+
76
+ They will be applied in the specified order.
77
+
78
+ Types
79
+ *****
80
+
81
+ It is possible to specify the type of adaption:
82
+
83
+ .. code-block:: text
84
+
85
+ ExecutableConfig ..., type: replace
86
+
87
+ The type can be "replace", "remove" or "extend".
88
+
89
+ Type: extend
90
+ ------------
91
+
92
+ This works exactly like for :doc:`derive_configs`.
93
+
94
+ Type: remove
95
+ ------------
96
+
97
+ If parent elements can be found which matches to the child elements, they will be removed.
98
+
99
+ Example project config:
100
+
101
+ .. code-block:: text
102
+
103
+ ExecutableConfig test {
104
+ DefaultToolchain GCC
105
+ }
106
+
107
+ Example adapt configs:
108
+
109
+ .. code-block:: text
110
+
111
+ ExecutableConfig __ALL__, project: __ALL__, type: remove {
112
+ DefaultToolchain # remove ok
113
+ }
114
+
115
+ ExecutableConfig __ALL__, project: __ALL__, type: remove {
116
+ DefaultToolchain GCC # remove ok
117
+ }
118
+
119
+ ExecutableConfig __ALL__, project: __ALL__, type: remove {
120
+ DefaultToolchain Diab # remove NOT ok
121
+ }
122
+
123
+ ExecutableConfig __ALL__, project: __ALL__, type: remove {
124
+ DefaultToolchain GCC, eclipseOrder: true # remove NOT ok
125
+ }
126
+
127
+ Type: replace
128
+ -------------
129
+
130
+ This is for convenience. "replace" will remove all elements with the same type and extends the configs.
131
+
132
+ Example:
133
+
134
+ .. code-block:: text
135
+
136
+ ExecutableConfig __ALL__, project: __ALL__, type: replace {
137
+ Files "*.cpp"
138
+ DefaultToolchain GCC {
139
+ Linker command: "link.exe"
140
+ }
141
+ }
142
+
143
+ This removes all "Files" and the "DefaultToolchain" from the original config regardless their attributes and replaces them by the elements of the adapt config.
@@ -1,43 +1,43 @@
1
- Auto-adjustment of paths to existing projects
2
- =============================================
3
-
4
- If paths to other projects are needed, e.g. to "bootloaderUpdater", don't write a hard coded relative path like this:
5
-
6
- .. code-block:: text
7
-
8
- CommandLine "../bootloaderUpdater/tools/PrimaryBootloader2Include.exe
9
-
10
- If paths to other projects are needed, e.g. to "bootloaderUpdater" just reference it starting from the project folder.
11
-
12
- Example:
13
-
14
- .. code-block:: text
15
-
16
- CommandLine "bootloaderUpdater/tools/PrimaryBootloader2Include.exe
17
-
18
- or:
19
-
20
- .. code-block:: text
21
-
22
- IncludeDir "myProjectName/bootloaderUpdater/whatever"
23
-
24
-
25
-
26
- bake recognizes that the first part of the path is a valid project name and calculates the relative path to the project automatically.
27
- If you have the special case that the referenced project is contained in an other workspace root, you can use the
28
- `-w` parameter or you define a `roots.bake`.
29
-
30
- .. note::
31
-
32
- The path auto adjustment is applied for the following elements:
33
-
34
- * IncludeDir
35
-
36
- * ExternalLibrary
37
-
38
- * ExternalLibrarySearchPath
39
-
40
- * UserLibrary
41
-
42
- * CommandLine
43
-
1
+ Auto-adjustment of paths to existing projects
2
+ =============================================
3
+
4
+ If paths to other projects are needed, e.g. to "bootloaderUpdater", don't write a hard coded relative path like this:
5
+
6
+ .. code-block:: text
7
+
8
+ CommandLine "../bootloaderUpdater/tools/PrimaryBootloader2Include.exe
9
+
10
+ If paths to other projects are needed, e.g. to "bootloaderUpdater" just reference it starting from the project folder.
11
+
12
+ Example:
13
+
14
+ .. code-block:: text
15
+
16
+ CommandLine "bootloaderUpdater/tools/PrimaryBootloader2Include.exe
17
+
18
+ or:
19
+
20
+ .. code-block:: text
21
+
22
+ IncludeDir "myProjectName/bootloaderUpdater/whatever"
23
+
24
+
25
+
26
+ bake recognizes that the first part of the path is a valid project name and calculates the relative path to the project automatically.
27
+ If you have the special case that the referenced project is contained in an other workspace root, you can use the
28
+ `-w` parameter or you define a `roots.bake`.
29
+
30
+ .. note::
31
+
32
+ The path auto adjustment is applied for the following elements:
33
+
34
+ * IncludeDir
35
+
36
+ * ExternalLibrary
37
+
38
+ * ExternalLibrarySearchPath
39
+
40
+ * UserLibrary
41
+
42
+ * CommandLine
43
+
@@ -1,94 +1,93 @@
1
- Derive configs
2
- ==============
3
-
4
- bake supports deriving configs, which allows you to put repetetive settings in a base config.
5
-
6
- Deriving a config
7
- *****************
8
-
9
- Derving a config in bake is pretty straight forward, and looks like this:
10
-
11
- .. code-block:: text
12
-
13
- ExecutableConfig A
14
- LibraryConfig B, extends: A
15
- CustomConfig C, extends: B
16
- ExecutableConfig D, extends: C
17
-
18
- .. note::
19
-
20
- The config type of the parent config does not matter, but only settings which are valid in BOTH configs will be inherited.
21
- In the example above D gets the dependencies from A, because "Dependency" is valid in all configs, but D does not get
22
- the "Files" from A and B, because "Files" is not valid in CustomConfig.
23
-
24
-
25
- Inheritance implications
26
- ************************
27
-
28
- In general it is very easy.
29
-
30
- - Elements which can exist more than once (e.g. "Files"), are simply concatenated. First the parent elements, then the client elements.
31
- - Elements which can exist only once:
32
-
33
- - if it exists in EITHER child OR parent, use this one
34
- - is it exists in BOTH, attributes are merged (child attributes have high priority) and sub elements are inherited recursively
35
-
36
- The following example
37
-
38
- .. code-block:: text
39
-
40
- ExecutableConfig A {
41
- Files "x.cpp"
42
- Files "y.cpp"
43
- ArtifactName "z.exe"
44
- DefaultToolchain GCC {
45
- Linker {
46
- Flags "-O3"
47
- }
48
- }
49
- }
50
- ExecutableConfig B, extends: A {
51
- Files "z.cpp"
52
- IncludeDir "inc"
53
- ArtifactName "a.exe"
54
- DefaultToolchain Diab {
55
- Compiler CPP {
56
- Define "TEST"
57
- }
58
- }
59
- }
60
-
61
- results implicitly in:
62
-
63
- .. code-block:: text
64
-
65
- ExecutableConfig B {
66
- Files "x.cpp"
67
- Files "y.cpp"
68
- Files "z.cpp"
69
- IncludeDir "inc"
70
- ArtifactName "a.exe"
71
- DefaultToolchain Diab {
72
- Compiler CPP {
73
- Define "TEST"
74
- }
75
- Linker {
76
- Flags "-O3"
77
- }
78
- }
79
- }
80
-
81
-
82
- Multiple inheritance
83
- ********************
84
-
85
- It is possible to derive from several projects:
86
-
87
- .. code-block:: text
88
-
89
- ExecutableConfig A
90
- LibraryConfig B
91
- ExecutableConfig C, extends: "A, B"
92
-
93
- "extends" defines a comma separated list. The merge will be performed with all parent configs.
94
-
1
+ Derive configs
2
+ ==============
3
+
4
+ bake supports deriving configs, which allows you to put repetetive settings in a base config.
5
+
6
+ Deriving a config
7
+ *****************
8
+
9
+ Derving a config in bake is pretty straight forward, and looks like this:
10
+
11
+ .. code-block:: text
12
+
13
+ ExecutableConfig A
14
+ LibraryConfig B, extends: A
15
+ CustomConfig C, extends: B
16
+ ExecutableConfig D, extends: C
17
+
18
+ .. note::
19
+
20
+ The config type of the parent config does not matter, but only settings which are valid in BOTH configs will be inherited.
21
+ In the example above D gets the dependencies from A, because "Dependency" is valid in all configs, but D does not get
22
+ the "Files" from A and B, because "Files" is not valid in CustomConfig.
23
+
24
+
25
+ Inheritance implications
26
+ ************************
27
+
28
+ In general it is very easy.
29
+
30
+ - Elements which can exist more than once (e.g. "Files"), are simply concatenated. First the parent elements, then the client elements.
31
+ - Elements which can exist only once:
32
+
33
+ - if it exists in EITHER child OR parent, use this one
34
+ - is it exists in BOTH, attributes are merged (child attributes have high priority) and sub elements are inherited recursively
35
+
36
+ The following example
37
+
38
+ .. code-block:: text
39
+
40
+ ExecutableConfig A {
41
+ Files "x.cpp"
42
+ Files "y.cpp"
43
+ ArtifactName "z.exe"
44
+ DefaultToolchain GCC {
45
+ Linker {
46
+ Flags "-O3"
47
+ }
48
+ }
49
+ }
50
+ ExecutableConfig B, extends: A {
51
+ Files "z.cpp"
52
+ IncludeDir "inc"
53
+ ArtifactName "a.exe"
54
+ DefaultToolchain Diab {
55
+ Compiler CPP {
56
+ Define "TEST"
57
+ }
58
+ }
59
+ }
60
+
61
+ results implicitly in:
62
+
63
+ .. code-block:: text
64
+
65
+ ExecutableConfig B {
66
+ Files "x.cpp"
67
+ Files "y.cpp"
68
+ Files "z.cpp"
69
+ IncludeDir "inc"
70
+ ArtifactName "a.exe"
71
+ DefaultToolchain Diab {
72
+ Compiler CPP {
73
+ Define "TEST"
74
+ }
75
+ Linker {
76
+ Flags "-O3"
77
+ }
78
+ }
79
+ }
80
+
81
+
82
+ Multiple inheritance
83
+ ********************
84
+
85
+ It is possible to derive from several projects:
86
+
87
+ .. code-block:: text
88
+
89
+ ExecutableConfig A
90
+ LibraryConfig B
91
+ ExecutableConfig C, extends: "A, B"
92
+
93
+ "extends" defines a comma separated list. The merge will be performed with all parent configs.