diff --git a/FindMSVCRedist.cmake b/FindMSVCRedist.cmake new file mode 100644 index 0000000000000000000000000000000000000000..099defc8f1372fb85ee33fdc9466a67eb1f132bf --- /dev/null +++ b/FindMSVCRedist.cmake @@ -0,0 +1,41 @@ +IF (MSVC) + if (MSVC80) + set(VCVERS 8) + endif() + if (MSVC90) + set(VCVERS 9) + endif() + + IF(CMAKE_CL_64) + #IF(MSVC_VERSION GREATER 1599) + # VS 10 and later: + SET(CMAKE_MSVC_ARCH x64) + #ELSE() + # # VS 9 and earlier: + # SET(CMAKE_MSVC_ARCH amd64) + #ENDIF() + ELSE(CMAKE_CL_64) + SET(CMAKE_MSVC_ARCH x86) + ENDIF(CMAKE_CL_64) + + set(SDKVERS "2.0") + if(${VCVERS} EQUAL 8) + set(SDKVERS "2.0") + endif() + if(${VCVERS} EQUAL 9) + set(SDKVERS "3.5") + endif() + IF(MSVC${VCVERS}0) + FIND_PROGRAM(MSVC_REDIST NAMES +vcredist_${CMAKE_MSVC_ARCH}/vcredist_${CMAKE_MSVC_ARCH}.exe + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VCExpress\\${VCVERS}.0;InstallDir]/../../SDK/v${SDKVERS}/BootStrapper/Packages/" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${VCVERS}.0;InstallDir]/../../SDK/v${SDKVERS}/BootStrapper/Packages/" + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\VisualStudio\\${VCVERS}.0;InstallDir]/../../SDK/v${SDKVERS}/BootStrapper/Packages/" + ) + GET_FILENAME_COMPONENT(vcredist_name "${MSVC_REDIST}" NAME) + INSTALL(PROGRAMS ${MSVC_REDIST} COMPONENT msvc_redist DESTINATION bin) + SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\bin\\\\${vcredist_name}\\\"'") + message(STATUS "MSVC_REDIST: ${MSVC_REDIST}") + ENDIF(MSVC${VCVERS}0) +ENDIF () \ No newline at end of file diff --git a/FindOpenSG.cmake b/FindOpenSG.cmake new file mode 100644 index 0000000000000000000000000000000000000000..7ad3d2b6b34cfe2ce1528269d2505f74c5569867 --- /dev/null +++ b/FindOpenSG.cmake @@ -0,0 +1,328 @@ +# - Find OpenSG 1.8 libraries +# Find the specified OpenSG 1.8 libraries and header files. Slightly modified +# from the version for 2.0, see # 1.8 - comments +# +# Since OpenSG consists of a number of libraries you need to specify which +# of those you want to use. To do so, pass a list of their names after +# the COMPONENTS argument to FIND_PACKAGE. A typical call looks like this: +# FIND_PACKAGE(OpenSG REQUIRED COMPONENTS OSGBase OSGSystem OSGDrawable) +# +# This module specifies the following variables: +# OpenSG_INCLUDE_DIRS +# OpenSG_LIBRARIES +# OpenSG_LIBRARY_DIRS +# +# For each component COMP the capitalized name (e.g. OSGBASE, OSGSYSTEM): +# OpenSG_${COMP}_LIBRARY +# OpenSG_${COMP}_LIBRARY_RELEASE +# OpenSG_${COMP}_LIBRARY_DEBUG +# +# You can control where this module attempts to locate libraries and headers: +# you can use the following input variables: +# OPENSG_ROOT root of an installed OpenSG with include/OpenSG and lib below it +# OPENSG_INCLUDE_DIR header directory +# OPENSG_LIBRARY_DIR library directory +# OR +# OPENSG_INCLUDE_SEARCH_DIR +# OPENSG_LIBRARY_SEARCH_DIR + +# This macro sets the include path and libraries to link to. +# On Windows this also sets some preprocessor definitions and disables some warnings. +MACRO(USE_OPENSG targetName) + IF (MSVC) + ADD_DEFINITIONS( + -DOSG_BUILD_DLL + -DOSG_HAVE_CONFIGURED_H_ + -DOSG_WITH_GIF + -DOSG_WITH_TIF + -DOSG_WITH_JPG + ) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4231 /wd4275") + ENDIF (MSVC) + TARGET_LINK_LIBRARIES( ${targetName} ${OpenSG_LIBRARIES} ) + INCLUDE_DIRECTORIES( ${OpenSG_INCLUDE_DIRS} ) +ENDMACRO() + +SET(__OpenSG_IN_CACHE TRUE) +IF(OpenSG_INCLUDE_DIR) + FOREACH(COMPONENT ${OpenSG_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} COMPONENT) + IF(NOT OpenSG_${COMPONENT}_FOUND) + SET(__OpenSG_IN_CACHE FALSE) + ENDIF(NOT OpenSG_${COMPONENT}_FOUND) + ENDFOREACH(COMPONENT) +ELSE(OpenSG_INCLUDE_DIR) + SET(__OpenSG_IN_CACHE FALSE) +ENDIF(OpenSG_INCLUDE_DIR) + + +# The reason that we failed to find OpenSG. This will be set to a +# user-friendly message when we fail to find some necessary piece of +# OpenSG. +set(OpenSG_ERROR_REASON) + +############################################ +# +# Check the existence of the libraries. +# +############################################ +# This macro is directly taken from FindBoost.cmake that comes with the cmake +# distribution. It is NOT my work, only minor modifications have been made to +# remove references to boost. +######################################################################### + +MACRO(__OpenSG_ADJUST_LIB_VARS basename) + IF(OpenSG_INCLUDE_DIR) + IF(OpenSG_${basename}_LIBRARY_DEBUG AND OpenSG_${basename}_LIBRARY_RELEASE) + # if the generator supports configuration types then set + # optimized and debug libraries, or if the CMAKE_BUILD_TYPE has a value + IF (CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + SET(OpenSG_${basename}_LIBRARY optimized ${OpenSG_${basename}_LIBRARY_RELEASE} debug ${OpenSG_${basename}_LIBRARY_DEBUG}) + ELSE(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + # if there are no configuration types and CMAKE_BUILD_TYPE has no value + # then just use the release libraries + SET(OpenSG_${basename}_LIBRARY ${OpenSG_${basename}_LIBRARY_RELEASE} ) + ENDIF(CMAKE_CONFIGURATION_TYPES OR CMAKE_BUILD_TYPE) + + SET(OpenSG_${basename}_LIBRARIES optimized ${OpenSG_${basename}_LIBRARY_RELEASE} debug ${OpenSG_${basename}_LIBRARY_DEBUG}) + ENDIF(OpenSG_${basename}_LIBRARY_DEBUG AND OpenSG_${basename}_LIBRARY_RELEASE) + + # if only the release version was found, set the debug variable also to the release version + IF(OpenSG_${basename}_LIBRARY_RELEASE AND NOT OpenSG_${basename}_LIBRARY_DEBUG) + SET(OpenSG_${basename}_LIBRARY_DEBUG ${OpenSG_${basename}_LIBRARY_RELEASE}) + SET(OpenSG_${basename}_LIBRARY ${OpenSG_${basename}_LIBRARY_RELEASE}) + SET(OpenSG_${basename}_LIBRARIES ${OpenSG_${basename}_LIBRARY_RELEASE}) + ENDIF(OpenSG_${basename}_LIBRARY_RELEASE AND NOT OpenSG_${basename}_LIBRARY_DEBUG) + + # if only the debug version was found, set the release variable also to the debug version + IF(OpenSG_${basename}_LIBRARY_DEBUG AND NOT OpenSG_${basename}_LIBRARY_RELEASE) + SET(OpenSG_${basename}_LIBRARY_RELEASE ${OpenSG_${basename}_LIBRARY_DEBUG}) + SET(OpenSG_${basename}_LIBRARY ${OpenSG_${basename}_LIBRARY_DEBUG}) + SET(OpenSG_${basename}_LIBRARIES ${OpenSG_${basename}_LIBRARY_DEBUG}) + ENDIF(OpenSG_${basename}_LIBRARY_DEBUG AND NOT OpenSG_${basename}_LIBRARY_RELEASE) + + IF(OpenSG_${basename}_LIBRARY) + SET(OpenSG_${basename}_LIBRARY ${OpenSG_${basename}_LIBRARY} CACHE FILEPATH "The OpenSG ${basename} library") + GET_FILENAME_COMPONENT(OpenSG_LIBRARY_DIRS "${OpenSG_${basename}_LIBRARY}" PATH) + SET(OpenSG_LIBRARY_DIRS ${OpenSG_LIBRARY_DIRS} CACHE FILEPATH "OpenSG library directory") + SET(OpenSG_${basename}_FOUND ON CACHE INTERNAL "Whether the OpenSG ${basename} library found") + ENDIF(OpenSG_${basename}_LIBRARY) + + ENDIF(OpenSG_INCLUDE_DIR) + + # Make variables changeble to the advanced user + MARK_AS_ADVANCED( + OpenSG_${basename}_LIBRARY + OpenSG_${basename}_LIBRARY_RELEASE + OpenSG_${basename}_LIBRARY_DEBUG + ) +ENDMACRO(__OpenSG_ADJUST_LIB_VARS) + +#------------------------------------------------------------------------------- + + +IF(__OpenSG_IN_CACHE) + # values are already in the cache + + SET(OpenSG_FOUND TRUE) + FOREACH(COMPONENT ${OpenSG_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} COMPONENT) + __OpenSG_ADJUST_LIB_VARS(${COMPONENT}) + SET(OpenSG_LIBRARIES ${OpenSG_LIBRARIES} ${OpenSG_${COMPONENT}_LIBRARY}) + ENDFOREACH(COMPONENT) + + SET(OpenSG_INCLUDE_DIRS "${OpenSG_INCLUDE_DIR}" "${OpenSG_INCLUDE_DIR}/OpenSG") + +ELSE(__OpenSG_IN_CACHE) + # need to search for libs + + # Visual Studio x32 + if (VS32) + # Visual Studio x32 + SET( __OpenSG_INCLUDE_SEARCH_DIRS + $ENV{OPENSG_ROOT}/include + ${OPENSG_ROOT}/include + ${LIBRARIES_DIR}/opensg/include + ${CMAKE_SOURCE_DIR}/../OpenSG/include ) + SET( __OpenSG_LIBRARIES_SEARCH_DIRS + $ENV{OPENSG_ROOT}/lib + ${OPENSG_ROOT}/lib + ${LIBRARIES_DIR}/opensg/lib + ${CMAKE_SOURCE_DIR}/../opensg/lib ) + else (VS32) + if (VS64) + # Visual Studio x64 + SET( __OpenSG_INCLUDE_SEARCH_DIRS + $ENV{OPENSG_ROOT}/include + ${OPENSG_ROOT}/include + ${LIBRARIES_DIR}/opensg_x64/include + ${CMAKE_SOURCE_DIR}/../opensg_x64/include ) + SET( __OpenSG_LIBRARIES_SEARCH_DIRS + $ENV{OPENSG_ROOT}/lib + ${OPENSG_ROOT}/lib + ${LIBRARIES_DIR}/opensg_x64/lib + ${CMAKE_SOURCE_DIR}/../opensg_x64/lib ) + else (VS64) + # Linux or Mac + SET( __OpenSG_INCLUDE_SEARCH_DIRS + "/usr/local" + "/usr/local/include" ) + SET( __OpenSG_LIBRARIES_SEARCH_DIRS + "/usr/local" + "/usr/local/lib" ) + endif(VS64) + endif (VS32) + + + # handle input variable OPENSG_INCLUDE_DIR + IF(OPENSG_INCLUDE_DIR) + FILE(TO_CMAKE_PATH ${OPENSG_INCLUDE_DIR} OPENSG_INCLUDE_DIR) + SET(__OpenSG_INCLUDE_SEARCH_DIRS + ${OPENSG_INCLUDE_DIR} ${__OpenSG_INCLUDE_SEARCH_DIRS}) + ENDIF(OPENSG_INCLUDE_DIR) + + # handle input variable OPENSG_LIBRARY_DIR + IF(OPENSG_LIBRARY_DIR) + FILE(TO_CMAKE_PATH ${OPENSG_LIBRARY_DIR} OPENSG_LIBRARY_DIR) + SET(__OpenSG_LIBRARIES_SEARCH_DIRS + ${OPENSG_LIBRARY_DIR} ${__OpenSG_LIBRARIES_SEARCH_DIRS}) + ENDIF(OPENSG_LIBRARY_DIR) + + # handle input variable OPENSG_INCLUDE_SEARCH_DIR + IF(OPENSG_INCLUDE_SEARCH_DIR) + FILE(TO_CMAKE_PATH ${OPENSG_INCLUDE_SEARCH_DIR} OPENSG_INCLUDE_SEARCH_DIR) + SET(__OpenSG_INCLUDE_SEARCH_DIRS + ${OPENSG_INCLUDE_SEARCH_DIR} ${__OpenSG_INCLUDE_SEARCH_DIRS}) + ENDIF(OPENSG_INCLUDE_SEARCH_DIR) + + # handle input variable OPENSG_LIBRARY_SEARCH_DIR + IF(OPENSG_LIBRARY_SEARCH_DIR) + FILE(TO_CMAKE_PATH ${OPENSG_LIBRARY_SEARCH_DIR} OPENSG_LIBRARY_SEARCH_DIR) + SET(__OpenSG_LIBRARIES_SEARCH_DIRS + ${OPENSG_LIBRARY_SEARCH_DIR} ${__OpenSG_LIBRARIES_SEARCH_DIRS}) + ENDIF(OPENSG_LIBRARY_SEARCH_DIR) + + IF(NOT OpenSG_INCLUDE_DIR) + # try to find include dirrectory by searching for OSGConfigured.h + FIND_PATH(OpenSG_INCLUDE_DIR + NAMES OpenSG/OSGConfigured.h + HINTS ${__OpenSG_INCLUDE_SEARCH_DIRS}) + ENDIF(NOT OpenSG_INCLUDE_DIR) + #message(STATUS "OpenSG_INCLUDE_DIR: " ${OpenSG_INCLUDE_DIR}) + # ------------------------------------------------------------------------ + # Begin finding OpenSG libraries + # ------------------------------------------------------------------------ + FOREACH(COMPONENT ${OpenSG_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) + SET(OpenSG_${UPPERCOMPONENT}_LIBRARY "OpenSG_${UPPERCOMPONENT}_LIBRARY-NOTFOUND" ) + SET(OpenSG_${UPPERCOMPONENT}_LIBRARY_RELEASE "OpenSG_${UPPERCOMPONENT}_LIBRARY_RELEASE-NOTFOUND" ) + SET(OpenSG_${UPPERCOMPONENT}_LIBRARY_DEBUG "OpenSG_${UPPERCOMPONENT}_LIBRARY_DEBUG-NOTFOUND") + + IF (WIN32) + FIND_LIBRARY(OpenSG_${UPPERCOMPONENT}_LIBRARY_RELEASE + NAMES ${COMPONENT} + HINTS ${__OpenSG_LIBRARIES_SEARCH_DIRS} + ) + + #message(STATUS "OpenSG Component: " ${COMPONENT}) + + FIND_LIBRARY(OpenSG_${UPPERCOMPONENT}_LIBRARY_DEBUG + # 1.8 Added the "D" suffix + NAMES ${COMPONENT}D + HINTS ${__OpenSG_LIBRARIES_SEARCH_DIRS} + # 1.8 Removed next line + #PATH_SUFFIXES "debug" + ) + ELSE (WIN32) + FIND_LIBRARY(OpenSG_${UPPERCOMPONENT}_LIBRARY_RELEASE + NAMES ${COMPONENT} + HINTS ${__OpenSG_LIBRARIES_SEARCH_DIRS} + PATH_SUFFIXES "/opt" + ) + + #message(STATUS "OpenSG Component: " ${COMPONENT}) + + FIND_LIBRARY(OpenSG_${UPPERCOMPONENT}_LIBRARY_DEBUG + NAMES ${COMPONENT} + HINTS ${__OpenSG_LIBRARIES_SEARCH_DIRS} + PATH_SUFFIXES "/dbg" + ) + ENDIF(WIN32) + + __OpenSG_ADJUST_LIB_VARS(${UPPERCOMPONENT}) + ENDFOREACH(COMPONENT) + # ------------------------------------------------------------------------ + # End finding OpenSG libraries + # ------------------------------------------------------------------------ + + SET(OpenSG_INCLUDE_DIRS "${OpenSG_INCLUDE_DIR}" "${OpenSG_INCLUDE_DIR}/OpenSG") + + SET(OpenSG_FOUND FALSE) + + IF(OpenSG_INCLUDE_DIR) + SET(OpenSG_FOUND TRUE) + + # check if all requested components were found + SET(__OpenSG_CHECKED_COMPONENT FALSE) + SET(__OpenSG_MISSING_COMPONENTS) + + FOREACH(COMPONENT ${OpenSG_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} COMPONENT) + SET(__OpenSG_CHECKED_COMPONENT TRUE) + + IF(NOT OpenSG_${COMPONENT}_FOUND) + STRING(TOLOWER ${COMPONENT} COMPONENT) + LIST(APPEND __OpenSG_MISSING_COMPONENTS ${COMPONENT}) + SET(OpenSG_FOUND FALSE) + ENDIF(NOT OpenSG_${COMPONENT}_FOUND) + ENDFOREACH(COMPONENT) + + IF(__OpenSG_MISSING_COMPONENTS) + # We were unable to find some libraries, so generate a sensible + # error message that lists the libraries we were unable to find. + SET(OpenSG_ERROR_REASON + "${OpenSG_ERROR_REASON}\nThe following OpenSG libraries could not be found:\n") + FOREACH(COMPONENT ${__OpenSG_MISSING_COMPONENTS}) + SET(OpenSG_ERROR_REASON + "${OpenSG_ERROR_REASON} ${COMPONENT}\n") + ENDFOREACH(COMPONENT) + + LIST(LENGTH OpenSG_FIND_COMPONENTS __OpenSG_NUM_COMPONENTS_WANTED) + LIST(LENGTH __OpenSG_MISSING_COMPONENTS __OpenSG_NUM_MISSING_COMPONENTS) + IF(${__OpenSG_NUM_COMPONENTS_WANTED} EQUAL ${__OpenSG_NUM_MISSING_COMPONENTS}) + SET(OpenSG_ERROR_REASON + "${OpenSG_ERROR_REASON}No OpenSG libraries were found. You may need to set OPENSG_LIBRARY_DIR to the directory containing OpenSG libraries or OPENSG_ROOT to the location of OpenSG.") + ELSE(${__OpenSG_NUM_COMPONENTS_WANTED} EQUAL ${__OpenSG_NUM_MISSING_COMPONENTS}) + SET(OpenSG_ERROR_REASON + "${OpenSG_ERROR_REASON}Some (but not all) of the required OpenSG libraries were found. You may need to install these additional OpenSG libraries. Alternatively, set OPENSG_LIBRARY_DIR to the directory containing OpenSG libraries or OPENSG_ROOT to the location of OpenSG.") + ENDIF(${__OpenSG_NUM_COMPONENTS_WANTED} EQUAL ${__OpenSG_NUM_MISSING_COMPONENTS}) + ENDIF(__OpenSG_MISSING_COMPONENTS) + + ENDIF(OpenSG_INCLUDE_DIR) + + IF(OpenSG_FOUND) + IF(NOT OpenSG_FIND_QUIETLY) + MESSAGE(STATUS "OpenSG found.") + ENDIF(NOT OpenSG_FIND_QUIETLY) + + IF (NOT OpenSG_FIND_QUIETLY) + MESSAGE(STATUS "Found the following OpenSG libraries:") + ENDIF(NOT OpenSG_FIND_QUIETLY) + + FOREACH(COMPONENT ${OpenSG_FIND_COMPONENTS}) + STRING(TOUPPER ${COMPONENT} UPPERCOMPONENT) + IF(OpenSG_${UPPERCOMPONENT}_FOUND) + IF(NOT OpenSG_FIND_QUIETLY) + MESSAGE(STATUS " ${COMPONENT}") + ENDIF(NOT OpenSG_FIND_QUIETLY) + SET(OpenSG_LIBRARIES ${OpenSG_LIBRARIES} ${OpenSG_${UPPERCOMPONENT}_LIBRARY}) + ENDIF(OpenSG_${UPPERCOMPONENT}_FOUND) + ENDFOREACH(COMPONENT) + + ELSE(OpenSG_FOUND) + IF(OpenSG_FIND_REQUIRED) + MESSAGE(SEND_ERROR "Unable to find the requested OpenSG libraries.\n${OpenSG_ERROR_REASON}") + ENDIF(OpenSG_FIND_REQUIRED) + ENDIF(OpenSG_FOUND) + +ENDIF(__OpenSG_IN_CACHE) diff --git a/FindOpenSGSupportlibs.cmake b/FindOpenSGSupportlibs.cmake new file mode 100644 index 0000000000000000000000000000000000000000..a1a6ee697f605af40a19a608aa09eec878623747 --- /dev/null +++ b/FindOpenSGSupportlibs.cmake @@ -0,0 +1,45 @@ +# - Try to find OpenSGSupportlibs +# Once done, this will define +# +# OpenSGSupportlibs_FOUND +# OpenSGSupportlibs_INCLUDE_DIRS +# OpenSGSupportlibs_LIBRARIES + +if (NOT OpenSGSupportlibs_FOUND) + + include(LibFindMacros) + + # Visual Studio x32 + if (VS32) + # Visual Studio x32 + find_path( OpenSGSupportlibs_INCLUDE_DIR + NAMES zlib.h + PATHS ${LIBRARIES_DIR}/supportlibs/include + ${CMAKE_SOURCE_DIR}/../supportlibs/include ) + + find_library(OpenSGSupportlibs_LIBRARY + NAMES glut32 libjpg libpng tif32 zlib + PATHS ${LIBRARIES_DIR}/supportlibs/lib + ${CMAKE_SOURCE_DIR}/../supportlibs/lib ) + else (VS32) + if (VS64) + # Visual Studio x64 + find_path( OpenSGSupportlibs_INCLUDE_DIR + NAMES zlib.h + PATHS ${LIBRARIES_DIR}/supportlibs_x64/include + ${CMAKE_SOURCE_DIR}/../supportlibs_x64/include ) + + find_library(OpenSGSupportlibs_LIBRARY + NAMES glut32 libjpg libpng tif32 zlib + PATHS ${LIBRARIES_DIR}/supportlibs_x64/lib + ${CMAKE_SOURCE_DIR}/../supportlibs_x64/lib ) + endif(VS64) + endif (VS32) + + # Set the include dir variables and the libraries and let libfind_process do the rest. + # NOTE: Singular variables for this library, plural for libraries this this lib depends on. + set(OpenSGSupportlibs_PROCESS_INCLUDES OpenSGSupportlibs_INCLUDE_DIR) + set(OpenSGSupportlibs_PROCESS_LIBS OpenSGSupportlibs_LIBRARY) + libfind_process(OpenSGSupportlibs) + +endif (NOT OpenSGSupportlibs_FOUND) \ No newline at end of file diff --git a/LibFindMacros.cmake b/LibFindMacros.cmake new file mode 100644 index 0000000000000000000000000000000000000000..2195d141a59a060f47203a28b6171441bb5f7e97 --- /dev/null +++ b/LibFindMacros.cmake @@ -0,0 +1,101 @@ +# Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments +# used for the current package. For this to work, the first parameter must be the +# prefix of the current package, then the prefix of the new package etc, which are +# passed to find_package. +macro (libfind_package PREFIX) + set (LIBFIND_PACKAGE_ARGS ${ARGN}) + if (${PREFIX}_FIND_QUIETLY) + set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET) + endif (${PREFIX}_FIND_QUIETLY) + if (${PREFIX}_FIND_REQUIRED) + set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED) + endif (${PREFIX}_FIND_REQUIRED) + find_package(${LIBFIND_PACKAGE_ARGS}) +endmacro (libfind_package) + +# Damn CMake developers made the UsePkgConfig system deprecated in the same release (2.6) +# where they added pkg_check_modules. Consequently I need to support both in my scripts +# to avoid those deprecated warnings. Here's a helper that does just that. +# Works identically to pkg_check_modules, except that no checks are needed prior to use. +macro (libfind_pkg_check_modules PREFIX PKGNAME) + if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + include(UsePkgConfig) + pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS) + else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(${PREFIX} ${PKGNAME}) + endif (PKG_CONFIG_FOUND) + endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) +endmacro (libfind_pkg_check_modules) + +# Do the final processing once the paths have been detected. +# If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain +# all the variables, each of which contain one include directory. +# Ditto for ${PREFIX}_PROCESS_LIBS and library files. +# Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES. +# Also handles errors in case library detection was required, etc. +macro (libfind_process PREFIX) + # Skip processing if already processed during this run + if (NOT ${PREFIX}_FOUND) + # Start with the assumption that the library was found + set (${PREFIX}_FOUND TRUE CACHE INTERNAL "Whether the OpenSG support libraries were found") + + # Process all includes and set _FOUND to false if any are missing + foreach (i ${${PREFIX}_PROCESS_INCLUDES}) + if (${i}) + set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}}) + mark_as_advanced(${i}) + else (${i}) + set (${PREFIX}_FOUND FALSE) + endif (${i}) + endforeach (i) + + # Process all libraries and set _FOUND to false if any are missing + foreach (i ${${PREFIX}_PROCESS_LIBS}) + if (${i}) + set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}}) + mark_as_advanced(${i}) + else (${i}) + set (${PREFIX}_FOUND FALSE) + endif (${i}) + endforeach (i) + + # Print message and/or exit on fatal error + if (${PREFIX}_FOUND) + if (NOT ${PREFIX}_FIND_QUIETLY) + message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}") + endif (NOT ${PREFIX}_FIND_QUIETLY) + else (${PREFIX}_FOUND) + if (${PREFIX}_FIND_REQUIRED) + foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS}) + message("${i}=${${i}}") + endforeach (i) + message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.") + endif (${PREFIX}_FIND_REQUIRED) + endif (${PREFIX}_FOUND) + endif (NOT ${PREFIX}_FOUND) + + # Cache libraries variable + SET (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} CACHE STRING "${PREFIX} libraries") +endmacro (libfind_process) + +macro(libfind_library PREFIX basename) + set(TMP "") + if(MSVC80) + set(TMP -vc80) + endif(MSVC80) + if(MSVC90) + set(TMP -vc90) + endif(MSVC90) + set(${PREFIX}_LIBNAMES ${basename}${TMP}) + if(${ARGC} GREATER 2) + set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2}) + string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES}) + set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP}) + endif(${ARGC} GREATER 2) + find_library(${PREFIX}_LIBRARY + NAMES ${${PREFIX}_LIBNAMES} + PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS} + ) +endmacro(libfind_library)