Compare commits

...

133 Commits

Author SHA1 Message Date
a52e38cfad
💥 Removed pipfile 2022-10-26 15:27:02 +02:00
d734efee26
🔧 Added sphinx to requirements.txt 2022-10-26 15:16:59 +02:00
1ad82d5c4b
🎨 Fixed formating 2022-10-24 15:57:34 +02:00
9d2c6f31db
🔧 Replaced deprecated FancyURLopener 2022-10-24 15:52:56 +02:00
b5218d50f6
🎉 Added sccache.cmake 2022-10-24 15:16:28 +02:00
fc5ab3f9c6
🔨 Updated Sphinx config 2022-10-24 14:53:39 +02:00
901c3e55cd
🔧 Update min cmake version to 3.1 2022-10-24 14:14:14 +02:00
a2037a5341
🐛 Fixed compatibility with python 3.10 2022-10-21 10:33:48 +02:00
Roberto Di Remigio
85a4d068b7
Merge pull request #264 from bast/radovan/quotes-workaround
preserve quotes in setup_command; closes #169
2020-04-08 09:21:02 +02:00
Radovan Bast
32f4562704 preserve quotes in setup_command; closes #169 2020-04-07 19:56:57 +02:00
Radovan Bast
09b2ebf8db add DOI badge 2020-02-03 21:21:23 +01:00
Radovan Bast
7f674e7892 simplify 2020-02-03 21:21:07 +01:00
Radovan Bast
09b13e5747 mint v1.0.0 2020-02-03 21:00:39 +01:00
Roberto Di Remigio
92291cb7d6
Merge pull request #261 from dev-cafe/radovan/restore-ci
Remove Boost modules and tests and restore CI
2019-10-07 14:39:20 +02:00
Radovan Bast
8c0222a87f rm boost module and tests; closes #258 closes #260 2019-10-06 15:55:12 +02:00
Radovan Bast
d2890239d0 fix path to include file 2019-10-06 15:54:48 +02:00
Radovan Bast
979453c610 fc_blas and fc_lapack tests need also C and CXX support 2019-10-06 15:54:17 +02:00
Roberto Di Remigio
839beaafd5
Merge pull request #255 from bast/pyyaml-warning
hopefully solve security warning by updating lock
2019-01-23 17:40:29 +01:00
Roberto Di Remigio
f7229c4644
Merge pull request #256 from bast/include-modules-explicit-paths
in generated CMakeLists.txt include modules with explicit path
2019-01-23 17:40:02 +01:00
Radovan Bast
0e63ae446f in generated CMakeLists.txt include modules with explicit path
do not modify CMAKE_MODULE_PATH

