Compare commits

...
183 Commits
Author SHA1 Message Date
josh 784bbd471b wip 2019-04-21 21:08:02 -04:00
josh c60589a9c9 move a few Install builder tests to Copy builder 2019-04-19 14:32:25 -04:00
josh 04fc9866c4 recurse to configure before build rather than calling configure() directly 2019-04-19 14:15:33 -04:00
josh 7a807575b2 only use build_tests/typical/install.rb for Install builder specs 2019-04-19 14:12:33 -04:00
josh 787b3249a7 raise error if user constructs an Environment before configuration is complete 2019-04-14 20:45:31 -04:00
josh 3115e55739 move Application#determine_n_threads -> Util.determine_n_threads 2019-04-14 15:49:46 -04:00
josh 0c07ea0437 compress rscons script like waf - close #76 2019-04-14 15:26:28 -04:00
josh 0e7c976089 fix inconsistent type handling in VarSet#expand_varref - #73 2019-04-14 14:11:48 -04:00
josh 921f0d2cb1 expose glob method directly to Rsconscript - close #97 2019-04-14 12:51:37 -04:00
josh c23426c5aa remove SharedObject special handling in Environment#get_build_fname - close #96 2019-04-14 12:41:12 -04:00
josh ea2b1e73d1 add direct mode to Program builder - close #61 2019-04-14 12:35:28 -04:00
josh 9bf4b8fa96 add barriers - close #53 2019-04-09 22:29:22 -04:00
josh 008fa4844d allow passing Builder objects as sources to build targets - close #95 2019-04-09 20:35:46 -04:00
josh 568b78e2e2 test tracking object file source language - #87 2019-04-09 19:52:25 -04:00
josh 3b00016278 Program builder cleanup, track object file source language - #94, #87 2019-04-09 19:41:13 -04:00
josh a655d04541 Add Depfile builder mixin - #94 2019-04-09 18:41:02 -04:00
josh 5534878f68 Object builder cleanup - #94 2019-04-09 18:28:42 -04:00
josh 1efee50b2c add Builders::Mixins::ObjectDeps to commonize some builder functionality 2019-03-16 22:34:07 -04:00
josh 3ff09978f4 remove Builder.features and Builder.produces? 2019-03-16 21:54:20 -04:00
josh ac1fc6d106 move default construction variables into one place 2019-03-13 21:17:37 -04:00
josh 06b9c98ed0 support false :use value for configure operations - close #93 2019-02-28 21:09:56 -05:00
josh f58744d31f mv build_dist.rb -> rb/build_dist.rb 2019-02-28 21:00:39 -05:00
josh bf136e79f2 rework showing failed command - close #89 2019-02-26 06:52:43 -05:00
josh ab2fa1662f Replace specialized Cache accessors with general #[]/#[]= methods. 2019-02-25 21:22:54 -05:00
josh 68118c2707 Remove Cache dirty-tracking
It really wasn't necessary since Cache#write is not called often.
2019-02-25 21:16:48 -05:00
josh 6ce3d59ad9 Add integration test for copying multiple sources with Copy builder 2019-02-25 21:13:57 -05:00
josh 983862a528 update builder messages - close #77 2019-02-18 22:30:11 -05:00
josh 658b73e4de add build test for a builder waiting on another builder 2019-02-17 22:20:51 -05:00
josh b882f8de99 Rework builder interface to only use #run method - close #91
The builder's #run method will be called repeatedly until it returns
true or false. The Builder#wait_for method can be used to cause a
builder to wait for a Thread, Command, or another Builder.
2019-02-17 22:08:39 -05:00
josh 8426a54a57 replace JobSet with BuilderSet 2019-02-17 14:17:31 -05:00
josh ee1640008c simplify JobSet logic a little 2019-02-17 13:59:03 -05:00
josh 7cfd23e16f remove :builder and :cache from build_operation 2019-02-16 19:12:33 -05:00
josh 5c3b615aee remove unused :which parameter to Environment#wait_for_threaded_commands 2019-02-16 18:36:44 -05:00
josh 935848c3b5 remove some builder-tracked fields from the build_operation Hash 2019-02-16 18:21:19 -05:00
josh d047a1bf29 JobSet only stores builders instead of build info hashes 2019-02-16 18:06:03 -05:00
josh 016bf5eac7 use Builder instance variables as much as possible in #finalize 2019-02-16 17:53:21 -05:00
josh 33504f586b pass Builder object to build hooks instead of build_operation Hash 2019-02-13 21:13:13 -05:00
josh 86594c62b6 begin transitioning builders to using instance variables instead of #run options Hash fields 2019-02-11 22:53:41 -05:00
josh ea25f62f7c remove deprecated Environment#add_target parameter - #84 2019-02-10 22:20:34 -05:00
josh f2cfc25604 Remove Environment#run_builder :allow_delayed_execution option - #84 2019-02-10 22:13:37 -05:00
josh a1f5f022d1 test build hooks overwriting entire vars hash as a non-backwards-compatiblity test 2019-02-10 22:07:08 -05:00
josh 7992450383 Drop support for 5-argument form of Builder#run - #84 2019-02-10 21:47:34 -05:00
josh b41a368da1 alphabetize Util public methods 2019-02-10 21:26:37 -05:00
josh 1b63dc7503 move Environment.parse_makefile_deps to Util 2019-02-10 21:23:52 -05:00
josh db788cdd35 Move Environment#command_to_s to Util. 2019-02-10 21:16:56 -05:00
josh 3f8b4d616f Remove BuildTarget, Builder#create_build_target, and Builder#setup - close #90 2019-02-10 18:24:49 -05:00
josh aac32d20b0 create Builder instance for each build operation - close #88 2019-02-10 17:27:40 -05:00
josh 12f1909d35 remove a few deprecated methods - #84 2019-01-04 13:55:00 -05:00
josh 31ef45258f make global CLI options available under subcommands - close #86 2019-01-03 13:50:01 -05:00
josh 9f9b7f0bf4 preserve .mf dependency files - close #58 2019-01-01 21:17:28 -05:00
josh 918c629435 add verbose CLI option to set Environment default echo mode - close #70 2019-01-01 16:15:22 -05:00
josh eaac473f44 provide Environment construction option to use stored configuration settings - close #78 2019-01-01 15:49:15 -05:00
josh fa5aa51daa Do not rebuild after building after auto-configuration. - close #80
Split Environment into BasicEnvironment and Environment.
2018-12-30 15:57:05 -05:00
josh 347d651ab6 Add builder construction variables to Environments before the builder is added. 2018-12-29 17:57:41 -05:00
josh 08085f09c4 libs found with check_lib should be added to LIBS - close #79 2018-12-17 23:05:18 -05:00
josh 5915ac2b95 ConfigureOp: refactor some logic into #store_common 2018-12-17 22:54:34 -05:00
josh a98c111cd2 implement distclean operation - close #81 2018-12-17 22:47:00 -05:00
josh 93ffed2eb2 Use "Environment" instead of "Rscons::Environment" in build tests 2018-12-17 22:14:35 -05:00
josh f8e6666a2c Add 'build' DSL method.
Disallow processing Environments until configuration is performed.
2018-12-17 22:14:35 -05:00
josh 5720662b7c avoid mkdir() race conditions - close #75 2018-12-11 22:13:52 -05:00
josh 432d221be2 remove build_dir functionality - close #65 2018-12-11 22:06:20 -05:00
John Lindgren a1efb1c1b3 Reduce recursion of VarSet#expand_varref by expanding vars earlier.
It's common for a build command to contain a reference like:

    ${INCPREFIX}${CPPPATH}

