Skip to content

Commit 399a066

Browse files
authored
Merge pull request #1480 from tpaviot/review/cmake-fixes
Review/cmake fixes
2 parents 2f8f1a7 + f21bf74 commit 399a066

5 files changed

Lines changed: 96 additions & 44 deletions

File tree

CMakeLists.txt

Lines changed: 35 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@ if (POLICY CMP0086)
4545
cmake_policy(SET CMP0086 NEW)
4646
endif(POLICY CMP0086)
4747

48-
# Force C++ 14
49-
set(CMAKE_CXX_STANDARD 14)
48+
# Force C++ 17
49+
set(CMAKE_CXX_STANDARD 17)
5050
set(CMAKE_CXX_STANDARD_REQUIRED ON)
5151

5252
set(BUILD_SHARED_LIBS ON)
@@ -71,7 +71,7 @@ endmacro(option_with_default OPTION_NAME OPTION_STRING OPTION_DEFAULT)
7171
# OpenGL. If available, enable compilation for Visualization module #
7272
#####################################################################
7373
find_package(OpenGL)
74-
include_directories(OPENGL_INCLUDE_DIR)
74+
include_directories(${OPENGL_INCLUDE_DIR})
7575

7676
#################
7777
# Build options #
@@ -196,7 +196,10 @@ if(NOT DEFINED PYTHONOCC_INSTALL_DIRECTORY)
196196
message(STATUS "conda-build running, using $ENV{SP_DIR} as install dir")
197197
set(PYTHONOCC_INSTALL_DIRECTORY $ENV{SP_DIR}/OCC CACHE PATH "pythonocc install directory")
198198
else(DEFINED ENV{SP_DIR} AND WIN32)
199-
execute_process(COMMAND ${Python3_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; from os.path import relpath; print(relpath(get_python_lib(1,prefix='${CMAKE_INSTALL_PREFIX}'),'${CMAKE_INSTALL_PREFIX}'))" OUTPUT_VARIABLE python_lib OUTPUT_STRIP_TRAILING_WHITESPACE)
199+
execute_process(
200+
COMMAND ${Python3_EXECUTABLE} -c "import sysconfig, os, sys; print(os.path.relpath(sysconfig.get_path('platlib'), sys.prefix))"
201+
OUTPUT_VARIABLE python_lib
202+
OUTPUT_STRIP_TRAILING_WHITESPACE)
200203
set(PYTHONOCC_INSTALL_DIRECTORY ${python_lib}/OCC CACHE PATH "pythonocc install directory")
201204
endif(DEFINED ENV{SP_DIR} AND WIN32)
202205
endif(NOT DEFINED PYTHONOCC_INSTALL_DIRECTORY)
@@ -292,7 +295,7 @@ foreach(OCCT_MODULE ${OCCT_TOOLKIT_MODEL})
292295
set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
293296
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
294297
swig_add_library (${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
295-
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} Python3::Module)
298+
target_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} Python3::Module)
296299
endforeach(OCCT_MODULE)
297300

298301
###############
@@ -306,7 +309,7 @@ set(TESSELATOR_SOURCE_FILES
306309
${CMAKE_CURRENT_SOURCE_DIR}/src/Tesselator/ShapeTesselator.cpp)
307310

308311
swig_add_library(Tesselator LANGUAGE python SOURCES ${TESSELATOR_SOURCE_FILES} TYPE MODULE)
309-
swig_link_libraries(Tesselator ${OCCT_MODEL_LIBRARIES} Python3::Module)
312+
target_link_libraries(Tesselator ${OCCT_MODEL_LIBRARIES} Python3::Module)
310313

311314
#################
312315
# Visualisation #
@@ -316,13 +319,13 @@ if(PYTHONOCC_WRAP_VISU)
316319
if(OPENGL_FOUND)
317320
message(STATUS "OpenGL found; Visualization support enabled")
318321
endif()
319-
include_directories(OPENGL_INCLUDE_DIR)
322+
include_directories(${OPENGL_INCLUDE_DIR})
320323