we have seen that this can lead to trouble in combination
with FetchContent where the fetched project can pick up wrong
modules since CMAKE_MODULE_PATH can contain paths from the parent
project
2019-01-23 17:18:24 +01:00
Radovan Bast
137c55c853 hopefully solve security warning by updating lock 2019-01-23 17:00:05 +01:00
Radovan Bast
30e231950b
Merge pull request #252 from dev-cafe/robertodr-patch-1
Do not remove build directory on failure
2018-08-22 18:05:05 +02:00
Roberto Di Remigio
8aa2c35793
Do not remove build directory on failure 2018-08-22 11:47:17 -04:00
Radovan Bast
9919281d98
Merge pull request #249 from bast/repo-move
s/coderefinery/dev-cafe/; closes #244
2018-06-26 23:05:20 +02:00
Radovan Bast
e12b47e287 s/coderefinery/dev-cafe/; closes #244 2018-06-20 17:10:31 +02:00
Radovan Bast
ebf3264642
Merge pull request #245 from robertodr/fix-option-wrappers
Do not use CMakeParseArguments for wrappers
2018-04-24 09:46:05 +02:00
Roberto Di Remigio
fa53033962
Do not use CMakeParseArguments for wrappers 2018-04-23 23:24:50 -04:00
Radovan Bast
fe28e29c0d
Merge pull request #242 from bast/radovan/omp-module-refactor
rm redundant line
2018-04-10 15:06:44 +02:00
Radovan Bast
3d031770d4 added comment 2018-04-04 19:51:50 +02:00
Radovan Bast
1926b3774b rm redundant line 2018-04-04 19:49:55 +02:00
Radovan Bast
9729c77307
Merge pull request #240 from robertodr/patch-3
Use project(... LANGUAGES ...) syntax
2018-04-04 18:30:59 +02:00
Roberto Di Remigio
ba9c9fa329
Use project(... LANGUAGES ...) syntax 2018-04-04 12:12:55 -04:00
Radovan Bast
44763b3ccd
Merge pull request #239 from robertodr/option-wrappers
Fix rewrite of options wrappers
2018-03-13 09:05:50 +01:00
Roberto Di Remigio
1cd15647dd
Fix rewrite of options wrappers 2018-03-12 21:11:27 +01:00
Radovan Bast
22ef2b17da
Merge pull request #237 from robertodr/option-wrappers
Rewrite option wrappers using cmake_parse_arguments
2018-03-12 18:59:00 +01:00
Roberto Di Remigio
e9eba12bdd
Rewrite option wrappers using cmake_parse_arguments 2018-03-12 17:59:02 +01:00
Radovan Bast
dd806dadfd
Merge pull request #235 from robertodr/patch-2
Do not blanket-set include dirs and link libs
2018-03-12 15:00:48 +01:00
Roberto Di Remigio
2127b9e815
Fix Python libs tests 2018-03-12 12:55:23 +01:00
Roberto Di Remigio
3e81a75b0c
Do not blanket-set include dirs and link libs
Not all targets in the project necessarily depend on `Python.h` and `libpython`.
2018-03-09 18:59:20 +01:00
Radovan Bast
028f0f58c2
Merge pull request #233 from bast/radovan/xl-omp
adjust XL Fortran OMP flag; fixes #232
2018-03-07 13:43:15 +01:00
Radovan Bast
f6bcd9ff27
Merge pull request #231 from bast/radovan/issue-230
extract cmake more silently on Travis; fixes #230
2018-03-07 11:33:49 +01:00
Radovan Bast
bedf21f4b8 extract cmake more silently on Travis; fixes #230 2018-03-07 11:26:54 +01:00
Radovan Bast
d400ae9d26 adjust XL Fortran OMP flag; fixes #232 2018-03-07 09:55:18 +01:00
Radovan Bast
b7cf89b6b6
Merge pull request #229 from robertodr/patch-1
Update default_build_paths.cmake
2018-03-04 12:05:47 +01:00
Roberto Di Remigio
16ee5b6de6
Update default_build_paths.cmake
Fix #228
2018-03-03 11:21:47 +01:00
Radovan Bast
945ba4e266
Merge pull request #225 from robertodr/bare-cmake
Ensure that CMake and Python frontend script generate the same build system
2018-03-01 11:37:14 +01:00
Radovan Bast
0f3ee1a883
Merge pull request #226 from robertodr/code-coverage
Update code coverage module
2018-02-07 22:42:43 +01:00
Roberto Di Remigio
eee3ef90e1
Update code coverage module 2018-02-07 09:31:51 +01:00
Roberto Di Remigio
46e404f572
Always include CMakeDependentOption 2018-01-31 13:11:56 +01:00
Roberto Di Remigio
da6c5c0024
Generate options wrappers as string literal 2018-01-31 11:24:54 +01:00
Roberto Di Remigio
30d0bb1e44
Fix os.path.join 2018-01-27 22:37:07 +01:00
Roberto Di Remigio
8c65823d91
Add options wrappers, update math_libs.cmake 2018-01-27 22:37:00 +01:00
Roberto Di Remigio
9a071ff9a3
Infrastructure update 2018-01-27 22:37:00 +01:00
Roberto Di Remigio
9953b6559d Write cmake_output under build_path (#222)
Write cmake_output under build_path
2017-12-15 18:31:23 +01:00
Radovan Bast
2e587b5b39
Merge pull request #221 from robertodr/bare-cmake
Get setup to reproduce use of bare CMake
2017-12-08 20:01:35 +01:00
Roberto Di Remigio
0a8e7eb325
Get setup to reproduce use of bare CMake 2017-12-08 11:40:56 -05:00
Roberto Di Remigio
7161d75691
Add .default.nix and .envrc 2017-12-08 11:00:33 -05:00
Radovan Bast
65df3eae5e
Merge pull request #213 from bast/radovan/explicit-license
Add explicit license information
2017-11-14 17:06:49 +01:00
Radovan Bast
ba4aba5948 do not use bare except 2017-11-14 16:58:13 +01:00
Radovan Bast
d0e9e82195 use pycodestyle instead of pep8 (deprecated) 2017-11-14 16:57:52 +01:00
Radovan Bast
9b2f742a24 fix pep8 issue 2017-11-14 16:52:05 +01:00
Radovan Bast
0f01fe476d
Merge pull request #212 from bast/radovan/credit
add Roberto to list of authors; credit where credit is due
2017-11-14 14:49:45 +01:00
Radovan Bast
dd2d7465f3 attach license info to module files; fixes #211 2017-11-11 13:45:23 +01:00
Radovan Bast
a457b749d3 script to attach license info to module files 2017-11-11 13:40:37 +01:00
Radovan Bast
c86e684227 generate README.md with license information 2017-11-11 13:40:23 +01:00
Radovan Bast
f1f2afa6fa add Roberto to list of authors; credit where credit is due 2017-11-11 13:24:26 +01:00
Radovan Bast
37d02eebcd Merge pull request #208 from bast/master
do not stop configuration on a cmake warning; fixes #174
2017-08-11 18:07:16 +02:00
Radovan Bast
5c004ce96a do not stop configuration on a cmake warning; fixes #174 2017-07-28 12:47:19 +02:00
Radovan Bast
37a29068fa make it possible to not create any front-end setup script 2017-07-19 12:27:49 +02:00
Radovan Bast
13b331e54a mention the polygons lib 2017-07-19 12:19:18 +02:00
Radovan Bast
43d2bcde1f add default_build_type to example 2017-07-18 14:59:25 +02:00
Radovan Bast
d2a121b1cd rm trailing space 2017-07-18 14:59:15 +02:00
Radovan Bast
c40f7b9033 mention gimic 2017-07-18 14:58:59 +02:00
Radovan Bast
58a29ed461 better error message if python-dev is missing; closes #197 2017-06-11 18:58:11 +02:00
Radovan Bast
7f21bfc10e provide better help text for default_build_type; closes #192 2017-06-11 18:55:07 +02:00
Radovan Bast
8386baed11 document language specification 2017-06-11 18:44:16 +02:00
Radovan Bast
2f8ee1cd51 emphasize line 2017-06-11 18:39:53 +02:00
Radovan Bast
3c89372485 better help message if languages are not set 2017-06-11 18:34:07 +02:00
Radovan Bast
5b01a62751 Merge pull request #202 from robertodr/archive_output_directory
Send also static libraries to ${PROJECT_BINARY_DIR}/lib
2017-06-04 12:47:19 +02:00
Radovan Bast
c4cbe7c858 Merge pull request #203 from robertodr/warning_flags
Add -Wall to compiler flags
2017-06-04 12:28:38 +02:00
Roberto Di Remigio
d33dac0c0f
Add -Wall to compiler flags 2017-06-02 13:55:54 +02:00
Roberto Di Remigio
a66ef00e8b
Send also static libraries to ${PROJECT_BINARY_DIR}/lib 2017-05-30 18:16:49 +02:00
Radovan Bast
af1cfe760e for consistency remove -std=c++11 from default; fixes #198 2017-05-22 16:22:30 +02:00
Radovan Bast
5c4a515a31 Merge pull request #194 from robertodr/yaml-project-language
Parse language field in YAML
2017-05-18 20:32:02 +02:00
Roberto Di Remigio
4ecba13766
Use XCode7.3 in Mac OS X builds 2017-05-18 10:27:12 +02:00
Roberto Di Remigio
98ba4cf3b2
Remove enable_language from language modules
Notice that cxx.cmake reference, incorrectly, CMAKE_C_COMPILER instead of CMAKE_CXX_COMPILER
2017-05-18 10:27:12 +02:00
Roberto Di Remigio
28b9ba022c
Parse language field in YAML to generate project(<PROJECT_NAME> <PROJECT_LANGUAGE>) in CMakeLists.txt 2017-05-18 10:27:12 +02:00
Radovan Bast
3349ddbe1d print MATH_LIB_SEARCH_ORDER; fixes #195 2017-05-15 17:01:20 +02:00
Radovan Bast
e607ebe284 add an example for flag validation [ci skip] 2017-05-03 16:25:43 +02:00
Radovan Bast
5a10a3f23d update doc [skip ci] 2017-05-03 11:44:33 +02:00
Radovan Bast
c4e5c3130c test with cmake 3.8.0 2017-04-28 23:21:11 +02:00
Radovan Bast
011669838e Merge pull request #193 from robertodr/fix-empty-extra-flags
Managing EXTRA_<LANG>FLAGS
2017-04-07 17:32:30 +02:00
Roberto Di Remigio
d081364685
Add EXTRA_<LANG>FLAGS to CMAKE_<LANG>_FLAGS if the former are not an empty string 2017-04-06 14:52:58 +02:00
Radovan Bast
8fd3640685 Merge pull request #191 from arnfinn/patch-1
Added missing parentheses
2017-03-31 10:04:13 +02:00
Arnfinn Hykkerud Steindal
2e92a8f876 Added missing parentheses 2017-03-31 10:03:01 +02:00
Radovan Bast
dffc84c013 make comment consistent with code 2017-03-28 14:13:20 +02:00
Radovan Bast
9006d96b1b add -std=c++11 2017-03-26 00:22:20 +01:00
Radovan Bast
5829a5991a switch to O3 2017-03-26 00:22:00 +01:00
Radovan Bast
53a6f3f715 add flanders 2017-03-24 22:34:34 +01:00
Radovan Bast
5dc60d3a3c rename --check to --profile (was copy paste error) 2017-02-14 12:01:47 +01:00
Radovan Bast
0f47558e3a add respect to the list 2017-02-06 21:09:00 +01:00
Radovan Bast
7a9736d4df add minsizerel to list of allowed build types 2017-02-04 18:37:24 +01:00
Radovan Bast
c79cbda4bd add module for profiling flags 2017-02-04 17:36:10 +01:00
Radovan Bast
319ce56308 require setting default_build_type 2017-02-04 12:25:53 +01:00
Radovan Bast
88ca810194 add doc [skip ci] 2017-02-02 20:59:47 +01:00
Radovan Bast
a5d8d51880 module to generate export header
kudos to Roberto for the suggestion
2017-02-02 19:46:44 +01:00
Radovan Bast
1d286edf2a easier doc browsing 2016-11-27 19:03:14 +01:00
Radovan Bast
e7b28d04dc switch html_theme to default 2016-11-27 18:56:36 +01:00
Radovan Bast
bffe5a5848 update conf.py to get more silent diffs 2016-11-27 18:53:34 +01:00
Radovan Bast
7bdf85dcc6 Merge pull request #181 from robertodr/master
Assert that Python >= 2.6 in the generated setup script
2016-11-22 16:16:53 +01:00
Roberto Di Remigio
b89977a037
Assert that Python >= 2.6 in the generated setup script 2016-11-22 15:52:49 +01:00
Radovan Bast
893c9bd80c set colors to "" on WIN32 2016-11-21 20:43:54 +01:00
Radovan Bast
588f26a5bc Merge pull request #180 from robertodr/master
Color module for CMake output
2016-11-21 20:41:46 +01:00
Radovan Bast
0eb3a8e56c restore git_info test 2016-11-21 20:39:57 +01:00
Roberto Di Remigio
f614025183
Better documentation 2016-11-21 19:37:37 +01:00
Roberto Di Remigio
f33a74df5a
Add a module to colorize CMake output.
Code was found on StackOverflow: http://stackoverflow.com/a/19578320
2016-11-21 19:33:58 +01:00
Radovan Bast
fe0c1f69ec generate_git_info_header always has to be called with explicit args 2016-11-18 18:25:02 +01:00
Radovan Bast
caf8d639a0 Merge pull request #179 from robertodr/master
Use only Git commands in `git_info`
2016-11-18 18:23:23 +01:00
Roberto Di Remigio
310add559b
Path to git_info.h.in is no longer hardcoded 2016-11-17 19:51:17 +01:00
Roberto Di Remigio
4efb243161
Fine-tune and fix tests 2016-11-16 15:31:57 +01:00
Roberto Di Remigio
331b81bf32
Merge remote-tracking branch 'upstream/master' 2016-11-16 11:44:11 +01:00
Roberto Di Remigio
45a4a0022f
Use only Git commands in git_info 2016-11-16 11:42:06 +01:00
Radovan Bast
8ba73f5a1d set Fortran OMP flags only if OpenMP_Fortran_FLAGS are not set; fixes #177
also fix Intel Fortran OMP depending on the version of the compiler
thanks to Lori A. Burns for the changeset
2016-08-24 08:12:55 +02:00
Radovan Bast
08d0a6837b use position in format string 2016-07-23 16:02:40 +02:00
Radovan Bast
2374f5bbed give nice error message if Python is 2.6; fixes #176 2016-07-23 16:01:46 +02:00
Radovan Bast
69927f195d dry 2016-07-18 15:11:43 +02:00
Radovan Bast
8ddd1a5f05 rearrange 2016-07-18 15:09:30 +02:00
Radovan Bast
d9287cf2a5 rm unused import 2016-07-18 15:04:00 +02:00
Radovan Bast
5dba22b8e7 sphinx doc version automatically follows __version__ 2016-07-18 14:58:52 +02:00
Radovan Bast
0da60d43eb update documentation after API changes 2016-07-18 12:17:15 +02:00
Radovan Bast
6353a2e440 do not crash if autocmake.yml does not contain any modules 2016-07-18 11:44:58 +02:00
Radovan Bast
003cff2dff add MRChem to the list of programs which use Autocmake 2016-07-14 18:19:39 +02:00
Radovan Bast
33ed130d39 make autocmake/external/__init__.py non-empty to avoid #175 2016-07-14 16:58:07 +02:00
109 changed files with 1259 additions and 1256 deletions

32
.default.nix Normal file
View File

@ -0,0 +1,32 @@
let
hostPkgs = import <nixpkgs> {};
nixpkgs = (hostPkgs.fetchFromGitHub {
owner = "NixOS";
repo = "nixpkgs-channels";
rev = "nixos-unstable";
sha256 = "1rc1pjnvfi194gka45zc1nivzsncc819kvxlfv277l2c8ryhgbpc";
});
in
with import nixpkgs {};
stdenv.mkDerivation {
name = "Autocmake";
buildInputs = [
ccache
cmake
doxygen
gcc
gfortran
liblapack
openmpi
pipenv
python3Packages.pep8
python3Packages.pytest
python3Packages.pyyaml
zlib
];
src = null;
shellHook = ''
export NINJA_STATUS="[Built edge %f of %t in %e sec]"
SOURCE_DATE_EPOCH=$(date +%s)
'';
}

1
.envrc Normal file
View File

@ -0,0 +1 @@
use nix .default.nix

4
.gitignore vendored
View File

@ -10,6 +10,10 @@ test/*/cmake/update.py
test/*/cmake/autocmake/
test/*/cmake/downloaded/
test/*/setup
test/*/cmake_output
# generated by doc/extract_rst.py
doc/module-reference.rst
.idea/
/tmp/
_build

View File

@ -16,7 +16,6 @@ matrix:
# compilers
- g++
- gfortran
- cmake
# math libraries
- libblas-dev
- liblapack-dev
@ -26,8 +25,6 @@ matrix:
- libopenmpi-dev
# python library, development version
- libpython2.7
# boost
- libboost-all-dev
- os: linux
python: 3.5
@ -50,33 +47,33 @@ matrix:
- libopenmpi-dev
# python library, development version
- libpython2.7
# boost
- libboost-all-dev
- os: osx
osx_image: xcode6.4
osx_image: xcode11
compiler: gcc
env: SOURCES=homebrew
env:
- SOURCES=homebrew
install:
- |
if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
brew install cmake boost python gcc open-mpi
brew update &> /dev/null
pip install virtualenv
elif [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then
pip install --user virtualenv
curl https://cmake.org/files/v3.5/cmake-3.5.2-Linux-x86_64.tar.gz | tar xvz
export PATH=~/cmake-3.5.2-Linux-x86_64/bin:$PATH
export LD_LIBARY_PATH=~/cmake-3.5.2-Linux-x86_64/lib:$LD_LIBRARY_PATH
mkdir -p $HOME/dependencies/cmake
curl -Ls https://cmake.org/files/v3.8/cmake-3.8.0-Linux-x86_64.tar.gz | tar -xz -C $HOME/dependencies/cmake --strip-components=1
export PATH=$HOME/dependencies/cmake/bin${PATH:+:$PATH}
fi
- cmake --version
- virtualenv venv
- source venv/bin/activate
- pip install -r requirements.txt
script:
# pep8 tests
- pep8 --ignore E501 update.py
- pep8 --ignore E501,E265 autocmake
# pycodestyle tests
- pycodestyle --ignore E501 update.py
- pycodestyle --ignore E501,E265,E741 autocmake --exclude autocmake/external/docopt.py
# unit tests
- py.test -vv autocmake/*
- py.test -vv test/test.py

View File

@ -1,14 +1,14 @@
# Authors
- Jonas Juselius
- Radovan Bast
- Roberto Di Remigio
- Jonas Juselius
# Contributors
- Miroslav Ilias (Windows, portability, earliest adopter testing and feedback, math library testing)
- Ivan Hrasko (Windows, Appveyor testing)
- Dan Jonsson (idea for configuration file approach which preceded YAML solution)
- Roberto Di Remigio (design ideas and testing, OS X testing, Boost)
For a list of all the contributions,
see https://github.com/coderefinery/autocmake/contributors.
see https://github.com/dev-cafe/autocmake/contributors.

View File

@ -1,4 +1,4 @@
Copyright (c) 2015-2016 by Radovan Bast, Jonas Juselius, and contributors.
Copyright (c) 2015-2017 by Radovan Bast, Roberto Di Remigio, Jonas Juselius, and contributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without

View File

@ -1,11 +1,12 @@
[![Build Status](https://travis-ci.org/coderefinery/autocmake.svg?branch=master)](https://travis-ci.org/coderefinery/autocmake/builds)
[![Build Status](https://travis-ci.org/dev-cafe/autocmake.svg?branch=master)](https://travis-ci.org/dev-cafe/autocmake/builds)
[![Documentation Status](https://readthedocs.org/projects/autocmake/badge/?version=latest)](http://autocmake.readthedocs.org)
[![License](https://img.shields.io/badge/license-%20BSD--3-blue.svg)](../master/LICENSE)
[![License](https://img.shields.io/badge/license-%20BSD--3-blue.svg)](LICENSE)
[![DOI](https://zenodo.org/badge/36069881.svg)](https://zenodo.org/badge/latestdoi/36069881)
![alt text](https://github.com/coderefinery/autocmake/raw/master/img/autocmake.png "Autocmake")
![alt text](https://github.com/dev-cafe/autocmake/raw/master/img/autocmake.png "Autocmake")
A CMake plugin composer.
Licensed under [BSD-3](../master/LICENSE).
Licensed under [BSD-3](LICENSE).
See http://autocmake.org.
@ -17,12 +18,17 @@ See http://autocmake.org.
## Projects using Autocmake
- [Numgrid](https://github.com/dftlibs/numgrid/)
- [XCint](https://github.com/dftlibs/xcint/)
- [Numgrid](https://github.com/dftlibs/numgrid)
- [XCint](https://github.com/dftlibs/xcint)
- [DIRAC](http://diracprogram.org)
- [mathlib-tester](https://github.com/miroi/mathlibs-tester)
- [Fortran Input Reader](https://github.com/miroi/fortran_input_reader)
- [PCMSolver](https://github.com/PCMSolver/pcmsolver)
- GRASP: General-purpose Relativistic Atomic Structure Program
- [MRChem](https://github.com/MRChemSoft/mrchem)
- [ReSpect](http://rel-qchem.sav.sk)
- [Flanders](https://github.com/bast/flanders)
- [Polygons](https://github.com/bast/polygons)
- [GIMIC](https://github.com/qmcurrents/gimic)
If you use Autocmake, please link to your project via a pull request.

View File

@ -1 +1 @@
__version__ = '1.0.0-alpha-x'
__version__ = '1.0.0'

View File

@ -18,10 +18,11 @@ def check_cmake_exists(cmake_command):
"""
from subprocess import Popen, PIPE
p = Popen('{0} --version'.format(cmake_command),
shell=True,
stdin=PIPE,
stdout=PIPE)
p = Popen(
'{0} --version'.format(cmake_command),
shell=True,
stdin=PIPE,
stdout=PIPE)
if not ('cmake version' in p.communicate()[0].decode('UTF-8')):
sys.stderr.write(' This code is built using CMake\n\n')
sys.stderr.write(' CMake is not found\n')
@ -41,55 +42,46 @@ def setup_build_path(build_path):
fname = os.path.join(build_path, 'CMakeCache.txt')
if os.path.exists(fname):
sys.stderr.write('aborting setup\n')
sys.stderr.write('build directory {0} which contains CMakeCache.txt already exists\n'.format(build_path))
sys.stderr.write('remove the build directory and then rerun setup\n')
sys.stderr.write(
'build directory {0} which contains CMakeCache.txt already exists\n'.
format(build_path))
sys.stderr.write(
'remove the build directory and then rerun setup\n')
sys.exit(1)
else:
os.makedirs(build_path, 0o755)
def test_adapt_cmake_command_to_platform():
cmake_command = "FC=foo CC=bar CXX=RABOOF cmake -DTHIS -DTHAT='this and that cmake' .."
res = adapt_cmake_command_to_platform(cmake_command, 'linux')
assert res == cmake_command
res = adapt_cmake_command_to_platform(cmake_command, 'win32')
assert res == "set FC=foo && set CC=bar && set CXX=RABOOF && cmake -DTHIS -DTHAT='this and that cmake' .."
cmake_command = "cmake -DTHIS -DTHAT='this and that cmake' .."
res = adapt_cmake_command_to_platform(cmake_command, 'linux')
assert res == cmake_command
res = adapt_cmake_command_to_platform(cmake_command, 'win32')
assert res == cmake_command
def adapt_cmake_command_to_platform(cmake_command, platform):
def add_quotes_to_argv(argv, arguments):
"""
Adapt CMake command to MS Windows platform.
This function tries to solve this problem:
https://stackoverflow.com/questions/19120247/python-sys-argv-to-preserve-or
The problem is that sys.argv has been stripped of quotes by the shell but
docopt's arguments contains quotes.
So what we do is cycle through all docopt arguments: if they are also
present in sys.argv and contain spaces, we add quotes.
"""
if platform == 'win32':
pos = cmake_command.find('cmake')
s = ['set {0} &&'.format(e) for e in cmake_command[:pos].split()]
s.append(cmake_command[pos:])
return ' '.join(s)
else:
return cmake_command
setup_command = ' '.join(argv[:])
for k, v in arguments.items():
if isinstance(v, str):
if ' ' in v:
if v in setup_command:
setup_command = setup_command.replace(v, '"{}"'.format(v))
return setup_command
def run_cmake(command, build_path, default_build_path):
def run_cmake(command, build_path, default_build_path, arguments):
"""
Execute CMake command.
"""
from subprocess import Popen, PIPE
from shutil import rmtree
topdir = os.getcwd()
os.chdir(build_path)
p = Popen(command,
shell=True,
stdin=PIPE,
stdout=PIPE,
stderr=PIPE)
p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout_coded, stderr_coded = p.communicate()
stdout = stdout_coded.decode('UTF-8')
stderr = stderr_coded.decode('UTF-8')
@ -98,25 +90,28 @@ def run_cmake(command, build_path, default_build_path):
print(stdout)
if stderr:
# we write out stderr but we do not stop yet
# this is because CMake warnings are sent to stderr
# and they might be benign
sys.stderr.write(stderr)
sys.exit(1)
# write cmake output to file
with open('cmake_output', 'w') as f:
with open(os.path.join(build_path, 'cmake_output'), 'w') as f:
f.write(stdout)
# change directory and return
os.chdir(topdir)
if 'Configuring incomplete' in stdout:
# configuration was not successful
if (build_path == default_build_path):
# remove build_path iff not set by the user
# otherwise removal can be dangerous
rmtree(default_build_path)
else:
# configuration was successful
save_setup_command(sys.argv, build_path)
# to figure out whether configuration was a success
# we check for 3 sentences that should be part of stdout
configuring_done = '-- Configuring done' in stdout
generating_done = '-- Generating done' in stdout
build_files_written = '-- Build files have been written to' in stdout
configuration_successful = configuring_done and generating_done and build_files_written
if configuration_successful:
setup_command = add_quotes_to_argv(sys.argv, arguments)
save_setup_command(setup_command, build_path)
print_build_help(build_path, default_build_path)
@ -133,16 +128,16 @@ def print_build_help(build_path, default_build_path):
print(' $ make')
def save_setup_command(argv, build_path):
def save_setup_command(setup_command, build_path):
"""
Save setup command to a file.
"""
file_name = os.path.join(build_path, 'setup_command')
with open(file_name, 'w') as f:
f.write(' '.join(argv[:]) + '\n')
f.write(setup_command + '\n')
def configure(root_directory, build_path, cmake_command, only_show):
def configure(root_directory, build_path, cmake_command, arguments):
"""
Main configure function.
"""
@ -154,13 +149,12 @@ def configure(root_directory, build_path, cmake_command, only_show):
# deal with build path
if build_path is None:
build_path = default_build_path
if not only_show:
if not arguments['--show']:
setup_build_path(build_path)
cmake_command = adapt_cmake_command_to_platform(cmake_command, sys.platform)
cmake_command += ' -B' + build_path
print('{0}\n'.format(cmake_command))
if only_show:
if arguments['--show']:
sys.exit(0)
run_cmake(cmake_command, build_path, default_build_path)
run_cmake(cmake_command, build_path, default_build_path, arguments)

View File

@ -0,0 +1 @@
# empty - this line is here to avoid problem when fetching empty files from web

View File

@ -1,5 +1,5 @@
def extract_list(config, section):
from collections import Iterable
from collections.abc import Iterable
l = []
if 'modules' in config:
for module in config['modules']:

View File

@ -20,7 +20,7 @@ def gen_cmake_command(config):
s.append(' command.append({0})'.format(definition))
s.append(" command.append('-DCMAKE_BUILD_TYPE={0}'.format(arguments['--type']))")
s.append(" command.append('-G \"{0}\"'.format(arguments['--generator']))")
s.append(" command.append('-G\"{0}\"'.format(arguments['--generator']))")
s.append(" if arguments['--cmake-options'] != \"''\":")
s.append(" command.append(arguments['--cmake-options'])")
s.append(" if arguments['--prefix']:")
@ -40,12 +40,49 @@ def autogenerated_notice():
s = []
s.append('# This file is autogenerated by Autocmake v{0} http://autocmake.org'.format(__version__))
s.append('# Copyright (c) {0} by Radovan Bast, Jonas Juselius, and contributors.'.format(year_range))
s.append('# Copyright (c) {0} by Radovan Bast, Roberto Di Remigio, Jonas Juselius, and contributors.'.format(year_range))
return '\n'.join(s)
def gen_setup(config, relative_path, setup_script_name):
def gen_cmake_options_wrappers():
s = """\n# Options handling utilities
include(CMakeDependentOption)
# Macro for printing an option in a consistent manner
# Written by Lori A. Burns (@loriab) and Ryan M. Richard (@ryanmrichard)
# Syntax: print_option(<option to print> <was specified>)
macro(print_option variable default)
if(NOT DEFINED ${variable} OR "${${variable}}" STREQUAL "")
message(STATUS "Setting (unspecified) option ${variable}: ${default}")
else()
message(STATUS "Setting option ${variable}: ${${variable}}")
endif()
endmacro()
# Wraps an option with default ON/OFF. Adds nice messaging to option()
# Written by Lori A. Burns (@loriab) and Ryan M. Richard (@ryanmrichard)
# Syntax: option_with_print(<option name> <description> <default value>)
macro(option_with_print variable msge default)
print_option(${variable} ${default})
option(${variable} ${msge} ${default})
endmacro()
# Wraps an option with a default other than ON/OFF and prints it
# Written by Lori A. Burns (@loriab) and Ryan M. Richard (@ryanmrichard)
# NOTE: Can't combine with above b/c CMake handles ON/OFF options specially
# NOTE2: CMake variables are always defined so need to further check for if
# they are the NULL string. This is also why we need the force
# Syntax: option_with_default(<option name> <description> <default value>)
macro(option_with_default variable msge default)
print_option(${variable} "${default}")
if(NOT DEFINED ${variable} OR "${${variable}}" STREQUAL "")
set(${variable} "${default}" CACHE STRING ${msge} FORCE)
endif()
endmacro()"""
return s
def gen_setup(config, default_build_type, relative_path, setup_script_name):
"""
Generate setup script.
"""
@ -56,6 +93,7 @@ def gen_setup(config, relative_path, setup_script_name):
s.append('\n{0}'.format(autogenerated_notice()))
s.append('\nimport os')
s.append('import sys')
s.append('assert sys.version_info >= (2, 6), \'Python >= 2.6 is required\'')
s.append("\nsys.path.insert(0, '{0}')".format(relative_path))
@ -75,7 +113,7 @@ def gen_setup(config, relative_path, setup_script_name):
rest = ' '.join(opt.split()[1:]).strip()
options.append([first, rest])
options.append(['--type=<TYPE>', 'Set the CMake build type (debug, release, or relwithdeb) [default: release].'])
options.append(['--type=<TYPE>', 'Set the CMake build type (debug, release, relwithdebinfo, minsizerel) [default: {0}].'.format(default_build_type)])
options.append(['--generator=<STRING>', 'Set the CMake build system generator [default: Unix Makefiles].'])
options.append(['--show', 'Show CMake command and exit.'])
options.append(['--cmake-executable=<CMAKE_EXECUTABLE>', 'Set the CMake executable [default: cmake].'])
@ -109,15 +147,15 @@ def gen_setup(config, relative_path, setup_script_name):
s.append("build_path = arguments['<builddir>']")
s.append("\n")
s.append("# create cmake command")
s.append("cmake_command = '{0} {1}'.format(gen_cmake_command(options, arguments), root_directory)")
s.append("cmake_command = '{0} -H{1}'.format(gen_cmake_command(options, arguments), root_directory)")
s.append("\n")
s.append("# run cmake")
s.append("configure.configure(root_directory, build_path, cmake_command, arguments['--show'])")
s.append("configure.configure(root_directory, build_path, cmake_command, arguments)")
return s
def gen_cmakelists(project_name, min_cmake_version, relative_path, modules):
def gen_cmakelists(project_name, project_language, min_cmake_version, default_build_type, relative_path, modules):
"""
Generate CMakeLists.txt.
"""
@ -131,33 +169,31 @@ def gen_cmakelists(project_name, min_cmake_version, relative_path, modules):
s.append('cmake_minimum_required(VERSION {0} FATAL_ERROR)'.format(min_cmake_version))
s.append('\n# project name')
s.append('project({0})'.format(project_name))
s.append('project({0} LANGUAGES {1})'.format(project_name, project_language))
s.append('\n# do not rebuild if rules (compiler flags) change')
s.append('set(CMAKE_SKIP_RULE_DEPENDENCY TRUE)')
s.append('\n# if CMAKE_BUILD_TYPE undefined, we set it to Debug')
build_type_capitalized = {'debug': 'Debug',
'release': 'Release',
'relwithdebinfo': 'RelWithDebInfo',
'minsizerel': 'MinSizeRel'}
_build_type = build_type_capitalized[default_build_type]
s.append('\n# if CMAKE_BUILD_TYPE undefined, we set it to {0}'.format(_build_type))
s.append('if(NOT CMAKE_BUILD_TYPE)')
s.append(' set(CMAKE_BUILD_TYPE "Debug")')
s.append(' set(CMAKE_BUILD_TYPE "{0}")'.format(_build_type))
s.append('endif()')
if len(modules) > 0:
s.append('\n# directories which hold included cmake modules')
module_paths = [module.path for module in modules]
module_paths.append('downloaded') # this is done to be able to find fetched modules when testing
module_paths = list(set(module_paths))
module_paths.sort() # we do this to always get the same order and to minimize diffs
for directory in module_paths:
rel_cmake_module_path = os.path.join(relative_path, directory)
# on windows cmake corrects this so we have to make it wrong again
rel_cmake_module_path = rel_cmake_module_path.replace('\\', '/')
s.append('set(CMAKE_MODULE_PATH ${{CMAKE_MODULE_PATH}} ${{PROJECT_SOURCE_DIR}}/{0})'.format(rel_cmake_module_path))
s.append(gen_cmake_options_wrappers())
if len(modules) > 0:
s.append('\n# included cmake modules')
for module in modules:
s.append('include({0})'.format(os.path.splitext(module.name)[0]))
s.append('include({0})'.format(os.path.join('${PROJECT_SOURCE_DIR}',
relative_path,
module.path,
module.name)))
return s

View File

@ -3,7 +3,7 @@ def replace(s, d):
if isinstance(s, str):
for var in findall(r"%\(([A-Za-z0-9_]*)\)", s):
s = s.replace("%({})".format(var), str(d[var]))
s = s.replace("%({0})".format(var), str(d[var]))
return s
@ -13,7 +13,7 @@ def test_replace():
def interpolate(d, d_map):
from collections import Mapping, Iterable
from collections.abc import Mapping, Iterable
from copy import copy
for k, v in d.items():

View File

@ -1,14 +1,9 @@
def parse_cmake_module(s_in, overrides={}):
import sys
from collections import Mapping, Iterable, defaultdict
from collections.abc import Mapping, Iterable
from collections import defaultdict
from autocmake.parse_yaml import parse_yaml
# we do not use the nicer sys.version_info.major
# for compatibility with Python < 2.7
if sys.version_info[0] > 2:
from io import StringIO
else:
from StringIO import StringIO
from io import StringIO
parsed_config = defaultdict(lambda: None)

View File

@ -1,6 +1,6 @@
if(NOT DEFINED ENV{CFLAGS})
if(CMAKE_C_COMPILER_ID MATCHES Clang)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra")
set(CMAKE_C_FLAGS_RELEASE "-O3")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g")
endif()

View File

@ -1,6 +1,6 @@
if(NOT DEFINED ENV{CXXFLAGS})
if(CMAKE_CXX_COMPILER_ID MATCHES Clang)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "-Ofast")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
endif()

View File

@ -1,6 +1,6 @@
if(NOT DEFINED ENV{CFLAGS})
if(CMAKE_C_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wextra")
set(CMAKE_C_FLAGS_RELEASE "-O3")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g")
endif()

View File

@ -1,7 +1,7 @@
if(NOT DEFINED ENV{CXXFLAGS})
if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS_RELEASE "-Ofast")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
endif()
endif()

View File

@ -1,6 +1,6 @@
if(NOT DEFINED ENV{FCFLAGS})
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS}")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Wall -Wextra")
set(CMAKE_Fortran_FLAGS_RELEASE "-O3 -funroll-all-loops")
set(CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -fbacktrace")
endif()

View File

@ -1,6 +1,6 @@
if(NOT DEFINED ENV{CFLAGS})
if(CMAKE_C_COMPILER_ID MATCHES Intel)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall")
set(CMAKE_C_FLAGS_RELEASE "-O3")
set(CMAKE_C_FLAGS_DEBUG "-O0 -g")
endif()

View File

@ -1,6 +1,6 @@
if(NOT DEFINED ENV{CXXFLAGS})
if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
endif()

20
doc/Makefile Normal file
View File

@ -0,0 +1,20 @@
# Minimal makefile for Sphinx documentation
#
# You can set these variables from the command line, and also
# from the environment for the first two.
SPHINXOPTS ?=
SPHINXBUILD ?= sphinx-build
SOURCEDIR = .
BUILDDIR = _build
# Put it first so that "make" without argument is like "make help".
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
.PHONY: help Makefile
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

View File

@ -1,289 +1,48 @@
# -*- coding: utf-8 -*-
# Configuration file for the Sphinx documentation builder.
#
# Autocmake documentation build configuration file, created by
# sphinx-quickstart on Mon Jun 1 16:41:30 2015.
#
# This file is execfile()d with the current directory set to its
# containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
#
# All configuration values have a default; values that are commented out
# serve to show the default.
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import sys
import os
import shlex
import time
sys.path.append(os.path.relpath(os.path.abspath('.')))
sys.path.insert(0, os.path.abspath("."))
import extract_rst
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
#sys.path.insert(0, os.path.abspath('.'))
sys.path.insert(0, os.path.abspath(".."))
from autocmake import __version__ as _version
# -- General configuration ------------------------------------------------
# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
# If your documentation needs a minimal Sphinx version, state it here.
#needs_sphinx = '1.0'
project = "Autocmake"
copyright = f'2015-{time.strftime("%Y")}, Radovan Bast, Roberto Di Remigio, Jonas Juselius, and contributors'
author = "Radovan Bast, Roberto Di Remigio, Jonas Juselius, and contributors"
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = [
'sphinx.ext.todo',
]
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The suffix(es) of source filenames.
# You can specify multiple suffix as a list of string:
# source_suffix = ['.rst', '.md']
source_suffix = '.rst'
# The encoding of source files.
#source_encoding = 'utf-8-sig'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Autocmake'
copyright = u'2015-2016, Radovan Bast, Jonas Juselius, and contributors'
author = u'Radovan Bast, Jonas Juselius, and contributors'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
# The short X.Y version.
version = '1.0'
# The full version, including alpha/beta/rc tags.
release = '1.0.0-alpha-x'
release = _version
# The short X.Y version.
version = ".".join(release.split(".")[0:2])
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
#
# This is also used if you do content translation via gettext catalogs.
# Usually you set "language" from the command line for these cases.
language = None
# -- General configuration ---------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
#today_fmt = '%B %d, %Y'
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
exclude_patterns = ['_build']
# The reST default role (used for this markup: `text`) to use for all
# documents.
#default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True
# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
#modindex_common_prefix = []
# If true, keep warnings as "system message" paragraphs in the built documents.
#keep_warnings = False
# If true, `todo` and `todoList` produce output, else they produce nothing.
extensions = [
"sphinx.ext.todo",
]
todo_include_todos = True
templates_path = ["_templates"]
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
# -- Options for HTML output ----------------------------------------------
root_doc = "index"
pygments_style = "sphinx"
# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
html_theme = 'default'
# -- Options for HTML output -------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
#html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
#html_theme_path = []
# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None
# A shorter title for the navigation bar. Default is the same as html_title.
#html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
#html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
#html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']
# Add any extra paths that contain custom files (such as robots.txt or
# .htaccess) here, relative to this directory. These files are copied
# directly to the root of the documentation.
#html_extra_path = []
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
#html_last_updated_fmt = '%b %d, %Y'
# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
#html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
#html_additional_pages = {}
# If false, no module index is generated.
#html_domain_indices = True
# If false, no index is generated.
#html_use_index = True
# If true, the index is split into individual pages for each letter.
#html_split_index = False
# If true, links to the reST sources are added to the pages.
#html_show_sourcelink = True
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
#html_show_sphinx = True
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
#html_show_copyright = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
#html_use_opensearch = ''
# This is the file name suffix for HTML files (e.g. ".xhtml").
#html_file_suffix = None
# Language to be used for generating the HTML full-text search index.
# Sphinx supports the following languages:
# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja'
# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr'
#html_search_language = 'en'
# A dictionary with options for the search language support, empty by default.
# Now only 'ja' uses this config value
#html_search_options = {'type': 'default'}
# The name of a javascript file (relative to the configuration directory) that
# implements a search results scorer. If empty, the default will be used.
#html_search_scorer = 'scorer.js'
# Output file base name for HTML help builder.
htmlhelp_basename = 'Autocmakedoc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
# Latex figure (float) alignment
#'figure_align': 'htbp',
}
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
# author, documentclass [howto, manual, or own class]).
latex_documents = [
(master_doc, 'Autocmake.tex', u'Autocmake Documentation',
u'Radovan Bast and Jonas Juselius', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
#latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
#latex_use_parts = False
# If true, show page references after internal links.
#latex_show_pagerefs = False
# If true, show URL addresses after external links.
#latex_show_urls = False
# Documents to append as an appendix to all manuals.
#latex_appendices = []
# If false, no module index is generated.
#latex_domain_indices = True
# -- Options for manual page output ---------------------------------------
# One entry per manual page. List of tuples
# (source start file, name, description, authors, manual section).
man_pages = [
(master_doc, 'autocmake', u'Autocmake Documentation',
[author], 1)
]
# If true, show URL addresses after external links.
#man_show_urls = False
# -- Options for Texinfo output -------------------------------------------
# Grouping the document tree into Texinfo files. List of tuples
# (source start file, target name, title, author,
# dir menu entry, description, category)
texinfo_documents = [
(master_doc, 'Autocmake', u'Autocmake Documentation',
author, 'Autocmake', 'One line description of project.',
'Miscellaneous'),
]
# Documents to append as an appendix to all manuals.
#texinfo_appendices = []
# If false, no module index is generated.
#texinfo_domain_indices = True
# How to display URL addresses: 'footnote', 'no', or 'inline'.
#texinfo_show_urls = 'footnote'
# If true, do not generate a @detailmenu in the "Top" node's menu.
#texinfo_no_detailmenu = False
html_theme = "classic"
html_theme_options = {"body_max_width": "none", "sidebarwidth": "16%"}
html_static_path = ["_static"]
html_sidebars = {"**": ["globaltoc.html", "sourcelink.html", "searchbox.html"]}

View File

@ -10,11 +10,11 @@ This documentation is refreshed upon each push to the central repository.
The module reference documentation is generated from the module sources using
``#.rst:`` tags (compare for instance
http://autocmake.readthedocs.io/en/latest/module-reference.html#cc-cmake with
https://github.com/coderefinery/autocmake/blob/master/modules/cc.cmake).
https://github.com/dev-cafe/autocmake/blob/master/modules/cc.cmake).
Please note that the lines following ``# autocmake.yml configuration::`` are
understood by the ``update.py`` script to infer autocmake.yml code from the
documentation. As an example consider
https://github.com/coderefinery/autocmake/blob/master/modules/cc.cmake#L20-L26.
https://github.com/dev-cafe/autocmake/blob/master/modules/cc.cmake#L20-L26.
Here, ``update.py`` will infer the configurations for ``docopt``, ``export``,
and ``define``.

View File

@ -5,14 +5,14 @@ Testing Autocmake
You will need to install `pytest <http://pytest.org/>`__.
Check also the `Travis <https://github.com/coderefinery/autocmake/blob/master/.travis.yml>`__
Check also the `Travis <https://github.com/dev-cafe/autocmake/blob/master/.travis.yml>`__
build and test recipe for other requirements.
Your contributions and changes should preserve the test set and be PEP8 conform.
You can run locally all tests with::
$ pep8 --ignore E501 update.py
$ pep8 --ignore E501,E265 autocmake
$ pycodestyle --ignore E501 update.py
$ pycodestyle --ignore E501,E265 autocmake
$ py.test -vv autocmake/*
$ py.test -vv test/test.py
@ -23,5 +23,5 @@ You can also select individual tests, for example those with ``fc_blas`` string
For more options, see the ``py.test`` flags.
This test set is run upon each push to the central repository.
See also the `Travis <https://travis-ci.org/coderefinery/autocmake/builds>`__
See also the `Travis <https://travis-ci.org/dev-cafe/autocmake/builds>`__
build and test history.

View File

@ -12,12 +12,15 @@ infrastructure files which will be needed to build the project::
$ mkdir cmake # does not have to be called "cmake" - take the name you prefer
$ cd cmake
$ wget https://github.com/coderefinery/autocmake/raw/master/update.py
$ wget https://github.com/dev-cafe/autocmake/raw/master/update.py
$ virtualenv venv
$ source venv/bin/activate
$ pip install pyyaml
$ python update.py --self
On the MS Windows system, you can use the PowerShell wget-replacement::
$ Invoke-WebRequest https://github.com/coderefinery/autocmake/raw/master/update.py -OutFile update.py
$ Invoke-WebRequest https://github.com/dev-cafe/autocmake/raw/master/update.py -OutFile update.py
This creates (or updates) the following files (an existing ``autocmake.yml`` is
not overwritten by the script)::

View File

@ -1,99 +1,86 @@
.. _autocmake_yml:
Configuring autocmake.cfg
Configuring autocmake.yml
=========================
The script ``autocmake.cfg`` is the high level place where you configure
The script ``autocmake.yml`` is the high level place where you configure
your project. Here is an example. We will discuss it in detail further
below::
[project]
name: numgrid
min_cmake_version: 2.8
[fc]
source: https://github.com/coderefinery/autocmake/raw/master/modules/fc.cmake
min_cmake_version: 3.1
[cc]
source: https://github.com/coderefinery/autocmake/raw/master/modules/cc.cmake
default_build_type: release
[cxx]
source: https://github.com/coderefinery/autocmake/raw/master/modules/cxx.cmake
language:
- Fortran
- C
- CXX
[flags]
source: https://github.com/coderefinery/autocmake/raw/master/compilers/GNU.CXX.cmake
https://github.com/coderefinery/autocmake/raw/master/compilers/Intel.CXX.cmake
url_root: https://github.com/dev-cafe/autocmake/raw/master/
[rpath]
source: custom/rpath.cmake
[definitions]
source: https://github.com/coderefinery/autocmake/raw/master/modules/definitions.cmake
[coverage]
source: https://github.com/coderefinery/autocmake/raw/master/modules/code_coverage.cmake
[safeguards]
source: https://github.com/coderefinery/autocmake/raw/master/modules/safeguards.cmake
[default_build_paths]
source: https://github.com/coderefinery/autocmake/raw/master/modules/default_build_paths.cmake
[src]
source: https://github.com/coderefinery/autocmake/raw/master/modules/src.cmake
[googletest]
source: https://github.com/coderefinery/autocmake/raw/master/modules/googletest.cmake
[custom]
source: custom/api.cmake
custom/test.cmake
modules:
- compilers:
- source:
- '%(url_root)modules/fc.cmake'
- '%(url_root)modules/cc.cmake'
- '%(url_root)modules/cxx.cmake'
- flags:
- source:
- '%(url_root)compilers/GNU.CXX.cmake'
- '%(url_root)compilers/Intel.CXX.cmake'
- 'compilers/Clang.CXX.cmake'
- plugins:
- source:
- '%(url_root)modules/ccache.cmake'
- 'custom/rpath.cmake'
- '%(url_root)modules/definitions.cmake'
- '%(url_root)modules/code_coverage.cmake'
- '%(url_root)modules/safeguards.cmake'
- '%(url_root)modules/default_build_paths.cmake'
- '%(url_root)modules/src.cmake'
- '%(url_root)modules/googletest.cmake'
- 'custom/api.cmake'
- 'custom/test.cmake'
Name and order of sections
--------------------------
We see that the configuration file has sections.
The only section where the name matters is ``[project]``::
First we define the project name (here "numgrid"). This section has to be there
and it has to be called "project" (but it does not have to be on top).
[project]
name: numgrid
min_cmake_version: 2.8
We also have to define ``min_cmake_version`` as well as set the supported language(s).
This is where we define the project name (here "numgrid"). This section has to
be there and it has to be called "project" (but it does not have to be on top).
The definition ``url_root`` is an interpolation (see :ref:`interpolation`) and
we use it to avoid retyping the same line over and over and to be able to
change it in one place. The explicit name "url_root" has no special meaning to
Autocmake and we could have chosen a different name.
The names of the other sections do not matter to Autocmake. You could name them like this::
The section ``modules`` is a list of CMake plugins. The names of the list
elements (here "compilers", "flags", and "plugins") does not matter to
Autocmake. We could have called them "one", "two", and "whatever", but it would
not make much sense. It is better to choose names that are meaningful to you
and readers of your code.
[project]
name: numgrid
min_cmake_version: 2.8
[one]
source: https://github.com/coderefinery/autocmake/raw/master/modules/fc.cmake
[two]
source: https://github.com/coderefinery/autocmake/raw/master/modules/cc.cmake
[whatever]
source: https://github.com/coderefinery/autocmake/raw/master/modules/cxx.cmake
But it would not make much sense. It is better to choose names that are
meaningful to you.
The order of the sections does matter and the sections will be processed in the
exact order as you specify them in ``autocmake.cfg``.
The order of the elements under ``modules`` does matter and the list will be
processed in the exact order as you specify them in ``autocmake.yml``.
Minimal example
---------------
As a minimal example we take an ``autocmake.cfg`` which only contains::
As a minimal example we take an ``autocmake.yml`` which only contains::
[project]
name: minime
min_cmake_version: 2.8
min_cmake_version: 3.1
language: C
If you don't have the ``update.py`` script yet, you need to fetch it from the web::
$ wget https://github.com/dev-cafe/autocmake/raw/master/update.py
First we make sure that the ``update.py`` script is up-to-date and that it has access
to all libraries it needs::
@ -101,15 +88,22 @@ to all libraries it needs::
$ python update.py --self
- creating .gitignore
- fetching lib/config.py
- fetching lib/docopt/docopt.py
- fetching autocmake/configure.py
- fetching autocmake/__init__.py
- fetching autocmake/external/docopt.py
- fetching autocmake/external/__init__.py
- fetching autocmake/generate.py
- fetching autocmake/extract.py
- fetching autocmake/interpolate.py
- fetching autocmake/parse_rst.py
- fetching autocmake/parse_yaml.py
- fetching update.py
Good. Now we can generate ``CMakeLists.txt`` and the setup script::
$ python update ..
$ python update.py ..
- parsing autocmake.cfg
- parsing autocmake.yml
- generating CMakeLists.txt
- generating setup script
@ -119,7 +113,7 @@ Excellent. Here is the generated ``CMakeLists.txt``::
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
# project name
project(minime)
project(minime C)
# do not rebuild if rules (compiler flags) change
set(CMAKE_SKIP_RULE_DEPENDENCY TRUE)
@ -129,8 +123,6 @@ Excellent. Here is the generated ``CMakeLists.txt``::
set(CMAKE_BUILD_TYPE "Debug")
endif()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/cmake/downloaded)
This is the very bare minimum. Every Autocmake project will have at least these
settings.
@ -147,38 +139,38 @@ the following default options::
--show Show CMake command and exit.
--cmake-executable=<CMAKE_EXECUTABLE> Set the CMake executable [default: cmake].
--cmake-options=<STRING> Define options to CMake [default: ''].
--prefix=<PATH> Set the install path for make install.
<builddir> Build directory.
-h --help Show this screen.
That's not too bad although currently we cannot do much with this since there
are no sources listed, no targets, hence nothing to build. We need to flesh out
``CMakeLists.txt`` by extending ``autocmake.cfg``
and this is what we will do in the next section.
``CMakeLists.txt`` by extending ``autocmake.yml`` and this is what we will do
in the next section.
Assembling CMake plugins
------------------------
The preferred way to extend ``CMakeLists.txt`` is by editing ``autocmake.cfg``
The preferred way to extend ``CMakeLists.txt`` is by editing ``autocmake.yml``
and using the ``source`` option::
[fc]
source: https://github.com/coderefinery/autocmake/raw/master/modules/fc.cmake
- compilers:
- source:
- '%(url_root)modules/fc.cmake'
- '%(url_root)modules/cc.cmake'
- '%(url_root)modules/cxx.cmake'
This will download ``fc.cmake`` and include it in ``CMakeLists.txt``.
This will download ``fc.cmake``, ``cc.cmake``, and ``cxx.cmake``, and include
them in ``CMakeLists.txt``, in this order.
You can also include local CMake modules, e.g.::
[rpath]
source: custom/rpath.cmake
- source:
- 'custom/rpath.cmake'
It is also OK to include several modules at once::
[flags]
source: https://github.com/coderefinery/autocmake/raw/master/compilers/GNU.CXX.cmake
https://github.com/coderefinery/autocmake/raw/master/compilers/Intel.CXX.cmake
The modules will be included in the same order as they appear in ``autocmake.cfg``.
It is also OK to include several modules at once as we have seen above. The
modules will be included in the same order as they appear in ``autocmake.yml``.
Fetching files without including them in CMakeLists.txt
@ -187,9 +179,9 @@ Fetching files without including them in CMakeLists.txt
Sometimes you want to fetch a file without including it in ``CMakeLists.txt``.
This can be done with the ``fetch`` option. This is for instance done by the
``git_info.cmake`` module (see
https://github.com/coderefinery/autocmake/blob/master/modules/git_info/git_info.cmake#L10-L11).
https://github.com/dev-cafe/autocmake/blob/master/modules/git_info/git_info.cmake#L10-L13).
If ``fetch`` is invoked in ``autocmake.cfg``, then the fetched file is placed
If ``fetch`` is invoked in ``autocmake.yml``, then the fetched file is placed
under ``downloaded/``. If ``fetch`` is invoked from within a CMake module
documentation (see below), then the fetched file is placed into the same
directory as the CMake module file which fetches it.
@ -199,11 +191,11 @@ Generating setup options
------------------------
Options for the setup script can be generated with the ``docopt``
option. As an example, the following ``autocmake.cfg`` snippet will add a
option. As an example, the following ``autocmake.yml`` snippet will add a
``--something`` flag::
[my_section]
docopt: --something Enable something [default: False].
- my_section:
- docopt: "--something Enable something [default: False]."
Setting CMake options
@ -213,9 +205,9 @@ Configure-time CMake options can be generated with the ``define`` option.
Consider the following example which toggles the CMake variable
``ENABLE_SOMETHING``::
[my_section]
docopt: --something Enable something [default: False].
define: '-DENABLE_SOMETHING={0}'.format(arguments['--something'])
- my_section:
- docopt: "--something Enable something [default: False]."
- define: "'-DENABLE_SOMETHING={0}'.format(arguments['--enable-something'])"
Setting environment variables
@ -224,33 +216,23 @@ Setting environment variables
You can export environment variables at configure-time using the ``export``
option. Consider the following example::
[cc]
docopt: --cc=<CC> C compiler [default: gcc].
--extra-cc-flags=<EXTRA_CFLAGS> Extra C compiler flags [default: ''].
export: 'CC=%s' % arguments['--cc']
define: '-DEXTRA_CFLAGS="%s"' % arguments['--extra-cc-flags']
docopt:
- "--cc=<CC> C compiler [default: gcc]."
- "--extra-cc-flags=<EXTRA_CFLAGS> Extra C compiler flags [default: '']."
export: "'CC={0}'.format(arguments['--cc'])"
define: "'-DEXTRA_CFLAGS=\"{0}\"'.format(arguments['--extra-cc-flags'])"
Auto-generating configurations from the documentation
-----------------------------------------------------
To avoid a boring re-typing of boilerplate ``autocmake.cfg`` code it is possible
To avoid a boring re-typing of boilerplate ``autocmake.yml`` code it is possible
to auto-generate configurations from the documentation. This is the case
for many core modules which come with own options once you have sourced them.
The lines following ``# autocmake.cfg configuration::`` are
understood by the ``update.py`` script to infer ``autocmake.cfg`` code from the
The lines following ``# autocmake.yml configuration::`` are
understood by the ``update.py`` script to infer ``autocmake.yml`` code from the
documentation. As an example consider
https://github.com/coderefinery/autocmake/blob/master/modules/cc.cmake#L20-L25.
https://github.com/dev-cafe/autocmake/blob/master/modules/cc.cmake#L20-L26.
Here, ``update.py`` will infer the configurations for ``docopt``, ``export``,
and ``define``.
Overriding documented configurations
------------------------------------
Configurable documented defaults can be achieved using interpolations. See for
instance
https://github.com/coderefinery/autocmake/blob/master/modules/boost/boost.cmake#L33-L36.
These can be modified within ``autocmake.cfg`` with a dictionary, e.g.:
https://github.com/coderefinery/autocmake/blob/master/test/boost_libs/cmake/autocmake.cfg#L9

View File

@ -47,11 +47,11 @@ Settings in ``autocmake.yml`` take precedence over
settings imported by a sourced module.
As an example consider the Boost module which defines and uses
interpolation variables ``major``, ``minor``, and ``patch``, see
https://github.com/coderefinery/autocmake/blob/master/modules/boost/boost.cmake#L52-L54.
interpolation variables ``major``, ``minor``, ``patch``, and ``components``, see
https://github.com/dev-cafe/autocmake/blob/master/modules/boost/boost.cmake#L52-L55.
The recommended way to customize these is in ``autocmake.yml``, e.g.:
https://github.com/coderefinery/autocmake/blob/master/test/boost_libs/cmake/autocmake.yml#L12-L17.
https://github.com/dev-cafe/autocmake/blob/master/test/boost_libs/cmake/autocmake.yml#L12-L17.
Create own CMake modules
@ -65,5 +65,5 @@ Contribute customizations to the "standard library"
If you think that your customization will be useful for other users as well,
you may consider contributing the changes directly to
https://github.com/coderefinery/autocmake/. We very much encourage such
https://github.com/dev-cafe/autocmake/. We very much encourage such
contributions. But we also strive for generality and portability.

View File

@ -1,6 +1,6 @@
Example Hello World project
Example hello world project
===========================
This is a brief example for the busy and impatient programmer. For a longer
@ -23,40 +23,53 @@ there. This is not necessary for Autocmake but it is a generally good practice::
Now we create ``cmake/`` and fetch ``update.py``::
$ mkdir cmake
$ cd cmake/
$ wget https://raw.githubusercontent.com/coderefinery/autocmake/master/update.py
$ mkdir cmake # does not have to be called "cmake" - take the name you prefer
$ cd cmake
$ wget https://github.com/dev-cafe/autocmake/raw/master/update.py
$ python update.py --self
Now from top-level our file tree looks like this::
.
|-- cmake
| |-- autocmake.cfg
| |-- lib
| | |-- config.py
| | `-- docopt
| | `-- docopt.py
| |-- autocmake
| | |-- __init__.py
| | |-- configure.py
| | |-- external
| | | |-- __init__.py
| | | `-- docopt.py
| | |-- extract.py
| | |-- generate.py
| | |-- interpolate.py
| | |-- parse_rst.py
| | `-- parse_yaml.py
| |-- autocmake.yml
| `-- update.py
`-- src
|-- feature1.F90
|-- feature2.c
`-- main.F90
Now we edit ``cmake/autocmake.cfg`` to look like this::
Now we edit ``cmake/autocmake.yml`` to look like this::
[project]
name: hello
min_cmake_version: 2.8
[fc]
source: https://github.com/coderefinery/autocmake/raw/master/modules/fc.cmake
min_cmake_version: 3.1
[cc]
source: https://github.com/coderefinery/autocmake/raw/master/modules/cc.cmake
language:
- Fortran
- C
[src]
source: https://github.com/coderefinery/autocmake/raw/master/modules/src.cmake
url_root: https://github.com/dev-cafe/autocmake/raw/master/
modules:
- compilers:
- source:
- '%(url_root)modules/fc.cmake'
- '%(url_root)modules/cc.cmake'
- src_support:
- source:
- '%(url_root)modules/src.cmake'
What we have specified here is the project name and that we wish Fortran and C
support. The ``src.cmake`` module tells CMake to include a ``src/CMakeLists.txt``.
@ -76,20 +89,32 @@ Now we have everything to generate ``CMakeLists.txt`` and a setup script::
$ cd cmake
$ python update ..
- parsing autocmake.yml
- assembling modules: [##############################] (3/3)
- generating CMakeLists.txt
- generating setup script
And this is what we got::
.
|-- CMakeLists.txt
|-- cmake
| |-- autocmake.cfg
| |-- autocmake
| | |-- __init__.py
| | |-- configure.py
| | |-- external
| | | |-- __init__.py
| | | `-- docopt.py
| | |-- extract.py
| | |-- generate.py
| | |-- interpolate.py
| | |-- parse_rst.py
| | `-- parse_yaml.py
| |-- autocmake.yml
| |-- downloaded
| | |-- autocmake_cc.cmake
| | |-- autocmake_fc.cmake
| | `-- autocmake_src.cmake
| |-- lib
| | |-- config.py
| | `-- docopt
| | `-- docopt.py
| `-- update.py
|-- setup
`-- src
@ -100,12 +125,12 @@ And this is what we got::
Now we are ready to build::
$ python setup --fc=gfortran --cc=gcc
$ ./setup --fc=gfortran --cc=gcc
FC=gfortran CC=gcc cmake -DEXTRA_FCFLAGS="''" -DENABLE_FC_SUPPORT="ON" -DEXTRA_CFLAGS="''" -DCMAKE_BUILD_TYPE=release -G "Unix Makefiles" None /home/user/example
FC=gfortran CC=gcc cmake -DEXTRA_FCFLAGS="''" -DEXTRA_CFLAGS="''" -DCMAKE_BUILD_TYPE=release -G "Unix Makefiles" /home/user/hello
-- The C compiler identification is GNU 4.9.2
-- The CXX compiler identification is GNU 4.9.2
-- The C compiler identification is GNU 6.1.1
-- The CXX compiler identification is GNU 6.1.1
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
@ -118,7 +143,7 @@ Now we are ready to build::
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- The Fortran compiler identification is GNU 4.9.2
-- The Fortran compiler identification is GNU 6.1.1
-- Check for working Fortran compiler: /usr/bin/gfortran
-- Check for working Fortran compiler: /usr/bin/gfortran -- works
-- Detecting Fortran compiler ABI info
@ -127,14 +152,14 @@ Now we are ready to build::
-- Checking whether /usr/bin/gfortran supports Fortran 90 -- yes
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/example/build
-- Build files have been written to: /home/user/hello/build
configure step is done
now you need to compile the sources:
$ cd build
$ make
$ cd build/
$ cd build
$ make
Scanning dependencies of target hello.x

View File

@ -4,6 +4,18 @@ FAQ for developers
==================
Which files do I need to edit?
------------------------------
Let us start with files which you normally never edit: ``CMakeLists.txt`` and
``setup`` - these are generated based on ``autocmake.yml``. Have a look in
``autocmake.yml`` and you will see all CMake files which are assembled into
``CMakeLists.txt``. You can edit those files. If you change the order of files
listed in ``autocmake.yml`` or if you add or remove CMake modules, then you
need to rerun the ``update.py`` script to refresh ``CMakeLists.txt`` and
``setup``.
Autocmake does not do feature X - I really need feature X and a setup flag --X
------------------------------------------------------------------------------
@ -19,18 +31,22 @@ naming)::
cmake/custom/my_feature.cmake
And include this feature to the main ``CMakeLists.txt`` in ``autocmake.cfg``::
And include this feature to the main ``CMakeLists.txt`` in ``autocmake.yml``
under the ``modules`` section::
[my_feature]
source: custom/my_feature.cmake
modules:
- my_feature:
- source:
- custom/my_feature.cmake
Now your code is included in the main ``CMakeLists.txt``. Perhaps you also
want a setup script flag to toggle the feature::
[my_feature]
source: custom/my_feature.cmake
docopt: --my-feature Enable my feature [default: False].
define: '-DENABLE_MY_FEATURE={0}'.format(arguments['--my-feature'])
- my_feature:
- docopt: "--enable-my-feature Enable my feature [default: False]."
- define: "'-DENABLE_MY_FEATURE={0}'.format(arguments['--enable-my-feature'])"
- source:
- custom/my_feature.cmake
Implement your ideas, test them, and share them. If your module is portable,
good code quality, and of general interest, you can suggest it to be part of
@ -43,20 +59,33 @@ How can I get a setup flag --X that toggles a CMake variable?
The following will add a ``--something`` flag which toggles the CMake variable
``ENABLE_SOMETHING``::
[my_section]
docopt: --something Enable something [default: False].
define: '-DENABLE_SOMETHING={0}'.format(arguments['--something'])
- my_section:
- docopt: "--something Enable something [default: False]."
- define: "'-DENABLE_SOMETHING={0}'.format(arguments['--enable-something'])"
Can I change the name of the setup script?
------------------------------------------
Yes you can do that in ``autocmake.cfg``. Here we for instance change the name to "configure"::
Yes you can do that in ``autocmake.yml``. Here we for instance change the name to "configure":
.. code-block:: yaml
:emphasize-lines: 4
[project]
name: myproject
min_cmake_version: 2.8
min_cmake_version: 3.1
default_build_type: release
setup_script: configure
language:
- Fortran
- C
- CXX
Can I prevent Autocmake from creating any front-end setup script?
-----------------------------------------------------------------
Yes, with ``setup_script: None``.
In CMake I can do feature X - can I do that also with Autocmake?
@ -70,12 +99,13 @@ realized in Autocmake.
Should I include and track also files generated by Autocmake in my repository?
------------------------------------------------------------------------------
Yes, you probably want to do that. Autocmake generates a number of files which
in principle could be generated at configure- or build-time. However, you
probably do not want the users of your code to run any Autocmake scripts like
``update.py`` to generate the files they need to build the project. The users
of your code will run ``setup`` directly and expect everything to just work
(TM).
Yes, you probably want to do that. Autocmake downloads and generates a number
of files which in principle could be generated at configure- or build-time.
However, you probably do not want the users of your code to run any Autocmake
scripts like ``update.py`` to generate the files they need to build the
project. The users of your code will run ``setup`` directly and typically expect
everything to just work (TM). Note also that the users of your code will
not need to install the pyyaml package.
The update.py script is overwriting my CMakeLists.txt and setup, isn't this bad?
@ -93,7 +123,7 @@ But I need to manually edit and customize CMakeLists.txt and setup every time I
-----------------------------------------------------------------------------------------------
You typically never need to manually edit and customize ``CMakeLists.txt`` and
``setup`` directly. You can introduce customizations in ``autocmake.cfg``
``setup`` directly. You can introduce customizations in ``autocmake.yml``
which get assembled into the front-end scripts.
@ -101,19 +131,21 @@ Where is a good place to list my sources and targets?
-----------------------------------------------------
As mentioned above ``CMakeLists.txt`` is not a good place because this file is
generated from ``autocmake.cfg`` and your modifications would become
generated from ``autocmake.yml`` and your modifications would become
overwritten at some point. A good standard is to organize your sources under
``src/`` and to list your sources and targets in ``src/CMakeLists.txt``. You
can include the latter in ``autocmake.cfg`` using::
can include the latter in ``autocmake.yml`` using::
[src]
source: https://github.com/coderefinery/autocmake/raw/master/modules/src.cmake
- my_sources:
- source:
- https://github.com/dev-cafe/autocmake/raw/master/modules/src.cmake
If you really don't like to do it this way, you can describe your sources and
If you really do not like to do it this way, you can describe your sources and
targets in a custom module in a local file and include it like this::
[my_sources]
source: custom/my_sources.cmake
- my_sources:
- source:
- custom/my_sources.cmake
How can I do some more sophisticated validation of setup flags?
@ -121,7 +153,7 @@ How can I do some more sophisticated validation of setup flags?
Sometimes you need to do more sophisticated validation and post-processing
of setup flags. This can be done by placing a module called ``extensions.py``
under ``cmake/`` (or wherever you have ``autocmake.cfg``).
under ``cmake/`` (or wherever you have ``autocmake.yml``).
This file should implement a function with the following signature:
.. code-block:: python
@ -135,5 +167,37 @@ This file should implement a function with the following signature:
return arguments
In this function you can do any validation and post-processing you like.
This function is run after the flags are parsed and before the ``CMake`` command
This function is run after the flags are parsed and before the CMake command
is run.
Example for a validation of MPI flags to the setup script:
.. code-block:: python
import sys
def contains_flag(sys_argv, flag):
return (any(x for x in sys_argv if x.startswith('--{0}='.format(flag))))
def postprocess_args(sys_argv, arguments):
# if --mpi is selected and compilers are not selected
# then compilers default to mpif90, mpicc, and mpicxx
if arguments['--mpi']:
if not contains_flag(sys_argv, 'fc') and not contains_flag(sys_argv, 'cc') and not contains_flag(sys_argv, 'cxx'):
arguments['--fc'] = 'mpif90'
arguments['--cc'] = 'mpicc'
arguments['--cxx'] = 'mpicxx'
# if one of the compilers contains "mpi" and --mpi is not selected, it is probably a user error
# in this case stop the configuration
asking_for_mpi_compiler = False
for flag in ['fc', 'cc', 'cxx']:
if contains_flag(sys_argv, 'fc'):
if 'mpi' in arguments['--fc']:
asking_for_mpi_compiler = True
if asking_for_mpi_compiler and not arguments['--mpi']:
sys.stderr.write('ERROR: you ask for an MPI compiler but have not specified --mpi\n')
sys.exit(1)
return arguments

View File

@ -0,0 +1,34 @@
.. _interpolation:
Interpolation
=============
In a custom extension to the YAML specification you can define and reuse
variables like this (observe how we interpolate ``url_root``, ``major``,
``minor``, ``patch``, and ``components`` in this example)::
url_root: https://github.com/dev-cafe/autocmake/raw/master/
major: 1
minor: 48
patch: 0
components: ""
fetch:
- "%(url_root)modules/boost/boost_unpack.cmake"
- "%(url_root)modules/boost/boost_userconfig.cmake"
- "%(url_root)modules/boost/boost_configure.cmake"
- "%(url_root)modules/boost/boost_build.cmake"
- "%(url_root)modules/boost/boost_install.cmake"
- "%(url_root)modules/boost/boost_headers.cmake"
- "%(url_root)modules/boost/boost_cleanup.cmake"
- "http://sourceforge.net/projects/boost/files/boost/%(major).%(minor).%(patch)/boost_%(major)_%(minor)_%(patch).zip"
docopt:
- "--boost-headers=<BOOST_INCLUDEDIR> Include directories for Boost [default: '']."
- "--boost-libraries=<BOOST_LIBRARYDIR> Library directories for Boost [default: '']."
- "--build-boost=<FORCE_CUSTOM_BOOST> Deactivate Boost detection and build on-the-fly <ON/OFF> [default: OFF]."
define:
- "'-DBOOST_INCLUDEDIR=\"{0}\"'.format(arguments['--boost-headers'])"
- "'-DBOOST_LIBRARYDIR=\"{0}\"'.format(arguments['--boost-libraries'])"
- "'-DFORCE_CUSTOM_BOOST={0}'.format(arguments['--build-boost'])"
- "'-DBOOST_MINIMUM_REQUIRED=\"%(major).%(minor).%(patch)\"'"
- "'-DBOOST_COMPONENTS_REQUIRED=\"%(components)\"'"

View File

@ -20,11 +20,11 @@ Sometimes you may want to avoid using the latest version of a CMake module and
rather fetch an older version, for example with the hash ``abcd123``. To
achieve this, instead of::
[foo]
source: https://github.com/coderefinery/autocmake/raw/master/modules/foo.cmake
- my_feature:
- source: https://github.com/dev-cafe/autocmake/raw/master/modules/foo.cmake
pin the version to ``abcd123`` (you do not need to specify the full Git hash, a unique
beginning will do)::
[foo]
source: https://github.com/coderefinery/autocmake/raw/abcd123/modules/foo.cmake
- my_feature:
- source: https://github.com/dev-cafe/autocmake/raw/abcd123/modules/foo.cmake

View File

@ -73,7 +73,7 @@ def main():
if s_out != '':
output.append('\n\n%s' % file_name)
output.append('-'*len(file_name))
output.append('`[Source code] <https://github.com/coderefinery/autocmake/blob/master/modules/%s>`__' % full_file_name)
output.append('`[Source code] <https://github.com/dev-cafe/autocmake/blob/master/modules/%s>`__' % full_file_name)
output.append(s_out)
with open(os.path.join(THIS_DIR, 'module-reference.rst'), 'w') as f:

View File

@ -38,7 +38,7 @@ file::
Build/install/test targets
Our main motivation to create Autocmake as a CMake framework library and
CMake module composer is to simplify CMake code transfer between codes. We got
CMake module composer is to simplify CMake code transfer between programs. We got
tired of manually diffing and copy-pasting boiler-plate CMake code and watching
it diverge while maintaining the CMake infrastructure in a growing number of
scientific projects which typically have very similar requirements:

View File

@ -8,3 +8,6 @@ support Python 3 (we automatically test with 2.7 and 3.5).
The generated setup script runs with Python >= 2.6 (also tested with Python
3.5).
To generate ``CMakeLists.txt`` and the ``setup`` script, Autocmake
requires the pyyaml package.

View File

@ -1,25 +1,21 @@
Autocmake (this documentation is outdated, see stable-0.x branch)
=================================================================
Autocmake
=========
General
-------
.. toctree::
:maxdepth: 2
:caption: General
general/about.rst
general/requirements.rst
general/help.rst
For developers who use Autocmake
--------------------------------
.. toctree::
:maxdepth: 2
:caption: For developers who use Autocmake
developers/faq.rst
developers/bootstrap.rst
@ -27,32 +23,27 @@ For developers who use Autocmake
developers/example.rst
developers/customizing-modules.rst
developers/updating-modules.rst
developers/interpolation.rst
For users of projects which use Autocmake
-----------------------------------------
.. toctree::
:maxdepth: 2
:caption: For users of projects which use Autocmake
users/faq.rst
For developers/contributors to Autocmake
----------------------------------------
.. toctree::
:maxdepth: 2
:caption: For developers/contributors to Autocmake
contributors/guidelines.rst
contributors/testing.rst
contributors/doc.rst
Reference
---------
.. toctree::
:maxdepth: 2
:caption: Reference
module-reference.rst

35
doc/make.bat Normal file
View File

@ -0,0 +1,35 @@
@ECHO OFF
pushd %~dp0
REM Command file for Sphinx documentation
if "%SPHINXBUILD%" == "" (
set SPHINXBUILD=sphinx-build
)
set SOURCEDIR=.
set BUILDDIR=_build
%SPHINXBUILD% >NUL 2>NUL
if errorlevel 9009 (
echo.
echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
echo.installed, then set the SPHINXBUILD environment variable to point
echo.to the full path of the 'sphinx-build' executable. Alternatively you
echo.may add the Sphinx directory to PATH.
echo.
echo.If you don't have Sphinx installed, grab it from
echo.https://www.sphinx-doc.org/
exit /b 1
)
if "%1" == "" goto help
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
goto end
:help
%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
:end
popd

View File

@ -49,9 +49,7 @@ Like this::
$ python setup --cmake-options='"-DTHIS_OPTION=ON -DTHAT_OPTION=OFF"'
We use two sets of quotes because the shell swallows one set of them
before passing the arguments to Python. Yeah that's not nice, but nothing
we can do about it on the Python side.
If you do not use two sets
of quotes then the setup command may end up
incorrectly saved in `build/setup_command`.
We use two sets of quotes because the shell swallows one set of them before
passing the arguments to Python. Yeah that's not nice, but nothing we can do
about it on the Python side. If you do not use two sets of quotes then the
setup command may end up incorrectly saved in `build/setup_command`.

View File

@ -4,4 +4,4 @@
name: myproject
min_cmake_version: 2.8
min_cmake_version: 3.1

View File

@ -0,0 +1,13 @@
import glob
license_text = '''# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
'''
for filename in glob.iglob('**/*.cmake', recursive=True):
with open(filename, 'r') as old:
text = old.read()
with open(filename, 'w') as new:
new.write(license_text)
new.write(text)

View File

@ -1,189 +0,0 @@
#.rst:
#
# Detect, build, and link Boost libraries.
# This modules downloads the .zip archive from SourceForge at
# Autocmake update time.
# Note that the build-up commands are not Windows-compatible!
#
# Your autocmake.yml should look like this::
#
# - boost:
# - major: 1
# - minor: 59
# - patch: 0
# - components: "chrono;timer;system"
# - source: "https://github.com/coderefinery/autocmake/raw/master/modules/boost/boost.cmake"
#
# Cross-dependencies between required components are not checked for.
# For example, Boost.Timer depends on Boost.Chrono and Boost.System thus you
# should ask explicitly for all three.
# If the self-build of Boost components is triggered the `BUILD_CUSTOM_BOOST` variable is set
# to `TRUE`. The CMake target `custom_boost` is also added.
# You should use these two to ensure the right dependencies between your targets
# and the Boost headers/libraries, in case the self-build is triggered.
# For example::
#
# if(BUILD_CUSTOM_BOOST)
# add_dependencies(your_target custom_boost)
# endif()
#
# will ensure that `your_target` is built after `custom_boost` if and only if the self-build
# of Boost took place. This is an important step to avoid race conditions when building
# on multiple processes.
#
# Dependencies::
#
# mpi - Only if the Boost.MPI library is a needed component
# python_libs - Only if the Boost.Python library is a needed component
#
# Variables used::
#
# BOOST_MINIMUM_REQUIRED - Minimum required version of Boost
# BOOST_COMPONENTS_REQUIRED - Components (compiled Boost libraries) required
# PROJECT_SOURCE_DIR
# PROJECT_BINARY_DIR
# CMAKE_BUILD_TYPE
# MPI_FOUND
# BUILD_CUSTOM_BOOST
#
# autocmake.yml configuration::
#
# url_root: https://github.com/coderefinery/autocmake/raw/master/
# major: 1
# minor: 48
# patch: 0
# components: ""
# fetch:
# - "%(url_root)modules/boost/boost_unpack.cmake"
# - "%(url_root)modules/boost/boost_userconfig.cmake"
# - "%(url_root)modules/boost/boost_configure.cmake"
# - "%(url_root)modules/boost/boost_build.cmake"
# - "%(url_root)modules/boost/boost_install.cmake"
# - "%(url_root)modules/boost/boost_headers.cmake"
# - "%(url_root)modules/boost/boost_cleanup.cmake"
# - "http://sourceforge.net/projects/boost/files/boost/%(major).%(minor).%(patch)/boost_%(major)_%(minor)_%(patch).zip"
# docopt:
# - "--boost-headers=<BOOST_INCLUDEDIR> Include directories for Boost [default: '']."
# - "--boost-libraries=<BOOST_LIBRARYDIR> Library directories for Boost [default: '']."
# - "--build-boost=<FORCE_CUSTOM_BOOST> Deactivate Boost detection and build on-the-fly <ON/OFF> [default: OFF]."
# define:
# - "'-DBOOST_INCLUDEDIR=\"{0}\"'.format(arguments['--boost-headers'])"
# - "'-DBOOST_LIBRARYDIR=\"{0}\"'.format(arguments['--boost-libraries'])"
# - "'-DFORCE_CUSTOM_BOOST={0}'.format(arguments['--build-boost'])"
# - "'-DBOOST_MINIMUM_REQUIRED=\"%(major).%(minor).%(patch)\"'"
# - "'-DBOOST_COMPONENTS_REQUIRED=\"%(components)\"'"
# FIXME Maintainer should be able to choose between fail (end-user has to satisfy dependency
# on its own) and soft-fail (self-build of Boost)
# Underscore-separated version number
string(REGEX REPLACE "\\." "_" BOOSTVER ${BOOST_MINIMUM_REQUIRED})
# Where the Boost .zip archive is located
set(BOOST_ARCHIVE_LOCATION ${PROJECT_SOURCE_DIR}/cmake/downloaded)
set(BOOST_ARCHIVE boost_${BOOSTVER}.zip)
# FIXME These are possibly not always good settings
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(Boost_USE_STATIC_RUNTIME OFF)
set(Boost_DEBUG OFF)
set(Boost_DETAILED_FAILURE_MESSAGE OFF)
set(BUILD_CUSTOM_BOOST FALSE)
if(FORCE_CUSTOM_BOOST)
set(BUILD_CUSTOM_BOOST TRUE)
message(STATUS "Force automatic build of Boost")
# Just to avoid unused variable warning from CMake
set(BOOST_INCLUDEDIR "")
set(BOOST_LIBRARYDIR "")
else()
# Read from cache, needed for rebuilds
set(BOOST_INCLUDEDIR ${Boost_INCLUDE_DIR})
set(BOOST_LIBRARYDIR ${Boost_LIBRARY_DIR})
find_package(Boost ${BOOST_MINIMUM_REQUIRED} COMPONENTS "${BOOST_COMPONENTS_REQUIRED}")
if(NOT Boost_FOUND)
set(BUILD_CUSTOM_BOOST TRUE)
endif()
endif()
if(BUILD_CUSTOM_BOOST)
## Preliminary work
# 0. Root directory for the custom build
set(CUSTOM_BOOST_LOCATION ${PROJECT_BINARY_DIR}/boost)
file(MAKE_DIRECTORY ${CUSTOM_BOOST_LOCATION})
# 1. Where Boost will be built
set(BOOST_BUILD_DIR ${CUSTOM_BOOST_LOCATION}/boost_${BOOSTVER})
# 2. Select toolset according to compilers specified by the user
set(toolset "")
if(CMAKE_CXX_COMPILER_ID MATCHES Intel)
set(toolset "intel-linux")
elseif(CMAKE_CXX_COMPILER_ID MATCHES Clang)
set(toolset "clang")
else()
if(CMAKE_SYSTEM_NAME MATCHES Darwin)
set(toolset "darwin")
else()
set(toolset "gcc")
endif()
endif()
string(TOLOWER ${CMAKE_BUILD_TYPE} type)
# CMAKE_CURRENT_LIST_DIR is undefined in CMake 2.8.2
# see https://public.kitware.com/Bug/print_bug_page.php?bug_id=11675
# workaround: create CMAKE_CURRENT_LIST_DIR
get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
include(${CMAKE_CURRENT_LIST_DIR}/boost_unpack.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/boost_userconfig.cmake)
if(NOT "${BOOST_COMPONENTS_REQUIRED}" STREQUAL "")
# Non-empty list. Compiled libraries needed
# Transform the ;-separated list to a ,-separated list (digested by the Boost build toolchain!)
string(REPLACE ";" "," b2_needed_components "${BOOST_COMPONENTS_REQUIRED}")
# Replace unit_test_framework (used by CMake's find_package) with test (understood by Boost build toolchain)
string(REPLACE "unit_test_framework" "test" b2_needed_components "${b2_needed_components}")
set(select_libraries "--with-libraries=${b2_needed_components}")
string(REPLACE ";" ", " printout "${BOOST_COMPONENTS_REQUIRED}")
message(STATUS " Libraries to be built: ${printout}")
message(STATUS " Toolset to be used: ${toolset}")
include(${CMAKE_CURRENT_LIST_DIR}/boost_configure.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/boost_build.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/boost_install.cmake)
else()
# Empty list. Header-only libraries needed
# Just unpack to known location
message(STATUS " No libraries required, installing headers")
include(${CMAKE_CURRENT_LIST_DIR}/boost_headers.cmake)
endif()
include(${CMAKE_CURRENT_LIST_DIR}/boost_cleanup.cmake)
add_custom_target(custom_boost DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.cleanedup)
# 4. Set all variables related to Boost that find_package would have set
set(Boost_FOUND TRUE)
string(REGEX REPLACE "\\." "0" Boost_VERSION ${BOOST_MINIMUM_REQUIRED})
math(EXPR Boost_MAJOR_VERSION "${Boost_VERSION} / 100000")
math(EXPR Boost_MINOR_VERSION "${Boost_VERSION} / 100 % 1000")
math(EXPR Boost_SUBMINOR_VERSION "${Boost_VERSION} % 100")
set(Boost_LIB_VERSION ${Boost_MAJOR_VERSION}_${Boost_MINOR_VERSION})
set(Boost_INCLUDE_DIR ${CUSTOM_BOOST_LOCATION}/include CACHE PATH "Boost include directory" FORCE)
set(Boost_LIBRARY_DIR ${CUSTOM_BOOST_LOCATION}/lib CACHE PATH "Boost library directory" FORCE)
foreach(_component ${BOOST_COMPONENTS_REQUIRED})
string(TOUPPER ${_component} _COMP)
set(Boost_${_COMP}_FOUND TRUE)
set(Boost_${_COMP}_LIBRARY libboost_${_component}.a)
set(Boost_${_COMP}_LIBRARY_DEBUG ${Boost_LIBRARY_DIR}/${Boost_${_COMP}_LIBRARY} CACHE FILEPATH "Boost ${_component} library (debug)" FORCE)
set(Boost_${_COMP}_LIBRARY_RELEASE ${Boost_LIBRARY_DIR}/${Boost_${_COMP}_LIBRARY} CACHE FILEPATH "Boost ${_component} library (release)" FORCE)
list(APPEND Boost_LIBRARIES ${Boost_${_COMP}_LIBRARY})
endforeach()
set(Boost_INCLUDE_DIRS ${Boost_INCLUDE_DIR})
set(Boost_LIBRARY_DIRS ${Boost_LIBRARY_DIR})
if(CMAKE_SYSTEM_NAME MATCHES Linux)
list(APPEND Boost_LIBRARIES rt)
endif()
endif()
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})

