Compare commits

..

623 Commits

Author SHA1 Message Date
8f0f320a07 v3.0.2 2022-03-14 00:36:17 -04:00
12f6936084 Update CHANGELOG for v3.0.2 2022-03-14 00:36:05 -04:00
866b40d872 Configure parameters should not be stored as unscoped construction variables - close #160 2022-03-14 00:34:52 -04:00
f06d37c8b9 Compiler check configure methods should respect :use flag - close #159 2022-03-14 00:27:02 -04:00
21f8e2435e v3.0.1 2022-03-13 22:27:16 -04:00
97c4f7c757 Update CHANGELOG for v3.0.1 2022-03-13 22:27:16 -04:00
b3df37e9ea Do not configure for clean tasks when not yet configured - close #158 2022-03-13 22:27:16 -04:00
1bf1c30242 Load configure task arguments before early configure operations - close #157 2022-03-13 20:16:01 -04:00
b932380b3b Avoid running configure operation twice - close #156 2022-03-11 21:17:07 -05:00
e3ea429253 Fix running dspec task with argument 2022-03-11 21:13:52 -05:00
dca4c49770 Avoid trailing spaces in distributable script 2022-03-07 21:08:17 -05:00
b068fe7574 Test that custom clean task action blocks are execution 2022-02-28 11:59:52 -05:00
ecd91e1171 v3.0.0 2022-02-27 20:55:16 -05:00
f36b71af3f Fix ARCMD spec for Linux and MacOS 2022-02-27 19:16:59 -05:00
90c3867cae Tweak specs to all pass cleanly on MacOS 2022-02-27 19:10:18 -05:00
20b5020284 bundle update 2022-02-27 18:06:39 -05:00
cb540741a4 Clarify task parameter construction variable names 2022-02-27 17:44:01 -05:00
bc17a9b38f Test that clean task does not process environments 2022-02-27 17:34:48 -05:00
cec1331054 Rename build specs from operation to task 2022-02-27 17:34:38 -05:00
bb4657e465 Process environments created during task execution phase 2022-02-27 16:55:59 -05:00
29ca9b3f13 Fix YARD warnings 2022-02-27 16:40:09 -05:00
5ab982b84c Add GCC Cross Compiler example build script 2022-02-27 16:28:09 -05:00
e6e860e3c1 Document download build script method 2022-02-27 16:27:24 -05:00
3cfffed7ec Document spawn options to sh method 2022-02-27 16:07:35 -05:00
b2d47cd439 Document ^^/ prefix 2022-02-27 16:05:28 -05:00
6a10d68fac Expand CLI usage printout 2022-02-27 16:02:00 -05:00
88a8f2395d Update user guide for v3.0.0
Document variants
2022-02-27 15:51:20 -05:00
b82d6f2e62 Include user guide Overview section in README.md 2022-02-27 12:56:23 -05:00
150943f23f Update CHANGELOG.md for v3.0.0 2022-02-27 12:52:59 -05:00
59f1a89f4f Add -A CLI flag to show all tasks 2022-02-27 12:41:47 -05:00
ea66501311 Show variants in -T output 2022-02-22 15:46:19 -05:00
e9e3c6711f Add build_dir script method - close #155 2022-02-20 18:13:59 -05:00
8269a98d01 Add variants - close #137 2022-02-20 08:54:33 -05:00
19dee2b2a5 Add variants - #137
Add build script methods: variant, variant_group, with_variants
2022-02-16 12:23:30 -05:00
5b6353395d Store configure task parameters in configuration cache data - close #151 2022-02-14 21:52:35 -05:00
7e5c6e6b12 Store task parameter values in a Hash 2022-02-13 12:46:26 -05:00
44f61da571 Only configure if necessary - close #131 2022-02-12 23:18:00 -05:00
5c28e557bd Sort task output with -T 2022-02-12 22:14:10 -05:00
ef7e9259cb Add shortcut method for creating environments - close #149
Add env() method to create environments.
Process all environments created at build script top level before
executing any autoconf-enabled tasks, or if no tasks are specified by
the user.
2022-02-12 21:59:52 -05:00
6d5f44d4e5 Allow passing spawn options to sh - close #153 2022-02-06 14:02:26 -05:00
8b2387f7a3 Add download script method - close #152 2022-02-05 16:51:52 -05:00
7b746db64e Tweak user guide styling; remove gradient border 2022-01-30 22:04:04 -05:00
3aca248e9d Minor CHANGELOG fix 2022-01-30 22:03:43 -05:00
3914dd896c Remove references to build operation in the user guide 2022-01-30 21:56:42 -05:00
df120af953 Add env.expand() shortcut method to expand paths and construction variables - close #150 2022-01-30 15:00:59 -05:00
b745ae1153 Add license/copyright to distributable script - close #148 2022-01-30 13:49:22 -05:00
693f8cec64 Update LICENSE copyright 2022-01-30 13:46:42 -05:00
e12acccd33 Fix large project generated script 2022-01-30 13:46:23 -05:00
bd9cf55b85 Add tasks - close #139 2022-01-30 13:45:06 -05:00
f5ab51c477 Add ^^/ shortcut to top-level build directory - close #146 2022-01-21 20:45:05 -05:00
b0f2bbb7d5 Support environment variable to set rscons build directory - close #145 2022-01-17 18:02:58 -05:00
c1dcfa297f Add FileUtils class methods to script DSL - close #144 2022-01-17 16:41:36 -05:00
034dbcd9a6 Update ruby-doc.org URL 2022-01-17 16:03:08 -05:00
b5d5fe7a7b Add 'sh' script DSL method - close #142 2022-01-17 15:57:34 -05:00
610b8f1266 Add Size builder - close #143 2022-01-17 12:50:38 -05:00
a316c4f922 Support naming environments - close #140 2022-01-13 12:56:23 -05:00
97dbaeb82d Move rsconscache into build directory - close #136 2022-01-09 23:08:28 -05:00
a2f72c6b87 v2.3.0 2021-12-04 09:43:03 -05:00
7055cad73c Add v2.3.0 release notes 2021-12-04 09:27:24 -05:00
4548f4e3c9 Document phony targets - close #141 2021-12-01 23:00:12 -05:00
19dbab3426 Run subsidiary rscons binary from rscons() method if found - close #129 2021-11-28 22:36:24 -05:00
69f5bea2b2 Fix specs for dependency file moving - #135 2021-11-28 15:10:25 -05:00
2ee9dda49d Write dependency file to build directory when user invokes Object builder directly - close #135 2021-11-18 20:18:19 -05:00
f011b23499 Add PATH manipulation methods - close #126 2021-11-17 21:39:58 -05:00
80d52f25b8 Document CMD_STDOUT variable for Command builder - close #134 2021-11-15 21:52:11 -05:00
0face546e3 Clarify failed command error message indicating to run -F - close #133 2021-11-15 21:45:18 -05:00
ca747232cd Support passing a directory to rscons() method - close #128 2021-11-13 11:36:25 -05:00
a7b46093e9 Document -f command line option - close #130 2021-11-13 11:07:15 -05:00
09892eed63 Add DEVELOPING.md 2021-11-07 21:09:42 -05:00
117df43f64 Document rscons() build script method for subsidiary build scripts 2021-10-27 23:02:04 -04:00
acc12822b6 Add description for user_guide task 2021-10-27 22:42:31 -04:00
8c7b43f60c Show a message when entering/leaving a subsidiary script directory 2021-10-22 16:48:44 -04:00
7c8becc3f9 env.depends() does not work with build-root-relative "^/" paths - close #121 2021-10-22 16:03:10 -04:00
d1a35501ef Support subsidiary Rsconscript files - close #125 2021-10-22 13:58:38 -04:00
28a245f0ab build_dist: Remove lines marked just for specs 2021-10-22 13:58:38 -04:00
87a6d9f04f Do not run simplecov on dspec specs 2021-10-22 13:58:38 -04:00
556c821cc6 Commonize error handling across all operations 2021-10-21 18:35:58 -04:00
441fc9bc65 bundle update 2021-09-02 15:37:33 -04:00
1861874f5c bundle update 2021-01-11 15:15:42 -05:00
dependabot[bot]
6d51c5cbde
Bump redcarpet from 3.5.0 to 3.5.1
Bumps [redcarpet](https://github.com/vmg/redcarpet) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/vmg/redcarpet/releases)
- [Changelog](https://github.com/vmg/redcarpet/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vmg/redcarpet/compare/v3.5.0...v3.5.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-11 19:21:14 +00:00
73af83803a add v2.2.0 release notes 2020-10-13 19:04:29 -04:00
353f4f45bc v2.2.0 2020-10-13 18:59:18 -04:00
5bac91f92f add failure messages for failed configuration checks - close #119 2020-10-12 21:01:04 -04:00
bbe9563ceb compiler checks should support cross-compilers and freestanding compilers - close #118 2020-10-08 19:23:17 -04:00
5ec74604c6 improve support for MSYS2 - close #120 2020-10-08 19:04:50 -04:00
8e06efe61e v2.1.0 2020-04-16 16:52:58 -04:00
0756874ddb update CHANGELOG for v2.1.0 2020-04-16 16:51:16 -04:00
dded5e2648 ruby 2.7 compatibility - #117 2020-04-16 15:48:45 -04:00
fbe60f6ba2 stick with simplecov 0.15.x for now 2020-04-16 15:02:01 -04:00
8dd9799666 Revert "update simplecov"
This reverts commit 01ca86de8b02ef7db222eb5db2598762ba9a516b.
2020-04-16 15:02:01 -04:00
f2c755c8bb update bundle 2020-04-16 13:07:20 -04:00
01ca86de8b update simplecov 2020-02-29 14:27:21 -05:00
943fabd0d1 update some gems 2020-02-29 10:47:46 -05:00
d08e2f6b5c v2.0.2 2019-12-16 21:36:38 -05:00
90365dd197 update CHANGELOG for v2.0.2 2019-12-16 21:36:22 -05:00
8d05516c40 distinguish object files built from multiple sources with the same base name but different extensions - close #113 2019-12-14 00:10:42 -05:00
db49d86866 show a configuration failed message on stderr on configuration failure 2019-10-14 22:57:49 -04:00
e667455c32 user guide: fix configure script example 2019-10-14 22:49:34 -04:00
e62332aba6 avoid backtrace when configuring fails during autoconf 2019-10-14 22:23:18 -04:00
397639849d call print_run_message() in json_to_yaml build test 2019-10-12 17:59:08 -04:00
96d5caf2e5 user guide: fix print_run_message() examples 2019-10-12 17:57:58 -04:00
f4b10a30af update CHANGELOG for v2.0.1 2019-10-02 21:10:29 -04:00
cf52c3fc6f v2.0.1 2019-10-02 20:59:58 -04:00
5378afb6f8 Install builder cannot replace a currently executing binary on Linux - close #112 2019-09-28 23:18:31 -04:00
48d9273cc6 v2.0.0 2019-09-11 23:32:27 -04:00
efea4f1181 user guide: Installation: mention marking rscons executable 2019-09-11 23:29:25 -04:00
b4fa6d965c CHANGELOG - add logo 2019-09-11 23:25:19 -04:00
ac56ad34f6 add rscons logo to README 2019-09-11 23:24:20 -04:00
2fd533a32a clobber large_project directory 2019-09-11 23:20:22 -04:00
c938ed71d1 add "all" rake task 2019-09-11 23:19:46 -04:00
ec60201a62 user guide: add rscons logo 2019-09-11 23:18:38 -04:00
0cafb8c5b3 user guide: stylize as "Rscons" 2019-09-11 23:15:16 -04:00
004810386b clobber should remove "gen" directory 2019-09-11 23:15:02 -04:00
a15ee9daaf add logo images 2019-09-11 23:02:17 -04:00
cd33405697 user guide: add FreeBSD compatibility 2019-09-01 21:52:32 -04:00
efa77066bf allow ConfigureOp#log_and_test_command to be passed standard input data - close #111 2019-09-01 21:50:57 -04:00
a1bb9d81fd check_program: do not fail on Windows for non-existent PATH entries 2019-08-27 19:47:21 -04:00
0344f02cb1 build tests: use -m instead of -lc for mingw 2019-08-27 19:32:36 -04:00
d52bdaf046 build tests: do ldc2 tests even if omit_gdc_tests set 2019-08-27 18:51:56 -04:00
ad7ccb771d update build test for gdc fix 2019-08-27 18:50:01 -04:00
044ee343ca Use OBJSUFFIX of .obj for ldc2 on Windows. 2019-08-26 19:10:19 -04:00
eb54a2b64a fix specs create_exe() on Windows 2019-08-26 18:51:03 -04:00
2dd1ce9f1d Use base64 encoding for compressed script to avoid encoding issues. 2019-08-26 18:33:42 -04:00
1e157c79ec fix dependency parsing with ldc2 - close #110 2019-08-19 22:56:54 -04:00
2385874f4a v2.0.0beta2 2019-08-17 17:07:59 -04:00
c5c42e6f4a user guide: document a couple missing configure flags and link to YARD some places 2019-08-17 17:00:36 -04:00
9a627b2150 add YARD comments to get to 100% YARD coverage 2019-08-17 16:42:14 -04:00
937c964c3e document :use better 2019-08-17 16:35:06 -04:00
a2a1d08014 user guide: document Custom Configuration Checks 2019-08-17 16:35:06 -04:00
0ccf43cc96 custom config checks - close #108 2019-08-17 16:06:37 -04:00
d202e15a57 user guide: document direct mode for Program/SharedLibrary builders 2019-07-29 21:57:38 -04:00
94f808b1fc user guide: add Barriers section 2019-07-29 21:32:04 -04:00
51a9dd365f add :check_libpath option to check_lib configuration method - #107 2019-07-29 21:00:52 -04:00
6e590b62a6 add :check_cpppath option to check_c_header and check_cxx_header
configuration methods
add :check_d_import_path option to check_d_import configuration method - #107
2019-07-09 23:53:17 -04:00
3aac190ad6 configure checks: compile instead of link when looking for C/C++ header files and D imports 2019-07-09 23:41:51 -04:00
d6b9487e65 user guide: document -F command-line flag 2019-07-09 23:06:45 -04:00
66d2700faa clarify -F command-line option usage more 2019-07-09 23:06:45 -04:00
ba98af1424 default configure checks :fail option to false if :set_define is specified 2019-07-09 22:00:50 -04:00
cf4f80c9ae user guide: document first compiler found is used 2019-07-09 21:47:45 -04:00
d74785d579 Add v2.0.0 changes to CHANGELOG.md 2019-07-07 22:15:44 -04:00
4fd822fb95 user guide: add warning when viewing markdown source file directly 2019-07-07 21:38:17 -04:00
b39fd80d8c user guide: add ./configure && make Appendix section 2019-07-07 21:29:30 -04:00
ef00c9f377 add link to github.io site from README.md 2019-07-02 22:39:33 -04:00
1ddc03b285 v2.0.0beta1 2019-07-02 22:31:27 -04:00
f686f9e787 user guide: rename Reference -> Appendix
add YARD API Documentation link
2019-07-02 22:27:11 -04:00
b6c19b7f00 generate YARD docs to gen/yard 2019-07-02 22:04:06 -04:00
4fc18e5d91 remove README.md content that was moved to user guide 2019-07-02 22:00:03 -04:00
cda5584448 user guide: import some content from README.md 2019-07-02 21:59:22 -04:00
30d82392b5 user guide: fill in Default Construction Variables section 2019-07-02 21:25:16 -04:00
63d875da7f bundle update 2019-07-02 19:44:12 -04:00
8593c5e219 user guide: fill in a lot of Adding Custom Builders section 2019-06-23 19:07:20 -04:00
9bf0abbece user guide: fix inter-page links 2019-06-23 17:29:50 -04:00
02ef6e0846 user guide updates 2019-06-23 17:27:16 -04:00
f97ee94e44 user guide: fix single-page TOC links 2019-06-14 21:53:57 -04:00
55a2ea6d6b user guide: fill in Adding New Languages section 2019-06-14 21:48:27 -04:00
59ab8e46c4 user guide: change page navigation to a table 2019-06-14 17:24:31 -04:00
baebe744b3 user guide: fixed page width 2019-06-14 16:51:14 -04:00
0ad3f815c5 user guide: include section numbers in page navigation links 2019-06-14 16:47:54 -04:00
ca6336c715 user guide: add page navigation links 2019-06-14 16:45:59 -04:00
a11c27f415 user guide: break more sections into separate pages 2019-06-14 16:23:09 -04:00
5c77cac354 user guide: turn on multi-page generation 2019-06-14 16:16:02 -04:00
46294b2a88 user guide: add Page class to prepare for multi-page output 2019-06-14 16:09:44 -04:00
5f71781806 user guide: preparing for multi-page generation 2019-06-14 16:04:14 -04:00
22b007df3a user guide: create render_toc() and render_section() methods 2019-06-14 15:55:55 -04:00
4339d358f8 user guide: Builders comment about starting path with "^/" 2019-06-14 15:44:06 -04:00
e4b96b759f user guide: implement section links 2019-06-14 15:42:21 -04:00
fcb686ac5f user guide: keep track of page for sections 2019-06-14 15:34:01 -04:00
e5c690a4fc user guide: expand Builders section 2019-06-14 15:16:22 -04:00
5b67ad88d3 user guide: document an Environment a bit more 2019-06-14 15:16:12 -04:00
dbd8b47bf9 add Getting Started section 2019-06-14 14:52:56 -04:00
8222958ae3 promote CHANGELOG.md section levels 2019-06-14 14:47:59 -04:00
56f104b5e7 user guide: improve changelog handling 2019-06-14 14:44:00 -04:00
947a65a75e user guide: fix section anchors 2019-06-09 22:45:26 -04:00
66fac4f982 remove link underlines 2019-06-09 22:43:44 -04:00
254584435f user guide: indent table of contents 2019-06-09 22:40:07 -04:00
f74d8202d3 user guide: add table of contents 2019-06-09 22:31:47 -04:00
bbf2319da6 user guide: generate section numbers 2019-06-09 22:17:00 -04:00
812b1cbe9c user guide: put borders on body content 2019-06-09 15:34:41 -04:00
0d2fe02b9c user guide updates for code sections 2019-06-09 13:22:01 -04:00
c7fb88db82 rename rake task gen_user_guide -> user_guide 2019-06-09 13:04:12 -04:00
49f4367125 update LICENSE.txt 2019-06-09 13:01:30 -04:00
c4d062752d quote some CHANGELOG entries to avoid Markdown processing 2019-06-09 12:58:35 -04:00
5b3e10ff72 add Ruby syntax highlighting to user guide generator 2019-06-08 22:56:26 -04:00
5f1ad78e8c continue on user guide generator 2019-06-08 22:27:19 -04:00
9f00063d57 add gen_user_guide task 2019-06-08 21:46:04 -04:00
6328ceee2a start on user guide html generator 2019-06-05 00:13:27 -04:00
26a9307533 User Guide: add a couple ${include}'s 2019-06-05 00:06:34 -04:00
90886ed9ad User Guide: add glob() and Builders documentation 2019-06-04 22:59:04 -04:00
8df73e9d11 User Guide: add Build Operations section 2019-06-02 12:20:23 -04:00
f239b27c3a add user guide section: Writing the Build Script / configure Block 2019-05-26 19:47:44 -04:00
5e6b83411b User Guide: clarify Build Correctness section 2019-05-22 23:42:49 -04:00
54e77f235f finish documentation for command-line operations 2019-05-22 23:31:37 -04:00
4e08de9043 pull in redcarpet and syntax gems 2019-05-21 23:50:26 -04:00
0d8aec0eb1 fill in a couple links 2019-05-21 23:36:58 -04:00
573a542f84 add doc/user_guide.md 2019-05-21 23:20:45 -04:00
ef2a9084db allow --help CLI option with no Rsconscript present - close #106 2019-05-19 12:13:03 -04:00
bfcd0c0b05 generate yard docs to /yard instead of /doc 2019-05-14 21:35:56 -04:00
215f5e4b51 move Environment#shell to BasicEnvironment; clean up a few yard warnings 2019-05-09 22:41:28 -04:00
6229cef015 remove @since tags for 2.0.0 2019-05-09 22:33:26 -04:00
6be0d322a7 store expanded .rscons script next to rscons script - close #105 2019-05-09 22:30:20 -04:00
89e43fea1c use 10000 sources for large project instead of 1000 2019-05-09 22:22:14 -04:00
458eeaf93d Add VarSet#get_var and Environment#get_var - #92 2019-05-09 21:52:07 -04:00
dd3d468a28 minor clarification to Environment#process_step behavior 2019-05-09 21:36:31 -04:00
a4dec210ae slightly reorder VarSet#deep_dup to optimize - #92 2019-05-08 23:16:22 -04:00
fa14102ba5 Reorder VarSet#expand_varref class checks so the more common ones match earlier - #92 2019-05-08 22:50:34 -04:00
87a15b3868 Do not calculate checksums for side-effect files - #92 2019-05-08 22:39:50 -04:00
f23fbcd6d1 clear file checksum cache less frequently - #92 2019-05-08 22:30:41 -04:00
b02a7573b9 speed up handling of registered side-effect files - #92 2019-05-08 22:15:44 -04:00
d0cd0a14a4 remove Cache#validate_json_object - #92 2019-04-30 22:30:24 -04:00
5cb895f465 add gen_large_project rake task for testing rscons performance on a large project 2019-04-30 22:25:45 -04:00
cd1c54bf0d update output coloring with highlighting for target and source filenames - close #104 2019-04-30 21:05:44 -04:00
a4fead7dc6 show build progress - close #98 2019-04-28 22:40:50 -04:00
59a3cb4e10 verbose mode should list operations and their execution times - close #103 2019-04-27 22:29:18 -04:00
785e8e18fd a clean operation should preserve install target cache info - close #101 2019-04-27 21:39:52 -04:00
49e1bca1f7 uninstall operation should list removed entities in verbose mode - close #102 2019-04-27 21:28:56 -04:00
fd054a07c4 implement install and uninstall operations - close #82
add "prefix" construction variable - close #99
add InstallDirectory builder - close #100
2019-04-23 22:01:09 -04:00
328babe1f4 imbue Cache with knowledge of whether a target or directory is for a build or install operation 2019-04-22 22:19:39 -04:00
c60589a9c9 move a few Install builder tests to Copy builder 2019-04-19 14:32:25 -04:00
04fc9866c4 recurse to configure before build rather than calling configure() directly 2019-04-19 14:15:33 -04:00
7a807575b2 only use build_tests/typical/install.rb for Install builder specs 2019-04-19 14:12:33 -04:00
787b3249a7 raise error if user constructs an Environment before configuration is complete 2019-04-14 20:45:31 -04:00
3115e55739 move Application#determine_n_threads -> Util.determine_n_threads 2019-04-14 15:49:46 -04:00
0c07ea0437 compress rscons script like waf - close #76 2019-04-14 15:26:28 -04:00
0e7c976089 fix inconsistent type handling in VarSet#expand_varref - #73 2019-04-14 14:11:48 -04:00
921f0d2cb1 expose glob method directly to Rsconscript - close #97 2019-04-14 12:51:37 -04:00
c23426c5aa remove SharedObject special handling in Environment#get_build_fname - close #96 2019-04-14 12:41:12 -04:00
ea2b1e73d1 add direct mode to Program builder - close #61 2019-04-14 12:35:28 -04:00
9bf4b8fa96 add barriers - close #53 2019-04-09 22:29:22 -04:00
008fa4844d allow passing Builder objects as sources to build targets - close #95 2019-04-09 20:35:46 -04:00
568b78e2e2 test tracking object file source language - #87 2019-04-09 19:52:25 -04:00
3b00016278 Program builder cleanup, track object file source language - #94, #87 2019-04-09 19:41:13 -04:00
a655d04541 Add Depfile builder mixin - #94 2019-04-09 18:41:02 -04:00
5534878f68 Object builder cleanup - #94 2019-04-09 18:28:42 -04:00
1efee50b2c add Builders::Mixins::ObjectDeps to commonize some builder functionality 2019-03-16 22:34:07 -04:00
3ff09978f4 remove Builder.features and Builder.produces? 2019-03-16 21:54:20 -04:00
ac1fc6d106 move default construction variables into one place 2019-03-13 21:17:37 -04:00
06b9c98ed0 support false :use value for configure operations - close #93 2019-02-28 21:09:56 -05:00
f58744d31f mv build_dist.rb -> rb/build_dist.rb 2019-02-28 21:00:39 -05:00
bf136e79f2 rework showing failed command - close #89 2019-02-26 06:52:43 -05:00
ab2fa1662f Replace specialized Cache accessors with general #[]/#[]= methods. 2019-02-25 21:22:54 -05:00
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
6ce3d59ad9 Add integration test for copying multiple sources with Copy builder 2019-02-25 21:13:57 -05:00
983862a528 update builder messages - close #77 2019-02-18 22:30:11 -05:00
658b73e4de add build test for a builder waiting on another builder 2019-02-17 22:20:51 -05:00
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
8426a54a57 replace JobSet with BuilderSet 2019-02-17 14:17:31 -05:00
ee1640008c simplify JobSet logic a little 2019-02-17 13:59:03 -05:00
7cfd23e16f remove :builder and :cache from build_operation 2019-02-16 19:12:33 -05:00
5c3b615aee remove unused :which parameter to Environment#wait_for_threaded_commands 2019-02-16 18:36:44 -05:00
935848c3b5 remove some builder-tracked fields from the build_operation Hash 2019-02-16 18:21:19 -05:00
d047a1bf29 JobSet only stores builders instead of build info hashes 2019-02-16 18:06:03 -05:00
016bf5eac7 use Builder instance variables as much as possible in #finalize 2019-02-16 17:53:21 -05:00
33504f586b pass Builder object to build hooks instead of build_operation Hash 2019-02-13 21:13:13 -05:00
86594c62b6 begin transitioning builders to using instance variables instead of #run options Hash fields 2019-02-11 22:53:41 -05:00
ea25f62f7c remove deprecated Environment#add_target parameter - #84 2019-02-10 22:20:34 -05:00
f2cfc25604 Remove Environment#run_builder :allow_delayed_execution option - #84 2019-02-10 22:13:37 -05:00
a1f5f022d1 test build hooks overwriting entire vars hash as a non-backwards-compatiblity test 2019-02-10 22:07:08 -05:00
7992450383 Drop support for 5-argument form of Builder#run - #84 2019-02-10 21:47:34 -05:00
b41a368da1 alphabetize Util public methods 2019-02-10 21:26:37 -05:00
1b63dc7503 move Environment.parse_makefile_deps to Util 2019-02-10 21:23:52 -05:00
db788cdd35 Move Environment#command_to_s to Util. 2019-02-10 21:16:56 -05:00
3f8b4d616f Remove BuildTarget, Builder#create_build_target, and Builder#setup - close #90 2019-02-10 18:24:49 -05:00
aac32d20b0 create Builder instance for each build operation - close #88 2019-02-10 17:27:40 -05:00
12f1909d35 remove a few deprecated methods - #84 2019-01-04 13:55:00 -05:00
31ef45258f make global CLI options available under subcommands - close #86 2019-01-03 13:50:01 -05:00
9f9b7f0bf4 preserve .mf dependency files - close #58 2019-01-01 21:17:28 -05:00
918c629435 add verbose CLI option to set Environment default echo mode - close #70 2019-01-01 16:15:22 -05:00
eaac473f44 provide Environment construction option to use stored configuration settings - close #78 2019-01-01 15:49:15 -05:00
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
347d651ab6 Add builder construction variables to Environments before the builder is added. 2018-12-29 17:57:41 -05:00
08085f09c4 libs found with check_lib should be added to LIBS - close #79 2018-12-17 23:05:18 -05:00
5915ac2b95 ConfigureOp: refactor some logic into #store_common 2018-12-17 22:54:34 -05:00
a98c111cd2 implement distclean operation - close #81 2018-12-17 22:47:00 -05:00
93ffed2eb2 Use "Environment" instead of "Rscons::Environment" in build tests 2018-12-17 22:14:35 -05:00
f8e6666a2c Add 'build' DSL method.
Disallow processing Environments until configuration is performed.
2018-12-17 22:14:35 -05:00
5720662b7c avoid mkdir() race conditions - close #75 2018-12-11 22:13:52 -05:00
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
7c7ee142e0 implement autoconf - close #63, close #68, closes #67 2018-12-03 22:23:42 -05:00
ba69f05e99 remove backtrace from stderr for unknown CLI options - close #69 2018-11-30 23:29:19 -05:00
6180410cc4 add spec for Cache validating JSON contents 2018-11-30 23:11:52 -05:00
2d44a88fb6 add spec for unknown CLI operation 2018-11-30 23:08:16 -05:00
28e3781331 add configure spec testing --prefix 2018-11-30 23:05:41 -05:00
c0a28d0207 add configure spec to check multiple set_define's being stored 2018-11-29 22:14:10 -05:00
0e27e967d0 configure: fix handling build_dir and prefix options 2018-11-29 22:06:36 -05:00
1ecce7e99e add configure spec to check as much as possible 2018-11-29 22:02:42 -05:00
25b73ebd8f move logic to find an executable from ConfigureOp to Util 2018-11-29 21:51:30 -05:00
bca963af5c add configure spec for check_cfg not finding the specified program 2018-11-29 21:28:37 -05:00
ba5377a1ce add configure specs to check for unknown compiler names 2018-11-29 20:51:24 -05:00
8d7fd4bda8 test all known compiler invocation commands - close #66 2018-11-29 17:44:36 -05:00
e3e2e46d6e fix configure :set_define handling to append to CPPDEFINES array 2018-11-25 22:00:55 -05:00
9e0ce5a55c add spec for check_cfg with a :package argument 2018-11-25 21:58:22 -05:00
b88131eb2f add specs testing configure :set_define option and fix the same 2018-11-25 21:45:46 -05:00
dff80587ac move Rscons.absolute_path?() to Util 2018-11-25 21:31:48 -05:00
cd2696dd0b add Util specs 2018-11-25 21:22:37 -05:00
36643c1ab1 add Util module and Util.make_relative_path() 2018-11-25 21:17:11 -05:00
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
660d30558a remove Environment#to_h 2018-11-25 21:00:29 -05:00
82fbd34149 add dspec task to test dist file; revert spec task to normal behavior 2018-11-25 20:45:32 -05:00
e0b82d37af cache: remove obsolete "default_environment_vars" entry 2018-11-25 17:02:02 -05:00
7a90325b67 set Environment build root automatically - close #64 2018-11-25 16:58:19 -05:00
49116e6b59 store build_dir and prefix configuration options in cache 2018-11-25 16:06:36 -05:00
90300a1606 pass operation options via Hash instead of setting Application attributes 2018-11-25 16:02:04 -05:00
1eb07e9a22 use Rsconscript instead of Rsconsfile - close #62 2018-11-25 15:42:53 -05:00
9975eec165 add build test for check_cfg - close #59 2018-11-23 22:23:01 -05:00
04c0a6a86f colorize configure messages more consistently 2018-11-23 21:55:02 -05:00
bfdf3a12fd load configuration data when constructing a new Environment - close #60 2018-11-23 21:23:19 -05:00
6dd9c835ce store configuration data more opaquely in Cache 2018-11-23 20:15:39 -05:00
cfec0dcadc simplify Application/Script/ConfigureOp interaction with direct calls to configure methods 2018-11-23 19:59:47 -05:00
a1c1cc1855 check_cfg: print something 2018-11-15 17:14:11 -05:00
add9f9c50d save configured environment construction flags for separate build step - close #60 2018-11-15 17:04:04 -05:00
ba3d656110 consolidate some configure check reporting 2018-11-14 23:30:47 -05:00
ab4ca71ac7 implement ConfigureOp#check_cfg - not tested yet 2018-11-14 23:28:00 -05:00
aba11155a4 rename check_executable to check_program 2018-11-14 23:00:40 -05:00
3b586cb476 implement ConfigureOp#check_lib 2018-11-14 22:53:00 -05:00
88fd4bd405 robustify Ansi module a bit 2018-11-12 21:50:16 -05:00
7869d38dd8 implement ConfigureOp#check_executable 2018-11-07 22:22:07 -05:00
e8990199ef configure: output project name and build directory 2018-11-07 21:56:23 -05:00
6078cb0977 implement ConfigureOp#check_d_import 2018-11-07 21:49:44 -05:00
85b0111a6e implement ConfigureOp#check_cxx_header 2018-11-07 21:44:04 -05:00
6bb0a55a55 implement ConfigureOp#check_c_header 2018-11-07 21:39:42 -05:00
95d5ada865 specs: run each build test from separate directory; keep directory if test fails 2018-11-07 21:33:28 -05:00
cd9fffd828 Script: change the way configuration arguments are stored 2018-11-07 20:52:39 -05:00
30511a3443 pass the Environment to configure to ConfigureOp; begin modifying it in the tests 2018-11-07 20:46:07 -05:00
d656df5407 implement ConfigureOp#check_d_compiler 2018-11-07 19:05:08 -05:00
d54d363a25 implement ConfigureOp#check_cxx_compiler 2018-11-07 18:53:06 -05:00
697db2a987 specs: check_c_compiler: also test when no arguments are given 2018-11-06 22:39:13 -05:00
daa90e431c check_c_compiler: add integration test for finding second listed C compiler 2018-11-06 22:28:23 -05:00
bdeaec11ba Ansi: add some other colors 2018-11-06 22:19:49 -05:00
7eeb6312ba check_c_compiler: print output; add a integration test 2018-11-06 22:16:38 -05:00
07d9b97ddc set default rake task back to spec 2018-11-06 22:14:34 -05:00
af033ee4e0 fill in ConfigureOp#test_c_compiler 2018-11-06 21:45:29 -05:00
c9de4f37e6 allow configure to fail; application should return error code from operation 2018-11-06 15:42:10 -05:00
64caaa9a53 add ConfigureOp class 2018-11-06 00:17:22 -05:00
d196845c85 parse 'configure' command-line options 2018-11-04 00:16:53 -04:00
5288a47bfb start on specs for configure command 2018-11-03 23:19:54 -04:00
9bd9abcad1 update CHANGELOG.md for v1.17.0 2018-11-02 17:02:46 -04:00
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
97c24eec6b specs: fix Application#determine_n_threads specs 2018-10-30 17:39:43 -04:00
053df2360f add Rscons.vars back again at least for now 2018-10-30 17:36:30 -04:00
8d766e4804 specs: fix cache_varset.rb builder message 2018-10-30 17:36:30 -04:00
e29ec5a126 move clean logic to Application 2018-10-30 17:36:30 -04:00
de46bb0cc1 specs: remove usage test when no operation given 2018-10-30 17:00:57 -04:00
084080a682 specs: do not run separate 'configure' step before main build test 2018-10-30 17:00:10 -04:00
3a564c0ca2 add Dsl and ConfigureDsl 2018-10-26 21:17:04 -04:00
ac89a122d8 add Application class; update CLI and Script for new architecture 2018-10-21 01:24:15 -04:00
ea6ae1be10 remove unneeded OptionParser separators 2018-10-12 17:20:34 -04:00
a649c7f4cb add Script class 2018-10-12 17:18:04 -04:00
2f83f36659 start adding subcommand interface to Cli module 2018-09-10 20:35:00 -04:00
a46936bc0b change default task to build_dist 2018-09-04 16:04:58 -04:00
95ee63292e Rscons is no longer a gem.
Run specs against the combined distributable standalone script.
2018-09-03 19:32:53 -04:00
bcd33fe098 add build_dist.rb to create dist/rscons as a standalone script 2018-09-01 17:00:04 -04:00
5cf77f1f58 v1.16.0 2018-08-24 09:24:03 -04:00
b4cc45c381 update documentation 2018-08-24 09:17:23 -04:00
750506201f add github URL to README.md 2018-08-23 15:37:18 -04:00
284312a21c support command-line variables - close #51 2018-08-23 14:58:08 -04:00
d081a4695f add shebang line to bin/rscons 2018-08-23 11:30:18 -04:00
c7f66694ab add Rscons.glob - close #50 2018-08-23 11:26:20 -04:00
57de94a3fb improve debuggability of cache.up_to_date? - close #46 2018-08-23 10:10:05 -04:00
53ba7dad41 allow passing a VarSet into cache methods - close #47 2018-08-22 16:32:05 -04:00
8cb02a7e34 generate dependencies for D builds - close #49 2018-08-22 15:23:48 -04:00
dbbce9e476 update a few dependencies 2018-05-24 15:32:39 -04:00
0dc3a90660 v1.15.0 2017-09-08 15:13:04 -04:00
d48c7587d6 add v1.15.0 release notes 2017-09-08 15:06:55 -04:00
70d4740a69 split CHANGELOG.md out of README.md 2017-09-08 15:06:23 -04:00
aaae845d60 allow json 1.x or 2.x 2017-09-08 15:04:40 -04:00
e900e74342 v1.14.0 2017-08-03 15:55:54 -04:00
62ae3f162d add v1.14.0 release notes 2017-08-03 15:55:38 -04:00
099d26f33c Add Rscons::VarSet#values_at - close #45 2017-08-03 15:54:24 -04:00
89562c584a Environment#print_builder_run_message should support string commands - close #44 2017-08-03 14:10:53 -04:00
a9aeaf2356 v1.13.0 2017-07-14 16:24:27 -04:00
5409b3cb34 add v1.13.0 release notes 2017-07-14 16:24:04 -04:00
6d04500c13 Add ability to record side-effect file production - close #43 2017-07-14 16:17:01 -04:00
45e30662d2 add YARD comment for Rscons::Ansi to get to 100% coverage 2017-07-12 15:51:00 -04:00
8f7e044bfd fix YARD @option tag 2017-07-12 15:50:13 -04:00
dbea6f0a26 v1.12.0 2017-07-11 16:16:01 -04:00
c923eb5c7c add v1.12.0 release notes 2017-07-11 16:14:49 -04:00
529d9aacaa colorize a couple other builders' output messages 2017-07-11 16:12:38 -04:00
65c1bac4f9 be more colorful - close #41 2017-07-11 13:52:01 -04:00
775363ddbd cloned Environments should inherit n_threads - close #42 2017-07-11 10:29:25 -04:00
2a96495e83 wait for in-progress subcommands to complete on build failure - close #39 2017-06-26 22:44:49 -04:00
15e52e488c env.depends should imply env.build_after - close #40 2017-06-21 10:44:52 -04:00
c0b12132f0 1.11.1 release notes 2017-06-14 09:58:09 -04:00
9141cf91e7 v1.11.1 2017-06-14 09:57:11 -04:00
7f7e6ef3da fix circular build dependency detection logic 2017-06-14 09:56:51 -04:00
60b3fdbcac update YARD documentation link 2017-06-14 09:12:13 -04:00
5263ea03c6 v1.11.0 2017-06-14 08:56:21 -04:00
6c91823ce2 v1.11.0 release notes 2017-06-14 08:54:57 -04:00
8deb1eb6f8 Change default :clone option to :all to clone all Environment attributes 2017-06-14 08:53:28 -04:00
6d6319799a add v1.10.1 release notes 2017-06-13 19:47:58 -04:00
694642dfbd Allow overriding n_threads on a per-Environment level - close #34 2017-06-13 19:45:53 -04:00
6dd70ff65e raise error when circular dependencies are found - close #38 2017-06-13 19:37:41 -04:00
eca01c38df Fix non-blocking thread-wait if Rscons.n_threads is set to 0 - close #37 2017-06-13 19:07:04 -04:00
4ad6ce1d9c SHCFLAGS and SHCXXFLAGS should inherit non-SH flags by default - close #36 2017-06-13 18:41:47 -04:00
a49ebc486e env.build_after should expand paths - close #35 2017-06-13 18:38:47 -04:00
74d19ea235 fix construction variable reference table OBJSUFFIX entries 2017-06-12 09:33:52 -04:00
d7a6d69a92 update v1.10.0 release notes 2017-06-12 09:33:13 -04:00
11864eb55b v1.10.0 2017-06-10 00:50:43 -04:00
Michael Metivier
387c40176b Pre-build hooks do not respect modified key values for old-style builders 2017-06-09 19:50:12 -04:00
f1b24ee8ba minor formatting: replace missing space 2017-06-08 15:01:30 -04:00
ef3150db0f document construction variables and their default values in README.md 2017-06-08 14:58:55 -04:00
ed4fb8b681 expand README.md a bit 2017-06-08 14:10:42 -04:00
3a3f6d6d27 add v1.10.0 release notes 2017-06-08 12:02:13 -04:00
20affc0e1d fix SHLD spec for Windows 2017-06-08 12:01:50 -04:00
010607d3b0 Rework builder features to be returned by Builder#features instead of taken into account by Builder#produces? 2017-06-08 11:07:01 -04:00
b7f609b7e8 add SHLIBPREFIX 2017-06-07 16:35:20 -04:00
10d4c647b9 add spec for building a shared library using D 2017-06-07 15:22:20 -04:00
db2ec82a25 Add more integration tests for SharedLibrary and backwards compatibility 2017-06-07 13:02:51 -04:00
aa192d7567 bugfix: Object and SharedObject should respect vars when checking source suffixes 2017-06-07 09:52:11 -04:00
ed5d6e9e49 homogenize slashes in Environment#expand_path() 2017-06-07 09:26:13 -04:00
3436dc3a64 Expand target and sources before calling Builder#create_build_target 2017-06-06 16:43:26 -04:00
df52a7e0e1 add SharedObject and SharedLibrary builders - close #8 2017-06-06 13:27:38 -04:00
6bd7e6f852 Object builder changes in preparation for adding SharedObject 2017-05-30 16:26:39 -04:00
19a23c2aa9 Create builder features
Pass desired features to Builder#produces?
Allow features to be passed in to Environment#register_builds.
Use features in Environment#get_build_fname to determine build file name.
2017-05-30 15:30:15 -04:00
c7e4e1ad9b Always use a build root and default it to "build" 2017-05-30 11:06:32 -04:00
43df46018c Support redirecting standard output using the Command builder - close #28 2017-05-29 12:50:34 -04:00
8cbb9fa30e Place object files for absolute source paths under build_root - close #30 2017-05-29 12:16:46 -04:00
1880e6650e fix PROGSUFFIX handling - close #29 2017-05-29 11:40:01 -04:00
d31b4725d2 add LEXSUFFIX, YACCSUFFIX construction variables - close #31 2017-05-29 11:03:01 -04:00
6f242a1c64 Merge branch 'parallelization' - close #23 2017-05-29 10:58:55 -04:00
c7943bc2cc ignore .bundle 2017-05-29 10:57:27 -04:00
b5826bd7f4 use new Builder#run signature for Command builder 2017-05-25 17:06:34 -04:00
05bbea6fa1 add Environment#build_after 2017-05-25 17:00:21 -04:00
68468b6422 fully parallelize the Command builder 2017-05-25 16:03:05 -04:00
80a80a7cb0 fully parallelize the Preprocess builder 2017-05-25 15:54:33 -04:00
178940cd5d fully parallelize the CFile builder 2017-05-25 15:28:01 -04:00
145d51c825 fully parallelize the Disassemble builder 2017-05-25 14:59:51 -04:00
a11fab43cb Update spec task to preserve simplecov coverage info for previous full spec runs when doing a partial spec run 2017-05-24 16:29:17 -04:00
83226e894d add backwards-compatibility test for Builder#standard_build 2017-05-24 16:16:53 -04:00
b454208117 fully parallelize the Library builder 2017-05-24 16:10:58 -04:00
df420fdf5c use ThreadsWait (only for blocking thread waits) 2017-05-24 16:02:25 -04:00
f3bf325c88 add a little more leeway in the multi-threading timing test 2017-05-24 15:58:11 -04:00
f815952ab3 add Builder#standard_threaded_build, #standard_finalize
parallelize Program builder command
2017-05-24 15:41:39 -04:00
1af3c5c9a4 pass Builder#run options into Builder#finalize also 2017-05-24 15:13:59 -04:00
dce88ece14 pass entire build_operation Hash to Builder#run 2017-05-24 14:32:43 -04:00
2655c119e4 add spec for Environment#find_finished_thread to fully cover 2017-05-23 16:47:00 -04:00
221cde7e5f update run_builder, build_sources integration tests for more coverage 2017-05-23 16:45:21 -04:00
adcee373df add integration test for Environment#build_sources 2017-05-23 16:28:13 -04:00
e58b8bd109 add integration test for Environment#run_builder 2017-05-23 16:25:03 -04:00
8a1dfb0785 do not catch NameError when looking up Builder#run method 2017-05-23 16:24:45 -04:00
d315f86a36 remove unit tests for Environment#run_builder, #build_sources 2017-05-23 16:20:41 -04:00
0d46d616dd change user dependency test to use BuildTarget#depends 2017-05-23 16:09:29 -04:00
032e6d5d0a add some integration tests for the CLI 2017-05-23 16:06:21 -04:00
c9946da193 integration tests: only pass -f when a specific rsconsfile is specified 2017-05-23 15:55:28 -04:00
599d10b50f add integration test for overriding PROGSUFFIX 2017-05-23 15:32:55 -04:00
18c6c69871 do not use ThreadsWait to wait for threads; it does not work properly 2017-05-23 15:24:52 -04:00
2ffdf82d9a add multi-threading build test 2017-05-23 14:24:14 -04:00
15e5d15424 Avoid Environment#process race condition
Race condition could have occurred if the last threaded command
was gathered in the non-blocking wait and then a blocking wait was
started because there was no job to run. Do not do a blocking wait
in this case.
2017-05-23 14:12:38 -04:00
a99e6e81b2 simplify Environment#process looping 2017-05-23 14:10:45 -04:00
1509c95176 remove Cache.reset! 2017-05-23 14:05:29 -04:00
c7bba77581 remove Program builder non-integration specs 2017-05-22 16:57:35 -04:00
957fd8c86d convert Library builder specs to integration tests 2017-05-22 16:54:10 -04:00
7e707e7e3b convert Object builder specs to integration tests 2017-05-22 16:38:57 -04:00
2be738be4f Including trailing newline when printing failed command 2017-05-22 16:26:12 -04:00
7b3bffd329 update some non-integration-test specs 2017-05-22 16:25:49 -04:00
06cb4b7a55 migrate some Cache tests to integration tests 2017-05-22 15:55:18 -04:00
bfbbc19728 fix simplecov setup to get coverage for integration build tests 2017-05-22 11:19:55 -04:00
28e56251dd update build_tests_spec to invoke rscons in a subprocess for each test 2017-05-20 15:15:07 -04:00
2d8e08b493 add -j command-line option to set number of threads 2017-05-19 11:38:42 -04:00
5cef9896ac consistently print failed build command if a builder fails 2017-05-19 10:57:30 -04:00
6344692087 update Object builder to support parallelization; update Program and Library builders to register object builds from #setup 2017-05-19 10:49:16 -04:00
267fc7124d process threaded commands until they are all complete 2017-05-17 15:52:34 -04:00
e694199f33 delay building targets that depend on builds registered with Environment#register_builds 2017-05-17 15:45:04 -04:00
4ed584701a pass setup_info to the builder's #run method 2017-05-17 13:50:31 -04:00
5de52620e4 JobSet#get_next_job_to_run: take into account targets still building 2017-05-17 10:19:43 -04:00
9cc59a35f0 handle threaded commands in Environment#process 2017-05-17 10:07:15 -04:00
ca445f5733 add JobSet#size 2017-05-17 09:36:27 -04:00
7534b29e26 add Environment#wait_for_threaded_commands, use from #run_builder if delayed execution is not allowed 2017-05-17 09:34:19 -04:00
800e7a51a4 add Environment#start_threaded_command 2017-05-17 09:14:42 -04:00
5d36aa74a0 add more fields to ThreadedCommand 2017-05-17 09:07:51 -04:00
01851c2872 refactor into new Environment#command_to_s 2017-05-17 09:04:05 -04:00
5fe55a584e add short description field to ThreadedCommand 2017-05-17 08:49:53 -04:00
9c13634eaf start adding support for threaded commands in Environment#run_builder 2017-05-17 08:47:17 -04:00
e4adaab003 add Builder#finalize 2017-05-16 09:18:08 -04:00
6b8fda706d add ThreadedCommand class 2017-05-15 10:57:34 -04:00
ef4f9882cd change Builder#run base class method to new signature 2017-05-12 21:08:14 -04:00
7a31039e35 add @since tags for new methods 2017-05-12 21:07:25 -04:00
3e4897c04b store setup_info in the job 2017-05-12 16:30:30 -04:00
d46dc2014c update JobSet interface to just take a Hash of job parameters 2017-05-12 16:30:02 -04:00
9cfc0c20b7 call Builder#setup 2017-05-12 16:27:43 -04:00
19a00a7b84 prepare to call new Builder#run interface 2017-05-12 16:25:34 -04:00
9b6d2c5111 add Environment#register_builds 2017-05-12 16:16:25 -04:00
6a0ccad804 add Builder#setup; add new Builder#run signature 2017-05-12 16:16:07 -04:00
dab870854a add Rscons.n_threads 2017-05-12 14:38:18 -04:00
695bf84092 expand target and source paths when registering a builder 2017-05-10 15:06:16 -04:00
7cba8c8424 JobSet: target is already stored in job info 2017-05-10 14:57:04 -04:00
551b8fa365 add integration test to verify cache is written if a builder fails 2017-02-16 19:27:18 -05:00
3601359c08 process jobs from the JobSet 2017-02-16 19:27:18 -05:00
e1d8dfbab6 add JobSet class 2017-02-16 19:27:18 -05:00
c69da1044d update README for v1.9.3 2016-09-30 14:04:58 -04:00
f33be07a15 v1.9.3 2016-09-30 14:03:35 -04:00
c4c2d5c128 Environment#parse_flags should put -std=XXX flags in CCFLAGS, not CFLAGS 2016-09-30 14:02:30 -04:00
3065dc48ec document passing multiple dependencies to env.depends() 2016-05-02 09:10:14 -04:00
9ca2934695 document explicit dependencies 2016-03-02 13:33:00 -05:00
3af6b6be1b v1.9.2 2016-01-12 10:16:00 -05:00
0442b876a5 allow phony targets in conjunction with a build root 2016-01-12 10:14:10 -05:00
bab4641b6e v1.9.1 2015-12-10 15:25:29 -05:00
4698fc41b9 add v1.9.1 release notes 2015-12-10 15:25:16 -05:00
952f423860 use ${INCPREFIX} instead of hard-coded "-I" in Preprocess builder 2015-12-10 15:19:41 -05:00
d2da5f7b0d bundle update 2015-12-10 15:18:59 -05:00
ab14dc16ed change *SUFFIX defaults to arrays; add various C++ file suffixes 2015-06-15 21:58:37 -04:00
aa795eea85 v1.9.0 2015-03-15 20:56:37 -04:00
7dffef6bd0 update README.md 2015-02-15 19:52:33 -05:00
dce2114733 document Copy builder class 2015-02-15 18:42:37 -05:00
0bbdda2d41 fix Command builder default short description 2015-02-15 18:41:41 -05:00
3b8910075a use class instance variables instead of class variables 2015-02-15 18:38:09 -05:00
34beda844e reorganize Rscons module class methods 2015-02-15 18:33:00 -05:00
7a04bec2ff support phony targets - close #25 2015-02-15 18:29:33 -05:00
7698fbf618 add "rscons" binary - close #24 2015-02-08 18:04:37 -05:00
4eedea2563 add Copy builder as a copy of Install 2015-02-07 09:57:44 -05:00
f678803a5d add Install builder - close #6 2015-02-07 09:49:29 -05:00
9c49a09f69 update :spec rake task to allow example pattern as an argument 2015-01-29 09:58:09 -05:00
859f87ddee add a Directory builder - close #27 2015-01-29 09:31:00 -05:00
73bc71a656 test expanding paths after a build target is registered from within a build hook 2015-01-28 17:15:55 -05:00
29a8684f90 support registering multiple build targets with the same path - close #26 2015-01-28 17:10:36 -05:00
02aff35222 allow overriding Command builder short description with CMD_DESC variable -- close #22 2015-01-24 09:40:07 -05:00
897d31ebe0 fix Command builder example invocation 2015-01-21 14:07:28 -05:00
76610a07a9 fix variable references that expand to arrays in build target sources - fix #20 2015-01-20 21:26:45 -05:00
cb3cc9a0de update 1.9.0 release notes 2015-01-20 21:18:19 -05:00
0ea842fffe rework Preprocess builder to consider deep dependencies - fix #21 2015-01-20 21:16:21 -05:00
d28722a4bb fix Rscons.set_suffix to append the given suffix if the filename has none 2015-01-20 21:13:27 -05:00
8142d0bbc8 add v1.8.1 release notes 2015-01-20 21:12:57 -05:00
a8023ae03c v1.8.1 2014-10-22 14:30:32 -04:00
99ba015630 fix Environment#dump when construction variables are Symbols 2014-10-22 14:30:14 -04:00
dcf90cc12b v1.8.0 2014-10-22 10:36:28 -04:00
f93ca62c07 add v1.8.0 release notes 2014-10-22 10:31:52 -04:00
d9e3129ad5 add Environment#dump 2014-10-22 10:30:57 -04:00
d5e0475e6c minor documentation improvements 2014-10-21 17:00:38 -04:00
b05eed36eb add VarSet#to_h 2014-10-21 16:06:15 -04:00
7ea0721cc2 add a Builder#run method which raises an error unless overridden 2014-10-16 16:52:26 -04:00
e654df008d add rdoc to bundle 2014-10-16 16:42:03 -04:00
Michael D. Lowis
92d4dd8396 Implemented SimpleBuilder and updated Environment#add_builder method to support it 2014-10-16 16:37:37 -04:00
Michael D. Lowis
e279959d79 Added a command builder to the list of default builders 2014-10-13 12:27:05 -04:00
469f575564 v1.7.0 2014-09-25 11:35:00 -04:00
07725581e9 add v1.7.0 release notes 2014-09-25 11:34:37 -04:00
ebb69cedc2 add @since tag to Environment#add_post_build_hook 2014-09-25 11:31:18 -04:00
c98b377ce8 use "rake/clean" module now that it isn' so noisy; clean .yardoc folder 2014-09-25 11:14:39 -04:00
a0874e7cf1 add tests for *SUFFIX variables containing Arrays - close #9 2014-09-25 11:12:11 -04:00
0b04229e3d fix Environment#build_dir documentation 2014-09-25 10:47:21 -04:00
20f3da3b04 allow trailing slashes to be passed to env.build_dir() 2014-09-25 10:45:52 -04:00
a6a79b8ef1 test cloning post-build hooks 2014-09-23 12:44:02 -04:00
6d4f27602e update README.md notes about build hooks 2014-09-19 12:41:54 -04:00
453295a49b add post-build hooks - close #14 2014-09-19 12:36:57 -04:00
dee2b98f6e allow build hooks to register new build targets - close #15 2014-09-19 11:10:59 -04:00
b186b3102c clear build targets after processing an Environment - close #17 2014-09-19 10:45:49 -04:00
23c94f7841 fix YARD curly brace escapes 2014-09-11 13:53:10 -04:00
6acb209ef4 v1.6.1 2014-08-19 09:12:35 -04:00
43e12819d7 update .gitignore, version Gemfile.lock 2014-08-19 09:12:21 -04:00
1bfb7dd100 add v1.6.1 release notes 2014-08-19 09:09:37 -04:00
df1e3be829 fix #12 - allow overriding dependency file suffix with DEPFILESUFFIX construction variable 2014-08-18 15:53:02 -04:00
851adae66f fix #13 - Environment#depends should expand its arguments for construction variables 2014-08-18 15:39:33 -04:00
eb28e09d8c add v1.6.0 release notes 2014-07-10 14:34:35 -04:00
01a84e8819 v1.6.0 2014-06-18 10:45:05 -04:00
28bedfce11 Support lambdas as construction variable values 2014-06-18 10:43:35 -04:00
e792fd473b add v1.5.0 release notes 2014-06-18 09:15:49 -04:00
9f738ee175 v1.5.0 2014-06-16 22:20:06 -04:00
912615535a added more documentation to get to 100% YARD coverage; fix YARD warnings 2014-06-16 15:33:22 -04:00
d87c4990b1 add redcarpet to bundle 2014-06-16 14:40:43 -04:00
6a17cbcd54 remove unnecessary rspec dependencies 2014-06-16 14:37:24 -04:00
8fc95b5d69 change Builder#create_build_target and BuildTarget#initialize to accept a Hash of options 2014-06-16 12:17:33 -04:00
d9eea10363 update D build test for Linux 2014-06-12 16:00:41 -04:00
5045e2e336 fix build test for Linux 2014-06-12 15:59:49 -04:00
31968e7e32 complete spec updates for RSpec 3 using only :expect syntax 2014-06-12 15:52:15 -04:00
5783ed993a update more rspec expectations 2014-06-12 15:43:50 -04:00
0778f043ee update many specs to RSpec 3 format 2014-06-12 15:39:20 -04:00
42597b2dac use new rspec expect syntax 2014-06-12 13:54:35 -04:00
7b13d51d23 environment spec updates for Windows 2014-06-12 13:41:46 -04:00
c2d4ece957 build test spec fix for running on Windows 2014-06-12 13:38:15 -04:00
3ab9c8723b fix a build test for MinGW 2014-06-12 13:35:11 -04:00
1b50a9dd3c add Rscons::BuildTarget
Return a BuildTarget object from Environment#method_missing when a build target is registered.
2014-06-12 13:31:17 -04:00
87b25d7bfd add PROGSUFFIX construction variable and default it to ".exe" for mingw/cygwin platforms 2014-06-12 13:02:53 -04:00
da457b9138 fix spec typo 2014-06-12 11:31:56 -04:00
0cbf05da49 retry directory removal to work around Windows' inability to remove directories when you ask 2014-06-12 11:31:17 -04:00
08b8a2e6be update gemspec, do not use git to determine files 2014-06-12 11:13:56 -04:00
9f75ea9d21 add Rscons.command_executer to determine command executer
Use "env" to execute commands when in MSYS on Windows
2014-06-12 11:07:09 -04:00
ef18c9da35 Environment: add #parse_flags, #parse_flags!, and #merge_flags 2014-06-12 10:40:01 -04:00
7c9e7e833a Unbuffer $stdout 2014-06-12 09:36:24 -04:00
eb9aa476b7 update default construction variables to match SCons a little more closely 2014-06-11 16:54:32 -04:00
7f2b685bfb shorten Environment#shell code a bit 2014-06-11 15:31:13 -04:00
ae9021a505 add Environment#shell - close #11 2014-06-11 14:59:31 -04:00
a1a4cc18cd change json to a runtime gem dependency 2014-06-05 09:19:59 -04:00
f5a3b448d3 test supported construction variable types when cloning 2014-05-15 15:54:02 -04:00
9abb47ffe7 v1.4.3 2014-05-14 15:53:52 -04:00
f78d13b648 add v1.4.3 release notes 2014-05-14 15:53:33 -04:00
ab1ea34941 add specs testing construction variable overrides for built-in builders 2014-05-14 15:48:00 -04:00
08f2248ed7 fix up builders to properly use variable overrides 2014-05-14 15:15:08 -04:00
9d61fa0276 merge Environment#build_command and #expand_varref 2014-05-14 14:33:09 -04:00
c0adb64c5d v1.4.2 2014-05-09 10:32:22 -04:00
95da14e029 add release notes in README.md 2014-05-09 10:31:54 -04:00
58b41df426 expand target and sources for construction variable references before invoking builder 2014-05-09 09:45:29 -04:00
bd525e2742 rename Environment#clean_target_paths! -> #expand_paths! 2014-05-09 09:19:40 -04:00
c08a2243b9 add Environment#expand_path 2014-05-05 16:22:07 -04:00
0de1e8e970 v1.4.1 2014-04-17 12:03:29 -04:00
6f20a1da3f bugfix: support invoking builders with no sources and a build root defined 2014-04-17 12:03:09 -04:00
03ffb39956 v1.4.0 2014-04-15 16:19:19 -04:00
0a10af3f5e update README.md for v1.4.0 release notes 2014-04-15 16:18:58 -04:00
ddf00d08a7 shortcut all of Environment#process if @targets is empty 2014-04-15 16:18:33 -04:00
8be1842cf8 update documentation for new builders 2014-04-15 16:06:00 -04:00
d424facf7f Add Preprocess and Disassemble builders 2014-04-15 15:21:55 -04:00
ee5aca275d Write Cache to disk if an exception occurs while processing the Environment - fix #4 2014-04-15 14:20:30 -04:00
ea30b0b5ee Fix Cache#mkdir_p to handle absolute paths - fix #5 2014-04-15 14:15:32 -04:00
5a0d80b781 Cache: implement "dirty" attribute to only re-serialize when necessary 2014-04-15 14:11:10 -04:00
a2653a77d1 shortcut Environment#process if @targets is empty 2014-04-15 14:04:59 -04:00
160434b903 Cache: change to a Singleton object so it is only loaded from disk once 2014-04-15 14:02:26 -04:00
5ce8940d54 stop encoding Cache contents 2014-04-15 13:39:45 -04:00
1a5e9ddaa6 Implement copy-on-write semantics for VarSet, speeding up Environment cloning 2014-04-15 11:21:15 -04:00
5924154229 speed up VarSet#deep_dup a bit 2014-04-15 09:47:05 -04:00
5beda54374 do not clone @varset when appending to the cloned environment since appending will do its own clone 2014-04-15 09:36:30 -04:00
ae0ad98075 use @varset.append() instead of @varset.send(:append) 2014-04-15 09:32:35 -04:00
f5be3a3571 VarSet: implement deep copying ourselves instead of using Marshal for a speed increase 2014-04-15 09:16:30 -04:00
fdc5c8773c Issue #7 - store MD5 of build command instead of the full command in the cache 2014-04-14 17:17:54 -04:00
c61380b354 Issue #7 - change .rsconscache from using YAML to JSON to speed up parsing 2014-04-14 16:52:21 -04:00
d8dda291a5 ensure that Dir[] results are predictable in build tests 2014-04-14 13:13:43 -04:00
1fe2c6401d expand ^/ in target paths to be relative to the build root 2014-03-27 13:30:11 -04:00
4818fd10fe README.md: add more details about Environment cloning 2014-03-27 12:02:46 -04:00
5989e24ee6 update some documentation 2014-03-27 11:57:45 -04:00
1875a2ea66 Pass the Environment object to build hooks in the :env key of the build_op parameter 2014-03-27 10:44:10 -04:00
cbd5816b4b add VarSet#include? 2014-03-27 10:39:46 -04:00
b2c970c9ca add Environment#add_target and use it from Environment#method_missing 2014-03-26 11:29:02 -04:00
92a9982988 use #super from #method_missing instead of method aliasing 2014-03-26 11:23:32 -04:00
533ee9c16c add CFile builder to create C/C++ sources from lex/yacc input files 2014-03-18 21:57:53 -04:00
285 changed files with 13577 additions and 1723 deletions

29
.gitignore vendored
View File

@ -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

323
CHANGELOG.md Normal file
View File

@ -0,0 +1,323 @@
## v3.0.2
### Fixes
- #159 - Compiler check configure methods should respect :use flag
- #160 - Configure parameters should not be stored as unscoped construction variables
## v3.0.1
### Fixes
- #156 - Avoid running configure operation twice
- #157 - Load configure task arguments before early configure operations
- #158 - Do not configure for clean tasks when not yet configured
## v3.0.0
- #136 - Move rsconscache into build directory
- #140 - Support naming environments
- #143 - Add Size builder
- #142 - Add 'sh' script DSL method
- #144 - Add FileUtils class methods to script DSL
- #145 - Support environment variable to set rscons build directory
- #146 - Add ^^/ shortcut to top-level build directory
- #139 - Add tasks
- #147 - Add task options
- #148 - Add license/copyright to distributable script
- #150 - Add env.expand() shortcut method to expand paths and construction variables
- #152 - Add download script method
- #153 - Allow passing spawn options to sh
- #154 - Record build directory absolute path
- #149 - Add shortcut method for creating environments
- #131 - Only configure if necessary
- #151 - Store configure task parameters in configuration cache data
- #137 - Add variants
- #155 - Add build_dir script method
## v2.3.0
### New Features
- #125 - Support subsidiary Rsconscript files
- #126 - Add PATH manipulation methods
### Fixes
- #121 - env.depends() does not work with build-root-relative "^/" paths
- #130 - Document -f command line option
- #133 - Clarify failed command error message indicating to run -F
- #134 - Document CMD_STDOUT variable for Command builder
- #135 - Write dependency file to build directory when user invokes Object builder directly
- #141 - Document phony targets
## v2.2.0
### New Features
- #120 - improve support for MSYS2
- #119 - add failure messages for failed configuration checks
- #118 - compiler checks should support cross-compilers and freestanding compilers
## v2.1.0
### New Features
- #117 - ruby 2.7 compatibility
## v2.0.2
### Fixes
- #113 - distinguish object files built from multiple sources with the same base name but different extensions
## v2.0.1
### Fixes
- #112 - Install builder cannot replace a currently executing binary on Linux
## v2.0.0
- convert rscons from a Ruby gem to a standalone script
- compress rscons distributable script
- add configure operation to detect compilers, check for headers/libraries, etc... (invoked automatically if needed)
- Environments store builder classes instead of instances of builder classes
- use a separate Builder instance for each build operation
- load Rsconscript from Rsconscript/Rsconscript.rb instead of Rsconsfile
- drop support for builder run methods using the old 5 parameter signature
- remove Environment#build_dir
- set Environment build root in configure step
- remove Builder#finalize (now #run called repeatedly until builder completes)
- remove Builder#setup
- remove Builder#features and Builder#produces?
- add functionality to allow builders to wait on Ruby threads or other builders
- add install/uninstall/distclean command-line operations
- preserve makefile dependency files under build directory
- remove a few deprecated methods
- pass a Builder instance to build hooks instead of a build operation Hash
- support a basic markup syntax in builder run messages to colorize target/source files
- hide (but store) failed compilation command by default so the user doesn't have to scroll back as much to see compiler output
- refactor to remove some redundancy among built-in builders
- track object file source language (correctly determine linker when only passed object files previously built by particular toolchains)
- add barriers
- add InstallDirectory builder
- change Install builder to copy files on 'install' operation
- add "prefix" construction variable based on configured installation prefix
- allow passing builder objects as sources to build targets
- differentiate 'build' targets from 'install' targets in cache contents
- add verbose mode
- show build progress as a percentage in builder output messages
- various performance improvements
- wrote a new user guide
- added new website ([https://holtrop.github.io/rscons/](https://holtrop.github.io/rscons/))
- added new logo
## 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

14
DEVELOPING.md Normal file
View File

@ -0,0 +1,14 @@
# Developing
# Specs
To run the rscons specs, the following commands must be available:
* gcc
* clang
* g++
* clang++
* gdc
* ldc
* flex
* bison

14
Gemfile
View File

@ -1,4 +1,14 @@
source 'https://rubygems.org' source 'https://rubygems.org'
# Specify your gem's dependencies in rscons.gemspec gem "rspec"
gemspec gem "rake"
gem "simplecov", "~> 0.15.0"
if RbConfig::CONFIG["host"]["msys"]
gem "json", "2.1.0"
else
gem "json"
gem "yard"
gem "rdoc"
gem "redcarpet"
gem "syntax"
end

52
Gemfile.lock Normal file
View File

@ -0,0 +1,52 @@
GEM
remote: https://rubygems.org/
specs:
diff-lcs (1.5.0)
docile (1.1.5)
json (2.6.1)
psych (4.0.3)
stringio
rake (13.0.6)
rdoc (6.4.0)
psych (>= 4.0.0)
redcarpet (3.5.1)
rspec (3.11.0)
rspec-core (~> 3.11.0)
rspec-expectations (~> 3.11.0)
rspec-mocks (~> 3.11.0)
rspec-core (3.11.0)
rspec-support (~> 3.11.0)
rspec-expectations (3.11.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.11.0)
rspec-mocks (3.11.0)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.11.0)
rspec-support (3.11.0)
simplecov (0.15.1)
docile (~> 1.1.0)
json (>= 1.8, < 3)
simplecov-html (~> 0.10.0)
simplecov-html (0.10.2)
stringio (3.0.1)
syntax (1.2.2)
webrick (1.7.0)
yard (0.9.27)
webrick (~> 1.7.0)
PLATFORMS
ruby
x86-mingw32
DEPENDENCIES
json
rake
rdoc
redcarpet
rspec
simplecov (~> 0.15.0)
syntax
yard
BUNDLED WITH
2.2.31

View File

@ -1,4 +1,4 @@
Copyright (c) 2013 Josh Holtrop Copyright (c) 2013-2022 Josh Holtrop
MIT License MIT License

288
README.md
View File

@ -1,268 +1,42 @@
# Rscons # Rscons
Software construction library inspired by SCons and implemented in Ruby ![rscons logo](img/rscons_logo_1000.png)
[![Gem Version](https://badge.fury.io/rb/rscons.png)](http://badge.fury.io/rb/rscons) Rscons (https://github.com/holtrop/rscons) is an open-source build system
for developers.
It supports the following features:
## Installation * multi-threaded job execution
* auto-configuration
* built-in builders for several common operations
* out-of-the-box support for C, C++, and D languages
* extensibility for other languages or custom builders
* compatible with Windows, Linux, OS X, and FreeBSD
* colorized output with build progress
* build hooks
* user-defined tasks with dependencies and custom parameters
* build variants
Add this line to your application's Gemfile: At its core, Rscons is mainly an engine to:
gem "rscons" * determine the proper order to perform build steps,
* determine whether each build target is up to date or in need of rebuild, and
* schedule those build steps across multiple threads as efficiently as possible.
And then execute: Along the way, Rscons provides a concise syntax for specifying common types of
build steps, but also provides an extensible framework for performing
custom build operations as well.
$ bundle Rscons takes inspiration from:
Or install it yourself as: * [SCons](https://scons.org/)
* [waf](https://waf.io/)
* [rake](https://github.com/ruby/rake)
* [CMake](https://cmake.org/)
* [Autoconf](https://www.gnu.org/software/autoconf/)
$ gem install rscons Rscons is written in Ruby.
The only requirement to run Rscons is that the system has a Ruby interpreter
installed.
## Usage See [https://holtrop.github.io/rscons/index.html](https://holtrop.github.io/rscons/index.html) for User Guide and Installation instructions.
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
* `: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
```
## Details
### Default Builders
Rscons ships with a number of default builders:
* Library, which collects object files into a static library archive file
* Object, which compiles source files to produce an object 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.
### 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, 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.
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
* lowercase symbols - Rscons options
* 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.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

View File

@ -5,22 +5,106 @@ 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 "rake/clean"
require "fileutils"
CLEAN.include %w[build_test_run .yardoc yard coverage test]
CLOBBER.include %w[dist gen large_project pkg]
task :build_dist do
sh "ruby rb/build_dist.rb"
end
RSpec::Core::RakeTask.new(:spec, :example_string) do |task, args|
ENV["specs"] = "1"
if args.example_string
ENV["partial_specs"] = "1"
task.rspec_opts = %W[-e "#{args.example_string}" -f documentation]
end
end
task :spec => :build_dist
task :spec do
ENV.delete("specs")
end
# 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"].execute(args)
ENV.delete("dist_specs")
FileUtils.rm_f(Dir.glob(".rscons-*"))
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
default do
Environment.new do |env|
env.Program("project", glob("src/*.c"))
end
end
EOF
end
FileUtils.cp("dist/rscons", "large_project")
end
unless RbConfig::CONFIG["host"]["msys"]
require "yard" require "yard"
RSpec::Core::RakeTask.new(:spec)
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
desc "Build user guide"
task :user_guide do
system("ruby", "-Ilib", "rb/gen_user_guide.rb")
end
end end
task :default => :spec task :default => :spec
task :clean do task :all => [
FileUtils.rm_rf(["build_test_run", "doc", "coverage"]) :build_dist,
end :spec,
:dspec,
task :clobber => :clean do :yard,
FileUtils.rm_rf(["pkg"]) :user_guide,
end ]

7
bin/rscons Executable file
View File

@ -0,0 +1,7 @@
#!/usr/bin/env ruby
require "rscons/cli"
if __FILE__ == $0
Rscons::Cli.new.run(ARGV)
end

View File

@ -0,0 +1,4 @@
env do |env|
env.CFile("lexer.c", "lexer.l")
env.CFile("parser.c", "parser.y")
end

View File

@ -0,0 +1,3 @@
env do |env|
env.CFile("file.c", "foo.bar")
end

View File

@ -0,0 +1,4 @@
%{
%}
%%

View File

@ -0,0 +1,9 @@
%{
%}
%token ONE
%%
one: ONE
;

View File

@ -0,0 +1,10 @@
debug = env(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

View File

@ -0,0 +1,14 @@
env1 = env(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

View File

@ -0,0 +1,4 @@
configure do
check_c_compiler "nope.nope"
end
default

View File

@ -0,0 +1,3 @@
autoconf false
env do |env|
end

View File

@ -0,0 +1,8 @@
configure do
check_c_compiler
check_c_header "stdio.h"
end
env do |env|
env.Program("simple.exe", "simple.c")
end

View File

@ -0,0 +1,4 @@
configure do
check_c_compiler
end
default

View File

@ -0,0 +1,3 @@
configure do
check_c_compiler "mycompiler"
end

View File

@ -0,0 +1,3 @@
configure do
check_c_compiler "gcc", "clang"
end

View File

@ -0,0 +1,6 @@
configure do
check_c_compiler "clang"
end
env do |env|
env.Program("simple.exe", "simple.c")
end

View File

@ -0,0 +1,12 @@
configure do
check_c_compiler "clang", use: "clang"
check_c_compiler
end
env "t1" do |env|
env.Program("test_gcc.exe", "simple.c")
end
env "t2", use: "clang" do |env|
env.Program("test_clang.exe", "simple.c")
end

View File

@ -0,0 +1,8 @@
configure do
check_c_header "string.h", check_cpppath: ["./usr1"]
check_c_header "frobulous.h", check_cpppath: ["./usr2"]
end
env do |env|
env.Object("test.o", "test.c")
end

View File

@ -0,0 +1,3 @@
configure do
check_c_header "not___found.h"
end

View File

@ -0,0 +1,3 @@
configure do
check_c_header "not___found.h", fail: false
end

View File

@ -0,0 +1,7 @@
configure do
check_c_header "not___found.h", set_define: "HAVE_NOT___FOUND_H"
end
env(echo: :command) do |env|
env.Object("simple.o", "simple.c")
end

View File

@ -0,0 +1,3 @@
configure do
check_c_header "string.h"
end

View File

@ -0,0 +1,7 @@
configure do
check_c_header "string.h", set_define: "HAVE_STRING_H"
end
env(echo: :command) do |env|
env.Object("simple.o", "simple.c")
end

View File

@ -0,0 +1,7 @@
configure do
check_cfg program: "my-config"
end
env(echo: :command) do |env|
env.Program("myconfigtest", "simple.c")
end

View File

@ -0,0 +1,7 @@
configure do
check_cfg package: "mypackage"
end
env(echo: :command) do |env|
env.Program("myconfigtest", "simple.c")
end

View File

@ -0,0 +1,13 @@
configure do
check_cfg package: "mypackage", use: "myp"
end
env(echo: :command) do |env|
env.Copy("myconfigtest1.c", "simple.c")
env.Program("myconfigtest1.exe", "myconfigtest1.c")
end
env(echo: :command, use: "myp") do |env|
env.Copy("myconfigtest2.c", "simple.c")
env.Program("myconfigtest2.exe", "myconfigtest2.c")
end

View File

@ -0,0 +1,3 @@
configure do
check_cxx_compiler
end

View File

@ -0,0 +1,3 @@
configure do
check_cxx_compiler "mycompiler"
end

View File

@ -0,0 +1,3 @@
configure do
check_cxx_compiler "g++", "clang++"
end

View File

@ -0,0 +1,12 @@
configure do
check_cxx_compiler "clang++", use: "clang"
check_cxx_compiler
end
env "t1" do |env|
env.Program("test_gcc.exe", "simple.cc")
end
env "t2", use: "clang" do |env|
env.Program("test_clang.exe", "simple.cc")
end

View File

@ -0,0 +1,8 @@
configure do
check_cxx_header "string.h", check_cpppath: ["./usr1"]
check_cxx_header "frobulous.h", check_cpppath: ["./usr2"]
end
env do |env|
env.Object("test.o", "test.cc")
end

View File

@ -0,0 +1,3 @@
configure do
check_cxx_header "not___found.h"
end

View File

@ -0,0 +1,3 @@
configure do
check_cxx_header "not___found.h", fail: false
end

View File

@ -0,0 +1,3 @@
configure do
check_cxx_header "string.h"
end

View File

@ -0,0 +1,3 @@
configure do
check_d_compiler
end

View File

@ -0,0 +1,3 @@
configure do
check_d_compiler "mycompiler"
end

View File

@ -0,0 +1,3 @@
configure do
check_d_compiler "gdc", "ldc2"
end

View File

@ -0,0 +1,12 @@
configure do
check_d_compiler "ldc2", use: "ldc2"
check_d_compiler
end
env "t1" do |env|
env.Program("test_gcc.exe", "simple.d")
end
env "t2", use: "ldc2" do |env|
env.Program("test_ldc2.exe", "simple.d")
end

View File

@ -0,0 +1,9 @@
configure do
check_d_compiler
check_d_import "std.stdio", check_d_import_path: ["./usr1"]
check_d_import "frobulous", check_d_import_path: ["./usr2"]
end
env do |env|
env.Object("test.o", "test.d")
end

View File

@ -0,0 +1,3 @@
configure do
check_d_import "not.found"
end

View File

@ -0,0 +1,3 @@
configure do
check_d_import "not.found", fail: false
end

View File

@ -0,0 +1,4 @@
configure do
check_d_compiler
check_d_import "std.stdio"
end

View File

@ -0,0 +1,3 @@
configure do
check_lib "mfoofoo"
end

View File

@ -0,0 +1,3 @@
env(echo: :command) do |env|
env.Library("usr2/libfrobulous.a", "two.c")
end

View File

@ -0,0 +1,8 @@
configure do
check_lib "m", check_libpath: ["./usr1"]
check_lib "frobulous", check_libpath: ["./usr2"]
end
env(echo: :command) do |env|
env.Program("simple.exe", "simple.c")
end

View File

@ -0,0 +1,3 @@
configure do
check_lib "mfoofoo", fail: false
end

View File

@ -0,0 +1,7 @@
configure do
check_lib "m"
end
env(echo: :command) do |env|
env.Program("simple.exe", "simple.c")
end

View File

@ -0,0 +1,13 @@
configure do
check_lib "m", use: :m
end
env(echo: :command) do |env|
env.Copy("test1.c", "simple.c")
env.Program("test2.exe", "test1.c")
end
env(echo: :command, use: %w[m]) do |env|
env.Copy("test2.c", "simple.c")
env.Program("test2.exe", "test2.c")
end

View File

@ -0,0 +1,8 @@
configure do
check_lib "m", use: false
end
env(echo: :command) do |env|
env.Copy("test1.c", "simple.c")
env.Program("test2.exe", "test1.c")
end

View File

@ -0,0 +1,3 @@
configure do
check_program "program-that-is-not-found"
end

View File

@ -0,0 +1,3 @@
configure do
check_program "program-that-is-not-found", fail: false
end

View File

@ -0,0 +1,3 @@
configure do
check_program "find"
end

View File

@ -0,0 +1,6 @@
configure do
check_c_compiler
end
env do |env|
puts "Prefix is #{Task["configure"]["prefix"]}"
end

View File

@ -0,0 +1,28 @@
configure do
custom_check("Checking 'grep' version") do |op|
stdout, stderr, status = op.log_and_test_command(%w[grep --version])
should_fail = true
if status != 0
fail_message = "error executing grep"
elsif stdout =~ /^grep \(GNU grep\) 1\./
fail_message = "too old!"
status = 1
elsif stdout =~ /^grep \(GNU grep\) 2\./
fail_message = "we'll work with it but you should upgrade"
status = 1
should_fail = false
op.store_merge("CPPDEFINES" => "GREP_WORKAROUND")
else
op.store_append("CPPDEFINES" => "GREP_FULL")
end
op.complete(status, success_message: "good!", fail_message: fail_message, fail: should_fail)
end
custom_check("Checking sed -E flag") do |op|
stdout, stderr, status = op.log_and_test_command(%w[sed -E -e s/ab+/rep/], stdin: "abbbc")
op.complete(stdout =~ /repc/ ? 0 : 1, success_message: "good", fail_message: "fail")
end
end
env do |env|
puts env["CPPDEFINES"]
end

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

View File

@ -0,0 +1,8 @@
configure do
check_c_header "math.h", set_define: "HAVE_MATH_H"
check_c_header "stdio.h", set_define: "HAVE_STDIO_H"
end
env(echo: :command) do |env|
env.Object("simple.o", "simple.c")
end

View File

@ -0,0 +1,3 @@
default do
puts "default"
end

View File

@ -0,0 +1,5 @@
configure do
check_c_compiler "foo123c", fail: false, on_fail: "Install the foo123 package"
check_d_compiler "foo123d", fail: false
check_cxx_compiler "foo123cxx", on_fail: lambda {puts "Install the foo123cxx package"}
end

View File

@ -0,0 +1 @@
check_c_compiler "gcc"

View File

@ -0,0 +1,6 @@
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("This is a simple C program\n");
}

View File

@ -0,0 +1,6 @@
#include <iostream>
int main(int argc, char *argv[])
{
std::cout << "Hi" << std::endl;
}

View File

@ -0,0 +1,7 @@
import std.stdio;
int main()
{
writeln("Hello");
return 0;
}

View File

@ -0,0 +1,4 @@
int two(void)
{
return 42;
}

View File

@ -0,0 +1,16 @@
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
env do |env|
env.add_builder(MySource)
env.MySource('inc.h', [])
env.Program('program.exe', Dir['*.c'])
end

View File

@ -0,0 +1,11 @@
env 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.Object("program.o", "program.c")
env.build_after("program.o", "${inc_c}")
env.Program("program.exe", ["program.o", "inc.c"])
end

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 678
EOF
end
true
end
end
env = env do |env|
env["hdr"] = "inc.h"
env["src"] = "program.c"
env.add_builder(MySource)
env.MySource('${hdr}')
env.Program('program.exe', "${src}")
end

View File

@ -0,0 +1,28 @@
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
e1 = env 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

View File

@ -0,0 +1,6 @@
env do |env|
env.add_builder(:MyBuilder) do |options|
"hi"
end
env.MyBuilder("foo")
end

View File

@ -0,0 +1,6 @@
env do |env|
env.add_builder(:MyBuilder) do |options|
wait_for(1)
end
env.MyBuilder("foo")
end

View File

@ -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

View File

@ -0,0 +1,19 @@
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
env do |env|
env.add_builder(CHGen)
env.CHGen("inc.c", ["program.c"])
env.Program("program.exe", %w[program.c inc.c])
end

View File

@ -0,0 +1,15 @@
env do |env|
env["build_root"] = env.build_root
env["inc_h"] = "inc.h"
env.Copy("copy_inc.h", "${inc_h}")
env.depends("program.o", "${inc_h}")
env.Object("program.o", "program.c")
env.Program("program.exe", ["program.o", "inc.c"])
inc_c = env.Command("inc.c",
[],
"CMD" => %w[ruby gen.rb ${_TARGET}],
"CMD_DESC" => "Generating")
inc_c.produces("inc.h")
end

View File

@ -0,0 +1,15 @@
env do |env|
env["build_root"] = env.build_root
env["inc_h"] = "inc.h"
env.Copy("copy_inc.h", "${inc_h}")
env.depends("program.o", "${inc_h}")
env.Object("program.o", "program.c")
env.Program("program.exe", ["program.o", "inc.c"])
env.Command("inc.c",
[],
"CMD" => %w[ruby gen.rb ${_TARGET}],
"CMD_DESC" => "Generating")
env.produces("inc.c", "inc.h")
end

View File

@ -0,0 +1,19 @@
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
env do |env|
env.add_builder(MyBuilder)
env.MyBuilder("foo")
end

View File

@ -0,0 +1,7 @@
configure do
check_d_compiler "gdc"
end
env(echo: :command) do |env|
env.Program("hello-d.exe", glob("*.d"))
end

View File

@ -0,0 +1,7 @@
configure do
check_d_compiler "ldc2"
end
env(echo: :command) do |env|
env.Program("hello-d.exe", glob("*.d"))
end

View File

@ -0,0 +1,5 @@
env(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

View File

@ -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, "!");
} }

4
build_tests/d/mod.d Normal file
View File

@ -0,0 +1,4 @@
class Klass
{
enum VAL = 42;
};

View File

@ -0,0 +1,3 @@
env do |env|
env.Program("test.exe", glob("*.c"), direct: true)
end

View File

@ -0,0 +1,5 @@
env 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

View File

@ -0,0 +1,7 @@
#include "two.h"
int main(int argc, char * argv[])
{
two();
return 0;
}

View File

@ -0,0 +1,7 @@
#include "three.h"
#include <stdio.h>
void three(void)
{
printf("three\n");
}

View File

@ -0,0 +1 @@
void three(void);

7
build_tests/direct/two.c Normal file
View File

@ -0,0 +1,7 @@
#include "two.h"
#include "three.h"
void two(void)
{
three();
}

1
build_tests/direct/two.h Normal file
View File

@ -0,0 +1 @@
void two(void);

View File

@ -0,0 +1,3 @@
env do |env|
env.Program('header.exe', Dir['*.c'])
end

View File

@ -0,0 +1,16 @@
env do |env|
require 'json'
require 'yaml'
env.add_builder(:JsonToYaml) do |params|
unless @cache.up_to_date?(@target, :JsonToYaml, @sources, @env)
print_run_message("JsonToYaml #{@target}", nil)
@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

View File

@ -0,0 +1 @@
{ "key": "value" }

View File

@ -0,0 +1,7 @@
env(echo: :command) do |env|
env["LIBS"] << "mylib"
env["LIBPATH"] << "."
env.Program("library.exe", "one.c")
env.depends("library.exe", "libmylib.a")
env.Library("libmylib.a", ["two.c", "three.c"], "CPPFLAGS" => ["-Dmake_lib"])
end

View File

@ -0,0 +1,5 @@
env 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

View File

@ -1,8 +1,11 @@
#include <stdio.h> #include <stdio.h>
#ifdef make_lib void two();
void three();
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
two();
printf("Library\n"); printf("Library\n");
three();
} }
#endif

View File

@ -0,0 +1,4 @@
env(echo: :command) do |env|
env["ARCMD"] = %w[ar rc ${_TARGET} ${_SOURCES}]
env.Library("lib.a", glob("*.c"))
end

View File

@ -0,0 +1,3 @@
void three(void)
{
}

Some files were not shown because too many files have changed in this diff Show More