diff --git a/CMakeLists.txt b/CMakeLists.txt index a1d3101d5..2aac62a2e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -440,74 +440,7 @@ if(NOT FREECAD_LIBPACK_USE OR FREECAD_LIBPACK_CHECKFILE_CLBUNDLER) # -------------------------------- OpenCasCade -------------------------------- -#first, look for OpenCASCADE Community Edition (OCE) -#if OCE is installed in a nonstandard location, add -DOCE_DIR=/path/to/dir/containing/OCEConfig.cmake -# when configuring with cmake, i.e. cmake .. -DOCE_DIR=/usr/share/cmake - if(NOT DEFINED OCE_DIR) - if(UNIX) - set(OCE_DIR "/usr/local/share/cmake/") - elseif(WIN32) - set(OCE_DIR "c:/OCE-0.4.0/share/cmake") - endif() - endif() - find_package (OCE QUIET) - if(${OCE_FOUND}) - message(STATUS "-- OpenCASCADE Community Edition has been found.") - #lib list copied from FreeCAD's FindOpenCasCade.cmake - set(OCC_LIBRARIES - TKFillet - TKMesh - TKernel - TKG2d - TKG3d - TKMath - TKIGES - TKSTL - TKShHealing - TKXSBase - TKBool - TKBO - TKBRep - TKTopAlgo - TKGeomAlgo - TKGeomBase - TKOffset - TKPrim - TKSTEP - TKSTEPBase - TKSTEPAttr - TKHLR - TKFeat - ) - #lib list copied from FreeCAD's FindOpenCasCade.cmake - set(OCC_OCAF_LIBRARIES - TKCAF - TKXCAF - TKLCAF - TKXDESTEP - TKXDEIGES - TKMeshVS - ) - set(OCC_INCLUDE_DIR ${OCE_INCLUDE_DIRS}) - - CHECK_MINIMUM_OCC_VERSION_HEX(0x060703) - if (NOT OCC_MIN_VERSION) - set(OCC_OCAF_LIBRARIES - ${OCC_OCAF_LIBRARIES} - TKAdvTools - ) - endif() - - set(OCC_FOUND ${OCE_FOUND}) - else() #look for OpenCASCADE - find_package(OpenCasCade) - if(NOT OCC_FOUND) - message("Neither OpenCASCADE Community Edition nor OpenCasCade were found: will not build CAD modules!") - else() - message(STATUS "-- OpenCASCADE include directory: ${OCC_INCLUDE_PATH}") - message(STATUS "-- OpenCASCADE shared libraries directory: ${OCC_LIB_PATH}") - endif() - endif() + find_package(OpenCasCade) # -------------------------------- Salome SMESH -------------------------- diff --git a/cMake/FindOpenCasCade.cmake b/cMake/FindOpenCasCade.cmake index 525a33688..86c2e308c 100644 --- a/cMake/FindOpenCasCade.cmake +++ b/cMake/FindOpenCasCade.cmake @@ -1,4 +1,4 @@ -# Try to find OCC +# Try to find OCE / OCC # Once done this will define # # OCC_FOUND - system has OCC - OpenCASCADE @@ -7,56 +7,84 @@ # OCC_LIBRARIES - Link this to use OCC # OCC_OCAF_LIBRARIES - Link this to use OCC OCAF framework +# First try to find OpenCASCADE Community Edition +if(NOT DEFINED OCE_DIR) + if(UNIX) + set(OCE_DIR "/usr/local/share/cmake/") + elseif(WIN32) + set(OCE_DIR "c:/OCE-0.4.0/share/cmake") + endif() +endif() -IF (WIN32) - IF (CYGWIN OR MINGW) - +find_package(OCE QUIET) +if(OCE_FOUND) + message("-- OpenCASCADE Community Edition has been found.") + add_definitions (-DHAVE_CONFIG_H) + set(OCC_INCLUDE_DIR ${OCE_INCLUDE_DIRS}) + #set(OCC_LIBRARY_DIR ${OCE_LIBRARY_DIR}) +else(OCE_FOUND) #look for OpenCASCADE + if(WIN32) + if(CYGWIN OR MINGW) + FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx + /usr/include/opencascade + /usr/local/include/opencascade + /opt/opencascade/include + /opt/opencascade/inc + ) + FIND_LIBRARY(OCC_LIBRARY TKernel + /usr/lib + /usr/local/lib + /opt/opencascade/lib + ) + else(CYGWIN OR MINGW) + FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/include" + ) + FIND_LIBRARY(OCC_LIBRARY TKernel + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/lib" + ) + endif(CYGWIN OR MINGW) + else(WIN32) FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx /usr/include/opencascade /usr/local/include/opencascade /opt/opencascade/include /opt/opencascade/inc ) - FIND_LIBRARY(OCC_LIBRARY TKernel /usr/lib /usr/local/lib /opt/opencascade/lib ) + endif(WIN32) + if(OCC_LIBRARY) + GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH) + endif(OCC_LIBRARY) +endif(OCE_FOUND) - ELSE (CYGWIN OR MINGW) - - FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/include" - ) - - FIND_LIBRARY(OCC_LIBRARY TKernel - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\SIM\\OCC\\2;Installation Path]/lib" - ) - - ENDIF (CYGWIN OR MINGW) - -ELSE (WIN32) - - FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx - /usr/include/opencascade - /usr/local/include/opencascade - /opt/opencascade/include +if(OCC_INCLUDE_DIR) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR + REGEX "#define OCC_VERSION_MAJOR.*" ) - - FIND_LIBRARY(OCC_LIBRARY TKernel - /usr/lib - /usr/local/lib - /opt/opencascade/lib + string(REGEX MATCH "[0-9]+" OCC_MAJOR ${OCC_MAJOR}) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MINOR + REGEX "#define OCC_VERSION_MINOR.*" ) + string(REGEX MATCH "[0-9]+" OCC_MINOR ${OCC_MINOR}) + file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAINT + REGEX "#define OCC_VERSION_MAINTENANCE.*" + ) + string(REGEX MATCH "[0-9]+" OCC_MAINT ${OCC_MAINT}) -ENDIF (WIN32) + set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}") +endif(OCC_INCLUDE_DIR) +# handle the QUIETLY and REQUIRED arguments and set OCC_FOUND to TRUE if +# all listed variables are TRUE +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OCC REQUIRED_VARS OCC_INCLUDE_DIR VERSION_VAR OCC_VERSION_STRING) -SET(OCC_FOUND FALSE) -IF(OCC_LIBRARY) - GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH) - SET(OCC_FOUND TRUE) +if(OCC_FOUND) set(OCC_LIBRARIES TKFillet TKMesh @@ -90,13 +118,12 @@ IF(OCC_LIBRARY) TKXDEIGES TKMeshVS ) - CHECK_MINIMUM_OCC_VERSION_HEX(0x060703) - if (NOT OCC_MIN_VERSION) - set(OCC_OCAF_LIBRARIES - ${OCC_OCAF_LIBRARIES} - TKAdvTools - ) - endif() - -ENDIF(OCC_LIBRARY) - + if(OCC_VERSION_STRING VERSION_LESS 6.7.3) + list(APPEND OCC_OCAF_LIBRARIES TKAdvTools) + endif(OCC_VERSION_STRING VERSION_LESS 6.7.3) + message("-- Found OCE/OpenCASCADE version: ${OCC_VERSION_STRING}") + message("-- OCE/OpenCASCADE include directory: ${OCC_INCLUDE_DIR}") + message("-- OCE/OpenCASCADE shared libraries directory: ${OCC_LIBRARY_DIR}") +else(OCC_FOUND) + message("Neither OpenCASCADE Community Edition nor OpenCasCade were found: will not build CAD modules!") +endif(OCC_FOUND) diff --git a/cMake/FreeCadMacros.cmake b/cMake/FreeCadMacros.cmake index 9cf63a078..34bdabeac 100644 --- a/cMake/FreeCadMacros.cmake +++ b/cMake/FreeCadMacros.cmake @@ -252,62 +252,4 @@ MACRO(SET_PYTHON_PREFIX_SUFFIX ProjectName) if(WIN32) set_target_properties(${ProjectName} PROPERTIES SUFFIX ".pyd") endif(WIN32) -ENDMACRO(SET_PYTHON_PREFIX_SUFFIX) - -MACRO(CHECK_MINIMUM_OCC_VERSION_HEX MinVersionHex) - message(STATUS "Check for OCC version >= ${MinVersionHex}") - set(CMAKE_REQUIRED_INCLUDES ${OCC_INCLUDE_DIR}) - unset(OCC_MIN_VERSION CACHE) - CHECK_CXX_SOURCE_RUNS(" - #include - int main () - { - return OCC_VERSION_HEX >= ${MinVersionHex} ? 0 : -1; - } - " - OCC_MIN_VERSION) -ENDMACRO(CHECK_MINIMUM_OCC_VERSION_HEX) - -MACRO(GET_OCC_VERSION_HEX) - # clear them to run the tests for each configure step - unset(OCC_MAJOR CACHE) - unset(OCC_MAJOR_COMPILED CACHE) - unset(OCC_MAJOR_EXITCODE CACHE) - unset(OCC_MINOR CACHE) - unset(OCC_MINOR_COMPILED CACHE) - unset(OCC_MINOR_EXITCODE CACHE) - unset(OCC_MICRO CACHE) - unset(OCC_MICRO_COMPILED CACHE) - unset(OCC_MICRO_EXITCODE CACHE) - - set(CMAKE_REQUIRED_INCLUDES ${OCC_INCLUDE_DIR}) - CHECK_CXX_SOURCE_RUNS(" - #include - int main () - { - return OCC_VERSION_MAJOR; - } - " - OCC_MAJOR) - CHECK_CXX_SOURCE_RUNS(" - #include - int main () - { - return OCC_VERSION_MINOR; - } - " - OCC_MINOR) - CHECK_CXX_SOURCE_RUNS(" - #include - int main () - { - return OCC_VERSION_MAINTENANCE; - } - " - OCC_MICRO) - - unset(OCC_VERSION_HEX CACHE) - if (OCC_MAJOR_COMPILED AND OCC_MINOR_COMPILED AND OCC_MICRO_COMPILED) - set (OCC_VERSION_HEX "0x0${OCC_MAJOR_EXITCODE}0${OCC_MINOR_EXITCODE}0${OCC_MICRO_EXITCODE}") - endif() -ENDMACRO(GET_OCC_VERSION_HEX) +ENDMACRO(SET_PYTHON_PREFIX_SUFFIX)