aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2016-08-02Cosmetic changeBoris Kolpackov2-4/+4
2016-08-02Check for eof before streaming rdbufBoris Kolpackov1-3/+9
2016-08-02Filter gratuitous VC cl.exe and link.exe messagesBoris Kolpackov3-18/+119
2016-08-02Trace PATH environment variableBoris Kolpackov1-2/+6
2016-08-02Optimize out path::normalize() callsBoris Kolpackov3-10/+34
2016-08-01Work around MSYS2 install.exe permission issueBoris Kolpackov1-3/+36
2016-08-01Fix relinking on install for VCBoris Kolpackov1-4/+9
2016-07-30Construct paths to use canonical directory separatorsBoris Kolpackov6-29/+47
Hardcoding separators as in "build/root.build" is now a big no-no.
2016-07-30Actualize project root directoriesBoris Kolpackov5-15/+23
This solves the problem of changing path spelling on platforms with case- insensitive filesystems. For example, you may build a project in the current working directory without specifying any paths. This means the current working directory will be used as the project's root. On Windows this could be C:\x. Now you are building another project that imports the above project and you specify config.import.x variable pointing to the above build. But you are lazy to type capital C so you spell it as config.import.x=c:\x. What happens now is the value from config.import.x is used as the project root. And now it is a different spelling compared to your original build. This is not a problem when the build system itself is concerned -- it is smart enough to use case-insensitive comparison. However, we often use roots to derive other things, say, -I options that we pass to compilers. And these options are normally no longer treated as (case-insensitive) paths. If they are hashed and the result stored in depdb, then we end up with rebuilds that are triggered by changes from C:\ to c:\.
2016-07-30Fix missing src_root initializationBoris Kolpackov1-0/+2
2016-07-29Fix bug in prerequisite iteration leave group supportBoris Kolpackov2-1/+5
2016-07-29Suppress VC banners even at verbosity above 2Boris Kolpackov2-7/+3
There is really no use seeing this stuff.
2016-07-29Make /EHsc and /MD default for VC compilerBoris Kolpackov4-18/+242
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.