View File

@ -1,10 +0,0 @@
# Build Boost
# This is not Windows-friendly!
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.built
COMMAND ./b2 toolset=${toolset} variant=${type} link=static cxxflags=-fPIC
threading=multi --user-config=user-config.jam 1> ${CUSTOM_BOOST_LOCATION}/boost.built.log 2> ${CUSTOM_BOOST_LOCATION}/boost.built.err
COMMAND ${CMAKE_COMMAND} -E touch ${CUSTOM_BOOST_LOCATION}/boost.built
WORKING_DIRECTORY ${BOOST_BUILD_DIR}
DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.configured
COMMENT "Building Boost")

View File

@ -1,8 +0,0 @@
# Clean-up
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.cleanedup
COMMAND ${CMAKE_COMMAND} -E remove_directory ${BOOST_BUILD_DIR}
COMMAND ${CMAKE_COMMAND} -E touch ${CUSTOM_BOOST_LOCATION}/boost.cleanedup
WORKING_DIRECTORY ${CUSTOM_BOOST_LOCATION}
DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.installed
COMMENT "Clean-up Boost")

View File

@ -1,12 +0,0 @@
# Run bootstrap.sh to configure the build. We will install in ${PROJECT_BINARY_DIR}/boost
# This is not Windows-friendly!
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.configured
COMMAND ./bootstrap.sh --with-toolset=${toolset}
${select_libraries}
--with-python=${PYTHON_EXECUTABLE}
--prefix=${CUSTOM_BOOST_LOCATION} 1> ${CUSTOM_BOOST_LOCATION}/boost.configured.log 2> ${CUSTOM_BOOST_LOCATION}/boost.configured.err
COMMAND ${CMAKE_COMMAND} -E touch ${CUSTOM_BOOST_LOCATION}/boost.configured
WORKING_DIRECTORY ${BOOST_BUILD_DIR}
DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.user-config
COMMENT "Configuring Boost")

