Release Notes

Release 3.3.1 (Feb 2, 2017)

  • doc: Update Quickstart documentation
  • fix: Support package names with dashes
  • fix: Build of Python script with future statements
  • fix: Ensure that order of basis_install arguments does not matter
  • fix: Use BASIS_GE_CONFIG instead of (deprecated) $<CONFIGURATION>
  • fix: BASIS_DIR used to configure test projects
  • fix: Consider $<CONFIG> subdirectory in executable target info path
  • fix: Use per-configuration Doxygen configuration file with $<CONFIG> replaced
  • fix: Have Doxygen ignore script target <target_build_tmp>.dir/build/ directories
  • fix: Build of Python script with future statements
  • fix: Skip list(REMOVE_ITEMS) in basis_finalize_targets when TARGETS list empty
  • fix: Make [PROJECT_]OTHER_DIRS absolute
  • fix: Duplicate ‘lib’ target issue
  • fix: When looking for multiple package versions, look in user DEPENDS path first
  • del: Remove obsolete FindOpenCV module

Release 3.3.0 (Apr 19, 2016)

  • Changed license to standard BSD 2-clause License without SBIA specific terms.
  • Moved project to new GitHub repositories with big objects from history removed.
  • Moved SBIA project template to separate repository.
  • CMake BASIS Modules and Find modules available in separate Git repositories.
  • Enhanced project modularization support.
  • Add C++11 compiler flags by specifying LANGUAGES CXX-11 in BasisProject.cmake file.
  • Added Find modules for: TBB, ARPACK, UMFPACK, Eigen3, FLANN, Python, Jython.
  • Added basis_project attributes: SOVERSION, DEFAULT_MODULES, TOOLS_DIR, OTHER_DIRS.
  • Support separate CODE_DIR and TOOLS_DIR for library and application code.
  • Added BUILD_APPLICATIONS option when TOOLS_DIR/CMakeLists.txt exists.
  • Added HAVE_<Package> and HAVE_<Package>_<Module> defines.
  • Replace USE_<Package> by more common WITH_<Package> options.
  • Changed order of dependencies discovery and inclusion of Depends.cmake file
  • Use file of other module included when declared as dependency of a module.
  • Modified basis_add_subdirectory to support specification of module directory.
  • Added basis_find_package option: OPTIONAL_COMPONENTS.
  • Modified basis_find_package to add DEPENDS_<Package>_DIR cache entry instead of <Package>_DIR for either root installation directory or location of <Package>Config.cmake file. Allow alternative cmake command-line arguments such as <Package>_ROOT and <Package>_DIR to initialize package search paths.
  • Support specification of alternative package versions of dependencies.
  • Declare dependencies on other modules using <Package>{<Module1>,<Module2>} syntax.
  • Enable use of system installation of Sphinx extensions.
  • The ImportTools module is by default no longer included to reduce configure time.
  • New basis_add_doc Doxygen options: PREDEFINED, EXCLUDE_BASIS_MODULES, EXCLUDE_BASIS_UTILITIES.
  • Allow generator expressions in list of source files and include directories.
  • Updated included GTest and GMock source files.
  • Download release packages from GitHub directly during bootstrapping.
  • Fixed import of project modules from project configuration file.
  • Fixed update of script configuration cache and build script.
  • Fixed re-inclusion of package use file when additional components are needed/discovered.
  • Fixed missing dependencies in module dependency DAG analysis.
  • Removed warning about missing CTestConfig.cmake file.

Release 3.2.0 (Oct 16, 2015)

  • Compatibility with CMake 3.
  • Compatibility with Python 3.
  • Enable build of shared libraries from MATLAB source files.
  • Bug fixes.

