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

Reply via email to