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

These release notes can also be consulted at https://easybuild.readthedocs.io/en/latest/Release_notes.html.


v4.5.4 (March 31st 2022)
------------------------

update/bugfix release

- various enhancements, including:
  - warn about potentially missing patches in --new-pr (#3759, #3966)
  - add support for 'clone_into' field in git_config source spec to specify different name for top-level directory (#3949)
  - add bash completion for easyconfigs from local dir but not robot search path (#3953)
  - add a 'sync pr' message when the PR has a mergeable state but is showing a failed status for the test suite on the last commit (#3967)
  - add gmpit toolchain definition (GCC + MPItrampoline) (#3971)
  - use 'zypper search -i' to check whether specified OS dependency is installed on openSUSE + make sure that rpm is considered for checking OS dependencies on RHEL8 (#3973)
  - add support for post-install patches (#3974)
  - add support for 'download_instructions' easyconfig parameter key to specify some download or installation steps for user in case of complicated way of obtaining needed files (#3976, #3981)
  - also try collecting AMD GPU info (via rocm-smi) for --show-system-info (#3978, #3982)
- various bug fixes, including:
  - ensure --review-pr can find dependencies included in PR (#3979)
  - run 'apt-get update' in GitHub Actions workflow for container tests to update container package list before installing anything (#3985)
- other changes:
  - enable code linting check for all supported Python versions (#3725)
  - update copyright lines for 2022 (#3986)


v4.5.3 (February 11th 2022)
---------------------------

update/bugfix release

- various enhancements, including:
  - also check for git in --check-eb-deps (#3954)
  - add end2end test for 'eb --containerize' (#3958)
- various bug fixes, including:
  - take into account that patch files can also be zipped when checking filename extension for patches (#3936)
  - initialize BACKUP_PKG_URL with empty string in install_eb_dep.sh script (#3939)
  - fix get_os_name and get_os_version to avoid reporting UNKNOWN in output of eb --show-system-info (#3942)
  - consistently use actions/setup-python@v2 in CI workflows (#3944)
  - switch to using pip3 for installing EasyBuild in container recipes generated by EasyBuild (#3945)
  - specify easybuild.io as EasyBuild homepage in setup.py (#3947)
  - avoid crash in get_os_version on modern SLES-based OSs (#3955)
- other changes:
  - indicate compatibility with Python 3.10 in setup.py (#3940)


v4.5.2 (January 24th 2022)
--------------------------

update/bugfix release

- various enhancements, including:
  - automatically prepend value for env-for-shebang configuration setting with sysroot (#3919)
  - enhance update_build_option to return original value + add support for update_build_options (#3923)
  - fix compatibility with Python 3.10 (#3926, #3933)
  - also take /etc/os-release into account in get_os_name and get_os_version (#3930)
  - enhance get_cpu_architecture and get_cpu_family to be aware of RISC-V (#3931)
- various bug fixes, including:
  - relax pattern checks in test_toy_exts_parallel (#3921)
  - use sources.easybuild.io as backup URL for downloading Environment Modules sources to run test suite (#3928)
  - make intelfftw toolchain component aware of GCCcore (#3929)
- other changes:
  - deprecate use of (actual) patch files that don't have a filename ending with .patch (#3920)
  - remove version restriction for keyring in requirements.txt to test with latest version (#3925)
  - simplify requirements.txt by removing Python 2.6 support (#3927)
  - only run GitHub tests when testing with Lua module syntax, to avoid hitting GitHub rate limit when running tests (#3938)


v4.5.1 (December 13th 2021)
---------------------------

update/bugfix release

- various enhancements, including:
  - also dump environment to reprod directory (#3374)
  - determine which extensions can be skipped in parallel (if --parallel-extensions-install is enabled) (#3890)
  - fall back to sequential installation for extensions with unknown dependencies when using --parallel-extensions-install (#3906)
  - allow oversubscription in sanity check for OpenMPI-based toolchains (#3909)
- various bug fixes, including:
  - don't try to ensure absolute path for path part of repositorypath (#3893, #3899)
  - fix typo in EULA agreement error message (#3894)
  - only remove lock if it was created in the same EasyBuild session (not if it existed already) (#3889)
  - introduce EasyBlock.post_init method to correctly define builddir variable when build-in-installdir mode is enabled in easyconfig or easyblock (#3900)
  - also show download progress bar when using --inject-checksums (#3905)
  - pick up custom extract_cmd specified for extension (#3907)
  - make test_run_cmd_async more robust against fluke failures (#3908)


v4.5.0 (October 29th 2021)
--------------------------

feature release

- various enhancements, including:
  - add --review-pr-max and --review-pr-filter options to limit easyconfigs used by --review-pr + retain order of easyconfigs being compared with (#3754)
  - use Rich (if available) to show progress bars when installing easyconfigs (#3823, #3826, #3833, #3835, #3844, #3864, #3867, #3882)
    - see also https://docs.easybuild.io/en/latest/Progress_bars.html
  - add support for checking required/optional EasyBuild dependencies via 'eb --check-eb-deps' (#3829)
  - add support for collecting GPU info (via nvidia-smi), and include it in --show-system-info and test report (#3851)
  - added support for --insecure-download configuration option (#3859)
  - make intelfftw toolchain component aware of imkl-FFTW module (#3861)
  - make sure the contrib/hooks tree is included in the source tarball for easybuild-framework (#3862)
  - add check_async_cmd function to facilitate checking on asynchronously running commands (#3865, #3881)
  - add initial/experimental support for installing extensions in parallel (#3667, #3878)
    - see also https://docs.easybuild.io/en/latest/Installing_extensions_in_parallel.html
  - filter out duplicate paths added to module files, and print warning when they occur (#3770, #3874)
- various bug fixes, including:
  - ensure that path configuration options have absolute path values (#3832)
  - fix broken test by taking into account changed error raised by Python 3.9.7 when copying directory via shutil.copyfile (#3840)
  - ensure newer location of CUDA stubs is taken into account by RPATH filter (#3850)
  - replace 'which' by 'command -v' in 'eb' wrapper script to avoid dependency on 'which' command (#3852)
  - refactor EasyBlock to decouple collecting of information on extension source/patch files from downloading them (#3860)
    - in this context, the EasyBlock.fetch_extension_sources method was deprecated, and replaced by EasyBlock.collect_exts_file_info
  - fix library paths to add to $LDFLAGS for intel-compilers toolchain component (#3866)
  - remove '--depth 1' from git clone when 'commit' specified (#3871, #3872)
  - make sure correct include directory is used for FlexiBLAS toolchain component (#3875)
  - explictly disable rebase when pulling develop branch to create a merge commit, since not specifying how to reconcile divergent branches is an error with Git 2.33.1 and newer (#3879)
  - tweak test_http_header_fields_urlpat to download from sources.easybuild.io rather than https://ftp.gnu.org (#3883)
- other changes:
  - change copy_file function to raise an error when trying to copy non-existing file (#3836, #3855, #3877)
  - only print the hook messages if EasyBuild is running in debug mode (#3843)
  - deprecate old toolchain versions (pre-2019a common toolchains) (#3876, #3884)
    - see also https://docs.easybuild.io/en/latest/Deprecated-easyconfigs.html#deprecated-toolchains


v4.4.2 (September 7th 2021)
---------------------------

update/bugfix release

- various enhancements, including:
  - add per-extension timing in output produced by eb command (#3734)
  - add definition for new toolchain nvpsmpic (NVHPC + ParaStationMPI + CUDA) (#3736)
  - include list of missing libraries in warning about missing FFTW libraries in imkl toolchain component (#3776)
  - check for recursive symlinks by default before copying a folder (#3784)
  - add --filter-ecs configuration option to filter out easyconfigs from set of easyconfigs to install (#3796)
  - check type of source_tmpl value for extensions, ensure it's a string value (not a list) (#3799)
  - also define $BLAS_SHARED_LIBS & co in build environment (analogous to $BLAS_STATIC_LIBS) (#3800)
  - report use of --ignore-test-failure in success message in output (#3806)
  - add get_cuda_cc_template_value method to EasyConfig class (#3807)
  - add support for fix_bash_shebang_for (#3808)
  - pick up $MODULES_CMD to facilitate using Environment Modules 4.x as modules tool (#3816)
  - use more sensible branch name for creating easyblocks PR with --new-pr (#3817)
- various bug fixes, including:
  - remove Python 2.6 from list of supported Python versions in setup.py (#3767)
  - don't add directory that doesn't include any files to $PATH or $LD_LIBRARY_PATH (#3769)
  - make logdir writable also when --stop/--fetch is used and --read-only-installdir is enabled (#3771)
  - fix forgotten renaming of 'l' to 'char' __init__.py that is created for included Python modules (#3773)
  - fix verify_imports by deleting all imported modules before re-importing them one by one (#3780)
  - fix ignore_test_failure not set for Extension instances (#3782)
  - update iompi toolchain to intel-compiler subtoolchain for oneAPI versions (>= iompi 2020.12) (#3785)
  - don't parse patch files as easyconfigs when searching for where patch file is used (#3786)
  - make sure git clone with a tag argument actually downloads a tag (#3795)
  - fix CI by excluding GC3Pie 2.6.7 (which is broken with Python 2) and improve error reporting for option parsing (#3798)
  - correctly resolve templates for patches in extensions when uploading to GitHub (#3805)
  - add --easystack to ignored options when submitting job (#3813)
- other changes:
  - speed up tests by caching checked paths in set_tmpdir + less test cases for test_compiler_dependent_optarch (#3802)
  - speed up set_parallel method in EasyBlock class (#3812)


v4.4.1 (July 6th 2021)
----------------------

update/bugfix release

- various enhancements, including:
  - enhance detection of patch files supplied to 'eb' command with better error messages (#3709)
  - add per-step timing information (#3716)
  - add module-write hook (#3728)
  - add ignore-test-failure configuration option to ignore failing test step (#3732)
  - add toolchain definition for nvompic (NVHPC + OpenMPI) (#3735)
  - warn about generic milestone in --review-pr and --merge-pr (#3751)
- various bug fixes, including:
  - don't override COMPILER_MODULE_NAME, inherited from Ffmpi, in Fujitsu toolchain definition (#3721)
  - avoid overwritting pr_nr in post_pr_test_report for reports with --include-easyblocks-from-pr (#3724, #3726)
  - fix crash in get_config_dict when copying modules that were imported in easyconfig file (like 'import os') (#3729)
  - parse C standard flags in CFLAGS for Fujitsu compiler (#3731)
  - fix error message for --use-ccache (#3733)
  - error out when passing a list to run_cmd* to avoid running wrong command unintended, unless shell=True is used (#3737)
  - minor fixes to output of test reports when using multiple PRs (#3741)
  - fix location for modules installed with intel-compilers toolchain in HierarchicalMNS by always checking toolchain compiler name against template map (#3745)
  - avoid checking msg attribute of GitCommandError (#3756)
  - consider sources provided as dict in EasyBlock.check_checksums_for (#3758)
  - don't make changes to software installation directory when using --sanity-check-only (#3761)
  - honor specified easyblock for extensions (#3762)
- other changes:
  - make sure that tests requiring a github token have 'github' in the test name so that they can be easily filtered (#3730)
  - deprecate EasyBuild bootstrap script (#3742)
  - use temporary download folder in test_http_header_fields_urlpat (#3755)


v4.4.0 (June 2nd 2021)
----------------------

feature release

- various enhancements, including:
  - enhance apply_regex_substitutions to allow specifying action to take in case there are no matches (#3440)
  - performance improvements for easyconfig parsing and eb startup (#3555)
  - add support for downloading easyconfigs from multiple PRs with --from-pr (#3605, #3707, #3708)
  - add support for prepending custom library paths in RPATH section via --rpath-override-dirs (#3650)
  - allow amending easyconfig parameters which are not the default (#3651)
  - update HierarchicalMNS for Intel OneAPI compilers (#3653)
  - add support for --sanity-check-only (#3655)
  - add support for running commands asynchronously via run_cmd + complete_cmd functions (#3656)
  - add support for using oneAPI versions of 'intel' toolchain components (#3665)
  - add toolchain definition for gofbf (foss with FlexiBLAS rather than OpenBLAS) (#3666)
  - add support for using ARCH constant in easyconfig files (#3670)
  - honor keyboard interrupt in 'eb' command (#3674)
  - add toolchain definition for Fujitsu toolchain (#3677, #3704, #3712, #3713, #3714, #3717)
  - extend sanity check step to check whether specific libraries are not linked into installed binaries/libraries (#3678)
    - via banned-linked-shared-libs and required-linked-shared-libs EasyBuild configuration options
    - via banned_linked_shared_libs and required_linked_shared_libs methods in toolchain support
    - via banned_linked_shared_libs and required_linked_shared_libs methods in easyblock
    - via banned_linked_shared_libs and required_linked_shared_libs easyconfig parameters
  - add locate_solib function to locate Linux shared libraries (#3682)
  - add system agnostic function to locate shared libraries (#3683)
  - add update_build_option function to update specific build options after initializing the EasyBuild configuration (#3684)
  - allow opting out of recursively unloaded of modules via recursive_module_unload easyconfig parameter (#3689)
  - check for correct version values when parsing easystack file (#3693)
  - run post-install commands specified for a specific extension (#3696)
  - add support for --skip-extensions (#3702)
  - include PR title in output produced by --merge-pr (#3706)
- various bug fixes, including:
  - avoid metadata greedy behaviour when probing for external module metadata (mostly relevant for integration with Cray Programming Environment) (#3559)
  - catch problems early on if --github-user is not specified for --new-pr & co (#3644)
  - re-enable write permissions when installing with read-only-installdir (#3649)
  - also run sanity check for extensions when using --module-only (#3655)
  - improve logging when failing to load class from exts_classmap (#3657)
  - fix use of --module-only on existing installations without write permissions (#3659)
  - correct help text for subdir-user-modules (#3660)
  - avoid picking up easyblocks outside of sandbox in framework tests (#3680)
  - use unload/load in ModuleGeneratorLua.swap_module, since 'swap' is not supported by Lmod (#3685)
  - update HierarchicalMNS to also return 'Toolchain/<name>/<version>' as $MODULEPATH extension for cpe* Cray toolchains (#3686)
  - make EasyConfigParser.get_config_dict return a copy rather than a reference (#3692)
  - make sure that $TAPE is unset when using piped tar (#3698)
  - fix extending message for changed files in new_pr_from_branch (#3699)
  - enhance sched_getaffinity function to avoid early crash when counting available cores on systems with more than 1024 cores (#3701)
  - correctly strip extension from filename in extract_cmd and back_up_file functions (#3705)
- other changes:
  - deprecate adding a non-existing path to $MODULEPATH (#3637)
  - bump cryptography requirement from 3.2.1 to 3.3.2 (#3643, #3648)
  - test bootstrap script in separate workflow, and limit test configurations a bit (#3646)
  - update setup.py to indicate compatibility with Python 3.8 and 3.9 (#3647)
  - replace log_error parameter of which() by on_error (#3661, #3664)
  - don't skip sanity check for --module-only --rebuild (#3645)
  - move disable_templating function into the EasyConfig class (#3668)
  - pin GitPython version for Python<3.6, don't test bootstrap script against Python 3.8/3.9 (#3675)
  - tweak foss toolchain definition to switch from OpenBLAS to FlexiBLAS in foss/2021a (#3679)
  - suggest missing SSH key when not able to read from remote repository in --check-github (#3681)
  - drop support for Python 2.6 (#3715)


v4.3.4 (April 9th 2021)
-----------------------

update/bugfix release

- various enhancements, including:
  - add support for filtering dependencies by using False as version (#3506)
  - add create_unused_dir function to create a directory which does not yet exist (#3551)
  - avoid running expensive 'module use' and 'module unuse' commands when using Lmod as modules tool, update $MODULEPATH directly instead (#3557, #3633)
  - create CUDA cache (for JIT compiled PTX code) in build dir instead of $HOME (#3569)
  - add "Citing" section to module files (#3596)
  - add support for using fallback 'arch=*' key in dependency version specified as arch->version mapping (#3600)
  - also check for pending change requests and mergeable_state in check_pr_eligible_to_merge (#3604)
  - ignore undismissed 'changes requested' review if there is an 'approved' review by the same user (#3607, #3608)
  - sort output of 'eb --search' in natural order (respecting numbers) (#3609)
  - enhance 'eb' command to ensure that easybuild.main can be imported before settling on python* command to use (#3610)
  - add --env-for-shebang configuration option to define the env command to use for shebangs (#3613)
  - add templates for architecture independent Python wheels (#3618)
  - mention easyblocks PR in gist when uploading test report for it + fix clean_gists.py script (#3622)
  - also accept regular expression value for --accept-eula-for (#3630)
  - update validate_github_token function to accept GitHub token in new format (#3632)
- various bug fixes, including:
  - fix $BLAS_LIB_MT for OpenBLAS, ensure -lpthread is included (#3584)
  - use '--opt=val' for passing settings from config file to option parser to avoid error for values starting with '-' or '--' (#3594)
  - avoid raised exception when getting output from interactive command in run_cmd_qa (#3599)
  - add option to write file from file-like object and use in download_file (#3614)
  - make sure that path to eb is always found by tests (#3617)
- other changes:
  - add pick_default_branch function to clean up duplicate code in tools/github.py (#3592)
  - refactor the CI configuration to use inclusion instead of exclusion (#3616)
  - use develop branch when testing push access in --check-github (#3629)
  - deprecate --accept-eula, rename to --accept-eula-for (#3630)


v4.3.3 (February 23rd 2021)
---------------------------

update/bugfix release

- various enhancements, including:
  - advise PR labels in --review-pr and add support for --add-pr-labels (#3177)
  - add support for using customized HTTP headers in download_file (#3472, #3583)
  - also take toolchain dependencies into account when defining template values (#3541, #3560)
  - add support for --accept-eula configuration option + 'accept_eula' easyconfig parameter (#3535, #3536, #3546)
  - detect 'SYSTEM' toolchain as special case in easystack files (#3543)
  - enhance extract_cmd function to use 'cp -a' for shell scripts (.sh) (#3545)
  - allow use of alternate envvar(s) to $HOME for user modules (#3558)
  - use https://sources.easybuild.io as fallback source URL (#3572, #3576)
  - add toolchain definition for iibff toolchain (#3574)
  - add %(cuda_cc_space_sep)s and %(cuda_cc_semicolon_sep)s templates (#3578)
  - add support for intel-compiler toolchain (>= 2021.x versions, oneAPI) (#3581, #3582)
- various bug fixes, including:
  - add --init and --recursive options to 'git submodule update' command that is used when creating source tarball for specific commit (#3537)
  - filter out duplicate paths in RPATH wrapper script (#3538)
  - don't clean up imported modules after verifying imports of included Python modules (#3544)
  - avoid no-op changes to $LD_* environment variables in ModulesTool (#3553)
  - fix UTF-8 encoding errors when running EasyBuild with Python 3.0.x-3.6.x (#3565)
  - create lib64 symlink as a relative symlink (#3566)
  - don't reuse variable name in the loop to fix adding extra compiler flags via toolchainopts (#3571)
  - symlink 'lib' to 'lib64' if it doesn't exist (#3580)
  - include %(mpi_cmd_prefix)s and %(cuda_*)s templates in output of --avail-easyconfig-templates (#3586)
- other changes:
  - rename EasyBlock._skip_step to EasyBlock.skip_step, to make it part of the public API (#3561)
  - make symlinking of posix_c.so to posix.so in test suite configuration conditional (#3570)
  - use 'main' rather than 'master' branch in GitHub integration functionality (#3589)


v4.3.2 (December 10th 2020)
---------------------------

update/bugfix release

- add (experimental) support for specifying easyconfig files via an "easystack" file (#3479, #3511, #3515, #3517, #3520, #3521)
  - see also https://easybuild.readthedocs.io/en/latest/Easystack-files.html
- add definition for new 'gobff' toolchain using BLIS and LibFLAME (#3505)
- various enhancements, including:
  - add support for toolchain options like 'extra_cxxflags' to specify extra compiler options (#2193)
  - fix combination of --copy-ec and --from-pr (#3482)
  - enhance copy_files function: support single file target, error on empty input list, support verbose mode (#3483)
  - cache result of fetch_files_from_pr function (mainly to speed up framework test suite) (#3484)
  - add locate_files function to filetools module (#3485)
  - add support for %(module_name)s template value (#3497)
  - clarify input format for --cuda-compute-capabilities in 'eb --help' output (#3509)
  - add support for skiping unit tests (test step) via --skip-test-step (#3524)
- various bug fixes, including:
  - also ignore vsc.* imports coming from from pkg_resources/__init__.py (setuptools) in fake vsc namespace (#3491)
  - don't pass username in github_api_get_request when no GitHub token is available (#3494)
  - also inject -rpath options for all entries in $LIBRARY_PATH in RPATH wrappers (#3495)
  - avoid TypeError being raised by list_toolchains (#3499)
  - check if PR is already merged in --merge-pr (#3502)
  - graciously handle wrong PR id in fetch_pr_data (#3503)
  - fix regression in apply_regex_substitutions: also accept list of paths to patch (#3507)
  - update installation procedure for EasyBuild in generated Singularity container recipes (#3510)
  - fix GitHub Actions workflow for test suite: run outside of repo checkout + also test bootstrap script with Python 3.9 (#3518)
  - bump cryptography from 2.9.2 to 3.2 for Python 2 in requirements.txt (#3519)
  - fix 'eb --help=rst' when running with Python 3 (#3525)
- other changes:
  - exclude test configurations with Lmod 7 and Python 3, except for Python 3.6 (#3496)
  - significantly speed up parsing of easyconfig files by only extracting comments from an easyconfig file when they're actually needed (#3498)
  - don't include file/ldd/readelf commands run during RPATH sanity check in --trace output (#3508)


v4.3.1 (October 29th 2020)
--------------------------

update/bugfix release

- various enhancements, including:
  - further GCC toolchain fixes for aarch64 (#3433)
  - take into account --include-easyblocks-from-pr when uploading test reports (#3446)
  - add path to pkg-config files in sysroot to $PKG_CONFIG_PATH when --sysroot is specified (#3451)
  - add support for NVHPC compiler + toolchain (based on PGI) (#3454)
  - check for _VERSION and _PREFIX Cray environment variables with both software and module name (#3460)
  - allow including easyblocks from multiple PRs (#3480, #3481)
- various bug fixes, including:
  - avoid UnicodeDecodeError in apply_regex_substitutions when patching files that include non-UTF-8 characters (#3450)
  - avoid appending lib stubs pattern to RPATH filter over and over again (#3452)
  - fix missing string template on error for incorrect extension 'sources' value (#3461)
  - fix compatibility with Python 3.9 by renaming fancy root logger (#3465)
  - also remove empty checksums list specified in easyconfig file when using --inject-checksums (#3466)
  - avoid confusing error log message when determining impi version while trying to define value for %(mpi_cmd_prefix)s template (#3474)
  - unset $LD_LIBRARY_PATH when checking for OS dependencies with 'rpm' & co (#3477)
  - don't change directory in download_repo function in tools.github (#3486)
  - take source_urls, checksums, patches into account when extension source is specified via 'sources' (#3487)
- other changes:
  - consider $EB_INSTALLPYTHON in 'eb' command to specify 'python' command to use for running EasyBuild (#3428)
  - use only the sub folder name for createSubmoduleDeps script (#3464)


v4.3.0 (September 13th 2020)
----------------------------

feature release

- various enhancements, including:
  - add script to create 'sources' entries for git submodules (#3369, #3436)
  - add templates for CUDA compute capabilities (#3382)
    - '%(cuda_compute_capabilities)s', '%(cuda_sm_comma_sep)s', '%(cuda_sm_space_sep)s'
  - add EasyBuild configuration option --generate-devel-module (#3388)
    - to allow disabling generating of "devel" modules via --disable-generate-devel-module
  - set up a minimal build environment when using system compiler (#3399)
    - by default, $CC is set to 'gcc' and $CXX is set to 'g++' when using 'system' toolchain
    - minimal build environment can be customized via --minimal-build-env configuration option
  - add --sysroot configuration option to specify alternative location of system root (#3419)
    - this is useful when installing software in a Gentoo Prefix environment (for example)
- various bug fixes, including:
  - allow including easyblocks from multiple locations, by combining --include-easyblocks and --include-easyblocks-from-pr (#3311)
  - also escape backslashes in quote_py_str() (#3386)
  - use one argument 'module swap' statements in Tcl modulefiles (required by Modules 4.2.3+) (#3397)
  - fix copying of (non-existing) file with apply_patch (#3400)
  - create symlink from lib64 to lib subdir in installation directories to avoid that GCC prefers /lib64 system directories (#3401)
  - fix default value for 'lib64_fallback_sanity_check' build option (#3402)
  - correctly determine commit status in --merge-pr (#3406)
  - stop installing ccache wrapper for Fortran compiler (#3409)
  - fix issues with applying PR patch in --from-pr (#3414)
  - make RPATH wrapper script more robust by using 'python -E -s -S' to run rpath_args.py (#3422)
  - don't inject -Wl,-rpath options when '-x c++-header' compiler option is used (#3424)
  - fix lack of -mno-recip on aarch64 by tweaking GCC options used when 'precise' toolchain option is enabled (#3425)
  - make sure self.start_dir is set in ExtensionEasyBlock (#3426, #3435)
  - exclude local variables from typo check in easyconfig files (#3427)
- other changes:
  - stick to cryptography 2.9.2 when using Python 2.7 to avoid broken test suite in CI (#3392)
  - automatically enable --ignore-locks with --fetch (#3404)
  - switch to status badge based on tests run in GitHub Actions CI in README (#3415)
  - make flake8 code style checks pass (#3416, #3417)
  - limit Travis to only test with Python 2.6 + Lomod 7 (#3418)
  - ignore deprecation warning raised for cryptography when using Python 3.5 produced by output of test suite (#3423)


v4.2.2 (July 8th 2020)
----------------------

update/bugfix release

- various enhancements, including:
  - add support for using 'sources' and 'git_config' for extensions in 'exts_list' (#3294)
  - add support for software minver template (like %(pyminver)s, etc.) (#3344, #3345)
  - add support for updating dictionary or tuple easyconfig parameters with self.cfg.update (#3356)
- various bug fixes, including:
  - fix crash in --avail-easyconfig-constants when using --output-format=rst + ensure sorted output (#3341)
  - always take into account builddependencies when generating template values, also when we're not iterating over builddependencies (#3346)
  - fix running command as 'easybuild' user in generated Singularity definition file (#3347)
  - allow ignoring versionsuffix in --try-update-deps (#3350, #3353)
  - retain order of paths when generating prepend_path statements for module file (don't sort them alphabetically) (#3367)
  - also put easyblocks used by extensions in 'reprod' directory (#3375)
  - also copy template values in EasyConfig.copy method to ensure they are defined when installing extensions (#3377)
  - skip lines that start with 'module-version' when determining whether a module exists in ModulesTool.exist (#3379)


v4.2.1 (May 20th 2020)
----------------------

update/bugfix release

- various enhancements, including:
  - also mention CPU architecture (x86_64, POWER) in comment for test reports (#3281)
  - add support for enhancing existing sanity check in easyconfigs, as opposed to overwriting paths/commands (#3288)
  - clean up locks when EasyBuild session is cancelled with a signal like SIGTERM (#3291, #3321)
  - add 'find_glob_pattern' function to filetools module (#3297)
  - add constants for common OS dependencies (OS_PKG_IBVERBS_DEV, OS_PKG_OPENSSL_DEV, ...) (#3309, #3334)
  - flesh out get_mpi_cmd_template function from Mpi.mpi_cmd_for method (#3312)
  - add variable 'moddependpaths' to specify extra $MODULEPATH entry to consider for loading dependency modules (#3324)
  - allow copying of tweaked easyconfigs when using --try-* with --copy-ec (#3332)
- various bug fixes, including:
  - make ModulesTool.exist more robust w.r.t. module wrappers, aliases, defaults, etc. (#3216, #3337)
  - clean up rst output of --list-toolchains (#3246)
  - cast CPU arch name provided by archspec to a regular string (#3286)
  - get pr_title and pr_descr built_options in new_pr_from_branch instead of new_pr (and commit_msg in both) (#3298)
  - make pypi_source_urls more robust by using HTMLParser rather than xml.etree.ElementTree (#3303, #3329)
  - fix broken test for --include-easyblocks-from-pr (#3304)
  - don't use distutils.dir_util in copy_dir (#3310)
  - print trace message for sanity check command before running it (#3316)
  - fix problems with processing of easyconfigs using a Cray* toolchain when there are no actual external modules (#3319)
  - make test_find_eb_script more robust in case $EB_SCRIPT_PATH is already set (#3320)
  - fix several small problems wit --try-update-deps (experimental feature) (#3325, #3326, #3330)
  - add --disable-job in 'eb' command used in jobs, to prevent infinite job cycle (#3328)
  - avoid empty entries in $LD_LIBRARY_PATH and other path-like environment variables (#3333)
- other changes:
  - fix code style issues in easybuild.tools + add flake8 linting test (#3282)
  - introduce contextmanager for disabling templating and reduce resolving errors (#3287)
  - add 'change_into_dir' named argument to 'extract_file' + print deprecation warning if it's not specified (#3292)
  - improve install_eb_dep.sh script to install EasyBuild dependencies in CI environment (#3314)


v4.2.0 (April 14th 2020)
------------------------

feature release

- add support for --try-update-deps (experimental feature), to upgrade dependencies based on available easyconfigs (#2599)
- adding locking to prevent two parallel builds of the same installation directory (#3009)
  - for more information, see https://easybuild.readthedocs.io/en/latest/Locks.html
- significantly speed up -D/--dry-run by avoiding useless 'module show' (#3203)
- add support for creating an index & using it when searching for easyconfigs (#3210)
  - for more information, see https://easybuild.readthedocs.io/en/latest/Easyconfigs_index.html
- additional GitHub integration features:
    - add support for targeting easyblocks and framework repositories in --new-pr (#1876, #3189)
    - add support for --include-easyblocks-from-pr (#3206)
    - for more information, https://easybuild.readthedocs.io/en/latest/Integration_with_GitHub.html
- various other enhancements, including:
  - add a contrib/hooks dir with some examples of hooks used (#2777)
  - also mention working directory + input passed via stdin (if any) in trace output of run_cmd (#3168)
  - probe external modules for missing metadata that is not provided via extermal module metadata file (#3174)
  - also update $CMAKE_PREFIX_PATH and $CMAKE_LIBRARY_PATH in generated module file (#3176)
  - optionally call log.warning in print_warning (#3195)
  - add an option to git_config to retain the .git directory (#3197)
  - allow use of SYSTEM as --try-toolchain option (#3213)
  - mention CPU arch name in comment for uploaded test report, if it's known by archspec (#3227)
  - make --merge-pr take into account --pr-target-branch (#3236)
  - make --check-contrib print a warning when None is used for checksums (#3244)
  - update install-EasyBuild-develop.sh script and create script for 2020a merge sprint (#3245)
  - add template for mpi_cmd_prefix (#3264)
  - update copy_dir to include option to merge directories (#3270)
  - support template name for CUDA version (#3274)
- various bug fixes, including:
  - use correct module for errors_found_in_log (#3119)
  - fix EasyConfig.update code to handle both strings and lists as input (#3170)
  - fix removing temporary branch on --check-github (#3182)
  - fix shebang even if first line doesn't start with '#!' (#3183)
  - make boostrap script work with Python 3 (#3186)
  - read patch files as bytestring to avoid UnicodeDecodeError for patches that include funky characters (#3191)
  - fix online check in --check-github: try repeatedly and with different URLs to cater for HTTP issues (#3194)
  - don't crash when GitPython is not installed when using Python 3 (#3198)
  - fix os_name_map for RHEL8 (#3201)
  - don't add shebang to binary files (#3208)
  - use checkout@v2 in GitHub Actions to fix broken re-triggered tests (#3219)
  - don't filter out None values in to_checksums, leave them in place (#3225)
  - fix defining of $MPI_INC_* and $MPI_LIB_* environment variables for impi version 2019 and later (#3229)
  - use correct target account/repo when creating test report & posting comment in PR (#3234)
  - reorganize EasyBlock.extensions_step to ensure correct filtering of extensions (#3235)
  - also support %(installdir)s and %(builddir)s templates for extensions (#3237)
  - unset $GITHUB_TOKEN in Travis after installing token, to avoid failing test_from_pr_token_log (#3252)
  - fix reporting when skipping extensions (#3254)
  - avoid API rate limit errors on online check in --check-github (#3257)
  - show easyconfig filenames for parallel build (#3258)
  - make EasyConfig.dump aware of toolchain hierarchy, to avoid hardcoded subtoolchains in dependencies easyconfig parameters (#3261)
  - fix use of --copy-ec with a single argument, assume copy to current working directory (#3262)
  - fix posting of comment in PR with --upload-test-report (#3272)
  - take into account dependencies marked as external modules when composing template values like %(pyver)s (#3273)
- other changes:
  - increase timeout & use api.github.com for connectivity check in check_github (#3192)
  - restore flake8 default ignores (#3193)
  - enable tracking of test suite coverage using coveralls (#3204)
  - make tests use easybuilders/testrepository rather than hpcugent/testrepository after it was moved (#3238)
  - improve raised error in remove_dir and deprecate rmtree2 (#3228)


v4.1.2 (March 16th 2020)
------------------------

bugfix release

- fix gitdb dependency on Python 2.6 in test configuration (#3212)
- fix broken test for --review-pr by using different PR to test with (#3226)
- censor authorization part of headers before logging ReST API request (#3248)
  - see also https://github.com/easybuilders/easybuild-framework/security/advisories/GHSA-2wx6-wc87-rmjm


v4.1.1 (January 16th 2020)
--------------------------

update/bugfix release

- various enhancements, including:
  - add check_log_for_errors function (in easybuild.tools.run) to detect and handle multiple errors (#3118)
  - implement support for 'eb --show-ec' to show contents of specified easyconfig file (#3132)
  - also update $XDG_DATA_DIR (share/) and $GI_TYPELIB_PATH environment variables (lib*/girepository-*) in generated module files (#3133)
  - add support for --copy-ec to copy easyconfig file to specified location (#3142)
  - mention --disable-* option in --help output for boolean options enabled by default (#3151)
  - add --cuda-compute-capabilities configuration option (#3161)
- various bug fixes, including:
  - ignore imports from vsc namespace made from pkgutil.py (#3120)
  - only actually change permissions using os.chmod in adjust_permissions if the current permissions are not correct already (#3125)
  - use shutil.copyfile to just copy file contents if target path exists and is owned by someone else (#3127)
  - fix or avoid warnings that commonly arise in build log (#3129)
  - disable buffering in asyncprocess.Popen using bufsize=0, to fix run_cmd_qa missing output (#3130)
  - update pip & install wheel package in generated Singularity container recipes (#3136)
  - avoid crash in modify_env & unset unset_env_vars when using (older versions) of Python 3.5 & 3.6 by using list(...) (#3140)
  - take into account that lib64 could be a symlink to lib (or vice versa) in get_software_libdir function (#3141)
  - only parse docstring if it exists in gen_easyblock_doc_section_rst function (#3144)
  - only add useful entries for $CPATH, $(LD_)LIBRARY_PATH and $PATH (non-empty directories) (#3145, #3152)
  - fix --list-software=detailed when using Python 3 by leveraging sort_looseversions function from py2vs3 module (#3146)
  - ensure subdirectories in software install directory have correct search (exec) permission (#3147)
  - take into account that a checksum value may be a tuple of valid checksum in EasyBlock.check_checksums (#3153)
- other changes:
  - bump to Lmod 8.2.9 in GitHub CI config (#3115)
  - update copyright statements for 2020 (#3149)
  - make Hound CI code style checker ignore "Black would make changes" produced by flake8-black (#3162)


v4.1.0 (December 4th 2019)
--------------------------

update/bugfix release

- various enhancements, including:
  - performance improvements:
    - skip validation when copying EasyConfig object for extension (#3071)
    - correctly specify that ActiveMNS & co are singleton classes when using Python 3 (#3073)
    - don't call out to prohibitively expensive getRootLoggerName in getLogger, just use 'root' instead (#3074)
    - fix inconsistent module path usage that leads to repeated reloading in HMNS (#3099)
  - add support for specifying different dependency version based on processor architecture (#3047)
  - support use of glob patterns for paths to files with external modules metadata (#3075)
  - take into account that external modules may not be visible directly (due to module hierarchy) (#3083)
  - add support for including 'extensions' statement in Lua modules with Lmod 8.2.8+ (#3085, #3107, #3110)
  - add support for --sync-pr-with-develop (#3087)
  - add support for --new-branch-github, --new-pr-from-branch, --sync-branch-with-develop, --update-branch-github (#3103)
  - fix typo in docstring for new_branch_github (#3106)
- various bug fixes, including:
  - correctly handle iccifortcuda toolchain with standalone iccifort in det_toolchain_compilers (#3055)
  - init git repo with git.repo.clone() instead of copy_dir() (#3062)
  - fix regular expression so depends-on statements are recognized correctly in Tcl module files (#3065)
  - update GitPython to latest version that supports Python 2.6 in requirements.txt to fix broken test_new_update_pr (#3066)
  - imply --disable-pre-create-installdir with --inject-checksums (#3069)
  - handle patches in extensions more like normal patches (#3067)
  - take into account that platform.linux_distribution and platform.dist was removed in Python 3.8 (#3078)
  - always include mandatory easyconfig parameters in dumped easyconfig (#3081)
  - hide backup module file when using Lmod 6.x (fixes #9302) (#3089)
  - add better error message when mandatory key is missing from a dictionary easyconfig parameter (#3092)
  - also create symlinks for default modules in class module folders (#3093)
  - fix semantics of --set-default-module: only set default for specified easyconfigs, not for the ones that are installed as dependencies via --robot (#3094)
  - fix various issues in extracting comments from original easyconfig file and including them again in dumped easyconfig (#3095)
  - don't use %(version)s template in exts_default_options in dumped easyconfig (#3096)
  - fix generated module statements in case only a single version is listed in multi_deps (#3097)
  - fix broken test_show_system_info on macOS due to 'Python' binary (#3105)
  - take into account that dependency version could be a dict rather than a string value in template_constant_dict (#3111)
- other changes:
  - deprecate running EasyBuild with Python 2.6 via new check_python_version() function (#3076)
  - deprecate support for using Lmod 6.x (#3077)
  - trim set of test configurations in Travis CI (#3086)
  - flesh out env_vars_external_module from Toolchain._simulated_load_dependency_module (#3088)


v4.0.1 (October 15th 2019)
--------------------------

update/bugfix release

- various enhancements, including:
  - add 'parallel' to list of config templates (#3036)
  - add GitHub Actions workflow to run easybuild-framework test suite (#3039)
  - add 'retest' as a reason to --close-pr, to close/re-open PRs to trigger re-test in Travis (#3040)
  - define $EB_SCRIPT_PATH in 'eb' wrapper script, and consider it before location of 'eb' determined via $PATH in get_paths_for function (#3046)
  - add support for --remove-ghost-install-dirs configuration option, and warn about (potential) ghost install dirs by default when --force/--rebuild is used (#3050)
- various bug fixes, including:
  - update bootstrap script to support installing EasyBuild v4.0 (#3017)
  - fix broken test_download_repo due to archiving of easyconfigs (#3019, #3023)
  - avoid that --inject-checksums introduces list of patches for extensions as a single long line (#3025, #3034)
  - enhance regex in fix_shebang method to fix more Python/Perl shebangs + avoid patching binary files (#3029)
  - delete test gist that is created by --check-github (#3031)
  - disable templates when defining easyconfig parameters in EasyConfig.set_keys() (#3037)
  - avoid setting GC3Pie's max_in_flight to None if --job-max-jobs is not specified (#3038)
  - fix use of obtain_file method for extensions (#3042)
  - error out if some GC3Pie job failed (#3044)


v4.0.0 (September 20th 2019)
----------------------------

feature release (incl. backwards-incompatible changes)

A concise overview of major changes in EasyBuild v4.0 is available at https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-of-changes.html .

- fixed compatibility with Python 3.5+ (#2708, #2713, #2714, #2719, #2721, #2723, #2729, #2743, #2744, #2751, #2756, #2759, #2761, #2762, #2765, #2766, #2767, #2768, #2774, #2775, #2778, #2780, #2785, #2787, #2789, #2791, #2792, #2794, #2800, #2801, #2805, #2806, #2895, #2932, #2982, #2992, #3007, #3011)
  - supported Python versions: 2.6, 2.7, 3.5, 3.6, 3.7
  - some functionality from the Python standard library should be imported from the new easybuild.tools.py2vs3 package
  - see https://easybuild.readthedocs.io/en/latest/Python-2-3-compatibility.html & https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-relocated-functions-constants.html for more information

- ingested relevant code from vsc-base & vsc-install (#2708, #2713, #2714, #2763, #2790, #2993)
  - vsc-base & vsc-install are no longer required as dependencies
  - the functionality that was provided by these packages is now (mostly) available from the easybuild.base package
  - any import statements from the 'vsc' namespace will result in an error
  - see also https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-of-changes.html#ingested-functionality-from-vsc-base-and-vsc-install and https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-relocated-functions-constants.html

- setuptools is longer required (neither for installing or using EasyBuild) (#2836, #2837, #2984, #2986, #2988)
  - see also https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-of-changes.html#no-more-required-python-packages
  - this required moving some classes and constants, see https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-relocated-functions-constants.html

- the 'dummy' toolchain is deprecated and replaced by the 'system' toolchain (#2877, #3001)
  - if 'dummy' is still used as a toolchain in easyconfig files, a warning will be printed
  - use "toolchain = SYSTEM" instead
  - for more information, see https://easybuild.readthedocs.io/en/latest/System_toolchain.html

- a warning is printed when local variables in easyconfig file don't follow the recommended naming scheme (#2938, #2968)
  - see also https://easybuild.readthedocs.io/en/latest/Easyconfig-files-local-variables.html

- names of software installation directories are independent of module naming scheme by enabling --fixed-installdir-naming-scheme by default (#2999)
  - see https://easybuild.readthedocs.io/en/latest/EasyBuild4-overview-of-changes.html#fixed-installdir-naming-scheme-enabled-by-default for more information

- various other small enhancements, including:
  - use requests instead of urllib2 for 403 errors (#2695)
  - use pip requirements file in Travis (#2874)
  - add support for --fix-deprecated-easyconfigs (#2881, 2898, #2938)
  - add -L$EBROOTIMKL/lib/intel64 to $LDFLAGS for MKL (#2930)
  - handle dict-type checksums in check_checksums_for (#2974)
  - allow that icc & ifort are not actual dependencies in iccifort toolchain module (#2995)
  - define mapping for iccifort->intel for iccifort compiler-only toolchain for HMNS (#2996)
  - also consider concatenation of compiler module names to determine details of toolchain compiler component (#2997)
  - update metadata for Cray-provided external modules (#3013)
- various bug fixes, including:
  - update the PyPI trove classifiers in setup.py (#2875)
  - reverse lists for $LDFLAGS and $CPPFLAGS (#2931)
  - enhance/fix to_template_str function to do a better job at using template values in dumped easyconfigs (#2948)
  - also take into account --filter-deps when finalizing parsed dependencies to fix problem with dependency filters using version ranges (#2983)
  - fix broken --from-pr tests due to archiving of easyconfigs (#2985)
  - fixes required to avoid breaking Cray support (#3008)
  - fixes for --read-only-installdir: avoid crash with ModuleRC easyblock + also make log file in installdir read-only (#3012)
- other changes:
  - add check to ensure that --robot argument specifies an existing directory (#2086)
  - remove old scripts that are no longer useful (+ minor fixes to others) (#2897)
  - use 'command -v' to avoid requiring 'which' in 'eb' command (#2979)
  - add modluafooter & modtclfooter at the end of the generated module file (#3003)
  - print warning when 'eb' command is not found in $PATH and for empty robot search path (#3006)


v3.9.4 (August 23rd 2019)
-------------------------

update/bugfix release

- various enhancements, including:
  - add support for specifying checksum via dict providing a filename-to-checksum mapping (#2946)
  - enhance 'completed' message with how much time was needed for the installation (#2956)
  - add support for specifying tuple of alternative checksums (#2958)
  - support using 'system' as alias for 'dummy' toolchain + SYSTEM constant (#2960)
  - ensure 'docurls' easyconfig parameter value is a list of string values, not a single string value (#2963)
  - automatically enable --ignore-osdeps when using --check-contrib or --check-style (#2965)
- various bug fixes, including:
  - escape '+' in search queries + handle invalid search queries better (#2967)
  - also consider extension patches when determining for which easyconfig a given patch file is intended in --new-pr/--update-pr (#2969)
  - unset $CDPATH early on if it is defined (#2970)
  - create specified temporary log directory if it doesn't exist yet in init_logging (#2972)
  - don't indicate first multi_deps version as default in module help text when multi_deps_load_default=False (#2973)
- other changes:
  - deprecate toolchains older than gompi/2016a and foss/2016a (#2951)


v3.9.3 (July 8th 2019)
----------------------

update/bugfix release

- various enhancements, including:
  - add a URL whatis line to generated module files (#2933)
- various bug fixes, including:
  - stick to Ubuntu Trusty when testing with Python 2.6 in Travis (#2928)
  - honor --tmp-logdir when determining location of temporary log file (#2937)


v3.9.2 (June 9th 2019)
----------------------

update/bugfix release

- various enhancements, including:
  - enhance (experimental) support for generating Singularity container recipes/images (#2884, #2900, #2902, #2903, #2907, #2909, #2910, #2913, #2915)
      - add support for specifying container configuration via --container-config (--container-base option has been removed)
      - add support for providing custom template for container recipe via --container-template-recipe
      - add support for 'sif' Singularity 3.x container image format
      - add support for specifying non-image based Singularity bootstrap agents
      - install default set of OS packages in container recipes starting from scratch
      - configure Lmod and update Lmod spider cache in generated Singularity container recipes
      - configure EasyBuild via environment variables (to allow overriding configuration settings via options to 'eb' command)
      - also consider /tmp/easybuild/sources in source path (to allow seeding in sources in container build environment)
      - updated documentation is available at https://easybuild.readthedocs.io/en/latest/Containers.html
- various bug fixes, including:
  - make sure that easyconfig file for EasyBuild version being bootstrapped is found in robot search path (#2899)
  - remove interpreter options when fixing script shebang (#2905, #2906)
  - fix crash on iterated installation when using Cray toolchains (#2914)
  - disable checking of read/exec permissions when checking for availability of 'sudo' command (#2918)
- other changes:
  - stick to vsc-base<2.9.0 in bootstrap script to avoid requiring 'future' dependency (#2892)


v3.9.1 (May 20th 2019)
----------------------

update/bugfix release

- various enhancements, including:
  - add function to determine whether specified easyblock is generic or not (#2838)
  - add support to apply_regex_substitutions function to skip creation of backup (#2844)
  - add support for %(pymajver)s (& co) (#2850)
  - add support for 'fix_python_shebang_for' and 'fix_perl_shebang_for' easyconfig parameters (#2878)
  - add multi_deps information to generated module, help and whatis sections (#2882)
  - add support for 'eb --missing' ('eb -M') (#2883)
    - see also https://easybuild.readthedocs.io/en/latest/Using_the_EasyBuild_command_line.html#getting-an-overview-of-missing-installations-missing-m
- various bug fixes, including:
  - only call 'scontrol release' when there's at least one job submitted (#2834)
  - fix small bug in find_eb_script + various minor issues with tests (related to environment in which tests are run) (#2835)
  - list build dependencies *before* runtime dependencies, so dependencies listed via multi_deps are loaded first in toolchain environment (#2839)
  - allow setting parallel to 0 or False to disable adding the -j argument (#2842)
  - be more careful when using single quotes for Tcl syntax (#2847)
  - append to existing .modulerc file rather than overwriting it (if --force is used) (#2848)
  - correctly resolve template values used for extensions (#2852)
  - update template values after updating iterative easyconfig parameters (#2854)
  - add top-level directories of hierarchical module naming scheme to $MODULEPATH before loading dependencies (#2857)
  - inject dependencies specified via multi_deps before normal build dependencies (#2861)
  - include Python version(s) in PR titles auto-generated by --new-pr (#2863, #2880)
  - update HierarchicalMNS for GCCcore toolchain (#2870)
  - bump iteration index counter at the correct time (#2886)
  - don't specify --ntasks-per-node when submitting Slurm jobs (#2887)
  - fix order of easyconfig parameters in output generated by 'eb --avail-easyconfig-params --output-format rst' (#2888)
- other changes:
  - lower required version in Slurm job backend to 16.05 (#2833)
  - add Lmod 8 to test suite (#2849)
  - deprecate useless 'skip_lower' named argument in template_constant_dict, always define *lower templates (#2856)
  - fix Python classifiers in setup.py, should be (only) Python 2.6 & 2.7 (#2876)


v3.9.0 (April 12th 2019)
------------------------

feature release
- various enhancements, including:
  - add (pre)testopts easyconfig parameters (#2793)
  - add support for multi_deps easyconfig parameter (#2741, #2810, #2811, #2812, #2813, #2825, #2826, #2827, #2828)
- various bug fixes, including:
  - fix argument name in close_pr (#2752)
  - fix undefined variable 'prefix' in Compiler._set_compiler_vars (#2757)
  - fix test account for GitHub-related tests (#2760)
  - make sure read permissions are always set in permissions_step (#2770)
  - make test for dep_graph function robust against changing order of lines in resulting dot file (#2772)
  - fix problem with import_available_modules when running from easybuild-framework directory (#2786)
  - prepend location of test easyblocks to $PYTHONPATH to test_generate_software_list, rather than append (#2788)
  - use pid in backup name candidate to reduce risk of two processes colliding (#2796)
  - automatically enable --ignore-osdeps when using --preview-pr (#2799)
  - use temporary checkout of repository as robot path for --new-pr and --update-pr to determine locations for patch files (#2803)
  - avoid relying on order in which keys are processed in to_dependency (#2804)
  - fix yeb format to work with PyYAML 5 (#2809)
  - fix typo in error message for use of unknown easyconfig parameter (#2817)
  - enhance log_file_format to fix problem when %(name)s template value is used for log directory (#2818)
  - iterate over subdirectories in order in find_egg_dir_for of bootstrap script, to ensure oldest vsc-install is picked (#2819)
  - replace -Wl,--enable-new-dtags compiler option with -Wl,--disable-new-dtags in RPATH wrapper script (#2821)
  - updated COMPILER_F77 for PGI >= 19.1 (#2823)
  - added FFTW_STATIC_LIBS_MT to FFTW_MAP_CLASS, otherwise FFTW_STATIC_LIBS_MT are incorrectly defined (#2822)
  - sort available version list when selecting/generating easyconfig (#2732)
- other changes:
  - use assertEqual rather than assertEquals (which is deprecated) (#2746)
  - test with Tmod 4.1.4 (packaged in RHEL8) in Travis CI (#2747)
  - replace deps by hidden deps instead of removing them from the lists (#2748)
  - ensure non-zero exit code for all test subsuites (+ fix trivial style issues) (#2773)
  - silence printed deprecation warnings for easyconfigs/toolchains while running (easyconfigs) test suite (#2781)
  - avoid printing of messages/warnings in framework test suite (#2782)
  - enable silent mode for --new-pr and --update-pr (#2802)
  - update Travis config to reflect that PyYAML 5.x is no longer compatible with Python 2.6 (#2807)


v3.8.1 (January 29th 2019)
--------------------------

bugfix release
- various minor enhancements, including:
  - speed up checking of OS dependencies (#2703)
  - add support for 'eb --show-system-info' (#2722)
  - add support for '%(arch)s' template value in easyconfig files (x86-64, aarch64, ppc64le, ...) (#2728)
- various bug fixes, including:
  - add timestamp to reprod dir while in tmp space (#2705)
  - avoid '+' in directory name for g++ rpath wrapper (#2710)
  - pre-install vsc-install < 0.11.4 in bootstrap script to avoid requiring 'mock' Python package (#2717)
  - fix check in --merge-pr whether PR is eligible for merging in to only consider the status of the last test report (#2720)
  - don't recreate build directory when 'buildininstalldir' is enabled for iterative installations (#2724)
  - filter (CUDA) lib*/stubs paths in RPATH wrapper script (#2725)
- other changes:
  - replace 'except IOError, err:' pattern with 'except IOError as err:' for compatibility with Python 3.x (#2711)
  - make all print statements compatible with Python 3 (#2715)
  - avoid use of sys.maxint in dependencies_for (#2716)


v3.8.0 (December 18th 2018)
---------------------------

feature release
- various enhancements, including:
  - support use of version ranges in --filter-deps (#2357)
  - add support for --list-prs (#2400, #2668)
  - add support for --close-pr (#2401)
  - allow setting optarch compiler flags in the easyconfig via toolchainopts easyconfig parameter (#2595)
  - add option to skip pre-creation of install directory: --disable-pre-create-installdir (#2629, #2637)
  - flesh out setting up of configuration into dedicated 'set_up_configuration' function (#2638)
  - clean error when 'eb' is cancelled by user (#2641)
  - add support for using Slurm as backend for --job, via --job-backend=Slurm (#2642, #2666)
  - save easyblocks along with easyconfig in 'reprod' subdirectory of install directory (#2653)
  - add support for deprecating easyconfig files & toolchains (#2656)
  - changed easyconfig.update to be able to specify not to allow duplicate values (#2657)
  - move adding of dependencies to prepare step instead of check readiness step (#2674)
  - add support for disabling mapping of (sub)toolchains when --try-toolchain is used, via --disable-map-toolchains (#2682)
  - add 'astro' and 'quantum' module classes (#2693)
- various bug fixes, including:
  - make --from-pr always try to apply PR patch on top of PR target branch (#2631)
  - fix bug that could cause to silently overwrite an existing easyconfig when using --try-* (#2635)
  - don't pass down specific environment variables into submitted jobs (#2643)
  - update template constants for source URLs to use https (#2648)
  - fix lib64 fallback for 'lib'/'lib64' dirs entry in sanity_check_paths (#2649)
  - change PGI F90 Fortran compiler to pgf90 (#2650)
  - use --set-upstream-to in install-EasyBuild-develop.sh script to deal with deprecated/no longer supported --set-upstream (#2651)
  - fix order of keys in 'toolchain' value for dumped easyconfig file (name, version) + run style check on dumped easyconfigs in dump tests (#2660)
  - ensure checksums beside sources in dumped easyconfigs (#2661)
  - fix problems with easyconfig file saved in 'reprod' directory by copying it before running any installation steps (#2664)
  - make print functions more robust w.r.t. arguments being passed to format the message to be printed (#2670)
  - use 'git am' to apply patch for PRs in fetch_easyconfigs_from_pr (#2680)
  - correctly define $LIBFFT_MT for Intel MKL (#2688)
  - don't always require easyconfig files to resolve dependencies (#2690, #2692, #2697, #2698, #2699)
- fixes for Travis CI config:
  - stop testing with Lmod 6.6.3, testing with Lmod 6.5.1 is sufficient (#2627)
  - Python 2.6 requires python-daemon 1.x as dep for GC3Pie (#2673)
  - stick to idna<2.8 with Python 2.6 in Travis + distable broken test for HgRepository (#2678)
- other changes:
  - always skip symlinks in adjust_permissions (#2644)
  - flesh out 'avail_easyblocks' function from support for --list-easyblocks (#2663)
  - deprecate the ictce toolchain (#2667)
  - deprecate goolf and goolfc toolchains (#2676)
  - deprecate intel toolchains older than intel/2016a (+ iccifort & iimpi subtoolchains) (#2677)
  - deprecate ancient gompi toolchain versions (#2684)
  - use 'tar xzf' (gzip) rather than 'tar xZf' (ancient compress) to unpack *.tar.Z source files (#2686)
  - flesh out 'set_parallel' method to it can be called separately (#2687)


v3.7.1 (October 18th 2018)
--------------------------

bugfix release
- various enhancements, including:
  - generate .modulerc.lua when Lua syntax and Lmod >= 7.8 is used (#2597)
  - allow --force to use regex if --try-toolchain can not map intelligently (#2605)
  - add support for disabling modules tool version check (#2610)
  - add support to ModuleGenerator.modulerc method to also write .modulerc file (#2611)
  - check whether module file being wrapped exists in same directory as module wrapper when using Lmod 6.x (#2611)
- various bug fixes, including:
  - stop relying on 'easy_install' in bootstrap script, use 'python -m easy_install' instead (#2590)
  - fix templating of values in list_software function (#2591)
  - fix composing of lib64 fallback paths in sanity check (#2602)
  - determine file_info for all easyconfigs before any actual copying in copy_easyconfigs function (#2604)
  - also check for module wrappers in 'ModulesTool.exist' method (#2606)
  - add trailing newline to module load message if it's not there yet (#2613)
  - retain all dependencies when determining dependency tree of a toolchain (#2617)
  - protect exts_lists from templating in dump method (#2619)
  - making CUDA capability detection more robust (#2621)
- other changes:
  - lower required Lmod version to 6.5.1 (#2593)


v3.7.0 (September 25th 2018)
----------------------------

feature release
- minimal Lmod version requirement bumped to 6.6.3 (#2575)
- various enhancements, including:
  - add support to bootstrap script to force install specific EasyBuild version (#2382, #2580)
  - consider potential of multiple subtoolchains when resolving dependencies (#2464, #2465, #2466, #2585)
  - fall back to downloading using the requests Python package (if installed) when urllib2 fails due to SSL error (#2538)
  - make --try-toolchain more aware of subtoolchains (#2539)
    - subtoolchain of original toolchains are now mapped to subtoolchains of target toolchain
  - add support for BLIS and goblf toolchain that uses BLIS for BLAS (#2540)
  - allow skipping of sanity check step via 'skipsteps' easyconfig parameter (#2549)
  - add support for --check-contrib (#2551)
    - equivalent with --check-style, but also verifies presence of SHA256 checksums (+ more checks in the future)
  - added support to 'download' sources from git (#2555)
    - see https://easybuild.readthedocs.io/en/latest/Writing_easyconfig_files.html#downloading-from-a-git-repository
  - add 'parse' hook to add support for applying site-specific customisations to the 'raw' easyconfig (#2562, #2566)
    - see https://easybuild.readthedocs.io/en/develop/Hooks.html
  - lift invalidating of module caches into helper method that can be used by easyblocks (#2571)
  - always dump a fully parsed easyconfig to the 'reprod' subdir of the installation directory (#2574)
  - add 'modulerc' method to ModuleGenerator class (#2575)
- various bug fixes, including:
  - make GC3Pie stop build process if a dependency failed (#2474)
  - filter out patched files in test/ in fetch_easyconfigs_from_pr (#2547)
  - check GC3pie version using the `pkg_resources` API rather than using __version__ (which was removed in GC3Pie 2.5.0) (#2554)
  - fix enforcing of checksums for extensions (#2561, #2570, #2579)
  - skip running of configuration checks while only a single configuration level is taken into account during --show-config (#2567)
  - fix error statements in modules tool version checks (#2576)
  - fix finding of software subdirectory for specified patch file in --new-pr/--update-pr (#2577)
  - take into account dependency 'wrappers' in check_conflicts (#2583)
  - stick to pycparser < 2.19 with Python 2.6 in Travis config (#2584)
- other changes:
  - use namelower as default for 'github_account' easyconfig parameter (#2528)
  - use .counts() rather than deprecated .stats() for GC3Pie (#2573)


v3.6.2 (July 11th 2018)
-----------------------

bugfix release
- various enhancements, including:
  - add support for including environment variable that is resolved at "module load time" in user module path (#2395)
    - {RUNTIME_ENV::EXAMPLE} is replaced by value of $EXAMPLE when module is loaded
  - also support generating Docker container recipes & image via --containerize (still experimental) (#2479)
  - add support for specifying source URLs directly in 'sources' (#2520)
  - perform early 'raw' parse of provided easyconfig file to check for syntax error or faulty inputs (#2523)
  - add 'bitbucket_account' easyconfig parameter and template, and let BITBUCKET* templates use it (#2525)
- various bug fixes, including:
  - take into account --filter-deps when re-loading build dependencies in extensions_step (#2516)
  - fix for offline use of bootstrap script: ignore errors when determining source URLs if source tarballs are provided (#2517)
  - fix error message that is raised for incorrect type of value in sanity_check_paths (#2524)
- other changes:
  - move flake8 config into setup.cfg + fix style issues in easybuild/tools/options.py (#2511)
  - make test that verifies that BuildOptions does not support updating a bit more flexible (#2518)


v3.6.1 (May 28th 2018)
----------------------

bugfix release
- various enhancements, including:
  - add support for enabling fallback in sanity check to consider lib64 equivalent for seemingly missing libraries (#2477)
  - add GITHUB_LOWER_SOURCE constant (#2491)
  - add 'exts_download_dep_fail' as known easyconfig parameter (#2493)
  - add support for passing custom messages on failing sanity check for extensions (#2494)
  - add definition for fosscuda toolchain (#2507)
- various bug fixes, including:
  - make --inject-checksums always re-order source_urls/sources/patches/checksums (#2487)
  - fix git remote url in CONTRIBUTING.md (#2490)
  - make flake8 happy in easyblock.py (#2492)
  - handle missing permissions for adding labels in --new-pr (#2497)
  - restore tweaked $TMPDIR value after loading module (for sanity check) (#2498)
  - enhance get_module_path function to auto-detect generic vs software-specific easyblock class names (#2502)
  - don't blindly overwrite an existing easyconfig in tweak_one (#2504)
  - take account that PlaintextKeyring may be provided via keyrings.alt (#2505)
  - prepend location for temporary module file to $MODULEPATH with high priority + mark it as default in load_fake_module method (#2506)


v3.6.0 (April 26th 2018)
------------------------

feature release
- (experimental) support for generating Singularity container recipes & (optionally) images via 'sudo singularity' (#2332, #2480, #2481, #2482, #2483)
  - see documentation at http://easybuild.readthedocs.io/en/latest/Containers.html
- include -ftree-vectorize and -fno-math-errno in default compiler optimisation flags for GCC (#2388)
  - this significantly improves performance of generated binaries when building with a GCC-based toolchain
  - can be disabled if needed via the 'vectorize' toolchain option
- several enhancements/fixes to GitHub integration support:
  - loosen commit message requirements for --new-pr w.r.t. to patches as long as all easyconfigs are new (#2438)
  - automatically add 'new' and/or 'update' labels in --new-pr (#2384)
  - add force_in_dry_run=True to copy_file in copy_patch_files (#2442)
  - test for custom commit message when deleting a file instead of when adding a patch (#2443)
  - make diff_stat pattern also match output of older git versions in tests for --new/update-pr (#2444)
  - remove duplicates from --new-pr title (#2478)
- add support for "eb --fetch" to only download sources (even without having a modules tool installed) (#2457)
- add definitions for a bunch of new toolchains:
  - golf (#2458), gmkl (#2460), gomkl (#2455), pmkl (#2460)
  - toolchains including CUDA: gmklc, gomklc, iimklc, iompic, iomklc (#2461)
- various minor enhancements, including:
  - avoid that '--inject-checksums' adds lines longer than 120 characters (#2434)
  - enable caching of $HOME/.cache/pip in Travis config (#2435)
  - replace raw strings with bytes literal as iterator sentinels in checksum calculation (#2446)
  - new command-line option '--job-max-jobs' to cap nr of submitted build jobs with GC3Pie (#2378)
  - add configuration for houndci + flake8 (#2451)
  - add Accept header when downloading file (#2437)
  - include running of 'eb --check-github' in Travis config (#2449, #2454)
  - flesh out common code blocks in test/framework/options.py (#2452)
  - support 'depends_on' load statements in generated modules via --module-depends-on and module_depends_on easyconfig parameter (#2391)
  - fix compatibility with Modules v4.1.x (#2470)
  - add support to run_cmd to enable streaming output (#2476)
- various bug fixes, including:
  - determine whether included easyblocks are generic or not based on class they define (#2432)
  - make sure GitHub token is used in test for --preview-pr (#2436)
  - take into account that toolchain components may be hidden when determining toolchain composition (#2440)
  - stick to autopep8 1.3.4 when testing with Python 2.6 (#2462)
  - strip off .lua extension when backing up modules to ensure Lmod 6.x doesn't pick up on them (#2463)
  - check for modulecmd.tcl before modulecmd in bootstrap script to discriminate between Modules 4.1.x vs 3.2.10 (#2468)
  - fix derive_alt_pypi_url after PyPI switching to sha256 in package URLs + fix broken test for pypi_source_urls + fix bootstrap script (#2471)
  - make sure that both 'get_git_revision' and 'this_is_easybuild' return regular strings rather than Unicode strings (#2472)


v3.5.3 (March 7th 2018)
-----------------------

bugfix release
- various enhancements, including:
  - re-enable testing against environment modules, bump Lmod to 7.7.16 (#2425)
  - print which hook is being executed in the command line output (#2427)
- various bug fixes, including:
  - fix order in result of gen_list_easyblocks and gen_easyblocks_overview_rst (#2421)
  - fix target account for branch pushed when using --new-pr (#2426)


v3.5.2 (March 2nd 2018)
-----------------------

bugfix release
- various enhancements, including:
  - add functionality to skip devel module with naming scheme (#2374)
  - add pagination support in clean_gists.py (#2379)
  - allow basic compiler modulenames to be specified as keys in optarch (#2387)
  - initial set of OHPC module meta data for EasyBuild (#2392)
  - allow different target account in post_comment_in_issue (#2399)
  - declare support for RPATH linking stable (#2409)
- various bug fixes, including:
  - update bootstrap script to be compatible with Modules v4 (#2390)
  - avoid fatal error when determining glibc version on non-glibc Linux system (e.g. Alphine Linux) (#2398)
  - exclude location of RPATH wrappers from $PATH to avoid fork bomb (#2410)
  - fix target account for --update-pr in case it's different from GitHub account being used to push branch (#2419)


v3.5.1 (January 16th 2018)
--------------------------

bugfix release
- various enhancements, including:
  - add definition of giolfc toolchain (#2359)
  - add support for Environment Modules 4 (#2365)
- various bug fixes, including:
  - install SQLAlchemy < 1.2.0 with Python 2.6 in Travis config (#2367)
  - make code in easybuild/tools/job/gc3pie.py forward-compatible with GC3Pie 2.5 (#2373)


v3.5.0 (December 15th 2017)
---------------------------

feature release
- add support for implementing pre- and post-step hooks (#2343)
  - documentation available at http://easybuild.readthedocs.io/en/latest/Hooks.html
- various enhancements, including:
  - add support for foss-like toolchain with Spectrum MPI: gsolf (#2329)
  - add support for --preview-pr (#2331, #2337, #2348)
    - see also http://easybuild.readthedocs.io/en/latest/Integration_with_GitHub.html#previewing-easyconfig-pull-requests-preview-pr
  - flesh out find_extension function, hoist dict with extract commands into a constant (#2336)
  - add support for using self.start_dir rather than using self.cfg['start_dir'] (#2339)
  - add support for 'exts_default_options' easyconfig parameter (#2345, #2346)
  - allow use of 'start_dir' easyconfig parameter in extensions (#2353)
- various bug fixes, including:
  - fix typo in 'giolf' toolchain definition (#2327)
  - fix minor issues with --inject-checksums (#2333)
  - fix error message when 'gv' Python package is not available (#2340)
  - install paramiko version < 2.4.0 for Python 2.6 in Travis config (#2344)
  - disable broken log rotation, avoid duplicate logging of output of executed commands under '--debug' (#2347)
  - also include $ORIGIN and absolute paths to 'lib' and 'lib64' subdirectories in RPATH locations (#2358)
  - fix repo references in install-EasyBuild-develop.sh script (#2360)


v3.4.1 (October 17th 2017)
--------------------------

bugfix release
- various enhancements, including:
  - improve trace output for executed commands + drop requirement for --experimental for --trace (#2306)
  - add giolf toolchain definition: GCC, IntelMPI, OpenBLAS, (Sca)LAPACK and FFTW (#2310)
  - add support for --force-download and --ignore-checksums (#2313, #2314)
  - flesh out pypi_source_urls from derive_alt_pypi_url (#2319)
- various bug fixes, including:
  - also check for use of --rebuild next to --force to skip sanity check with --module-only (#2307)
  - ensure $TMPDIR is set to a short path for OpenMPI v2.x (#2311)
  - guard 'module load' commands in generated modules under --recursive-unload to avoid load storms (#2316)
  - correctly deal with use of special characters in description & co (#2320)
  - fix incorrect FFT_INC_DIR for Intel MKL (#2323)


v3.4.0 (September 10th 2017)
----------------------------

feature release
- various enhancements, including:
  - add support for backing up modules via --backup-modules (#2134)
    - enabled automatically with --module-only and --skip
    - see also http://easybuild.readthedocs.io/en/latest/Backup_modules.html
  - add support for --search-paths to extend list of locations considered by --search/-S (#2255)
  - include userInGroup check in Lua modules when installation is group-restricted (#2274)
  - add experimental support for 'eb --trace' (#2285)
    - see also http://easybuild.readthedocs.io/en/latest/Tracing_progress.html
  - add support for 'eb --inject-checksums' (#2286, #2292, #2293)
    - see also http://easybuild.readthedocs.io/en/latest/Writing_easyconfig_files.html#adding-or-replacing-checksums-using-inject-checksums
  - add support for append_paths in module generator (#2294)
- various bug fixes, including:
  - strip provided GitHub token of spaces in --install-github-token (#2270)
  - remove 'provides' line from setup.py (#2275)
  - pass down stdin in 'import' check for extensions during sanity check (#2276)
  - make sure location to 'eb' installed during stage 1 is included in $PATH during stage 2 of bootstrap procedure (#2281)
  - make resolve_path robust against None path being provided (#2282)
  - ensure clean error message on easyconfig file parse failure (#2290)
  - fix regex to avoid sucking up additional lines prior to module file path in modulefile_path (#2291)
  - fix error message when --use-ccache is used but ccache is not available in $PATH (#2295)


v3.3.1 (July 12th 2017)
-----------------------

bugfix release
- various enhancements, including:
  - add support for 'allow_prepend_abs_path' easyconfig parameter (#2254)
  - support for --merge-pr (#2266)
- various bug fixes, including:
  - resolve symlinks to location of 'eb' in get_paths_for (#2248)
  - fall back to checking location relative to 'eb' location in find_eb_script (#2249)
  - respect --suffix-modules-path value for user-specific module path extensions (#2250)
  - update EasyBuild bootstrap script to download distribute tarball from http://easybuilders.github.io/easybuild/files (#2256)
  - fix default target GitHub account/organisation for --new-pr & co + fix tests that got broken by migration to github.com/easybuilders (#2258)
  - fix checking for new easyconfigs in copy_easyconfigs, pick up specified commit message as PR title if none was provided (#2259)
  - get rid of references to hpcugent after move to github.com/easybuilders (#2261)
  - automatically enable --ignore-osdeps under --new-pr and --update-pr (#2262)


v3.3.0 (June 26th 2017)
-----------------------

feature release
- various enhancements, including:
  - clean up easyconfigs that are copied for inclusion in pull request (#2197, #2227)
  - use devel logging where relevant in easybuild.tools.toolchain (#2198)
  - check exit code for executed module commands (#2200)
  - also copy patches to installation directory & easyconfigs archive along with easyconfig file (#2202, #2241)
  - add support for SHA256 checksums (#2215)
    - also auto-detect whether provided checksum is MD5 or SHA256 based on length (if not checksum type is specified)
    - add support for --enforce-checksums, to require availability of checksums for sources/patches
    - see https://easybuild.readthedocs.io/en/latest/Writing_easyconfig_files.html#source-files-patches-and-checksums
  - add support for renaming sources on download (#2223)
    - also involves deprecating use of 2-tuple elements in list of sources, see https://easybuild.readthedocs.io/en/latest/Deprecated-functionality.html#depr-sources-2-element-tuple
  - add support for --detect-loaded-modules (#2228)
  - give extensions access to module_generator of parent (#2229)
  - pass down additional arguments to copy_dir down to shutil.copytree (#2230)
  - avoid reloading already loaded modules that extend $MODULEPATH (#2232)
- various bug fixes, including:
  - make sure test account & accompanying token is used in tests for github.py (#2220, #2224)
  - only use MPD for old versions of Intel MPI (<4.1) in mpi_cmd_for (#2221)
  - escape dots in package filename to ensure correct match in derive_alt_pypi_url (#2225)
  - fix GNU_SOURCE template by adding missing /gnu/ (#2235)
  - catch exception shutil.Error in copy_file (#2239)
  - report full error and traceback on unhandled exception in test report (#2240)
  - fix --set-default-module flag (#2243)


v3.2.1 (May 12th 2017)
----------------------

bugfix release
- various enhancements, including:
  - make hardcoded max ratio for failures in adjust_permissions configurable (#2213)
  - allow https on direct download in sources (#2214)
- various bug fixes, including:
  - bump version bootstrap script to sync with latest update (#2208)
  - fix crash during module generation when '%' character is used in description (#2209)


v3.2.0 (May 5th 2017)
---------------------

feature release
- various enhancements, including:
  - add support for marking installed module file as new default version using --set-default-module (#2110)
  - additional easyconfig parameters for documentation: docpaths, examples, site_contacts, upstream_contacts, usage (#2113)
  - add support for --allow-use-as-root-and-accept-consequences (#2123)
  - enable extraction of patches from compressed files before applying them (#2128)
  - alphabetically sort functions and methods in module_generator module (#2132)
  - introduce function ensure_iterable_license_specs (#2157)
  - bump Travis config to use Lmod 7.4 (#2176)
  - implement copy_dir function in filetools (#2177)
  - clarify error message when no software-specific easyblock was found (#2178)
  - make log.deprecated more verbose by also printing deprecation warnings to stderr (#2179)
  - add copy function to filetools for easy copying of lists of files/directories (#2180)
  - add support for --verify-easyconfig-filenames (#2185)
  - add support for --package-tool-options (#2187)
  - take into account inline trailing comments in fetch_parameters_from_easyconfig (#2192)
  - add support for customising easyconfig parameters on a per-extension basis (#2194)
  - perform sanity check after stage 2 of EasyBuild bootstrap script, module file should be in place (#2199)
  - change order in which module commands are checked, consider Lmod first (#2201)
- various bug fixes, including:
  - fix use of compiler-specific --optarch value in combination with --job (#2183)
  - call run_all_steps in regtest mode rather than running steps individually (#2203)


v3.1.2 (March 20th 2017)
------------------------

bugfix release
- fix broken packaging support by fixing ``run_cmd`` bug with ``shell=False`` (#2153)
- minor enhancements, including:
  - implement change_dir function in filetools module (#2155)
  - use checker_state in trailing whitespace style check + add dedicated test (#2160, #2169)
  - consider both pycodestyle and pep8 Python modules in style checks (#2161)
  - make bootstrap script aware various modules-related $EASYBUILD_* environment variables (#2170)
- various bug fixes, including:
  - interpret statements that extend $MODULEPATH in modpath_extensions_for method (#2104)
    - also fixes inclusion of superfluous load statements in modules installed in user HMNS module tree (cfr. #2172)
  - take into account that $PATH or $PYTHONPATH may be empty when running tests (#2149)
  - handle duplicates in --include-* (#2151)
  - exclude dependencies of dependencies that extend $MODULEPATH (#2152)
  - add ld.bfd to RPATH wrappers (#2156)
  - fix test_vsc_location, vsc.__file__ may not be available when vsc is installed as a namespace package (#2159)
  - fix reported problems with scripts & docs tests (#2164)
  - fix --try-software-version using non-greedy matching + lookahead assertion, add test for tweak_one (#2166)
  - avoid creating empty modulefile directories when using modaltsoftname (#2168)
  - fix fftw_libs for MKL without interface libraries (#2171)


v3.1.1 (March 7th 2017)
-----------------------

bugfix release
- minor enhancements, including:
  - print more useful error message when no compiler-specific optarch flag is defined (#1950)
  - add ec parameter to expand_toolchain_load() (#2103)
  - clarify unstable/closed PR warning message (#2129)
- various bug fixes, including:
  - ensure that $EBEXTSLIST* is also included in generated module under --module-only (#2112)
  - fix formatting issues in generated documentation for --list-software and --avail-easyconfig-licenses (#2121)
  - fix problem with backticks in description breaking 'fpm' packaging command (#2124)
  - replace --enable-new-dtags with --disable-new-dtags instead of removing it in RPATH wrapper script (#2131)
  - only perform is_short_modname_for sanity check in det_short_module_name if modaltsoftname is available (#2138)
  - fix logic in make_module_dep w.r.t. excluding loads for toolchain & toolchain components (#2140)
  - skip test_check_style if pep8 is not available (#2142)


v3.1.0 (February 3rd 2017)
--------------------------

feature release
- various enhancements, including:
  - ARM: GCC optimal/generic architecture compiler flags (#1974)
  - add support for --check-style to check style in easyconfig files (#1618, #2038)
  - add HOME and USER from envto available cfg file constants (#2063)
  - --optarch can now be specified on a toolchain basis (#2071)
  - implement get_cpu_features function in systemtools (#2074, #2078)
  - support use of linalg without MPI, add iimkl toolchain definition (#2082)
  - spoof HTTP request header with empty agent (#2083)
  - exclude dependencies of dependencies that extend $MODULEPATH in make_module_dep (#2091)
- various bug fixes, including:
  - make fetch_github_token more robust against RuntimeError from keyring (#2070)
  - POWER: Fix `--optarch=GENERIC` for GCC (#2073)
  - fix docstring in toolchain class (#2075)
  - skip test cases involving .yeb if PyYAML is not installed, silence test in options subsuite (#2081)
  - fix traceback with 'eb --check-github' if GitPython is not installed (#2085)
  - fix regex for determining list of patched files in GitHub diff (#2088)
  - modify robot so that it only appends dependencies of tweaked easyconfigs (#2090)
  - escape metacharacters in paths passed to re.compile in dry_run_set_dirs (#2098)
  - fix broken error message in get_toolchain_hierarchy + dedicated test case (#2099)


v3.0.2 (December 22nd 2016)
---------------------------

bugfix release
- various bug fixes, including:
  - also skip dependencies of dependencies marked as external module in get_toolchain_hierarchy (#2042)
  - disable verbose setvar in modules.py (#2044)
  - force copying of easyconfigs in --new-pr/--update-pr, even when combined with -x (#2045)
  - fix verification of filename for easyconfigs used to resolve deps (#2051)
  - skip RPATH sanity check when toolchain did not use RPATH wrappers (#2052)
  - check whether file-like paths are readable before reading them in systemtools module (#2065)
- various small enhancements, including:
  - add 'rpath' toolchain option to selectively disable use of RPATH wrappers (#2047)


v3.0.1 (November 30th 2016)
---------------------------

bugfix release
- important changes
  - always use Intel-specific MPI compiler wrappers (mpiicc, mpiicpc, mpiifort) for toolchains using
    both Intel compilers and Intel MPI (#2005)
- various small enhancements, including:
  - use setvar in modules.py to define environment variables (#2011)
  - include output of sanity_check_commands in the build log (#2020)
- various bug fixes, including:
  - fix testing of bootstrap script in Travis config (#2003)
  - use correct module syntax in bootstrap script if Lmod is not used (i.e. Tcl) (#2007)
  - fix packaging issue with non-Python scripts in easybuild/scripts (#2015)
     - fixes issue where RPATH wrapper template script (rpath_wrapper_template.sh.in) was not included in v3.0.0 release
  - make tests more robust against running headless (#2016)
  - avoid rewrapping already wrapped compiler/linker command with RPATH wrapper script (#2022)
  - fix log.error traceback due to 'raise EasyBuildError' involving a '%s' in error message (#2024)
  - make sure 'modules_tool' attribute is also defined for extensions (#2026)
  - only dump easyconfig with modified deps due to --minimal-toolchains to 'reprod' subdir of install dir (#2028)
  - avoid appending '-h' to sanity check commands specified as a string (#2030)
  - fix bug in list_software_rst: always include versionsuffix regardless of value (#2032)


v3.0.0 (November 16th 2016)
---------------------------

feature release
- backward-incompatible changes:
  - make robot always consider subtoolchains, even without --minimal-toolchains (but in reverse order) (#1973)
  - clean up behaviour that was deprecated for EasyBuild v3.0 (#1978)
  - change default config to use Lmod/Lua for modules tool/syntax, GC3Pie as job backend (#1985)
  - the minimal required version of Lmod was bumped to 5.8 (#1985)
- major new features:
  - (experimental) support for RPATH linking via --rpath (#1942)
    - see https://easybuild.readthedocs.io/en/latest/RPATH-support.html
  - add support for --consider-archived-easyconfigs (#1972)
    - see https://easybuild.readthedocs.io/en/latest/Archived-easyconfigs.html
  - stabilize --new-pr and --update-pr (#1979)
    - see https://easybuild.readthedocs.io/en/latest/Integration_with_GitHub.html
- various other small enhancements, including:
  - add support for 'devel' log level (#1815)
  - make remove_file aware of --extended-dry-run + add dedicated unit test (#1932)
  - add support for filtering out setting/updating particular environment variables from generated modules (#1943)
    - see --filter-env-vars
  - clean up output of EasyBuild bootstrap script & add version (#1944)
  - improved ARM platform/CPU detection (#1953)
  - use '0' as letter dir for funky software names that don't start with a letter, e.g., 3to2 (#1954)
  - make bootstrap script aware of vsc-install for offline installation (#1955)
  - add support for blas_family() and lapack_family() methods in Toolchain instances (#1961)
  - make copy_file dry-run aware (#1963)
  - reorganise test easyconfigs to match structure in easyconfigs repo (#1970)
  - add a toolchain compiler option for enforcing IEEE-754 conformance (#1975)
  - support for intelcuda compiler toolchain (#1976)
  - check that each glob pattern matches at least one file expand_glob_paths (important for --include-*) (#1980)
  - enhance bootstrap to auto-skip stage 0 in case a suitable setuptools is already available (#1946, #1984)
  - simplify GC3Pie version check (#1987)
  - include suggestion on how to change configuration w.r.t. modules tool/syntax (#1989)
- various bug fixes, including:
  - fix test for find_easybuild_easyconfig (#1931)
  - remove existing module file under --force/--rebuild (#1933)
  - fix combining --search and --try-* (#1937)
  - fix appending to existing buildstats in FileRepository.add_easyconfig (#1948)
  - fix handling of iterate easyconfig parameters, restore them during cleanup (#1949)
  - fix filtering loads for (hidden) build deps from generated module (#1959)
  - handle multi-flag compiler options on all types of options (#1966)
  - fix --list-software by making letter_dir_for function aware of '*' wildcard name (#1969)
  - skip dependencies of toolchain marked as external modules when determining module hierarchy (#1977)
  - bump page limit in fetch_latest_commit_sha, spit out more meaningful error if too many branches were encountered (#1981)
  - fix CUDA-related issues in HierarchicalMNS (#1986)


v2.9.0 (September 23rd 2016)
----------------------------

feature release
- note: vsc-base 2.5.4 or more recent is now required
- various small enhancements, including:
    - change option `--color` choices to auto/always/never (#1701, #1898, #1911)
    - add support for 'hidden' easyconfig parameter (#1837)
    - add support for using ccache and f90cache compiler caching tools (#1844, #1912)
        - see --use-ccache and --use-f90cache
    - update Cray metadata for 16.06 CrayPE release (#1851)
    - also include patch files in --new-pr and --update-pr (#1852)
    - handle deleted files in --new-pr (#1853)
    - add support for --install-latest-eb-release (#1861)
    - add support for hiding toolchains, see --hide-toolchains and 'hidden' key in 'toolchain' spec (#1871)
    - add template for GitHub source URL (#1872)
    - add support for combining --new-pr/--update-pr and --robot (#1881)
    - add support for --list-software and --list-installed-software (#1883, #1910, #1917)
    - print message on which extension is being installed, incl. progress counter (#1886, #1914)
    - add support for --github-org to specify GitHub organisation rather than GitHub user (#1894)
    - add support for running Lmod in debug mode (#1895)
    - avoid needless use of deepcopy, speed up support for templating in easyconfigs (#1897)
    - convert all_dependencies to a property in EasyConfig class (#1909)
    - add support for --mpi-cmd-template (#1918)
    - add support for --disable-mpi-tests (#1920)
- various bug fixes, including:
    - merge with develop when using --from-pr (#1838, #1867)
    - ensure --new-pr doesn't open empty pull requests (#1846)
    - better error handling for outdated GitPython module in --check-github (#1847)
    - fix formatting for generated easyblocks documentation (#1860)
    - make sure the robot ignores filtered dependencies (#1862)
    - honor --filter-deps under --minimal-toolchains (#1863)
    - correct format for 'param' and 'author' tags in docstrings (#1866)
    - ignore failing bootstrap test in Travis config file (#1870)
    - make sure all output of executed command is included in generated temporary log file (#1873, #1874)
    - ensure --show_hidden is used in the correct location for 'avail' with Lmod (#1875)
    - make sure self.path is passed down in copy method of EasyConfig object (#1884)
    - take into account possible multi-line modloadmsg in ModuleGeneratorLua (#1885)
    - fix extracting .bz2 source files (#1889)
    - don't resolve path to Lmod command (#1892)
    - fix skipping of stage 0 in bootstrap script (#1893)
    - fix function signature of log.deprecated compared to fancylogger.deprecated (#1896, #1899)
    - apply patch to Tcl/C environment modules tool for Tcl 8.6 support in Travis config (#1901)
    - fix combining --extended-dry-run with --from-pr (#1902)
    - also template dict keys (#1904)
    - don't pass '--try-*' command-line options to EB instance running within job script (#1908)
    - add workaround for incorrectly passing command line arguments with --job (#1915)
    - fix issues with --module-only (#1919, #1924, #1925)
        - correctly deal with specified start_dir
        - do not remove installation directory when build-in-installdir is enabled
    - make sure 'which' function returns path to a file (#1921)
    - fix :param:, :return: tags in docstrings & add test for it (#1923)


v2.8.2 (July 13th 2016)
-----------------------

bugfix release
- various small enhancements, including:
    - add support for rst output for --list-* and --avail-* (#1339)
    - add support for 'eb --check-conflicts' (#1747, #1807, #1833)
    - ensure nice error message when non-existing path is passed to apply_regex_substitutions (#1788)
    - add check for module output, empty stdout is a sign of trouble with Lmod (#1793)
    - add multi-threaded FFT to toolchain (#1802)
    - avoid special characters like '[', ']' in path to temporary directory (#1808)
    - add support for --zip-logs (#1820)
    - add support for --extra-modules (#1821)
    - add type conversion for 'checksums' and 'patches' parameter in .yeb easyconfigs (#1826, #1840)
    - add support for filtering tests by name (#1828)
    - add support for --avail-toolchain-opts (#1830, #1839)
    - use absolute path for robot and easyconfig files (#1834)
    - add backup URL for tarballs hosted on SourceForge in install_eb_deps.sh script (#1843)
- various bug fixes, including:
    - fix installation of Lua in install_eb_dep.sh script (#1789)
    - fix OpenMP flag for Cray compiler wrappers (#1794)
    - only reset $MODULEPATH before loading a module if environment was reset (#1795)
    - include vsc-install as dependency in setup.py (#1805)
    - cache $PATH & $PYTHONPATH in test setUp, restore them in tests where 'eb' is used (#1806)
    - don't reset $MODULEPATH in stage 2 of bootstrap script, support forced installation during stage 2 (#1810)
    - fix issue with templates defined by deps being required while still parsing deps (#1812)
    - skip unneeded unuse/use commands on tail of $MODULEPATH in check_module_path (#1813)
    - fix auto-convert for all *dependencies params in .yeb easyconfigs, ensure version is a string (#1818)
    - fix keyring version in Travis config (#1819)
    - fix dumping of .yeb easyconfig files in easyconfigs archive (#1822)
    - fix format of supported easyconfig templates in help output (#1825)
    - stick to pydot 1.1.0 for Python 2.6 in Travis config (#1827)


v2.8.1 (May 30th 2016)
----------------------

bugfix release
- various bug fixes, including:
    - fix error message on missing module command in bootstrap script (#1772)
    - expand ~ in paths specified to --include-* (#1774)
    - break after deleting cache entry to avoid attempt to delete cache entry again (#1776)
    - avoid changing $MODULEPATH when prepending with symlink of path already at head of $MODULEPATH (#1777)
    - filter out duplicates in find_flexlm_license (#1779)
    - stick with GitPython < 2.0 with Py2.6 in Travis configuration (#1781)
    - don't use LooseVersion to define version_major/version_minor (#1783)

v2.8.0 (May 18th 2016)
----------------------

feature + bugfix release
- significant speedup improvements of EasyBuild itself, thanks to:
    - stop creating ModulesTool instances over and over again (#1735)
    - cache result of 'module avail' calls (#1742)
- add support for using PGI as toolchain compiler (#1342, #1664, #1759, #1761, #1764)
    - incl. new toolchain definitions pompi and pomkl (#1724)
- add test configuration for Travis (#1733, #1737, #1743, #1767)
- various other enhancements, including:
    - add get_total_memory() function in systemtools module (#1623)
    - ignore __init__.py files in --include-* (#1704)
    - use -fopenmp rather than -openmp for Intel compilers, since -openmp is deprecated (#1718)
    - add modules to metadata for Cray modules (#1721)
    - make sure user write permissions are set after failed removal attempt of installation directory (#1722)
    - escape special characters in software name in find_related_easyconfigs (#1726)
    - add support for CrayPGI compiler toolchain (#1729)
    - ensure read permission to all installed files for everybody (unless other options specify otherwise) (#1731)
    - also consider $LMOD_CMD in bootstrap script (#1736)
    - translate PyPI download URL to alternate URL with a hash (#1749)
    - make get_software_libdir compatible with -x (#1750)
    - set $LMOD_REDIRECT to 'no' when initialising Lmod (#1755)
    - add test for broken modules tool setup affecting 'module use' (#1758)
- various bug fixes, including:
    - isolate 'options' tests from easyblocks other than the ones included in the tests (#1699)
    - don't run 'module purge' in tests, since EasyBuild may be made available through a module (#1702)
    - avoid rehandling --include-* options over and over again during --show-config (#1705)
    - remove useless test_cwd (#1706)
    - fix bootstrap script: make sure setuptools installed in stage0 is still available at end of stage1 (#1727)
    - forcibly create target branch in --update-pr (#1728)
    - remove check whether 'easybuild' is being imported from dir that contains easybuild/__init__.py (#1730)
    - (re)install vsc-base during stage1 using --always-copy in bootstrap script, if needed (#1732)
    - use os.path.realpath in test_wrong_modulepath to avoid symlinked path breaking the test (#1740)
    - unset $PYTHONPATH in before tested bootstrapped EasyBuild module (#1743)
    - take into account that paths in modulepath may be symlinks in test_module_caches (#1745)
    - change to install dir rather than buildpath in sanity check of extension, latter may not exist (#1746, #1748)
    - only load modules using short module names (#1754)
    - (re)load modules for build deps in extensions_step (#1762)
    - fix modpath_extensions_for method: take into account modules in Lua syntax (#1766)
    - fix broken link to VSC website in license headers (#1768)


v2.7.0 (March 20th 2016)
------------------------

feature + bugfix release
- stabilize Cray support
    - enable 'dynamic' toolchain option by default for Cray* toolchains (#1581)
    - remove FFTW from the Cray toolchains definition (#1585)
    - add external modules metadata for Cray systems (#1638)
    - fix independency of Cray toolchains w.r.t. toolchain build environment (#1641, #1647)
    - remove requirement to use --experimental for Cray toolchains (#1663)
- enable Python optimization mode in 'eb' (#1357)
- improved GitHub integration
    - improve error handling on git commands + better logging for --new-pr/--update-pr (#1590)
    - use git rather than https in --new-pr/--update-pr (#1602)
    - add -u as shorthand for --upload-test-report (#1605)
    - fix --from-pr for PRs that include renamed/deleted files (#1615)
    - add support for --install-github-token and --check-github (#1616)
    - fix fetch_easyconfigs_from_pr w.r.t. duplicate files in PRs (#1628)
- various other enhancements, including:
    - add support for --search-filename and --terse (#1577)
    - support complete bash completion (#1580)
    - add support for %(*ver)s and %(*shortver)s templates (#1595, #1604)
        - incl. %(javaver)s, %(javashortver)s, %(perlver)s, %(perlshortver)s, %(pyver)s, %(pyshortver)s, %(rver)s, %(rshortver)s
    - define HOME constant that can be used in easyconfig files (#1607)
    - implement support for generating 'swap' statements in module files (#1609)
    - add support for --show-config (#1611, #1620)
    - simplified support for --minimal-toolchains (#1614, #1619, #1622, #1625, #1646)
    - add support for --dump-env-script (#1624)
    - enhance ModulesTool.exist to also recognize partial module names (#1630)
    - improve error message for toolchain definition errors (#1631)
    - make default is_short_modname_for check less strict to support versionless external modules as deps (#1632)
    - mention hostname in comment made by --upload-test-report (#1635)
    - support providing additional relative path for prefix in external module metadata (#1637)
    - add ThematicModuleNamingScheme (#1645)
    - enhance logging format: remove logger name, mention location instead (#1649, #1654)
    - update kernel versions for SLES12 (#1659)
    - raise EasyBuildError rather than ImportError in only_if_module_is_available decorator (#1662)
- various bug fixes, including:
    - fix Lmod spider output in generated modules (#1583)
    - correctly define 'easybuild' namespaces (#1593, #1666, #1680)
        - this change requires that the setuptools Python package is available (at runtime)
        - using custom easyblocks by adding them in the Python search path ($PYTHONPATH) may require adjustments,
          i.e. also using pkg_resources.declare_namespace in the __init__.py files;
          we highly recommend to use --include-easyblocks instead,
          see https://easybuild.readthedocs.io/en/latest/Including_additional_Python_modules.html
        - note: this has the side-effect of not being able anymore to reliably use 'eb' in the parent directory of
          the easybuild-framework repository (#1667)
    - fix template for savannah.gnu.org source URL (#1601)
    - stop running 'module purge', only restore environment (#1608)
    - fix license headers: Hercules foundation is now FWO (#1629)
    - avoid that fancylogger tries to import mpi4py to determine MPI rank (#1648)
    - fix error in tests when 'file' backend is not available in Python keyring (#1650)
    - update develop install script (#1651)
    - handle allowed system deps during prepare_step rather than during parsing of easyconfig (#1652)
    - add function to find FlexLM licenses: find_flexlm_license (#1633, #1653)
    - fix availability check for external modules with partial module name (#1634, #1643)
    - fix bootstrap script to ensure setuptools is also installed (#1655)
    - fix issue in bootstrap script with vsc-base being picked up from the OS (#1656)
    - fix bootstrap script for environment where 'python' is Python 3.x (#1660)
    - remove --experimental for tests related to --package (#1665)
    - ensure path to setuptools is included in $PYTHONPATH being used to test scripts (#1671)
    - sanitize environment before initializing easyblocks (#1676)
    - remove reload statements in include.py, since they are not required and break --include-toolchains (#1679)


v2.6.0 (January 26th 2016)
--------------------------

feature + bugfix release
- add (experimental) support for opening/updating (easyconfigs) pull requests (--new-pr, --update-pr) (#1528)
- sanitize environment before each installation by undefining $PYTHON* (#1569, #1572)
- various other enhancements, including:
    - allow user-local modules with hierarchical naming schemes (--subdir-user-modules) (#1472)
    - enhance --extended-dry-run output to include paths for requirements in make_module_req (#1520)
    - rewrite read_file to use 'with' (#1534)
    - add support for eb --last-log (#1541)
    - support using fixed install dir scheme (--fixed-installdir-naming-scheme) (#1546)
    - add edge attributes for build dependencies in --dep-graph output (#1548)
    - check whether dependencies marked as external module are hidden (#1552)
    - implement support for --modules-header (#1558)
    - add support to specify 'else' body for conditional statements in modules (#1559)
    - add extra test for --include-easyblocks for generic easyblocks (#1562)
    - allow user to define the default compiler optimization level (--default-opt-level) (#1565)
    - make toolchain.get_variable more robust w.r.t. dummy toolchain (#1566)
- various bug fixes, including:
    - fix missing 'yaml' module check in tests (#1525)
    - fix 'develop' install script (#1529)
    - correctly quote FPM option values in packagin support (#1530)
    - correctly handle '.' in software name w.r.t. $EB* environment variables (#1538)
    - exclude logs and test reports from packages (#1544)
    - also pass down --job-cores for pbs_python job backend (#1547)
    - skip dependencies marked as external modules when packaging (#1550)
    - fix syntax for set_alias statement in Lua syntax (#1554)
    - handle the case of all 'offline' nodes correctly for --job (#1560)
    - fix test_modules_tool_stateless unit test for stateless ModulesTool with Lmod as modules tool (#1570)

v2.5.0 (December 17th 2015)
---------------------------

feature + bugfix release
- add support for IBM XL compilers on Power7 and PowerPC (BlueGene) (#1470)
- add support fo generic compilation using --optarch=GENERIC (#1471)
    - see also https://easybuild.readthedocs.io/en/latest/Controlling_compiler_optimization_flags.html
- update experimental support for .yeb easyconfigs (#1515)
    - support clean way to specify toolchain + dependencies in .yeb easyconfigs
- various other enhancements, including:
    - add support for 'whatis' easyconfig parameter (#1271)
    - add support for SLES 12 and kernel 3.12.x (#1412)
    - add GCCcore toolchain definition (#1451)
    - use 'diff --git' lines to determine patched files in pull request with --from-pr (#1460)
    - add proper option parser to bootstrap script (#1468)
    - add get_gcc_version() function in systemtools module (#1496)
    - don't load fake module in sanity_check_step during a dry run (#1499)
    - allow string values to be passed in make_module_req by hoisting them into a list (#1502)
    - add support for listing build dependencies as hidden dependencies (#1503)
    - also consider lib32/pkgconfig and lib64/pkgconfig for $PKG_CONFIG_PATH (#1505)
    - add support to make_module_dep to specify module to unload before loading a dependency module (#1506)
    - add support to make_module_extra to specify alternative root/version for $EBROOT/$EBVERSION (#1508)
    - packaging support is no longer considered experimental (#1510)
- various bug fixes, including:
    - also consider lib64 in sanity check performed during EasyBuild bootstrap (#1464)
    - also add description/homepage to packages created with FPM (#1469)
    - fix develop setup script to install EasyBuild-develop module in subdirectory (#1480)
    - don't create a whole set of temporary 'minimal-easyconfigs' subdirs with --minimal-toolchains (#1484)
    - only keep polling if exit code is None in run_cmd_qa, to correctly deal with negative exit codes (#1486)
    - fix bootstrap script for missing sys_platform by using newer distribute 0.6.49 in stage 0 (#1490)
    - make sure that extra custom easyconfig parameters are known for extensions (#1498)
    - add missing import for EasyBuildError in easybuild/toolchains/linalg/libsci.py (#1512)
    - isolate tests from possible system-wide configuration files (#1513)
    - only use glob in make_module_req on non-empty strings (#1519)
        - this fixes the problem where $CUDA_HOME and $CUDA_PATH are not defined in module files for CUDA

v2.4.0 (November 10th 2015)
---------------------------

feature + bugfix release
- add support for --extended-dry-run/-x (#1388, #1450, #1453, #1455)
- fix checking of sanity check paths w.r.t. discriminating between files and directories (#1436)
    - this impacts several easyconfig files where sanity_check_paths was not 100% correct
- make 'eb' script aware of Python v3.x, fall back to using python2 if required (#1411)
- add experimental support for parsing .yeb easyconfig files in YAML syntax (#1447, #1448, #1449)
    - see also https://easybuild.readthedocs.io/en/latest/Writing_yeb_easyconfig_files.html
- add experimental support for resolving dependencies with minimal toolchains (#1306)
    - see also https://easybuild.readthedocs.io/en/latest/Manipulating_dependencies.html#using-minimal-toolchains-for-dependencies
- various other enhancements, including:
    - refactor extract_cmd function to get rid of if/elif/else spaghetti blob (#1382)
    - add support for --review-pr (#1383)
    - add apply_regex_substitutions functions to perform runtime patching from easyblocks (#1388, #1458)
    - add support for specifying alternate name to be part of generated module name (#1389)
        - via 'modaltsoftname' easyconfig parameter
    - support overriding # used cores via --parallel (#1393)
    - also define $FC and $FCFLAGS in build environment (#1394)
    - add support extracting for .tar.Z files (#1396)
    - include easybuild/scripts in instalation (#1397)
    - ignore hidden directories in find_base_dir (#1413, #1415)
    - add only_if_module_is_available decorator function to guard functionality that uses optional dependencies (#1416)
    - give easyblocks the possibility to choose maxhits for run_cmd_qa (#1417)
    - use class name (string) rather than License instances as values for software license constants (#1418)
    - support controlling recursive unloading of dependencies via 'recursive_module_unload' easyconfig parameter (#1425)
    - implement basic support for type checking of easyconfig parameters (#1427)
    - support auto-converting to expected value type for easyconfig parameters (enabled by default) (#1428, #1437)
    - add support for --rebuild command line option, alternative for --force which doesn't imply --ignore-osdeps (#1435)
    - add support for Mercurial easyconfig repository (#979, #1446)
    - add dedicated class for psmpi toolchain MPI component, and use it in gpsmpi and ipsmpi toolchains (#1454)
- various bug fixes, including:
    - fix extracting of comments from an easyconfig file that includes 'tail' comments (#1381)
    - fix dev version to follow PEP-440, as required by recent setuptools versions (#1403)
        - required to avoid that setuptools transforms the version itself
        - see also https://www.python.org/dev/peps/pep-0440/#developmental-releases
    - allow get_cpu_speed to return None if CPU freq could not be determined (#1421)
    - relax sanity_check_paths in EasyBuild bootstrap script to deal with possible zipped .egg (#1422)
    - use empty list as default value for src/patches in Extension class (#1434)
    - skip symlinked files in adjust_permissions function (#1439)
    - Fix HierarchicalMNS to always use full version number (#1440)


v2.3.0 (September 2nd 2015)
---------------------------

feature + bugfix release
- requires vsc-base v2.2.4 or more recent (#1343)
    - required for mk_rst_table function in vsc.utils.docs
- various other enhancements, including:
    - add support for generating documentation for (generic) easyblocks in .rst format (#1317)
    - preserve comments in easyconfig file in EasyConfig.dump() method (#1327)
    - add --cleanup-tmpdir option (#1365)
        - enables to preserve the used temporary directory via --disable-cleanup-tmpdir
    - enhance EasyConfig.dump() to reformat dumped easyconfig according to style guidelines (#1345)
    - add support for extracting .iso files using 7z (p7zip) (#1375)
- various bug fixes, including:
    - correctly deal with special characters in template strings in EasyConfig.dump() method (#1323)
    - rework easybuild.tools.module_generator module to avoid keeping state w.r.t. fake modules (#1348)
    - fix dumping of hidden deps (#1354)
    - fix use of --job with hidden dependencies: include --hidden in submitted job script when needed (#1356)
    - fix ActiveMNS.det_full_module_name() for external modules (#1360)
    - fix EasyConfig.all_dependencies definition, fix tracking of job dependencies (#1359, #1361)
    - fix 'ModulesTool.exist' for hidden Lua module files (#1364)
    - only call EasyBlock.sanity_check_step for non-extensions (#1366)
        - this results in significant speedup when installing easyconfigs with lots of extensions, but also
          results in checking the default sanity check paths if none were defined for extensions installed as a module
    - fix using module naming schemes that were included via --include-module-naming-schemes (#1370)

v2.2.0 (July 15th 2015)
-----------------------

feature + bugfix release
- add support for using GC3Pie as a backend for --job (#1008)
    - see also https://easybuild.readthedocs.io/en/latest/Submitting_jobs.html
- add support for --include-* configuration options to include additional easyblocks, toolchains, etc. (#1301)
    - see https://easybuild.readthedocs.io/en/latest/Including_additional_Python_modules.html
- add (experimental) support for packaging installed software using FPM (#1224)
    - see https://easybuild.readthedocs.io/en/latest/Packaging_support.html
- various other enhancements, including:
    - use https for PyPI URL templates (#1286)
    - add GNU toolchain definition (#1287)
    - make bootstrap script more robust (#1289, #1325):
        - exclude 'easyblocks' pkg from sys.path to avoid that setup.py for easybuild-easyblocks picks up wrong version
        - undefine $EASYBUILD_BOOTSTRAP* environment variables, since they do not correspond with known config options
    - improve error reporting/robustness in fix_broken_easyconfigs.py script (#1290)
    - reset keep toolchain component class 'constants' every time (#1294)
    - make --strict also a build option (#1295)
    - fix purging of loaded modules in unit tests' setup method (#1297)
    - promote MigrateFromEBToHMNS to a 'production' MNS (#1302)
    - add support for --read-only-installdir and --group-writable-installdir configuration options (#1304)
    - add support for *not* expanding relative paths in prepend_paths (#1310)
    - enhance EasyConfig.dump() method to use easyconfig templates where possible (#1314, #1319, #1320, #1321)
- various bug fixes, including:
    - fix issue with cleaning up (no) logfile if --logtostdout/-l is used (#1298)
    - stop making ModulesTool class a singleton since it causes problems when multilple toolchains are in play (#1299)
    - don't modify values of 'paths' list passed as argument to prepend_paths in ModuleGenerator (#1300)
    - fix issue with EasyConfig.dump + cleanup (#1308, #1311)
    - reenable (and fix) accidentally disabled test (#1316)

v2.1.1 (May 18th 2015)
----------------------

bugfix release
- fix issue with missing load statements when --module-only is used, don't skip ready/prepare steps (#1276)
- enhance --search: only consider actual filename (not entire path), use regex syntax (#1281)
- various other bug fixes, including:
    - fix generate_software_list.py script w.r.t. dependencies marked as external modules (#1273)
    - only use $LMOD_CMD value if lmod binary can't be found in $PATH (#1275)
    - fix location of module_only build option w.r.t. default value (#1277)
    - fix combined use of --hide-deps and hiddendependencies (#1280)
    - remove log handlers that were added during tests, to ensure effective cleanup of log files (#1282)
        - this makes the unit test suite run ~3x faster!
    - define $CRAYPE_LINK_TYPE if 'dynamic' toolchain option is enabled for Cray compiler wrappers (#1283)

v2.1.0 (April 30th 2015)
------------------------

feature + bugfix release
- requires vsc-base v2.2.0 or more recent
    - added support for LoggedException
    - added support for add_flex action in GeneralOption
    - added support to GeneralOption to act on unknown configuration environment variables
- add support for only (re)generating module files: --module-only (#1018)
    - module naming scheme API is enhanced to include det_install_subdir method
    - see https://easybuild.readthedocs.io/en/latest/Partial_installations.html#module-only
- add support for generating module files in Lua syntax (note: requires Lmod as modules tool) (#1060, #1255, #1256, #1270)
    - see --module-syntax configuration option and https://easybuild.readthedocs.io/en/latest/Configuration.html#module-syntax
- deprecate log.error method in favor of raising EasyBuildError exception (#1218)
    - see https://easybuild.readthedocs.io/en/latest/Deprecated-functionality.html#depr-error-reporting
- add support for using external modules as dependencies, and to provide metadata for external modules (#1230, #1265, #1267)
    - see https://easybuild.readthedocs.io/en/latest/Using_external_modules.html
- add experimental support for Cray toolchains on top of PrgEnv modules: CrayGNU, CrayIntel, CrayCCE (#1234, #1268)
    - see https://easybuild.readthedocs.io/en/latest/Cray-support.html for more information
- various other enhancements, including:
    - clear list of checksums when using --try-software-version (#1169)
    - sort the results of searching for files (e.g., --search output) (#1214)
    - enhance test w.r.t. use of templates in cfgfile (#1217)
    - define %(DEFAULT_REPOSITORYPATH)s template for cfgfiles (see eb --avail-cfgfile-constants) (#1220)
    - also reset $LD_PRELOAD when running module commands, in case module defined $LD_PRELOAD (#1222)
    - move location of 'module use' statements in generated module file (*after* 'module load' statements) (#1232)
    - add support for --show-default-configfiles (#1240)
      - see https://easybuild.readthedocs.io/en/latest/Configuration.html#default-configuration-files
    - report error on missing configuration files, rather than ignoring them (#1240)
      - see https://easybuild.readthedocs.io/en/latest/Configuration.html#configuration-env-vars
    - clean up commit message used in easyconfig git repository (#1248)
    - add --hide-deps configuration option to specify names of software that must be installed as hidden modules (#1250)
        - see https://easybuild.readthedocs.io/en/latest/Manipulating_dependencies.html#hide-deps
    - add support for appending/prepending to --robot-paths to avoid overwriting default robot search path (#1252)
        - see also https://easybuild.readthedocs.io/en/latest/Using_the_EasyBuild_command_line.html#robot-search-path-prepend-append
    - enable detection of use of unknown $EASYBUILD-prefixed environment variables (#1253)
    - add --installpath-modules and --installpath-software configuration options (#1258)
      - see https://easybuild.readthedocs.io/en/latest/Configuration.html#installpath
    - use dedicated subdirectory in temporary directory for each test to ensure better cleanup (#1260)
    - get rid of $PROFILEREAD hack when running commands, not needed anymore (#1264)
- various bug fixes, including:
    - make bootstrap script robust against having vsc-base already available in Python search path (#1212, #1215)
    - set default value for unpack_options easyconfig parameter to '', so self.cfg.update works on it (#1229)
    - also copy rotated log files (#1238)
    - fix parsing of --download-timeout value (#1242)
    - make test_XDG_CONFIG_env_vars unit test robust against existing user config file in default location (#1259)
    - fix minor robustness issues w.r.t. $XDG_CONFIG* and $PYTHONPATH in unit tests (#1262)
    - fix issue with handling empty toolchain variables (#1263)

v2.0.0 (March 6th 2015)
-----------------------

feature + bugfix release
- requires vsc-base v2.0.3 or more recent
    - avoid deprecation warnings w.r.t. use of 'message' attribute (hpcugent/vsc-base#155)
    - fix typo in log message rendering --ignoreconfigfiles unusable (hpcugent/vsc-base#158)
- removed functionality that was deprecated for EasyBuild version 2.0 (#1143)
    - see https://easybuild.readthedocs.io/en/latest/Removed-functionality.html
    - the fix_broken_easyconfigs.py script can be used to update easyconfig files suffering from this (#1151, #1206, #1207)
    - for more information about this script, see https://easybuild.readthedocs.io/en/latest/Useful-scripts.html#fix-broken-easyconfigs-py
- stop including a crippled copy of vsc-base, include vsc-base as a proper dependency instead (#1160, #1194)
    - vsc-base is automatically installed as a dependency for easybuild-framework, if a Python installation tool is used
    - see https://easybuild.readthedocs.io/en/latest/Installation.html#required-python-packages
- various other enhancements, including:
    - add support for Linux/POWER systems (#1044)
    - major cleanup in tools/systemtools.py + significantly enhanced tests (#1044)
    - add support for 'eb -a rst', list available easyconfig parameters in ReST format (#1131)
    - add support for specifying one or more easyconfigs in combination with --from-pr (#1132)
        - see https://easybuild.readthedocs.io/en/latest/Integration_with_GitHub.html#using-easyconfigs-from-pull-requests-via-from-pr
    - define __contains__ in EasyConfig class (#1155)
    - restore support for downloading over a proxy (#1158)
        - i.e., use urllib2 rather than urllib
        - this involved sacrificing the download progress report (which was only visible in the log file)
    - let mpi_family return None if MPI is not supported by a toolchain (#1164)
    - include support for specifying system-level configuration files for EasyBuild via $XDG_CONFIG_DIRS (#1166)
        - see https://easybuild.readthedocs.io/en/latest/Configuration.html#default-configuration-files
    - make unit tests more robust (#1167, #1196)
        - see https://easybuild.readthedocs.io/en/latest/Unit-tests.html
    - add hierarchical module naming scheme categorizing modules by 'moduleclass' (#1176)
    - enhance bootstrap script to allow bootstrapping using supplied tarballs (#1184)
        - see https://easybuild.readthedocs.io/en/latest/Installation.html#advanced-bootstrapping-options
    - disable updating of Lmod user cache by default, add configuration option --update-modules-tool-cache (#1185)
        - for now, only the Lmod user cache can be updated using --update-modules-tool-cache
    - use available which() function, rather than running 'which' via run_cmd (#1192)
    - fix install-EasyBuild-develop.sh script w.r.t. vsc-base dependency (#1193)
    - also consider robot search path when looking for specified easyconfigs (#1201)
        - see https://easybuild.readthedocs.io/en/latest/Using_the_EasyBuild_command_line.html#specifying-easyconfigs
- various bug fixes, including:
    - stop triggering deprecated/no longer support functionality in unit tests (#1126)
    - fix from_pr test by including dummy easyblocks for HPL and ScaLAPACK (#1133)
    - escape use of '%' in string with command line options with --job (#1135)
    - fix handling specified patch level 0 (+ enhance tests for fetch_patches method) (#1139)
    - fix formatting issues in generated easyconfig file obtained via --try-X (#1144)
    - use log.error in tools/toolchain/toolchain.py where applicable (#1145)
    - stop hardcoding /tmp in mpi_cmd_for function (#1146, #1200)
    - correctly determine variable name for $EBEXTLIST when generating module file (#1156)
    - do not ignore exit code of failing postinstall commands (#1157)
    - fix rare case in which used easyconfig and copied easyconfig are the same (#1159)
    - always filter hidden deps from list of dependencies (#1161)
    - fix implementation of path_matches function in tools/filetools.py (#1163)
    - make sure plain text keyring is used by unit tests (#1165)
    - suppress creation of module symlinks for HierarchicalMNS (#1173)
    - sort all lists obtained via glob.glob, since they are in arbitrary order (#1187)
    - stop modifying $MODULEPATH directly in setUp/tearDown of toolchain tests (#1191)

v1.16.2 (March 6th 2015)
------------------------

(no changes compared to v1.16.1, simple version bump to stay in sync with easybuild-easyblocks)

v1.16.1 (December 19th 2014)
----------------------------

bugfix release
- fix functionality that is broken with --deprecated=2.0 or with $EASYBUILD_DEPRECATED=2.0
    - don't include easyconfig parameters for ConfigureMake in eb -a, since fallback is deprecated (#1123)
    - correctly check software_license value type (#1124)
    - fix generate_software_list.py script w.r.t. deprecated fallback to ConfigureMake (#1127)
- other bug fixes
    - fix logging issues in tests, sync with vsc-base v2.0.0 (#1120)

v1.16.0 (December 18th 2014)
----------------------------

feature + bugfix release
- deprecate automagic fallback to ConfigureMake easyblock (#1113)
    - easyconfigs should specify easyblock = 'ConfigureMake' instead of relying on the fallback mechanism
    - note: automagic fallback to ConfigureMake easyblock will be dropped in EasyBuild v2.0
    - see also https://easybuild.readthedocs.io/en/latest/Deprecated-functionality.html#configuremake-fallback
- stop triggering deprecated functionality, to enable use of --deprecated=2.0 (#1107, #1115, #1119)
    - see https://easybuild.readthedocs.io/en/latest/Deprecated-functionality.html#configuremake-fallback for more information
- various other enhancements, including:
    - add script to clean up gists created via --upload-test-report (#958)
    - also use -xHost when using Intel compilers on AMD systems (as opposed to -msse3) (#960)
    - add Python version check in eb command (#1046)
    - take versionprefix into account in HierarchicalMNS module naming scheme (#1058)
    - clean up and refactor main.py, move functionality to other modules (#1059, #1064, #1075, #1087)
    - add check in download_file function for HTTP return code + show download progress report (#1066, #1090)
    - include info log message with name and location of used easyblock (#1069)
    - add toolchains definitions for gpsmpi, gpsolf, impich, intel-para, ipsmpi toolchains (#1072, #1073)
        - support for Parastation MPI based toolchains
    - enforce that hiddendependencies is a subset of dependencies (#1078)
        - this is done to avoid that site-specific policies w.r.t. hidden modules slip into contributed easyconfigs
    - enable use of --show_hidden for avail subcommand with recent Lmod versions (#1081)
    - add --robot-paths configure option (#1080, #1093, #1095, #1114)
    - support use of %(DEFAULT_ROBOT_PATHS)s template in EasyBuild configuration files (#1100)
        - see also https://easybuild.readthedocs.io/en/latest/Using_the_EasyBuild_command_line.html#controlling-the-robot-search-path
    - use -xHost rather than -xHOST, to match Intel documentation (#1084)
    - update and cleanup README file (#1085)
    - deprecate self.moduleGenerator in favor of self.module_generator in EasyBlock (#1088)
    - also support MPICH MPI family in mpi_cmd_for function (#1098)
    - update documentation references to point to https://easybuild.readthedocs.io (#1102)
    - check for OS dependencies with both rpm and dpkg (if available) (#1111)
- various bug fixes, including:
    - fix picking required software version specified by --software-version and clean up tweak.py (#1062, #1063)
    - escape $ characters in module load message specified via modloadmsg easyconfig parameter) (#1068)
    - take available hidden modules into account in dependency resolution (#1065)
    - fix hard crash when using patch files with an empty list of sources (#1070)
    - fix Intel MKL BLACS library being used for MPICH/MPICH2-based toolchains (#1072)
    - fix regular expression in fetch_parameter_from_easyconfig_file function (#1096)
    - don’t hardcode queue names when submitting a job (#1106)
    - fix affiliation/mail address for Fotis in headers (#1105)
    - filter out /dev/null entries in patch file in det_patched_files function (#1108)
    - fix gmpolf toolchain definition, to have gmpich as MPI components (instead of gmpich2) (#1101)
        - ‘MPICH’ refers to MPICH v3.x, while MPICH2 refers to MPICH(2) v2.x (MPICH v1.x is ancient/obsolete)
        - note: this requires to reinstall the gmpolf module, using the updated easyconfig from easybuild-easyconfigs#1217

v1.15.2 (October 7th 2014)
--------------------------

bugfix release
- fix $MODULEPATH extensions for Clang/CUDA, to make goolfc/cgoolf compatible with HierarchicalMNS (#1050)
- include versionsuffix in module subdirectory with HierarchicalMNS (#1050, #1055)
- fix unit tests which were broken with bash patched for ShellShock bug (#1051)
- add definition of gimpi toolchain, required to make gimkl toolchain compatible with HierarchicalMNS (#1052)
- don't override COMPILER_MODULE_NAME obtained from ClangGCC in Clang-based toolchains (#1053)
- fix wrong code in path_to_top_of_module_tree function (#1054)
    - because of this, load statements for compilers were potentially included in higher-level modules under HierarchicalMNS

v1.15.1 (September 23rd 2014)
-----------------------------

bugfix release
- take into account that multiple modules may be extending $MODULEPATH with the same path,
  when determining path to top of module tree (see #1047)
        - this bug caused a load statement for either icc or ifort to be included in higher-level
          modules installed with an Intel-based compiler toolchain, under the HierarchicalMNS module naming scheme
- make HierarchicalMNS module naming scheme compatible with cgoolf and goolfc toolchain (#1049)
- add definition of iompi (sub)toolchain to make iomkl toolchain compatible with HierarchicalMNS (#1049)

v1.15.0 (September 12th 2014)
-----------------------------

feature + bugfix release
- various other enhancements, including:
    - fetch extension sources in fetch_step to enhance --stop=fetch (#978)
    - add iimpi toolchain definition (#993)
    - prepend robot path with download location of files when --from-pr is used (#995)
    - add support for excluding module path extensions from generated modules (#1003)
        - see 'include_modpath_extensions' easyconfig parameter
    - add support for installing hidden modules and using them as dependencies (#1009, #1021, #1023)
        - see --hidden and 'hiddendependencies' easyconfig parameter
    - stop relying on 'conflict' statement in module files to determine software name of toolchain components (#1017, #1037)
        - instead, the 'is_short_modname_for' method defined by the module naming scheme implementation is queried
    - improve error message generated for a missing easyconfig file (#1019)
    - include path where tweaked easyconfigs are placed in robot path (#1032)
    - indicate forced builds in --dry-run output (#1034)
    - fix interaction between --force and --try-toolchain --robot (#1035)
    - add --software option, disable recursion for --try-software(-X) (#1036)
- various bug fixes, including:
    - fix HierarchicalMNS crashing when MPI library is installed with a dummy toolchain (#986)
    - fix list of FFTW wrapper libraries for Intel MKL (#987)
    - fix stability of unit tests (#988, #1027, #1033)
    - make sure $SCALAPACK_INC_DIR (and $SCALAPACK_LIB_DIR) are defined when using imkl (#990)
    - fix error message on missing FFTW wrapper libs (#992)
    - fix duplicate toolchain elements in --list-toolchains output (#993)
    - filter out load statements that extend the $MODULEPATH to make the module being installed available (#1016)
    - fix conflict specification included in module files (#1017)
    - avoid --from-pr crashing hard unless --robot is used (#1022)
    - properly quote GCC version string in archived easyconfig (#1028)
    - fix issue with --repositorypath not honoring --prefix (#1031)
    - sync with latest vsc-base version to fix log order (#1039)
    - increase # commits per page for --from-pr (#1040)

v1.14.0 (July 9th 2014)
-----------------------

feature + bugfix release
- important changes
    - required Lmod version bumped to v5.6.3 (#944)
        required due to enhancements and bug fixes in Lmod, e.g. making "--terse avail" significantly faster, and
        correctly handling a prepend-path statement that includes multiple directories at once
    - required Tcl/C environment modules version set to 3.2.10 (
        - hard requirement due to fixed modulecmd segmentation fault bug, that only tends manifests itself
          when making a large amount of changes in the environment (e.g. module load <toolchain>)
    - renamed EasyBuildModuleNamingScheme to EasyBuildMNS
- enhanced custom module naming schemes functionality to support hierarchical module naming schemes (#953, #971, #975)
    - extended API for custom module naming schemes to allow tweaking different aspects of module naming
        - see easybuild/tools/module_naming_scheme/mns.py for abstract ModuleNamingScheme class
        - an example hierarchical module naming scheme is included, see HierarchicalMNS
    - split up full module names into a module subdirectory part, which becomes part of $MODULEPATH),
      and a 'short' module name (is exposed to end-users)
        - example: 'GCC/4.7.2' in 'Core' subdir, 'OpenMPI/1.6.5' in 'Compiler/GCC/4.7.2' subdir
    - make ModuleNamingScheme class a singleton, move it into easybuild.tools.module_naming_scheme.mns module
    - implement ActiveMNS wrapper class for quering active module naming scheme
    - implement toolchain inspection functions that can be used in a custom module naming scheme
        - det_toolchain_compilers, det_toolchain_mpi in easybuild.tools.module_naming_scheme.toolchain
    - significant code cleanup & enhanced unit tests
- enhance & clean up tools/modules.py (#944, #953, #963, #964, #969)
    - make ModulesTool a singleton to avoid repeating module commands over & over again needlessly
    - use 'module use', 'module unuse' rather than fiddling with $MODULEPATH directly
    - improve debug logging (include full stdout/stderr output of module commands)
    - remove deprecated functionality (add_module, remove_module, indirect module load)
- various other enhancements, including:
    - added toolchain definitions for 'common' toolchains: 'intel' and 'foss' (#956)
    - implement caching for easyconfig files, parsed easyconfigs and toolchains (#953)
    - enable --ignore-osdeps implicitely when -D, --dry-run or --dep-graph are used (#953)
    - flesh out use_group and det_parallelism function, include them in easybuild.tools.systemtools (#953)
    - make symlinking of module files part of module naming scheme API (#973)
        - list of symlinks paths can be controlled using det_module_symlink_paths() method
    - added support for new configuration options:
        - tweaking compiler flags triggered by 'optarch' toolchain options using --optarch (#949)
        - filtering out dependencies from easyconfig files using --filter-deps (#957)
        - filtering environment included in test reports with --test-report-env-filter (#959)
            e.g. --test-report-env-filter='^SSH|USER|HOSTNAME|UID|.*COOKIE.*'
        - made suffix used for module files install path configurable, using --suffix-modules-path (#973)
    - added support for additional easyconfig parameters:
        - define aliases in module files ('modaliases') (#952)
        - add print message on module load ('modloadmsg') and Tcl footer ('modtclfooter') in module files (#954, #974)
- various bug fixes, including:
    - don't try to tweak generated easyconfigs when using --try-X (#942)
    - currently create symlinks to module files modules/all under a custom module naming scheme (#953)
    - restore traceback error reporting on hard crashes (#965)

v1.13.0 (May 29th 2014)
-----------------------

feature + bugfix release
- make --try-X command line options work recursively (i.e. collaborate with --robot) (#922)
    - EasyBuild will first build a full dependency graph of the specified easyconfigs, and then apply the --try specifications
        - the elements of the dependency graph for the used toolchain and its dependencies are left untouched
    - this makes "eb foo-1.0-goolf-1.4.10.eb --try-toolchain=ictce,5.5.0 --robot" also work when 'foo' has dependencies
    - caveat: the specified easyconfig files must all use the same toolchain (version)
- add support for testing easyconfig pull requests from EasyBuild command line (#920, #924, #925, #932, #933, #938)
    - add --from-pr command line option for downloading easyconfig files from pull requests
    - add --upload-test-report command line option for uploading a detailed test report to GitHub as a gist
        - this requires specifying a GitHub username for which a GitHub token is available, using --github-user
        - with --dump-test-report, the test report can simply be dumped to file rather than being uploaded to GitHub
        - see also https://easybuild.readthedocs.io/en/latest/Integration_with_GitHub.html#uploading-test-reports-upload-test-report
- the 'makeopts' and 'premakeopts' easyconfig parameter are deprecated, and replaced by 'buildopts' and 'prebuildopts' (#918)
    - both 'makeopts' and 'premakeopts' will still be honored in future EasyBuild v1.x versions, but should no longer be used
- various other enhancements, including:
    - add --disable-cleanup-builddir command line option, to keep the build dir after a (successful) build (#853)
        - the build dir is still cleaned up by default for successful builds, i.e. --cleanup-builddir is the default
    - also consider lib32 in paths checked for $LD_LIBRARY_PATH and $LIBRARY_PATH (#912)
    - reorganize support for file/git/svn repositories into 'repository' package, making it extensible (#913)
    - add support for 'postinstallcmds' easyconfig parameter, to specify commands that need to be run after the install step (#918)
    - make 'VERSION=' part in version of C environment modules tool optional, which is required for older versions (#930)
- various bug fixes, including:
    - fix small issues in bootstrap script: correctly determine EasyBuild version and make sure modules path exists (#915)
    - fix github unit tests (#916)
    - disable useless debug logging for unit tests (#919)
    - fix unit test for --skip (#929)
    - make sure 'start_dir' can be set based on location of unpacked first source file (#931)
    - the 'vsc' package shipped with easybuild-framework is synced with vsc-base v1.9.1 (#935)
        - fancylogger (used for logging in EasyBuild) is now robust against strings containing UTF8 characters
        - the 'deprecated' logging function now does a non-strict version check (rather than an erroneous strict check)
        - the easybuild.tools.agithub module is removed, vsc.utils.rest now provides the required functionality
    - fix support for unpacking gzipped source files, don't unpack .gz files in-place in the source directory (#936)

v1.12.1 (April 25th 2014)
-------------------------

bugfix release
- return to original directory after executing a command in a subdir (#908)
- fix bootstrap with Lmod, fix issue with module function check and Lmod (#911)

v1.12.0 (April 4th 2014)
------------------------

feature + bugfix release
- various enhancements, including:
    - completed support for custom module naming schemes (#879, #904)
        - a fully parsed easyconfig file is now passed to the det_full_module_name function
        - this does require that an easyconfig file matching the dependency specification is available
    - added more features to better support using a shared install target with multiple users (#902, #903, #904)
    - further development on support for new easyconfig format (v2.0) (#844, #848)
        - not considered stable yet, so still requires using --experimental
    - enhanced bootstrap script to also support Lmod and modulecmd.tcl module tools (#869)
    - added support to run_cmd_qa function to supply a list of answers  (#887)
    - detect mismatch between definition of 'module' function and selected modules tool (#871)
        - allowing mismatch now requires --allow-modules-tool-mismatch; an empty 'module' function is simply ignored
    - provide lib64 fallback option for directories in default sanity check paths (#896)
    - add support for adding JAR files to $CLASSPATH (#898)
    - enhanced and cleaned up unit tests (#877, #880, #884, #899, #901)
    - code cleanup and refactoring
        - get rid of global variable for configuration settings in config.py, use singleton instead (#874, #888, #890, #892)
        - track build options via singleton in config.py rather than passing them around all over (#886, #889)
        - avoid parsing easyconfig files multiple times by passing a parsed easyconfig to the easyblock (#891)
        - deprecate list of tuples return type of extra_options static method (#893, #894)
        - move OS dependency check to systemtools.py module (#895)
- bug fixes, including:
         fix linking with -lcudart if CUDA is part of the toolchain, should also include -lrt (#882)

v1.11.1 (February 28th 2014)
----------------------------

bugfix release
- various bug fixes, including:
    - fix hard crash when $LMOD_CMD specified full path to lmod binary, but spider binary is not in $PATH (#861, #873)
    - fix bug in initialisation of repositories, causing problems when a repository subdirectory is specified (#852)
    - avoid long wait when dependency resolution fails if --robot is not specified (#875)

v1.11.0 (February 16th 2014)
----------------------------

feature + bugfix release
- various enhancements, including:
    - add checksum support for extensions (#807)
    - make checksum functionality more memory efficient by reading in blocks (#836)
    - rewrite of dependency solving for speed and better reporting of missing dependencies (#806, #818)
    - refactoring of main.py (#815, #828)
        - function/method signatures to pass down build options
        - move functions from main.py into easybuild.framework.X or easybuild.tools
    - provide better build statistics (#824)
    - add --experimental, --deprecated and --oldstyleconfig command line options (#838)
        - with --experimental, new but incomplete (or partially broken) features are enabled
        - with --deprecated, removed of deprecated functionality can be tested (anything deprecated will fail hard)
        - with --disable-oldstyleconfig, support for the old style configuration is disabled
    - define $LIBRARY_PATH in generated module files (#832)
    - more constants for source URLs (e.g. for downloads from bitbucket) (#831)
    - prefer $XDG_CONFIG_HOME and ~/.config/easybuild over ~/.easybuild for configuration files (#820)
    - add support for specifying footers to be appended to generated module files (#808)
        - see --modules-footer command line option
    - track version of modules tool + cleanup of modules.py (#839)
    - move actual run_cmd and rum_cmd_qa implementations from tools.filetools into tools.run (#842, #843)
    - add support for generating modules that support recursive unloading (#830)
        - see --recursive-module-unload command line option
    - add flexibility support for specifying OS dependencies (#846)
        - alternatives can be specified, e.g. ('openssl-devel', 'libssl-dev')
    - initial (incomplete) support for easyconfig files in new format (v2.0) (#810, #826, #827, #841)
        - requires --experimental to be able to experiment with format v2 easyconfig files
- various bug fixes, including:
    - fix problems with use of new-style configuration file (#821)
    - fix removal of old build directories, unless cleanupoldbuild easyconfig parameter is set (#809)
    - fix support for different types of repository path specifications (#814)
    - fix unit tests sensitive to $MODULEPATH and available easyblocks (#845)

v1.10.0 (December 24th 2013)
----------------------------

feature + bugfix release
- various enhancements, including:
    - set unique default temporary directory, add --tmpdir command line option (#695)
    - add support for computing and verifying source/patch file checksums (#774, #777, #779, #801, #802)
        - cfr. 'checksums' easyconfig parameter
    - add support for `eb --confighelp`, which prints out an example configuration file (#775)
    - add initial support for `eb` tab completion in bash shells (#775, #797, #798)
        - see also https://github.com/easybuilders/easybuild/wiki/Setting-up-tab-completion-for-bash
        - note: may be quite slow for now
    - enhancements for using Lmod as modules tool (#780, #795, #796):
        - ignore Lmod spider cache by setting $LMOD_IGNORE_CACHE (requires Lmod 5.2)
        - bump required Lmod version to v5.2
        - get rid of slow workaround for detecting module directories (only required for older Lmod versions)
        - fix version parsing for Lmod release candidates (rc)
        - improve integration with `lmod spider` by adding 'Description: ' prefix to 'module-whatis' field of module
    - add --dry-short-short/-D and --search-short/-S command line options (#781)
    - add toolchain definition for 'gompic', intended for using with CUDA-aware OpenMPI (#783)
    - add support for specifying multiple robot paths (#786)
    - add various source URL constants, add support for '%(nameletter)s' and '%(nameletterlower)s' templates (#793)
    - add 'buildininstalldir' easyconfig parameter (#794)
    - add --ignore-osdeps command line option (#799, #802)
- various bug fixes, including:
    - enable -mt_mpi compiler flag if both usempi and openmp toolchain options are enabled (#771)
    - only use libmkl_solver* libraries for Intel MKL versions prior to 10.3 (#776)
    - fix toolchain support for recent Intel tools (#785)
    - code style fixes in main.py to adhere more to PEP8 (#789)
    - make sure 'easyblock' easyconfig parameter is listed in `eb -a` (#791)
    - fix error that may pop up when using skipsteps=source (#792)

v1.9.0 (November 17th 2013)
---------------------------

feature + bugfix release
- add support for Tcl environment modules (modulecmd.tcl) (#728, #729, #739)
    - special care was taken to make sure also the DEISA variant of modulecmd.tcl can be used
- code refactoring to prepare for supporting two formats for easyconfig files (#693, #750)
    - this prepares the codebase for supporting easyconfig format v2.0
    - some initial work on adding support for the new easyconfig format is included, but it's by no means complete yet
    - the current easyconfig format (now dubbed v1.0) is still the default and only supported format, for now
    - for more details, see https://github.com/easybuilders/easybuild/wiki/Easyconfig-format-two
- various other enhancements, including:
    - include a full version of vsc-base (see the 'vsc' subdirectory) (#740)
        - this is a first step towards switching to using vsc-base as a proper dependency
    - implement get_avail_core_count function in systemtools module that takes cpusets and co into account (#700)
        - the get_core_count function is now deprecated
    - add impmkl toolchain definition (#736)
    - make regtest more robust: put holds on jobs without dependencies, release holds once all jobs are submitted (#751)
    - add support for specifying multiple alternatives for sanity check paths (#753)
    - add get_software_libdir function to modules.py (along with unit tests) (#758)
    - add support for more file extensions and constants w.r.t. sources (#738, #760, #761)
    - add MPICH2 support in mpi_cmd_for function (#761)
- various bug fixes, including:
    - fix checking of OS dependencies on Debian/Ubuntu that have 'rpm' command available (#732)
    - make unit tests more robust w.r.t. non-writeabe /tmp and loaded modules prior to starting unit tests (#752, #756)
    - also call EasyBlock's sanity check in ExtensionEasyblock if paths/commands are specified in easyconfig (#757)
    - set compiler family for dummy compiler, add definition of toolchain constant for dummy (#759)
- other
    - add build status badges for master/develop branches to README (#742)
    - add scripts for installing EasyBuild develop version or setting up git development environment (#730, #755)

v1.8.2 (October 18th 2013)
--------------------------

bugfix release
- fix regular expression used for obtaining list of modules from 'module avail' (#724)
    - modules marked as default were being hidden from EasyBuild, causing problems when they are used as dependency

v1.8.1 (October 14th 2013)
--------------------------

bugfix release
- various bug fixes, including:
    - fix bugs in regtest procedure (#713)
        - force 2nd and 3rd attempt of build in case 1st attempt failed
    - fix copying of install log to install directory (#716)
    - only create first source path if multiple paths are specified (#718)
    - detect failed PBS job submission by checking obtained job ID for None value (#713, #717, #719, #720)

v1.8.0 (October 4th 2013)
-------------------------

feature + bugfix release
- add support for using alternative module naming schemes (#679, #696, #705, #706, #707)
    - see https://github.com/easybuilders/easybuild/wiki/Using-a-custom-module-naming-scheme for documentation
    - module naming scheme classes that derive from the 'abstract' ModuleNamingScheme class can be provided to EasyBuild
        - the Python module providing the class must be available in the easybuild.tools.module_naming_scheme namespace
        - a function named 'det_full_module_name' must be implemented, that determines the module name
          in the form of an string based on the supplied dictionary(-like) argument
    - the active module naming scheme is determined by EasyBuild configuration option 'module_naming_scheme'
    - for now, only the name/version/versionsuffix/toolchain easyconfig parameters are guaranteed to be provided
        - consistently providing all easyconfig parameters (i.e., also for dependencies) requires more work (see #687)
    - implementing this involved a number of intrusive changes:
        - the API of the modules.py module needed to be changed, breaking backward compatibility
            - the function for which the signatures were modified are considered to be internal to the framework,
              so this should have very minor impact w.r.t. easyblocks not included with EasyBuild
            - affected functions include: available, exists, show, modulefile_path, dependencies_for
        - the format for specifying dependencies was extended, to allow for specifying a custom toolchain
            - this allows to fix inaccurate dependency specifications,
              like "('OpenMPI', '1.6.4-GCC-4.7.2')" to "('OpenMPI', '1.6.4', '', ('GCC', '4.7.2'))"
            - see also https://github.com/easybuilders/easybuild-easyconfigs/pull/431
        - the recommended version for Lmod was bumped to v5.1.5
            - using earlier 5.x version still works, but may be very slow when 'available' is used,
              due to bugs and a missing feature in Lmod versions prior to v5.1.5 on which we rely
- various other enhancements, including:
    - only (try to) change group id if it is different from what is wanted (#685)
    - added toy build unit test (#688)
    - support for specifying a list of source paths in EasyBuild configuration (#690, #702)
    - add function to determine CPU clock speed in systemtools.py (#694, #699)
- various bug fixes, including:
    - avoid importing toolchain modules over and over again to make toolchain constants available in toolchain module (#679)
    - only change the group id if current gid is different from what we want in adjust_permissions function (#685)
    - restore original environment after running 'module purge' (#698)
        - important sidenote: this results in resetting the entire environment, and has impact on the sanity check step;
          any environment variables that are set before the EasyBlock.sanity_check_step method fires, are no longer there
          when the sanity check commands are run (cfr. https://github.com/easybuilders/easybuild-easyblocks/pull/268)

v1.7.0 (September 2nd 2013)
---------------------------

feature + bugfix release
- various enhancements, including:
    - also search for patch files in directory where easyconfig file is located (#667)
    - reduce false positives in reporting of possible errors messages (#669)
    - make module update $ACLOCAL if a share/aclocal subdir is found (#670)
    - add 'unwanted_env_vars' easyconfig parameter to list environment variables to unset during install procedure (#673)
    - add support for updating list easyconfig values (next to string values) (#676)
    - add --dry-run command line option which prints installation overview for specified easyconfig files (#677)
- various bug fixes, including:
    - ensure that all extensions are listed in $EBEXTSLISTX set by module, also when using --skip (#671)
    - report reason for failed sanity check for extensions (#672, #678)
    - fix --list-toolchains command line option (#675)

v1.6.0 (July 11th 2013)
-----------------------

feature + bugfix release
- added support for using Lmod as module tool (refs #645)
- various other enhancements, including:
    - allow prepending to/appending to/overwriting list easyconfig parameters using --try-amend-X (refs #658, #664)
- various bug fixes, including:
    - add salt to temporary log file name (refs #656, #665)
    - fix determining CPU architecture on Rasberry Pi (ARM) systems (refs #655, #662)
    - fix support for determining base path of tarballs containing a single file (refs #660)

v1.5.0 (June 1st 2013)
----------------------

feature + bugfix release
- various 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://easybuild.readthedocs.io/en/latest/Installation.html#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
