mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-09-30 03:59:55 +00:00
Merge pull request #114 from aothms/cmake_improvements
Cmake improvements: LINK_DIRECTORIES and OCCT 7
This commit is contained in:
+96
-31
@@ -142,22 +142,18 @@ ELSE()
|
|||||||
MESSAGE(STATUS "Looking for opencascade include files in: ${OCC_INCLUDE_DIR}")
|
MESSAGE(STATUS "Looking for opencascade include files in: ${OCC_INCLUDE_DIR}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
FIND_FILE(gp_Pnt_hxx "gp_Pnt.hxx" ${OCC_INCLUDE_DIR} /usr/inc /usr/local/inc /usr/local/include/oce)
|
FIND_FILE(gp_Pnt_hxx "gp_Pnt.hxx" ${OCC_INCLUDE_DIR})
|
||||||
IF(gp_Pnt_hxx)
|
IF(gp_Pnt_hxx)
|
||||||
MESSAGE(STATUS "Header files found")
|
MESSAGE(STATUS "Header files found")
|
||||||
ELSE()
|
ELSE()
|
||||||
MESSAGE(FATAL_ERROR "Unable to find header files, aborting")
|
MESSAGE(FATAL_ERROR "Unable to find header files, aborting")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
SET(OPENCASCADE_LIBRARIES
|
SET(OPENCASCADE_LIBRARY_NAMES
|
||||||
TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO
|
TKernel TKMath TKBRep TKGeomBase TKGeomAlgo TKG3d TKG2d TKShHealing TKTopAlgo TKMesh TKPrim TKBool TKBO
|
||||||
TKFillet TKSTEP TKSTEPBase TKSTEPAttr TKXSBase TKSTEP209 TKIGES TKOffset
|
TKFillet TKSTEP TKSTEPBase TKSTEPAttr TKXSBase TKSTEP209 TKIGES TKOffset
|
||||||
)
|
)
|
||||||
|
|
||||||
IF(MSVC)
|
|
||||||
ADD_DEBUG_VARIANTS(OPENCASCADE_LIBRARIES "${OPENCASCADE_LIBRARIES}" "d")
|
|
||||||
ENDIF()
|
|
||||||
|
|
||||||
IF("${OCC_LIBRARY_DIR}" STREQUAL "")
|
IF("${OCC_LIBRARY_DIR}" STREQUAL "")
|
||||||
SET(OCC_LIBRARY_DIR "/usr/lib/" CACHE FILEPATH "Open CASCADE library files")
|
SET(OCC_LIBRARY_DIR "/usr/lib/" CACHE FILEPATH "Open CASCADE library files")
|
||||||
MESSAGE(STATUS "Looking for opencascade library files in: ${OCC_LIBRARY_DIR}")
|
MESSAGE(STATUS "Looking for opencascade library files in: ${OCC_LIBRARY_DIR}")
|
||||||
@@ -167,41 +163,53 @@ ELSE()
|
|||||||
MESSAGE(STATUS "Looking for opencascade library files in: ${OCC_LIBRARY_DIR}")
|
MESSAGE(STATUS "Looking for opencascade library files in: ${OCC_LIBRARY_DIR}")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
FIND_LIBRARY(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64)
|
FIND_LIBRARY(libTKernel NAMES TKernel TKerneld PATHS ${OCC_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||||
IF(libTKernel)
|
IF(libTKernel)
|
||||||
MESSAGE(STATUS "Library files found")
|
MESSAGE(STATUS "Library files found")
|
||||||
ELSE()
|
ELSE()
|
||||||
MESSAGE(FATAL_ERROR "Unable to find library files, aborting")
|
MESSAGE(FATAL_ERROR "Unable to find library files, aborting")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
# Use the found libTKernel as a template for all other OCC libraries
|
||||||
|
foreach(lib ${OPENCASCADE_LIBRARY_NAMES})
|
||||||
|
string(REPLACE TKernel "${lib}" lib_path "${libTKernel}")
|
||||||
|
list(APPEND OPENCASCADE_LIBRARIES "${lib_path}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
IF(MSVC)
|
||||||
|
ADD_DEBUG_VARIANTS(OPENCASCADE_LIBRARIES "${OPENCASCADE_LIBRARIES}" "d")
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
IF(UNICODE_SUPPORT)
|
IF(UNICODE_SUPPORT)
|
||||||
# Find ICU
|
# Find ICU
|
||||||
IF("${ICU_INCLUDE_DIR}" STREQUAL "")
|
IF("${ICU_INCLUDE_DIR}" STREQUAL "")
|
||||||
MESSAGE(STATUS "No ICU include directory specified")
|
MESSAGE(STATUS "No ICU include directory specified")
|
||||||
ElSE()
|
|
||||||
SET(ICU_INCLUDE_DIR "${ICU_INCLUDE_DIR}" CACHE FILEPATH "ICU header files")
|
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
IF("${ICU_LIBRARY_DIR}" STREQUAL "")
|
IF("${ICU_LIBRARY_DIR}" STREQUAL "")
|
||||||
MESSAGE(STATUS "No ICU library directory specified")
|
MESSAGE(STATUS "No ICU library directory specified")
|
||||||
ElSE()
|
FIND_LIBRARY(icu NAMES icuuc icuucd PATHS ${ICU_LIBRARY_DIR})
|
||||||
SET(ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR}" CACHE FILEPATH "ICU library files")
|
ELSE()
|
||||||
|
FIND_LIBRARY(icu NAMES icuuc icuucd PATHS ${ICU_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
FIND_LIBRARY(icu NAMES icuuc icuucd PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib ${ICU_LIBRARY_DIR})
|
|
||||||
|
|
||||||
IF(icu)
|
IF(icu)
|
||||||
|
GET_FILENAME_COMPONENT(ICU_LIBRARY_DIR ${icu} PATH)
|
||||||
|
|
||||||
ADD_DEFINITIONS(-DHAVE_ICU)
|
ADD_DEFINITIONS(-DHAVE_ICU)
|
||||||
MESSAGE(STATUS "ICU libraries found")
|
MESSAGE(STATUS "ICU libraries found")
|
||||||
# NOTE icudata appears to be icudt on Windows/MSVC and icudata on others
|
# NOTE icudata appears to be icudt on Windows/MSVC and icudata on others
|
||||||
# dl is included to resolve dlopen and friends symbols
|
# dl is included to resolve dlopen and friends symbols
|
||||||
IF(WIN32)
|
IF(WIN32)
|
||||||
SET(ICU_LIBRARIES icuuc icudt)
|
FIND_LIBRARY(icudt NAMES icudt PATHS ${ICU_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||||
|
SET(ICU_LIBRARIES ${icu} ${icudt})
|
||||||
ADD_DEBUG_VARIANTS(ICU_LIBRARIES "${ICU_LIBRARIES}" "d")
|
ADD_DEBUG_VARIANTS(ICU_LIBRARIES "${ICU_LIBRARIES}" "d")
|
||||||
# TODO MinGW build would appear to be using dynamic ICU regardless of this definition.
|
# TODO MinGW build would appear to be using dynamic ICU regardless of this definition.
|
||||||
ADD_DEFINITIONS(-DU_STATIC_IMPLEMENTATION) # required for static ICU
|
ADD_DEFINITIONS(-DU_STATIC_IMPLEMENTATION) # required for static ICU
|
||||||
ELSE()
|
ELSE()
|
||||||
SET(ICU_LIBRARIES icuuc icudata dl)
|
FIND_LIBRARY(icudt NAMES icudata PATHS ${ICU_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||||
|
FIND_LIBRARY(dl NAMES dl)
|
||||||
|
SET(ICU_LIBRARIES ${icu} ${icudt} ${dl})
|
||||||
ENDIF()
|
ENDIF()
|
||||||
ELSE()
|
ELSE()
|
||||||
MESSAGE(FATAL_ERROR "UNICODE_SUPPORT enabled, but unable to find ICU. Disable UNICODE_SUPPORT or fix ICU paths to proceed.")
|
MESSAGE(FATAL_ERROR "UNICODE_SUPPORT enabled, but unable to find ICU. Disable UNICODE_SUPPORT or fix ICU paths to proceed.")
|
||||||
@@ -219,9 +227,13 @@ IF(COLLADA_SUPPORT)
|
|||||||
|
|
||||||
IF("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "")
|
IF("${OPENCOLLADA_LIBRARY_DIR}" STREQUAL "")
|
||||||
MESSAGE(STATUS "No OpenCOLLADA library directory specified")
|
MESSAGE(STATUS "No OpenCOLLADA library directory specified")
|
||||||
FIND_LIBRARY(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib)
|
FIND_LIBRARY(OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework
|
||||||
|
PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib)
|
||||||
GET_FILENAME_COMPONENT(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH)
|
GET_FILENAME_COMPONENT(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH)
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
FIND_LIBRARY(OpenCOLLADAFramework NAMES OpenCOLLADAFramework PATHS ${OPENCOLLADA_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||||
|
|
||||||
SET(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files")
|
SET(OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR}" CACHE FILEPATH "OpenCOLLADA library files")
|
||||||
|
|
||||||
SET(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter")
|
SET(OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR}/COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR}/COLLADAStreamWriter")
|
||||||
@@ -230,13 +242,29 @@ IF(COLLADA_SUPPORT)
|
|||||||
IF(COLLADASWStreamWriter_h)
|
IF(COLLADASWStreamWriter_h)
|
||||||
MESSAGE(STATUS "OpenCOLLADA header files found")
|
MESSAGE(STATUS "OpenCOLLADA header files found")
|
||||||
ADD_DEFINITIONS(-DWITH_OPENCOLLADA)
|
ADD_DEFINITIONS(-DWITH_OPENCOLLADA)
|
||||||
SET(OPENCOLLADA_LIBRARIES
|
SET(OPENCOLLADA_LIBRARY_NAMES
|
||||||
GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader
|
GeneratedSaxParser MathMLSolver OpenCOLLADABaseUtils OpenCOLLADAFramework OpenCOLLADASaxFrameworkLoader
|
||||||
OpenCOLLADAStreamWriter UTF buffer ftoa pcre
|
OpenCOLLADAStreamWriter UTF buffer ftoa
|
||||||
)
|
)
|
||||||
IF(NOT "${PCRE_LIBRARY_DIR}" STREQUAL "")
|
|
||||||
|
# Use the found libTKernel as a template for all other OCC libraries
|
||||||
|
foreach(lib ${OPENCOLLADA_LIBRARY_NAMES})
|
||||||
|
string(REPLACE OpenCOLLADAFramework "${lib}" lib_path "${OpenCOLLADAFramework}")
|
||||||
|
list(APPEND OPENCOLLADA_LIBRARIES "${lib_path}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
IF("${PCRE_LIBRARY_DIR}" STREQUAL "")
|
||||||
|
find_library(pcre_library NAMES pcre PATHS ${OPENCOLLADA_LIBRARY_DIR})
|
||||||
|
GET_FILENAME_COMPONENT(PCRE_LIBRARY_DIR ${pcre_library} PATH)
|
||||||
|
else()
|
||||||
|
find_library(pcre_library NAMES pcre PATHS ${PCRE_LIBRARY_DIR} NO_DEFAULT_PATH)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (${pcre_library})
|
||||||
SET(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_LIBRARY_DIR} ${PCRE_LIBRARY_DIR})
|
SET(OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_LIBRARY_DIR} ${PCRE_LIBRARY_DIR})
|
||||||
ENDIF()
|
list(APPEND OPENCOLLADA_LIBRARIES "${pcre_library}")
|
||||||
|
endif()
|
||||||
|
|
||||||
IF(MSVC)
|
IF(MSVC)
|
||||||
ADD_DEBUG_VARIANTS(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" "d")
|
ADD_DEBUG_VARIANTS(OPENCOLLADA_LIBRARIES "${OPENCOLLADA_LIBRARIES}" "d")
|
||||||
ENDIF()
|
ENDIF()
|
||||||
@@ -322,7 +350,6 @@ IF(MSVC)
|
|||||||
ElSE()
|
ElSE()
|
||||||
add_definitions(-Wno-non-virtual-dtor -Wall)
|
add_definitions(-Wno-non-virtual-dtor -Wall)
|
||||||
# TODO Preferably use -Wextra too, but currently too much warning spam coming from the dependencies' headers.
|
# TODO Preferably use -Wextra too, but currently too much warning spam coming from the dependencies' headers.
|
||||||
add_definitions(-std=c++03)
|
|
||||||
# -fPIC is not relevant on Windows and creates pointless warnings
|
# -fPIC is not relevant on Windows and creates pointless warnings
|
||||||
if (UNIX)
|
if (UNIX)
|
||||||
add_definitions(-fPIC)
|
add_definitions(-fPIC)
|
||||||
@@ -332,9 +359,6 @@ ENDIF()
|
|||||||
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS}
|
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} ${OCC_INCLUDE_DIR} ${OPENCOLLADA_INCLUDE_DIRS}
|
||||||
${ICU_INCLUDE_DIR} ${Boost_INCLUDE_DIRS}
|
${ICU_INCLUDE_DIR} ${Boost_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
if(NOT WIN32)
|
|
||||||
INCLUDE_DIRECTORIES(${INCLUDE_DIRECTORIES} /usr/inc /usr/local/inc /usr/local/include/oce)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
function(files_for_ifc_version IFC_VERSION RESULT_NAME)
|
function(files_for_ifc_version IFC_VERSION RESULT_NAME)
|
||||||
set(IFC_PARSE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcparse)
|
set(IFC_PARSE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../src/ifcparse)
|
||||||
@@ -418,11 +442,52 @@ if(NOT Boost_VERSION LESS 105800)
|
|||||||
add_definitions(-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE)
|
add_definitions(-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
LINK_DIRECTORIES(${LINK_DIRECTORIES} ${IfcOpenShell_BINARY_DIR} ${OCC_LIBRARY_DIR} ${OPENCOLLADA_LIBRARY_DIR}
|
# Detect OCC version on gcc/clang/mingw as
|
||||||
${ICU_LIBRARY_DIR} ${Boost_LIBRARY_DIRS}
|
# -std=c++11 is needed for OCCT >= 7.0.0
|
||||||
)
|
if(NOT MSVC)
|
||||||
if(NOT WIN32)
|
FIND_FILE(Standard_Version "Standard_Version.hxx" ${OCC_INCLUDE_DIR})
|
||||||
LINK_DIRECTORIES(${LINK_DIRECTORIES} /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64)
|
|
||||||
|
set(CMAKE_CONFIGURABLE_FILE_CONTENT "
|
||||||
|
#include <Standard_Version.hxx>
|
||||||
|
#include <iostream>
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
std::cout << OCC_VERSION_COMPLETE;
|
||||||
|
}")
|
||||||
|
configure_file(
|
||||||
|
"${CMAKE_ROOT}/Modules/CMakeConfigurableFile.in"
|
||||||
|
"${CMAKE_BINARY_DIR}/version.cxx" @ONLY)
|
||||||
|
|
||||||
|
try_compile(VERSION_CHECK
|
||||||
|
${CMAKE_BINARY_DIR}
|
||||||
|
"${CMAKE_BINARY_DIR}/version.cxx"
|
||||||
|
CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${OCC_INCLUDE_DIR}"
|
||||||
|
COPY_FILE "${CMAKE_BINARY_DIR}/version"
|
||||||
|
OUTPUT_VARIABLE OUT
|
||||||
|
COPY_FILE_ERROR ERR
|
||||||
|
)
|
||||||
|
|
||||||
|
if(${VERSION_CHECK})
|
||||||
|
EXECUTE_PROCESS(COMMAND ${CMAKE_BINARY_DIR}/version OUTPUT_VARIABLE OCC_VERSION)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Failed to compile OCC version test:
|
||||||
|
${OUT}
|
||||||
|
------
|
||||||
|
${ERR}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
MESSAGE(STATUS "OCC version is ${OCC_VERSION}. Detected from: ${Standard_Version}")
|
||||||
|
|
||||||
|
if(NOT ("${OCC_VERSION}" LESS "7.0.0"))
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
|
||||||
|
if(COMPILER_SUPPORTS_CXX11)
|
||||||
|
add_definitions(-std=c++11)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "OCCT7 requires a compiler with C++11 support")
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
add_definitions(-std=c++03)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(IFCOPENSHELL_LIBRARIES IfcParse IfcGeom)
|
set(IFCOPENSHELL_LIBRARIES IfcParse IfcGeom)
|
||||||
|
|||||||
Reference in New Issue
Block a user