Hello, I am very interested by pythonocc; I try to build it from time to time, but it always takes me a long time to figure out how to do it (and why it fails on my system), and I give up for a few months until the next try. This time, I would like to fix the build system to save time ;-)
Here is my last try, with commit 191a184 on Linux; there is a toplevel CMakeLists.txt, so I guess that I can use CMake, great! I always build in a subdirectory: $ mkdir build $ cd build $ ccmake .. Building pythonOCC 0.5 Check whether the system is 32 or 64 bit. -- 64bit system detected /usr/lib/libTKernel.so -- OpenCASCADE include directory: /Library/OpenCASCADE/6.3.0/inc -- OpenCASCADE shared libraries directory: /Library/OpenCASCADE/6.3.0/lib -- Unix/Linux system detected Err, why that? It seems to find /usr/lib/libTKernel.so, but decides that it will need files under MacOSX location, bad idea. Patch 01 fixes MESSAGE commands to not mess up ccmake, and patch 02 detects OCE first (of course I am biased, but it is obviously a better idea when building with CMake) I set CMAKE_BUILD_TYPE to Release, and change CMAKE_INSTALL_PREFIX to install pythonocc in my home directory. $ make [ 25%] Swig source Unable to open file /home/barbier/Projects/pythonocc/build/./src/wrapper/SWIG/linux_darwin/MMgtPYTHON_wrap.cxx: No such file or directory make[2]: *** [src/wrapper/SWIG/linux_darwin/MMgtPYTHON_wrap.cxx] Erreur 1 make[1]: *** [CMakeFiles/_MMgt.dir/all] Erreur 2 make: *** [all] Erreur 2 Okay, build/./src/wrapper/SWIG/linux_darwin does not exist, let us create it (patch 03). $ make [...] Linking CXX shared module _MMgt.so /usr/bin/ld: cannot find -lBinLPlugin /usr/bin/ld: cannot find -lBinPlugin /usr/bin/ld: cannot find -lBinXCAFPlugin /usr/bin/ld: cannot find -lStdLPlugin /usr/bin/ld: cannot find -lStdPlugin /usr/bin/ld: cannot find -lTKCDLFront /usr/bin/ld: cannot find -lTKCPPClient /usr/bin/ld: cannot find -lTKCPPExt /usr/bin/ld: cannot find -lTKCPPIntExt /usr/bin/ld: cannot find -lTKCPPJini /usr/bin/ld: cannot find -lTKCSFDBSchema /usr/bin/ld: cannot find -lTKIDLFront /usr/bin/ld: cannot find -lTKTCPPExt /usr/bin/ld: cannot find -lTKWOK /usr/bin/ld: cannot find -lTKWOKTcl /usr/bin/ld: cannot find -lXCAFPlugin /usr/bin/ld: cannot find -lXmlLPlugin /usr/bin/ld: cannot find -lXmlPlugin /usr/bin/ld: cannot find -lXmlXCAFPlugin collect2: ld returned 1 exit status make[2]: *** [_MMgt.so] Erreur 1 make[1]: *** [CMakeFiles/_MMgt.dir/all] Erreur 2 make: *** [all] Erreur 2 Indeed, those libraries are needed by WOK and DRAWEXE plugins, they are surely not useful for ppythonocc, let us remove them (patch 04). $ make Linking CXX shared module _MMgt.so [ 50%] Built target _MMgt [ 75%] Swig source Scanning dependencies of target _Standard [100%] Building CXX object CMakeFiles/_Standard.dir/build/./src/wrapper/SWIG/linux_darwin/StandardPYTHON_wrap.cxx.o Linking CXX shared module _Standard.so [100%] Built target _Standard Okay, it seems to work, but it builds only a very small subset. How to build everything? Denis
From f4fa93736eb57be0be2222ce1d5f03552cfa078c Mon Sep 17 00:00:00 2001 From: Denis Barbier <bou...@gmail.com> Date: Wed, 31 Aug 2011 22:57:21 +0200 Subject: [PATCH 1/4] Write MESSAGE as STATUS to not mess up ccmake --- CMakeLists.txt | 28 ++++++++++++++-------------- 1 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 69742b0..c9478d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,11 +24,11 @@ SET(pythonOCC_VERSION_MINOR 5) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) SET(CMAKE_BUILD_TYPE "Release") #Default, build in release mode -MESSAGE("${CMAKE_CXX_FLAGS}") +MESSAGE(STATUS " ${CMAKE_CXX_FLAGS}") SET(BUILD_SHARED_LIBS ON) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) -MESSAGE("Building pythonOCC 0.5") +MESSAGE(STATUS " Building pythonOCC 0.5") ################### # General options # @@ -54,13 +54,13 @@ INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) # and # 2147483647 on 32bit systems ############################################################### -MESSAGE("Check whether the system is 32 or 64 bit." ) +MESSAGE(STATUS " Check whether the system is 32 or 64 bit." ) EXECUTE_PROCESS(COMMAND python -c "import sys;print sys.maxint" OUTPUT_VARIABLE maxint_str) IF (maxint_str MATCHES "2147483647") - MESSAGE("-- 32bit system detected") + MESSAGE(STATUS " -- 32bit system detected") SET(MODE "32bit") ELSE(maxint_str MATCHES "2147483647") - MESSAGE("-- 64bit system detected") + MESSAGE(STATUS " -- 64bit system detected") SET(MODE "64bit") ENDIF(maxint_str MATCHES "2147483647") @@ -87,10 +87,10 @@ ENDIF(WIN32) # Check that these paths are ok FIND_PATH(OCC_INCLUDE_PATH Standard_Real.hxx ${OCC_INCLUDE_PATH}) FIND_LIBRARY(RESULT_LIB TKernel ${OCC_LIB_PATH}) -MESSAGE("${RESULT_PATH}") -MESSAGE("${RESULT_LIB}") -MESSAGE("-- OpenCASCADE include directory: ${OCC_INCLUDE_PATH}") -MESSAGE("-- OpenCASCADE shared libraries directory: ${OCC_LIB_PATH}") +MESSAGE(STATUS " ${RESULT_PATH}") +MESSAGE(STATUS " ${RESULT_LIB}") +MESSAGE(STATUS " -- OpenCASCADE include directory: ${OCC_INCLUDE_PATH}") +MESSAGE(STATUS " -- OpenCASCADE shared libraries directory: ${OCC_LIB_PATH}") # List of OpenCASCADE shared libraries to link with SET(OCC_LIBRARIES BinLPlugin BinPlugin BinXCAFPlugin FWOSPlugin PTKernel @@ -126,13 +126,13 @@ ENDIF(WRAP_GEOM) IF(UNIX) IF(APPLE) ######### MacOSX ########### - MESSAGE("-- MacOSX system detected") + MESSAGE(STATUS " -- MacOSX system detected") ADD_DEFINITIONS(-DHAVE_CONFIG_H -DHAVE_LIMITS_H -DCSFDB -DLIN -DOCC_CONVERT_SIGNALS -D__PYTHONOCC_MAXINT__=2147483647) SET(CMAKE_SWIG_FLAGS -O -DCSFDB -DHAVE_CONFIG_H -DHAVE_LIMITS_H -DOCC_CONVERT_SIGNALS) SET(SWIG_FILES_PATH ./src/wrapper/SWIG/linux_darwin) ELSE(APPLE) ######### Unix/Linux ########### - MESSAGE("-- Unix/Linux system detected") + MESSAGE(STATUS " -- Unix/Linux system detected") ADD_DEFINITIONS(-DHAVE_CONFIG_H -DHAVE_LIMITS_H -DCSFDB -DLIN -DOCC_CONVERT_SIGNALS -D__PYTHONOCC_MAXINT__=2147483647) SET(CMAKE_SWIG_FLAGS -O -DCSFDB -DHAVE_CONFIG_H -DHAVE_LIMITS_H -DOCC_CONVERT_SIGNALS -DLIN -DLIN_INTEL -D_GNU_SOURCE=1) SET(SWIG_FILES_PATH ./src/wrapper/SWIG/linux_darwin) @@ -140,12 +140,12 @@ IF(UNIX) ELSE(UNIX) IF(WIN32) ######### Windows ########### - MESSAGE("-- Windows system detected") + MESSAGE(STATUS " -- Windows system detected") ADD_DEFINITIONS(-DWNT -DWIN32 -D_WINDOWS -DCSFDB -D__PYTHONOCC_MAXINT__=2147483647) SET(CMAKE_SWIG_FLAGS -O -DCSFDB -DWIN32 -D_WINDOWS) SET(SWIG_FILES_PATH ./src/wrapper/SWIG/win32) ELSE(WIN32) - MESSAGE("Unknown platform") + MESSAGE(STATUS " Unknown platform") ENDIF(WIN32) ENDIF(UNIX) # If in 64bit mode, we have to define the _OCC64 variable @@ -200,4 +200,4 @@ IF(WRAP_SMESH) SWIG_ADD_MODULE(${SMESH_MODULE} python ${FILE}) SWIG_LINK_LIBRARIES(${SMESH_MODULE} ${PYTHON_LIBRARIES} ${OCC_LIBRARIES} ${SMESH_LIBRARIES}) ENDFOREACH(OCC_MODULE) -ENDIF(WRAP_SMESH) \ No newline at end of file +ENDIF(WRAP_SMESH) -- 1.7.5.4
From 006cba068f4cb30f4ddedc43e3be04042a1f51a3 Mon Sep 17 00:00:00 2001 From: Denis Barbier <bou...@gmail.com> Date: Wed, 31 Aug 2011 23:02:52 +0200 Subject: [PATCH 2/4] Detect OCE first, since it supports CMake Otherwise falls back to the current OCC detection. --- CMakeLists.txt | 42 +++++++++++++++++++++++------------------- 1 files changed, 23 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c9478d8..eae4b65 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,23 +74,29 @@ INCLUDE(${SWIG_USE_FILE}) # OpenCASCADE include and lib location # ######################################## # Find OpenCASCADE library, set include and lib path -IF(WIN32) - # Under Windows, check the CASROOT env variable - SET(OCC_INCLUDE_PATH "$ENV{CASROOT}\\inc") - SET(OCC_LIB_PATH "$ENV{CASROOT}\\win32\\lib") - # Find the Standard_Real.hxx header in this path -ELSE(WIN32) #Unix - SET(OCC_INCLUDE_PATH "/Library/OpenCASCADE/6.3.0/inc") - SET(OCC_LIB_PATH "/Library/OpenCASCADE/6.3.0/lib") -ENDIF(WIN32) - -# Check that these paths are ok -FIND_PATH(OCC_INCLUDE_PATH Standard_Real.hxx ${OCC_INCLUDE_PATH}) -FIND_LIBRARY(RESULT_LIB TKernel ${OCC_LIB_PATH}) -MESSAGE(STATUS " ${RESULT_PATH}") -MESSAGE(STATUS " ${RESULT_LIB}") -MESSAGE(STATUS " -- OpenCASCADE include directory: ${OCC_INCLUDE_PATH}") -MESSAGE(STATUS " -- OpenCASCADE shared libraries directory: ${OCC_LIB_PATH}") +FIND_PACKAGE(OCE) +IF(OCE_FOUND) + SET(OCC_INCLUDE_PATH ${OCE_INCLUDE_DIRS}) +ELSE(OCE_FOUND) + IF(WIN32) + # Under Windows, check the CASROOT env variable + SET(OCC_INCLUDE_PATH "$ENV{CASROOT}\\inc") + SET(OCC_LIB_PATH "$ENV{CASROOT}\\win32\\lib") + # Find the Standard_Real.hxx header in this path + ELSE(WIN32) #Unix + SET(OCC_INCLUDE_PATH "/Library/OpenCASCADE/6.3.0/inc") + SET(OCC_LIB_PATH "/Library/OpenCASCADE/6.3.0/lib") + ENDIF(WIN32) + + # Check that these paths are ok + FIND_PATH(OCC_INCLUDE_PATH Standard_Real.hxx ${OCC_INCLUDE_PATH}) + FIND_LIBRARY(RESULT_LIB TKernel ${OCC_LIB_PATH}) + MESSAGE(STATUS " ${RESULT_PATH}") + MESSAGE(STATUS " ${RESULT_LIB}") + MESSAGE(STATUS " -- OpenCASCADE include directory: ${OCC_INCLUDE_PATH}") + MESSAGE(STATUS " -- OpenCASCADE shared libraries directory: ${OCC_LIB_PATH}") + LINK_DIRECTORIES(${OCC_LIB_PATH}) +ENDIF(OCE_FOUND) # List of OpenCASCADE shared libraries to link with SET(OCC_LIBRARIES BinLPlugin BinPlugin BinXCAFPlugin FWOSPlugin PTKernel @@ -110,7 +116,6 @@ SET(OCC_LIBRARIES BinLPlugin BinPlugin BinXCAFPlugin FWOSPlugin PTKernel # Tells CMake where are the required headers INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) INCLUDE_DIRECTORIES(${OCC_INCLUDE_PATH}) -LINK_DIRECTORIES(${OCC_LIB_PATH}) ####################################### # salomegeom include and lib location # @@ -183,7 +188,6 @@ ENDFOREACH(OCC_MODULE) # salomegeometry IF(WRAP_GEOM) - LINK_DIRECTORIES(${OCC_LIB_PATH}) FOREACH(GEOM_MODULE ${GEOM_MODULES}) SET(FILE ${SWIG_FILES_PATH}/${GEOM_MODULE}.i) SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON) -- 1.7.5.4
From 0cf195b5bfe81c54b3f80f604eebb17b4a26ab14 Mon Sep 17 00:00:00 2001 From: Denis Barbier <bou...@gmail.com> Date: Wed, 31 Aug 2011 23:05:39 +0200 Subject: [PATCH 3/4] Supports building from outside tree --- CMakeLists.txt | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index eae4b65..46129a4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -179,6 +179,7 @@ LIST(APPEND SMESH_MODULES "SMDSAbs" "SMDS" "SMESHDS" "SMESH" "StdMeshers") ################### # OpenCASCADE +FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${SWIG_FILES_PATH}) FOREACH(OCC_MODULE ${OCC_MODULES}) SET(FILE ${SWIG_FILES_PATH}/${OCC_MODULE}.i) SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON) -- 1.7.5.4
From c3b41d555d1dd81bea565023d4665169b6529533 Mon Sep 17 00:00:00 2001 From: Denis Barbier <bou...@gmail.com> Date: Wed, 31 Aug 2011 23:25:41 +0200 Subject: [PATCH 4/4] Remove useless OCC components --- CMakeLists.txt | 17 ++++++++--------- 1 files changed, 8 insertions(+), 9 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 46129a4..187e679 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -99,19 +99,18 @@ ELSE(OCE_FOUND) ENDIF(OCE_FOUND) # List of OpenCASCADE shared libraries to link with -SET(OCC_LIBRARIES BinLPlugin BinPlugin BinXCAFPlugin FWOSPlugin PTKernel - StdLPlugin StdPlugin TKAdvTools TKBin TKBinL TKBinTObj TKBinXCAF - TKBO TKBool TKBRep TKCAF TKCDF TKCDLFront TKCPPClient TKCPPExt - TKCPPIntExt TKCPPJini TKCSFDBSchema TKernel - TKFeat TKFillet TKG2d TKG3d TKGeomAlgo TKGeomBase TKHLR TKIDLFront +SET(OCC_LIBRARIES PTKernel + TKAdvTools TKBin TKBinL TKBinTObj TKBinXCAF + TKBO TKBool TKBRep TKCAF TKCDF + TKernel + TKFeat TKFillet TKG2d TKG3d TKGeomAlgo TKGeomBase TKHLR TKIGES TKLCAF TKMath TKMesh TKMeshVS TKNIS TKOffset TKOpenGl TKPCAF TKPLCAF TKPrim TKPShape TKService TKShapeSchema TKShHealing TKStdLSchema TKStdSchema TKSTEP TKSTEP209 TKSTEPAttr - TKSTEPBase TKSTL TKTCPPExt TKTObj TKTopAlgo - TKV2d TKV3d TKVRML TKWOK TKWOKTcl TKXCAF TKXCAFSchema + TKSTEPBase TKSTL TKTObj TKTopAlgo + TKV2d TKV3d TKVRML TKXCAF TKXCAFSchema TKXDEIGES TKXDESTEP TKXMesh TKXml TKXmlL TKXmlTObj - TKXmlXCAF TKXSBase XCAFPlugin - XmlLPlugin XmlPlugin XmlXCAFPlugin) + TKXmlXCAF TKXSBase) # Tells CMake where are the required headers INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) -- 1.7.5.4
_______________________________________________ Pythonocc-users mailing list Pythonocc-users@gna.org https://mail.gna.org/listinfo/pythonocc-users