|
| 1 | +##Copyright (c) 2011-2014 Thomas Paviot (tpaviot@gmail.com) |
| 2 | +## |
| 3 | +##This file is part of pythonOCC. |
| 4 | +## |
| 5 | +##pythonOCC is free software: you can redistribute it and/or modify |
| 6 | +##it under the terms of the GNU General Public License as published by |
| 7 | +##the Free Software Foundation, either version 3 of the License, or |
| 8 | +##(at your option) any later version. |
| 9 | +## |
| 10 | +##pythonOCC is distributed in the hope that it will be useful, |
| 11 | +##but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | +##MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 | +##GNU General Public License for more details. |
| 14 | +## |
| 15 | +##You should have received a copy of the GNU General Public License |
| 16 | +##along with pythonOCC. If not, see <http://www.gnu.org/licenses/>. |
| 17 | + |
| 18 | +# pythonOCC cmake build file |
| 19 | +SET(PROJECT_NAME pythonOCC) |
| 20 | +PROJECT(${PROJECT_NAME}) |
| 21 | + |
| 22 | +# set pythonOCC version |
| 23 | +SET(${PROJECT_NAME}_VERSION_MAJOR 0) |
| 24 | +SET(${PROJECT_NAME}_VERSION_MINOR 16) |
| 25 | +# Empty for official releases, set to -dev, -rc1, etc for development releases |
| 26 | +SET(${PROJECT_NAME}_VERSION_DEVEL -dev) |
| 27 | + |
| 28 | +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) |
| 29 | + |
| 30 | +SET(CMAKE_BUILD_TYPE "MinSizeRel" CACHE STRING "Build type") |
| 31 | +MESSAGE(STATUS " ${CMAKE_CXX_FLAGS}") |
| 32 | +SET(BUILD_SHARED_LIBS ON) |
| 33 | +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}) |
| 34 | + |
| 35 | +############################# |
| 36 | +# Option_With_Default macro # |
| 37 | +############################# |
| 38 | +MACRO( OPTION_WITH_DEFAULT OPTION_NAME OPTION_STRING OPTION_DEFAULT ) |
| 39 | +IF( NOT DEFINED ${OPTION_NAME} ) |
| 40 | + SET( ${OPTION_NAME} ${OPTION_DEFAULT} ) |
| 41 | +ENDIF( NOT DEFINED ${OPTION_NAME} ) |
| 42 | + OPTION( ${OPTION_NAME} "${OPTION_STRING}" ${${OPTION_NAME}} ) |
| 43 | +ENDMACRO( OPTION_WITH_DEFAULT OPTION_NAME OPTION_STRING OPTION_DEFAULT ) |
| 44 | + |
| 45 | +########## |
| 46 | +# Python # |
| 47 | +########## |
| 48 | +FIND_PACKAGE(PythonLibs) |
| 49 | +INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) |
| 50 | + |
| 51 | +############################################################## |
| 52 | +# 32/64 bit detection |
| 53 | +############################################################### |
| 54 | +IF(${CMAKE_SIZEOF_VOID_P} MATCHES "8") |
| 55 | + # If in 64bit mode, we have to define the _OCC64 variable |
| 56 | + ADD_DEFINITIONS(-D_OCC64) |
| 57 | + SET(CMAKE_SWIG_FLAGS ${CMAKE_SWIG_FLAGS} -D_OCC64) |
| 58 | + SET(BIT 64) |
| 59 | +ELSE(${CMAKE_SIZEOF_VOID_P} MATCHES "8") |
| 60 | + SET(BIT 32) |
| 61 | +ENDIF(${CMAKE_SIZEOF_VOID_P} MATCHES "8") |
| 62 | +MESSAGE(STATUS "Build ${BIT}bit") |
| 63 | + |
| 64 | +IF ((NOT MSVC) OR (CMAKE_BUILD_TOOL STREQUAL "nmake")) |
| 65 | + IF( NOT DEFINED ${PROJECT_NAME}_BUILD_TYPE ) |
| 66 | + SET( ${PROJECT_NAME}_BUILD_TYPE "MinSizeRel" CACHE STRING "Build type" ) # By default set release build |
| 67 | + ENDIF( NOT DEFINED ${PROJECT_NAME}_BUILD_TYPE ) |
| 68 | + SET( CMAKE_BUILD_TYPE ${${PROJECT_NAME}_BUILD_TYPE} CACHE INTERNAL "Build type, |
| 69 | + immutable" FORCE ) |
| 70 | +ENDIF((NOT MSVC) OR (CMAKE_BUILD_TOOL STREQUAL "nmake")) |
| 71 | + |
| 72 | +######## |
| 73 | +# SWIG # |
| 74 | +######## |
| 75 | +FIND_PACKAGE(SWIG) |
| 76 | +INCLUDE(${SWIG_USE_FILE}) |
| 77 | +SET(SWIG_FILES_PATH src/SWIG_files/wrapper) |
| 78 | + |
| 79 | +################################ |
| 80 | +# OCE include and lib location # |
| 81 | +################################ |
| 82 | +SET(OCE_INCLUDE_PATH /usr/local/include/oce CACHE PATH "OCE include path" ) |
| 83 | +SET(OCE_LIB_PATH /usr/local/lib CACHE PATH "OCE lib path" ) |
| 84 | + |
| 85 | +############################################## |
| 86 | +# Installation directory # |
| 87 | +# by default, installed to site-packages/OCC # |
| 88 | +############################################## |
| 89 | +EXECUTE_PROCESS(COMMAND python -c "from distutils.sysconfig import get_python_lib; import os;print get_python_lib()" OUTPUT_VARIABLE python_lib OUTPUT_STRIP_TRAILING_WHITESPACE ) |
| 90 | +SET(${PROJECT_NAME}_INSTALL_DIRECTORY ${python_lib}/OCC CACHE PATH "pythonOCC install directory" ) |
| 91 | + |
| 92 | +# List of OCE shared libraries to link with |
| 93 | +# TODO: this should be build from the module list |
| 94 | +SET(OCE_MODEL_LIBRARIES TKernel TKMath TKAdvTools TKG2d TKG3d TKGeomBase TKBRep TKGeomAlgo |
| 95 | + TKTopAlgo TKPrim TKBO TKHLR TKMesh TKShHealing TKXMesh |
| 96 | + TKBool TKFillet TKFeat TKOffset) |
| 97 | +SET(OCE_VISUALIZATION_LIBRARIES TKService TKV3d TKOpenGl) |
| 98 | +SET(OCE_DATAEXCHANGE_LIBRARIES TKSTL TKXSBase TKSTEPBase TKIGES TKSTEPAttr TKSTEP209 |
| 99 | + TKSTEP TKVRML) |
| 100 | +# Tells CMake where are the required headers |
| 101 | +INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH}) |
| 102 | +INCLUDE_DIRECTORIES(${OCE_INCLUDE_PATH}) |
| 103 | +LINK_DIRECTORIES(${OCE_LIB_PATH}) |
| 104 | + |
| 105 | +###################################################### |
| 106 | +# Configure Build settings according to the platform # |
| 107 | +###################################################### |
| 108 | +IF(UNIX) |
| 109 | + IF(APPLE) |
| 110 | + ######### MacOSX ########### |
| 111 | + SET(PLATFORM Darwin) |
| 112 | + ELSE(APPLE) |
| 113 | + ######### Unix/Linux ########### |
| 114 | + SET(PLATFORM Unix) |
| 115 | + ENDIF(APPLE) |
| 116 | + SET(CMAKE_SWIG_FLAGS -O -w302,401,314,509,512 |
| 117 | + -DCSFDB -DHAVE_CONFIG_H -DOCC_CONVERT_SIGNALS) |
| 118 | + ADD_DEFINITIONS(-DHAVE_CONFIG_H -DCSFDB -DOCC_CONVERT_SIGNALS) |
| 119 | +ELSE(UNIX) |
| 120 | + IF(WIN32) |
| 121 | + ######### Windows ########### |
| 122 | + ADD_DEFINITIONS(-DWNT -DWIN32 -D_WINDOWS -DCSFDB -DHAVE_CONFIG_H) |
| 123 | + # specific windows defines for python version >=2.6.0 |
| 124 | + EXECUTE_PROCESS(COMMAND python -c "import sys;print (2,6)>=sys.version_info[:2]" OUTPUT_VARIABLE PYTHON_26_OR_HIGHER OUTPUT_STRIP_TRAILING_WHITESPACE) |
| 125 | + IF(${PYTHON_26_OR_HIGHER} MATCHES "True") |
| 126 | + ADD_DEFINITIONS(-DHAVE_ACOSH -DHAVE_ASINH -DHAVE_ATANH) |
| 127 | + ENDIF(${PYTHON_26_OR_HIGHER} MATCHES "True") |
| 128 | + SET(CMAKE_SWIG_FLAGS -O -w302,401,314,509,512 -DCSFDB -DWIN32 -D_WINDOWS) |
| 129 | + SET(PLATFORM win) |
| 130 | + ELSE(WIN32) |
| 131 | + MESSAGE(STATUS "Unknown platform") |
| 132 | + ENDIF(WIN32) |
| 133 | +ENDIF(UNIX) |
| 134 | +MESSAGE(STATUS "Platform:" ${PLATFORM}) |
| 135 | + |
| 136 | +################################################ |
| 137 | +# Define output path for generated libraries: # |
| 138 | +# platform/compiler-build_type-bits # |
| 139 | +# for instance: # |
| 140 | +# ./win32/bin/vc7.1-release-64 # |
| 141 | +# ./win32/bin/vc9-debug-32 # |
| 142 | +# ./Unix/i386-debug-64 # |
| 143 | +################################################ |
| 144 | +IF(WIN32) |
| 145 | + IF(MSVC) # The compiler used is MSVC |
| 146 | + MESSAGE(STATUS "Found MSVC compiler: ${MSVC} ${MSVC_VERSION}") |
| 147 | + SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin/) |
| 148 | + ELSEIF (BORLAND) # The compiler used is BORLAND |
| 149 | + SET(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/win${BIT}/bin/${CMAKE_BUILD_TYPE}) |
| 150 | + ELSE() |
| 151 | + SET(LIBRARY_OUTPUT_PATH win${BIT}/bin/${CMAKE_BUILD_TYPE}) |
| 152 | + ENDIF() |
| 153 | + SET(EXECUTABLE_OUTPUT_PATH ${LIBRARY_OUTPUT_PATH}) |
| 154 | +ELSE(WIN32) |
| 155 | + SET(LIBRARY_OUTPUT_PATH ${PLATFORM}/${CMAKE_SYSTEM_PROCESSOR}-${CMAKE_BUILD_TYPE}-${BIT}) |
| 156 | +ENDIF(WIN32) |
| 157 | +SET(CMAKE_SWIG_OUTDIR ${LIBRARY_OUTPUT_PATH}) |
| 158 | +MESSAGE(STATUS "output_path: ${LIBRARY_OUTPUT_PATH}") |
| 159 | + |
| 160 | +############################ |
| 161 | +# OpenCASCADE Modules list # |
| 162 | +############################ |
| 163 | +INCLUDE(${CMAKE_CURRENT_SOURCE_DIR}/cmake/OCE_Modules.cmake) |
| 164 | +# add an option to choose toolkits to compile |
| 165 | +OPTION_WITH_DEFAULT(${PROJECT_NAME}_WRAP_MODEL "Compile Foundation/Model" TRUE) |
| 166 | +OPTION_WITH_DEFAULT(${PROJECT_NAME}_WRAP_VISU "Compile Visualisation" TRUE) |
| 167 | +OPTION_WITH_DEFAULT(${PROJECT_NAME}_WRAP_DATAEXCHANGE "Compile Data Exchange" TRUE) |
| 168 | + |
| 169 | +################### |
| 170 | +# Wrapper Modules # |
| 171 | +################### |
| 172 | + |
| 173 | +# MODEL Toolkits |
| 174 | +FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/${SWIG_FILES_PATH}) |
| 175 | +FOREACH(OCE_MODULE ${OCE_TOOLKIT_MODEL}) |
| 176 | + SET(FILE ${SWIG_FILES_PATH}/${OCE_MODULE}.i) |
| 177 | + SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON) |
| 178 | + SWIG_ADD_MODULE(${OCE_MODULE} python ${FILE}) |
| 179 | + SWIG_LINK_LIBRARIES(${OCE_MODULE} ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES}) |
| 180 | +ENDFOREACH(OCE_MODULE) |
| 181 | + |
| 182 | +# Visualisation |
| 183 | +IF(${PROJECT_NAME}_WRAP_VISU) |
| 184 | +FOREACH(OCE_MODULE ${OCE_TOOLKIT_VISUALIZATION}) |
| 185 | + SET(FILE ${SWIG_FILES_PATH}/${OCE_MODULE}.i) |
| 186 | + SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON) |
| 187 | + SWIG_ADD_MODULE(${OCE_MODULE} python ${FILE}) |
| 188 | + SWIG_LINK_LIBRARIES(${OCE_MODULE} ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES}) |
| 189 | +ENDFOREACH(OCE_MODULE) |
| 190 | +ENDIF(${PROJECT_NAME}_WRAP_VISU) |
| 191 | + |
| 192 | +IF(${PROJECT_NAME}_WRAP_VISU) |
| 193 | +# Build third part modules |
| 194 | +# TODO : the following line is strange but necessary |
| 195 | +EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E make_directory src/Visualization) |
| 196 | +SET_SOURCE_FILES_PROPERTIES(${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Visualization.i PROPERTIES CPLUSPLUS ON) |
| 197 | +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization) |
| 198 | +SET(VISUALIZATION_SOURCE_FILES |
| 199 | + ${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Visualization.i |
| 200 | + ${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Display3d.cpp |
| 201 | + ${CMAKE_CURRENT_SOURCE_DIR}/src/Visualization/Tesselator.cpp |
| 202 | + ) |
| 203 | +SWIG_ADD_MODULE(Visualization python ${VISUALIZATION_SOURCE_FILES}) |
| 204 | +IF(APPLE) |
| 205 | +# on OSX, always add /System/Library/Frameworks/Cocoa.framework, even |
| 206 | +# if GLX is enabled |
| 207 | +SWIG_LINK_LIBRARIES(Visualization ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES} /System/Library/Frameworks/Cocoa.framework) |
| 208 | +ELSE(APPLE) |
| 209 | +SWIG_LINK_LIBRARIES(Visualization ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES}) |
| 210 | +ENDIF(APPLE) |
| 211 | +ENDIF(${PROJECT_NAME}_WRAP_VISU) |
| 212 | + |
| 213 | +# DataExchange |
| 214 | +IF(${PROJECT_NAME}_WRAP_DATAEXCHANGE) |
| 215 | +FOREACH(OCE_MODULE ${OCE_TOOLKIT_DATAEXCHANGE}) |
| 216 | + SET(FILE ${SWIG_FILES_PATH}/${OCE_MODULE}.i) |
| 217 | + SET_SOURCE_FILES_PROPERTIES(${FILE} PROPERTIES CPLUSPLUS ON) |
| 218 | + SWIG_ADD_MODULE(${OCE_MODULE} python ${FILE}) |
| 219 | + SWIG_LINK_LIBRARIES(${OCE_MODULE} ${PYTHON_LIBRARIES} ${OCE_MODEL_LIBRARIES} ${OCE_VISUALIZATION_LIBRARIES} ${OCE_DATAEXCHANGE_LIBRARIES}) |
| 220 | +ENDFOREACH(OCE_MODULE) |
| 221 | +ENDIF(${PROJECT_NAME}_WRAP_DATAEXCHANGE) |
| 222 | + |
| 223 | +################ |
| 224 | +# Installation # |
| 225 | +################ |
| 226 | +IF(WIN32) |
| 227 | + SET(EXTENSION "pyd") |
| 228 | +ELSE(WIN32) |
| 229 | + SET(EXTENSION "so") |
| 230 | +ENDIF(WIN32) |
| 231 | +SET(BUILD_DIR ${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_PATH}) |
| 232 | + |
| 233 | +# install pythonOCC modules |
| 234 | +FOREACH(OCE_MODULE ${OCE_TOOLKIT_MODEL}) |
| 235 | + INSTALL(FILES ${BUILD_DIR}/${OCE_MODULE}.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 236 | + INSTALL(FILES ${BUILD_DIR}/_${OCE_MODULE}.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 237 | +ENDFOREACH(OCE_MODULE) |
| 238 | +IF(${PROJECT_NAME}_WRAP_VISU) |
| 239 | +FOREACH(OCE_MODULE ${OCE_TOOLKIT_VISUALIZATION}) |
| 240 | + INSTALL(FILES ${BUILD_DIR}/${OCE_MODULE}.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 241 | + INSTALL(FILES ${BUILD_DIR}/_${OCE_MODULE}.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 242 | +ENDFOREACH(OCE_MODULE) |
| 243 | +ENDIF(${PROJECT_NAME}_WRAP_VISU) |
| 244 | +IF(${PROJECT_NAME}_WRAP_DATAEXCHANGE) |
| 245 | +FOREACH(OCE_MODULE ${OCE_TOOLKIT_DATAEXCHANGE}) |
| 246 | + INSTALL(FILES ${BUILD_DIR}/${OCE_MODULE}.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 247 | + INSTALL(FILES ${BUILD_DIR}/_${OCE_MODULE}.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 248 | +ENDFOREACH(OCE_MODULE) |
| 249 | +ENDIF(${PROJECT_NAME}_WRAP_DATAEXCHANGE) |
| 250 | + |
| 251 | +# install third part modules |
| 252 | +IF(${PROJECT_NAME}_WRAP_VISU) |
| 253 | +INSTALL(FILES ${BUILD_DIR}/Visualization.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 254 | +INSTALL(FILES ${BUILD_DIR}/_Visualization.${EXTENSION} DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 255 | +ENDIF(${PROJECT_NAME}_WRAP_VISU) |
| 256 | + |
| 257 | +# install GC |
| 258 | +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/GarbageCollector.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 259 | +# install addons |
| 260 | +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/src/addons/Display DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 261 | +# install LICENSE file |
| 262 | +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 263 | +# install __init__.py file |
| 264 | +INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/__init__.py DESTINATION ${${PROJECT_NAME}_INSTALL_DIRECTORY} ) |
| 265 | + |
| 266 | +####################### |
| 267 | +# pythonOCC Packaging # |
| 268 | +# $ make package # |
| 269 | +####################### |
| 270 | +IF(UNIX) |
| 271 | + INCLUDE(InstallRequiredSystemLibraries) |
| 272 | +ENDIF(UNIX) |
| 273 | +SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "pythonOCC") |
| 274 | +SET(CPACK_PACKAGE_VENDOR "Thomas Paviot") |
| 275 | +SET(CPACK_SET_DESTDIR "ON") |
| 276 | +SET(CPACK_PACKAGE_VERSION_MAJOR ${${PROJECT_NAME}_VERSION_MAJOR}) |
| 277 | +SET(CPACK_PACKAGE_VERSION_MINOR ${${PROJECT_NAME}_VERSION_MINOR}) |
| 278 | +SET(CPACK_PACKAGE_VERSION_PATCH 0) |
| 279 | +SET(CPACK_PACKAGE_NAME ${PROJECT_NAME}) |
| 280 | +SET(CPACK_PACKAGE_CONTACT "pythonOCC users <pythonocc-users@gna.org") |
| 281 | +INCLUDE(CPack) |
0 commit comments