248 lines
7.2 KiB
CMake
248 lines
7.2 KiB
CMake
# Try to find OCE / OCC
|
|
# Once done this will define
|
|
#
|
|
# OCC_FOUND - system has OCC - OpenCASCADE
|
|
# OCC_INCLUDE_DIR - where the OCC include directory can be found
|
|
# OCC_LIBRARY_DIR - where the OCC library directory can be found
|
|
# OCC_LIBRARIES - Link this to use OCC
|
|
|
|
############################################################################
|
|
#
|
|
# Modifications Copyright (C) 2018 Seth Hillbrand
|
|
#
|
|
# Based on FindOpenCasCade.cmake by the FreeCAD CAx development team
|
|
#
|
|
# This library is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
# License as published by the Free Software Foundation; either
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
#
|
|
# This library is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
# Lesser General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
# License along with this library; if not, write to the Free Software
|
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
|
|
# Set the needed libraries
|
|
set( OCC_LIBS
|
|
PTKernel
|
|
TKBinL
|
|
TKBin
|
|
TKBinTObj
|
|
TKBinXCAF
|
|
TKBool
|
|
TKBO
|
|
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
|
|
TKSTEP209
|
|
TKSTEPAttr
|
|
TKSTEPBase
|
|
TKSTEP
|
|
TKSTL
|
|
TKTObj
|
|
TKTopAlgo
|
|
TKV3d
|
|
TKVoxel
|
|
TKVRML
|
|
TKXCAFSchema
|
|
TKXCAF
|
|
TKXDEIGES
|
|
TKXDESTEP
|
|
TKXMesh
|
|
TKXmlL
|
|
TKXml
|
|
TKXmlTObj
|
|
TKXmlXCAF
|
|
TKXSBase
|
|
)
|
|
|
|
set( OCE_LIBS TKBinXCAF TKPCAF TKSTEP TKXDESTEP TKIGES TKXDEIGES )
|
|
|
|
# First try to find OpenCASCADE Community Edition
|
|
if(NOT DEFINED OCE_INCLUDE_DIR)
|
|
# Check for OSX needs to come first because UNIX evaluates to true on OSX
|
|
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
|
|
if(DEFINED HOMEBREW_PREFIX)
|
|
find_package(OCE 0.16 QUIET COMPONENTS ${OCE_LIBS}
|
|
HINTS
|
|
${OCC_LIBRARY_DIR}
|
|
${HOMEBREW_PREFIX}/Cellar/oce/*
|
|
)
|
|
elseif(DEFINED MACPORTS_PREFIX)
|
|
find_package(OCE 0.16 QUIET COMPONENTS ${OCE_LIBS}
|
|
HINTS
|
|
${OCC_LIBRARY_DIR}
|
|
${MACPORTS_PREFIX}/Library/Frameworks
|
|
)
|
|
endif()
|
|
else()
|
|
find_package(OCE 0.16 QUIET COMPONENTS ${OCE_LIBS}
|
|
HINTS
|
|
${OCC_LIBRARY_DIR}
|
|
/usr
|
|
/usr/local
|
|
/opt
|
|
/opt/oce
|
|
PATH_SUFFIXES lib
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(OCE_FOUND AND NOT KICAD_USE_OCC)
|
|
set(OCC_TYPE "OpenCASCADE Community Edition")
|
|
set(OCC_INCLUDE_DIR ${OCE_INCLUDE_DIRS})
|
|
FIND_LIBRARY(OCC_LIBRARY TKernel
|
|
HINTS
|
|
${OCC_LIBRARY_DIR}
|
|
/usr
|
|
/usr/local
|
|
/opt
|
|
/opt/oce
|
|
PATH_SUFFIXES lib
|
|
)
|
|
else(OCE_FOUND AND NOT KICAD_USE_OCC) #look for OpenCASCADE
|
|
set(OCC_TYPE "OpenCASCADE Standard Edition")
|
|
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
|
|
HINTS
|
|
${OCC_LIBRARY_DIR}
|
|
/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
|
|
HINTS
|
|
${OCC_LIBRARY_DIR}
|
|
/usr
|
|
/usr/local
|
|
/opt/opencascade
|
|
/opt/opencascade/lin64/gcc
|
|
PATH_SUFFIXES lib
|
|
)
|
|
endif(WIN32)
|
|
endif(OCE_FOUND AND NOT KICAD_USE_OCC)
|
|
|
|
if(OCC_LIBRARY)
|
|
GET_FILENAME_COMPONENT(OCC_LIBRARY_DIR ${OCC_LIBRARY} PATH)
|
|
IF(NOT OCC_INCLUDE_DIR)
|
|
FIND_PATH(OCC_INCLUDE_DIR Standard_Version.hxx
|
|
${OCC_LIBRARY_DIR}/../inc
|
|
)
|
|
ENDIF()
|
|
else(OCC_LIBRARY)
|
|
message( "" )
|
|
message( "*** OpenCascade library missing ***" )
|
|
message( "Verify your OpenCascade installation or pass CMake" )
|
|
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" )
|
|
message( "" )
|
|
message( FATAL_ERROR "" )
|
|
endif(OCC_LIBRARY)
|
|
|
|
if(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
|
|
file(STRINGS ${OCC_INCLUDE_DIR}/Standard_Version.hxx OCC_MAJOR
|
|
REGEX "#define OCC_VERSION_MAJOR.*"
|
|
)
|
|
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})
|
|
|
|
set(OCC_VERSION_STRING "${OCC_MAJOR}.${OCC_MINOR}.${OCC_MAINT}")
|
|
else(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
|
|
message( "" )
|
|
message( "*** OpenCascade header files missing ***" )
|
|
message( "Verify your OpenCascade installation or pass CMake" )
|
|
message( " the header directory as '-DOCC_INCLUDE_DIR=<path>'" )
|
|
message( "" )
|
|
message( FATAL_ERROR "" )
|
|
endif(OCC_INCLUDE_DIR AND NOT ${OCC_INCLUDE_DIR} STREQUAL "OCC_INCLUDE_DIR-NOTFOUND")
|
|
|
|
# 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)
|
|
|
|
if(OCC_FOUND)
|
|
foreach(lib IN LISTS OCC_LIBS)
|
|
|
|
#Use the specified library location if given
|
|
find_library(OCC_TEMP_LIB ${lib} HINTS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH)
|
|
if(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
|
|
message( "" )
|
|
message( "*** OpenCascade library missing ***" )
|
|
message( "Could not find a library for ${lib} at ${OCC_LIBRARY_DIR}" )
|
|
message( "Verify your OpenCascade installation or pass CMake" )
|
|
message( " the library directory as '-DOCC_LIBRARY_DIR=<path>'" )
|
|
message( "" )
|
|
message( FATAL_ERROR "" )
|
|
else(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
|
|
list(APPEND OCC_LIBRARIES ${OCC_TEMP_LIB})
|
|
endif(${OCC_TEMP_LIB} STREQUAL "OCC_TEMP_LIB-NOTFOUND")
|
|
|
|
unset(OCC_TEMP_LIB CACHE)
|
|
endforeach(lib)
|
|
|
|
#Convert path names to absolute for cleaner display
|
|
get_filename_component(OCC_INCLUDE_DIR "${OCC_INCLUDE_DIR}" ABSOLUTE)
|
|
get_filename_component(OCC_LIBRARY_DIR "${OCC_LIBRARY_DIR}" ABSOLUTE)
|
|
message(STATUS "Found ${OCC_TYPE} version: ${OCC_VERSION_STRING}")
|
|
message(STATUS " ++ ${OCC_TYPE} include directory: ${OCC_INCLUDE_DIR}")
|
|
message(STATUS " ++ ${OCC_TYPE} shared libraries directory: ${OCC_LIBRARY_DIR}")
|
|
endif(OCC_FOUND)
|