def test_make_without_configure_fails(capfd): src_dir = _tmpdir('test_make_without_configure_fails') src_dir.ensure(CMAKE_BUILD_DIR, dir=1) with push_dir(str(src_dir)), pytest.raises(SKBuildError) as excinfo: CMaker().make() _, err = capfd.readouterr() assert "An error occurred while building with CMake." in str(excinfo.value) assert "Error: could not load cache" in err
def cmake_configure(source_path='.'): import shlex from skbuild.cmaker import CMaker from skbuild.constants import CMAKE_BUILD_DIR cmaker = CMaker() cmake_args = shlex.split(os.getenv('CI_SETUP_CMAKE_ARGS', '')) cmaker.configure(cmake_args) return CMAKE_BUILD_DIR()
def test_make(configure_with_cmake_source_dir, capfd): tmp_dir = _tmpdir('test_make') with push_dir(str(tmp_dir)): src_dir = tmp_dir.ensure('SRC', dir=1) src_dir.join('CMakeLists.txt').write(textwrap.dedent( """ cmake_minimum_required(VERSION 3.5.0) project(foobar NONE) file(WRITE "${CMAKE_BINARY_DIR}/foo.txt" "# foo") install(FILES "${CMAKE_BINARY_DIR}/foo.txt" DESTINATION ".") install(CODE "message(STATUS \\"Project has been installed\\")") message(STATUS "CMAKE_SOURCE_DIR:${CMAKE_SOURCE_DIR}") message(STATUS "CMAKE_BINARY_DIR:${CMAKE_BINARY_DIR}") """ )) src_dir.ensure(CMAKE_BUILD_DIR, dir=1) with push_dir(str(src_dir) if not configure_with_cmake_source_dir else str(tmp_dir.ensure('BUILD', dir=1))): cmkr = CMaker() config_kwargs = {} if configure_with_cmake_source_dir: config_kwargs['cmake_source_dir'] = str(src_dir) env = cmkr.configure(**config_kwargs) cmkr.make(env=env) messages = ["Project has been installed"] if configure_with_cmake_source_dir: messages += [ "/SRC", "/BUILD/{}".format(to_unix_path(CMAKE_BUILD_DIR)), "/BUILD/{}/./foo.txt".format(to_unix_path(CMAKE_INSTALL_DIR)) ] else: messages += [ "/SRC", "/SRC/{}".format(to_unix_path(CMAKE_BUILD_DIR)), "/SRC/{}/./foo.txt".format(to_unix_path(CMAKE_INSTALL_DIR)), ] out, _ = capfd.readouterr() for message in messages: assert message in out
def test_configure_with_cmake_args(capfd): tmp_dir = _tmpdir('test_configure_with_cmake_args') with push_dir(str(tmp_dir)): tmp_dir.join('CMakeLists.txt').write(textwrap.dedent( """ cmake_minimum_required(VERSION 3.5.0) project(foobar NONE) # Do not complain about missing arguments passed to the main # project foreach(unused_var IN ITEMS ${CMAKE_EXPECTED_BAR} ${CMAKE_EXPECTED_FOO} ${PYTHON_EXECUTABLE} ${PYTHON_INCLUDE_DIR} ${PYTHON_LIBRARY} ${PYTHON_VERSION_STRING} ${SKBUILD} ) endforeach() """ )) with push_dir(str(tmp_dir)): cmkr = CMaker() cmkr.configure(clargs=[ '-DCMAKE_EXPECTED_FOO:STRING=foo', '-DCMAKE_EXPECTED_BAR:STRING=bar' ], cleanup=False) cmakecache = tmp_dir.join( "_cmake_test_compile", "build", "CMakeCache.txt") assert cmakecache.exists() variables = get_cmakecache_variables(str(cmakecache)) assert variables.get('CMAKE_EXPECTED_FOO', (None, None))[1] == "foo" assert variables.get('CMAKE_EXPECTED_BAR', (None, None))[1] == "bar" unexpected = "Manually-specified variables were not used by the project" _, err = capfd.readouterr() assert unexpected not in err
def test_make_without_build_dir_fails(): src_dir = _tmpdir('test_make_without_build_dir_fails') with push_dir(str(src_dir)), pytest.raises(SKBuildError) as excinfo: CMaker().make() assert "Did you forget to run configure before make" in str(excinfo.value)
def test_cmake_executable(): assert CMaker().cmake_executable == CMAKE_DEFAULT_EXECUTABLE
def test_cmake_executable(): assert CMaker().cmake_executable == "cmake"