This file contains a description of the major changes to the easybuild-framework EasyBuild package.
For more detailed information, please see the git log.

v1.5.0 (May 31st 2013)
---------------------

feature + bugfix release
- various other enhancements, including:
    - define SHLIB_EXT constant for shared library extension (.so, .dylib), deprecate shared_lib_ext global var (#630)
    - enhance support for sanity checking extensions (#632, #649)
    - add support for modextrapaths easyconfig parameter (#634, #637)
    - allow source_urls to be templated for extensions (#639, #646, #647)
    - set OMPI_* environment variables for OpenMPI (#640)
    - make BLACS optional as toolchain element, depending on ScaLAPACK version (#638)
- various bug fixes, including:
    - fixed --list-toolchains, avoid listing toolchains multiple times (#628)
    - fix templating dictionary after parsing easyconfig file (#633)
    - fix support for ACML as compiler toolchain element (#632)
    - make unit tests clean up after themselves more thoroughly (#641, #642, #643)

v1.4.0 (May 2nd 2013)
---------------------

feature + bugfix release
- the unit tests for easybuild-framework were moved to test/framework,
  to make things consistent with easybuild-easyblocks and easybuild-easyconfigs (#611, #613, #624)
    - running the framework unit tests should now be using 'python -n test.framework.suite'
- various other enhancements, including:
    - extend unit test suite (#593, #599, #603, #618, #620, #622, #624, ...)
    - extended list of constants and templates that can be used in easyconfig files (#566)
    - add support for additional compiler toolchains
        - CUDA-enabled toolchain: goolfc (#603, #624)
        - Clang(+GCC)-based toolchains: cgoolf, cgmpolf, cgmvolf (#593, #598, #600)
        - gmvolf (GCC+MVAPICH2+...) (#585)
    - properly decode easyblock to module name using decode_* functions (#618)
- various bug fixes, including:
    - fixed default value for --stop (#601)
    - remove useless sleep() calls in run_cmd, run_cmd_qa (#599)
    - determine module path based on class name, not software name (#606)
    - remove unwanted characters in build dirs (#591, #607)
    - ignore some error codes spit out by modulecmd that are actually warnings (#609)
    - fix agithub.py w.r.t. changes in GitHub API (user-agent string is now obligatory for non-authenticated connections) (#617)
    - fix typo breaking the adjust_cmd decorator on SuSE (#615)
    - fix prepending paths with absolute paths in module file (#621)
    - clean up open file handles properly (#620, #624)
    - fix --search help and implementation (#622)

v1.3.0 (April 1st 2013)
-----------------------

feature + bugfix release
- added script to bootstrap EasyBuild with EasyBuild, see https://github.com/hpcugent/easybuild/wiki/Bootstrapping-EasyBuild (#531)
- reorganize framework/easyconfig.py module into framework/easyconfig package with modules (#574, #580)
- support EasyBuild configuration via command line, environment variables and configuration files (#529, #552, #556, #558, #559)
- various other enhancements, including:
    - extended set of unit tests for eb command line options and EasyBuild configuration (#517, #556, #559, #571)
    - made --search also useful when easybuild-easyconfigs package is not installed (#524)
    - extended set of default module classes (#525)
    - add support for license easyconfig parameter (which will be mandatory in v2.x) (#526, #569)
    - added setup.cfg for setup.py to allow creating RPMs (#528)
    - added support for obtaining system information, see get_os_* functions in easybuild/tools/systemtools.py (#543, #546, #547)
    - added support for iterated builds that require cycling over multiple sets of configure/build/install options, e.g. FFTW (#549)
    - added support for OpenBLAS as toolchain lib for linear algebra (#537, #565)
    - added support for tweaking prefix and separator for library toolchain variables (LIB*) (#572, #576)
    - skip already built modules in regression testing mode, to ease regression testing (#582)
- various bug fixes, including:
    - added zip_safe flag to setup.py, to silence multitude of warnings (#521)
    - only define LIBFFT for Intel MKL if FFTW interface libraries are available (#518, #567, #579)
    - set POSIX group early in build process, make EasyBuild aware of consistent chmod/chown failures (#527)
    - properly order the name/version keys for the toolchain easyconfig parameter when using --try-toolchain (#563)
    - take the 'skipsteps' easyconfig parameter into account in regression testing mode as well (#583)

v1.2.0 (February 28th 2013)
---------------------------

feature + bugfix release
- new backend module for option parsing: generaloption
- support for using constants and string templates in easyconfig files
    - currently disabled for 'exts_filter' and 'exts_list' easyconfog parameters, for backward compatibility
- various other enhancements, including:
    - support for iqacml and iiqmpi toolchains (Intel compilers + QLogic MPI based)
    - clearer errors messages when sanity check failed
    - unit tests for (about half of) the 'eb' command line options
    - support for specifying build/install steps to skip in easyconfig file ('skipsteps')
    - support for allowing certain dependencies to be resolved by the system instead of modules ('allow_system_deps')
    - cache ppn value required by regtest, clean up temporary files let behind by --regtest/--job
    - make sure MPD is used as process manager for Intel MPI (required for impi v4.1 and later)
    - rename template names 'name' and 'version' used in exts_filter to 'ext_name', 'ext_version'
        - 'name' and 'version' are still supported for legacy reasons
    - cleaned up module docstrings w.r.t. list of authors
- various bug fixes, including:
    - print correct (lowercase) toolchain names with --list-toolchains
    - correct easyconfig parameter name 'license_server_port'
    - fix string quoting in develop modules
    - ensure modulecmd is run with original LD_LIBRARY_PATH value
        - to avoid breaking modulecmd, see https://bugzilla.redhat.com/show_bug.cgi?id=719785
    - remove use of hardcoded files/dirs in unit tests
    - fix various inconsistencies w.r.t. paths considered with --robot
    - various cleanup and fixes w.r.t. logging
        - use correct logger instance in main script
        - stop passing logger instances around
        - make module logging variables private
    - get rid of ModuleGenerator deconstructor, clean up via EasyBlock.clean_up_fake_module
    - fix disabling of 'optarch' toolchain option (and extend unit tests to check on this)

v1.1.0 (January 27th 2013)
--------------------------

feature + bugfix release
- improvements w.r.t. support for software extensions (tested on Python and R, see easyblocks package)
    - cleaned up support for building/installing extensions
    - define ExtensionEasyblock class that implements support for installing extensions as stand-alone module as well
    - return to build dir before building/installing each extension
    - define EBEXTSLIST<NAME> environment variable in module if exts_list was defined
    - make sure sanity check for extensions results in an error if it fails
- various enhancements, including:
    - log both framework and easyblocks versions
    - add support for gimkl, gmacml, iccifort, iomkl, and ismkl toolchains
    - define *_SEQ compiler variables for sequential compilers
    - add --list-toolchains command line option for listing supported toolchains
    - add support for customizing software and modules install path suffixes
    - support both setuptools and distutils installation methods for finding installed easyconfigs
    - also consider robot path in list of paths searched for patch files
    - allow skipping of default extension sanity check (by setting 'modulename' to False in options)
- various bug fixes, including:
    - typos in toolchain Python modules w.r.t. imkl support, handling of i8/optarch/unroll options
    - purge before loading 'fake' module, unload 'fake' module before removing it, use original MODULEPATH
    - restore environment after unloading fake module, set variables that were incorrectly unset, i.e., that were defined before as well
    - unset TMPDIR for builds submitted as jobs (required by IntelBase easyblock)
    - correctly track easyconfig parse error
    - always run all jobs in regtest, also if dependency jobs failed
    - cosmetic adjustments to default EasyBuild configuration file to avoid confusion between e.g. build_dir and build_path (only latter matters)
    - fix SuSe hack, only prefix command with sourcing of /etc/profile.d/modules.sh if it is there
    - leave build directory before it is removed during cleanup step
    - load generated module file before running test cases

v1.0.2 (December 8th 2012)
--------------------------

bugfix release
- properly catch failing sanity check commands
- fix bug in toolchain support which cause linking environment variables set by toolchain to include too many libraries
    - elements in toolchain variables were being passed by reference instead of by value
- fix selecting a compiler toolchain for a specified software package (--software-name) if only a template is a viable option
- fix passing command line parameters with --job
- fix list of valid stops (-s/--stop)
- fix minor issues in help messages (-h/--help)

v1.0.1 (November 24th 2012)
---------------------------

bugfix release
- fix support for installing easybuild-framework with distutils (broken import in setup.py)
- fix support for ACML as a toolchain element (toolchains/linalg/acml.py)
- add name to aggregated regtest XML so that is parsed correctly by Jenkins
- reorder code in main.py so that regtest also works with incomplete easyconfig paths
- add bash script for running regression test and sending a trigger to Jenkins to pull in the XML with results
- get rid of assumption that loaded modules should have name like 'foo/bar', make it more flexible
- retry failed builds in regtest twice to ignore fluke errors
- report leaf nodes in dependency graph when regtest is submitted
    - this is required for setting job dependencies in the regtest script for the Jenkins trigger job
- implement and use rmtree2 as more (NFS) robust replacement for shutil.rmtree
- bump max hit count for run_cmd_qa from 20 to 50, to make false positives of unasnwered questions less likely

v1.0 (November 13th 2012)
-------------------------

- split up EasyBuild across three repositories: framework, easyblocks and easyconfigs
- packaged EasyBuild, different parts can now be installed easily using easy_install
- various changes to both internal and external API:
    - renamed main script to main.py (from build.py)
    - file and directory organisation
    - module, class, function and function argument renaming and reorganisation
    - split up Application into EasyBlock and ConfigureMake (see easybuild-easyblocks for the latter)
    - created EasyConfig class for handling easyconfig files
    - renaming of EasyBuild configuration parameters (non-camelCase)
    - renaming of various easyconfig parameters (non-camelCase)
    - rename SOFTROOT and SOFTVERSION environment variables set in generated module files to EBROOT and EBVERSION
    - use 'extension' as generic terminology for Python packages, R libraries, Perl modules, ...
- added support for building software packages in parallel via PBS jobs
- added unit testing framework and initial set of unit tests for basic functionality
    - and run them in Jenkins continuous integration service, see https://jenkins1.ugent.be/view/EasyBuild/
- implement single-command regression test (e.g. to test building all supported software)
    - eb --regtest --robot
- switch to new style Python classes
- replaced toolkit module with toolchain package (total rewrite), providing modular support for toolchains
- adjust default EasyBuild configuration to only use $HOME/.local/easybuild by default
- added support for running EasyBuild without supplying an easyconfig file
    - make EasyBuild search for a matching easyconfig file
    - support automatic rewriting of an existing partially-matching easyconfig file (use this with care!)
    - support for automatically generating an easyconfig file according to given specifications (best effort!)
- add support for looking for easyconfig file in Python search path if it can't be found on specified (relative) path
    (that way, easyconfig files available in the easybuild-easyconfigs package can be used easily)
- various other enhancements and bug fixes, e.g.:
    - extended sanity check capabilities
    - cleaned up logging
    - creating of devel module which allows to mimic environment that was used by EasyBuild to build the software
    - support for creating dependency graphs for a set of easyconfig files
    - grouped options in help output and categorised available easyconfig parameters
    - more consistent code style

v0.8 (June 29th 2012)
---------------------

- added support for building/installing 17 additional software packages:
    - BEAGLE, Doxygen, g2clib, g2lib, HDF, HDF5, JasPer, libpng, Maple, 
      MrBayes, NCL, netCDF, netCDF-Fortran, Szip, WPS, WRF, zlib
- the build procedure for WRF and WPS includes running the tests available for these packages
- various bug fixes and enhancements:
    - made support for interactive installers (run_cmd_qa) more robust
    - fixed Python git package check
    - implemented toolkit functions for determine compiler family, MPI type, MPI run command, ...

v0.7 (June 18th 2012)
---------------------

- fixed BLACS build
    - diagnostic tools to determine INTERFACE and TRANSCOMM values are now used
- added support for building Bison, CP2K, flex
    - with regression test enabled for CP2K as part of build process
    - note: BLACS built with EasyBuild prior to v0.7 needs to be rebuilt for CP2K to work correctly
- added --enable-mpi-threads to OpenMPI example easyconfigs
    - required for correct CP2K psmp build
- adjusted libsmm example easyconfig for lower build time
    - to make the full regression test finish in a reasonable amount of time
- added script to make porting of easyblocks from old to new EasyBuild codebase easier
    - takes care of refactoring, checks for PyLint warnings/errors, ...
- fixed several small bugs
- prefixed EasyBuild messages with "=="
- full regression test passed (58 easyconfigs tested)

v0.6 (May 11th 2012)
---------------------

- added support for Intel compiler toolkit (ictce)
    - which included the Intel compilers, Intel Math Kernel Library (imkl) and Intel MPI library (impi)
- added support for building Python with nose/numpy/scipy packages
- added simple regression test
- this version is able to build all supplied example easyconfigs

v0.5 (April 6th 2012)
----------------------

- first public release of EasyBuild
    - after a thorough cleanup of the EasyBuild framework of the in-house version
- supports building HPL with goalf compiler toolkit
    - the goalf toolkit consists of the GCC compilers, and the OpenMPI, ATLAS, LAPACK, FFTW and ScaLAPACK libraries
- also support build and installation of MVAPICH2