View File

@ -1,8 +0,0 @@
# Install Boost
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.installed
COMMAND ${CMAKE_COMMAND} -E copy_directory ${BOOST_BUILD_DIR}/boost ${CUSTOM_BOOST_LOCATION}/include/boost
COMMAND ${CMAKE_COMMAND} -E touch ${CUSTOM_BOOST_LOCATION}/boost.installed
WORKING_DIRECTORY ${BOOST_BUILD_DIR}
DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.user-config
COMMENT "Installing Boost headers")

View File

@ -1,10 +0,0 @@
# Install Boost
# This is not Windows-friendly!
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.installed
COMMAND ./b2 install toolset=${toolset} variant=${type} link=static
threading=multi --user-config=user-config.jam 1> ${CUSTOM_BOOST_LOCATION}/boost.installed.log 2> ${CUSTOM_BOOST_LOCATION}/boost.installed.err
COMMAND ${CMAKE_COMMAND} -E touch ${CUSTOM_BOOST_LOCATION}/boost.installed
WORKING_DIRECTORY ${BOOST_BUILD_DIR}
DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.built
COMMENT "Installing Boost headers and libs")

View File

@ -1,8 +0,0 @@
# Unpack Boost
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.unpacked
COMMAND ${CMAKE_COMMAND} -E tar xzf ${BOOST_ARCHIVE_LOCATION}/${BOOST_ARCHIVE}
COMMAND ${CMAKE_COMMAND} -E touch boost.unpacked
DEPENDS ${BOOST_ARCHIVE_LOCATION}/${BOOST_ARCHIVE}
WORKING_DIRECTORY ${CUSTOM_BOOST_LOCATION}
COMMENT "Unpacking Boost")