Release 3.1.0 (Mar 28, 2014)

  • Custom project layout by overriding the default directory names.
  • Revised concept of project modules vs. subprojects.
  • Enable build of each module by default.
  • Enhanced documentation of project modularization.
  • Added project configuraton how-to detailing the various configuration files.
  • Allow - and _ in project name.
  • Allow use of characters -, _, and + in target names.
  • Various improvements to reduce build configuration time.
  • Require explicit declaration of link dependency to BASIS Utilities.
  • Make RPATH setting optional.
  • Root documentation files such as README and COPYING file are now optional.
  • Conversion of target name to UID is now disabled by default.
  • Added shell script which performs the Quick Start steps.
  • Default CMakeList.txt template bootstraps BASIS if no installation found.
  • Fixed addition of shared libraries.
  • Fixed basis_set_project_property(APPEND PROJECT OtherModule ...).
  • Fixed TEST property used by basis_build_script_library.
  • Fixed help output of basisproject command.

Release 3.0.0 (Jan 15, 2014)

  • Slight project name change to “CMake BASIS” (yet usually just referred to as BASIS).
  • Generalized templates allow any organization to use BASIS.
  • All SBIA specific functionality has been separated out and is now optional.
  • Customizable project templates and substitution parameters.
  • Default project template configurable during installation using the DEFAULT_TEMPLATE CMake option.
  • Support for binary project template files.
  • Multiple new Sphinx themes available for HTML documentation.
  • Updated and improved introductory presentation slides.
  • Improved and easier to read documentation.
  • Hosting new web site of Open Source CMake BASIS project on GitHub.

Release 2.1.4 (Apr 20, 2013)

  • Fixed issue with non-existent PROJECT_SUBDIRS, in particular, the default data subdirectory.
  • Fixed paths to executable targets imported from BASIS when it is part of the same “bundle” build.
  • Increase timeout for determining MATLAB version as MATLAB starts up very slow the first time.
  • Modify basis_get_matlab_version() to also set MATLAB_RELEASE if called with no argument.

Release 2.1.3 (Mar 1, 2013)

  • Make import of basis.utilities Bash/Python modules more robust against filesystem changes.
  • Support direct submission of Bash executables to Oracle Grid Engine (SGE).
  • Added CMake Find module for AFNI programs.
  • Added PROJECT_SUBDIRS CMake variable whichs allows developers to specify additional root subdirectories.
  • Set CPACK_PACKAGE_CONTACT by default to PROJECT_CONTACT.
  • Fixed paths to bundled modules to be absolute.
  • Fixed possible infinite recursion in basis_get_target_link_libraries.
  • Fixed minor bug in basistest-master which wrote file “2” when an error occurred.

Release 2.1.2 (Oct 31, 2012)

  • Modified basisproject tool to only update template version in root CMakeLists.txt if called with -u.
  • Modified error message of basisproject tool to not mislead user.
  • Fixed endless loop in Bash import() function when module not found.
  • Fixed readonly warning of COPYRIGHT, LICENSE, or CONTACT Bash variables.
  • Fixed relative path of executable target info maps of Bash, Perl, and Python utilities.
  • Fixed base directory used to make such relative paths absolute.
  • Fixed target name of Python which command used by C++ utilities.
  • Fixed Doxygen comments to avoid warnings during build of API documentation.
  • Fixed installation of API documentation as part of nightly test.

Release 2.1.1 (Oct 25, 2012)

  • Modified FindOpenCV.cmake module to still find OpenCV 2 even if CMake configuration file missing.
  • Reset cached, non-internal <PKG>_* variables if <PKG>_DIR changed.
  • Determine MATLAB version again after MATLAB_EXECUTABLE changed.
  • Changed output directory of MatlabVersion.txt file in build tree.
  • Fixed issue with build of MEX-files which link to libraries with filenames such as .so.1.
  • Modified basisproject tool and project templates to only store “differences” of templates.
  • Changed SBIA Sphinx style of search box in sidebar of web pages.
  • Changed PDF names in template doc/CMakeLists.txt and revised CMake code further.
  • Renamed documentation files.
  • Added template file for ChangeLog.
  • Documented changes of BASIS itself.
  • Updated BASIS project files to latest project template.

