Compare commits
411
Commits
v1.6.0
...
v2.0.0beta1
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1ddc03b285 | ||
|
|
f686f9e787 | ||
|
|
b6c19b7f00 | ||
|
|
4fc18e5d91 | ||
|
|
cda5584448 | ||
|
|
30d82392b5 | ||
|
|
63d875da7f | ||
|
|
8593c5e219 | ||
|
|
9bf0abbece | ||
|
|
02ef6e0846 | ||
|
|
f97ee94e44 | ||
|
|
55a2ea6d6b | ||
|
|
59ab8e46c4 | ||
|
|
baebe744b3 | ||
|
|
0ad3f815c5 | ||
|
|
ca6336c715 | ||
|
|
a11c27f415 | ||
|
|
5c77cac354 | ||
|
|
46294b2a88 | ||
|
|
5f71781806 | ||
|
|
22b007df3a | ||
|
|
4339d358f8 | ||
|
|
e4b96b759f | ||
|
|
fcb686ac5f | ||
|
|
e5c690a4fc | ||
|
|
5b67ad88d3 | ||
|
|
dbd8b47bf9 | ||
|
|
8222958ae3 | ||
|
|
56f104b5e7 | ||
|
|
947a65a75e | ||
|
|
66fac4f982 | ||
|
|
254584435f | ||
|
|
f74d8202d3 | ||
|
|
bbf2319da6 | ||
|
|
812b1cbe9c | ||
|
|
0d2fe02b9c | ||
|
|
c7fb88db82 | ||
|
|
49f4367125 | ||
|
|
c4d062752d | ||
|
|
5b3e10ff72 | ||
|
|
5f1ad78e8c | ||
|
|
9f00063d57 | ||
|
|
6328ceee2a | ||
|
|
26a9307533 | ||
|
|
90886ed9ad | ||
|
|
8df73e9d11 | ||
|
|
f239b27c3a | ||
|
|
5e6b83411b | ||
|
|
54e77f235f | ||
|
|
4e08de9043 | ||
|
|
0d8aec0eb1 | ||
|
|
573a542f84 | ||
|
|
ef2a9084db | ||
|
|
bfcd0c0b05 | ||
|
|
215f5e4b51 | ||
|
|
6229cef015 | ||
|
|
6be0d322a7 | ||
|
|
89e43fea1c | ||
|
|
458eeaf93d | ||
|
|
dd3d468a28 | ||
|
|
a4dec210ae | ||
|
|
fa14102ba5 | ||
|
|
87a15b3868 | ||
|
|
f23fbcd6d1 | ||
|
|
b02a7573b9 | ||
|
|
d0cd0a14a4 | ||
|
|
5cb895f465 | ||
|
|
cd1c54bf0d | ||
|
|
a4fead7dc6 | ||
|
|
59a3cb4e10 | ||
|
|
785e8e18fd | ||
|
|
49e1bca1f7 | ||
|
|
fd054a07c4 | ||
|
|
328babe1f4 | ||
|
|
c60589a9c9 | ||
|
|
04fc9866c4 | ||
|
|
7a807575b2 | ||
|
|
787b3249a7 | ||
|
|
3115e55739 | ||
|
|
0c07ea0437 | ||
|
|
0e7c976089 | ||
|
|
921f0d2cb1 | ||
|
|
c23426c5aa | ||
|
|
ea2b1e73d1 | ||
|
|
9bf4b8fa96 | ||
|
|
008fa4844d | ||
|
|
568b78e2e2 | ||
|
|
3b00016278 | ||
|
|
a655d04541 | ||
|
|
5534878f68 | ||
|
|
1efee50b2c | ||
|
|
3ff09978f4 | ||
|
|
ac1fc6d106 | ||
|
|
06b9c98ed0 | ||
|
|
f58744d31f | ||
|
|
bf136e79f2 | ||
|
|
ab2fa1662f | ||
|
|
68118c2707 | ||
|
|
6ce3d59ad9 | ||
|
|
983862a528 | ||
|
|
658b73e4de | ||
|
|
b882f8de99 | ||
|
|
8426a54a57 | ||
|
|
ee1640008c | ||
|
|
7cfd23e16f | ||
|
|
5c3b615aee | ||
|
|
935848c3b5 | ||
|
|
d047a1bf29 | ||
|
|
016bf5eac7 | ||
|
|
33504f586b | ||
|
|
86594c62b6 | ||
|
|
ea25f62f7c | ||
|
|
f2cfc25604 | ||
|
|
a1f5f022d1 | ||
|
|
7992450383 | ||
|
|
b41a368da1 | ||
|
|
1b63dc7503 | ||
|
|
db788cdd35 | ||
|
|
3f8b4d616f | ||
|
|
aac32d20b0 | ||
|
|
12f1909d35 | ||
|
|
31ef45258f | ||
|
|
9f9b7f0bf4 | ||
|
|
918c629435 | ||
|
|
eaac473f44 | ||
|
|
fa5aa51daa | ||
|
|
347d651ab6 | ||
|
|
08085f09c4 | ||
|
|
5915ac2b95 | ||
|
|
a98c111cd2 | ||
|
|
93ffed2eb2 | ||
|
|
f8e6666a2c | ||
|
|
5720662b7c | ||
|
|
432d221be2 | ||
|
|
a1efb1c1b3 | ||
|
|
7c7ee142e0 | ||
|
|
ba69f05e99 | ||
|
|
6180410cc4 | ||
|
|
2d44a88fb6 | ||
|
|
28e3781331 | ||
|
|
c0a28d0207 | ||
|
|
0e27e967d0 | ||
|
|
1ecce7e99e | ||
|
|
25b73ebd8f | ||
|
|
bca963af5c | ||
|
|
ba5377a1ce | ||
|
|
8d7fd4bda8 | ||
|
|
e3e2e46d6e | ||
|
|
9e0ce5a55c | ||
|
|
b88131eb2f | ||
|
|
dff80587ac | ||
|
|
cd2696dd0b | ||
|
|
36643c1ab1 | ||
|
|
778d9ed8b2 | ||
|
|
660d30558a | ||
|
|
82fbd34149 | ||
|
|
e0b82d37af | ||
|
|
7a90325b67 | ||
|
|
49116e6b59 | ||
|
|
90300a1606 | ||
|
|
1eb07e9a22 | ||
|
|
9975eec165 | ||
|
|
04c0a6a86f | ||
|
|
bfdf3a12fd | ||
|
|
6dd9c835ce | ||
|
|
cfec0dcadc | ||
|
|
a1c1cc1855 | ||
|
|
add9f9c50d | ||
|
|
ba3d656110 | ||
|
|
ab4ca71ac7 | ||
|
|
aba11155a4 | ||
|
|
3b586cb476 | ||
|
|
88fd4bd405 | ||
|
|
7869d38dd8 | ||
|
|
e8990199ef | ||
|
|
6078cb0977 | ||
|
|
85b0111a6e | ||
|
|
6bb0a55a55 | ||
|
|
95d5ada865 | ||
|
|
cd9fffd828 | ||
|
|
30511a3443 | ||
|
|
d656df5407 | ||
|
|
d54d363a25 | ||
|
|
697db2a987 | ||
|
|
daa90e431c | ||
|
|
bdeaec11ba | ||
|
|
7eeb6312ba | ||
|
|
07d9b97ddc | ||
|
|
af033ee4e0 | ||
|
|
c9de4f37e6 | ||
|
|
64caaa9a53 | ||
|
|
d196845c85 | ||
|
|
5288a47bfb | ||
|
|
9bd9abcad1 | ||
|
|
b5a8b6f628 | ||
|
|
7edcef2b30 | ||
|
|
c34821864e | ||
|
|
97c24eec6b | ||
|
|
053df2360f | ||
|
|
8d766e4804 | ||
|
|
e29ec5a126 | ||
|
|
de46bb0cc1 | ||
|
|
084080a682 | ||
|
|
3a564c0ca2 | ||
|
|
ac89a122d8 | ||
|
|
ea6ae1be10 | ||
|
|
a649c7f4cb | ||
|
|
2f83f36659 | ||
|
|
a46936bc0b | ||
|
|
95ee63292e | ||
|
|
bcd33fe098 | ||
|
|
5cf77f1f58 | ||
|
|
b4cc45c381 | ||
|
|
750506201f | ||
|
|
284312a21c | ||
|
|
d081a4695f | ||
|
|
c7f66694ab | ||
|
|
57de94a3fb | ||
|
|
53ba7dad41 | ||
|
|
8cb02a7e34 | ||
|
|
dbbce9e476 | ||
|
|
0dc3a90660 | ||
|
|
d48c7587d6 | ||
|
|
70d4740a69 | ||
|
|
aaae845d60 | ||
|
|
e900e74342 | ||
|
|
62ae3f162d | ||
|
|
099d26f33c | ||
|
|
89562c584a | ||
|
|
a9aeaf2356 | ||
|
|
5409b3cb34 | ||
|
|
6d04500c13 | ||
|
|
45e30662d2 | ||
|
|
8f7e044bfd | ||
|
|
dbea6f0a26 | ||
|
|
c923eb5c7c | ||
|
|
529d9aacaa | ||
|
|
65c1bac4f9 | ||
|
|
775363ddbd | ||
|
|
2a96495e83 | ||
|
|
15e52e488c | ||
|
|
c0b12132f0 | ||
|
|
9141cf91e7 | ||
|
|
7f7e6ef3da | ||
|
|
60b3fdbcac | ||
|
|
5263ea03c6 | ||
|
|
6c91823ce2 | ||
|
|
8deb1eb6f8 | ||
|
|
6d6319799a | ||
|
|
694642dfbd | ||
|
|
6dd70ff65e | ||
|
|
eca01c38df | ||
|
|
4ad6ce1d9c | ||
|
|
a49ebc486e | ||
|
|
74d19ea235 | ||
|
|
d7a6d69a92 | ||
|
|
11864eb55b | ||
|
|
387c40176b | ||
|
|
f1b24ee8ba | ||
|
|
ef3150db0f | ||
|
|
ed4fb8b681 | ||
|
|
3a3f6d6d27 | ||
|
|
20affc0e1d | ||
|
|
010607d3b0 | ||
|
|
b7f609b7e8 | ||
|
|
10d4c647b9 | ||
|
|
db2ec82a25 | ||
|
|
aa192d7567 | ||
|
|
ed5d6e9e49 | ||
|
|
3436dc3a64 | ||
|
|
df52a7e0e1 | ||
|
|
6bd7e6f852 | ||
|
|
19a23c2aa9 | ||
|
|
c7e4e1ad9b | ||
|
|
43df46018c | ||
|
|
8cbb9fa30e | ||
|
|
1880e6650e | ||
|
|
d31b4725d2 | ||
|
|
6f242a1c64 | ||
|
|
c7943bc2cc | ||
|
|
b5826bd7f4 | ||
|
|
05bbea6fa1 | ||
|
|
68468b6422 | ||
|
|
80a80a7cb0 | ||
|
|
178940cd5d | ||
|
|
145d51c825 | ||
|
|
a11fab43cb | ||
|
|
83226e894d | ||
|
|
b454208117 | ||
|
|
df420fdf5c | ||
|
|
f3bf325c88 | ||
|
|
f815952ab3 | ||
|
|
1af3c5c9a4 | ||
|
|
dce88ece14 | ||
|
|
2655c119e4 | ||
|
|
221cde7e5f | ||
|
|
adcee373df | ||
|
|
e58b8bd109 | ||
|
|
8a1dfb0785 | ||
|
|
d315f86a36 | ||
|
|
0d46d616dd | ||
|
|
032e6d5d0a | ||
|
|
c9946da193 | ||
|
|
599d10b50f | ||
|
|
18c6c69871 | ||
|
|
2ffdf82d9a | ||
|
|
15e5d15424 | ||
|
|
a99e6e81b2 | ||
|
|
1509c95176 | ||
|
|
c7bba77581 | ||
|
|
957fd8c86d | ||
|
|
7e707e7e3b | ||
|
|
2be738be4f | ||
|
|
7b3bffd329 | ||
|
|
06cb4b7a55 | ||
|
|
bfbbc19728 | ||
|
|
28e56251dd | ||
|
|
2d8e08b493 | ||
|
|
5cef9896ac | ||
|
|
6344692087 | ||
|
|
267fc7124d | ||
|
|
e694199f33 | ||
|
|
4ed584701a | ||
|
|
5de52620e4 | ||
|
|
9cc59a35f0 | ||
|
|
ca445f5733 | ||
|
|
7534b29e26 | ||
|
|
800e7a51a4 | ||
|
|
5d36aa74a0 | ||
|
|
01851c2872 | ||
|
|
5fe55a584e | ||
|
|
9c13634eaf | ||
|
|
e4adaab003 | ||
|
|
6b8fda706d | ||
|
|
ef4f9882cd | ||
|
|
7a31039e35 | ||
|
|
3e4897c04b | ||
|
|
d46dc2014c | ||
|
|
9cfc0c20b7 | ||
|
|
19a00a7b84 | ||
|
|
9b6d2c5111 | ||
|
|
6a0ccad804 | ||
|
|
dab870854a | ||
|
|
695bf84092 | ||
|
|
7cba8c8424 | ||
|
|
551b8fa365 | ||
|
|
3601359c08 | ||
|
|
e1d8dfbab6 | ||
|
|
c69da1044d | ||
|
|
f33be07a15 | ||
|
|
c4c2d5c128 | ||
|
|
3065dc48ec | ||
|
|
9ca2934695 | ||
|
|
3af6b6be1b | ||
|
|
0442b876a5 | ||
|
|
bab4641b6e | ||
|
|
4698fc41b9 | ||
|
|
952f423860 | ||
|
|
d2da5f7b0d | ||
|
|
ab14dc16ed | ||
|
|
aa795eea85 | ||
|
|
7dffef6bd0 | ||
|
|
dce2114733 | ||
|
|
0bbdda2d41 | ||
|
|
3b8910075a | ||
|
|
34beda844e | ||
|
|
7a04bec2ff | ||
|
|
7698fbf618 | ||
|
|
4eedea2563 | ||
|
|
f678803a5d | ||
|
|
9c49a09f69 | ||
|
|
859f87ddee | ||
|
|
73bc71a656 | ||
|
|
29a8684f90 | ||
|
|
02aff35222 | ||
|
|
897d31ebe0 | ||
|
|
76610a07a9 | ||
|
|
cb3cc9a0de | ||
|
|
0ea842fffe | ||
|
|
d28722a4bb | ||
|
|
8142d0bbc8 | ||
|
|
a8023ae03c | ||
|
|
99ba015630 | ||
|
|
dcf90cc12b | ||
|
|
f93ca62c07 | ||
|
|
d9e3129ad5 | ||
|
|
d5e0475e6c | ||
|
|
b05eed36eb | ||
|
|
7ea0721cc2 | ||
|
|
e654df008d | ||
|
|
92d4dd8396 | ||
|
|
e279959d79 | ||
|
|
469f575564 | ||
|
|
07725581e9 | ||
|
|
ebb69cedc2 | ||
|
|
c98b377ce8 | ||
|
|
a0874e7cf1 | ||
|
|
0b04229e3d | ||
|
|
20f3da3b04 | ||
|
|
a6a79b8ef1 | ||
|
|
6d4f27602e | ||
|
|
453295a49b | ||
|
|
dee2b98f6e | ||
|
|
b186b3102c | ||
|
|
23c94f7841 | ||
|
|
6acb209ef4 | ||
|
|
43e12819d7 | ||
|
|
1bfb7dd100 | ||
|
|
df1e3be829 | ||
|
|
851adae66f | ||
|
|
eb28e09d8c |
No files matched your search
+11
-18
@@ -1,18 +1,11 @@
|
|||||||
*.gem
|
/.bundle/
|
||||||
*.rbc
|
/.yardoc/
|
||||||
.bundle
|
/_yardoc/
|
||||||
.config
|
/build_test_run/
|
||||||
.yardoc
|
/coverage/
|
||||||
Gemfile.lock
|
/dist/
|
||||||
InstalledFiles
|
/gen/
|
||||||
_yardoc
|
/large_project/
|
||||||
coverage
|
/pkg/
|
||||||
doc/
|
/test/
|
||||||
lib/bundler/man
|
/yard/
|
||||||
pkg
|
|
||||||
rdoc
|
|
||||||
spec/reports
|
|
||||||
test/tmp
|
|
||||||
test/version_tmp
|
|
||||||
tmp
|
|
||||||
build_test_run
|
|
||||||
+208
@@ -0,0 +1,208 @@
|
|||||||
|
## v1.17.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- allow construction variable expansion on `true` and `false` values.
|
||||||
|
- remove makefile target name check when parsing dependencies
|
||||||
|
|
||||||
|
## v1.16.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- Add `Rscons.glob`
|
||||||
|
- Support command-line variables
|
||||||
|
- improve debuggability of `cache.up_to_date?`
|
||||||
|
- allow passing a VarSet into cache methods
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- generate dependencies for D builds
|
||||||
|
|
||||||
|
## v1.15.0
|
||||||
|
|
||||||
|
- allow json 1.x or 2.x
|
||||||
|
|
||||||
|
## v1.14.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #45 - Add `Rscons::VarSet#values_at`
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- #44 - `Environment#print_builder_run_message` should support string commands
|
||||||
|
|
||||||
|
## v1.13.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #43 - Add ability to record side-effect file production
|
||||||
|
|
||||||
|
## v1.12.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #40 - env.depends should imply `env.build_after`
|
||||||
|
- #41 - be more colorful
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- #39 - wait for in-progress subcommands to complete on build failure
|
||||||
|
- #42 - cloned Environments should inherit `n_threads`
|
||||||
|
|
||||||
|
## v1.11.1
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- fix the circular build dependency detection logic
|
||||||
|
|
||||||
|
## v1.11.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- Change default Environment :clone option to :all to clone all attributes
|
||||||
|
- #38 - raise error when circular dependencies are found
|
||||||
|
- #34 - Allow overriding `n_threads` on a per-Environment level
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- #35 - `env.build_after` should expand paths
|
||||||
|
- #36 - `SHCFLAGS` and `SHCXXFLAGS` should inherit non-SH flags by default
|
||||||
|
- #37 - Fix non-blocking thread-wait if `Rscons.n_threads` is set to 0
|
||||||
|
|
||||||
|
## v1.10.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #23 - add parallelization - builds are now parallelized by default
|
||||||
|
- #31 - add LEXSUFFIX, YACCSUFFIX construction variables
|
||||||
|
- #30 - place object files for absolute source paths under build_root
|
||||||
|
- #28 - support redirecting standard output using the Command builder
|
||||||
|
- Always use a build root and default it to "build"
|
||||||
|
- Add builder features
|
||||||
|
- #8 - add SharedObject and SharedLibrary builders
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- expand target and source paths before calling `Builder#create_build_target`
|
||||||
|
- #29 - fix `PROGSUFFIX` handling
|
||||||
|
- #32 - Pre-build hooks do not respect modified key values
|
||||||
|
|
||||||
|
## v1.9.3
|
||||||
|
|
||||||
|
- `Environment#parse_flags` should put -std=XXX flags in CCFLAGS, not CFLAGS
|
||||||
|
|
||||||
|
## v1.9.2
|
||||||
|
|
||||||
|
- allow phony targets in conjunction with build roots
|
||||||
|
|
||||||
|
## v1.9.1
|
||||||
|
|
||||||
|
- change *SUFFIX defaults to arrays
|
||||||
|
- add various C++ file suffixes
|
||||||
|
- use ${INCPREFIX} instead of hard-coded "-I" in Preprocess builder
|
||||||
|
|
||||||
|
## v1.9.0
|
||||||
|
|
||||||
|
### New Features
|
||||||
|
|
||||||
|
- #6 - add Install and Copy builders
|
||||||
|
- #22 - allow overriding Command builder short description with `CMD_DESC` variable
|
||||||
|
- #24 - add "rscons" executable
|
||||||
|
- #25 - add support for phony targets given as Symbols instead of Strings
|
||||||
|
- #26 - support registering multiple build targets with the same target name
|
||||||
|
- #27 - add Directory builder
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- #20 - fix variable references that expand to arrays in build target sources
|
||||||
|
- #21 - rework Preprocess builder to consider deep dependencies
|
||||||
|
- fix `Rscons.set_suffix` to append the given suffix if the filename has none
|
||||||
|
- remove ${CFLAGS} from default `CPP_CMD`
|
||||||
|
|
||||||
|
## v1.8.1
|
||||||
|
|
||||||
|
- fix Environment#dump when construction variables are symbols
|
||||||
|
|
||||||
|
## v1.8.0
|
||||||
|
|
||||||
|
- new Command builder to execute arbitrary user commands
|
||||||
|
- new SimpleBuilder class
|
||||||
|
- create new builders quickly by passing a block to `Environment#add_builder`
|
||||||
|
- improved YARD documentation
|
||||||
|
- add Environment#dump to debug Environment construction variables
|
||||||
|
|
||||||
|
## v1.7.0
|
||||||
|
|
||||||
|
- allow build hooks to register new build targets
|
||||||
|
- add post-build hooks (register with `Environment#add_post_build_hook`)
|
||||||
|
- clear all build targets after processing an Environment
|
||||||
|
- allow trailing slashes in arguments to `Environment#build_dir`
|
||||||
|
|
||||||
|
## v1.6.1
|
||||||
|
|
||||||
|
- add DEPFILESUFFIX construction variable to override dependency file suffix
|
||||||
|
- fix Environment#depends to expand its arguments for construction variables
|
||||||
|
|
||||||
|
## v1.6.0
|
||||||
|
|
||||||
|
- support lambdas as construction variable values
|
||||||
|
|
||||||
|
## v1.5.0
|
||||||
|
|
||||||
|
- add "json" as a runtime dependency
|
||||||
|
- update construction variables to match SCons more closely
|
||||||
|
- add `CPPDEFPREFIX`, `INCPREFIX`, `CPPDEFINES`, `CCFLAGS`, `LIBDIRPREFIX`, and `LIBLINKPREFIX`
|
||||||
|
- add `Environment#shell`
|
||||||
|
- add `Environment#parse_flags`, `#parse_flags!`, `#merge_flags`
|
||||||
|
- unbuffer `$stdout` by default
|
||||||
|
- add `PROGSUFFIX` construction variable (defaults to `.exe` on MinGW/Cygwin)
|
||||||
|
- add `Rscons::BuildTarget` and `Builder#create_build_target`
|
||||||
|
- update specs to RSpec 3.x and fix to run on MinGW/Cygwin/Linux
|
||||||
|
- add YARD documentation to get to 100% coverage
|
||||||
|
|
||||||
|
## v1.4.3
|
||||||
|
|
||||||
|
- fix builders properly using construction variable overrides
|
||||||
|
- expand nil construction variables to empty strings
|
||||||
|
|
||||||
|
## v1.4.2
|
||||||
|
|
||||||
|
- add `Environment#expand_path`
|
||||||
|
- expand construction variable references in builder targets and sources before invoking builder
|
||||||
|
|
||||||
|
## v1.4.1
|
||||||
|
|
||||||
|
- fix invoking a builder with no sources while a build root defined
|
||||||
|
|
||||||
|
## v1.4.0
|
||||||
|
|
||||||
|
- add CFile builder
|
||||||
|
- add Disassemble builder
|
||||||
|
- add Preprocess builder
|
||||||
|
- pass the Environment object to build hooks in the :env key of the build_op parameter
|
||||||
|
- expand target/source paths beginning with "^/" to be relative to the Environment's build root
|
||||||
|
- many performance improvements, including:
|
||||||
|
- use JSON instead of YAML for the cache to improve loading speed (Issue #7)
|
||||||
|
- store a hash of the build command instead of the full command contents in the cache
|
||||||
|
- implement copy-on-write semantics for construction variables when cloning Environments
|
||||||
|
- only load the cache once instead of on each Environment#process
|
||||||
|
- only write the cache when something has changed
|
||||||
|
- fix `Cache#mkdir_p` to handle relative paths (Issue #5)
|
||||||
|
- flush the cache to disk if a builder raises an exception (Issue #4)
|
||||||
|
|
||||||
|
## v1.3.0
|
||||||
|
|
||||||
|
- change Environment#execute() options parameter to accept the following options keys:
|
||||||
|
- :env to pass an environment Hash to Kernel#system
|
||||||
|
- :options to pass an options Hash to Kernel#system
|
||||||
|
|
||||||
|
## v1.2.0
|
||||||
|
|
||||||
|
- add :clone option to Environment#clone to control exactly which Environment attributes are cloned
|
||||||
|
- allow nil to be passed in to `Environment#build_root=`
|
||||||
|
|
||||||
|
## v1.1.0
|
||||||
|
|
||||||
|
- Change `Cache#up_to_date?` and `#register_build` to accept a single target
|
||||||
|
file or an array of target file names
|
||||||
@@ -1,4 +1,10 @@
|
|||||||
source 'https://rubygems.org'
|
source 'https://rubygems.org'
|
||||||
|
|
||||||
# Specify your gem's dependencies in rscons.gemspec
|
gem "json"
|
||||||
gemspec
|
gem "rspec"
|
||||||
|
gem "rake"
|
||||||
|
gem "simplecov"
|
||||||
|
gem "yard"
|
||||||
|
gem "rdoc"
|
||||||
|
gem "redcarpet"
|
||||||
|
gem "syntax"
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
GEM
|
||||||
|
remote: https://rubygems.org/
|
||||||
|
specs:
|
||||||
|
diff-lcs (1.3)
|
||||||
|
docile (1.3.2)
|
||||||
|
json (2.2.0)
|
||||||
|
rake (12.3.2)
|
||||||
|
rdoc (6.1.1)
|
||||||
|
redcarpet (3.4.0)
|
||||||
|
rspec (3.8.0)
|
||||||
|
rspec-core (~> 3.8.0)
|
||||||
|
rspec-expectations (~> 3.8.0)
|
||||||
|
rspec-mocks (~> 3.8.0)
|
||||||
|
rspec-core (3.8.2)
|
||||||
|
rspec-support (~> 3.8.0)
|
||||||
|
rspec-expectations (3.8.4)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.8.0)
|
||||||
|
rspec-mocks (3.8.1)
|
||||||
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
|
rspec-support (~> 3.8.0)
|
||||||
|
rspec-support (3.8.2)
|
||||||
|
simplecov (0.15.0)
|
||||||
|
docile (~> 1.1.0)
|
||||||
|
json (>= 1.8, < 3)
|
||||||
|
simplecov-html (~> 0.10.0)
|
||||||
|
simplecov-html (0.10.2)
|
||||||
|
syntax (1.2.2)
|
||||||
|
yard (0.9.20)
|
||||||
|
|
||||||
|
PLATFORMS
|
||||||
|
ruby
|
||||||
|
x86-mingw32
|
||||||
|
|
||||||
|
DEPENDENCIES
|
||||||
|
json
|
||||||
|
rake
|
||||||
|
rdoc
|
||||||
|
redcarpet
|
||||||
|
rspec
|
||||||
|
simplecov
|
||||||
|
syntax
|
||||||
|
yard
|
||||||
|
|
||||||
|
BUNDLED WITH
|
||||||
|
1.17.3
|
||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
Copyright (c) 2013 Josh Holtrop
|
Copyright (c) 2013-2019 Josh Holtrop
|
||||||
|
|
||||||
MIT License
|
MIT License
|
||||||
|
|
||||||
|
|||||||
@@ -1,397 +1,6 @@
|
|||||||
# Rscons
|
# Rscons
|
||||||
|
|
||||||
Software construction library inspired by SCons and implemented in Ruby
|
Rscons (https://github.com/holtrop/rscons) is an open-source build system
|
||||||
|
for developers.
|
||||||
|
|
||||||
[](http://badge.fury.io/rb/rscons)
|
Rscons is written in Ruby, and is inspired by [SCons](https://scons.org/) and [waf](https://waf.io/).
|
||||||
|
|
||||||
## Installation
|
|
||||||
|
|
||||||
Add this line to your application's Gemfile:
|
|
||||||
|
|
||||||
gem "rscons"
|
|
||||||
|
|
||||||
And then execute:
|
|
||||||
|
|
||||||
$ bundle install
|
|
||||||
|
|
||||||
Or install it yourself as:
|
|
||||||
|
|
||||||
$ gem install rscons
|
|
||||||
|
|
||||||
## Usage
|
|
||||||
|
|
||||||
Rscons is a Ruby library.
|
|
||||||
It can be called from a standalone Ruby script or it can be used with rake and
|
|
||||||
called from your Rakefile.
|
|
||||||
|
|
||||||
### Example: Building a C Program
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env["CFLAGS"] << "-Wall"
|
|
||||||
env.Program("program", Dir["**/*.c"])
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Building a D Program
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env["DFLAGS"] << "-Wall"
|
|
||||||
env.Program("program", Dir["**/*.d"])
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Cloning an Environment
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
main_env = Rscons::Environment.new do |env|
|
|
||||||
# Store object files from sources under "src" in "build/main"
|
|
||||||
env.build_dir("src", "build/main")
|
|
||||||
env["CFLAGS"] = ["-DSOME_DEFINE", "-O3"]
|
|
||||||
env["LIBS"] = ["SDL"]
|
|
||||||
env.Program("program", Dir["src/**/*.cc"])
|
|
||||||
end
|
|
||||||
|
|
||||||
debug_env = main_env.clone do |env|
|
|
||||||
# Store object files from sources under "src" in "build/debug"
|
|
||||||
env.build_dir("src", "build/debug")
|
|
||||||
env["CFLAGS"] -= ["-O3"]
|
|
||||||
env["CFLAGS"] += ["-g", "-O0"]
|
|
||||||
env.Program("program-debug", Dir["src/**/*.cc"])
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Custom Builder
|
|
||||||
|
|
||||||
Custom builders are implemented as classes which extend from `Rscons::Builder`.
|
|
||||||
The builder must have a `run` method which is called to invoke the builder.
|
|
||||||
The `run` method should return the name of the target built on success, and
|
|
||||||
`false` on failure.
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
class GenerateFoo < Rscons::Builder
|
|
||||||
def run(target, sources, cache, env, vars)
|
|
||||||
cache.mkdir_p(File.dirname(target))
|
|
||||||
File.open(target, "w") do |fh|
|
|
||||||
fh.puts <<EOF
|
|
||||||
#define GENERATED 42
|
|
||||||
EOF
|
|
||||||
end
|
|
||||||
target
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env.add_builder(GenerateFoo.new)
|
|
||||||
env.GenerateFoo("foo.h", [])
|
|
||||||
env.Program("a.out", Dir["*.c"])
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Custom Builder That Only Regenerates When Necessary
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
class CmdBuilder < Rscons::Builder
|
|
||||||
def run(target, sources, cache, env, vars)
|
|
||||||
cmd = ["cmd", "-i", sources.first, "-o", target]
|
|
||||||
unless cache.up_to_date?(target, cmd, sources, env)
|
|
||||||
cache.mkdir_p(File.dirname(target))
|
|
||||||
system(cmd)
|
|
||||||
cache.register_build(target, cmd, sources, env)
|
|
||||||
end
|
|
||||||
target
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env.add_builder(CmdBuilder.new)
|
|
||||||
env.CmdBuilder("foo.gen", "foo_gen.cfg")
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Custom Builder That Generates Multiple Output Files
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
class CModuleGenerator < Rscons::Builder
|
|
||||||
def run(target, sources, cache, env, vars)
|
|
||||||
c_fname = target
|
|
||||||
h_fname = target.sub(/\.c$/, ".h")
|
|
||||||
cmd = ["generate_c_and_h", sources.first, c_fname, h_fname]
|
|
||||||
unless cache.up_to_date?([c_fname, h_fname], cmd, sources, env)
|
|
||||||
cache.mkdir_p(File.dirname(target))
|
|
||||||
system(cmd)
|
|
||||||
cache.register_build([c_fname, h_fname], cmd, sources, env)
|
|
||||||
end
|
|
||||||
target
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env.add_builder(CModuleGenerator.new)
|
|
||||||
env.CModuleGenerator("build/foo.c", "foo_gen.cfg")
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Custom Builder Using Builder#standard_build()
|
|
||||||
|
|
||||||
The `standard_build` method from the `Rscons::Builder` base class can be used
|
|
||||||
when the builder needs to execute a system command to produce the target file.
|
|
||||||
The `standard_build` method will return the correct value so its return value
|
|
||||||
can be used as the return value from the `run` method.
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
class CmdBuilder < Rscons::Builder
|
|
||||||
def run(target, sources, cache, env, vars)
|
|
||||||
cmd = ["cmd", "-i", sources.first, "-o", target]
|
|
||||||
standard_build("CmdBld #{target}", target, cmd, sources, env, cache)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env.add_builder(CmdBuilder.new)
|
|
||||||
env.CmdBuilder("foo.gen", "foo_gen.cfg")
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Using different compilation flags for some sources
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env["CFLAGS"] = ["-O3", "-Wall", "-DDEFINE"]
|
|
||||||
env.add_build_hook do |build_op|
|
|
||||||
if build_op[:target] =~ %r{build/third-party}
|
|
||||||
build_op[:vars]["CFLAGS"] -= ["-Wall"]
|
|
||||||
end
|
|
||||||
end
|
|
||||||
env.build_dir("src", "build")
|
|
||||||
env.Program("program", Dir["**/*.cc"])
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
Each build hook block will be invoked for every build operation, so the block
|
|
||||||
should test the target or sources if its action should only apply to some
|
|
||||||
subset of build targets or source files.
|
|
||||||
|
|
||||||
The `build_op` parameter to the build hook block is a Hash describing the
|
|
||||||
build operation with the following keys:
|
|
||||||
* `:builder` - `Builder` instance in use
|
|
||||||
* `:env` - `Environment` calling the build hook; note that this may be
|
|
||||||
different from the Environment that the build hook was added to in the case
|
|
||||||
that the original Environment was cloned with build hooks!
|
|
||||||
* `:target` - `String` name of the target file
|
|
||||||
* `:sources` - `Array` of the source files
|
|
||||||
* `:vars` - `Rscons::VarSet` containing the construction variables to use.
|
|
||||||
The build hook can overwrite entries in `build_op[:vars]` to alter the
|
|
||||||
construction variables in use for this specific build operation.
|
|
||||||
|
|
||||||
### Example: Creating a static library
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env.Library("mylib.a", Dir["src/**/*.c"])
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
### Example: Creating a C++ parser source from a Yacc/Bison input file
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
Rscons::Environment.new do |env|
|
|
||||||
env.CFile("#{env.build_root}/parser.tab.cc", "parser.yy")
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
## Details
|
|
||||||
|
|
||||||
### Builders
|
|
||||||
|
|
||||||
Rscons ships with a number of builders:
|
|
||||||
|
|
||||||
* CFile, which builds a C or C++ source file from a lex or yacc input file
|
|
||||||
* Disassemble, which disassembles an object file to a disassembly listing
|
|
||||||
* Library, which collects object files into a static library archive file
|
|
||||||
* Object, which compiles source files to produce an object file
|
|
||||||
* Preprocess, which invokes the C/C++ preprocessor on a source file
|
|
||||||
* Program, which links object files to produce an executable
|
|
||||||
|
|
||||||
If you want to create an Environment that does not contain any builders,
|
|
||||||
you can use the `exclude_builders` key to the Environment constructor.
|
|
||||||
|
|
||||||
#### CFile
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
env.CFile(target, source)
|
|
||||||
# Example
|
|
||||||
env.CFile("parser.c", "parser.y")
|
|
||||||
```
|
|
||||||
|
|
||||||
The CFile builder will generate a C or C++ source file from a lex (.l, .ll)
|
|
||||||
or yacc (.y, .yy) input file.
|
|
||||||
|
|
||||||
#### Disassemble
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
env.Disassemble(target, source)
|
|
||||||
# Example
|
|
||||||
env.Disassemble("module.dis", "module.o")
|
|
||||||
```
|
|
||||||
|
|
||||||
The Disassemble builder generates a disassembly listing using objdump from
|
|
||||||
and object file.
|
|
||||||
|
|
||||||
#### Library
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
env.Library(target, sources)
|
|
||||||
# Example
|
|
||||||
env.Library("lib.a", Dir["src/**/*.c"])
|
|
||||||
```
|
|
||||||
|
|
||||||
The Library builder creates a static library archive from the given source
|
|
||||||
files.
|
|
||||||
|
|
||||||
#### Object
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
env.Object(target, sources)
|
|
||||||
# Example
|
|
||||||
env.Object("module.o", "module.c")
|
|
||||||
```
|
|
||||||
|
|
||||||
The Object builder compiles the given sources to an object file.
|
|
||||||
|
|
||||||
#### Preprocess
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
env.Preprocess(target, source)
|
|
||||||
# Example
|
|
||||||
env.Preprocess("module-preprocessed.cc", "module.cc")
|
|
||||||
```
|
|
||||||
|
|
||||||
The Preprocess builder invokes either `${CC}` or `${CXX}` (depending on if the
|
|
||||||
source contains an extension in `${CXXSUFFIX}` or not) and writes the
|
|
||||||
preprocessed output to the target file.
|
|
||||||
|
|
||||||
#### Program
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
env.Program(target, sources)
|
|
||||||
# Example
|
|
||||||
env.Program("myprog", Dir["src/**/*.cc"])
|
|
||||||
```
|
|
||||||
|
|
||||||
The Program builder compiles and links the given sources to an executable file.
|
|
||||||
Object files or source files can be given as `sources`.
|
|
||||||
|
|
||||||
### Managing Environments
|
|
||||||
|
|
||||||
An Rscons::Environment consists of:
|
|
||||||
|
|
||||||
* a collection of construction variables
|
|
||||||
* a collection of builders
|
|
||||||
* a mapping of build directories from source directories
|
|
||||||
* a default build root to apply if no build directories are matched
|
|
||||||
* a collection of targets to build
|
|
||||||
* a collection of build hooks
|
|
||||||
|
|
||||||
When cloning an environment, by default the construction variables and builders
|
|
||||||
are cloned, but the new environment does not inherit any of the targets, build
|
|
||||||
hooks, build directories, or the build root from the source environment.
|
|
||||||
|
|
||||||
The set of environment attributes that are cloned is controllable via the
|
|
||||||
`:clone` option to the `#clone` method.
|
|
||||||
For example, `env.clone(clone: :all)` will include construction variables,
|
|
||||||
builders, build hooks, build directories, and the build root.
|
|
||||||
|
|
||||||
The set of pending targets is never cloned.
|
|
||||||
|
|
||||||
Cloned environments contain "deep copies" of construction variables.
|
|
||||||
For example, in:
|
|
||||||
|
|
||||||
```ruby
|
|
||||||
base_env = Rscons::Environment.new
|
|
||||||
base_env["CPPPATH"] = ["one", "two"]
|
|
||||||
cloned_env = base_env.clone
|
|
||||||
cloned_env["CPPPATH"] << "three"
|
|
||||||
```
|
|
||||||
|
|
||||||
`base_env["CPPPATH"]` will not include "three".
|
|
||||||
|
|
||||||
### Construction Variable Naming
|
|
||||||
|
|
||||||
* uppercase strings - the default construction variables that Rscons uses
|
|
||||||
* symbols, lowercase strings - reserved as user-defined construction variables
|
|
||||||
|
|
||||||
### API documentation
|
|
||||||
|
|
||||||
Documentation for the complete Rscons API can be found at
|
|
||||||
http://rubydoc.info/github/holtrop/rscons/frames.
|
|
||||||
|
|
||||||
## Release Notes
|
|
||||||
|
|
||||||
### v1.5.0
|
|
||||||
|
|
||||||
- add "json" as a runtime dependency
|
|
||||||
- update construction variables to match SCons more closely
|
|
||||||
- add CPPDEFPREFIX, INCPREFIX, CPPDEFINES, CCFLAGS, LIBDIRPREFIX, and LIBLINKPREFIX
|
|
||||||
- add Environment#shell
|
|
||||||
- add Environment#parse_flags, #parse_flags!, #merge_flags
|
|
||||||
- unbuffer $stdout by default
|
|
||||||
- add PROGSUFFIX construction variable (defaults to .exe on MinGW/Cygwin)
|
|
||||||
- add Rscons::BuildTarget and Builder#create_build_target
|
|
||||||
- update specs to RSpec 3.x and fix to run on MinGW/Cygwin/Linux
|
|
||||||
- add YARD documentation to get to 100% coverage
|
|
||||||
|
|
||||||
### v1.4.3
|
|
||||||
|
|
||||||
- fix builders properly using construction variable overrides
|
|
||||||
- expand nil construction variables to empty strings
|
|
||||||
|
|
||||||
### v1.4.2
|
|
||||||
|
|
||||||
- add Environment#expand_path
|
|
||||||
- expand construction variable references in builder targets and sources before invoking builder
|
|
||||||
|
|
||||||
### v1.4.1
|
|
||||||
|
|
||||||
- fix invoking a builder with no sources while a build root defined
|
|
||||||
|
|
||||||
### v1.4.0
|
|
||||||
|
|
||||||
- add CFile builder
|
|
||||||
- add Disassemble builder
|
|
||||||
- add Preprocess builder
|
|
||||||
- pass the Environment object to build hooks in the :env key of the build_op parameter
|
|
||||||
- expand target/source paths beginning with "^/" to be relative to the Environment's build root
|
|
||||||
- many performance improvements, including:
|
|
||||||
- use JSON instead of YAML for the cache to improve loading speed (Issue #7)
|
|
||||||
- store a hash of the build command instead of the full command contents in the cache
|
|
||||||
- implement copy-on-write semantics for construction variables when cloning Environments
|
|
||||||
- only load the cache once instead of on each Environment#process
|
|
||||||
- only write the cache when something has changed
|
|
||||||
- fix Cache#mkdir_p to handle relative paths (Issue #5)
|
|
||||||
- flush the cache to disk if a builder raises an exception (Issue #4)
|
|
||||||
|
|
||||||
### v1.3.0
|
|
||||||
|
|
||||||
- change Environment#execute() options parameter to accept the following options keys:
|
|
||||||
- :env to pass an environment Hash to Kernel#system
|
|
||||||
- :options to pass an options Hash to Kernel#system
|
|
||||||
|
|
||||||
### v1.2.0
|
|
||||||
|
|
||||||
- add :clone option to Environment#clone to control exactly which Environment attributes are cloned
|
|
||||||
- allow nil to be passed in to Environment#build_root=
|
|
||||||
|
|
||||||
### v1.1.0
|
|
||||||
|
|
||||||
- Change Cache#up_to_date?() and #register_build() to accept a single target
|
|
||||||
file or an array of target file names
|
|
||||||
|
|
||||||
## Contributing
|
|
||||||
|
|
||||||
1. Fork it
|
|
||||||
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
||||||
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
||||||
4. Push to the branch (`git push origin my-new-feature`)
|
|
||||||
5. Create new Pull Request
|
|
||||||
+79
-10
@@ -5,22 +5,91 @@ rescue Bundler::BundlerError => e
|
|||||||
raise LoadError.new("Unable to setup Bundler; you might need to `bundle install`: #{e.message}")
|
raise LoadError.new("Unable to setup Bundler; you might need to `bundle install`: #{e.message}")
|
||||||
end
|
end
|
||||||
|
|
||||||
require "bundler/gem_tasks"
|
|
||||||
require "rspec/core/rake_task"
|
require "rspec/core/rake_task"
|
||||||
require "yard"
|
require "yard"
|
||||||
|
require "rake/clean"
|
||||||
|
require "fileutils"
|
||||||
|
|
||||||
RSpec::Core::RakeTask.new(:spec)
|
CLEAN.include %w[build_test_run .yardoc yard coverage test]
|
||||||
|
CLOBBER.include %w[dist pkg]
|
||||||
|
|
||||||
|
task :build_dist do
|
||||||
|
sh "ruby rb/build_dist.rb"
|
||||||
|
end
|
||||||
|
|
||||||
|
RSpec::Core::RakeTask.new(:spec, :example_string) do |task, args|
|
||||||
|
if args.example_string
|
||||||
|
ENV["partial_specs"] = "1"
|
||||||
|
task.rspec_opts = %W[-e "#{args.example_string}" -f documentation]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
task :spec => :build_dist
|
||||||
|
|
||||||
|
# dspec task is useful to test the distributable release script, but is not
|
||||||
|
# useful for coverage information.
|
||||||
|
desc "Dist Specs"
|
||||||
|
task :dspec, [:example_string] => :build_dist do |task, args|
|
||||||
|
FileUtils.mkdir_p("test")
|
||||||
|
FileUtils.cp("dist/rscons", "test/rscons.rb")
|
||||||
|
ENV["dist_specs"] = "1"
|
||||||
|
Rake::Task["spec"].invoke(args.example_string)
|
||||||
|
ENV.delete("dist_specs")
|
||||||
|
FileUtils.rm_f(Dir.glob(".rscons-*"))
|
||||||
|
end
|
||||||
|
|
||||||
YARD::Rake::YardocTask.new do |yard|
|
YARD::Rake::YardocTask.new do |yard|
|
||||||
yard.files = ['lib/**/*.rb']
|
yard.files = ['lib/**/*.rb']
|
||||||
|
yard.options = ["-ogen/yard"]
|
||||||
|
end
|
||||||
|
|
||||||
|
task :gen_large_project, [:size] => :build_dist do |task, args|
|
||||||
|
size = (args.size || 10000).to_i
|
||||||
|
FileUtils.rm_rf("large_project")
|
||||||
|
FileUtils.mkdir_p("large_project/src")
|
||||||
|
size.times do |i|
|
||||||
|
File.open("large_project/src/fn#{i}.c", "w") do |fh|
|
||||||
|
fh.puts(<<-EOF)
|
||||||
|
int fn#{i}(void)
|
||||||
|
{
|
||||||
|
return #{i};
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
File.open("large_project/src/fn#{i}.h", "w") do |fh|
|
||||||
|
fh.puts %[int fn#{i}(void);]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
File.open("large_project/src/main.c", "w") do |fh|
|
||||||
|
size.times do |i|
|
||||||
|
fh.puts %[#include "fn#{i}.h"]
|
||||||
|
end
|
||||||
|
fh.puts <<-EOF
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
int result = 0;
|
||||||
|
EOF
|
||||||
|
size.times do |i|
|
||||||
|
fh.puts %[result += fn#{i}();]
|
||||||
|
end
|
||||||
|
fh.puts <<-EOF
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
File.open("large_project/Rsconscript", "w") do |fh|
|
||||||
|
fh.puts <<EOF
|
||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Program("project", glob("src/*.c"))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
FileUtils.cp("dist/rscons", "large_project")
|
||||||
|
end
|
||||||
|
|
||||||
|
task :user_guide do
|
||||||
|
system("ruby", "-Ilib", "rb/gen_user_guide.rb")
|
||||||
end
|
end
|
||||||
|
|
||||||
task :default => :spec
|
task :default => :spec
|
||||||
|
|
||||||
task :clean do
|
|
||||||
FileUtils.rm_rf(["build_test_run", "doc", "coverage"])
|
|
||||||
end
|
|
||||||
|
|
||||||
task :clobber => :clean do
|
|
||||||
FileUtils.rm_rf(["pkg"])
|
|
||||||
end
|
|
||||||
Executable
+7
@@ -0,0 +1,7 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require "rscons/cli"
|
||||||
|
|
||||||
|
if __FILE__ == $0
|
||||||
|
Rscons::Cli.run(ARGV)
|
||||||
|
end
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.CFile("lexer.c", "lexer.l")
|
||||||
|
env.CFile("parser.c", "parser.y")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.CFile("file.c", "foo.bar")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
%{
|
||||||
|
%}
|
||||||
|
|
||||||
|
%%
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
%{
|
||||||
|
%}
|
||||||
|
|
||||||
|
%token ONE
|
||||||
|
|
||||||
|
%%
|
||||||
|
|
||||||
|
one: ONE
|
||||||
|
;
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
build do
|
||||||
|
debug = Environment.new(echo: :command) do |env|
|
||||||
|
env['CFLAGS'] = '-O2'
|
||||||
|
env['CPPFLAGS'] = '-DSTRING="Debug Version"'
|
||||||
|
env.Program('program-debug.exe', Dir['src/*.c'])
|
||||||
|
end
|
||||||
|
|
||||||
|
release = debug.clone do |env|
|
||||||
|
env["CPPFLAGS"] = '-DSTRING="Release Version"'
|
||||||
|
env.Program('program-release.exe', Dir['src/*.c'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
build do
|
||||||
|
env1 = Environment.new(echo: :command) do |env|
|
||||||
|
env['CFLAGS'] = '-O2'
|
||||||
|
env.add_build_hook do |builder|
|
||||||
|
builder.vars['CPPFLAGS'] = '-DSTRING="Hello"'
|
||||||
|
end
|
||||||
|
env.add_post_build_hook do |builder|
|
||||||
|
$stdout.puts "post #{builder.target}"
|
||||||
|
end
|
||||||
|
env.Program('program.exe', Dir['src/*.c'])
|
||||||
|
end
|
||||||
|
|
||||||
|
env2 = env1.clone do |env|
|
||||||
|
env.Program('program2.exe', Dir['src/*.c'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_compiler "nope.nope"
|
||||||
|
end
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
autoconf false
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
configure do
|
||||||
|
check_c_compiler
|
||||||
|
check_c_header "stdio.h"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Program("simple.exe", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_compiler
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_compiler "mycompiler"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_compiler "gcc", "clang"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_header "not___found.h"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_header "not___found.h", fail: false
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
configure do
|
||||||
|
check_c_header "not___found.h", fail: false, set_define: "HAVE_NOT___FOUND_H"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Object("simple.o", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_c_header "string.h"
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
configure do
|
||||||
|
check_c_header "string.h", set_define: "HAVE_STRING_H"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Object("simple.o", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
configure do
|
||||||
|
check_cfg program: "my-config"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Program("myconfigtest", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
configure do
|
||||||
|
check_cfg package: "mypackage"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Program("myconfigtest", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
configure do
|
||||||
|
check_cfg package: "mypackage", use: "myp"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Copy("myconfigtest1.c", "simple.c")
|
||||||
|
env.Program("myconfigtest1.exe", "myconfigtest1.c")
|
||||||
|
end
|
||||||
|
|
||||||
|
Environment.new(echo: :command, use: "myp") do |env|
|
||||||
|
env.Copy("myconfigtest2.c", "simple.c")
|
||||||
|
env.Program("myconfigtest2.exe", "myconfigtest2.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_cxx_compiler
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_cxx_compiler "mycompiler"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_cxx_compiler "g++", "clang++"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_cxx_header "not___found.h"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_cxx_header "not___found.h", fail: false
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_cxx_header "string.h"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_d_compiler
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_d_compiler "mycompiler"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_d_compiler "gdc", "ldc2"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_d_import "not.found"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_d_import "not.found", fail: false
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_d_import "std.stdio"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_lib "mfoofoo"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_lib "mfoofoo", fail: false
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
configure do
|
||||||
|
check_lib "m"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Program("simple.exe", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
configure do
|
||||||
|
check_lib "m", use: :m
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Copy("test1.c", "simple.c")
|
||||||
|
env.Program("test2.exe", "test1.c")
|
||||||
|
end
|
||||||
|
|
||||||
|
Environment.new(echo: :command, use: %w[m]) do |env|
|
||||||
|
env.Copy("test2.c", "simple.c")
|
||||||
|
env.Program("test2.exe", "test2.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
configure do
|
||||||
|
check_lib "m", use: false
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Copy("test1.c", "simple.c")
|
||||||
|
env.Program("test2.exe", "test1.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_program "program-that-is-not-found"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_program "program-that-is-not-found", fail: false
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
configure do
|
||||||
|
check_program "find"
|
||||||
|
end
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
Environment.new do |env|
|
||||||
|
env.Object("simple.o", "simple.cc")
|
||||||
|
end
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
project_name "configure test"
|
||||||
|
autoconf false
|
||||||
|
configure do
|
||||||
|
check_c_compiler
|
||||||
|
check_cxx_compiler
|
||||||
|
check_d_compiler
|
||||||
|
check_cfg package: "mypackage"
|
||||||
|
check_c_header "stdio.h"
|
||||||
|
check_cxx_header "iostream"
|
||||||
|
check_d_import "std.stdio"
|
||||||
|
check_lib "m"
|
||||||
|
check_program "ls"
|
||||||
|
end
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
configure do
|
||||||
|
check_c_header "math.h", set_define: "HAVE_MATH_H"
|
||||||
|
check_c_header "stdio.h", set_define: "HAVE_STDIO_H"
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Object("simple.o", "simple.c")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
check_c_compiler "gcc"
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
printf("This is a simple C program\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
class MySource < Rscons::Builder
|
||||||
|
def run(options)
|
||||||
|
File.open(@target, 'w') do |fh|
|
||||||
|
fh.puts <<EOF
|
||||||
|
#define THE_VALUE 5678
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.add_builder(MySource)
|
||||||
|
env.MySource('inc.h', [])
|
||||||
|
env.Program('program.exe', Dir['*.c'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Command("inc.c",
|
||||||
|
[],
|
||||||
|
"CMD" => %w[ruby gen.rb ${_TARGET}],
|
||||||
|
"CMD_DESC" => "Generating")
|
||||||
|
env["build_root"] = env.build_root
|
||||||
|
env["inc_c"] = "inc.c"
|
||||||
|
env.build_after("${build_root}/program.o", "${inc_c}")
|
||||||
|
env.Program("program.exe", ["program.c", "inc.c"])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
class MySource < Rscons::Builder
|
||||||
|
def run(options)
|
||||||
|
File.open(@target, 'w') do |fh|
|
||||||
|
fh.puts <<EOF
|
||||||
|
#define THE_VALUE 678
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
env = Environment.new do |env|
|
||||||
|
env["hdr"] = "inc.h"
|
||||||
|
env["src"] = "program.c"
|
||||||
|
env.add_builder(MySource)
|
||||||
|
env.MySource('${hdr}')
|
||||||
|
env.Program('program.exe', "${src}")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
class MySource < Rscons::Builder
|
||||||
|
def run(options)
|
||||||
|
File.open(@target, 'w') do |fh|
|
||||||
|
fh.puts <<EOF
|
||||||
|
#define THE_VALUE #{@env.expand_varref("${the_value}")}
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
e1 = Environment.new do |env|
|
||||||
|
env.add_builder(MySource)
|
||||||
|
env["one"] = "5"
|
||||||
|
env[:cfg] = {val: "9"}
|
||||||
|
env["two"] = lambda do |args|
|
||||||
|
args[:env][:cfg][:val]
|
||||||
|
end
|
||||||
|
env["the_value"] = lambda do |args|
|
||||||
|
"${one}${two}78"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
e1.clone do |env|
|
||||||
|
env[:cfg][:val] = "6"
|
||||||
|
env.MySource('inc.h', [])
|
||||||
|
env.Program('program.exe', Dir['*.c'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.add_builder(:MyBuilder) do |options|
|
||||||
|
"hi"
|
||||||
|
end
|
||||||
|
env.MyBuilder("foo")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.add_builder(:MyBuilder) do |options|
|
||||||
|
wait_for(1)
|
||||||
|
end
|
||||||
|
env.MyBuilder("foo")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
sleep 1.0
|
||||||
|
c_file = ARGV.first
|
||||||
|
h_file = File.basename(c_file, ".c") + ".h"
|
||||||
|
File.open(c_file, "w") do |fh|
|
||||||
|
fh.puts
|
||||||
|
end
|
||||||
|
File.open(h_file, "w") do |fh|
|
||||||
|
fh.puts("#define THE_VALUE 191")
|
||||||
|
end
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
class CHGen < Rscons::Builder
|
||||||
|
def run(options)
|
||||||
|
c_fname = @target
|
||||||
|
h_fname = @target.sub(/\.c$/, ".h")
|
||||||
|
unless @cache.up_to_date?([c_fname, h_fname], "", @sources, @env)
|
||||||
|
puts "CHGen #{c_fname}"
|
||||||
|
File.open(c_fname, "w") {|fh| fh.puts "int THE_VALUE = 42;"}
|
||||||
|
File.open(h_fname, "w") {|fh| fh.puts "extern int THE_VALUE;"}
|
||||||
|
@cache.register_build([c_fname, h_fname], "", @sources, @env)
|
||||||
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.add_builder(CHGen)
|
||||||
|
env.CHGen("inc.c", ["program.c"])
|
||||||
|
env.Program("program.exe", %w[program.c inc.c])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["build_root"] = env.build_root
|
||||||
|
env["inc_h"] = "inc.h"
|
||||||
|
|
||||||
|
env.Copy("copy_inc.h", "${inc_h}")
|
||||||
|
env.depends("${build_root}/program.o", "${inc_h}")
|
||||||
|
env.Program("program.exe", ["program.c", "inc.c"])
|
||||||
|
|
||||||
|
inc_c = env.Command("inc.c",
|
||||||
|
[],
|
||||||
|
"CMD" => %w[ruby gen.rb ${_TARGET}],
|
||||||
|
"CMD_DESC" => "Generating")
|
||||||
|
inc_c.produces("inc.h")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["build_root"] = env.build_root
|
||||||
|
env["inc_h"] = "inc.h"
|
||||||
|
|
||||||
|
env.Copy("copy_inc.h", "${inc_h}")
|
||||||
|
env.depends("${build_root}/program.o", "${inc_h}")
|
||||||
|
env.Program("program.exe", ["program.c", "inc.c"])
|
||||||
|
|
||||||
|
env.Command("inc.c",
|
||||||
|
[],
|
||||||
|
"CMD" => %w[ruby gen.rb ${_TARGET}],
|
||||||
|
"CMD_DESC" => "Generating")
|
||||||
|
env.produces("inc.c", "inc.h")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
class MyBuilder < Rscons::Builder
|
||||||
|
def run(options)
|
||||||
|
if @thread
|
||||||
|
true
|
||||||
|
else
|
||||||
|
print_run_message("#{name} #{target}", nil)
|
||||||
|
@thread = Thread.new do
|
||||||
|
sleep 2
|
||||||
|
FileUtils.touch(@target)
|
||||||
|
end
|
||||||
|
wait_for(@thread)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.add_builder(MyBuilder)
|
||||||
|
env.MyBuilder("foo")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Program("hello-d.exe", glob("*.d"))
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Object("main.o", "main.d")
|
||||||
|
env.Object("mod.o", "mod.d")
|
||||||
|
env.Program("hello-d.exe", ["main.o", "mod.o"])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
import std.stdio;
|
import std.stdio;
|
||||||
|
import mod;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
writeln("Hello from D!");
|
writeln("Hello from D, value is ", Klass.VAL, "!");
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
class Klass
|
||||||
|
{
|
||||||
|
enum VAL = 42;
|
||||||
|
};
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Program("test.exe", glob("*.c"), direct: true)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
lib = env.SharedLibrary("mylib", ["two.c", "three.c"], direct: true)
|
||||||
|
program = env.Program("test.exe", "main.c", "LIBS" => ["mylib"], "LIBPATH" => ["."])
|
||||||
|
env.depends(program, lib)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#include "two.h"
|
||||||
|
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
two();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#include "three.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void three(void)
|
||||||
|
{
|
||||||
|
printf("three\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
void three(void);
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
#include "two.h"
|
||||||
|
#include "three.h"
|
||||||
|
|
||||||
|
void two(void)
|
||||||
|
{
|
||||||
|
three();
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
void two(void);
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Program('header.exe', Dir['*.c'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
require 'json'
|
||||||
|
require 'yaml'
|
||||||
|
env.add_builder(:JsonToYaml) do |params|
|
||||||
|
unless @cache.up_to_date?(@target, :JsonToYaml, @sources, @env)
|
||||||
|
@cache.mkdir_p(File.dirname(@target))
|
||||||
|
File.open(@target, 'w') do |f|
|
||||||
|
f.write(YAML.dump(JSON.load(IO.read(@sources.first))))
|
||||||
|
end
|
||||||
|
@cache.register_build(@target, :JsonToYaml, @sources, @env)
|
||||||
|
end
|
||||||
|
true
|
||||||
|
end
|
||||||
|
env.JsonToYaml('foo.yml', 'foo.json')
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
{ "key": "value" }
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env.Program('library.exe', ['lib.a', 'three.c'])
|
||||||
|
env.Library("lib.a", ['one.c', 'two.c'], 'CPPFLAGS' => ['-Dmake_lib'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Program("library.exe", ["lib.a", "three.c"])
|
||||||
|
env.Object("two.o", "two.c")
|
||||||
|
env.Library("lib.a", ["one.c", "two.o"], 'CPPFLAGS' => ['-Dmake_lib'])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
build do
|
||||||
|
Environment.new(echo: :command) do |env|
|
||||||
|
env["ARCMD"] = %w[ar rcf ${_TARGET} ${_SOURCES}]
|
||||||
|
env.Library("lib.a", glob("*.c"))
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env.Preprocess("pp", "foo.h")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
#define BAR xyz42abc
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
#include "bar.h"
|
||||||
|
BAR
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
libmine = env.SharedLibrary("mine", glob("src/lib/*.c"))
|
||||||
|
env.Program("test-shared.exe",
|
||||||
|
glob("src/*.c"),
|
||||||
|
"LIBPATH" => %w[.],
|
||||||
|
"LIBS" => %w[mine])
|
||||||
|
env.build_after("test-shared.exe", libmine)
|
||||||
|
env.Program("test-static.exe",
|
||||||
|
glob("src/**/*.c"))
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
File.open("foo.xyz", "wb") do |fh|
|
||||||
|
fh.puts("hi")
|
||||||
|
end
|
||||||
|
env.SharedObject("foo.o", "foo.xyz")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
env.Object("file.S", "src/lib/one.c", "CFLAGS" => env["CFLAGS"] + ["-S"])
|
||||||
|
libmine = env.SharedLibrary("mine", "file.S")
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
libmine = env.SharedLibrary("mine", glob("src/lib/*.cc"))
|
||||||
|
env.Program("test-shared.exe",
|
||||||
|
glob("src/*.cc"),
|
||||||
|
"LIBPATH" => %w[.],
|
||||||
|
"LIBS" => %w[mine])
|
||||||
|
env.build_after("test-shared.exe", libmine)
|
||||||
|
env.Program("test-static.exe",
|
||||||
|
glob("src/**/*.cc"))
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
libmine = env.SharedLibrary("mine", glob("src/lib/*.d"))
|
||||||
|
env.Program("test-shared.exe",
|
||||||
|
glob("src/*.c"),
|
||||||
|
"LIBPATH" => %w[.],
|
||||||
|
"LIBS" => %w[mine])
|
||||||
|
env.build_after("test-shared.exe", libmine)
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
env.SharedObject("one.o", "src/lib/one.c")
|
||||||
|
libmine = env.SharedLibrary("mine", ["one.o", "src/lib/two.c"])
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
build do
|
||||||
|
Environment.new do |env|
|
||||||
|
env["CPPPATH"] << "src/lib"
|
||||||
|
env["SHLD"] = "gcc"
|
||||||
|
libmine = env.SharedLibrary("mine", glob("src/lib/*.c"))
|
||||||
|
env.Program("test-shared.exe",
|
||||||
|
glob("src/*.c"),
|
||||||
|
"LIBPATH" => %w[.],
|
||||||
|
"LIBS" => %w[mine])
|
||||||
|
env.build_after("test-shared.exe", libmine)
|
||||||
|
env.Program("test-static.exe",
|
||||||
|
glob("src/**/*.c"))
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void one(void)
|
||||||
|
{
|
||||||
|
printf("Hi from one()\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void one(void)
|
||||||
|
{
|
||||||
|
printf("Hi from one()\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import core.stdc.stdio;
|
||||||
|
|
||||||
|
extern (C) void one()
|
||||||
|
{
|
||||||
|
printf("Hi from one()\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#ifndef ONE_H
|
||||||
|
|
||||||
|
void one(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void two(void)
|
||||||
|
{
|
||||||
|
printf("Hi from two()\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
void two(void)
|
||||||
|
{
|
||||||
|
printf("Hi from two()\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import core.stdc.stdio;
|
||||||
|
|
||||||
|
extern (C) void two()
|
||||||
|
{
|
||||||
|
printf("Hi from two()\n");
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#ifndef TWO_H
|
||||||
|
|
||||||
|
void two(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#include "one.h"
|
||||||
|
#include "two.h"
|
||||||
|
|
||||||
|
int main(int argc, char * argv[])
|
||||||
|
{
|
||||||
|
one();
|
||||||
|
two();
|
||||||
|
}
|
||||||
Loaded 100 of 225 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user