CHANGES
=======

* Added optional version key to subproject config. This is used in the c-library (qhull) test, where now the output from the qhull executable is checked
* Changed argument parsing to try and fix CI on OSX. Other minor improvements: - fixed buggy subproject searching, which did not work if multiple subprojects were defined - changed creation of build directories to happen only when they are actually needed
* Added ".cc" and ".m" file extensions to non-clang++ builds. The .m ending is for Objective C, which clang can also build. Also changed the -Og flag back to -O0 for debug builds, as clang actually does not implement this flag, in contrast to gcc
* Improved output messages by using project names. Also added some apostrophes around file names in output messages
* Improved log messages of target compile and link. Also fixed a bug in the test/c-library project file
* Fixed logger and test calls in test.py
* Extended Qhull project file and added test for building all targets. Also added test of forced rebuild
* Fixed a bug in subproject parsing and added C-library test using Qhull. - "url" was missing from the exclusion list for the project dict - added "c-library" test using Qhull, managed by using an external subproject
* Restructured boost example into subproject, fixed some warnings. Removed the argc and argv from main functions where they were not used. Also fixed the entry point in setup.cfg
* Fixed bugs in unit testing. - moved setup of logger to \_main function, as it should only be called once - updated exception handling in test.py
* Removed unneeded '-p' flags from test calls to clean up the output. Also turned a log exception into an error and re-ordered the compilable link flags to be easier to read
* Added '-Wextra' and '-Wpedantic' to default flags. Had to change test/mwe/hello.cpp accordingly (remove unused parameters). Also changed '-O0' to '-Og' for debug flags, which should improve the debugging experience. Also renamed Target.linkFlags to Target.link\_flags
* Removed unneeded find\_roots function
* Fixed that a subproject's name has to be specified. It has to be specified either in its config or the parent project
* Improved which targets to build and added dependency dotfile generation. dotfile generation can be deactivated with --no-graph. The graph colors the targets which should be built in red. By going through the descendants of the root targets which should be built, now all unneeded targets are excluded
* Started adding support for building C objects. The compiler is now chosen according to file ending (clang if ending is '.c', else clangpp). The compiler dialect flag is not added if compiling a C object. Linking shared objects is still done exclusively with clangpp
* Added -t/--targets and -f/--force-rebuild options. - -t target1,target2 limits the build to the specified targets (and of course their dependencies) - -f forces a rebuild (this only includes those targets which are checked) - if -a is passed, -t cannot be passed
* Changed executable as linking dependency to be an exception. Due to the implicit mechanisms of clang-build this can appear frequently and the user should not be able to still build everything. Also improved some other error messages of project
* Reworked specifying sources. - [targetname.sources] is no longer needed - renamed things to \`headers\_exclude\` and \`sources\_exclude\`, which take glob patterns - \`sources\` now accepts patterns, instead of taking folders through \`source\_directories\`
* Added ability to not build all targets. - added -a/--all option to build all targets, where by default targets, which are not depended on, are not built - so far, only root nodes of the dependency graph are then not built - fixed ability to name a project inside it's own toml, instead of having to specify it in the consuming project file
* Started working on exclude patterns. target.sources.include\_exclude and target.sources.source\_exclude arrays can be used to set folders, which are excluded from the include and source directories
* Fixed target directories and bad print statement in project.py
* Removed dev releases from non-master branches
* Fixed "dir" variable namings. They are now spelled out as "directory" or "directories"
* Fixed some renamings and renamed some more. Homogenising the naming convention throughout the code
* Fixed target directories and bad print statement in project.py. - Fixed target root directories being incorrect for all except Executable - Removed debug print statement, which was breaking the log messages and progress bar - Also fixed a comment in single\_source.py - Also improved namings, mainly in target and single\_source
* Added "version" property for external targets. When version is specified, clang-build will try to checkout that tag. Also fixed a minor bug in the error message for circular dependencies. Minor fixes to some paths in Readme
* Removed non-working pybind11 test
* Improvement of pybind11 test. Though the test requires some platform-dependent flags, in this form it can now run on Windows. However, the file ending of the resulting .dll has to be changed to .pyd. Also improved some comments in project.py and single\_source.py
* Removed sys.exit calls in clang\_build.py
* Fixed some log messages
* Improved download of target sources and setup of paths. - target sources are now downloaded before a target is created, so that sources can be searched for correctly - improved the search for headers and sources: the root directory is now searched non-recursively, and only when there is no specified or "src" directory - improved setup of source directories
* Removed error-prone output parsing and improved flag passing. Removing the output parsing removes some potential for bugs. The include and library flags are now passed as ['-I', str(dir)] etc, instead of one single long command. pybind11 test is not yet working, as some standard library functions are not linked correctly (strdup)
* Added files for a pzbind11 build test
* Moved download of external target sources and fixed include command. The sources are now downloaded before the target source directory is parsed. The include command was not working on directories containing spaces. Also now using absolute paths
* Fixed depfile parsing and parsing of compile output. The depfiles were potentially not parsed correctly in the case of spaces in the path. If the compile output cannot be parsed, it will now be printed
* Fixed bugs in clang\_build.py - depfile\_message was used instead of depfile\_report - unsuccessful\_link was checked on HeaderOnly targets
* Removed unnecessary comments. Also replaced two sys.exit with raise RuntimeError. Also removed messages, which are for the ProgressBar, from the Environment class
* Added missing subproject test. Also fixed a mistake in the subproject build config file
* Improved tests by wrapping build calls in try/except and removed openmp test. The OpenMP test will currently not work on OSX or Linux, so it is commented out for now
* Fixed bugs with testing
* Removed some trivially unnecessary code and comment
* Merged master into feature-subprojects
* Removed parsing of link errors
* Added better logging of linking errors. So far, linking error messages were not printed properly. Note, the current process of logging them is more complicated than necessary..
* Improved compile error messages, removed redundant error logging. The error messages are now only logged once. The messages are now formatted instead of being printed as a dict. Also, the log message now shows the complete file name with path and uses standard format for line and column of the error
* Added better depfile error support
* Removed "external" keyword from targets, enabled external projects. The "external" keyword was unnecessary. Projects can now have a "url", analogous to a target
* Fixed target working directories given by project and link commands. The project now correctly uses a target's directory, as specified in the toml, as the working directory when creating a target. Targets now correctly generate their link command, where executables and shared libraries need library search directories, but a static library of course does not
* Added error checking tests and some more error handling
* Added OpenMP test
* Added some test output to gitignore
* Removed eigen copy in test and replaced with dummy lib
* Added some subprojects documentation to docs folder
* Fixed project to be able to build correctly and added test. Dependencies are now also searched for inside subprojects of a current project. The project now returns the proper list of targets including those of all subprojects (recursively). Current limitation: some dependency searches will only go one layer deep
* Further work towards subprojects. Added "subproject" keyword to toml parsing
* Fixed test calls (new build function)
* Added Environment and Project classes. The main build function now initially creates a Project, which will later in turn create it's own subprojects. The initially created environment will serve as a container for the general variables, such as build type, calling directory, logger etc
* Updated CI scripts to use codecov. (#32)
* Moved depfile generation into compilation step. This fixes two problems: 1. the depfile is now only generated if necessary (i.e. if the object needs to be re-built anyways) 2. the before\_compile script is executed also before depfiles are generated
* Updated badges in Readme.rst
* Added test for external scripts to test.py
* Added functionality to execute additional scripts. - before\_compile - before\_link - after\_build Also added corresponding test
* Added codacy badge and fixed formatting issues in readme
* Improved documentation of defaults
* Removed some unused imports and added circular dependency detection
* Updated Readme.rst. Tried to modify it according to new project setup. Updated and simplified config file examples. Moved defaults "documentation" to docs/Defaults.md
* Added skip\_cleanup to travis.yml
* Fixed another typo in travis.yml
* Fixed syntax error in travis.yml
* Added coverage support
* Tried to fix the appveyor test
* Added python 3.6 requirement to setup
* Changed target types and removed non-working test. The target types now have spaces, i.e. "shared library" etc. One can now also specify "executable" and "header only", where the latter will warn the user if sources are found
* Removed Python2 from travis
* Added tqdm and colorama to requirements.txt
* Removed pathlib2 and enum34 from requirements. Replaced usage of pathlib2 with pathlib
* Fixed compile flag ordering and static library settings. Default compile flags are no longer forwarded to the parent targets. Added .h and .c files to source search. Added logging of compile commands
* Fixed progressbar and output collision issue
* add rst for pypi index
* Silenced git clone command
* Bugfix: added missing dialect flag in Target. Also made some paths absolute to prevent potential bugs
* Added progressbar. Disable does not work, yet
* Bugfix: updated multi-target test toml
* Bugfix: added missing \`import stat\` in test.py
* Improved handling of target directories, fixed tests. Renamed a few variables to hopefully make them clearer. Fixed rmtree call which is not able to remove downloaded git repositories
* Fixed test paths
* Fixed external project, HeaderOnly and SharedLibrary
* Fixed logging in target.py, added external scripts and external target. External target is not yet ready, as include-directories are not set appropriately, yet. Otherwise minor adjustments to variable names and log messages
* More cleanup of clang\_build
* Fixed binaries appearing in the root folder
* Removed more unused imports
* Removed unused imports
* Fixed pbr version to <4 to avoid pbr bug #1761134
* Another shot a fixing multiprocessing on Windows
* Hopefully fixed the windows multiprocessing issue
* Fixed dependency parsing being broken for the last line
* Fixed bug with multiprocessing on windows
* Added default values to argparse help
* Added another test
* Made dependency file parsing safer
* Fixed tests to run on Windows, too
* Removed unused imports
* Added missing networx dependency
* Cleaned up parsing of targets, added support for external scripts. Added \`[targetname.scripts]\` with sub-elements \`before\_compile\`, \`before\_link\`, \`after\_build\`. Added new \`Environment\` class to contain all the information such as build type, calling directory etc
* Improved generation of flags. The flags are now currently propagated up the dependency chain, as each target will include the flags of its dependencies. Also fixed the fact that a target was not including it's own (non-default) release and debug flags
* Fixed execution paths in CIs to fit new build folder structure
* Improved build directory paths and usage of build type
* Fixed usage of subprocess.call using lists instead of single strings
* Removed shell=True from subprocess calls
* Fixed search for supported dialects by padding with zeros. Also added verbose output stating supported dialects
* Created a basic pip setup configuration
* Fixed bug in generation of flags in Target. The default flags were not correctly prepended to the list of target flags when not using a build config file
* Updated Readme for new GitHub repo location
* Added License file
* Fixed bugs with processpool and default flags
* Added multiprocess build, added Buildable class to try and simplify. multiprocessing.Pool is now used to trace dependencies and compile in parallel. The Buildable class now contains all information related to a single source file. This is useful  for parallelisation. At some point either the target should contain a minimal amount of information, or the Buildable should contain a reference to the Target it belongs to (probably the latter), in order to avoid unnecessary data duplication
* Only build objects which need to be updated. Now, the object and source modification dates are checked to determine if it needs rebuilding. This is also done for everything listed in an automatically generated depfile
* Updated Readme
* Bugfix for "linking" of header-only libraries. Also improved platform-specific flags. Added -Xclang -flto-visibility-public-std to the platform\_extra\_flags\_... for Windows, which should suppress a warning and prevent possible problems. The platform-specific flags are now more granular (exe, shared, static)
* Improved compilation step by adding build folder structure and fixing shared library build. Also added .h and .c files to default file endings
* Added detection of clang++ and llvm-ar, warning if not found
* Added flags for position independent code on linux shared library
* CI: added OSX and more tests to Travis, added tests to AppVeyor. Also removed Linux build using Python3 from Travis, as it won't work properly
* Improved default options for different build types. Also added [target.flags] section to toml parsing, where compile, compileRelease etc. flags can be set. Also removed unneeded -DCOMPILING\_DLL from shared library  flags and fixed dependency link command
* Improved build process: now using dependency graph. The compile and link processes are each started at the leafs of the dependency graph, which is then traversed up to the roots. Target.compiled and Target.linked can later be used to check if a dependency has been built and the current target can continue when the target has multiple dependencies. This is especially useful for doing parallel builds. Added export declarations to test/lib-and-exe/mylib so that everything should now work also on Windows. Note: the dll needs to be placed next to the exe in order for the exe to run
* Started adding capabilities to build shared and static libraries and link them into other targets. Note: this feature is not yet functioning properly, as the link commands are not yet entirely correct
* Added some basic external project capabilities with git clone from url. Currently, only header-only libraries are dealt with properly in this contex. The include-paths are generated correctly and added to the build command of the
* Added first toml parsing of basic build script. Note that no securities are implemented, so it may crash if the file contents is different than in the added MWE
* Separated compilation and linking steps. Also improved verbose info output
* Fixed wrong paths in travis.yml
* Added detection of supported C++ dialects and default usage of newest dialect. Currently, a temporary file is created, containing a simple main function, which is compiled with a full range of -std=... flags to check which standards are available
* Fix Travis CI clang installation
* Added ability to set build type from command line
* Fixed clang call to clang++
* Added verbosity setting to Target. Calling with --verbose now prints the compile command per target
* Added CI test badges to Readme
*  Added AppVeyor CI build
* Added Travis CI build and fixed path creation for Python2
* Added test mini-project, added default include directories to target
