diff --git a/maintainer/CI/build_cmake.sh b/maintainer/CI/build_cmake.sh index bca941ec7e3..3939d422eb1 100755 --- a/maintainer/CI/build_cmake.sh +++ b/maintainer/CI/build_cmake.sh @@ -86,6 +86,7 @@ fi cmake_params="-DCMAKE_BUILD_TYPE=$build_type -DPYTHON_EXECUTABLE=$(which python$python_version) -DWARNINGS_ARE_ERRORS=ON -DTEST_NP:INT=$check_procs $cmake_params" cmake_params="$cmake_params -DCMAKE_CXX_FLAGS=$cxx_flags" +cmake_params="$cmake_params -DCMAKE_INSTALL_PREFIX=/tmp/espresso-unit-tests" if $with_ccache; then cmake_params="$cmake_params -DWITH_CCACHE=ON" fi @@ -244,6 +245,7 @@ if $make_check; then done fi cmd "make -j${build_procs} check_unit_tests $make_params" || exit 1 + cmd "make -j${build_procs} check_cmake $make_params" || exit 1 end "TEST" else diff --git a/testsuite/cmake/BashUnitTests.sh b/testsuite/cmake/BashUnitTests.sh index e42109ccd10..c2b0045906b 100755 --- a/testsuite/cmake/BashUnitTests.sh +++ b/testsuite/cmake/BashUnitTests.sh @@ -395,7 +395,7 @@ function assert_zero() { function assert_return_code() { try_catch_silent "$@" local retcode=$? - local message="non-zero return code (${retcode}) for command \`$@\`" + local message="non-zero return code (${retcode}) for command \`$*\`" if [ "${retcode}" -eq "0" ] then log_success diff --git a/testsuite/cmake/CMakeLists.txt b/testsuite/cmake/CMakeLists.txt index 9872faa0f11..c147c174240 100644 --- a/testsuite/cmake/CMakeLists.txt +++ b/testsuite/cmake/CMakeLists.txt @@ -49,18 +49,38 @@ function(CMAKE_TEST) set(cmake_tests ${cmake_tests} ${TEST_FILE} PARENT_SCOPE) endfunction(CMAKE_TEST) -find_package(PythonInterp REQUIRED) find_package(Doxygen) find_package(Sphinx 1.6.6) +if(WITH_PYTHON AND PYTHONINTERP_FOUND) + set(TESTING_PYTHON TRUE) + # obtain Python*_SITEARCH without find_package(Python*) + execute_process( + COMMAND "${PYTHON_EXECUTABLE}" -c "from distutils import sysconfig as sc;print(sc.get_python_lib(prefix='', plat_specific=True, standard_lib=False))" + OUTPUT_VARIABLE Python_SITEARCH + OUTPUT_STRIP_TRAILING_WHITESPACE) + find_program(IPYTHON_EXECUTABLE NAMES ipython) +else() + set(TESTING_PYTHON FALSE) +endif() set(DESTDIR "${CMAKE_CURRENT_BINARY_DIR}/install") -cmake_test(FILE test_install.sh MAX_NUM_PROC 1 RUN_WITH_MPI FALSE DEPENDENCIES BashUnitTests.sh) -add_custom_target(setup_install COMMAND make install DESTDIR="${DESTDIR}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) -cmake_test(FILE test_python_bindings.sh MAX_NUM_PROC 1 RUN_WITH_MPI FALSE DEPENDENCIES BashUnitTests.sh) +add_custom_target(setup_install) +add_custom_target(setup_install_destdir COMMAND make install DESTDIR="${DESTDIR}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) +add_dependencies(setup_install setup_install_destdir) +cmake_test(FILE test_install_destdir.sh MAX_NUM_PROC 1 RUN_WITH_MPI FALSE DEPENDENCIES BashUnitTests.sh test_install.sh) +if(CMAKE_INSTALL_PREFIX STREQUAL "/tmp/espresso-unit-tests") + add_custom_target(setup_install_cmake_install_prefix COMMAND make install WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) + add_dependencies(setup_install setup_install_cmake_install_prefix) + cmake_test(FILE test_install_prefix.sh MAX_NUM_PROC 1 RUN_WITH_MPI FALSE DEPENDENCIES BashUnitTests.sh) +endif() + +if(TESTING_PYTHON) + cmake_test(FILE test_python_bindings.sh MAX_NUM_PROC 1 RUN_WITH_MPI FALSE DEPENDENCIES BashUnitTests.sh) +endif(TESTING_PYTHON) if(DOXYGEN_FOUND) cmake_test(FILE test_doxygen.sh MAX_NUM_PROC 1 RUN_WITH_MPI FALSE DEPENDENCIES BashUnitTests.sh) -add_custom_target(setup_doxygen COMMAND make doc WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) +add_custom_target(setup_doxygen COMMAND make doxygen WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) endif(DOXYGEN_FOUND) if(SPHINX_FOUND) diff --git a/testsuite/cmake/test_install.sh b/testsuite/cmake/test_install.sh old mode 100755 new mode 100644 index 0fd4f4eb22f..e8d6201da13 --- a/testsuite/cmake/test_install.sh +++ b/testsuite/cmake/test_install.sh @@ -1,20 +1,15 @@ #!/usr/bin/env bash -# load bash unit testing library -source BashUnitTests.sh - -# test binaries and libraries are correclty installed -function test_install() { - local filepaths=("@DESTDIR@/usr/local/bin/ipypresso" \ - "@DESTDIR@/usr/local/bin/pypresso" \ - "@DESTDIR@/usr/local/lib/libEspressoCore.so" \ - "@DESTDIR@/usr/local/lib/libEspressoCore.so" +# test espresso installation +function helper_test_install_common() { + local root=$1 + local filepaths=("${root}/bin/pypresso" \ + "${root}/lib/libEspressoCore.so" \ ) - if [ ! -z "@PYTHON_VERSION_STRING@" ] + if [ "@TESTING_PYTHON@" = "TRUE" ] then - local python_dir="@DESTDIR@/usr/local/lib/python@PYTHON_VERSION_MAJOR@.@PYTHON_VERSION_MINOR@" - filepaths+=("${python_dir}/site-packages/espressomd/_init.so" \ - "${python_dir}/site-packages/espressomd/__init__.py" + filepaths+=("${root}/@Python_SITEARCH@/espressomd/_init.so" \ + "${root}/@Python_SITEARCH@/espressomd/__init__.py" ) fi for filepath in ${filepaths[@]} @@ -23,6 +18,3 @@ function test_install() { done } -# run tests -run_test_suite - diff --git a/testsuite/cmake/test_install_destdir.sh b/testsuite/cmake/test_install_destdir.sh new file mode 100755 index 00000000000..1e0d6eb2c5c --- /dev/null +++ b/testsuite/cmake/test_install_destdir.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# load bash unit testing library +source BashUnitTests.sh +source test_install.sh + +# test espresso installation via `make install DESTDIR=/some/dir` +function test_install_DESTDIR() { + helper_test_install_common "@DESTDIR@/@CMAKE_INSTALL_PREFIX@" +} + +# run tests +run_test_suite + diff --git a/testsuite/cmake/test_install_prefix.sh b/testsuite/cmake/test_install_prefix.sh new file mode 100755 index 00000000000..be7d90adbf6 --- /dev/null +++ b/testsuite/cmake/test_install_prefix.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +# load bash unit testing library +source BashUnitTests.sh +source test_install.sh + +# test espresso installation via `cmake -DCMAKE_INSTALL_PREFIX=/some/dir ..` +function test_install_CMAKE_INSTALL_PREFIX() { + helper_test_install_common "@CMAKE_INSTALL_PREFIX@" +} + +# run tests +run_test_suite + diff --git a/testsuite/cmake/test_python_bindings.sh b/testsuite/cmake/test_python_bindings.sh index 91faeb9ac65..3ed9a9e6977 100755 --- a/testsuite/cmake/test_python_bindings.sh +++ b/testsuite/cmake/test_python_bindings.sh @@ -5,7 +5,13 @@ source BashUnitTests.sh # test if Python module can be imported function test_Python() { - assert_return_code "@PYTHON_EXECUTABLE@" -c "import sys;sys.path.insert(0, '@DESTDIR@/usr/local/lib/python@PYTHON_VERSION_MAJOR@.@PYTHON_VERSION_MINOR@/site-packages');import espressomd" + # test espresso installation via `make install DESTDIR=/some/dir` + assert_return_code "@PYTHON_EXECUTABLE@" -c "import sys;sys.path.insert(0, '@DESTDIR@/@CMAKE_INSTALL_PREFIX@/@Python_SITEARCH@');import espressomd" + # test espresso installation via `cmake -DCMAKE_INSTALL_PREFIX=/some/dir ..` + if [ "@CMAKE_INSTALL_PREFIX@" = "/tmp/espresso-unit-tests" ] + then + assert_return_code "@PYTHON_EXECUTABLE@" -c "import sys;sys.path.insert(0, '@CMAKE_INSTALL_PREFIX@/@Python_SITEARCH@');import espressomd" + fi } # run tests