]> git.mxchange.org Git - flightgear.git/blob - CMakeModules/FindSimGear.cmake
f568d4b015eec66e2361d815c12cd4d74000d3fc
[flightgear.git] / CMakeModules / FindSimGear.cmake
1 # Locate SimGear
2 # This module defines
3 # SIMGEAR_LIBRARIES
4 # SIMGEAR_FOUND, if false, do not try to link to SimGear
5 # SIMGEAR_INCLUDE_DIR, where to find the headers
6 #
7 # $SIMGEAR_DIR is an environment variable that would
8 # correspond to the ./configure --prefix=$SIMGEAR_DIR
9 # used in building SimGear.
10 #
11 # Created by James Turner. This was influenced by the FindOpenAL.cmake module.
12
13 #=============================================================================
14 # Copyright 2005-2009 Kitware, Inc.
15 #
16 # Distributed under the OSI-approved BSD License (the "License");
17 # see accompanying file Copyright.txt for details.
18 #
19 # This software is distributed WITHOUT ANY WARRANTY; without even the
20 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 # See the License for more information.
22 #=============================================================================
23 # (To distributed this file outside of CMake, substitute the full
24 #  License text for the above reference.)
25
26 # Per my request, CMake should search for frameworks first in
27 # the following order:
28 # ~/Library/Frameworks/SimGear.framework/Headers
29 # /Library/Frameworks/SimGear.framework/Headers
30 # /System/Library/Frameworks/SimGear.framework/Headers
31 #
32 # On OS X, this will prefer the Framework version (if found) over others.
33 # People will have to manually change the cache values of
34 # SimGear_LIBRARIES to override this selection or set the CMake environment
35 # CMAKE_INCLUDE_PATH to modify the search paths.
36
37 include(SelectLibraryConfigurations)
38
39 FIND_PATH(SIMGEAR_INCLUDE_DIR simgear/math/SGMath.hxx
40   HINTS $ENV{SIMGEAR_DIR}
41   PATH_SUFFIXES include
42   PATHS
43   ~/Library/Frameworks
44   /Library/Frameworks
45   /usr/local
46   /usr
47   /opt
48 )
49
50 message(STATUS ${SIMGEAR_INCLUDE_DIR})
51
52 # check for dynamic framework/library
53 FIND_LIBRARY(SIMGEAR_LIBRARIES
54   NAMES simgear SimGear
55   HINTS
56   $ENV{SIMGEAR_DIR}
57   PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
58   PATHS
59   ~/Library/Frameworks
60   /Library/Frameworks
61   /usr/local
62   /usr
63   /opt
64 )
65
66 macro(find_sg_component comp libs)
67     set(compLib "sg${comp}")
68     string(TOUPPER "SIMGEAR_${comp}" compLibBase)
69     set( compLibName ${compLibBase}_LIBRARY )
70
71     FIND_LIBRARY(${compLibName}_DEBUG
72       NAMES ${compLib}${CMAKE_DEBUG_POSTFIX}
73       HINTS $ENV{SIMGEAR_DIR}
74       PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
75       PATHS
76       /usr/local
77       /usr
78       /opt
79     )
80     FIND_LIBRARY(${compLibName}_RELEASE
81       NAMES ${compLib}${CMAKE_RELEASE_POSTFIX}
82       HINTS $ENV{SIMGEAR_DIR}
83       PATH_SUFFIXES lib64 lib libs64 libs libs/Win32 libs/Win64
84       PATHS
85       /usr/local
86       /usr
87       /opt
88     )
89     select_library_configurations( ${compLibBase} )
90
91     set(componentLibRelease ${${compLibName}_RELEASE})
92     #message(STATUS "Simgear ${compLibName}_RELEASE ${componentLibRelease}")
93     set(componentLibDebug ${${compLibName}_DEBUG})
94     #message(STATUS "Simgear ${compLibName}_DEBUG ${componentLibDebug}")
95     if (NOT ${compLibName}_DEBUG)
96         if (NOT ${compLibName}_RELEASE)
97             #message(STATUS "found ${componentLib}")
98             list(APPEND ${libs} ${componentLibRelease})
99         endif()
100     else()
101         list(APPEND ${libs} optimized ${componentLibRelease} debug ${componentLibDebug})
102     endif()
103 endmacro()
104
105
106 if(${SIMGEAR_LIBRARIES} STREQUAL "SIMGEAR_LIBRARIES-NOTFOUND")
107     set(SIMGEAR_LIBRARIES "") # clear value
108     set(SIMGEAR_CORE_LIBRARIES "") # clear value
109     
110   # note the order here affects the order Simgear libraries are
111   # linked in, and hence ability to link when using a traditional
112   # linker such as GNU ld on Linux
113     set(comps
114         tsync
115         environment
116         nasal
117         bucket
118         bvh
119         util 
120         route
121         timing
122         io
123         serial
124         sound
125         structure
126         props
127         xml
128         misc
129         threads
130         debug
131         magvar
132         math)
133
134     set(scene_comps
135         ephem
136         sky
137         material
138         tgdb
139         model
140         screen)
141             
142     foreach(component ${comps})
143         find_sg_component(${component} SIMGEAR_CORE_LIBRARIES)
144     endforeach()
145         
146     foreach(component ${scene_comps})
147         find_sg_component(${component} SIMGEAR_LIBRARIES)
148     endforeach()
149     
150     # again link order matters - scene libraires depend on core ones
151     list(APPEND SIMGEAR_LIBRARIES ${SIMGEAR_CORE_LIBRARIES})
152 endif()
153
154 # now we've found SimGear, check its version
155
156 include(CheckCXXSourceRuns)
157
158 message(STATUS "looking for version: ${SimGear_FIND_VERSION}")
159
160 SET(CMAKE_REQUIRED_INCLUDES ${SIMGEAR_INCLUDE_DIR})
161
162 check_cxx_source_runs(
163     "#include <cstdio>
164     #include \"simgear/version.h\"
165
166     #define xstr(s) str(s)
167     #define str(s) #s
168
169     #define MIN_MAJOR ${SimGear_FIND_VERSION_MAJOR}
170     #define MIN_MINOR ${SimGear_FIND_VERSION_MINOR}
171     #define MIN_MICRO ${SimGear_FIND_VERSION_PATCH}
172
173     int main() {
174         int major, minor, micro;
175
176         /* printf(%d.%d.%d or greater, , MIN_MAJOR, MIN_MINOR, MIN_MICRO); */
177         printf(\"found %s ... \", xstr(SIMGEAR_VERSION));
178
179         sscanf( xstr(SIMGEAR_VERSION), \"%d.%d.%d\", &major, &minor, &micro );
180
181         if ( (major < MIN_MAJOR) ||
182              (major == MIN_MAJOR && minor < MIN_MINOR) ||
183              (major == MIN_MAJOR && minor == MIN_MINOR && micro < MIN_MICRO) ) {
184          return -1;
185         }
186
187         return 0;
188     }
189     "
190     SIMGEAR_VERSION_OK)
191
192 include(FindPackageHandleStandardArgs)
193 FIND_PACKAGE_HANDLE_STANDARD_ARGS(SimGear DEFAULT_MSG
194      SIMGEAR_LIBRARIES SIMGEAR_INCLUDE_DIR SIMGEAR_VERSION_OK)
195