Release 2.1.0 (Sep 20, 2012)

  • Changed SBIA Sphinx theme for software web pages.
  • Extended project template by template files for web site.
  • Added --[no]doc-rst option to basisproject tool.
  • Added separate ModuleConfig.cmake.in and ModuleUse.cmake.in template files.
  • Added FindSVMTorch.cmake module.
  • Modified FindSphinx.cmake module to set Sphinx_DIR which is saved to BASISConfig.cmake.
  • Modified generated executable target info to use relative paths only to executables of same package/bundle.
  • Fixed problem of missing Python basis.py module if used as <package>.basis in script.
  • Fixed visibility of ITK_DIR inherited from BASIS if ITK used by other project.
  • Modified basis_find_packages() to find configuration files of other modules or bundled packages again.
  • Fixed basis_use_package() to use the <Package>_USE_FILE variable.
  • Fixed CMake package configuration variable prefix (NS) for modules.
  • Fixed install(EXPORT) error when project/module does not install any target.

Release 2.0.1 (Sep 17, 2012)

  • Added bundle installation scheme.
  • Extended C++ function splitext() to optionally do a case insensitive comparison to the given extensions.
  • Modified C++ function splitext() to only consider the specified extensions if any.
  • Modified default Sphinx configuration to use arabic page numbers in PDF.
  • Install Sphinx themes and extensions only if Sphinx found or USE_Sphinx set to ON, respectively.
  • Fixed basis_get_last_changed_revision() for the case where repository is just initialized (r0).
  • Fixed basis_install_directory() to account for DESTDIR environment variable.
  • Fixed problem with file/directory named “a” in current working directory and Bash function _basis_executabletargetinfo_sanitize().
  • Fixed compilation of Python modules for Jython.
  • Fixed setting of <Package>_FOUND to FALSE if USE_<Package> is OFF.

Release 2.0.0 (Aug 28, 2012)

  • Added support for Jyhton.
  • Enabled use of BASIS utilities for scripting outside the scope of a project.
  • Add code of BASIS_*_UTILITIES macros automatically without macro.
  • During configuration, generate single BASIS utilities module for scripting
  • Support lib/ directory for scripted modules.
  • Extended basis_add_library() to add single build target for entire scripted package.
  • Enabled build of MATLAB wrapper executable if MCC not available.
  • Add paths of module libraries via basis_target_link_libraries() to default search path of executable scripts.
  • Added generic FindPythonModules.cmake module.
  • Allow namespace identifier of project that differs from project name.
  • Set RPATH of executables and shared libraries.
  • Added import() function for Bash.
  • Use wrapper for sphinx-build which unsets PYTHONHOME if set.
  • Converted Doxygen pages to reStructuredText.
  • Added remaining C++ utility functions to proper Doxygen group.
  • Added hint regarding M-file shadowing MEX-file error message of MCC.
  • Documented BASIS_SITE_DIRS option and installation of public modules.
  • Updated installation guide.
  • Do not add <Pkg>_DIR variables set in config file to cache if package is not used.
  • Leading dot (.) for hidden files no longer falsly interpreted by C++ utility functions as file extension.
  • Remove “sbia” or “SBIA” from namespace of BASIS Utilities.
  • Change namespace of project-specific C++ utilities to project-namespace without “basis” subnamespace.
  • Print help of optional positional arguments last in usage generated by C++ CmdLine object.
  • Mark <Module>_DIR variables as advanced.
  • Fixed issue of suppressed MCC errors in mccBuild.log.
  • Look for required dependencies first, then for optional packages.
  • Fixed bug regarding OUTPUT_NAME argument to basis_add_doc().
  • Fixed compilation of Jython modules.
  • Look also for additional components of already found package/dependency.
  • Compile Python modules also for use with Jython if BASIS_COMPILE_SCRIPTS is enabled.

