Compare commits

..

698 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
831b9bf2c7 v1.3.0 2014-02-25 12:18:02 -05:00
031395bb57 add v1.3.0 release notes 2014-02-25 12:17:49 -05:00
e3aeb7f4d7 Change Environment#execute() options Hash to contain :env and :options keys for Kernel#system() 2014-02-25 12:14:52 -05:00
6aa5037234 v1.2.0 2014-02-20 16:42:10 -05:00
0d8f661fd4 add :clone option to Environment#clone to control exactly which Environment attributes are cloned 2014-02-19 15:02:46 -05:00
e5ca8776a9 allow nil to be passed in to Environment#build_root= 2014-02-19 15:02:18 -05:00
2dde39a0ec standardize on "Rscons" capitalization 2014-02-18 16:14:44 -05:00
af0679708c v1.1.0 2014-02-17 16:37:59 -05:00
4b0d0c3957 README: add Release Notes section 2014-02-17 16:15:49 -05:00
202f10b86f README: add example for custom builder with multiple output files 2014-02-17 16:14:10 -05:00
1d47db3144 support passing multiple targets to Cache#up_to_date? and #register_build 2014-02-17 16:10:15 -05:00
f7b7a4fefa v1.0.0 2014-02-14 10:46:31 -05:00
00b038ef50 use require_relative instead of require 2014-02-14 10:37:41 -05:00
98f8f38715 remove String#set_suffix monkey patch 2014-02-14 10:36:15 -05:00
2ffb5d525a remove String#absolute_path? monkey patch 2014-02-14 10:32:57 -05:00
fa7d17675b remove String#has_suffix? monkey-patch; use String#end_with? 2014-02-14 10:20:32 -05:00
b43c473762 README: add link to API documentation at rubydoc.info 2014-02-14 09:57:46 -05:00
f278b211f7 README: add more information about custom builders 2014-02-14 09:50:39 -05:00
c897bcf06e README.md fixes/tweaks 2014-02-14 09:42:04 -05:00
7c89dddbd6 v0.3.1 2014-01-23 14:40:45 -05:00
c07d9f86a6 bugfix: loading a Cache without deps or user_deps stored causes an exception 2014-01-23 14:40:30 -05:00
ff26da8865 fix custom builder examples in README.md 2014-01-15 16:57:46 -05:00
5ff555cf6a add Environment#expand_varref() 2014-01-02 11:49:08 -05:00
e3aadc562f Rscons::Varset: remove unused type parameter to #[] 2014-01-02 11:05:15 -05:00
7ff2ec1f1a v0.3.0 2013-12-31 14:10:47 -05:00
5362f761e6 move default builder classes into Rscons::Builders namespace module 2013-12-31 13:31:17 -05:00
cdb3352b4e remove module monkey-patching; add Builder#name() 2013-12-31 13:10:00 -05:00
08bc390d40 Rscons::BuildError inherits from RuntimeError instead of Exception 2013-12-31 13:08:38 -05:00
f8af0630b0 pass env to Cache#up_to_date?() and #register_build() instead of user_deps 2013-12-31 12:46:30 -05:00
1868193b54 do not prepend build_root to source files that are already inside build_root 2013-12-31 10:15:19 -05:00
8976d7dea2 update README custom builder examples 2013-12-27 15:01:02 -05:00
295324eafd add Environment#depends() to specify user dependencies for a build target 2013-12-27 14:31:46 -05:00
7330e74ab8 modify Cache to store user-specified extra dependencies 2013-12-27 14:20:32 -05:00
a28cef9eb7 change "vars" parameters to be required 2013-12-27 13:53:40 -05:00
e667046da8 add Environment#clear_targets() 2013-12-27 13:35:16 -05:00
539a49fe90 do not allow construction variables as arguments to Environment#initialize() or Environment#clone() 2013-12-27 12:10:54 -05:00
7681c7584f add String#absolute_path? 2013-12-27 11:40:24 -05:00
8fcbd39057 v0.2.2 2013-11-13 23:52:33 -05:00
d0bbc78751 Program: do not continue executing builder if building a source fails 2013-11-13 23:52:15 -05:00
7249e57951 add info to error message when expanding unknown variable types 2013-11-13 23:50:46 -05:00
d01913641f v0.2.1 2013-11-11 11:36:10 -05:00
d5be569cd5 fix Environment#clone() to allow subclassing 2013-11-11 11:35:59 -05:00
4d7ed373e7 v0.2.0 2013-11-08 15:45:35 -05:00
72558391a2 clarify documentation about cloning Environments 2013-11-08 15:45:24 -05:00
d01767981c add Environment#build_root to be used if no build directories match 2013-11-08 14:52:39 -05:00
01c847fa32 v0.1.0 2013-11-06 13:38:59 -05:00
20f509ec27 rename *COM construction variables to *CMD 2013-11-06 13:35:41 -05:00
243eb9a4ab rename "tweakers" to "build hooks" 2013-11-06 13:32:56 -05:00
49be46199f define our own clean/clobber tasks 2013-11-06 13:29:24 -05:00
c9b670ae5c change default "echo" setting to :short 2013-11-06 13:22:30 -05:00
6bcb984e8e README: add gem version badge 2013-11-06 13:18:09 -05:00
b377940252 begin expanding README documentation 2013-11-06 12:45:50 -05:00
2e0c2688aa VarSet#expand_varref(): fix recursive expansion 2013-11-05 17:06:09 -05:00
66f53a23f6 change construction variable reference format to ${var}
this change is backwards-incompatible
2013-11-05 16:54:01 -05:00
545b893ef4 clean up a couple YARD warnings 2013-11-05 16:37:18 -05:00
30564af558 add build test for D 2013-11-05 16:29:15 -05:00
cc2c2733fc move build_tests_spec.rb back into spec, remove build_tests rake task 2013-11-05 16:22:09 -05:00
ddb5357b02 explicitly set LD construction variable in one build test 2013-11-05 16:19:02 -05:00
b805e5379f execute all build tests in the top-level rake context instead of spawning subprocesses 2013-11-05 16:11:08 -05:00
71344b4782 Program: do not check env.build_sources() return value (it will raise an exception if something was wrong) 2013-11-05 15:41:47 -05:00
b1cdd3d1db Object: simplify handling of known suffixes 2013-11-05 15:25:10 -05:00
ed11b05b97 add rscons_spec.rb 2013-11-05 14:37:26 -05:00
a418d31000 finish up Environment specs 2013-11-05 14:28:43 -05:00
797580e937 Environment: remove support for specifying :builders key in constructor 2013-11-05 14:18:02 -05:00
8b852bd2fd Environment: more specs 2013-11-05 14:14:03 -05:00
e863c9a564 Environment: rework process()
- improve efficiency
- give errors for the dependency that failed instead of the top-level target
2013-11-05 12:43:50 -05:00
7ce5a8f9d9 working on Environment specs 2013-11-05 12:26:42 -05:00
1280cfb465 change Environment#parse_makefile_deps() to a class method 2013-11-05 11:44:07 -05:00
0cd9dbd1bd add separate spec_helper.rb for build_tests directory 2013-11-05 11:36:30 -05:00
b38c56d446 move build_tests_spec.rb to build_tests directory; add build_tests task 2013-11-05 11:05:45 -05:00
d2b7c93f53 rename Rakefile -> Rakefile.rb 2013-11-05 10:52:56 -05:00
67922b887d remove Environment#targets() and Environment#target_sources() which didn't seem to be used 2013-11-05 10:42:01 -05:00
8100830c16 spec Cache 2013-11-05 10:25:36 -05:00
cb629bf7ec do not include spec files in simplecov report 2013-11-05 10:25:34 -05:00
65a5838605 Cache: set :version when writing to file 2013-11-05 09:22:46 -05:00
298 changed files with 13917 additions and 1026 deletions

