/BASIS

CMake BASIS makes it easy to create sharable software and libraries that work together. This is accomplished by combining and documenting some of the best practices and utilities available. This project supplies a fully integrated suite of functionality to make the whole process seamless!

Primary LanguageC++OtherNOASSERTION

=========== CMake BASIS

Build Status

The CMake Build system And Software Implementation Standard (BASIS) makes it easy to create sharable software and libraries that work together. This is accomplished by combining and documenting some of the best practices and utilities available. More importantly, BASIS supplies a fully integrated suite of functionality to make the whole process seamless!

Homepage | GitHub | SourceForge | Open Hub (Ohloh) | Travis CI

Features

Project Creation

  • Quick project setup with mad-libs style text substitution
  • Customizable project templates

Standards

  • Filesystem layout standards
  • Basic software implementation standards
  • Command-line parsing standards
  • Guidelines on coding style

Build system utilities

  • New CMake Module APIs
  • Version Control Integration
  • Automatic Packaging

Documentation

  • Documentation generation tools
  • Manuals
  • PDF and HTML output of each
  • Integrated with CMake APIs

Testing

  • Unit testing
  • Continuous integration
  • Executable testing frameworks

Program Execution

  • Parsing library
  • Command execution library
  • Unix philosophy and tool chains

Supported Languages:

  • C++, BASH, Python, Perl, MATLAB

Supported Packages:

  • CMake, CPack, CTest/CDash, Doxygen, Sphinx, Git, Subversion, reStructuredText, gtest, gflags, Boost, and many more, including custom packages.

Get Started

  1. Get your first taste with the Quick Start Guide.
  2. Check out the How-to Guides for easy introductions to common tasks.
  3. Learn more About CMake BASIS, where it came from and why.
  4. Investigate the Reference and API for more in-depth information.

Documentation

Additional documentation is available in several locations:

Installation

See the installation instructions or the INSTALL file. Information on where the executables and libraries, the auxiliary data, and the documentation files get installed is also available there. For more concise installation steps, have a look at the Quick Start Installation.

Help

If you need help after searching the documentation or want to report a problem, you can reach the CMake BASIS developers on GitHub using the CMake BASIS Issue Tracker.

License

Copyright (c) 2011-2013 University of Pennsylvania
Copyright (c) 2013-2014 Carnegie Mellon University
Copyright (c) 2013-2016 Andreas Schuh

CMake BASIS is distributed under the terms of the BSD 2-clause License. The complete license text can be found on the download page and in the COPYING.txt file.

Package Content

Path Content description
BasisProject.cmake Meta-data used for the build configuration.
[CMakeLists.txt] 21 Root CMake configuration file.
[config/] 22 Package configuration files.
[doc/] 24 Documentation source files.
[example/] 25 Example files used in the tutorials.
[include/] 26 Public header files.
[src/cmake/] 27 CMake modules and corresponding auxiliary files.
[src/sphinx/] 29 Themes and extensions for the Sphinx documentation tool.
[src/utilities/] 30 Source code of utility functions.
[tools/] 31 Source code of command-line tools and project template.
[test/] 32 Unit tests for the provided libraries.

Legacy GitHub Project

This project was originally developed using Subversion as revision control system. When CMake BASIS was made public as open source, it has been migrated to GitHub using git svn. The Subversion history, however, was quite long and included big data files such as example image data, external libraries such as Boost, PDF files, and PowerPoint presentations. Due to the decentralized nature of Git, having such objects in the revision history of the repository adds significantly to the size of the repository and each clone.

With the release of CMake BASIS version 3.3.0, the history of the Git repository has been rewritten using git filter-branch. Moreover, the CMake modules have been separated from the complete suite of BASIS tools using git subtree split. This reduced the size of the repositories considerably from more than 200MB to less than 10MB and supports the use of only the CMake modules in a project that does not require the complete functionality. The CMake BASIS Modules repository is about 2MB in size when including all revisions. A shallow clone with --depth=1 is less than 1MB. The CMake BASIS Find Modules for use by the find_package command are hosted in another GitHub repository. Developers may copy only those Find modules needed by their project or install the complete set of modules as part of CMake BASIS. The shared CMake modules repositories are integrated into the main project with the git subtree add command. Changes of the CMake modules are first pushed to the main repository and then to the respective subtree repositories using git subtree push.

CMake BASIS versions prior to version 3.3.0 have to be downloaded from the legacy GitHub project because the intrusive history changes broke the integrity of previous versions.