Release 1.3.0 (Jun 5, 2012)

  • Updated project template files. Version of new template files is 1.4.
  • Extended and improved build and installation instructions.
  • Improved finding of other packages using CMAKE_PATH_PREFIX and CMake’s package registry.
  • Updated compatibility with Slicer version 4.1 and current trunk.
  • Revised CMake modules FindBLAS.cmake, FindMATLAB.cmake, FindMOSEK.cmake, and FindOpenCV.cmake.
  • Added FindPythonInterp.cmake module copied from CMake 2.8.6.
  • Added BASH module script path.sh. Implemented get_real_path() and clean_path() functions.
  • Added dependencies among BASIS Utilities and other build targets.
  • Added stdio.h C++ module which can be used to output text in terminal automatically wrapped at width of terminal.
  • Modified C++ implementation of get_executable_path() to look for executable on PATH if not known.
  • Modified main Doxygen filter to process MATLAB scripts as well.
  • Modified BASIS_<LANG>_UTILITIES variables to expand to a single line only.
  • Modified overwritten find_package() function to reset CMAKE_FIND_LIBRARY_SUFFIXES each time.
  • Added support for documentation generation from reStructuredText sources using Sphinx.
  • Added Sphinx extensions breathe and doxylink which can be used to link to Doxygen documentation.
  • Added Sphinx theme for use at SBIA.
  • Added cRelease to config.h which shall replace the now deprecated cVersionAndRevision constant.
  • Renamed PROJECT_VERSION_AND_REVISION to PROJECT_RELEASE.
  • Changed return value of execute_process() implementations in Python and Perl.
  • Changed name of uninstaller from uninstall_<package> to uninstall-<package>.
  • Changed BASIS_DOXYGEN_ALL to BASIS_ALL_DOC.
  • Changed default name of Doxygen build targets from api to apidoc.
  • Fixed use of WINDOWS instead of WIN32 in CMake code.
  • Fixed exclude patterns used for source package generation.
  • Fixed bug in basis_get_target_location().
  • Fixed exclusion of config.h from installation if unused.
  • Fixed Windows Command file generation to allow for space characters in script file path.
  • Fixed order of positional arguments in help output generated by C++ command-line parsing library.
  • Fixed bug in C++ implementation of split_path().
  • Fixed basisproject command to avoid conflicts due to update of template version in root CMakeLists.txt file.
  • Fixed bug in basis_add_(executable|library|mcc|mex)_target() functions in case of source file specified as first argument.
  • Fixed deinstallation of __init__.py files that are yet in use by other packages.
  • Fixed BASH function basis_array_to_quoted_string().

Release 1.2.3 (Apr 12, 2012)

  • Uninstall previously installed project as part of Nightly tests before new installation.
  • Modified basisproject tool to avoid conflicts upon update of an existing project.
  • Added separate target to generate __init__.py modules.
  • Added PYTHON_EXECUTABLE, PERL_EXECUTABLE, and BASH_EXECUTABLE to BASIS configuration file.
  • Rewrote INSTALL-basis.txt as how-to guide which is part of generated BASIS documentation.
  • Documented advanced CMake options/variables in installation how-to guide.
  • Replaced obsolete BASIS_CMD_* constants.
  • Fixed Perl implementation of get_executable_path() to simplify paths.
  • Fixed “use lib” statements of BASIS_PERL_UTILITIES macro.

Release 1.2.2 (Apr 4, 2012)

  • Fixed search path of Python modules in Python utilities. This bug affected the basis.execute_process() function if the build tree versions of the executables should be used.
  • Fixed CMake function basis_install_directory() to actually make relative source path absolute and changed it to check arguments to identify user mistakes.
  • Documented dependency on ITK in INSTALL file.
  • Detailed error message of basistest-driver when built without ITK.

Release 1.2.1 (Mar 21, 2012)

  • Exclude directories of header files and libraries imported from dependent packages from CMake package configuration (file <Package>Config.cmake).
  • Fixed implementation of C++ function get_real_path() to resolve all symbolic links encountered in file path.
  • Fixed bug in C++ function executing_in_build_tree() in case the path of the build directory contains a symbolic link.

