aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2016-07-29Fix duplicate config.build variable issueBoris Kolpackov3-11/+29
2016-07-28Improve target out directory printingBoris Kolpackov1-1/+13
2016-07-28Fix dump not to type target type/pattern-specific prepend/appendBoris Kolpackov2-14/+30
2016-07-28Adjust to new path implementation, use to support reversibilityBoris Kolpackov21-159/+167
2016-07-25Only do "effective escaping" (['"\$(]) on the command lineBoris Kolpackov6-24/+57
This will make things more convenient on Windows provided we use "sane" paths (no spaces, no (), etc).
2016-07-25Fix surprising config override behavior now that they are amalgamation-wideBoris Kolpackov1-2/+24
2016-07-25Fix module separating blank line logicBoris Kolpackov1-4/+10
2016-07-23Adapt to fdstream extensionKaren Arutyunov13-299/+311
2016-07-22Incorporate target to link rule's depdbBoris Kolpackov3-2/+16
Since there is no guarantee that the target is part of the linker's checksum.
2016-07-22Factor target CPU to VC /MACHINE option translationBoris Kolpackov2-19/+30
2016-07-22Link shell32.lib and user32.lib to default for VC buildsBoris Kolpackov1-0/+19
2016-07-22Change default var override from 'projects and subprojects' to amalgamationBoris Kolpackov4-3/+47
The 'projects and subprojects' semantics resulted in some counter-intuitive behavior. For example, in a project with tests/ as a subproject if one builds one of the tests directly with a non-global override (say C++ compiler), then the main project would be built without the overrides. I this light, overriding in the whole amalgamation seems like the right thing to do. The old behavior can still be obtained with scope qualification, for example: b ./:foo=bar
2016-07-21Save config vars in order specified rather than alphabeticallyBoris Kolpackov5-173/+205
This way we can group them semantically which results in easier to understand config.build output.
2016-07-21Fix bug in save_commented logicBoris Kolpackov1-2/+2
2016-07-21Add support for single line if-blocksBoris Kolpackov4-27/+86
So now we can do: if true print true else print false Instead having to do: if true { print true } else { print false }
2016-07-21Add backwards-compatibility hack for ranlibBoris Kolpackov1-0/+3
2016-07-21Save default/hinted ar/ld/rc values as commented outBoris Kolpackov7-34/+75
This way, when we, for example, change the C++ compiler (which hinted these values), they will be automatically adjusted as well.
2016-07-20Switch to dynamic empty() implementation in variable valueBoris Kolpackov8-425/+358
The current model fell apart when we modified values directly.
2016-07-20Implement support for <, >, <=, >= in eval contextBoris Kolpackov11-27/+199
Now can write: if ($build.version > 30000)
2016-07-20Fix cli test verbosityBoris Kolpackov1-3/+1
2016-07-20Sanitize library name-derived macro for illegal characters ('-', etc)Boris Kolpackov1-6/+11
2016-07-20Print project name and out_root in config reportsBoris Kolpackov4-67/+91
2016-07-20Move ar/ranlib to bin.ar sub-module, load in cxx unless shared-only buildBoris Kolpackov4-90/+154
This way we don't load/configure what we don't need.
2016-07-19Add import library target libi{}, make libs{} the DLLBoris Kolpackov11-173/+291
In the end, having libs{} be the DLL with import library being its member is more natural than making libs{} the import library and having dll{} as its member.
2016-07-19Add support for building DLLs with VCBoris Kolpackov6-142/+421
2016-07-18Add standard static/shared macros for imported installed librariesBoris Kolpackov2-3/+50
2016-07-18Pick liba{}/libs{} before looking up cxx.export.*Boris Kolpackov4-39/+73
This way we can specify static library-specific defines which are necessary to handle DLL export.
2016-07-17Redesign obj to exe/lib mappingBoris Kolpackov15-284/+463
Specifically: * objso{} and libso{} target types have been renamed to objs{} and libs{} * obje{} has been added (so now we have obje{}, obja{}, and objs{}) * obje{} is now used for building exe{} * object file extensions have been changed to use "hierarchical extensions" that reflect the extension of the corresponding exe/lib target (instead of the -so suffix we used), specifically: obje{}: foo.o, (UNIX), foo.exe.o (MinGW), foo.exe.obj (Windows) obja{}: foo.a.o (UNIX, MinGW), foo.lib.obj (Windows) objs{}: foo.so.o (UNIX), foo.dylib.o (Darwin), foo.dll.o (MinGW), foo.dll.obj (Windows)
2016-07-16Add support for prepend/append in target type/pattern-specific varsBoris Kolpackov13-89/+371
Semantically, these are similar to variable overrides and are essentially treated as "templates" that are applied on lookup to the "stem" value that is specific to the target type/name. For example: x = [string] a file{f*}: x =+ b sub/: { file{*}: x += c print $(file{foo}:x) # abc print $(file{bar}:x) # ac }
2016-07-15Always generate separate object files for liba{} and libso{}Boris Kolpackov1-9/+5
While on some platforms they sometimes can be the same, they could also be built differently (e.g., based on command line macros, etc). I guess we could compare the set of options and if they are identical, then use the same file. But that will complicate things quite a bit, so maybe in version 2.
2016-07-15Make .pdb ad hoc group member, installBoris Kolpackov4-37/+88
2016-07-15Name and cleanup extra VC files (.pdb, .ilk, .idb)Boris Kolpackov6-52/+162
2016-07-13Use link.exe instead of cl.exe to link executablesBoris Kolpackov2-69/+109
2016-07-12Get src_root value if we have already bootstrapped this projectBoris Kolpackov1-0/+2
This fixes a core dump in out-of-source 'clean update' run.
2016-07-12Use ./ instead of just . to denote current directory in buildfilesBoris Kolpackov9-10/+10
2016-07-11Escape Windows path backslashes in synthesized .rc fileBoris Kolpackov1-2/+18
2016-07-11Reimplement Windows rpath emulation using embedded manifestsBoris Kolpackov5-391/+584
As a bonus, everyone now gets a sane default manifest.
2016-07-11Add bin.rc module (resource compiler)Boris Kolpackov5-24/+179
2016-07-11Add bin.ld sub-moduleBoris Kolpackov5-20/+236
2016-07-09Add config.bin.pattern, pass it as hint from cxx moduleBoris Kolpackov2-29/+169
With this change we normally no longer need to specify config.bin.ar explicitly when cross-compiling or set it to lib.exe for VC.
2016-07-08Add dependency on fsdir{} in alias rulesBoris Kolpackov6-27/+37
This makes sure that a directory with only dir{} target gets cleaned up.
2016-07-08Move filesystem-related functions from context to new filesystem filesBoris Kolpackov20-275/+315
2016-07-08Implement limited rpath emulation for WindowsBoris Kolpackov9-145/+589
2016-07-01Fix cli test to read cli output till the endKaren Arutyunov1-0/+6
2016-07-01Port to MSVCKaren Arutyunov11-48/+44
2016-06-28Work around static initialization order issueBoris Kolpackov3-10/+39
value_traits<T>::value_type initialization is not constexpr in VC because of pointers to function template instantiations (which apparently are not constexpr).
2016-06-27Add config.bin.target var/hint, use to decide libso{} install modeBoris Kolpackov14-175/+352
Normally the user doesn't need to specify config.bin.target explicitly since the cxx module will hint it. We now also have the whole set of target's components: bin.target.{cpu,vendor,system,version,class}
2016-06-27Get rid of extern "C" in module boot()/init()Boris Kolpackov16-149/+153
We will have a separate (extern "C") register() function that will return the pointers to these two. This way we can still throw exceptions from boot() and init().
2016-06-26Add support for passing configuration hints via module init()Boris Kolpackov17-28/+97
2016-06-26Minor module interface cleanupsBoris Kolpackov8-27/+33