INCLUDE(UtilityMacros) #--------------------------------------------------- # ADD_OSG_LIB ( SUBDIR ) # collects source files from given subdir and generates a shared library from them # additional parameters specify symbols, link libraries and omited files # begin these with keyword DEFINE LINK or EXCLUDE # e.g. ADD_OSG_LIB( osgDB DEFINE OSGDB_EXPORT LINK osg EXCLUDE osg_mac.cxx ) # if OSG_PROJECT_LABEL_PREFIX is defined the project label is augmented with prefix #--------------------------------------------------- MACRO(ADD_OSG_LIB SUBDIR EXPORTDEF) #MESSAGE(STATUS "=== ADD_OSG_LIB ${SUBDIR}") MACRO_MESSAGE("---source dir -->${OPENSCENEGRAPH_DIR}/src/${SUBDIR}<---") SET(TARGET_NAME ${SUBDIR}) FILE(GLOB SRC_FILES ${OPENSCENEGRAPH_DIR}/src/${SUBDIR}/*.cpp) #FILE(GLOB H_FILES ${OPENSCENEGRAPH_DIR}/include/${SUBDIR}/*) GET_HEADERS_EXTENSIONLESS("${OPENSCENEGRAPH_DIR}/include/${SUBDIR}" "*" H_FILES) #patch luigi osgwrapper FILE(GLOB SRC_FILES_SUB ${OPENSCENEGRAPH_DIR}/src/${SUBDIR}/*/*.cpp) #patch luigi osgwrapper SET(SRC_FILES ${SRC_FILES} ${SRC_FILES_SUB}) #-- extract link files, defines, exclude files form additional arguments SET(LISTNAME "TEMP") SET(DEFSTR "") #--- parse remaining args FOREACH(ARG ${ARGN}) #MESSAGE(STATUS "+ [${ARG}]") # if we find our keywords set the active list to given keyname STRING(COMPARE EQUAL "${ARG}" "LINK" IS_LINK) STRING(COMPARE EQUAL "${ARG}" "DEFINE" IS_DEFINE) STRING(COMPARE EQUAL "${ARG}" "EXCLUDE" IS_EXCLUDE) #MESSAGE(STATUS "STRSTUFF L ${IS_LINK} D ${IS_DEFINE} E ${IS_EXCLUDE}") #--- check for label change SET(LIST_CHANGED ${IS_LINK} OR ${IS_DEFINE} OR ${IS_EXCLUDE}) IF(${LIST_CHANGED}) SET(${LISTNAME} ${CURRLIST}) # in this case change the current list #MESSAGE(STATUS "STORED LIST [${LISTNAME}] = (${CURRLIST})") SET(LISTNAME ${ARG}) # new list name REMOVE(CURRLIST ${CURRLIST} ) # clear current list ELSE(${LIST_CHANGED}) SET(CURRLIST ${CURRLIST} ${ARG}) # otherwise just add current entry to current list ENDIF(${LIST_CHANGED}) ENDFOREACH(ARG) SET(${LISTNAME} ${CURRLIST}) # copy current list to active list #MESSAGE(STATUS "STORED LIST [${LISTNAME}] = (${CURRLIST})") REMOVE(CURRLIST ${CURRLIST} ) # clear current list #MESSAGE(STATUS "AFTER: EXC (${EXCLUDE}) DEF (${DEFINE}) LINK (${LINK})") #--- exclude files from exclude list FOREACH(EXF ${EXCLUDE}) REMOVE(SRC_FILES ${OPENSCENEGRAPH_DIR}/src/${SUBDIR}/${EXF}) ENDFOREACH(EXF) SOURCE_GROUP("Header Files" FILES ${H_FILES}) SET_SOURCE_FILES_PROPERTIES(${H_FILES} PROPERTIES HEADER_FILE_ONLY ON) #--- add symbols, first assemble string with multiple /D "symbol" entries FOREACH(DEF ${DEFINE}) IF(WIN32) SET(DEFSTR "${DEFSTR} /D \"${DEF}\"") #MESSAGE(STATUS "add symbol : " ${DEF}) ENDIF(WIN32) IF(UNIX) SET(DEFSTR "${DEFSTR} -D\"${DEF}\"") #MESSAGE(STATUS "add symbol : " ${DEF}) ENDIF(UNIX) ENDFOREACH(DEF) IF(NOT DEFSTR STREQUAL "") # then set defines SET_SOURCE_FILES_PROPERTIES(${SRC_FILES} PROPERTIES COMPILE_FLAGS ${DEFSTR}) #MESSAGE(STATUS "********* ADD COMPILE FLAGS ${DEFSTR} **********") ENDIF(NOT DEFSTR STREQUAL "") #--- add library with given name ADD_LIBRARY(${TARGET_NAME} SHARED ${SRC_FILES} ${H_FILES}) SET_TARGET_PROPERTIES(${TARGET_NAME} PROPERTIES DEFINE_SYMBOL "${EXPORTDEF}" PROJECT_LABEL "${OSG_PROJECT_LABEL_PREFIX} ${TARGET_NAME}") TARGET_LINK_LIBRARIES(${TARGET_NAME} ${LINK}) #speed#TARGET_LOCATIONS_ACCUM(${TARGET_NAME}) REMOVE(DEFINE ${DEFINE}) REMOVE(LINK ${LINK}) REMOVE(EXCLUDE ${EXCLUDE}) #old form# INSTALL_TARGETS(/lib ${TARGET_NAME} ) INSTALL(TARGETS ${TARGET_NAME} ARCHIVE DESTINATION lib LIBRARY DESTINATION lib RUNTIME DESTINATION bin ) INSTALL(FILES ${H_FILES} DESTINATION include/${TARGET_NAME} ) ENDMACRO(ADD_OSG_LIB) MACRO(ADD_OSG_APPLICATION SUBDIR) #PROJECT("application_${SUBDIR}") SET(MYTARGET application_${SUBDIR}) FILE(GLOB APPLICATION_SRC ${OPENSCENEGRAPH_APPLICATION_DIR}/${SUBDIR}/*.cpp) FILE(GLOB APPLICATION_H ${OPENSCENEGRAPH_APPLICATION_DIR}/${SUBDIR}/*.h) IF(NOT APPLICATION_SRC) MESSAGE("application_${SUBDIR}") ELSE(NOT APPLICATION_SRC) ADD_EXECUTABLE(${MYTARGET} ${APPLICATION_SRC} ${APPLICATION_H}) ENDIF(NOT APPLICATION_SRC) SET_TARGET_PROPERTIES(${MYTARGET} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) SET_TARGET_PROPERTIES(${MYTARGET} PROPERTIES OUTPUT_NAME ${SUBDIR}) #IF(UNIX) # MESSAGE("so no qui!!!!!!!!!!") FOREACH(LINKLIB osg osgDB osgUtil osgViewer osgText osgGA OpenThreads ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) IF(${LINKLIB} MATCHES "osg") #MESSAGE("TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") TARGET_LINK_LIBRARIES(${MYTARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ELSE(${LINKLIB} MATCHES "osg") IF(${LINKLIB} MATCHES "Producer") #MESSAGE("TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") TARGET_LINK_LIBRARIES(${MYTARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ELSE(${LINKLIB} MATCHES "Producer") IF(${LINKLIB} MATCHES "OpenThreads") #MESSAGE("TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") IF(MSVC) #change in name from standar VS projects TARGET_LINK_LIBRARIES(${MYTARGET} optimized "${LINKLIB}Win32" debug "${LINKLIB}Win32d" ) TARGET_LINK_LIBRARIES(${MYTARGET} optimized "${LINKLIB}" debug "${LINKLIB}d" ) ELSE(MSVC) TARGET_LINK_LIBRARIES(${MYTARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ENDIF(MSVC) ELSE(${LINKLIB} MATCHES "OpenThreads") #MESSAGE("EXTERNAL LIB:TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB} ) ENDIF(${LINKLIB} MATCHES "OpenThreads") ENDIF(${LINKLIB} MATCHES "Producer") ENDIF(${LINKLIB} MATCHES "osg") ENDFOREACH(LINKLIB) #ELSE(UNIX) # TARGET_LINK_LIBRARIES(${MYTARGET} osg osgDB osgUtil osgProducer ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) #ENDIF(UNIX) SET_TARGET_PROPERTIES(${MYTARGET} PROPERTIES PROJECT_LABEL "application ${SUBDIR}") #speed#TARGET_LOCATIONS_ACCUM(${MYTARGET}) #MESSAGE(STATUS "adding osg application ${MYTARGET}") ##INSTALL_TARGETS(/bin ${MYTARGET} ) INSTALL(TARGETS ${MYTARGET} RUNTIME DESTINATION bin ) ENDMACRO(ADD_OSG_APPLICATION) MACRO(ADD_OSG_EXAMPLE SUBDIR) #PROJECT("example_${SUBDIR}") SET(MYTARGET example_${SUBDIR}) FILE(GLOB EXAMPLE_SRC ${OPENSCENEGRAPH_EXAMPLE_DIR}/${SUBDIR}/*.cpp) FILE(GLOB EXAMPLE_H ${OPENSCENEGRAPH_EXAMPLE_DIR}/${SUBDIR}/*.h) IF(NOT EXAMPLE_SRC) MESSAGE("example_${SUBDIR}") ELSE(NOT EXAMPLE_SRC) ADD_EXECUTABLE(${MYTARGET} ${EXAMPLE_SRC} ${EXAMPLE_H}) ENDIF(NOT EXAMPLE_SRC) SET_TARGET_PROPERTIES(${MYTARGET} PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) SET_TARGET_PROPERTIES(${MYTARGET} PROPERTIES OUTPUT_NAME ${SUBDIR}) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PROJECT_LABEL "Examples ${MYTARGET}") #IF(UNIX) # MESSAGE("so no qui!!!!!!!!!!") FOREACH(LINKLIB osg osgDB osgUtil osgViewer osgText osgGA OpenThreads ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) IF(${LINKLIB} MATCHES "osg") #MESSAGE("TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") TARGET_LINK_LIBRARIES(${MYTARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ELSE(${LINKLIB} MATCHES "osg") IF(${LINKLIB} MATCHES "Producer") #MESSAGE("TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") TARGET_LINK_LIBRARIES(${MYTARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ELSE(${LINKLIB} MATCHES "Producer") IF(${LINKLIB} MATCHES "OpenThreads") #MESSAGE("TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") IF(MSVC) #change in name from standar VS projects TARGET_LINK_LIBRARIES(${MYTARGET} optimized "${LINKLIB}Win32" debug "${LINKLIB}Win32d" ) TARGET_LINK_LIBRARIES(${MYTARGET} optimized "${LINKLIB}" debug "${LINKLIB}d" ) ELSE(MSVC) TARGET_LINK_LIBRARIES(${MYTARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ENDIF(MSVC) ELSE(${LINKLIB} MATCHES "OpenThreads") #MESSAGE("EXTERNAL LIB:TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB}") TARGET_LINK_LIBRARIES(${MYTARGET} ${LINKLIB} ) ENDIF(${LINKLIB} MATCHES "OpenThreads") ENDIF(${LINKLIB} MATCHES "Producer") ENDIF(${LINKLIB} MATCHES "osg") ENDFOREACH(LINKLIB) #ELSE(UNIX) # TARGET_LINK_LIBRARIES(${MYTARGET} osg osgDB osgUtil osgProducer ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) #ENDIF(UNIX) SET_TARGET_PROPERTIES(${MYTARGET} PROPERTIES PROJECT_LABEL "example ${SUBDIR}") #speed#TARGET_LOCATIONS_ACCUM(${MYTARGET}) #MESSAGE(STATUS "adding osg example ${MYTARGET}") ##INSTALL_TARGETS(/bin ${MYTARGET} ) IF(WIN32) INSTALL(TARGETS ${MYTARGET} RUNTIME DESTINATION bin ) ELSE(WIN32) INSTALL(TARGETS ${MYTARGET} RUNTIME DESTINATION share/OpenSceneGraph/bin ) ENDIF(WIN32) ENDMACRO(ADD_OSG_EXAMPLE) #--------------------------------------------------- # MACRO GET_TARGETNAME SUBDIR RESULT # generates a plugin target name for given SUBDIR and sets RESULT accordingly # e.g. GET_TARGETNAME(osg OSG_TARGET) -> OSG_TARGET is osgdb_osg MACRO(GET_TARGETNAME SUBDIR RESULT) SET(${RESULT} osgdb_${SUBDIR}) ENDMACRO(GET_TARGETNAME) #--------------------------------------------------- # MACRO ADD_OSG_PLUGIN SUBDIR [additional libs to link to] # adds a plugin project for given SUBDIR, links libraries given as additional arguments # e.g. ADD_OSG_PLUGIN(osg osgSim) -> generates is osgdb_osg and links with osgSim MACRO(ADD_OSG_PLUGIN SUBDIR) GET_TARGETNAME(${SUBDIR} TARGET) # MESSAGE("globbing in -->${PROJECT_SOURCE_DIR}/${SUBDIR}<--") FILE(GLOB PLUGIN_SRC ${PROJECT_SOURCE_DIR}/${SUBDIR}/*.cpp) FILE(GLOB PLUGIN_H ${PROJECT_SOURCE_DIR}/${SUBDIR}/*.h) #ADD_LIBRARY(${TARGET} SHARED ${PLUGIN_SRC} ${PLUGIN_H}) ADD_LIBRARY(${TARGET} MODULE ${PLUGIN_SRC} ${PLUGIN_H}) IF(NOT MSVC) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES DEBUG_POSTFIX "") ENDIF(NOT MSVC) SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PROJECT_LABEL "Plugins ${TARGET}") FOREACH(LINKLIB osg osgDB osgUtil ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) IF(${LINKLIB} MATCHES "osg") #MESSAGE("TARGET_LINK_LIBRARIES(${TARGET} optimized ${LINKLIB}") TARGET_LINK_LIBRARIES(${TARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ELSE(${LINKLIB} MATCHES "osg") TARGET_LINK_LIBRARIES(${TARGET} ${LINKLIB}) ENDIF(${LINKLIB} MATCHES "osg") ENDFOREACH(LINKLIB) #ELSE(UNIX) # SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PROJECT_LABEL "osgPlugins ${SUBDIR}") # TARGET_LINK_LIBRARIES(${TARGET} osg osgDB osgUtil ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) #ENDIF(UNIX) #speed#TARGET_LOCATIONS_ACCUM(${TARGET}) #old_form#INSTALL_TARGETS(/lib ${TARGET} ) IF(WIN32) INSTALL(TARGETS ${TARGET} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION bin ) ELSE(WIN32) INSTALL(TARGETS ${TARGET} RUNTIME DESTINATION bin ARCHIVE DESTINATION lib${LIB_POSTFIX}/osgPlugins LIBRARY DESTINATION lib${LIB_POSTFIX}/osgPlugins ) ENDIF(WIN32) ENDMACRO(ADD_OSG_PLUGIN) MACRO(ADD_OSG_PLUGIN_EXTERN SOURCE_DIR _TARGET) FILE(GLOB PLUGIN_SRC ${SOURCE_DIR}/*.cpp) FILE(GLOB PLUGIN_H ${SOURCE_DIR}/*.h) #ADD_LIBRARY(${TARGET} SHARED ${PLUGIN_SRC} ${PLUGIN_H}) ADD_LIBRARY(${_TARGET} MODULE ${PLUGIN_SRC} ${PLUGIN_H}) IF(UNIX) SET_TARGET_PROPERTIES(${_TARGET} PROPERTIES DEBUG_POSTFIX "") ENDIF(UNIX) FOREACH(LINKLIB osg osgDB osgUtil ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) IF(${LINKLIB} MATCHES "osg") #MESSAGE("TARGET_LINK_LIBRARIES(${TARGET} optimized ${LINKLIB}") TARGET_LINK_LIBRARIES(${_TARGET} optimized ${LINKLIB} debug "${LINKLIB}${CMAKE_DEBUG_POSTFIX}") ELSE(${LINKLIB} MATCHES "osg") TARGET_LINK_LIBRARIES(${_TARGET} ${LINKLIB}) ENDIF(${LINKLIB} MATCHES "osg") ENDFOREACH(LINKLIB) #ELSE(UNIX) # SET_TARGET_PROPERTIES(${TARGET} PROPERTIES PROJECT_LABEL "osgPlugin ${SUBDIR}") # TARGET_LINK_LIBRARIES(${TARGET} osg osgDB osgUtil ${ARGV1} ${ARGV2} ${ARGV3} ${ARGV4} ${ARGV5}) #ENDIF(UNIX) #speed#TARGET_LOCATIONS_ACCUM(${_TARGET}) ##INSTALL_TARGETS(/lib ${_TARGET} ) INSTALL(TARGETS ${_TARGET} RUNTIME DESTINATION bin ) ENDMACRO(ADD_OSG_PLUGIN_EXTERN)