Release 1.2.0 (Feb 29, 2012)

  • Includes new project template version 1.2.
  • Add FindOpenCV.cmake module and fix issues with cv.h file which is part of PerlLibs.
  • Modify FindBoostNumericBindings.cmake module to look for header files in boost-numeric-bindings subdirectory.
  • Change link to public BASIS project page. Do not use SourceForge project page any more.
  • Fixed use of CMake’s execute_process() command to install documentation in basistest.ctest script.
  • Fixed Doxygen warning regarding references in .dox files which refer to the BASIS documentation.
  • Fixed issue with use of STREQUAL instead of MATCHES for string comparison in CMake function basis_set_target_properties().

Release 1.0.0 (Feb 18, 2012)

  • Allow developers to disable configuration of public header files.
  • Modified basistest script to allow for manual execution in existing build tree.
  • Added functions make_directory()/remove_directory() to C++ utilities.
  • Changed build configuration Coverage, and added MemCheck build configuration.
  • Extended basistest CTest script. - Optionally perform installation step after successful test. - Do not run tests if configuration or build failed.
  • Fixed removal of obsolete public header files from build tree.
  • Fixed bugs in subprocess.cxx module of C++ utilities.
  • Fixed value of CMAKE_PROJECT_NAME variable in CMake cache.

Release 1.0.0rc1 (Dec 16, 2011)

  • Added uninstaller script which is independent of build tree.
  • Support version numbers as used for release candidates (e.g. 1.0rc1).
  • Allow modules to declare top-level project as dependency.
  • Allow package dependency specifications which include minimum version (e.g. Boost-1.45).
  • Added test driver based on either ITK 3 or ITK 4 intended for image regression tests.
  • Changed namespace of all C++ utilities from sbia::<project> to sbia::basis.
  • Modified help output of C++ command-line parsing library to standard output.
  • Added is_file(), is_dir(), and exists() functions to path module of C++ utilities.
  • Modified style of API documentation generated by Doxygen.
  • Minor changes of generated API documentation.
  • Converted plain text documentation files to Doxygen pages.
  • Revised handling of root documentation files AUTHORS.txt, COPYING.txt, README.txt, INSTALL.txt, and WELCOME.txt.
  • Modified Python utilities to ensure compatibility with Python 2.4.
  • Modified basis_add_test() CMake function to support signature of CMake’s add_test().
  • Added basis_dump_variables() CMake function which dumps all currently defined CMake variables to a CMake script.
  • Added import target to FindNiftiCLib.cmake module.
  • Fixed ExecutableTargetInfo module of C++ utilities when build inside an IDE such as Visual Studio.
  • Fixed installation of symbolic links for modules.
  • Fixed test coverage extra glob and exclude expressions.
  • Fixed bug in schedule_date() function of basistest-master script.
  • Fixed FindMOSEK.cmake module.

Pre-Release 0.3.0 (Nov 22, 2011)

  • Implemented support for project modularization following the example of the ITK 4 project.
  • Added support for implementation of Slicer Extension.

Pre-Release 0.2.2 (Nov 4, 2011)

  • Fixed installation of API documentation.
  • Fixed Python and Perl module paths in CMake package configuration of BASIS installation.

Pre-Release 0.2.1 (Nov 3, 2011)

  • Fixed basis_configure_sources() function to account for already pre-configured sources in the build tree.