Where ${INCPREFIX} is "-I" and ${CPPPATH} is an array of include
paths.  Without this change, Rscons expands ${INCPREFIX} (and then
tries to expand "-I") repeatedly, once for each path.

This change simply makes Rscons intelligent enough to expand
${INCPREFIX} only once, then join the expanded value to each path.

In a mid-sized rake project, ruby-prof shows that the number of
calls to expand_varref is reduced from ~80,000 to ~30,000., and the
total CPU time spent in expand_varref is reduced by about 30%.

In a larger project, the improvement in real build time is small
but consistent enough to be measurable (~0.5 seconds off a total
of ~20 seconds).
2018-12-09 21:20:44 -05:00
josh 7c7ee142e0 implement autoconf - close #63, close #68, closes #67 2018-12-03 22:23:42 -05:00
josh ba69f05e99 remove backtrace from stderr for unknown CLI options - close #69 2018-11-30 23:29:19 -05:00
josh 6180410cc4 add spec for Cache validating JSON contents 2018-11-30 23:11:52 -05:00
josh 2d44a88fb6 add spec for unknown CLI operation 2018-11-30 23:08:16 -05:00
josh 28e3781331 add configure spec testing --prefix 2018-11-30 23:05:41 -05:00
josh c0a28d0207 add configure spec to check multiple set_define's being stored 2018-11-29 22:14:10 -05:00
josh 0e27e967d0 configure: fix handling build_dir and prefix options 2018-11-29 22:06:36 -05:00
josh 1ecce7e99e add configure spec to check as much as possible 2018-11-29 22:02:42 -05:00
josh 25b73ebd8f move logic to find an executable from ConfigureOp to Util 2018-11-29 21:51:30 -05:00
josh bca963af5c add configure spec for check_cfg not finding the specified program 2018-11-29 21:28:37 -05:00
josh ba5377a1ce add configure specs to check for unknown compiler names 2018-11-29 20:51:24 -05:00
josh 8d7fd4bda8 test all known compiler invocation commands - close #66 2018-11-29 17:44:36 -05:00
josh e3e2e46d6e fix configure :set_define handling to append to CPPDEFINES array 2018-11-25 22:00:55 -05:00
josh 9e0ce5a55c add spec for check_cfg with a :package argument 2018-11-25 21:58:22 -05:00
josh b88131eb2f add specs testing configure :set_define option and fix the same 2018-11-25 21:45:46 -05:00
josh dff80587ac move Rscons.absolute_path?() to Util 2018-11-25 21:31:48 -05:00
josh cd2696dd0b add Util specs 2018-11-25 21:22:37 -05:00
josh 36643c1ab1 add Util module and Util.make_relative_path() 2018-11-25 21:17:11 -05:00
josh 778d9ed8b2 add simplecov filters to filter out spec/dspec tests when the opposite spec task is executed 2018-11-25 21:11:00 -05:00
josh 660d30558a remove Environment#to_h 2018-11-25 21:00:29 -05:00
josh 82fbd34149 add dspec task to test dist file; revert spec task to normal behavior 2018-11-25 20:45:32 -05:00
josh e0b82d37af cache: remove obsolete "default_environment_vars" entry 2018-11-25 17:02:02 -05:00
josh 7a90325b67 set Environment build root automatically - close #64 2018-11-25 16:58:19 -05:00
josh 49116e6b59 store build_dir and prefix configuration options in cache 2018-11-25 16:06:36 -05:00
josh 90300a1606 pass operation options via Hash instead of setting Application attributes 2018-11-25 16:02:04 -05:00
josh 1eb07e9a22 use Rsconscript instead of Rsconsfile - close #62 2018-11-25 15:42:53 -05:00
josh 9975eec165 add build test for check_cfg - close #59 2018-11-23 22:23:01 -05:00
josh 04c0a6a86f colorize configure messages more consistently 2018-11-23 21:55:02 -05:00
josh bfdf3a12fd load configuration data when constructing a new Environment - close #60 2018-11-23 21:23:19 -05:00
josh 6dd9c835ce store configuration data more opaquely in Cache 2018-11-23 20:15:39 -05:00
josh cfec0dcadc simplify Application/Script/ConfigureOp interaction with direct calls to configure methods 2018-11-23 19:59:47 -05:00
josh a1c1cc1855 check_cfg: print something 2018-11-15 17:14:11 -05:00
josh add9f9c50d save configured environment construction flags for separate build step - close #60 2018-11-15 17:04:04 -05:00
josh ba3d656110 consolidate some configure check reporting 2018-11-14 23:30:47 -05:00
josh ab4ca71ac7 implement ConfigureOp#check_cfg - not tested yet 2018-11-14 23:28:00 -05:00
josh aba11155a4 rename check_executable to check_program 2018-11-14 23:00:40 -05:00
josh 3b586cb476 implement ConfigureOp#check_lib 2018-11-14 22:53:00 -05:00
josh 88fd4bd405 robustify Ansi module a bit 2018-11-12 21:50:16 -05:00
josh 7869d38dd8 implement ConfigureOp#check_executable 2018-11-07 22:22:07 -05:00
josh e8990199ef configure: output project name and build directory 2018-11-07 21:56:23 -05:00
josh 6078cb0977 implement ConfigureOp#check_d_import 2018-11-07 21:49:44 -05:00
josh 85b0111a6e implement ConfigureOp#check_cxx_header 2018-11-07 21:44:04 -05:00
josh 6bb0a55a55 implement ConfigureOp#check_c_header 2018-11-07 21:39:42 -05:00
josh 95d5ada865 specs: run each build test from separate directory; keep directory if test fails 2018-11-07 21:33:28 -05:00
josh cd9fffd828 Script: change the way configuration arguments are stored 2018-11-07 20:52:39 -05:00
josh 30511a3443 pass the Environment to configure to ConfigureOp; begin modifying it in the tests 2018-11-07 20:46:07 -05:00
josh d656df5407 implement ConfigureOp#check_d_compiler 2018-11-07 19:05:08 -05:00
josh d54d363a25 implement ConfigureOp#check_cxx_compiler 2018-11-07 18:53:06 -05:00
josh 697db2a987 specs: check_c_compiler: also test when no arguments are given 2018-11-06 22:39:13 -05:00
josh daa90e431c check_c_compiler: add integration test for finding second listed C compiler 2018-11-06 22:28:23 -05:00
josh bdeaec11ba Ansi: add some other colors 2018-11-06 22:19:49 -05:00
josh 7eeb6312ba check_c_compiler: print output; add a integration test 2018-11-06 22:16:38 -05:00
josh 07d9b97ddc set default rake task back to spec 2018-11-06 22:14:34 -05:00
josh af033ee4e0 fill in ConfigureOp#test_c_compiler 2018-11-06 21:45:29 -05:00
josh c9de4f37e6 allow configure to fail; application should return error code from operation 2018-11-06 15:42:10 -05:00
josh 64caaa9a53 add ConfigureOp class 2018-11-06 00:17:22 -05:00
josh d196845c85 parse 'configure' command-line options 2018-11-04 00:16:53 -04:00
josh 5288a47bfb start on specs for configure command 2018-11-03 23:19:54 -04:00
josh 9bd9abcad1 update CHANGELOG.md for v1.17.0 2018-11-02 17:02:46 -04:00
josh b5a8b6f628 remove makefile target name check when parsing dependencies - close #57 2018-11-02 14:24:02 -04:00
michael.metivier 7edcef2b30 Environment.expand_varref has the same allowed parameter types and returns as Varset.expand_varref 2018-11-02 11:42:32 -04:00
michael.metivier c34821864e Allow construction variable expansion on _true_ and _false_ literals 2018-11-02 00:57:20 -04:00
josh 97c24eec6b specs: fix Application#determine_n_threads specs 2018-10-30 17:39:43 -04:00
josh 053df2360f add Rscons.vars back again at least for now 2018-10-30 17:36:30 -04:00
josh 8d766e4804 specs: fix cache_varset.rb builder message 2018-10-30 17:36:30 -04:00
josh e29ec5a126 move clean logic to Application 2018-10-30 17:36:30 -04:00
josh de46bb0cc1 specs: remove usage test when no operation given 2018-10-30 17:00:57 -04:00
josh 084080a682 specs: do not run separate 'configure' step before main build test 2018-10-30 17:00:10 -04:00
josh 3a564c0ca2 add Dsl and ConfigureDsl 2018-10-26 21:17:04 -04:00
josh ac89a122d8 add Application class; update CLI and Script for new architecture 2018-10-21 01:24:15 -04:00
josh ea6ae1be10 remove unneeded OptionParser separators 2018-10-12 17:20:34 -04:00
josh a649c7f4cb add Script class 2018-10-12 17:18:04 -04:00
josh 2f83f36659 start adding subcommand interface to Cli module 2018-09-10 20:35:00 -04:00
josh a46936bc0b change default task to build_dist 2018-09-04 16:04:58 -04:00
josh 95ee63292e Rscons is no longer a gem.
Run specs against the combined distributable standalone script.
2018-09-03 19:32:53 -04:00
josh bcd33fe098 add build_dist.rb to create dist/rscons as a standalone script 2018-09-01 17:00:04 -04:00
josh 5cf77f1f58 v1.16.0 2018-08-24 09:24:03 -04:00
josh b4cc45c381 update documentation 2018-08-24 09:17:23 -04:00
josh 750506201f add github URL to README.md 2018-08-23 15:37:18 -04:00
josh 284312a21c support command-line variables - close #51 2018-08-23 14:58:08 -04:00
josh d081a4695f add shebang line to bin/rscons 2018-08-23 11:30:18 -04:00
josh c7f66694ab add Rscons.glob - close #50 2018-08-23 11:26:20 -04:00
josh 57de94a3fb improve debuggability of cache.up_to_date? - close #46 2018-08-23 10:10:05 -04:00
josh 53ba7dad41 allow passing a VarSet into cache methods - close #47 2018-08-22 16:32:05 -04:00
josh 8cb02a7e34 generate dependencies for D builds - close #49 2018-08-22 15:23:48 -04:00
josh dbbce9e476 update a few dependencies 2018-05-24 15:32:39 -04:00
josh 0dc3a90660 v1.15.0 2017-09-08 15:13:04 -04:00
josh d48c7587d6 add v1.15.0 release notes 2017-09-08 15:06:55 -04:00
josh 70d4740a69 split CHANGELOG.md out of README.md 2017-09-08 15:06:23 -04:00
josh aaae845d60 allow json 1.x or 2.x 2017-09-08 15:04:40 -04:00
josh e900e74342 v1.14.0 2017-08-03 15:55:54 -04:00
josh 62ae3f162d add v1.14.0 release notes 2017-08-03 15:55:38 -04:00
josh 099d26f33c Add Rscons::VarSet#values_at - close #45 2017-08-03 15:54:24 -04:00
josh 89562c584a Environment#print_builder_run_message should support string commands - close #44 2017-08-03 14:10:53 -04:00
josh a9aeaf2356 v1.13.0 2017-07-14 16:24:27 -04:00
josh 5409b3cb34 add v1.13.0 release notes 2017-07-14 16:24:04 -04:00
josh 6d04500c13 Add ability to record side-effect file production - close #43 2017-07-14 16:17:01 -04:00
josh 45e30662d2 add YARD comment for Rscons::Ansi to get to 100% coverage 2017-07-12 15:51:00 -04:00
josh 8f7e044bfd fix YARD @option tag 2017-07-12 15:50:13 -04:00
josh dbea6f0a26 v1.12.0 2017-07-11 16:16:01 -04:00
josh c923eb5c7c add v1.12.0 release notes 2017-07-11 16:14:49 -04:00
josh 529d9aacaa colorize a couple other builders' output messages 2017-07-11 16:12:38 -04:00
josh 65c1bac4f9 be more colorful - close #41 2017-07-11 13:52:01 -04:00
josh 775363ddbd cloned Environments should inherit n_threads - close #42 2017-07-11 10:29:25 -04:00
josh 2a96495e83 wait for in-progress subcommands to complete on build failure - close #39 2017-06-26 22:44:49 -04:00
josh 15e52e488c env.depends should imply env.build_after - close #40 2017-06-21 10:44:52 -04:00
josh c0b12132f0 1.11.1 release notes 2017-06-14 09:58:09 -04:00
josh 9141cf91e7 v1.11.1 2017-06-14 09:57:11 -04:00
josh 7f7e6ef3da fix circular build dependency detection logic 2017-06-14 09:56:51 -04:00
josh 60b3fdbcac update YARD documentation link 2017-06-14 09:12:13 -04:00
josh 5263ea03c6 v1.11.0 2017-06-14 08:56:21 -04:00
josh 6c91823ce2 v1.11.0 release notes 2017-06-14 08:54:57 -04:00
josh 8deb1eb6f8 Change default :clone option to :all to clone all Environment attributes 2017-06-14 08:53:28 -04:00
josh 6d6319799a add v1.10.1 release notes 2017-06-13 19:47:58 -04:00
josh 694642dfbd Allow overriding n_threads on a per-Environment level - close #34 2017-06-13 19:45:53 -04:00
josh 6dd70ff65e raise error when circular dependencies are found - close #38 2017-06-13 19:37:41 -04:00
josh eca01c38df Fix non-blocking thread-wait if Rscons.n_threads is set to 0 - close #37 2017-06-13 19:07:04 -04:00
josh 4ad6ce1d9c SHCFLAGS and SHCXXFLAGS should inherit non-SH flags by default - close #36 2017-06-13 18:41:47 -04:00
josh a49ebc486e env.build_after should expand paths - close #35 2017-06-13 18:38:47 -04:00
josh 74d19ea235 fix construction variable reference table OBJSUFFIX entries 2017-06-12 09:33:52 -04:00
josh d7a6d69a92 update v1.10.0 release notes 2017-06-12 09:33:13 -04:00
230 changed files with 5632 additions and 3187 deletions

