@@ -30,10 +30,38 @@ OPTION(BUILD_IFCPYTHON "Build IfcPython." ON)
3030OPTION (BUILD_EXAMPLES "Build example applications." ON )
3131OPTION (USE_VLD "Use Visual Leak Detector for debugging memory leaks, MSVC-only." OFF )
3232OPTION (BUILD_IFCMAX "Build IfcMax, a 3ds Max plug-in, Windows-only." OFF )
33+ OPTION (BUILD_SHARED_LIBS "Build ifcparse and ifcgeom libs shared." OFF )
3334# TODO QtViewer is deprecated ATM as it uses the 0.4 API
3435# OPTION(BUILD_QTVIEWER "Build IfcOpenShell Qt GUI Viewer (requires Qt 4 framework)." OFF)
3536
3637
38+ # Specify where to install files
39+ IF (NOT BINDIR)
40+ set (BINDIR bin)
41+ ENDIF ()
42+ IF (NOT IS_ABSOLUTE ${BINDIR} )
43+ set (BINDIR ${CMAKE_INSTALL_PREFIX} /${BINDIR} )
44+ ENDIF ()
45+ MESSAGE (STATUS "BINDIR: ${BINDIR} " )
46+
47+ IF (NOT INCLUDEDIR)
48+ set (INCLUDEDIR include)
49+ ENDIF ()
50+ IF (NOT IS_ABSOLUTE ${INCLUDEDIR} )
51+ set (INCLUDEDIR ${CMAKE_INSTALL_PREFIX} /${INCLUDEDIR} )
52+ ENDIF ()
53+ MESSAGE (STATUS "INCLUDEDIR: ${INCLUDEDIR} " )
54+
55+ IF (NOT LIBDIR)
56+ set (LIBDIR lib)
57+ ENDIF ()
58+ IF (NOT IS_ABSOLUTE ${LIBDIR} )
59+ set (LIBDIR ${CMAKE_INSTALL_PREFIX} /${LIBDIR} )
60+ ENDIF ()
61+ MESSAGE (STATUS "LIBDIR: ${LIBDIR} " )
62+
63+
64+
3765# Create cache entries if absent for environment variables
3866MACRO (UNIFY_ENVVARS_AND_CACHE VAR )
3967 IF ((NOT DEFINED ${VAR} ) AND (NOT "$ENV{${VAR} }" STREQUAL "" ))
@@ -53,6 +81,20 @@ IF(WIN32)
5381 UNIFY_ENVVARS_AND_CACHE (THREEDS_MAX_SDK_HOME )
5482ENDIF ()
5583
84+
85+ # Set INSTALL_RPATH for target
86+ MACRO (SET_INSTALL_RPATHS _target _paths )
87+ SET (${_target} _rpaths "" )
88+ FOREACH (_path ${_paths} )
89+ LIST (FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${_path} " isSystemDir)
90+ IF ("${isSystemDir} " STREQUAL "-1" )
91+ LIST (APPEND ${_target} _rpaths ${_path} )
92+ ENDIF ()
93+ ENDFOREACH ()
94+ MESSAGE (STATUS "Set INSTALL_RPATH for ${_target} : ${${_target} _rpaths}" )
95+ SET_TARGET_PROPERTIES (${_target} PROPERTIES INSTALL_RPATH "${${_target} _rpaths}" )
96+ ENDMACRO ()
97+
5698# Find Boost
5799IF (MSVC )
58100 SET (Boost_USE_STATIC_LIBS ON )
@@ -135,7 +177,7 @@ IF(UNICODE_SUPPORT)
135177 SET (ICU_LIBRARY_DIR "${ICU_LIBRARY_DIR} " CACHE FILEPATH "ICU library files" )
136178 ENDIF ()
137179
138- FIND_LIBRARY (icu NAMES icuuc icuucd PATHS /usr/lib /usr/lib64 /usr/local/lib /usr/local/lib64 ${ICU_LIBRARY_DIR} )
180+ FIND_LIBRARY (icu NAMES icuuc icuucd PATHS /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib ${ICU_LIBRARY_DIR} )
139181
140182 IF (icu)
141183 ADD_DEFINITIONS (-DHAVE_ICU )
@@ -165,10 +207,10 @@ IF(COLLADA_SUPPORT)
165207
166208 IF ("${OPENCOLLADA_LIBRARY_DIR} " STREQUAL "" )
167209 MESSAGE (STATUS "No OpenCOLLADA library directory specified" )
168- SET (OPENCOLLADA_LIBRARY_DIR "/usr/lib/opencollada" CACHE FILEPATH "OpenCOLLADA library files" )
169- ElSE ()
170- SET (OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR} " CACHE FILEPATH "OpenCOLLADA library files" )
210+ FIND_LIBRARY (OPENCOLLADA_FRAMEWORK_LIB NAMES OpenCOLLADAFramework PATHS /usr/lib64/opencollada /usr/lib/opencollada /usr/lib64 /usr/lib /usr/local/lib64 /usr/local/lib )
211+ GET_FILENAME_COMPONENT (OPENCOLLADA_LIBRARY_DIR ${OPENCOLLADA_FRAMEWORK_LIB} PATH )
171212 ENDIF ()
213+ SET (OPENCOLLADA_LIBRARY_DIR "${OPENCOLLADA_LIBRARY_DIR} " CACHE FILEPATH "OpenCOLLADA library files" )
172214
173215 SET (OPENCOLLADA_INCLUDE_DIRS "${OPENCOLLADA_INCLUDE_DIR} /COLLADABaseUtils" "${OPENCOLLADA_INCLUDE_DIR} /COLLADAStreamWriter" )
174216
@@ -361,6 +403,11 @@ else()
361403 endif ()
362404endif ()
363405
406+ # Boost >= 1.58 requires BOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE to build
407+ if (NOT Boost_VERSION LESS 105800)
408+ add_definitions (-DBOOST_OPTIONAL_USE_OLD_DEFINITION_OF_NONE )
409+ endif ()
410+
364411# IfcParse
365412file (GLOB IFCPARSE_H_FILES ../src/ifcparse/*.h )
366413file (GLOB IFCPARSE_CPP_FILES ../src/ifcparse/*.cpp )
@@ -386,7 +433,15 @@ file(GLOB IFCGEOM_H_FILES ../src/ifcgeom/*.h)
386433file (GLOB IFCGEOM_CPP_FILES ../src/ifcgeom/*.cpp )
387434
388435set (IFCGEOM_FILES ${IFCGEOM_CPP_FILES} ${IFCGEOM_H_FILES} )
389- ADD_LIBRARY (IfcGeom STATIC ${IFCGEOM_FILES} )
436+ IF (BUILD_SHARED_LIBS )
437+ ADD_LIBRARY (IfcGeom SHARED ${IFCGEOM_FILES} )
438+ SET (IFCLIBS "IfcGeom" )
439+ SET (IFCDIRS "${LIBDIR} " )
440+ ELSE ()
441+ ADD_LIBRARY (IfcGeom STATIC ${IFCGEOM_FILES} )
442+ SET (IFCLIBS "IfcParse;IfcGeom" )
443+ SET (IFCDIRS "" )
444+ ENDIF ()
390445
391446TARGET_LINK_LIBRARIES (IfcGeom IfcParse )
392447
@@ -414,18 +469,21 @@ if("${libTKernelExt}" STREQUAL ".a")
414469 if (NOT APPLE )
415470 set (LIB_RT "rt" )
416471 endif ()
417- set (OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${ CMAKE_THREAD_LIBS_INIT} ${LIB_RT} dl)
472+ set (OPENCASCADE_LIBRARIES ${OPENCASCADE_LIBRARIES} ${OPENCASCADE_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${LIB_RT} dl)
418473endif ()
419474
420- TARGET_LINK_LIBRARIES (IfcConvert IfcParse IfcGeom ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${ICU_LIBRARIES} )
475+ TARGET_LINK_LIBRARIES (IfcConvert ${IFCLIBS} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${OPENCOLLADA_LIBRARIES} ${ICU_LIBRARIES} )
476+ SET_INSTALL_RPATHS (IfcConvert "${IFCDIRS} ;${OCC_LIBRARY_DIR} ;${Boost_LIBRARY_DIRS} ;${OPENCOLLADA_LIBRARY_DIR} ;${ICU_LIBRARY_DIR} " )
477+
421478
422479# IfcGeomServer
423480file (GLOB CPP_FILES ../src/ifcgeomserver/*.cpp )
424481file (GLOB H_FILES ../src/ifcgeomserver/*.h )
425482set (SOURCE_FILES ${CPP_FILES} ${H_FILES} )
426483ADD_EXECUTABLE (IfcGeomServer ${SOURCE_FILES} )
427484
428- TARGET_LINK_LIBRARIES (IfcGeomServer IfcParse IfcGeom ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${ICU_LIBRARIES} )
485+ TARGET_LINK_LIBRARIES (IfcGeomServer ${IFCLIBS} ${OPENCASCADE_LIBRARIES} ${Boost_LIBRARIES} ${ICU_LIBRARIES} )
486+ SET_INSTALL_RPATHS (IfcGeomServer "${IFCDIRS} ;${OCC_LIBRARY_DIR} ;${Boost_LIBRARY_DIRS} ;${ICU_LIBRARY_DIR} " )
429487
430488IF (BUILD_IFCPYTHON)
431489 ADD_SUBDIRECTORY (../src/ifcwrap ifcwrap )
@@ -440,7 +498,7 @@ IF(BUILD_IFCMAX)
440498ENDIF ()
441499
442500# CMake installation targets
443- INSTALL (FILES ${IFCPARSE_H_FILES} DESTINATION include /ifcparse)
444- INSTALL (FILES ${IFCGEOM_H_FILES} DESTINATION include /ifcgeom)
445- INSTALL (TARGETS IfcConvert IfcGeomServer DESTINATION bin )
446- INSTALL (TARGETS IfcParse IfcGeom DESTINATION lib )
501+ INSTALL (FILES ${IFCPARSE_H_FILES} DESTINATION ${INCLUDEDIR} /ifcparse)
502+ INSTALL (FILES ${IFCGEOM_H_FILES} DESTINATION ${INCLUDEDIR} /ifcgeom)
503+ INSTALL (TARGETS IfcConvert IfcGeomServer DESTINATION ${BINDIR} )
504+ INSTALL (TARGETS ${IFCLIBS} DESTINATION ${LIBDIR} )
0 commit comments