View File

@ -1,15 +0,0 @@
# To get boost to compile MPI we need to append "using mpi ;" to the end of the
# user-config.jam file. MPI_SENT will be the command we append
set(MPI_SENT "")
if(ENABLE_MPI AND MPI_FOUND)
set(MPI_SENT "using mpi \;")
endif()
file(WRITE ${CUSTOM_BOOST_LOCATION}/user-config.jam ${MPI_SENT})
# Write user-config.jam
add_custom_command(
OUTPUT ${CUSTOM_BOOST_LOCATION}/boost.user-config
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CUSTOM_BOOST_LOCATION}/user-config.jam ${BOOST_BUILD_DIR}/user-config.jam
COMMAND ${CMAKE_COMMAND} -E touch boost.user-config
DEPENDS ${CUSTOM_BOOST_LOCATION}/boost.unpacked
WORKING_DIRECTORY ${CUSTOM_BOOST_LOCATION}
COMMENT "Generating user-config.jam")

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds C support.
@ -22,10 +25,7 @@
# docopt:
# - "--cc=<CC> C compiler [default: gcc]."
# - "--extra-cc-flags=<EXTRA_CFLAGS> Extra C compiler flags [default: '']."
# export: "'CC={0}'.format(arguments['--cc'])"
# define: "'-DEXTRA_CFLAGS=\"{0}\"'.format(arguments['--extra-cc-flags'])"
enable_language(C)
# define: "'-DCMAKE_C_COMPILER={0} -DEXTRA_CFLAGS=\"{1}\"'.format(arguments['--cc'], arguments['--extra-cc-flags'])"
if(NOT DEFINED CMAKE_C_COMPILER_ID)
message(FATAL_ERROR "CMAKE_C_COMPILER_ID variable is not defined!")
@ -36,7 +36,9 @@ if(NOT CMAKE_C_COMPILER_WORKS)
endif()
if(DEFINED EXTRA_CFLAGS)
if(NOT EXTRA_CFLAGS STREQUAL "")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
endif()
endif()
if(DEFINED ENV{CFLAGS})

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds ccache support.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Enables code coverage by appending corresponding compiler flags.
@ -10,30 +13,54 @@
#
# autocmake.yml configuration::
#
# docopt: "--coverage Enable code coverage [default: False]."
# docopt: "--coverage Enable code coverage [default: OFF]."
# define: "'-DENABLE_CODE_COVERAGE={0}'.format(arguments['--coverage'])"
option(ENABLE_CODE_COVERAGE "Enable code coverage" OFF)
if(ENABLE_CODE_COVERAGE)
if(DEFINED CMAKE_Fortran_COMPILER_ID)
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
endif()
if(NOT CMAKE_BUILD_TYPE STREQUAL "debug")
message(WARNING "Code coverage analysis results with an optimized (non-Debug) build may be misleading")
endif()
if(DEFINED CMAKE_C_COMPILER_ID)
if(CMAKE_C_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
endif()
find_program(GCOV_PATH gcov)
if(NOT GCOV_PATH)
message(FATAL_ERROR "Code coverage analysis requires gcov!")
endif()
if(DEFINED CMAKE_CXX_COMPILER_ID)
if(CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES Clang)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
if(DEFINED CMAKE_Fortran_COMPILER_ID)
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fprofile-arcs -ftest-coverage")
else()
message(FATAL_ERROR "Code coverage analysis requires the GNU Fortran compiler!")
endif()
endif()
if(DEFINED CMAKE_C_COMPILER_ID)
if(CMAKE_C_COMPILER_ID MATCHES "(Apple)?[Cc]lang")
if(CMAKE_C_COMPILER_VERSION VERSION_LESS 3)
message(FATAL_ERROR "Code coverage analysis on Mac OS X requires Clang version 3.0.0 or greater!")
else()
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
elseif(CMAKE_C_COMPILER_ID MATCHES GNU)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fprofile-arcs -ftest-coverage")
else()
message(FATAL_ERROR "Code coverage analysis requires the GNU C compiler!")
endif()
endif()
if(DEFINED CMAKE_CXX_COMPILER_ID)
if(CMAKE_CXX_COMPILER_ID MATCHES "(Apple)?[Cc]lang")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3)
message(FATAL_ERROR "Code coverage analysis on Mac OS X requires Clang version 3.0.0 or greater!")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
endif()
elseif(CMAKE_CXX_COMPILER_ID MATCHES GNU)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage")
else()
message(FATAL_ERROR "Code coverage analysis requires the GNU C++ compiler!")
endif()
endif()
endif()

