diff --git a/cmake/Find3rdPartyDependencies.cmake b/cmake/Find3rdPartyDependencies.cmake index 375480cf4..57db4af26 100644 --- a/cmake/Find3rdPartyDependencies.cmake +++ b/cmake/Find3rdPartyDependencies.cmake @@ -1,78 +1,106 @@ ################################################################################################ -# this Macro find a generic dependency, handling debug suffix -# all the parameters are required ; in case of lists, use "" when calling +# Find a generic dependency, handling debug suffix +# all the parameters are required ; in case of lists or empty parameter, use "" when calling ################################################################################################ -MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES SEARCHPATHLIST DEBUGSUFFIX) +MACRO(FIND_DEPENDENCY DEP_NAME INCLUDE_FILE INCLUDE_SUBDIRS LIBRARY_NAMES SEARCH_PATH_LIST DEBUG_SUFFIX) - #MESSAGE(STATUS "Searching for 3rd party dependency DEPNAME='${DEPNAME}' INCLUDEFILE='${INCLUDEFILE}' LIBRARY_NAMES='${LIBRARY_NAMES}' SEARCHPATHLIST='${SEARCHPATHLIST}' DEBUGSUFFIX='${DEBUGSUFFIX}' ...") + #MESSAGE(STATUS "Searching for 3rd party dependency DEP_NAME='${DEP_NAME}' INCLUDE_FILE='${INCLUDE_FILE}' INCLUDE_SUBDIRS='${INCLUDE_SUBDIRS}' LIBRARY_NAMES='${LIBRARY_NAMES}' SEARCH_PATH_LIST='${SEARCH_PATH_LIST}' DEBUG_SUFFIX='${DEBUG_SUFFIX}' ...") + # Convert possibly a simple string to a real list. + SET(_INCLUDE_SUBDIRS) + LIST(APPEND _INCLUDE_SUBDIRS ${INCLUDE_SUBDIRS}) + LIST(LENGTH _INCLUDE_SUBDIRS _NB_DIRS) + #MESSAGE(STATUS "_INCLUDE_SUBDIRS=${_INCLUDE_SUBDIRS}, _NB_DIRS=${_NB_DIRS}") + + # Find include dirs SET(MY_PATH_INCLUDE ) - SET(MY_PATH_LIB ) + FOREACH(MY_PATH ${SEARCH_PATH_LIST} ) + IF(${_NB_DIRS} GREATER 0) + FOREACH(MY_SUBDIR ${_INCLUDE_SUBDIRS} ) + #MESSAGE(STATUS "MY_PATH='${MY_PATH}', MY_SUBDIR='${MY_SUBDIR}'") + IF(NOT "${MY_SUBDIR}" STREQUAL "") + SET(MY_SUBDIR "/${MY_SUBDIR}") + ENDIF(NOT "${MY_SUBDIR}" STREQUAL "") + SET(MY_PATH_INCLUDE ${MY_PATH_INCLUDE} ${MY_PATH}/include${MY_SUBDIR}) + ENDFOREACH(MY_SUBDIR ${_INCLUDE_SUBDIRS} ) + ELSE(${_NB_DIRS} GREATER 0) + SET(MY_PATH_INCLUDE ${MY_PATH_INCLUDE} ${MY_PATH}/include) + ENDIF(${_NB_DIRS} GREATER 0) + ENDFOREACH(MY_PATH ${SEARCH_PATH_LIST} ) - FOREACH(MYPATH ${SEARCHPATHLIST} ) - SET(MY_PATH_INCLUDE ${MY_PATH_INCLUDE} ${MYPATH}/include) - SET(MY_PATH_LIB ${MY_PATH_LIB} ${MYPATH}/lib) - ENDFOREACH(MYPATH ${SEARCHPATHLIST} ) - - FIND_PATH("${DEPNAME}_INCLUDE_DIR" ${INCLUDEFILE} + #MESSAGE(STATUS "MY_PATH_INCLUDE='${MY_PATH_INCLUDE}'") + FIND_PATH("${DEP_NAME}_INCLUDE_DIR" ${INCLUDE_FILE} ${MY_PATH_INCLUDE} NO_DEFAULT_PATH ) - MARK_AS_ADVANCED("${DEPNAME}_INCLUDE_DIR") - #MESSAGE(" ${DEPNAME}_INCLUDE_DIR = '${${DEPNAME}_INCLUDE_DIR}'") + MARK_AS_ADVANCED("${DEP_NAME}_INCLUDE_DIR") + #MESSAGE(" ${DEP_NAME}_INCLUDE_DIR = '${${DEP_NAME}_INCLUDE_DIR}'") + + # Find library files + SET(MY_PATH_LIB ) + FOREACH(MY_PATH ${SEARCH_PATH_LIST} ) + SET(MY_PATH_LIB ${MY_PATH_LIB} ${MY_PATH}/lib) + ENDFOREACH(MY_PATH ${SEARCH_PATH_LIST} ) - FIND_LIBRARY("${DEPNAME}_LIBRARY" + FIND_LIBRARY("${DEP_NAME}_LIBRARY" NAMES ${LIBRARY_NAMES} PATHS ${MY_PATH_LIB} NO_DEFAULT_PATH ) - MARK_AS_ADVANCED("${DEPNAME}_LIBRARY") - #MESSAGE(" ${DEPNAME}_LIBRARY = '${${DEPNAME}_LIBRARY}'") + MARK_AS_ADVANCED("${DEP_NAME}_LIBRARY") + #MESSAGE(" ${DEP_NAME}_LIBRARY = '${${DEP_NAME}_LIBRARY}'") - SET(${DEPNAME}_FOUND "NO" ) - IF(${DEPNAME}_INCLUDE_DIR AND ${DEPNAME}_LIBRARY) - SET( ${DEPNAME}_FOUND "YES" ) - ENDIF(${DEPNAME}_INCLUDE_DIR AND ${DEPNAME}_LIBRARY) + # Whatever happened, done. + SET(${DEP_NAME}_FOUND "NO" ) + IF(${DEP_NAME}_INCLUDE_DIR AND ${DEP_NAME}_LIBRARY) + SET( ${DEP_NAME}_FOUND "YES" ) + ENDIF(${DEP_NAME}_INCLUDE_DIR AND ${DEP_NAME}_LIBRARY) -ENDMACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES SEARCHPATHLIST DEBUGSUFFIX) +ENDMACRO(FIND_DEPENDENCY DEP_NAME INCLUDE_FILE INCLUDE_SUBDIRS LIBRARY_NAMES SEARCH_PATH_LIST DEBUG_SUFFIX) ################################################################################################ # this Macro is tailored to Mike dependencies ################################################################################################ -MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN) - FIND_DEPENDENCY(JPEG jpeglib.h jpeg_s ${OSG_3RDPARTY_BIN} "") - - FIND_DEPENDENCY(OPENAL al/al.h openal32 ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(ALUT al/alut.h alut ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(ENET enet/enet.h enet ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(SDL sdl/sdl.h sdl ${OSG_3RDPARTY_BIN} "") - IF(SDL_FOUND) - SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY} CACHE FILEPATH "") - ENDIF(SDL_FOUND) +MACRO(SEARCH_3RDPARTY ROOT_DIR) + + FIND_DEPENDENCY(JPEG jpeglib.h "" jpeg_s ${ROOT_DIR} "") + + FIND_DEPENDENCY(OPENAL AL/al.h "" openal32 ${ROOT_DIR} "") + + FIND_DEPENDENCY(ENET enet/enet.h "" enet ${ROOT_DIR} "") + + FIND_DEPENDENCY(SDL sdl.h "SDL;SDL2" sdl "${ROOT_DIR}" "") + FIND_DEPENDENCY(SDLMAIN sdl_main.h "SDL;SDL2" sdlmain "${ROOT_DIR}" "") + IF(SDL_FOUND) # Dirty hack to make FindPackage(SDL) work later. + SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY} CACHE FILEPATH "") + ENDIF(SDL_FOUND) + + FIND_DEPENDENCY(PLIB plib/sg.h "" sg ${ROOT_DIR} "") + FIND_DEPENDENCY(PLIB_SSG plib/ssg.h "" ssg ${ROOT_DIR} "") + FIND_DEPENDENCY(PLIB_SG plib/sg.h "" sg ${ROOT_DIR} "") + FIND_DEPENDENCY(PLIB_SL plib/sl.h "" sl ${ROOT_DIR} "") + FIND_DEPENDENCY(PLIB_SSGAUX plib/ssgaux.h "" ssgaux ${ROOT_DIR} "") + FIND_DEPENDENCY(PLIB_UL plib/ul.h "" ul ${ROOT_DIR} "") + FIND_DEPENDENCY(PLIB_JS plib/js.h "" js ${ROOT_DIR} "") + + FIND_DEPENDENCY(ZLIB zlib.h "" "z;zlib;zlib1" ${ROOT_DIR} "D") + + IF(ZLIB_FOUND) + + FIND_DEPENDENCY(PNG png.h "" "libpng;libpng13;libpng14;libpng15;libpng16" ${ROOT_DIR} "D") - FIND_DEPENDENCY(SDLMAIN sdl/sdl_main.h sdlmain ${OSG_3RDPARTY_BIN} "") - - FIND_DEPENDENCY(PLIB plib/sg.h sg ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(PLIB_SSG plib/ssg.h ssg ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(PLIB_SG plib/sg.h sg ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(PLIB_SL plib/sl.h sl ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(PLIB_SSGAUX plib/ssgaux.h ssgaux ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(PLIB_UL plib/ul.h ul ${OSG_3RDPARTY_BIN} "") - FIND_DEPENDENCY(PLIB_JS plib/js.h js ${OSG_3RDPARTY_BIN} "") - #FIND_DEPENDENCY(GIFLIB gif_lib.h "ungif;libungif" ${OSG_3RDPARTY_BIN} "D") - FIND_DEPENDENCY(ZLIB zlib.h "z;zlib;zlib1" ${OSG_3RDPARTY_BIN} "D") - IF(ZLIB_FOUND) - FIND_DEPENDENCY(PNG png.h "libpng;libpng13" ${OSG_3RDPARTY_BIN} "D") - IF(PNG_FOUND) - #force subsequent FindPNG stuff not to search for other variables ... kind of a hack - SET(PNG_PNG_INCLUDE_DIR ${PNG_INCLUDE_DIR} CACHE FILEPATH "") - MARK_AS_ADVANCED(PNG_PNG_INCLUDE_DIR) - ENDIF(PNG_FOUND) - ENDIF(ZLIB_FOUND) -ENDMACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN) + IF(PNG_FOUND) + #force subsequent FindPNG stuff not to search for other variables ... kind of a hack + SET(PNG_PNG_INCLUDE_DIR ${PNG_INCLUDE_DIR} CACHE FILEPATH "") + MARK_AS_ADVANCED(PNG_PNG_INCLUDE_DIR) + ENDIF(PNG_FOUND) + + ENDIF(ZLIB_FOUND) + +ENDMACRO(SEARCH_3RDPARTY ROOT_DIR) ################################################################################################ # this is code for handling optional 3DPARTY usage (mainly under Windows) @@ -82,6 +110,7 @@ OPTION(SDEXT_USE_CUSTOM_3DPARTY "Set to ON to use 3rdParty prebuilt API located MARK_AS_ADVANCED(SDEXT_USE_CUSTOM_3DPARTY) IF(SDEXT_USE_CUSTOM_3DPARTY) + GET_FILENAME_COMPONENT(PARENT_DIR ${PROJECT_SOURCE_DIR} PATH) SET(SDEXT_CUSTOM_3DPARTY_DIR "${PARENT_DIR}/3rdparty" CACHE PATH "Location of 3rdParty dependencies") diff --git a/src/libs/raceengine/CMakeLists.txt b/src/libs/raceengine/CMakeLists.txt index 0ed7d8e1b..2a7dcda47 100644 --- a/src/libs/raceengine/CMakeLists.txt +++ b/src/libs/raceengine/CMakeLists.txt @@ -20,6 +20,7 @@ ADD_INTERFACE_INCLUDEDIR() ADD_SDLIB_INCLUDEDIR(math portability robottools tgf tgfclient tgfdata networking) +ADD_PLIB_INCLUDEDIR() ADD_SDL_INCLUDEDIR() IF(WIN32) diff --git a/src/libs/robottools/CMakeLists.txt b/src/libs/robottools/CMakeLists.txt index 9896003d2..a7e71af55 100644 --- a/src/libs/robottools/CMakeLists.txt +++ b/src/libs/robottools/CMakeLists.txt @@ -4,7 +4,8 @@ INCLUDE(../../../cmake/macros.cmake) ADD_INTERFACE_INCLUDEDIR() ADD_SDLIB_INCLUDEDIR(portability tgf math) -INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} ) +ADD_SDL_INCLUDEDIR() +ADD_PLIB_INCLUDEDIR() SET(ROBOTTOOLS_SOURCES rtteammanager.cpp rttelem.cpp rttimeanalysis.cpp rttrack.cpp rtutil.cpp robottools.h teammanager.h timeanalysis.h) diff --git a/src/tools/menuview/CMakeLists.txt b/src/tools/menuview/CMakeLists.txt index 01211b2a9..ce219b2df 100644 --- a/src/tools/menuview/CMakeLists.txt +++ b/src/tools/menuview/CMakeLists.txt @@ -9,6 +9,7 @@ SET(_SOURCES main.cpp previewmenu.cpp) ADD_INTERFACE_INCLUDEDIR() ADD_SDLIB_INCLUDEDIR(robottools tgf tgfclient math portability) ADD_SDL_INCLUDEDIR() +ADD_PLIB_INCLUDEDIR() #disable developer warning IF(COMMAND CMAKE_POLICY) diff --git a/src/tools/trackgen/CMakeLists.txt b/src/tools/trackgen/CMakeLists.txt index 60a092bce..6b88c71f0 100644 --- a/src/tools/trackgen/CMakeLists.txt +++ b/src/tools/trackgen/CMakeLists.txt @@ -11,6 +11,7 @@ SET(_SOURCES ac3d.cpp easymesh.cpp elevation.cpp main.cpp ADD_INTERFACE_INCLUDEDIR() ADD_SDLIB_INCLUDEDIR(robottools tgf tgfclient math portability) ADD_SDL_INCLUDEDIR() +ADD_PLIB_INCLUDEDIR() #disable developer warning IF (COMMAND CMAKE_POLICY)