321324
foreach(OCCT_MODULE ${OCCT_TOOLKIT_VISUALIZATION})
322325
set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
323326
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
324327
swig_add_library (${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
325-
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
328+
target_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
326329
endforeach(OCCT_MODULE)
327330

328331
# Build third part modules
@@ -335,12 +338,12 @@ if(PYTHONOCC_WRAP_VISU)
335338
${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Display3d.cpp)
336339

337340
swig_add_library(Visualization LANGUAGE python SOURCES ${VISUALIZATION_SOURCE_FILES} TYPE MODULE)
338-
swig_link_libraries(Visualization ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
341+
target_link_libraries(Visualization ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
339342

340343
if(APPLE)
341344
# on OSX, always add /System/Library/Frameworks/Cocoa.framework, even
342345
# if GLX is enabled
343-
swig_link_libraries(Visualization /System/Library/Frameworks/Cocoa.framework)
346+
target_link_libraries(Visualization /System/Library/Frameworks/Cocoa.framework)
344347
endif(APPLE)
345348

346349
##########################
@@ -355,7 +358,7 @@ if(PYTHONOCC_WRAP_VISU)
355358
${CMAKE_CURRENT_SOURCE_DIR}/src/MeshDataSource/MeshDataSource.cpp)
356359

357360
swig_add_library(MeshDS LANGUAGE python SOURCES ${MESHDATASOURCE_SOURCE_FILES} TYPE MODULE)
358-
swig_link_libraries(MeshDS ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
361+
target_link_libraries(MeshDS ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
359362

360363
endif(PYTHONOCC_WRAP_VISU)
361364

@@ -367,7 +370,7 @@ if(PYTHONOCC_WRAP_DATAEXCHANGE)
367370
set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
368371
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
369372
swig_add_library(${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
370-
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_DATAEXCHANGE_LIBRARIES} Python3::Module)
373+
target_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_DATAEXCHANGE_LIBRARIES} Python3::Module)
371374
endforeach(OCCT_MODULE)
372375
endif(PYTHONOCC_WRAP_DATAEXCHANGE)
373376

@@ -379,26 +382,28 @@ if(PYTHONOCC_WRAP_OCAF)
379382
set(FILE ${SWIG_FILES_PATH}/${OCCT_MODULE}.i)
380383
set_source_files_properties(${FILE} PROPERTIES CPLUSPLUS ON)
381384
swig_add_library(${OCCT_MODULE} LANGUAGE python SOURCES ${FILE} TYPE MODULE)
382-
swig_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_OCAF_LIBRARIES} Python3::Module)
385+
target_link_libraries(${OCCT_MODULE} ${OCCT_MODEL_LIBRARIES} ${OCCT_OCAF_LIBRARIES} Python3::Module)
383386
endforeach(OCCT_MODULE)
384387
endif(PYTHONOCC_WRAP_OCAF)
385388

386389
##########
387390
# Addons #
388391
##########
389-
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory src/Addons)
390-
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Addons.i PROPERTIES CPLUSPLUS ON)
391-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Addons)
392-
set(ADDONS_SOURCE_FILES
393-
${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Addons.i
394-
${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Font3d.cpp
395-
#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/TextItem.cpp
396-
#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/LineItem.cpp
397-
#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/TextureItem.cpp
398-
)
399-
400-
swig_add_library(Addons LANGUAGE python SOURCES ${ADDONS_SOURCE_FILES} TYPE MODULE)
401-
swig_link_libraries(Addons ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
392+
if(PYTHONOCC_WRAP_VISU)
393+
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory src/Addons)
394+
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Addons.i PROPERTIES CPLUSPLUS ON)
395+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/Addons)
396+
set(ADDONS_SOURCE_FILES
397+
${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Addons.i
398+
${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/Font3d.cpp
399+
#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/TextItem.cpp
400+
#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/LineItem.cpp
401+
#${CMAKE_CURRENT_SOURCE_DIR}/src/Addons/TextureItem.cpp
402+
)
403+
404+
swig_add_library(Addons LANGUAGE python SOURCES ${ADDONS_SOURCE_FILES} TYPE MODULE)
405+
target_link_libraries(Addons ${OCCT_MODEL_LIBRARIES} ${OCCT_VISUALIZATION_LIBRARIES} Python3::Module)
406+
endif(PYTHONOCC_WRAP_VISU)
402407

403408
################
404409
# Installation #
@@ -461,8 +466,10 @@ if(PYTHONOCC_WRAP_VISU)
461466
endif(PYTHONOCC_WRAP_VISU)
462467

463468
# install addons
464-
install(FILES ${BUILD_DIR}/Addons.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core )
465-
install(TARGETS Addons DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core )
469+
if(PYTHONOCC_WRAP_VISU)
470+
install(FILES ${BUILD_DIR}/Addons.py DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core )
471+
install(TARGETS Addons DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY}/Core )
472+
endif(PYTHONOCC_WRAP_VISU)
466473

467474
# install Display
468475
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/Display DESTINATION ${PYTHONOCC_INSTALL_DIRECTORY})