Pre-Release 0.2.0 (Nov 2, 2011)

  • Fixed problems regarding creation of symbolic links when executable name is identical to project name.
  • Changed default installation path sinfix to sbia/<project> and added advanced BASIS_INSTALL_SINFIX CMake variable.
  • Changed default installation path of auxiliary data files to <prefix>/share/<sinfix>/data/.
  • Fixed and extended package Find modules.
  • Added BUILD_EXAMPLE option to build configuration of BASIS projects.
  • Added basis_get_relative_path() function.
  • Enabled configuration of .in source files passed to basis_add_executable() and basis_add_library().
  • Enabled optional use of target UIDs and added the advanced option BASIS_USE_TARGET_UIDS which is OFF by default.
  • Removed BASIS_CONFIG_PREFIX constant.
  • Removed obsolete find_basis_package() macro.
  • Fixed installation path of package configuration files to <prefix>/lib/cmake/<project>/.
  • Changed namespace of project-specific BASIS C++ utilities to sbia::<project>::basis.
  • Fixed bug in implementation of executabletargetinfo.sh module for BASH.
  • Improved uninstall target used for Makefile-based deinstallation.

Pre-Release 0.1.8 (Oct 31, 2011)

  • Fixed bug in basis_target_uid() which caused a failure when configuring a project that uses ITK 4.

Pre-Release 0.1.7 (Oct 31, 2011)

  • Fixed build of executables using the MATLAB Compiler in MATLAB mode. Bug introduced in Pre-Release 0.1.5 (Oct 18, 2011).
  • Moved definition of BUILD_*_UTILITIES options to root CMakeLists.txt to fix build of tests.

Pre-Release 0.1.6 (Oct 31, 2011)

  • Enabled build on Windows.
  • Added BUILD_*_UTILITIES options.
  • Fixed bugs in basisproject: Remove trailing slashes from specified root directory.
  • Modified project tool to enable --force of removal of non-empty directories.
  • Modified project tool to no longer make use of the .basis/cache file.
  • Added --useopt option to basisproject tool. Kept deprecated --optuse option to maintain backwards compatibility.
  • Added --[no]config* options to project tool. Kept deprecated --[no]conf-* options to maintain backwards compatibility.
  • Removed configuration files from standard project template.
  • Added Getting Started tutorial and corresponding example source files.

Pre-Release 0.1.5 (Oct 18, 2011)

  • Modified INSTALL_SINFIX from string to boolean switch. The <sinfix> is now either not used or corresponds to the project name in lowercase.
  • Added missing --[no]include option to basisproject tool.
  • By default, basisproject uses project template corresponding to --standard option.
  • Modified basis_include_directories() and basis_link_directories() to make relative paths absolute using the current source directory.
  • Fixed basis_find_package().
  • Fixed bugs related to build of targets using MATLAB Compiler or MEX script.
  • Extended FindMATLAB.cmake module to also look for matlab, mcc, mex, and mexext executables.
  • basis_add_mcc_target() does not accept link dependencies as arguments any more. These should be given using basis_target_link_libraries().
  • Added MFILE property to MEX-file targets which allows the specification of a MATLAB source file containing a function prototype with documentation.
  • Added overwrite’s of CMake’s include_directories() and link_directories() commands. Otherwise, BASIS would not know about directories added by so-called external use files (e.g., UseITK.cmake).
  • Updated documentation.

Pre-Release 0.1.4 (Oct 14, 2011)

  • Added yet another missing include statement.
  • Fixed issue with CMake’s FindPerlLibs.cmake module on Ubuntu 11.10 and Mac OS X Lion.
  • Fixed linker error of C++ unit tests regarding undefined pthread references on Ubuntu 11.10.
  • Do not cause compiler error if HAVE_SSTREAM is already set to a different value. Fixed build of test project on Ubuntu 11.10.

Pre-Release 0.1.3 (Oct 13, 2011)

  • Modified basisproject tool to store template files only in top level .basis/ directory.

Pre-Release 0.1.2 (Oct 13, 2011)

  • Fixed bug regarding BASIS_LIBRARY_DIR which affected the build of BASIS itself.

Pre-Release 0.1.1 (Oct 12, 2011)

  • Added missing include statements.
  • Fixed implementation of Subprocess::split() and Subprocess::to_string().
  • Completed README, COPYING, and INSTALL documents.
  • Removed obsolete Doxygen filters.
  • Reorganized documentation files.

Pre-Release 0.1.0 (Oct 5, 2011)

  • First pre-release for internal use at SBIA.