# Locate SimGear # This module defines # SIMGEAR_LIBRARIES # SIMGEAR_FOUND, if false, do not try to link to SimGear # SIMGEAR_INCLUDE_DIR, where to find the headers # # $SIMGEAR_DIR is an environment variable that would # correspond to the ./configure --prefix=$SIMGEAR_DIR # used in building SimGear. # # Created by James Turner. This was influenced by the FindOpenAL.cmake module. #============================================================================= # Copyright 2005-2009 Kitware, Inc. # # Distributed under the OSI-approved BSD License (the "License"); # see accompanying file Copyright.txt for details. # # This software is distributed WITHOUT ANY WARRANTY; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # See the License for more information. #============================================================================= # (To distributed this file outside of CMake, substitute the full # License text for the above reference.) # Per my request, CMake should search for frameworks first in # the following order: # ~/Library/Frameworks/SimGear.framework/Headers # /Library/Frameworks/SimGear.framework/Headers # /System/Library/Frameworks/SimGear.framework/Headers # # On OS X, this will prefer the Framework version (if found) over others. # People will have to manually change the cache values of # SimGear_LIBRARIES to override this selection or set the CMake environment # CMAKE_INCLUDE_PATH to modify the search paths. FIND_PATH(SIMGEAR_INCLUDE_DIR simgear/math/SGMath.hxx HINTS $ENV{SIMGEAR_DIR} PATH_SUFFIXES include PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /opt ) message(STATUS ${SIMGEAR_INCLUDE_DIR}) # check for dynamic framework/library FIND_LIBRARY(SIMGEAR_LIBRARIES NAMES simgear SimGear HINTS $ENV{SIMGEAR_DIR} PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64 PATHS ~/Library/Frameworks /Library/Frameworks /usr/local /usr /opt ) macro(find_sg_component comp libs) set(compLib "sg${comp}") string(TOUPPER "SIMGEAR_${comp}_LIBRARY" compLibName) FIND_LIBRARY(${compLibName} NAMES ${compLib} HINTS $ENV{SIMGEAR_DIR} PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64 PATHS /usr/local /usr /opt ) set(componentLib ${${compLibName}}) if (NOT ${componentLib} STREQUAL "componentLib-NOTFOUND") #message(STATUS "found ${componentLib}") list(APPEND ${libs} ${componentLib}) endif() endmacro() if(${SIMGEAR_LIBRARIES} STREQUAL "SIMGEAR_LIBRARIES-NOTFOUND") set(SIMGEAR_LIBRARIES "") # clear value # note the order here affects the order Simgear libraries are # linked in, and hence ability to link when using a traditional # linker such as GNU ld on Linux set(comps ephemeris environment nasal sky material tgdb model screen bucket bvh util route timing threads io serial sound structure props xml debug misc magvar math) foreach(component ${comps}) find_sg_component(${component} SIMGEAR_LIBRARIES) endforeach() endif() # now we've found SimGear, check its version include(CheckCXXSourceRuns) message(STATUS "looking for version: ${SimGear_FIND_VERSION}") SET(CMAKE_REQUIRED_INCLUDES ${SIMGEAR_INCLUDE_DIR}) check_cxx_source_runs( "#include #include #define xstr(s) str(s) #define str(s) #s #define MIN_MAJOR ${SimGear_FIND_VERSION_MAJOR} #define MIN_MINOR ${SimGear_FIND_VERSION_MINOR} #define MIN_MICRO ${SimGear_FIND_VERSION_PATCH} int main() { int major, minor, micro; /* printf(%d.%d.%d or greater, , MIN_MAJOR, MIN_MINOR, MIN_MICRO); */ printf(\"found %s ... \", xstr(SIMGEAR_VERSION)); sscanf( xstr(SIMGEAR_VERSION), \"%d.%d.%d\", &major, &minor, µ ); if ( (major < MIN_MAJOR) || (major == MIN_MAJOR && minor < MIN_MINOR) || (major == MIN_MAJOR && minor == MIN_MINOR && micro < MIN_MICRO) ) { return -1; } return 0; } " SIMGEAR_VERSION_OK) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SimGear DEFAULT_MSG SIMGEAR_LIBRARIES SIMGEAR_INCLUDE_DIR SIMGEAR_VERSION_OK)