azure-pipelines.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,3 +75,45 @@ jobs:
7575
vmImage: 'windows-2022'
7676
py_maj: 3
7777
py_min: 12
78+
79+
- template: conda-build.yml
80+
parameters:
81+
name: Ubuntu_24_04_python313
82+
vmImage: 'ubuntu-24.04'
83+
py_maj: 3
84+
py_min: 13
85+
86+
- template: conda-build.yml
87+
parameters:
88+
name: macOS_12_python313
89+
vmImage: 'macOS-latest'
90+
py_maj: 3
91+
py_min: 13
92+
93+
- template: conda-build.yml
94+
parameters:
95+
name: Windows_VS2022_python313
96+
vmImage: 'windows-2022'
97+
py_maj: 3
98+
py_min: 13
99+
100+
- template: conda-build.yml
101+
parameters:
102+
name: Ubuntu_24_04_python314
103+
vmImage: 'ubuntu-24.04'
104+
py_maj: 3
105+
py_min: 14
106+
107+
- template: conda-build.yml
108+
parameters:
109+
name: macOS_12_python314
110+
vmImage: 'macOS-latest'
111+
py_maj: 3
112+
py_min: 14
113+
114+
- template: conda-build.yml
115+
parameters:
116+
name: Windows_VS2022_python314
117+
vmImage: 'windows-2022'
118+
py_maj: 3
119+
py_min: 14

ci/conda/build.sh

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
#!/bin/bash
2-
# make an in source build do to some problems with install
32

43
# Configure step
4+
EXTRA_CMAKE_ARGS=""
5+
if [ "$(uname)" == "Darwin" ]; then
6+
EXTRA_CMAKE_ARGS="-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13"
7+
fi
8+
59
cmake -G Ninja \
610
-DCMAKE_BUILD_TYPE=Release \
711
-DCMAKE_PREFIX_PATH=$PREFIX \
@@ -12,17 +16,11 @@ cmake -G Ninja \
1216
-DPython3_FIND_STRATEGY=LOCATION \
1317
-DPython3_FIND_FRAMEWORK=NEVER \
1418
-DSWIG_HIDE_WARNINGS=ON \
15-
-DPYTHONOCC_MESHDS_NUMPY=ON
19+
-DPYTHONOCC_MESHDS_NUMPY=ON \
20+
$EXTRA_CMAKE_ARGS
1621

1722
# Build step
1823
ninja
1924

2025
# Install step
2126
ninja install
22-
23-
# fix rpaths
24-
#if [ $(uname) == Darwin ]; then
25-
# for lib in $(ls $SP_DIR/OCC/_*.so); do
26-
# install_name_tool -rpath $PREFIX/lib @loader_path/../../../ $lib
27-
# done
28-
#fi

ci/conda/meta.yaml

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,28 +23,33 @@ requirements:
2323
- ninja
2424
- cmake
2525
- swig ==4.4.1
26+
- sysroot_linux-64 >=2.28 # [linux]
2627

2728
host:
2829
- python {{ python }}
30+
- python_abi * *_cp313 [py==313]
31+
- python_abi * *_cp314 [py==314]
2932
- occt ==7.9.3
3033
- numpy >=1.17
3134

3235
run:
3336
- occt ==7.9.3
3437
- numpy >=1.17
38+
- python_abi * *_cp313 [py==313]
39+
- python_abi * *_cp314 [py==314]
3540

3641
test:
3742
imports:
3843
- OCC
3944
- OCC.Core.BRepPrimAPI
4045
- OCC.Core.Tesselator
4146
requires:
42-
- pyqt >=5
47+
- pyqt5-sip # [win]
48+
- pyside6 >=6.10 # [win]
49+
- wxpython >=4.2 # [win]
50+
- svgwrite >=1.4
4351
- mypy
4452
- pytest
45-
- svgwrite
46-
- wxpython >=4
47-
- pyside6
4853

4954
about:
5055
home: https://github.com/tpaviot/pythonocc-core

conda-build.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
conda info -a && \
4545
conda config --add channels https://conda.anaconda.org/conda-forge
4646
displayName: 'Conda config and info'
47-
- bash: conda create --yes --quiet --name build_env conda-build conda-verify libarchive python=${{ parameters.py_maj }}.${{ parameters.py_min }} anaconda-client
47+
- bash: conda create --yes --quiet --name build_env conda-build conda-verify libarchive python=3.12 anaconda-client
4848
displayName: 'Create Anaconda environment'
4949
- ${{ if eq(parameters.vmImage, 'windows-2022') }}:
5050
- script: |
@@ -54,7 +54,7 @@ jobs:
5454
set CC=cl.exe
5555
set CXX=cl.exe
5656
call activate build_env
57-
conda-build --no-remove-work-dir --dirty ci/conda
57+
conda-build --python ${{ parameters.py_maj }}.${{ parameters.py_min }} --no-remove-work-dir --dirty ci/conda
5858
displayName: 'Set Windows environment and build'
5959
env:
6060
CXX: "cl.exe"
@@ -66,7 +66,7 @@ jobs:
6666
- ${{ if not(contains(parameters.vmImage, 'win')) }}:
6767
- bash: |
6868
source activate build_env && \
69-
conda-build --no-remove-work-dir --dirty ci/conda
69+
conda-build --python ${{ parameters.py_maj }}.${{ parameters.py_min }} --no-remove-work-dir --dirty ci/conda
7070
displayName: 'Run conda build'
7171
failOnStderr: false
7272
env:

0 commit comments

Comments
 (0)