aboutsummaryrefslogtreecommitdiff
path: root/libbuild2
AgeCommit message (Collapse)AuthorFilesLines
2024-08-28Don't assume preprocessed TU exists if reprocessing (GH issue #409)Boris Kolpackov1-2/+3
2024-08-27Handle invalid scope paths specified in buildfile (GH issue #396)Boris Kolpackov1-14/+28
2024-08-21Don't work own queue in wait_guard dtorBoris Kolpackov2-4/+12
There is suspicion this causes a deadlock for reasons so far unclear. See also GH issue #319.
2024-08-06Add support for specifying compile options on exe/lib{} targetsBoris Kolpackov2-38/+354
It is now possible to specify compile option (*.poptions and *.coptions) on the exe/lib{} targets (we call them "binary-specific compile options"). Such options are propagated to obj/bmi{} targets that are synthesized for source prerequisites of the binary. Note that this propagation does not apply to obj/bmi{} prerequisites. For example: exe{foo}: cxx{foo} obj{common} { cxx.poptions += -DFOO } exe{bar}: cxx{bar} obj{common} { cxx.poptions += -DBAR } obj{common}: cxx{common} { cxx.poptions += -DCOMMON } In this example, cxx{foo} will be compiled with -DFOO, cxx{bar} -- with -DBAR, and cxx{common} -- with -DCOMMON. Note that if a source prerequisite is shared between several binaries, then the values of the propagated compile options (or their absence) must match. For instance, the following variant of the above example would result in an error since cxx{common} would have contradictory cxx.poptions values: exe{foo}: cxx{foo common} { cxx.poptions += -DFOO } exe{bar}: cxx{bar common} { cxx.poptions += -DBAR } As another example, here is how we can rewrite a typical library buildfile (which requires different macros to distinguish between shared/static builds) using this mechanism, in this case, to build two libraries in the same scope: ./: lib{foo}: {hxx cxx}{*-foo} ./: lib{bar}: {hxx cxx}{*-bar} cxx.poptions =+ "-I$out_root" "-I$src_root" lib{foo}: { cxx.poptions += -DFOO cxx.export.poptions = "-I$out_root" "-I$src_root" } liba{foo}: { cxx.poptions += -DLIBFOO_STATIC_BUILD cxx.export.poptions += -DLIBFOO_STATIC } libs{foo}: { cxx.poptions += -DLIBFOO_SHARED_BUILD cxx.export.poptions += -DLIBFOO_SHARED } lib{bar}: { cxx.poptions += -DBAR cxx.export.poptions = "-I$out_root" "-I$src_root" } liba{bar}: { cxx.poptions += -DLIBBAR_STATIC_BUILD cxx.export.poptions += -DLIBBAR_STATIC } libs{bar}: { cxx.poptions += -DLIBBAR_SHARED_BUILD cxx.export.poptions += -DLIBBAR_SHARED } The exact semantics of this mechanism is as-if the binary-specific compile options were set on the synthesized obj/bmi{} targets at the end of the buildfile. One nuance to keep in mind is that target type/pattern-specific assign/append/prepend specified for obj/bmi{} will not be in effect for options specified on lib/exe{}. For example: cxx.poptions += -DSCOPE obj{*}: cxx.poptions += -DTARGET exe{foo}: cxx.poptions += -DFOO Here the effective cxx.poptions for exe{foo} prerequisites will be -DSCOPE -DFOO since exe{foo} does not match the obj{*} pattern. As result, if using this mechanism, remember to include the binary target types in obj{} patterns. For example: {obj exe}{*}: cxx.poptions += -DTARGET
2024-08-06Rename certain target_set::insert() versions to insert_implied() for clarityBoris Kolpackov7-57/+64
Also clarify the target_decl documentation.
2024-07-31Add cross-reference noteBoris Kolpackov1-0/+3
2024-07-31Add lookup limit to {scope,target}::lookup_original()Boris Kolpackov9-80/+100
2024-07-29Fix bug in $string.{contains,ends_with,replace}() (GH issue #405)Boris Kolpackov1-2/+2
These functions use the common rfind() helper which contains the bug.
2024-07-29Add scope::lookup_original_info() that provides additional info about lookupBoris Kolpackov4-28/+56
2024-07-28Factor out and generalize/extend to_stream_quoted(string)Boris Kolpackov3-44/+80
2024-06-24Fail instead of aborting on src and out directories naming scheme mismatch ↵Karen Arutyunov1-2/+3
(GH issue #394)
2024-06-20Fix crashing of $install.resolve() on absolute paths (GH issue #393)Karen Arutyunov1-3/+11
2024-06-19Change version to 0.18.0-a.0.zBoris Kolpackov1-1/+1
2024-06-17Release version 0.17.0v0.17.0Boris Kolpackov1-1/+1
2024-06-17Fix bug in integer, boolean value type comparisonBoris Kolpackov1-3/+3
2024-06-14Instrument header cache inconsistency assert with additional info (GH issue ↵Boris Kolpackov1-0/+14
#390)
2024-06-07Use combined -L option form for extra system search pathsBoris Kolpackov3-16/+47
The split one was just too much of an eye-sore in the logs.
2024-06-07Add comment on not adding rpath for /usr/local/libBoris Kolpackov1-0/+18
2024-06-06Use -pthread instead of -lpthreadBoris Kolpackov1-2/+2
2024-06-05Improve -rpath duplicate suppression logic even moreBoris Kolpackov1-2/+11
2024-06-05Improve -rpath duplicate suppression logic some moreBoris Kolpackov1-3/+15
2024-06-05Include top-level libraries in -rpath duplicate suppression logicBoris Kolpackov1-0/+7
2024-06-04Update Apple Clang to vanilla Clang version mapping informationBoris Kolpackov1-21/+23
2024-05-22Add $filesystem.file_exists(), $filesystem.directory_exists()Boris Kolpackov1-2/+49
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 Kolpackov1-134/+284
2024-05-20Add $path.absolute(), $path.simple(), $path.sub_path(), $path.super_path()Boris Kolpackov1-0/+74
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 Kolpackov2-42/+207
Also fix bug in $string.replace().
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 Kolpackov1-1/+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 Kolpackov5-11/+29
The semantics is equivalent to the --success option we already have in the timeout builtin.
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 Kolpackov2-1/+133
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