mtbuild 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +26 -0
- data/README.md +58 -35
- data/lib/mtbuild/application.rb +19 -2
- data/lib/mtbuild/toolchains/gcc.rb +5 -5
- data/lib/mtbuild/utils.rb +4 -1
- data/lib/mtbuild/version.rb +1 -1
- data/lib/mtbuild/workspace.rb +12 -2
- metadata +20 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: cba59381b91089bdd3e1ce4fcf93b70e7599c8f9
|
|
4
|
+
data.tar.gz: 7f084e0b1d50e2fa1e895128edabf5cfc35a3305
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 2a655658ed9b12d20c6a7367267e4c7c0ae391109aa064be9d31534e7774eddfdde9472e9faf464aa02011b248b49325e0713dee7833b20654c679c9eb1e6b56
|
|
7
|
+
data.tar.gz: 1196a725a913057fa61146273d865330ea0c01041dbf55994f5df5dc69e5ea7ef51bc02585d91def6169e0d0b6788d2e34f27c70a9d899be1afb11b0a6adb1a8
|
data/CHANGES.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# Release Notes #
|
|
2
2
|
|
|
3
|
+
## MTBuild 0.0.8 ##
|
|
4
|
+
|
|
5
|
+
### Changes ###
|
|
6
|
+
|
|
7
|
+
* MTBuild now uses 'mtbuildfile', 'MTBuildfile', 'mtbuildfile.rb', or 'MTBuildfile.rb'
|
|
8
|
+
instead of the standard rakefile names. This was changed to avoid confusion
|
|
9
|
+
since MTBuild files don't work with the "rake" command.
|
|
10
|
+
* When merging project configurations with workspace defaults, MTBuild now
|
|
11
|
+
merges any arrays using the union operator. This allows projects to extend
|
|
12
|
+
more default workspace configuration.
|
|
13
|
+
* MTBuild now allows strings or arrays for toolchain settings. If arrays are
|
|
14
|
+
used, project configurations will be merged with any default workspace
|
|
15
|
+
configurations. For example, a workspace could declare default cflags as
|
|
16
|
+
and array of individual flags. A project could then declare its own cflags,
|
|
17
|
+
which MTBuild would merge with the workspace defaults instead of
|
|
18
|
+
overriding them.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
## MTBuild 0.0.7 ##
|
|
22
|
+
|
|
23
|
+
### Changes ###
|
|
24
|
+
|
|
25
|
+
* GCC-based toolchains can now automatically handle renamed header files.
|
|
26
|
+
Previously, if you renamed a header file, you had to manually clean before building.
|
|
27
|
+
|
|
28
|
+
|
|
3
29
|
## MTBuild 0.0.6 ##
|
|
4
30
|
|
|
5
31
|
### Changes ###
|
data/README.md
CHANGED
|
@@ -16,7 +16,7 @@ MTBuild is distributed as a gem. Install it with:
|
|
|
16
16
|
gem install mtbuild
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
To build with MTBuild, switch to a folder containing
|
|
19
|
+
To build with MTBuild, switch to a folder containing an mtbuildfile and run:
|
|
20
20
|
|
|
21
21
|
```Shell
|
|
22
22
|
mtbuild
|
|
@@ -30,7 +30,7 @@ rake install
|
|
|
30
30
|
|
|
31
31
|
### Getting Started ###
|
|
32
32
|
|
|
33
|
-
Here's an example of a very simple
|
|
33
|
+
Here's an example of a very simple mtbuildfile.rb that defines an MTBuild project:
|
|
34
34
|
|
|
35
35
|
```Ruby
|
|
36
36
|
application_project :MyApp, File.dirname(__FILE__) do |app|
|
|
@@ -50,9 +50,9 @@ application_project :MyApp, File.dirname(__FILE__) do |app|
|
|
|
50
50
|
end
|
|
51
51
|
```
|
|
52
52
|
|
|
53
|
-
This
|
|
53
|
+
This mtbuildfile builds an application called "MyApp" (```application_project :MyApp```).
|
|
54
54
|
|
|
55
|
-
The project folder is set to the
|
|
55
|
+
The project folder is set to the mtbuildfile's containing folder (```File.dirname(__FILE__)```). All folder references in the mtbuildfile are relative to this folder.
|
|
56
56
|
|
|
57
57
|
The MyApp project has one configuration called "Debug" (```app.add_configuration :Debug,```).
|
|
58
58
|
|
|
@@ -95,9 +95,9 @@ Here is an example of our preferred structure for a complex application that is
|
|
|
95
95
|
|
|
96
96
|
```
|
|
97
97
|
Workspace Folder
|
|
98
|
-
├
|
|
98
|
+
├ mtbuildfile.rb <-- workspace mtbuildfile
|
|
99
99
|
├ Library Project Folder
|
|
100
|
-
│ ├
|
|
100
|
+
│ ├ mtbuildfile.rb <-- project mtbuildfile
|
|
101
101
|
│ ├ include <-- public headers
|
|
102
102
|
│ │ └ *.h
|
|
103
103
|
│ ├ src <-- private headers and source
|
|
@@ -105,7 +105,7 @@ Workspace Folder
|
|
|
105
105
|
│ └ test <-- unit tests
|
|
106
106
|
│ └ *.c/*.cpp
|
|
107
107
|
└ Application Project Folder
|
|
108
|
-
├
|
|
108
|
+
├ mtbuildfile.rb <-- project mtbuildfile
|
|
109
109
|
├ src <-- headers and source
|
|
110
110
|
│ └ *.h/*.c/*.cpp
|
|
111
111
|
└ test <-- unit tests
|
|
@@ -118,22 +118,22 @@ Here is an example of a simpler application that is self-contained:
|
|
|
118
118
|
|
|
119
119
|
```
|
|
120
120
|
Application Project Folder
|
|
121
|
-
├
|
|
121
|
+
├ mtbuildfile.rb <-- project+workspace mtbuildfile
|
|
122
122
|
├ src <-- headers and source
|
|
123
123
|
│ └ *.h/*.c/*.cpp
|
|
124
124
|
└ test <-- unit tests
|
|
125
125
|
└ *.h/*.c/*.cpp
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
-
The project and (optional) workspace are defined in a single
|
|
128
|
+
The project and (optional) workspace are defined in a single mtbuildfile. There are no public headers, so everything goes into the "src" folder, but tests might still be separated into a "test" folder.
|
|
129
129
|
|
|
130
|
-
####
|
|
130
|
+
#### mtbuildfiles ####
|
|
131
131
|
|
|
132
|
-
MTBuild uses Rake. MTBuild projects and workspaces are defined using
|
|
132
|
+
MTBuild uses Rake. MTBuild projects and workspaces are defined using mtbuildfiles. MTBuild offers new syntax to learn for defining projects and workspaces, but this syntax simply results in the generation of standard Rake tasks. Therefore, Rake is highly leveraged--if you encounter a build scenario that MTBuild doesn't quite handle, you can usually drop down to the Rake level and make it work.
|
|
133
133
|
|
|
134
134
|
#### Building ####
|
|
135
135
|
|
|
136
|
-
Building is as simple as invoking ```mtbuild``` in a folder containing a
|
|
136
|
+
Building is as simple as invoking ```mtbuild``` in a folder containing a mtbuildfile. Under the hood, MTBuild pulls in the MTBuild infrastructure and then invokes Rake.
|
|
137
137
|
|
|
138
138
|
#### Project Hierarchy ####
|
|
139
139
|
|
|
@@ -183,9 +183,9 @@ MTBuild builds only the first workspace it finds. If a workspace includes a proj
|
|
|
183
183
|
|
|
184
184
|
###### Simple Workspace Example #####
|
|
185
185
|
|
|
186
|
-
|
|
186
|
+
mtbuildfile.rb:
|
|
187
187
|
|
|
188
|
-
This defines a workspace that includes the "MyLibrary" and "MyApp" projects. The projects are presumed to be defined in their own
|
|
188
|
+
This defines a workspace that includes the "MyLibrary" and "MyApp" projects. The projects are presumed to be defined in their own mtbuildfiles inside sub-folders called "MyLibrary" and "MyApp":
|
|
189
189
|
|
|
190
190
|
```Ruby
|
|
191
191
|
workspace :AppWithLibrary, File.dirname(__FILE__) do |w|
|
|
@@ -196,9 +196,9 @@ end
|
|
|
196
196
|
|
|
197
197
|
###### Project Plus Workspace Example #####
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
mtbuildfile.rb:
|
|
200
200
|
|
|
201
|
-
This defines a workspace that includes the MyLibrary project, which is defined in the same
|
|
201
|
+
This defines a workspace that includes the MyLibrary project, which is defined in the same mtbuildfile. When a project is defined in the same mtbuildfile, it does not need to be explicitly added to the workspace (in this particular example, the workspace isn't very useful):
|
|
202
202
|
|
|
203
203
|
```Ruby
|
|
204
204
|
workspace :MyWorkspace, File.dirname(__FILE__) do |w|
|
|
@@ -216,9 +216,9 @@ end
|
|
|
216
216
|
|
|
217
217
|
###### Project Plus Workspace With Defaults Example #####
|
|
218
218
|
|
|
219
|
-
|
|
219
|
+
mtbuildfile.rb:
|
|
220
220
|
|
|
221
|
-
This defines a workspace that includes the MyLibrary project, which is defined in the same
|
|
221
|
+
This defines a workspace that includes the MyLibrary project, which is defined in the same mtbuildfile. The workspace provides a default toolchain for the "Debug" configuration. A higher-level workspace would override this with its own defaults:
|
|
222
222
|
|
|
223
223
|
```Ruby
|
|
224
224
|
workspace :MyLibrary, File.dirname(__FILE__) do |w|
|
|
@@ -253,7 +253,7 @@ Using configuration headers to configure libraries is such a bad idea that MTBui
|
|
|
253
253
|
|
|
254
254
|
###### Automatic Library Dependencies Example #####
|
|
255
255
|
|
|
256
|
-
Top-level
|
|
256
|
+
Top-level mtbuildfile.rb:
|
|
257
257
|
|
|
258
258
|
This defines a workspace that includes the "MyLibrary" and "MyApp" projects. Because MyApp will depend upon MyLibrary, the order that the projects are added does matter. MyLibrary needs to be added first.
|
|
259
259
|
|
|
@@ -264,7 +264,7 @@ workspace :AppWithLibrary, File.dirname(__FILE__) do |w|
|
|
|
264
264
|
end
|
|
265
265
|
```
|
|
266
266
|
|
|
267
|
-
MyLibrary/
|
|
267
|
+
MyLibrary/mtbuildfile.rb
|
|
268
268
|
|
|
269
269
|
This defines a library with one configuration called "Debug". The library's API headers are in a folder called "include". This library is foul and therefore has configuration headers for the Debug configuration in a folder called "config/Debug".
|
|
270
270
|
|
|
@@ -278,7 +278,7 @@ static_library_project :MyLibrary, File.dirname(__FILE__) do |lib|
|
|
|
278
278
|
end
|
|
279
279
|
```
|
|
280
280
|
|
|
281
|
-
MyApp/
|
|
281
|
+
MyApp/mtbuildfile.rb:
|
|
282
282
|
|
|
283
283
|
This defines an application with one configuration called "Debug". It uses two libraries. It takes advantage of the automatic library dependency feature to include and link with 'MyLibrary:Debug' simply by listing it as a dependency. It includes and links with a 3rd party by manually specifying the include path and the library file for the toolchain.
|
|
284
284
|
|
|
@@ -306,7 +306,7 @@ MTBuild Toolchains generate the individual compile, archival, and link tasks tha
|
|
|
306
306
|
|
|
307
307
|
#### Versioners ####
|
|
308
308
|
|
|
309
|
-
MTBuild Versioners update version information inside a source or header file. Versioner tasks are typically invoked on their own with a separate invocation of MTBuild. Versioners are an optional convenience intended for Continuous Integration servers. They're not strictly related to the build process; however, because it's common for CI servers to stamp version information into a file when building, it is convenient to be able to describe the files that need updating along with the rest of the project inside the
|
|
309
|
+
MTBuild Versioners update version information inside a source or header file. Versioner tasks are typically invoked on their own with a separate invocation of MTBuild. Versioners are an optional convenience intended for Continuous Integration servers. They're not strictly related to the build process; however, because it's common for CI servers to stamp version information into a file when building, it is convenient to be able to describe the files that need updating along with the rest of the project inside the mtbuildfile.
|
|
310
310
|
|
|
311
311
|
For example, the following project is configure to use the MindTribe Standard Version versioner:
|
|
312
312
|
|
|
@@ -329,7 +329,7 @@ mtbuild MyApp:Debug:Version[1,0,0,465,"1.0.0 (465)","f1e471b49a4bedc9cf5c6aabf88
|
|
|
329
329
|
|
|
330
330
|
#### DSL ####
|
|
331
331
|
|
|
332
|
-
MTBuild provides several Domain Specific Language (DSL) methods to wrap up the underlying MTBuild classes into a
|
|
332
|
+
MTBuild provides several Domain Specific Language (DSL) methods to wrap up the underlying MTBuild classes into a friendlier syntax. These are called out in the reference section below.
|
|
333
333
|
|
|
334
334
|
## Reference ##
|
|
335
335
|
|
|
@@ -343,12 +343,12 @@ workspace(workspace_name, workspace_folder, &configuration_block)
|
|
|
343
343
|
|
|
344
344
|
```workspace_name``` is your desired name for the workspace. This should be a symbol like ":MyWorkspace". It serves as a human-readable way to refer to the workspace.
|
|
345
345
|
|
|
346
|
-
```workspace_folder``` is the location of the workspace. Project folders should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the workspace's
|
|
346
|
+
```workspace_folder``` is the location of the workspace. Project folders should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the workspace's mtbuildfile.
|
|
347
347
|
|
|
348
348
|
For ```configuration_block```, you supply a block that takes one parameter. When MTBuild invokes the block, it will pass a Workspace object as this parameter. Inside the block, you can make Workspace calls on this object to add projects, set configuration defaults, etc.
|
|
349
349
|
|
|
350
350
|
#### add_project ####
|
|
351
|
-
Use ```add_project(project_location)``` inside of a workspace configuration block to add a project that lives inside a subfolder. The ```project_location``` parameter must be a subfolder of the workspace. If the project lives at the same level as the workspace, you should define it in the same
|
|
351
|
+
Use ```add_project(project_location)``` inside of a workspace configuration block to add a project that lives inside a subfolder. The ```project_location``` parameter must be a subfolder of the workspace. If the project lives at the same level as the workspace, you should define it in the same mtbuildfile as the workspace. In this case, the project will be implicitly added and you do not need to use ```add_project``` inside the workspace. See the **Project Plus Workspace Example** above for an example of a workspace and project that live at the same folder level.
|
|
352
352
|
|
|
353
353
|
#### add_default_tasks ####
|
|
354
354
|
Use ```add_default_tasks(default_tasks)``` inside of a workspace configuration block to add tasks that run when you invoke MTBuild with no arguments. The ```default_tasks``` parameter expects one or more (in an array) Rake tasks. If no default tasks are specified, then invoking MTBuild with no arguments will effectively do nothing.
|
|
@@ -367,7 +367,30 @@ workspace :MyWorkspace, File.dirname(__FILE__) do |w|
|
|
|
367
367
|
end
|
|
368
368
|
```
|
|
369
369
|
|
|
370
|
-
Any configuration value can be specified in the hash passed to ```set_configuration_defaults```. MTBuild merges workspace configuration value defaults with project configuration values. In the case of conflicting settings
|
|
370
|
+
Any configuration value can be specified in the hash passed to ```set_configuration_defaults```. MTBuild merges workspace configuration value defaults with project configuration values. In the case of conflicting settings (when both a workspace and a project define the same configuration value), one of two things can happen:
|
|
371
|
+
|
|
372
|
+
1. If the configuration value is a string in either the project or the workspace, the project configuration wins and completely overrides the workspace's value.
|
|
373
|
+
2. If the configuration value is an array in both the project or the workspace, the values will be merged using a union operation. This allows the workspace to define, for example, "cflags" to be used for compiling, which could then be extended with more flags inside of a specific project. However, there is currently no way for a project to remove array values that are defined in the workspace. If a project needs to do this, it will have to override the entire workspace configuration using a string for the value.
|
|
374
|
+
|
|
375
|
+
The following example selects the "gcc" toolchain and sets the C standard to C99 for any projects with a configuration named "Debug". The project then extends the "cflags" to add an optimization level. The resulting command line would be "-std=c99 -O0":
|
|
376
|
+
|
|
377
|
+
```Ruby
|
|
378
|
+
workspace :MyWorkspace, File.dirname(__FILE__) do |w|
|
|
379
|
+
w.set_configuration_defaults :Debug,
|
|
380
|
+
toolchain: toolchain(:gcc,
|
|
381
|
+
cflags: ['-std=c99'],
|
|
382
|
+
)
|
|
383
|
+
end
|
|
384
|
+
|
|
385
|
+
static_library_project :MyLibrary, File.dirname(__FILE__) do |lib|
|
|
386
|
+
lib.add_api_headers 'include'
|
|
387
|
+
lib.add_configuration :Debug,
|
|
388
|
+
sources: ['src/**/*.c']
|
|
389
|
+
toolchain: toolchain(:gcc,
|
|
390
|
+
cflags: ['-O0'],
|
|
391
|
+
)
|
|
392
|
+
end
|
|
393
|
+
```
|
|
371
394
|
|
|
372
395
|
#### set_output_folder ####
|
|
373
396
|
Use ```set_output_folder(output_folder)``` inside of a workspace configuration block to change the build output folder. By default, this folder is set to "build" underneath the workspace folder. The ```output_folder``` parameter expects the name of a folder relative to the workspace. If the folder does not exist, MTBuild will create it.
|
|
@@ -383,7 +406,7 @@ application_project(application_name, project_folder, &configuration_block)
|
|
|
383
406
|
|
|
384
407
|
```application_name``` is your desired name for the application. This should be a symbol such as ```:MyApplication```. It serves as a human-readable name for the application. Rake tasks related to this application will be namespaced with this symbol. For example, the top-level Rake task for building the "MyApplication" application with a configuration called "Debug" would be "MyApplication:Debug".
|
|
385
408
|
|
|
386
|
-
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's
|
|
409
|
+
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's mtbuildfile.
|
|
387
410
|
|
|
388
411
|
For ```configuration_block```, you supply a block that takes one parameter. When MTBuild invokes the block, it will pass an ApplicationProject object as this parameter. Inside the block, you can make ApplicationProject calls on this object to add configurations.
|
|
389
412
|
|
|
@@ -425,7 +448,7 @@ static_library_project(library_name, project_folder, &configuration_block)
|
|
|
425
448
|
|
|
426
449
|
```library_name``` is your desired name for the library. This should be a symbol like ```:MyLibrary```. It serves as a human-readable name for the library. Rake tasks related to this library will be namespaced with this symbol. For example, the top-level Rake task for building the "MyLibrary" library with a configuration called "Debug" would be "MyLibrary:Debug".
|
|
427
450
|
|
|
428
|
-
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's
|
|
451
|
+
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's mtbuildfile.
|
|
429
452
|
|
|
430
453
|
For ```configuration_block```, you supply a block that takes one parameter. When MTBuild invokes the block, it will pass a StaticLibraryProject object as this parameter. Inside the block, you can make StaticLibraryProject calls on this object to add configurations.
|
|
431
454
|
|
|
@@ -454,7 +477,7 @@ test_application_project(application_name, project_folder, &configuration_block)
|
|
|
454
477
|
|
|
455
478
|
```application_name``` is your desired name for the application. This should be a symbol like ```:MyApplication```. It serves as a human-readable name for the application. Rake tasks related to this application will be namespaced with this symbol. For example, the top-level Rake task for building the "MyTestApplication" application with a configuration called "Debug" would be "MyTestApplication:Debug".
|
|
456
479
|
|
|
457
|
-
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's
|
|
480
|
+
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's mtbuildfile.
|
|
458
481
|
|
|
459
482
|
For ```configuration_block```, you supply a block that takes one parameter. When MTBuild invokes the block, it will pass a TestApplicationProject object as this parameter. Inside the block, you can make TestApplicationProject calls on this object to add configurations.
|
|
460
483
|
|
|
@@ -474,7 +497,7 @@ framework_project(framework_name, project_folder, &configuration_block)
|
|
|
474
497
|
|
|
475
498
|
```framework_name``` is your desired name for the framework. This should be a symbol such as ```:MyApplication```. It serves as a human-readable name for the framework. Rake tasks related to this framework will be namespaced with this symbol. For example, the top-level Rake task for building the "MyLibrary" framework with a configuration called "Debug" would be "MyLibrary:Debug".
|
|
476
499
|
|
|
477
|
-
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's
|
|
500
|
+
```project_folder``` is the location of the project. Project files should be located at or below this location. Typically, you'd simply pass ```File.dirname(__FILE__)``` to use the same folder as the project's mtbuildfile.
|
|
478
501
|
|
|
479
502
|
For ```configuration_block```, you supply a block that takes one parameter. When MTBuild invokes the block, it will pass an FrameworkProject object as this parameter. Inside the block, you can make FrameworkProject calls on this object to add configurations.
|
|
480
503
|
|
|
@@ -519,15 +542,15 @@ Define a GCC toolchain by passing ```:gcc``` as the ```toolchain_name``` when in
|
|
|
519
542
|
##### ToolchainGcc settings #####
|
|
520
543
|
On top of the base Toolchain settings, the ToolchainGcc toolchain offers the following optional settings:
|
|
521
544
|
|
|
522
|
-
* ```:cppflags``` - A string representing C Preprocessor flags to be used in all compilation and link steps
|
|
545
|
+
* ```:cppflags``` - A string or array of strings representing C Preprocessor flags to be used in all compilation and link steps
|
|
523
546
|
|
|
524
|
-
* ```:cflags``` - A string representing C flags to be used when compiling C files
|
|
547
|
+
* ```:cflags``` - A string or array of strings representing C flags to be used when compiling C files
|
|
525
548
|
|
|
526
|
-
* ```:cxxflags``` - A string representing C++ flags to be used when compiling C++ files
|
|
549
|
+
* ```:cxxflags``` - A string or array of strings representing C++ flags to be used when compiling C++ files
|
|
527
550
|
|
|
528
|
-
* ```:asflags``` - A string representing assembler flags to be used when assembling assembly files
|
|
551
|
+
* ```:asflags``` - A string or array of strings representing assembler flags to be used when assembling assembly files
|
|
529
552
|
|
|
530
|
-
* ```:ldflags``` - A string representing linker flags to be used when linking
|
|
553
|
+
* ```:ldflags``` - A string or array of strings representing linker flags to be used when linking
|
|
531
554
|
|
|
532
555
|
* ```:linker_script``` - A linker script file to be used when linking
|
|
533
556
|
|
data/lib/mtbuild/application.rb
CHANGED
|
@@ -11,10 +11,27 @@ module MTBuild
|
|
|
11
11
|
|
|
12
12
|
require 'rake'
|
|
13
13
|
|
|
14
|
-
# This subclasses the Rake::Application class
|
|
15
|
-
#
|
|
14
|
+
# This subclasses the Rake::Application class to override default Rake
|
|
15
|
+
# behaviors with MTBuild-specific behaviors
|
|
16
16
|
class Application < Rake::Application
|
|
17
17
|
|
|
18
|
+
# List of rakefile names to look for
|
|
19
|
+
attr_reader :rakefiles
|
|
20
|
+
|
|
21
|
+
# Default list of mtbuildfile names
|
|
22
|
+
DEFAULT_RAKEFILES = [
|
|
23
|
+
'mtbuildfile',
|
|
24
|
+
'MTBuildfile',
|
|
25
|
+
'mtbuildfile.rb',
|
|
26
|
+
'MTBuildfile.rb'
|
|
27
|
+
].freeze
|
|
28
|
+
|
|
29
|
+
# This overrides the default rakefile names with the mtbuildfile names
|
|
30
|
+
def initialize
|
|
31
|
+
super
|
|
32
|
+
@rakefiles = DEFAULT_RAKEFILES.dup
|
|
33
|
+
end
|
|
34
|
+
|
|
18
35
|
# This hijacks the "--version" flag and displays the MTBuild version along
|
|
19
36
|
# with the Rake version. All other options/flags are returned unmodified.
|
|
20
37
|
def standard_rake_options
|
|
@@ -23,11 +23,11 @@ module MTBuild
|
|
|
23
23
|
fail "Toolchain component #{compiler} not found." unless toolchain_test_passed
|
|
24
24
|
|
|
25
25
|
@compiler_is_LLVM_gcc = toolchain_test_output.include?'LLVM'
|
|
26
|
-
@cppflags = configuration.fetch(:cppflags, '')
|
|
27
|
-
@cflags = configuration.fetch(:cflags, '')
|
|
28
|
-
@cxxflags = configuration.fetch(:cxxflags, '')
|
|
29
|
-
@asflags = configuration.fetch(:asflags, '')
|
|
30
|
-
@ldflags = configuration.fetch(:ldflags, '')
|
|
26
|
+
@cppflags = Utils.ensure_array(configuration.fetch(:cppflags, '')).to_a.flatten.join(' ')
|
|
27
|
+
@cflags = Utils.ensure_array(configuration.fetch(:cflags, '')).to_a.flatten.join(' ')
|
|
28
|
+
@cxxflags = Utils.ensure_array(configuration.fetch(:cxxflags, '')).to_a.flatten.join(' ')
|
|
29
|
+
@asflags = Utils.ensure_array(configuration.fetch(:asflags, '')).to_a.flatten.join(' ')
|
|
30
|
+
@ldflags = Utils.ensure_array(configuration.fetch(:ldflags, '')).to_a.flatten.join(' ')
|
|
31
31
|
@linker_script = configuration.fetch(:linker_script, '')
|
|
32
32
|
end
|
|
33
33
|
|
data/lib/mtbuild/utils.rb
CHANGED
|
@@ -38,7 +38,10 @@ module MTBuild
|
|
|
38
38
|
end
|
|
39
39
|
|
|
40
40
|
def self.merge_configurations(default, override)
|
|
41
|
-
return default.merge(override) {|key, old_value, new_value|
|
|
41
|
+
return default.merge(override) { |key, old_value, new_value|
|
|
42
|
+
if old_value.is_a? Hash and new_value.is_a? Hash then merge_configurations(old_value, new_value)
|
|
43
|
+
elsif old_value.is_a? Array and new_value.is_a? Array then old_value | new_value
|
|
44
|
+
else new_value end }
|
|
42
45
|
end
|
|
43
46
|
|
|
44
47
|
end
|
data/lib/mtbuild/version.rb
CHANGED
data/lib/mtbuild/workspace.rb
CHANGED
|
@@ -48,8 +48,8 @@ module MTBuild
|
|
|
48
48
|
new_projects = []
|
|
49
49
|
Utils.expand_folder_list(project_location, Rake.original_dir).each do |project_path|
|
|
50
50
|
if File.directory? project_path
|
|
51
|
-
project_rakefile =
|
|
52
|
-
new_projects << project_rakefile
|
|
51
|
+
project_rakefile = MTBuild::Workspace.find_mtbuildfile(project_path)
|
|
52
|
+
new_projects << project_rakefile unless project_rakefile.nil?
|
|
53
53
|
end
|
|
54
54
|
end
|
|
55
55
|
$stderr.puts "Could not find a valid project at '#{project_location}'. Ignored." if new_projects.empty?
|
|
@@ -105,6 +105,16 @@ module MTBuild
|
|
|
105
105
|
@configuration_defaults[configuration_name] = defaults_hash
|
|
106
106
|
end
|
|
107
107
|
|
|
108
|
+
def self.find_mtbuildfile(project_path)
|
|
109
|
+
Rake.application.rakefiles.each do |fn|
|
|
110
|
+
mtbuildfile = File.join(project_path, fn)
|
|
111
|
+
if File.file? mtbuildfile
|
|
112
|
+
return mtbuildfile
|
|
113
|
+
end
|
|
114
|
+
end
|
|
115
|
+
return nil
|
|
116
|
+
end
|
|
117
|
+
|
|
108
118
|
include Rake::DSL
|
|
109
119
|
|
|
110
120
|
end
|
metadata
CHANGED
|
@@ -1,93 +1,93 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mtbuild
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jerry Ryle
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-04-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rake
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: '0.9'
|
|
20
|
-
- -
|
|
20
|
+
- - ">="
|
|
21
21
|
- !ruby/object:Gem::Version
|
|
22
22
|
version: 0.9.6
|
|
23
23
|
type: :runtime
|
|
24
24
|
prerelease: false
|
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
|
26
26
|
requirements:
|
|
27
|
-
- - ~>
|
|
27
|
+
- - "~>"
|
|
28
28
|
- !ruby/object:Gem::Version
|
|
29
29
|
version: '0.9'
|
|
30
|
-
- -
|
|
30
|
+
- - ">="
|
|
31
31
|
- !ruby/object:Gem::Version
|
|
32
32
|
version: 0.9.6
|
|
33
33
|
- !ruby/object:Gem::Dependency
|
|
34
34
|
name: rake
|
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
|
36
36
|
requirements:
|
|
37
|
-
- - ~>
|
|
37
|
+
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
39
|
version: '0.9'
|
|
40
|
-
- -
|
|
40
|
+
- - ">="
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
42
|
version: 0.9.6
|
|
43
43
|
type: :development
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
|
-
- - ~>
|
|
47
|
+
- - "~>"
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
49
|
version: '0.9'
|
|
50
|
-
- -
|
|
50
|
+
- - ">="
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
52
|
version: 0.9.6
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: rdoc
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
56
56
|
requirements:
|
|
57
|
-
- - ~>
|
|
57
|
+
- - "~>"
|
|
58
58
|
- !ruby/object:Gem::Version
|
|
59
59
|
version: '4.0'
|
|
60
|
-
- -
|
|
60
|
+
- - ">="
|
|
61
61
|
- !ruby/object:Gem::Version
|
|
62
62
|
version: 4.0.0
|
|
63
63
|
type: :development
|
|
64
64
|
prerelease: false
|
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
|
66
66
|
requirements:
|
|
67
|
-
- - ~>
|
|
67
|
+
- - "~>"
|
|
68
68
|
- !ruby/object:Gem::Version
|
|
69
69
|
version: '4.0'
|
|
70
|
-
- -
|
|
70
|
+
- - ">="
|
|
71
71
|
- !ruby/object:Gem::Version
|
|
72
72
|
version: 4.0.0
|
|
73
73
|
- !ruby/object:Gem::Dependency
|
|
74
74
|
name: rspec
|
|
75
75
|
requirement: !ruby/object:Gem::Requirement
|
|
76
76
|
requirements:
|
|
77
|
-
- - ~>
|
|
77
|
+
- - "~>"
|
|
78
78
|
- !ruby/object:Gem::Version
|
|
79
79
|
version: '2.14'
|
|
80
|
-
- -
|
|
80
|
+
- - ">="
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
82
|
version: 2.14.8
|
|
83
83
|
type: :development
|
|
84
84
|
prerelease: false
|
|
85
85
|
version_requirements: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
|
-
- - ~>
|
|
87
|
+
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
89
|
version: '2.14'
|
|
90
|
-
- -
|
|
90
|
+
- - ">="
|
|
91
91
|
- !ruby/object:Gem::Version
|
|
92
92
|
version: 2.14.8
|
|
93
93
|
description: mtbuild is a rake-based build system for C/C++ projects. It provides
|
|
@@ -143,12 +143,12 @@ require_paths:
|
|
|
143
143
|
- lib
|
|
144
144
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
145
145
|
requirements:
|
|
146
|
-
- -
|
|
146
|
+
- - ">="
|
|
147
147
|
- !ruby/object:Gem::Version
|
|
148
148
|
version: 1.9.1
|
|
149
149
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
150
150
|
requirements:
|
|
151
|
-
- -
|
|
151
|
+
- - ">="
|
|
152
152
|
- !ruby/object:Gem::Version
|
|
153
153
|
version: '0'
|
|
154
154
|
requirements: []
|