View File

@ -0,0 +1,63 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Colorize CMake output.
# Code was found on StackOverflow: http://stackoverflow.com/a/19578320
#
# Usage within CMake code:
# message("This is normal")
# message("${Red}This is Red${ColourReset}")
# message("${Green}This is Green${ColourReset}")
# message("${Yellow}This is Yellow${ColourReset}")
# message("${Blue}This is Blue${ColourReset}")
# message("${Magenta}This is Magenta${ColourReset}")
# message("${Cyan}This is Cyan${ColourReset}")
# message("${White}This is White${ColourReset}")
# message("${BoldRed}This is BoldRed${ColourReset}")
# message("${BoldGreen}This is BoldGreen${ColourReset}")
# message("${BoldYellow}This is BoldYellow${ColourReset}")
# message("${BoldBlue}This is BoldBlue${ColourReset}")
# message("${BoldMagenta}This is BoldMagenta${ColourReset}")
# message("${BoldCyan}This is BoldCyan${ColourReset}")
# message("${BoldWhite}This is BoldWhite\n\n${ColourReset}")
#
# Has no effect on WIN32.
if(WIN32)
set(ColourReset "")
set(ColourBold "")
set(Red "")
set(Green "")
set(Yellow "")
set(Blue "")
set(Magenta "")
set(Cyan "")
set(White "")
set(BoldRed "")
set(BoldGreen "")
set(BoldYellow "")
set(BoldBlue "")
set(BoldMagenta "")
set(BoldCyan "")
set(BoldWhite "")
else()
string(ASCII 27 Esc)
set(ColourReset "${Esc}[m")
set(ColourBold "${Esc}[1m")
set(Red "${Esc}[31m")
set(Green "${Esc}[32m")
set(Yellow "${Esc}[33m")
set(Blue "${Esc}[34m")
set(Magenta "${Esc}[35m")
set(Cyan "${Esc}[36m")
set(White "${Esc}[37m")
set(BoldRed "${Esc}[1;31m")
set(BoldGreen "${Esc}[1;32m")
set(BoldYellow "${Esc}[1;33m")
set(BoldBlue "${Esc}[1;34m")
set(BoldMagenta "${Esc}[1;35m")
set(BoldCyan "${Esc}[1;36m")
set(BoldWhite "${Esc}[1;37m")
endif()

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds C++ support.
@ -22,21 +25,20 @@
# docopt:
# - "--cxx=<CXX> C++ compiler [default: g++]."
# - "--extra-cxx-flags=<EXTRA_CXXFLAGS> Extra C++ compiler flags [default: '']."
# export: "'CXX={0}'.format(arguments['--cxx'])"
# define: "'-DEXTRA_CXXFLAGS=\"{0}\"'.format(arguments['--extra-cxx-flags'])"
# define: "'-DCMAKE_CXX_COMPILER={0} -DEXTRA_CXXFLAGS=\"{1}\"'.format(arguments['--cxx'], arguments['--extra-cxx-flags'])"
enable_language(CXX)
if(NOT DEFINED CMAKE_C_COMPILER_ID)
message(FATAL_ERROR "CMAKE_C_COMPILER_ID variable is not defined!")
if(NOT DEFINED CMAKE_CXX_COMPILER_ID)
message(FATAL_ERROR "CMAKE_CXX_COMPILER_ID variable is not defined!")
endif()
if(NOT CMAKE_C_COMPILER_WORKS)
message(FATAL_ERROR "CMAKE_C_COMPILER_WORKS is false!")
if(NOT CMAKE_CXX_COMPILER_WORKS)
message(FATAL_ERROR "CMAKE_CXX_COMPILER_WORKS is false!")
endif()
if(DEFINED EXTRA_CXXFLAGS)
if(NOT EXTRA_CXXFLAGS STREQUAL "")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS}")
endif()
endif()
if(DEFINED ENV{CXXFLAGS})

