From e8fa517fe2fee247c73c6eacecdce3281c77a57a Mon Sep 17 00:00:00 2001 From: Tom de Geus Date: Wed, 2 Mar 2022 17:43:56 +0100 Subject: [PATCH 1/6] CI: adding GitHub Actions runners --- .github/workflows/ci.yml | 87 ++++++++++++++++++++++++++++++++++++++++ CMakeLists.txt | 4 +- benchmark/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 +- 4 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6b75f78 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,87 @@ +name: CI + +on: + workflow_dispatch: + pull_request: + push: + branches: + - master + +jobs: + + standard: + + strategy: + fail-fast: false + matrix: + runs-on: [ubuntu-latest, macos-latest, windows-latest] + + defaults: + run: + shell: bash -l {0} + + name: ${{ matrix.runs-on }} • x64 ${{ matrix.args }} + runs-on: ${{ matrix.runs-on }} + + steps: + + - name: Basic GitHub action setup + uses: actions/checkout@v2 + + - name: Set conda environment + uses: mamba-org/provision-with-micromamba@main + with: + environment-name: myenv + environment-file: environment-dev.yml + cache-env: true + extra-specs: | + ninja + + - name: Configure using CMake + run: cmake -Bbuild -G "Ninja" -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DPYTHON_EXECUTABLE=`which python` -DDOWNLOAD_GTEST=ON + + - name: Install + working-directory: build + run: cmake --install . + + - name: Build xtensor-python + working-directory: build + run: cmake --build . + + - name: Test xtensor-python + working-directory: build/test + run: ./test_xtensor_python + + - name: Test xtensor-python (Python) + run: py.test -s + + - name: Example - readme 1 + working-directory: docs/source/examples/readme_example_1 + run: | + cmake -Bbuild -DPython_EXECUTABLE=`which python` + cd build + cmake --build . + cp ../example.py . + python example.py + cd .. + + - name: Example - Copy 'cast' + working-directory: docs/source/examples/copy_cast + run: | + cmake -Bbuild -DPython_EXECUTABLE=`which python` + cd build + cmake --build . + cp ../example.py . + python example.py + cd .. + + - name: Example - SFINAE + working-directory: docs/source/examples/sfinae + run: | + cmake -Bbuild -DPython_EXECUTABLE=`which python` + cd build + cmake --build . + cp ../example.py . + python example.py + cd .. + diff --git a/CMakeLists.txt b/CMakeLists.txt index e1bd077..c04f838 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -25,7 +25,7 @@ foreach(ver ${xtensor_python_version_defines}) set(XTENSOR_PYTHON_VERSION_${CMAKE_MATCH_1} "${CMAKE_MATCH_2}" CACHE INTERNAL "") endif() endforeach() -set(${PROJECT_NAME}_VERSION +set(${PROJECT_NAME}_VERSION ${XTENSOR_PYTHON_VERSION_MAJOR}.${XTENSOR_PYTHON_VERSION_MINOR}.${XTENSOR_PYTHON_VERSION_PATCH}) message(STATUS "xtensor-python v${${PROJECT_NAME}_VERSION}") @@ -45,7 +45,7 @@ else() find_package(xtensor ${xtensor_REQUIRED_VERSION} REQUIRED) message(STATUS "Found xtensor: ${xtensor_INCLUDE_DIRS}/xtensor") endif() - + # Currently no required version for pybind11 if(TARGET pybind11 OR TARGET pybind11::headers) # pybind11 has a variable that indicates its version already, so use that diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 28589df..68668bb 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -54,7 +54,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" endif() if(MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj /DHAVE_SNPRINTF") set(CMAKE_EXE_LINKER_FLAGS /MANIFEST:NO) foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0c77b0d..8d7a2af 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -41,7 +41,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" endif() if(MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj /DHAVE_SNPRINTF") set(CMAKE_EXE_LINKER_FLAGS /MANIFEST:NO) endif() From cbccfb288f7fa3354c4afbd9b51d519be15a5b3d Mon Sep 17 00:00:00 2001 From: Tom de Geus Date: Fri, 4 Mar 2022 09:47:28 +0100 Subject: [PATCH 2/6] Trying generalised fix --- CMakeLists.txt | 6 ++++++ benchmark/CMakeLists.txt | 2 +- test/CMakeLists.txt | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c04f838..aa7f454 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,12 @@ target_include_directories(xtensor-python INTERFACE target_link_libraries(xtensor-python INTERFACE xtensor) get_target_property(inc_dir xtensor-python INTERFACE_INCLUDE_DIRECTORIES) +if(MSVC) + set_property(TARGET xtensor-python PROPERTY INTERFACE_COMPILE_OPTIONS /DHAVE_SNPRINTF) +else() + set_property(TARGET xtensor-python PROPERTY INTERFACE_COMPILE_OPTIONS -DHAVE_SNPRINTF) +endif() + OPTION(BUILD_TESTS "xtensor test suite" OFF) OPTION(DOWNLOAD_GTEST "build gtest from downloaded sources" OFF) diff --git a/benchmark/CMakeLists.txt b/benchmark/CMakeLists.txt index 68668bb..28589df 100644 --- a/benchmark/CMakeLists.txt +++ b/benchmark/CMakeLists.txt @@ -54,7 +54,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" endif() if(MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj /DHAVE_SNPRINTF") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj") set(CMAKE_EXE_LINKER_FLAGS /MANIFEST:NO) foreach(flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 8d7a2af..0c77b0d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -41,7 +41,7 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU" endif() if(MSVC) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj /DHAVE_SNPRINTF") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /MP /bigobj") set(CMAKE_EXE_LINKER_FLAGS /MANIFEST:NO) endif() From ca93049860ca486724905743690aabedb732e986 Mon Sep 17 00:00:00 2001 From: Tom de Geus Date: Fri, 25 Mar 2022 11:17:18 +0100 Subject: [PATCH 3/6] CMake/test: changing how Python is linked --- test/CMakeLists.txt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 0c77b0d..bf1229c 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -80,6 +80,8 @@ else() endif() find_package(Threads) +find_package(pybind11 REQUIRED) +find_package(Python REQUIRED COMPONENTS Interpreter Development NumPy) include_directories(${GTEST_INCLUDE_DIRS}) @@ -93,7 +95,7 @@ set(XTENSOR_PYTHON_TESTS ) add_executable(test_xtensor_python ${XTENSOR_PYTHON_TESTS} ${XTENSOR_PYTHON_HEADERS}) -target_link_libraries(test_xtensor_python xtensor-python ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${PYTHON_LIBRARIES}) +target_link_libraries(test_xtensor_python xtensor-python ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} pybind11::module Python::NumPy) if(DOWNLOAD_GTEST OR GTEST_SRC_DIR) add_dependencies(test_xtensor_python gtest_main) From 8340c749be9642064386eb6b6bde2741f02dee4c Mon Sep 17 00:00:00 2001 From: Tom de Geus Date: Fri, 25 Mar 2022 11:23:38 +0100 Subject: [PATCH 4/6] Debugging --- test/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index bf1229c..41f8fa0 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -95,7 +95,7 @@ set(XTENSOR_PYTHON_TESTS ) add_executable(test_xtensor_python ${XTENSOR_PYTHON_TESTS} ${XTENSOR_PYTHON_HEADERS}) -target_link_libraries(test_xtensor_python xtensor-python ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} pybind11::module Python::NumPy) +target_link_libraries(test_xtensor_python xtensor-python ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${PYTHON_LIBRARIES} Python::Python Python::NumPy) if(DOWNLOAD_GTEST OR GTEST_SRC_DIR) add_dependencies(test_xtensor_python gtest_main) From 63fa74363ec4d06140457755d5fb01a90c3ecb5b Mon Sep 17 00:00:00 2001 From: Tom de Geus Date: Fri, 25 Mar 2022 11:29:07 +0100 Subject: [PATCH 5/6] Helping CMake --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6b75f78..544b018 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: ninja - name: Configure using CMake - run: cmake -Bbuild -G "Ninja" -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DPYTHON_EXECUTABLE=`which python` -DDOWNLOAD_GTEST=ON + run: cmake -Bbuild -G "Ninja" -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DPYTHON_EXECUTABLE=`which python` -DPython_EXECUTABLE=`which python` -DDOWNLOAD_GTEST=ON - name: Install working-directory: build From 03c3d46b2df119b539a2bea897cb8640be735726 Mon Sep 17 00:00:00 2001 From: Tom de Geus Date: Fri, 25 Mar 2022 11:35:52 +0100 Subject: [PATCH 6/6] reverting (nothing changed) --- .github/workflows/ci.yml | 2 +- test/CMakeLists.txt | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 544b018..6b75f78 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: ninja - name: Configure using CMake - run: cmake -Bbuild -G "Ninja" -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DPYTHON_EXECUTABLE=`which python` -DPython_EXECUTABLE=`which python` -DDOWNLOAD_GTEST=ON + run: cmake -Bbuild -G "Ninja" -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DPYTHON_EXECUTABLE=`which python` -DDOWNLOAD_GTEST=ON - name: Install working-directory: build diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 41f8fa0..0c77b0d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -80,8 +80,6 @@ else() endif() find_package(Threads) -find_package(pybind11 REQUIRED) -find_package(Python REQUIRED COMPONENTS Interpreter Development NumPy) include_directories(${GTEST_INCLUDE_DIRS}) @@ -95,7 +93,7 @@ set(XTENSOR_PYTHON_TESTS ) add_executable(test_xtensor_python ${XTENSOR_PYTHON_TESTS} ${XTENSOR_PYTHON_HEADERS}) -target_link_libraries(test_xtensor_python xtensor-python ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${PYTHON_LIBRARIES} Python::Python Python::NumPy) +target_link_libraries(test_xtensor_python xtensor-python ${GTEST_BOTH_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${PYTHON_LIBRARIES}) if(DOWNLOAD_GTEST OR GTEST_SRC_DIR) add_dependencies(test_xtensor_python gtest_main)