No files matched your search

+2
View File
@@ -3,5 +3,7 @@
/_yardoc/
/build_test_run/
/coverage/
/dist/
/doc/
/pkg/
/test/
+210
View File
@@ -0,0 +1,210 @@
## ChangeLog
### 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
+6 -2
View File
@@ -1,4 +1,8 @@
source 'https://rubygems.org'
# Specify your gem's dependencies in rscons.gemspec
gemspec
gem "json"
gem "rspec"
gem "rake"
gem "simplecov"
gem "yard"
gem "rdoc"
+21 -30
View File
@@ -1,51 +1,42 @@
PATH
remote: .
specs:
rscons (1.10.0)
json (~> 1.0)
GEM
remote: https://rubygems.org/
specs:
diff-lcs (1.2.5)
diff-lcs (1.3)
docile (1.1.5)
json (1.8.3)
rake (10.4.2)
rdoc (4.2.0)
json (~> 1.4)
redcarpet (3.3.3)
rspec (3.4.0)
rspec-core (~> 3.4.0)
rspec-expectations (~> 3.4.0)
rspec-mocks (~> 3.4.0)
rspec-core (3.4.1)
rspec-support (~> 3.4.0)
rspec-expectations (3.4.0)
json (2.1.0)
rake (12.3.1)
rdoc (5.1.0)
rspec (3.6.0)
rspec-core (~> 3.6.0)
rspec-expectations (~> 3.6.0)
rspec-mocks (~> 3.6.0)
rspec-core (3.6.0)
rspec-support (~> 3.6.0)
rspec-expectations (3.6.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.4.0)
rspec-mocks (3.4.0)
rspec-support (~> 3.6.0)
rspec-mocks (3.6.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.4.0)
rspec-support (3.4.1)
simplecov (0.11.1)
rspec-support (~> 3.6.0)
rspec-support (3.6.0)
simplecov (0.15.0)
docile (~> 1.1.0)
json (~> 1.8)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.0)
yard (0.8.7.6)
simplecov-html (0.10.2)
yard (0.9.12)
PLATFORMS
ruby
x86-mingw32
DEPENDENCIES
json
rake
rdoc
redcarpet
rscons!
rspec
simplecov
yard
BUNDLED WITH
1.10.6
1.16.2
+49 -168
View File
@@ -1,13 +1,13 @@
# Rscons
Rscons is a software construction framework inspired by SCons and implemented
in Ruby.
[![Gem Version](https://badge.fury.io/rb/rscons.png)](http://badge.fury.io/rb/rscons)
Rscons (https://github.com/holtrop/rscons) is a software construction framework
inspired by SCons and waf but implemented in Ruby.
## Installation
$ gem install rscons
Rscons is distributed as a standalone Ruby script named ``rscons``. This file
(containing the complete rscons build system) can be checked into your project
and versioned along with your project.
## Usage
@@ -30,7 +30,7 @@ task block or split among multiple tasks.
```ruby
Rscons::Environment.new do |env|
env["CFLAGS"] << "-Wall"
env.Program("program", Dir["src/**/*.c"])
env.Program("program", Rscons.glob("src/**/*.c"))
end
```
@@ -39,7 +39,7 @@ end
```ruby
Rscons::Environment.new do |env|
env["DFLAGS"] << "-Wall"
env.Program("program", Dir["src/**/*.d"])
env.Program("program", Rscons.glob("src/**/*.d"))
end
```
@@ -51,7 +51,7 @@ main_env = Rscons::Environment.new do |env|
env.build_dir("src", "build/main")
env["CFLAGS"] = ["-DSOME_DEFINE", "-O3"]
env["LIBS"] = ["SDL"]
env.Program("program", Dir["src/**/*.cc"])
env.Program("program", Rscons.glob("src/**/*.cc"))
end
debug_env = main_env.clone do |env|
@@ -59,7 +59,7 @@ debug_env = main_env.clone do |env|
env.build_dir("src", "build/debug")
env["CFLAGS"] -= ["-O3"]
env["CFLAGS"] += ["-g", "-O0"]
env.Program("program-debug", Dir["src/**/*.cc"])
env.Program("program-debug", Rscons.glob("src/**/*.cc"))
end
```
@@ -86,7 +86,7 @@ end
Rscons::Environment.new do |env|
env.add_builder(GenerateFoo.new)
env.GenerateFoo("foo.h", [])
env.Program("a.out", Dir["*.c"])
env.Program("a.out", Rscons.glob("*.c"))
end
```
@@ -111,6 +111,15 @@ Rscons::Environment.new do |env|
end
```
The `Cache#up_to_date?` method accepts an optional 5th parameter which is an
options Hash. The `:debug` option can be specified in this Hash with a value
of `true` to aid in debugging builders while developing them. For example:
```ruby
unless cache.up_to_date?(target, cmd, sources, env, debug: true)
end
```
### Example: Custom Builder That Generates Multiple Output Files
```ruby
@@ -191,7 +200,7 @@ Rscons::Environment.new do |env|
end
end
env.build_dir("src", "build")
env.Program("program", Dir["**/*.cc"])
env.Program("program", Rscons.glob("**/*.cc"))
end
```
@@ -199,7 +208,7 @@ end
```ruby
Rscons::Environment.new do |env|
env.Library("mylib.a", Dir["src/**/*.c"])
env.Library("mylib.a", Rscons.glob("src/**/*.c"))
end
```
@@ -230,14 +239,15 @@ An Environment consists of:
* a collection of user-defined build targets
* a collection of user-defined 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.
When cloning an environment, by default the construction variables, builders,
build hooks, build directories, and build root are cloned, but the new
environment does not inherit any of the registered build targets.
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.
For example, `env.clone(clone: [:variables, :builders])` will include
construction variables, and builders but not build hooks, build directories, or
the build root.
The set of pending targets is never cloned.
@@ -326,7 +336,7 @@ env.Install("dist/share", "share")
```ruby
env.Library(target, sources)
# Example
env.Library("lib.a", Dir["src/**/*.c"])
env.Library("lib.a", Rscons.glob("src/**/*.c"))
```
The Library builder creates a static library archive from the given source
@@ -361,7 +371,7 @@ preprocessed output to the target file.
```ruby
env.Program(target, sources)
# Example
env.Program("myprog", Dir["src/**/*.cc"])
env.Program("myprog", Rscons.glob("src/**/*.cc"))
```
The Program builder compiles and links the given sources to an executable file.
@@ -374,7 +384,7 @@ This can be controlled with the `PROGSUFFIX` construction variable.
```ruby
env.SharedLibrary(target, sources)
# Example
env.SharedLibrary("mydll", Dir["src/**/*.cc"])
env.SharedLibrary("mydll", Rscons.glob("src/**/*.cc"))
```
The SharedLibrary builder compiles and links the given sources to a dynamically
@@ -410,14 +420,14 @@ construction variables can be overridden by the user.
| ARFLAGS | Array | Static library archiver flags | ["rcs"] |
| AS | String | Assembler executable | "${CC}" |
| ASCMD | Array | Assembler command line | ["${AS}", "-c", "-o", "${_TARGET}", "${ASDEPGEN}", "${INCPREFIX}${ASPPPATH}", "${ASPPFLAGS}", "${ASFLAGS}", "${_SOURCES}"] |
| ASDEPGEN | Array | Assembly dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}"] |
| ASDEPGEN | Array | Assembly dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}", "-MT", "TARGET"] |
| ASFLAGS | Array | Assembler flags | [] |
| ASPPFLAGS | Array | Assembler preprocessor flags | ["${CPPFLAGS}"] |
| ASPPPATH | Array | Assembler preprocessor path | ["${CPPPATH}"] |
| ASSUFFIX | Array | Assembly file suffixes | [".S"] |
| CC | String | C compiler executable | "gcc" |
| CCCMD | Array | C compiler command line | ["${CC}", "-c", "-o", "${_TARGET}", "${CCDEPGEN}", "${INCPREFIX}${CPPPATH}", "${CPPFLAGS}", "${CFLAGS}", "${CCFLAGS}", "${_SOURCES}"] |
| CCDEPGEN | Array | C compiler dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}"] |
| CCDEPGEN | Array | C compiler dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}", "-MT", "TARGET"] |
| CCFLAGS | Array | Common flags for both C and C++ compiler | [] |
| CFLAGS | Array | C compiler flags | [] |
| CPP_CMD | Array | Preprocess command line | ["${_PREPROCESS_CC}", "-E", "${_PREPROCESS_DEPGEN}", "-o", "${_TARGET}", "${INCPREFIX}${CPPPATH}", "${CPPFLAGS}", "${_SOURCES}"] |
@@ -429,12 +439,13 @@ construction variables can be overridden by the user.
| CSUFFIX | Array | C source file suffixes | [".c"] |
| CXX | String | C++ compiler executable | "g++" |
| CXXCMD | Array | C++ compiler command line | ["${CXX}", "-c", "-o", "${_TARGET}", "${CXXDEPGEN}", "${INCPREFIX}${CPPPATH}", "${CPPFLAGS}", "${CXXFLAGS}", "${CCFLAGS}", "${_SOURCES}"] |
| CXXDEPGEN | Array | C++ compiler dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}"] |
| CXXDEPGEN | Array | C++ compiler dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}", "-MT", "TARGET"] |
| CXXFLAGS | Array | C++ compiler flags | [] |
| CXXSUFFIX | Array | C++ source file suffixes | [".cc", ".cpp", ".cxx", ".C"] |
| D_IMPORT_PATH | Array | D compiler import path | [] |
| DC | String | D compiler executable | "gdc" |
| DCCMD | Array | D compiler command line | ["${DC}", "-c", "-o", "${_TARGET}", "${INCPREFIX}${D_IMPORT_PATH}", "${DFLAGS}", "${_SOURCES}"] |
| DCCMD | Array | D compiler command line | ["${DC}", "-c", "-o", "${_TARGET}", "${DDEPGEN}", "${INCPREFIX}${D_IMPORT_PATH}", "${DFLAGS}", "${_SOURCES}"] |
| DDEPGEN | Array | D compiler dependency generation flags | ["-MMD", "-MF", "${_DEPFILE}", "-MT", "TARGET"] |
| DEPFILESUFFIX | String | Dependency file suffix for Makefile-style dependency rules emitted by the compiler (used internally for temporary dependency files used to determine a source file's dependencies) | ".mf" |
| DFLAGS | Array | D compiler flags | [] |
| DISASM_CMD | Array | Disassemble command line | ["${OBJDUMP}", "${DISASM_FLAGS}", "${_SOURCES}"] |
@@ -455,16 +466,14 @@ construction variables can be overridden by the user.
| LIBSUFFIX | String/Array | Default static library file suffix | ".a" |
| OBJDUMP | String | Objdump executable | "objdump" |
| OBJSUFFIX | String/Array | Default object file suffix | ".o" |
| This name will include variant components. |
| The user should not change this construction variable. | Determined at runtime. |
| PROGSUFFIX | String | Default program suffix. | Windows: ".exe", POSIX: "" |
| SHCC | String | Shared object C compiler | "${CC}" |
| SHCCCMD | Array | Shared object C compiler command line | ["${SHCC}", "-c", "-o", "${_TARGET}", "${CCDEPGEN}", "${INCPREFIX}${CPPPATH}", "${CPPFLAGS}", "${SHCFLAGS}", "${SHCCFLAGS}", "${_SOURCES}"] |
| SHCCFLAGS | Array | Shared object C and C++ compiler flags | Windows: ["${CCFLAGS}"], POSIX: ["${CCFLAGS}", -fPIC"] |
| SHCFLAGS | Array | Shared object C compiler flags | [] |
| SHCFLAGS | Array | Shared object C compiler flags | ["${CFLAGS}"] |
| SHCXX | String | Shared object C++ compiler | "${CXX}" |
| SHCXXCMD | Array | Shared object C++ compiler command line | ["${SHCXX}", "-c", "-o", "${_TARGET}", "${CXXDEPGEN}", "${INCPREFIX}${CPPPATH}", "${CPPFLAGS}", "${SHCXXFLAGS}", "${SHCCFLAGS}", "${_SOURCES}"] |
| SHCXXFLAGS | Array | Shared object C++ compiler flags | [] |
| SHCXXFLAGS | Array | Shared object C++ compiler flags | ["${CXXFLAGS}"] |
| SHDC | String | Shared object D compiler | "gdc" |
| SHDCCMD | Array | Shared object D compiler command line | ["${SHDC}", "-c", "-o", "${_TARGET}", "${INCPREFIX}${D_IMPORT_PATH}", "${SHDFLAGS}", "${_SOURCES}"] |
| SHDFLAGS | Array | Shared object D compiler flags | Windows: ["${DFLAGS}"], POSIX: ["${DFLAGS}", "-fPIC"] |
@@ -549,9 +558,19 @@ end
You can pass multiple dependency files to `Environment#depends`:
```ruby
env.depends("my_app", "config/link.ld", "README.txt", *Dir.glob("assets/**/*"))
env.depends("my_app", "config/link.ld", "README.txt", *Rscons.glob("assets/**/*"))
```
### Command-Line Variables
Variables can be specified on the rscons command line. For example:
```
rscons VAR=val
```
These variables are accessible in a global VarSet called `Rscons.vars`.
### Construction Variable Naming
* uppercase strings - the default construction variables that Rscons uses
@@ -561,145 +580,7 @@ env.depends("my_app", "config/link.ld", "README.txt", *Dir.glob("assets/**/*"))
### API documentation
Documentation for the complete Rscons API can be found at
http://rubydoc.info/github/holtrop/rscons/frames.
## Release Notes
### 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
### 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
http://www.rubydoc.info/github/holtrop/rscons/master.
## Contributing
+20 -3
View File
@@ -5,13 +5,17 @@ rescue Bundler::BundlerError => e
raise LoadError.new("Unable to setup Bundler; you might need to `bundle install`: #{e.message}")
end
require "bundler/gem_tasks"
require "rspec/core/rake_task"
require "yard"
require "rake/clean"
require "fileutils"
CLEAN.include %w[build_test_run .yardoc doc coverage]
CLOBBER.include %w[pkg]
CLEAN.include %w[build_test_run .yardoc doc 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
@@ -19,6 +23,19 @@ RSpec::Core::RakeTask.new(:spec, :example_string) do |task, args|
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.files = ['lib/**/*.rb']
+4
View File
@@ -1,3 +1,7 @@
#!/usr/bin/env ruby
require "rscons/cli"
if __FILE__ == $0
Rscons::Cli.run(ARGV)
end
-5
View File
@@ -1,5 +0,0 @@
Rscons::Environment.new do |env|
env.append('CPPPATH' => Dir['src/**/*/'].sort)
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
env.Program('build_dir.exe', Dir['src/**/*.c'])
end
@@ -1,22 +0,0 @@
class MyObject < Rscons::Builder
def run(target, sources, cache, env, vars)
env.run_builder(env.builders["Object"], target, sources, cache, vars)
end
end
Rscons::Environment.new(echo: :command) do |env|
env.add_builder(MyObject.new)
env.append('CPPPATH' => Dir['src/**/*/'].sort)
env.add_build_hook do |build_op|
if build_op[:builder].name == "MyObject" && build_op[:sources].first =~ %r{one\.c}
build_op[:vars]["CFLAGS"] << "-O1"
build_op[:sources] = ['src/two/two.c']
elsif build_op[:builder].name == "MyObject" && build_op[:target] =~ %r{two\.o}
new_vars = build_op[:vars].clone
new_vars["CFLAGS"] << "-O2"
build_op[:vars] = new_vars
end
end
env.MyObject('one.o', 'src/one/one.c')
env.MyObject('two.o', 'src/two/two.c')
end
@@ -1,6 +0,0 @@
env = Rscons::Environment.new do |env|
env.append('CPPPATH' => Dir['src/**/*/'].sort)
env.build_dir("src", "build")
env.build_root = "build_root"
env.Program('build_dir.exe', Dir['src/**/*.c'])
end
-12
View File
@@ -1,12 +0,0 @@
Rscons::Environment.new(echo: :command) do |env|
env.append('CPPPATH' => Dir['src/**/*/'].sort)
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
env.add_build_hook do |build_op|
if build_op[:target] =~ %r{build_one/.*\.o}
build_op[:vars]["CFLAGS"] << "-O1"
elsif build_op[:target] =~ %r{build_two/.*\.o}
build_op[:vars]["CFLAGS"] << "-O2"
end
end
env.Program('build_hook.exe', Dir['src/**/*.c'].sort)
end
-8
View File
@@ -1,8 +0,0 @@
Rscons::Environment.new(echo: :command) do |env|
env.append('CPPPATH' => Dir['src/**/*/'].sort)
env.build_root = "build_root"
FileUtils.mkdir_p(env.build_root)
FileUtils.mv("src/one/one.c", "build_root")
env.Object("^/one.o", "^/one.c")
env.Program("build_dir.exe", Dir['src/**/*.c'] + ["^/one.o"])
end
-3
View File
@@ -1,3 +0,0 @@
Rscons::Environment.new do |env|
env.Copy("inst.exe", "copy.rb")
end
-6
View File
@@ -1,6 +0,0 @@
Rscons::Environment.new do |env|
env["CSUFFIX"] = %w[.yargh .c]
env["CFLAGS"] += %w[-x c]
env["CPPPATH"] += Dir["src/**/"]
env.Program("build_dir.exe", Dir["src/**/*.{c,yargh}"])
end
-3
View File
@@ -1,3 +0,0 @@
Rscons::Environment.new do |env|
env.Install("inst.exe", "install.rb")
end
@@ -1,9 +0,0 @@
Rscons::Environment.new do |env|
env.Directory("inst")
env.Install("inst", "install_directory.rb")
env.Install("noexist/src", "src")
env.Directory("exist/src")
env.Install("exist/src", "src")
end
@@ -1,5 +0,0 @@
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/two"
env.Object("one.o", "src/one/one.c")
env.Object("one.o", "src/two/two.c")
end
@@ -1,6 +0,0 @@
Rscons::Environment.new do |env|
env.append('CPPPATH' => Dir['src/**/*/'].sort)
env.build_dir("src2", "build")
env.build_root = "build_root"
env.Program('build_dir.exe', Dir['src/**/*.c'])
end
@@ -1,10 +0,0 @@
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/two"
env.Object("one.o", "src/one/one.c")
env.add_post_build_hook do |build_op|
if build_op[:target] == "one.o"
env["MODULE"] = "two"
env.Object("${MODULE}.o", "src/${MODULE}/${MODULE}.c")
end
end
end
-6
View File
@@ -1,6 +0,0 @@
Rscons::Environment.new do |env|
env.append("CPPPATH" => Dir["src/**/*/"].sort)
env.build_dir("src/one/", "build_one/")
env.build_dir("src/two", "build_two")
env.Program("build_dir.exe", Dir["src/**/*.c"])
end
+6
View File
@@ -0,0 +1,6 @@
build do
Environment.new do |env|
env.CFile("lexer.c", "lexer.l")
env.CFile("parser.c", "parser.y")
end
end
-4
View File
@@ -1,4 +0,0 @@
Rscons::Environment.new do |env|
env.CFile("lexer.c", "lexer.l")
env.CFile("parser.c", "parser.y")
end
+3 -1
View File
@@ -1,3 +1,5 @@
Rscons::Environment.new do |env|
build do
Environment.new do |env|
env.CFile("file.c", "foo.bar")
end
end
+12
View File
@@ -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
-12
View File
@@ -1,12 +0,0 @@
debug = Rscons::Environment.new(echo: :command) do |env|
env.build_dir('src', 'debug')
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.build_dir('src', 'release')
env.Program('program-release.exe', Dir['src/*.c'])
end
+8 -7
View File
@@ -1,15 +1,16 @@
env1 = Rscons::Environment.new(echo: :command) do |env|
env.build_dir('src', 'build')
build do
env1 = Environment.new(echo: :command) do |env|
env['CFLAGS'] = '-O2'
env.add_build_hook do |build_op|
build_op[:vars]['CPPFLAGS'] = '-DSTRING="Hello"'
env.add_build_hook do |builder|
builder.vars['CPPFLAGS'] = '-DSTRING="Hello"'
end
env.add_post_build_hook do |build_op|
$stdout.puts "post #{build_op[:target]}"
env.add_post_build_hook do |builder|
$stdout.puts "post #{builder.target}"
end
env.Program('program.exe', Dir['src/*.c'])
end
env2 = env1.clone(clone: :all) do |env|
env2 = env1.clone do |env|
env.Program('program2.exe', Dir['src/*.c'])
end
end
+3
View File
@@ -0,0 +1,3 @@
configure do
check_c_compiler "nope.nope"
end
+1
View File
@@ -0,0 +1 @@
autoconf false
+10
View File
@@ -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
+9
View File
@@ -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
+15
View File
@@ -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
+15
View File
@@ -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
+13
View File
@@ -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
+1
View File
@@ -0,0 +1 @@
check_c_compiler "gcc"
+6
View File
@@ -0,0 +1,6 @@
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("This is a simple C program\n");
}
+18
View File
@@ -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
-16
View File
@@ -1,16 +0,0 @@
class MySource < Rscons::Builder
def run(target, sources, cache, env, vars)
File.open(target, 'w') do |fh|
fh.puts <<EOF
#define THE_VALUE 5678
EOF
end
target
end
end
Rscons::Environment.new do |env|
env.add_builder(MySource.new)
env.MySource('inc.h', [])
env.Program('program.exe', Dir['*.c'])
end
+6 -2
View File
@@ -1,8 +1,12 @@
Rscons::Environment.new do |env|
build do
Environment.new do |env|
env.Command("inc.c",
[],
"CMD" => %w[ruby gen.rb ${_TARGET}],
"CMD_DESC" => "Generating")
env.build_after("#{env.build_root}/program.o", "inc.c")
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
+7 -5
View File
@@ -1,18 +1,20 @@
class MySource < Rscons::Builder
def run(target, sources, cache, env, vars)
File.open(target, 'w') do |fh|
def run(options)
File.open(@target, 'w') do |fh|
fh.puts <<EOF
#define THE_VALUE 678
EOF
end
target
true
end
end
env = Rscons::Environment.new do |env|
build do
env = Environment.new do |env|
env["hdr"] = "inc.h"
env["src"] = "program.c"
env.add_builder(MySource.new)
env.add_builder(MySource)
env.MySource('${hdr}')
env.Program('program.exe', "${src}")
end
end
+8 -6
View File
@@ -1,16 +1,17 @@
class MySource < Rscons::Builder
def run(target, sources, cache, env, vars)
File.open(target, 'w') do |fh|
def run(options)
File.open(@target, 'w') do |fh|
fh.puts <<EOF
#define THE_VALUE #{env.expand_varref("${the_value}")}
#define THE_VALUE #{@env.expand_varref("${the_value}")}
EOF
end
target
true
end
end
e1 = Rscons::Environment.new do |env|
env.add_builder(MySource.new)
build do
e1 = Environment.new do |env|
env.add_builder(MySource)
env["one"] = "5"
env[:cfg] = {val: "9"}
env["two"] = lambda do |args|
@@ -26,3 +27,4 @@ e1.clone do |env|
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
+10 -8
View File
@@ -1,19 +1,21 @@
class CHGen < Rscons::Builder
def run(target, sources, cache, env, vars)
c_fname = target
h_fname = target.sub(/\.c$/, ".h")
unless cache.up_to_date?([c_fname, h_fname], "", sources, env)
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)
@cache.register_build([c_fname, h_fname], "", @sources, @env)
end
target
true
end
end
Rscons::Environment.new do |env|
env.add_builder(CHGen.new)
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
+16
View File
@@ -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
+5
View File
@@ -0,0 +1,5 @@
build do
Environment.new(echo: :command) do |env|
env.Program("hello-d.exe", glob("*.d"))
end
end
-3
View File
@@ -1,3 +0,0 @@
Rscons::Environment.new(echo: :command) do |env|
env.Program("hello-d.exe", Dir["*.d"])
end
+7
View File
@@ -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
+2 -1
View File
@@ -1,6 +1,7 @@
import std.stdio;
import mod;
void main()
{
writeln("Hello from D!");
writeln("Hello from D, value is ", Klass.VAL, "!");
}
+4
View File
@@ -0,0 +1,4 @@
class Klass
{
enum VAL = 42;
};
+5
View File
@@ -0,0 +1,5 @@
build do
Environment.new do |env|
env.Program("test.exe", glob("*.c"), direct: true)
end
end
+7
View File
@@ -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
+7
View File
@@ -0,0 +1,7 @@
#include "two.h"
int main(int argc, char * argv[])
{
two();
return 0;
}
+7
View File
@@ -0,0 +1,7 @@
#include "three.h"
#include <stdio.h>
void three(void)
{
printf("three\n");
}
+1
View File
@@ -0,0 +1 @@
void three(void);
+7
View File
@@ -0,0 +1,7 @@
#include "two.h"
#include "three.h"
void two(void)
{
three();
}
+1
View File
@@ -0,0 +1 @@
void two(void);
+5
View File
@@ -0,0 +1,5 @@
build do
Environment.new do |env|
env.Program('header.exe', Dir['*.c'])
end
end
-3
View File
@@ -1,3 +0,0 @@
Rscons::Environment.new do |env|
env.Program('header.exe', Dir['*.c'])
end
+17
View File
@@ -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
-15
View File
@@ -1,15 +0,0 @@
Rscons::Environment.new do |env|
require 'json'
require 'yaml'
env.add_builder(:JsonToYaml) do |target, sources, cache, env, vars|
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
target
end
env.JsonToYaml('foo.yml', 'foo.json')
end
+6
View File
@@ -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
-4
View File
@@ -1,4 +0,0 @@
Rscons::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
@@ -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
+4 -2
View File
@@ -1,4 +1,6 @@
Rscons::Environment.new(echo: :command) do |env|
build do
Environment.new(echo: :command) do |env|
env["ARCMD"] = %w[ar rcf ${_TARGET} ${_SOURCES}]
env.Library("lib.a", Dir["*.c"].sort)
env.Library("lib.a", glob("*.c"))
end
end
+5
View File
@@ -0,0 +1,5 @@
build do
Environment.new do |env|
env.Preprocess("pp", "foo.h")
end
end
-3
View File
@@ -1,3 +0,0 @@
Rscons::Environment.new do |env|
env.Preprocess("pp", "foo.h")
end
+13
View File
@@ -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
-11
View File
@@ -1,11 +0,0 @@
Rscons::Environment.new do |env|
env["CPPPATH"] << "src/lib"
libmine = env.SharedLibrary("mine", Dir["src/lib/*.c"])
env.Program("test-shared.exe",
Dir["src/*.c"],
"LIBPATH" => %w[.],
"LIBS" => %w[mine])
env.build_after("test-shared.exe", libmine.to_s)
env.Program("test-static.exe",
Dir["src/**/*.c"])
end
@@ -1,6 +1,8 @@
Rscons::Environment.new do |env|
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
Loaded 100 of 230 files, more files were not shown because too many files have changed in this diff. Show more