View File

@ -1,12 +1,19 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Sets binary and library output directories to ${PROJECT_BINARY_DIR}/bin
# and ${PROJECT_BINARY_DIR}/lib, respectively.
# Sets binary and library output directories to ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}
# and ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}, respectively.
#
# Variables modified::
#
# CMAKE_RUNTIME_OUTPUT_DIRECTORY
# CMAKE_ARCHIVE_OUTPUT_DIRECTORY
# CMAKE_LIBRARY_OUTPUT_DIRECTORY
# CMAKE_RUNTIME_OUTPUT_DIRECTORY
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
include(GNUInstallDirs)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${CMAKE_INSTALL_BINDIR})

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Add preprocessor definitions (example: --add-definitions="-DTHIS -DTHAT=137").

View File

@ -0,0 +1,26 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Generates export header for your API using best practices.
# This module wraps https://cmake.org/cmake/help/v3.0/module/GenerateExportHeader.html and
# it is needed because of these, Very Good Indeed, reasons: https://gcc.gnu.org/wiki/Visibility.
# If you are not afraid of jargon, please also have a look at https://www.akkadia.org/drepper/dsohowto.pdf.
#
# Variables used::
#
# PROJECT_NAME (defined by project())
include(GenerateExportHeader)
generate_export_header(${PROJECT_NAME}
BASE_NAME "${PROJECT_NAME}"
EXPORT_MACRO_NAME "${PROJECT_NAME}_EXPORT"
EXPORT_FILE_NAME "include/${PROJECT_NAME}_export.h"
DEPRECATED_MACRO_NAME "${PROJECT_NAME}_DEPRECATED"
NO_EXPORT_MACRO_NAME "${PROJECT_NAME}_NO_EXPORT"
STATIC_DEFINE "${PROJECT_NAME}_STATIC_DEFINE"
NO_DEPRECATED_MACRO_NAME "${PROJECT_NAME}_NO_DEPRECATED"
DEFINE_NO_DEPRECATED
)

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds Fortran support.
@ -26,10 +29,7 @@
# docopt:
# - "--fc=<FC> Fortran compiler [default: gfortran]."
# - "--extra-fc-flags=<EXTRA_FCFLAGS> Extra Fortran compiler flags [default: '']."
# export: "'FC={0}'.format(arguments['--fc'])"
# define: "'-DEXTRA_FCFLAGS=\"{0}\"'.format(arguments['--extra-fc-flags'])"
enable_language(Fortran)
# define: "'-DCMAKE_Fortran_COMPILER={0} -DEXTRA_FCFLAGS=\"{1}\"'.format(arguments['--fc'], arguments['--extra-fc-flags'])"
set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/modules)
include_directories(${PROJECT_BINARY_DIR}/modules)
@ -43,7 +43,9 @@ if(NOT CMAKE_Fortran_COMPILER_WORKS)
endif()
if(DEFINED EXTRA_FCFLAGS)
if(NOT EXTRA_FCFLAGS STREQUAL "")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS}")
endif()
endif()
if(DEFINED ENV{FCFLAGS})

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds optional Fortran support.
@ -32,9 +35,8 @@
# - "--fc=<FC> Fortran compiler [default: gfortran]."
# - "--extra-fc-flags=<EXTRA_FCFLAGS> Extra Fortran compiler flags [default: '']."
# - "--fc-support=<FC_SUPPORT> Toggle Fortran language support (ON/OFF) [default: ON]."
# export: "'FC={0}'.format(arguments['--fc'])"
# define:
# - "'-DEXTRA_FCFLAGS=\"{0}\"'.format(arguments['--extra-fc-flags'])"
# - "'-DCMAKE_Fortran_COMPILER={0} -DEXTRA_FCFLAGS=\"{1}\"'.format(arguments['--fc'], arguments['--extra-fc-flags'])"
# - "'-DENABLE_FC_SUPPORT={0}'.format(arguments['--fc-support'])"
option(ENABLE_FC_SUPPORT "Enable Fortran language support" ON)
@ -54,7 +56,9 @@ if(ENABLE_FC_SUPPORT)
endif()
if(DEFINED EXTRA_FCFLAGS)
if(NOT EXTRA_FCFLAGS STREQUAL "")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${EXTRA_FCFLAGS}")
endif()
endif()
if(DEFINED ENV{FCFLAGS})

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
include(CheckIncludeFile)
function(_find_include_dir _names _hints _result)

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
include(CheckFunctionExists)
function(_find_library _names _check_function _result)

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Creates git_info.h in the build directory.
@ -7,22 +10,65 @@
#
# autocmake.yml configuration::
#
# url_root: https://github.com/coderefinery/autocmake/raw/master/
# url_root: https://github.com/dev-cafe/autocmake/raw/master/
# fetch:
# - "%(url_root)modules/git_info/git_info_sub.cmake"
# - "%(url_root)modules/git_info/git_info.h.in"
# CMAKE_CURRENT_LIST_DIR is undefined in CMake 2.8.2
# see https://public.kitware.com/Bug/print_bug_page.php?bug_id=11675
# workaround: create CMAKE_CURRENT_LIST_DIR
get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
add_custom_command(
OUTPUT ${PROJECT_BINARY_DIR}/git_info.h
COMMAND ${CMAKE_COMMAND} -D_target_dir=${PROJECT_BINARY_DIR} -P git_info_sub.cmake
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
get_filename_component(_current_dir ${CMAKE_CURRENT_LIST_FILE} PATH)
function(generate_git_info_header _header_location _header_name)
# _header_location: where the Git info header file should be generated
# _header_name: the Git info header name, complete with extension (.h, .hpp, .hxx or whatever)
find_package(Git)
set(_git_last_commit_hash "unknown")
set(_git_last_commit_author "unknown")
set(_git_last_commit_date "unknown")
set(_git_branch "unknown")
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} --no-pager show -s --pretty=format:%h -n 1
OUTPUT_VARIABLE _git_last_commit_hash
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} --no-pager show -s --pretty=format:%aN -n 1
OUTPUT_VARIABLE _git_last_commit_author
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} --no-pager show -s --pretty=format:%ad -n 1
OUTPUT_VARIABLE _git_last_commit_date
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE _git_branch
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET
)
endif()
configure_file(
${_current_dir}/git_info.h.in
${_header_location}/${_header_name}
@ONLY
)
add_custom_target(
unset(_git_last_commit_hash)
unset(_git_last_commit_author)
unset(_git_last_commit_date)
unset(_git_branch)
add_custom_target(
git_info
ALL DEPENDS ${PROJECT_BINARY_DIR}/git_info.h
ALL DEPENDS ${_header_location}/${_header_name}
)
endfunction()

View File

@ -1,64 +0,0 @@
#.rst:
#
# Creates git_info.h in the build directory.
# This file can be included in sources to print
# Git status information to the program output
# for reproducibility reasons.
find_package(Git)
set(_git_last_commit_hash "unknown")
set(_git_last_commit_author "unknown")
set(_git_last_commit_date "unknown")
set(_git_branch "unknown")
if(GIT_FOUND)
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-list --max-count=1 --abbrev-commit HEAD
OUTPUT_VARIABLE _git_last_commit_hash
ERROR_QUIET
)
if(_git_last_commit_hash)
string(STRIP ${_git_last_commit_hash} _git_last_commit_hash)
endif()
execute_process(
COMMAND ${GIT_EXECUTABLE} log --max-count=1 HEAD
OUTPUT_VARIABLE _git_last_commit
ERROR_QUIET
)
if(_git_last_commit)
string(REGEX MATCH "Author: +([^<]*) <" temp "${_git_last_commit}")
set(_git_last_commit_author ${CMAKE_MATCH_1})
string(STRIP ${_git_last_commit_author} _git_last_commit_author)
string(REGEX MATCH "Date: +(.+[0-9][0-9][0-9][0-9] [+-][0-9][0-9][0-9][0-9])" temp "${_git_last_commit}")
set(_git_last_commit_date ${CMAKE_MATCH_1})
endif()
execute_process(
COMMAND ${GIT_EXECUTABLE} rev-parse --abbrev-ref HEAD
OUTPUT_VARIABLE _git_branch
ERROR_QUIET
)
if(_git_branch)
string(STRIP ${_git_branch} _git_branch)
endif()
endif()
# CMAKE_CURRENT_LIST_DIR is undefined in CMake 2.8.2
# see https://public.kitware.com/Bug/print_bug_page.php?bug_id=11675
# workaround: create CMAKE_CURRENT_LIST_DIR
get_filename_component(CMAKE_CURRENT_LIST_DIR ${CMAKE_CURRENT_LIST_FILE} PATH)
configure_file(
${CMAKE_CURRENT_LIST_DIR}/git_info.h.in
${_target_dir}/git_info.h
@ONLY
)
unset(_git_last_commit_hash)
unset(_git_last_commit_author)
unset(_git_last_commit_date)
unset(_git_branch)

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Includes Google Test sources and adds a library "googletest".

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Enables 64-bit integer support for Fortran projects.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to ACCELERATE.
@ -10,7 +13,7 @@
#
# autocmake.yml configuration::
#
# url_root: https://github.com/coderefinery/autocmake/raw/master/
# url_root: https://github.com/dev-cafe/autocmake/raw/master/
# docopt: "--accelerate Find and link to ACCELERATE [default: False]."
# define: "'-DENABLE_ACCELERATE={0}'.format(arguments['--accelerate'])"
# fetch:
@ -20,8 +23,8 @@
option(ENABLE_ACCELERATE "Find and link to ACCELERATE" OFF)
if(ENABLE_ACCELERATE)
include(find_libraries)
include(find_include_files)
include(${CMAKE_CURRENT_LIST_DIR}/../find/find_libraries.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../find/find_include_files.cmake)
set(ACCELERATE_FOUND FALSE)
set(ACCELERATE_LIBRARIES "NOTFOUND")

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to ACML.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to ATLAS.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to BLAS.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to CBLAS.
@ -10,7 +13,7 @@
#
# autocmake.yml configuration::
#
# url_root: https://github.com/coderefinery/autocmake/raw/master/
# url_root: https://github.com/dev-cafe/autocmake/raw/master/
# docopt: "--cblas Find and link to CBLAS [default: False]."
# define: "'-DENABLE_CBLAS={0}'.format(arguments['--cblas'])"
# fetch:
@ -20,8 +23,8 @@
option(ENABLE_CBLAS "Find and link to CBLAS" OFF)
if(ENABLE_CBLAS)
include(find_libraries)
include(find_include_files)
include(${CMAKE_CURRENT_LIST_DIR}/../find/find_libraries.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/../find/find_include_files.cmake)
set(CBLAS_FOUND FALSE)
set(CBLAS_LIBRARIES "NOTFOUND")

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to Goto BLAS.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to LAPACK.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Find and link to LAPACKE.
@ -10,7 +13,7 @@
#
# autocmake.yml configuration::
#
# url_root: https://github.com/coderefinery/autocmake/raw/master/
# url_root: https://github.com/dev-cafe/autocmake/raw/master/
# docopt: "--lapacke Find and link to LAPACKE [default: False]."
# define: "'-DENABLE_LAPACKE={0}'.format(arguments['--lapacke'])"
# fetch:
@ -20,8 +23,8 @@
option(ENABLE_LAPACKE "Find and link to LAPACKE" OFF)
if(ENABLE_LAPACKE)
include(find_libraries)
include(find_include_files)
include(${CMAKE_CURRENT_LIST_DIR}/find_libraries.cmake)
include(${CMAKE_CURRENT_LIST_DIR}/find_include_files.cmake)
set(LAPACKE_FOUND FALSE)
set(LAPACKE_LIBRARIES "NOTFOUND")

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Detects and links to BLAS and LAPACK libraries.
@ -43,6 +46,8 @@
# - "--blas=<BLAS> Detect and link BLAS library (auto or off) [default: auto]."
# - "--lapack=<LAPACK> Detect and link LAPACK library (auto or off) [default: auto]."
# - "--mkl=<MKL> Pass MKL flag to the Intel compiler and linker and skip BLAS/LAPACK detection (sequential, parallel, cluster, or off) [default: off]."
# - "--scalapack=<SCALAPACK_LIBRARIES> Link line for ScaLAPACK libraries [default: ]"
# - "--blacs=<BLACS_IMPLEMENTATION> Implementation of BLACS for MKL ScaLAPACK (openmpi, intelmpi, sgimpt) [default: openmpi]"
# define:
# - "'-DENABLE_BLAS={0}'.format(arguments['--blas'])"
# - "'-DENABLE_LAPACK={0}'.format(arguments['--lapack'])"
@ -50,8 +55,51 @@
# - "'-DMATH_LIB_SEARCH_ORDER=\"MKL;ESSL;OPENBLAS;ATLAS;ACML;SYSTEM_NATIVE\"'"
# - "'-DBLAS_LANG=Fortran'"
# - "'-DLAPACK_LANG=Fortran'"
# - "'-DSCALAPACK_LIBRARIES=\"{0}\"'.format(arguments['--scalapack'])"
# - "'-DBLACS_IMPLEMENTATION=\"{0}\"'.format(arguments['--blacs'])"
# warning: "the math_libs.cmake module is deprecated and will be removed in future versions"
option_with_default(
NAME ENABLE_BLAS
MESSAGE "Enable BLAS autodetection"
DEFAULT "auto"
)
option_with_default(
NAME ENABLE_LAPACK
MESSAGE "Enable LAPACK autodetection"
DEFAULT "auto"
)
option_with_default(
NAME MKL_FLAG
MESSAGE "MKL flag for the Intel compiler and linker. Skips BLAS/LAPACK autodetection"
DEFAULT "off"
)
option_with_default(
NAME MATH_LIB_SEARCH_ORDER
MESSAGE "Search order for autodetection of math libraries"
DEFAULT "MKL;ESSL;OPENBLAS;ATLAS;ACML;SYSTEM_NATIVE"
)
option_with_default(
NAME BLAS_LANG
MESSAGE "Linker language for BLAS detection"
DEFAULT "Fortran"
)
option_with_default(
NAME LAPACK_LANG
MESSAGE "Linker language for LAPACK detection"
DEFAULT "Fortran"
)
option_with_default(
NAME SCALAPACK_LIBRARIES
MESSAGE "Link line for ScaLAPACK libraries"
DEFAULT ""
)
option_with_default(
NAME BLACS_IMPLEMENTATION
MESSAGE "Implementation of BLACS for MKL ScaLAPACK"
DEFAULT "openmpi"
)
#-------------------------------------------------------------------------------
# ENABLE_STATIC_LINKING
@ -194,7 +242,7 @@ if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
endif()
endif()
if(ENABLE_SCALAPACK)
if(ENABLE_SCALAPACK AND NOT SCALAPACK_LIBRARIES)
set(_scalapack_lib mkl_scalapack${_lib_suffix})
if(${BLACS_IMPLEMENTATION} STREQUAL "intelmpi")
set(_blacs_lib mkl_blacs_intelmpi${_lib_suffix})
@ -208,6 +256,7 @@ if(ENABLE_SCALAPACK)
else()
set(_scalapack_lib)
set(_blacs_lib)
set(BLACS_IMPLEMENTATION)
endif()
# MKL 10.0.1.014
@ -429,7 +478,7 @@ foreach(_service BLAS LAPACK)
endif()
endforeach()
if(NOT MKL_FLAG STREQUAL "off")
if(MKL_FLAG AND NOT MKL_FLAG STREQUAL "off")
set(EXTERNAL_LIBS ${EXTERNAL_LIBS} -mkl=${MKL_FLAG})
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -mkl=${MKL_FLAG}")
message(STATUS "User set explicit MKL flag which is passed to the compiler and linker: -mkl=${MKL_FLAG}")
@ -492,12 +541,21 @@ foreach(_service BLAS LAPACK)
endforeach()
# first lapack, then blas as lapack might need blas routine
set(MATH_LIBS
${MATH_LIBS}
${LAPACK_LIBRARIES}
${BLAS_LIBRARIES}
CACHE STRING "Math libraries"
)
if(SCALAPACK_LIBRARIES)
list(APPEND MATH_LIBS
${MATH_LIBS}
${SCALAPACK_LIBRARIES}
${LAPACK_LIBRARIES}
${BLAS_LIBRARIES}
)
else()
list(APPEND MATH_LIBS
${MATH_LIBS}
${LAPACK_LIBRARIES}
${BLAS_LIBRARIES}
)
endif()
set(MATH_LIBS ${MATH_LIBS} CACHE STRING "Math libraries")
# further adaptation for the static linking
if (ENABLE_STATIC_LINKING)

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Enables MPI support.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Enables OpenMP support.
@ -21,25 +24,6 @@
option(ENABLE_OPENMP "Enable OpenMP parallelization" OFF)
if(ENABLE_OPENMP)
if(DEFINED CMAKE_Fortran_COMPILER_ID)
# we do this in a pedestrian way because the Fortran support is relatively recent
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fopenmp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -openmp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -mp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES XL)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qsmp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES Cray)
# do nothing in this case
endif()
set(OPENMP_FOUND TRUE)
endif()
if(NOT OPENMP_FOUND)
find_package(OpenMP)
@ -53,5 +37,35 @@ if(ENABLE_OPENMP)
if(DEFINED CMAKE_CXX_COMPILER_ID)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()
if(DEFINED CMAKE_Fortran_COMPILER_ID)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} ${OpenMP_Fortran_FLAGS}")
endif()
endif()
# this is only needed for CMake below 3.5
if(DEFINED CMAKE_Fortran_COMPILER_ID AND NOT DEFINED OpenMP_Fortran_FLAGS)
# we do this in a pedestrian way because the Fortran support is relatively recent
if(CMAKE_Fortran_COMPILER_ID MATCHES GNU)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fopenmp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES Intel)
if(WIN32)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -Qopenmp")
elseif("${CMAKE_Fortran_COMPILER_VERSION}" VERSION_LESS "15.0.0.20140528")
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -openmp")
else()
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopenmp")
endif()
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES PGI)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -mp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES XL)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qsmp=omp")
endif()
if(CMAKE_Fortran_COMPILER_ID MATCHES Cray)
# do nothing in this case
endif()
set(OPENMP_FOUND TRUE)
endif()
endif()

