aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2024-05-21Use new thread-specific current working directory in testscript implementationBoris Kolpackov1-0/+11
In particular, this makes sure functions like $path.complete() work correctly from testscripts.
2024-05-21Add $path.complete(), $path.try_normalize(), $path.try_actualize()Boris Kolpackov2-165/+329
2024-05-20Documentation tweakBoris Kolpackov1-4/+5
2024-05-20Add $path.absolute(), $path.simple(), $path.sub_path(), $path.super_path()Boris Kolpackov2-0/+104
2024-05-20Add convert_to_base<T>(value) variants that allow derive-to-base conversionBoris Kolpackov2-4/+46
2024-05-20Add $string.contains(), $string.starts_with(), $string.ends_with()Boris Kolpackov3-47/+274
Also fix bug in $string.replace().
2024-05-20Update C++ modules support documentation in manualBoris Kolpackov1-709/+308
2024-05-15Add note on potentially mismatching cxx.std in module sidebuildsBoris Kolpackov1-0/+9
2024-05-14Map latest/experimental cxx.std values to C++26 from GCC 14 and Clang 18Boris Kolpackov1-15/+24
2024-05-14Add /Zc:preprocessor in experimental cxx.std mode from MSVC 17.9 (19.39)Boris Kolpackov2-1/+7
For background, see: https://developercommunity.visualstudio.com/t/Please-clarify-ifwhen-Zc:preprocessor/10537317
2024-05-14Map C23/C2X to /std:clatest starting from MSVC 17.9 (19.39)Boris Kolpackov2-12/+20
In particular, this option enables C23 typeof support.
2024-05-13Issue better diagnostics if standard library modules not supportedBoris Kolpackov1-142/+150
2024-05-13Update std.cppm to Clang 18, add std.compat.cppmBoris Kolpackov4-80/+1087
Note that Clang 17 is not longer supported with regards to standard library modules.
2024-05-09Handle exception thrown by fdterm_color()Boris Kolpackov1-1/+8
2024-05-09Try to improve deadlock detection accuracy (GH issue 319)Boris Kolpackov1-1/+11
2024-05-09Fixes and tweaks to diagnostics color support on Windows (GH issue #312)Boris Kolpackov2-20/+25
Specifically: - Pass -fansi-escape-codes for Clang on Windows. - Enable diagnostics color by default if already enabled on the terminal. Only try to enable it ourselves with explicit --diag-color.
2024-05-06Switch from libpkg-config to version from libbutlBoris Kolpackov3-6/+1
2024-04-25Skip hidden filesystem entries when looking for subprojectsBoris Kolpackov2-3/+10
2024-04-23Make sure ad hoc member is matched even if group match failedBoris Kolpackov1-0/+13
2024-04-22Fix uninitialized variable bugBoris Kolpackov1-1/+1
2024-04-12Add -s|--timeout-success option to env script builtinBoris Kolpackov6-11/+34
The semantics is equivalent to the --success option we already have in the timeout builtin.
2024-04-12Diagnose invalid directories specified on command lineBoris Kolpackov1-13/+34
GitHub issue #376.
2024-04-11Diagnose empty paths in config.config.{load,save}Boris Kolpackov2-3/+9
GitHub issue #372.
2024-04-02Detect and diagnose attempt to create new target in src directoryBoris Kolpackov5-8/+47
GitHub issue #277.
2024-04-01Add missing std::move() callBoris Kolpackov1-1/+1
2024-04-01Add $string.replace() functionBoris Kolpackov3-1/+178
2024-04-01Add ~host-no-warnings and ~build2-no-warnings special configurationsBoris Kolpackov4-9/+106
These are parallel to ~host and ~build2 but with suppressed C/C++ compiler warnings. Note also that the C++ ad hoc recipes are now by default built in ~build2-no-warnings instead of ~build2 unless the project is configured for development with config.<project>.develop=true.
2024-03-27Filter out config.bin.lib/config.bin.*.lib from ~hostBoris Kolpackov1-10/+22
2024-03-21Improve import diagnosticsBoris Kolpackov1-0/+12
2024-03-19Use new next_word() to observe blank lines for accurate line countBoris Kolpackov1-2/+4
2024-03-01Use original variable name in config reportBoris Kolpackov5-42/+130
2024-02-26Add ability to serialize compilation/linking in cc rulesBoris Kolpackov6-8/+45
Specifically, both the C/C++ compiler and link rules now recognize the cc.serialize boolean variable which instructs them to compiler/link serially with regards to any other recipe. This is primarily useful when compiling large translation units or linking large binaries that require so much memory that doing that in parallel with other compilation/linking jobs is likely to summon the OOM killer. For example: obj{memory-hog}: cc.serialize = true
2024-02-26Add ability to request serialization from schedulerBoris Kolpackov8-31/+128
In particular, this can be used to make sure no other recipe is being executed in parallel with the caller.
2024-02-22Diagnose instead of asserting lib{} group with no membersBoris Kolpackov1-1/+3
Fixes GH issue #361.
2024-02-22Detect dependency cycles in *.export.libsBoris Kolpackov1-0/+5
Fixes GH issue #362.
2024-02-22Diagnose instead of asserting ad hoc group member not already existingBoris Kolpackov1-21/+18
Fixes GH issue #365.
2024-02-22Detect non-cc::link_rule libraries not marked with cc.type=ccBoris Kolpackov2-6/+36
Fixes GH issue #368.
2024-02-22Deal with libs{} being member of group in windows_rpath_timestamp()Boris Kolpackov3-8/+20
Fixes GH issue #366.
2024-02-21Fix issue with json null representation in containersBoris Kolpackov3-5/+20
2024-02-21Improve diagnosticsBoris Kolpackov2-1/+15
2024-02-21Update list of buildfile value types in manualBoris Kolpackov1-0/+9
2024-02-20Add json_map and json_set buildfile value typesBoris Kolpackov10-98/+255
These expose the std::map<json_value,json_value> and std::set<json_value> types to buildfiles. New functions: $size(<json-set>) $size(<json-map>) $keys(<json-map>) Note that the $keys() function returns the list of map key as a json array. For example: m = [json_map] 2@([json] a@1 b@2) 1@([json] 1 2) s = [json_set] ([json] x@1 y@2) ([json] a@1 b@2) print ($m[2][b]) # 2 print ($s[([json] y@2 x@1)]) # true
2024-02-20Make json value type prepend non-overriding for consistency with mapBoris Kolpackov4-15/+27
2024-02-20Add custom subscript, iterate functions for vector and set value typesBoris Kolpackov6-9/+156
2024-02-20Add string_set buildfile value typeBoris Kolpackov9-3/+348
This exposes the std::set<std::string> type to buildfiles. New functions: $size(<string-set>) Subscript returns true if the value is present and false otherwise (so it is mapped to std::set::contains()). For example: set = [string_set] a b c if ($set[b]) ... Note that append (+=) and prepend (=+) have the same semantics (std::set::insert()). For example: set = [string_set] a b set += c b # a b c set =+ d b # a b c d Example of iteration: set = [string_set] a b c for k: $set ...
2024-02-19Add string_map buildfile value typeBoris Kolpackov8-48/+238
This exposes the std::map<std::string,std::string> type to buildfiles. New functions: $size(<string-map>) $keys(<string-map>) Subscript can be used to lookup a value by key. The result is [null] if there is no value associated with the specified key. For example: map = [string_map] a@1 b@2 c@3 b = ($map[b]) # 2 if ($map[z] == [null]) ... Note that append (+=) is overriding (like std::map::insert_or_assign()) while prepend (=+) is not (like std::map::insert()). In a sense, whatever appears last (from left to right) is kept, which is consistent with what we expect to happen when specifying the same key repeatedly in a literal representation. For example: map = [string_map] a@0 b@2 a@1 # a@1 b@2 map += b@0 c@3 # a@1 b@0 c@3 map =+ b@1 d@4 # a@1 b@0 c@3 d@4 Example of iteration: map = [string_map] a@1 b@2 c@3 for p: $map { k = $first($p) v = $second($p) } While the subscript is mapped to key lookup only, index-based access can be implemented (with a bit of overhead) using the $keys() function: map = [string_map] a@1 b@2 c@3 keys = $keys($m) for i: $integer_sequence(0, $size($keys)) { k = ($keys[$i]) v = ($map[$k]) } Also, this commit changes the naming of other template-based value types (not exposed as buildfile value types) to use C++ template id-like names (e.g., map<string,optional<bool>>).
2024-02-15Add fsdir{} duplicate suppression in more placesBoris Kolpackov4-4/+24
2024-02-14Add comment on json_array assignment issueBoris Kolpackov1-0/+4
2024-02-14Add search_prerequisite*() variants of match_prerequisite*() versionsBoris Kolpackov3-15/+117
2024-02-14Avoid duplicate fsdir{} in inject_fsdir(), match_prerequisite*() call sequencesBoris Kolpackov3-6/+37