29
.gitignore vendored
View File

@ -1,18 +1,11 @@
*.gem
*.rbc
.bundle
.config
.yardoc
Gemfile.lock
InstalledFiles
_yardoc
coverage
doc/
lib/bundler/man
pkg
rdoc
spec/reports
test/tmp
test/version_tmp
tmp
build_tests_run
/.bundle/
/.yardoc/
/_yardoc/
/build_test_run/
/coverage/
/dist/
/gen/
/large_project/
/pkg/
/test/
/yard/

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'
# Specify your gem's dependencies in rscons.gemspec
gemspec
gem "rspec"
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

View File

@ -1,42 +1,42 @@
# Rscons
Software construction library inspired by SCons and implemented in Ruby
![rscons logo](img/rscons_logo_1000.png)
## Installation
Rscons (https://github.com/holtrop/rscons) is an open-source build system
for developers.
It supports the following features:
Add this line to your application's Gemfile:
* 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
gem 'rscons'
At its core, Rscons is mainly an engine to:
And then execute:
* 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.
$ bundle
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.
Or install it yourself as:
Rscons takes inspiration from:
$ gem install rscons
* [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/)
## Usage
Rscons is written in Ruby.
The only requirement to run Rscons is that the system has a Ruby interpreter
installed.
RScons::Environment.new do |env|
env.Program('program', Dir['*.c'])
end
main_env = RScons::Environment.new do |env|
env.build_dir('src', 'build/main')
env.Program('program', Dir['src/**/*.cc'])
end
debug_env = main_env.clone do |env|
env.build_dir('src', 'build/debug')
env['CFLAGS'] = ['-g', '-O0']
env.Program('program-debug', Dir['src/**/*.cc'])
end
## 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
See [https://holtrop.github.io/rscons/index.html](https://holtrop.github.io/rscons/index.html) for User Guide and Installation instructions.

View File

@ -1,21 +0,0 @@
require "bundler"
begin
Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e
raise LoadError.new("Unable to setup Bundler; you might need to `bundle install`: #{e.message}")
end
require "bundler/gem_tasks"
require "rspec/core/rake_task"
require "rake/clean"
require "yard"
CLEAN.include 'build_tests_run'
RSpec::Core::RakeTask.new(:spec)
YARD::Rake::YardocTask.new do |yard|
yard.files = ['lib/**/*.rb']
end
task :default => :spec

110
Rakefile.rb Normal file
View File

@ -0,0 +1,110 @@
require "bundler"
begin
Bundler.setup(:default, :development)
rescue Bundler::BundlerError => e
raise LoadError.new("Unable to setup Bundler; you might need to `bundle install`: #{e.message}")
end
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"
YARD::Rake::YardocTask.new do |yard|
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
task :default => :spec
task :all => [
:build_dist,
:spec,
:dspec,
:yard,
:user_guide,
]

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

@ -1,5 +0,0 @@
Rscons::Environment.new do |env|
env.append('CPPPATH' => Dir['src/**/*/'])
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
env.Program('build_dir', Dir['src/**/*.c'])
end

View File

@ -1,12 +0,0 @@
Rscons::Environment.new do |env|
env.append('CPPPATH' => Dir['src/**/*/'])
env.build_dir(%r{^src/([^/]+)/}, 'build_\\1/')
env.add_tweaker do |build_op|
if build_op[:target] =~ %r{build_one/.*\.o}
build_op[:vars]["CFLAGS"] << "-O1"
elsif build_op[:target] =~ %r{build_two/.*\.o}
build_op[:vars]["CFLAGS"] << "-O2"
end
end
env.Program('tweaker', Dir['src/**/*.c'])
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

@ -1,11 +0,0 @@
debug = Rscons::Environment.new do |env|
env.build_dir('src', 'debug')
env['CFLAGS'] = '-O2'
env['CPPFLAGS'] = '-DSTRING="Debug Version"'
env.Program('program-debug', Dir['src/*.c'])
end
release = debug.clone('CPPFLAGS' => '-DSTRING="Release Version"') do |env|
env.build_dir('src', 'release')
env.Program('program-release', 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

@ -1,15 +0,0 @@
class MySource < Rscons::Builder
def run(target, sources, cache, env, vars = {})
File.open(target, 'w') do |fh|
fh.puts <<EOF
#define THE_VALUE 5678
EOF
end
target
end
end
Rscons::Environment.new(echo: :short, builders: [MySource.new]) do |env|
env.MySource('inc.h', [])
env.Program('program', 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

7
build_tests/d/main.d Normal file
View File

@ -0,0 +1,7 @@
import std.stdio;
import mod;
void main()
{
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

@ -1,3 +0,0 @@
Rscons::Environment.new(echo: :short) do |env|
env.Program('header', 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

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