33
modules/profile.cmake Normal file
View File

@ -0,0 +1,33 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Enable profiling by appending corresponding compiler flags.
#
# Variables modified (provided the corresponding language is enabled)::
#
# CMAKE_Fortran_FLAGS
# CMAKE_C_FLAGS
# CMAKE_CXX_FLAGS
#
# autocmake.yml configuration::
#
# docopt: "--profile Enable profiling [default: False]"
# define: "'-DENABLE_PROFILING={0}'.format(arguments['--profile'])"
option(ENABLE_PROFILING "Enable profiling" OFF)
message(STATUS "Enable profiling: ${ENABLE_PROFILING}")
if(ENABLE_PROFILING)
if(DEFINED CMAKE_Fortran_COMPILER_ID)
set(CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -g -pg")
endif()
if(DEFINED CMAKE_C_COMPILER_ID)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -pg")
endif()
if(DEFINED CMAKE_CXX_COMPILER_ID)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -pg")
endif()
endif()

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Detects Python interpreter.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Detects Python libraries and headers.
@ -75,12 +78,9 @@ find_package_handle_standard_args(PythonLibs
PYTHON_EXECUTABLE)
if(NOT PYTHONLIBS_FOUND)
message(FATAL_ERROR "Could NOT find PythonLibs")
message(FATAL_ERROR "Could NOT find PythonLibs - did you install the python-dev package?")
endif()
# Hook-up script variables to cache variables
set(PYTHON_LIBRARIES ${PYTHON_LIBRARY})
set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIR})
include_directories(SYSTEM ${PYTHON_INCLUDE_DIRS})
link_directories(${PYTHON_LIBRARIES})

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Provides safeguards against in-source builds and bad build types.
@ -17,6 +20,7 @@ string(TOUPPER "${CMAKE_BUILD_TYPE}" cmake_build_type_toupper)
if(NOT cmake_build_type_tolower STREQUAL "debug" AND
NOT cmake_build_type_tolower STREQUAL "release" AND
NOT cmake_build_type_tolower STREQUAL "minsizerel" AND
NOT cmake_build_type_tolower STREQUAL "relwithdebinfo")
message(FATAL_ERROR "Unknown build type \"${CMAKE_BUILD_TYPE}\". Allowed values are Debug, Release, RelWithDebInfo (case-insensitive).")
message(FATAL_ERROR "Unknown build type \"${CMAKE_BUILD_TYPE}\". Allowed values are Debug, Release, RelWithDebInfo, and MinSizeRel (case-insensitive).")
endif()

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Take care of updating the cache for fresh configurations.

30
modules/sccache.cmake Normal file
View File

@ -0,0 +1,30 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds sccache support.
# The user should export the appropriate environment variables to
# tweak the program's behaviour, as described in its manpage.
# Notice that some additional compiler flags might be needed in order
# to avoid unnecessary warnings.
#
# Variables defined::
#
# SCCACHE_FOUND
#
# autocmake.yml configuration::
#
# docopt: "--sccache=<USE_SCCACHE> Toggle use of sccache <ON/OFF> [default: ON]."
# define: "'-DUSE_SCCACHE={0}'.format(arguments['--sccache'])"
if(USE_SCCACHE)
find_program(SCCACHE_FOUND sccache)
if(SCCACHE_FOUND)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE sccache)
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK sccache)
message(STATUS "Compiling with sccache")
else()
message(STATUS "sccache not available")
endif()
endif()

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Adds ${PROJECT_SOURCE_DIR}/src as subdirectory containing CMakeLists.txt.

View File

@ -1,3 +1,6 @@
# (c) https://github.com/dev-cafe/autocmake/blob/master/AUTHORS.md
# licensed under BSD-3: https://github.com/dev-cafe/autocmake/blob/master/LICENSE
#.rst:
#
# Determine program version from file "VERSION" (example: "14.1")

View File

@ -1,3 +1,4 @@
pep8
pycodestyle
pytest
pyyaml
sphinx

View File

@ -1,14 +0,0 @@
name: example
min_cmake_version: 2.8
modules:
- cxx:
- source: ../../../modules/cxx.cmake
- boost:
- major: 1
- minor: 48
- patch: 0
- source: ../../../modules/boost/boost.cmake
- default_build_paths:
- source: ../../../modules/default_build_paths.cmake
- src:
- source: ../../../modules/src.cmake

View File

@ -1 +0,0 @@
add_executable(example example.cpp)

View File

@ -1,17 +0,0 @@
#include <iostream>
#include <boost/version.hpp>
int main()
{
std::cout << "Boost version: "
<< BOOST_VERSION / 100000
<< "."
<< BOOST_VERSION / 100 % 1000
<< "."
<< BOOST_VERSION % 100
<< std::endl;
std::cout << "PASSED" << std::endl;
return 0;
}

View File

@ -1,21 +0,0 @@
name: example
min_cmake_version: 2.8
modules:
- cxx:
- source: ../../../modules/cxx.cmake
- mpi:
- source: ../../../modules/mpi.cmake
- python_interpreter:
- source: ../../../modules/python_interpreter.cmake
- python_libs:
- source: ../../../modules/python_libs.cmake
- boost:
- major: 1
- minor: 59
- patch: 0
- components: 'mpi;serialization;python'
- source: ../../../modules/boost/boost.cmake
- default_build_paths:
- source: ../../../modules/default_build_paths.cmake
- src:
- source: ../../../modules/src.cmake

View File

@ -1,8 +0,0 @@
add_executable(example example.cpp)
if(BUILD_CUSTOM_BOOST)
add_dependencies(example custom_boost)
endif()
target_link_libraries(example ${Boost_MPI_LIBRARY} ${Boost_SERIALIZATION_LIBRARY} ${MPI_CXX_LIBRARIES}
${Boost_PYTHON_LIBRARY} ${PYTHON_LIBRARIES})

View File

@ -1,45 +0,0 @@
#include <iostream>
#include <boost/mpi/environment.hpp>
#include <boost/mpi/communicator.hpp>
#include <boost/python.hpp>
#include <boost/version.hpp>
int main()
{
using namespace boost::python;
namespace mpi = boost::mpi;
std::cout << "Boost version: "
<< BOOST_VERSION / 100000
<< "."
<< BOOST_VERSION / 100 % 1000
<< "."
<< BOOST_VERSION % 100
<< std::endl;
try {
Py_Initialize();
object main_module((
handle<>(borrowed(PyImport_AddModule("__main__")))));
object main_namespace = main_module.attr("__dict__");
handle<> ignored(( PyRun_String( "print \"Hello, World\"",
Py_file_input,
main_namespace.ptr(),
main_namespace.ptr() ) ));
} catch( error_already_set ) {
PyErr_Print();
}
mpi::environment env;
mpi::communicator world;
std::cout << "I am process " << world.rank() << " of " << world.size()
<< "." << std::endl;
std::cout << "PASSED" << std::endl;
return 0;
}

View File

@ -1,5 +1,7 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language: CXX
default_build_type: debug
modules:
- cxx:
- source: ../../../modules/cxx.cmake

View File

@ -1,5 +1,9 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language:
- CXX
- C
default_build_type: debug
modules:
- cxx:
- source: ../../../modules/cxx.cmake

View File

@ -1,5 +1,9 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language:
- C
- CXX
default_build_type: debug
modules:
- cxx:
- source: ../../../modules/cxx.cmake

View File

@ -1,5 +1,7 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language: CXX
default_build_type: debug
modules:
- cxx:
- source: ../../../modules/cxx.cmake

View File

@ -1,5 +1,7 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language: Fortran
default_build_type: debug
modules:
- fc:
- source: ../../../modules/fc.cmake

View File

@ -1,5 +1,10 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language:
- Fortran
- C
- CXX
default_build_type: debug
modules:
- fc:
- source: ../../../modules/fc.cmake

View File

@ -1,11 +1,13 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language: Fortran
default_build_type: debug
modules:
- fc:
- source: ../../../modules/fc.cmake
- default_build_paths:
- source: ../../../modules/default_build_paths.cmake
- src:
- source: ../../../modules/src.cmake
- git_info:
- source: ../../../modules/git_info/git_info.cmake
- src:
- source: ../../../modules/src.cmake

View File

@ -1,3 +1,5 @@
generate_git_info_header(${PROJECT_BINARY_DIR} git_info.h)
include_directories(${PROJECT_BINARY_DIR})
add_executable(example example.F90)

View File

@ -1,5 +1,7 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language: Fortran
default_build_type: debug
modules:
- fc:
- source: ../../../modules/fc.cmake

View File

@ -1,5 +1,10 @@
name: example
min_cmake_version: 2.8
min_cmake_version: 3.1
language:
- Fortran
- C
- CXX
default_build_type: debug
modules:
- fc:
- source: ../../../modules/fc.cmake

Some files were not shown because too many files have changed in this diff Show More