]> git.mxchange.org Git - flightgear.git/blob - CMakeModules/FindSimGear.cmake
KIll off ALUT now it's gone from SimGear
[flightgear.git] / CMakeModules / FindSimGear.cmake
1 # Locate SimGear
2 # This module defines
3
4 # SIMGEAR_CORE_LIBRARIES, a list of the core static libraries
5 # SIMGEAR_LIBRARIES, a list of all the static libraries (core + scene)
6 # SIMGEAR_FOUND, if false, do not try to link to SimGear
7 # SIMGEAR_INCLUDE_DIR, where to find the headers
8 #
9 # $SIMGEAR_DIR is an environment variable that would
10 # correspond to the ./configure --prefix=$SIMGEAR_DIR
11 # used in building SimGear.
12 #
13 # Created by James Turner. This was influenced by the FindOpenAL.cmake module.
14
15 #=============================================================================
16 # Copyright 2005-2009 Kitware, Inc.
17 #
18 # Distributed under the OSI-approved BSD License (the "License");
19 # see accompanying file Copyright.txt for details.
20 #
21 # This software is distributed WITHOUT ANY WARRANTY; without even the
22 # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
23 # See the License for more information.
24 #=============================================================================
25 # (To distributed this file outside of CMake, substitute the full
26 #  License text for the above reference.)
27
28 include(SelectLibraryConfigurations)
29
30 macro(find_sg_library libName varName libs)
31     set(libVarName "${varName}_LIBRARY")
32     # do not cache the library check
33     unset(${libVarName}_DEBUG CACHE)
34     unset(${libVarName}_RELEASE CACHE)
35
36     FIND_LIBRARY(${libVarName}_DEBUG
37       NAMES ${libName}${CMAKE_DEBUG_POSTFIX}
38       HINTS $ENV{SIMGEAR_DIR}
39       PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR} libs64 libs libs/Win32 libs/Win64
40       PATHS
41       /usr/local
42       /usr
43       /opt
44     )
45     FIND_LIBRARY(${libVarName}_RELEASE
46       NAMES ${libName}${CMAKE_RELEASE_POSTFIX}
47       HINTS $ENV{SIMGEAR_DIR}
48       PATH_SUFFIXES ${CMAKE_INSTALL_LIBDIR} libs64 libs libs/Win32 libs/Win64
49       PATHS
50       /usr/local
51       /usr
52       /opt
53     )
54     
55    # message(STATUS "before: Simgear ${${libVarName}_RELEASE} ")
56   #  message(STATUS "before: Simgear ${${libVarName}_DEBUG} ")
57     
58     select_library_configurations( ${varName} )
59
60   #  message(STATUS "after:Simgear ${${libVarName}_RELEASE} ")
61   #  message(STATUS "after:Simgear ${${libVarName}_DEBUG} ")
62
63     set(componentLibRelease ${${libVarName}_RELEASE})
64   #  message(STATUS "Simgear ${libVarName}_RELEASE ${componentLibRelease}")
65     set(componentLibDebug ${${libVarName}_DEBUG})
66    # message(STATUS "Simgear ${libVarName}_DEBUG ${componentLibDebug}")
67     
68     if (NOT ${libVarName}_DEBUG)
69         if (NOT ${libVarName}_RELEASE)
70             #message(STATUS "found ${componentLib}")
71             list(APPEND ${libs} ${componentLibRelease})
72         endif()
73     else()
74         list(APPEND ${libs} optimized ${componentLibRelease} debug ${componentLibDebug})
75     endif()
76 endmacro()
77
78 macro(find_sg_component comp libs)
79     set(compLib "sg${comp}")
80     string(TOUPPER "SIMGEAR_${comp}" libVar)
81     
82     find_sg_library(${compLib} ${libVar} ${libs})
83 endmacro()
84
85 FIND_PATH(SIMGEAR_INCLUDE_DIR simgear/math/SGMath.hxx
86   HINTS $ENV{SIMGEAR_DIR}
87   PATH_SUFFIXES include
88   PATHS
89   ~/Library/Frameworks
90   /Library/Frameworks
91   /usr/local
92   /usr
93   /opt
94 )
95
96 # make sure the simgear include directory exists
97 if (NOT SIMGEAR_INCLUDE_DIR)
98     message(FATAL_ERROR "Cannot find SimGear includes! (Forgot 'make install' for SimGear?) "
99             "Compile & INSTALL SimGear before configuring FlightGear. "
100             "When using non-standard locations, use 'SIMGEAR_DIR' to configure the SimGear location.")
101 endif()
102
103 message(STATUS "SimGear include directory: ${SIMGEAR_INCLUDE_DIR}")
104
105 # make sure the simgear/version.h header exists
106 if (NOT EXISTS ${SIMGEAR_INCLUDE_DIR}/simgear/version.h)
107     message(FATAL_ERROR "Found SimGear, but it does not contain a simgear/version.h include! "
108             "SimGear installation is incomplete.")
109 endif()
110
111 # read the simgear version header file, get the version
112 file(READ ${SIMGEAR_INCLUDE_DIR}/simgear/version.h sgVersionFile)
113 string(STRIP ${sgVersionFile} SIMGEAR_DEFINE)
114 string(REPLACE "#define SIMGEAR_VERSION " "" SIMGEAR_VERSION ${SIMGEAR_DEFINE})
115 message(STATUS "found SimGear version: ${SIMGEAR_VERSION} (needed ${SimGear_FIND_VERSION})")
116
117 if(NOT ${SIMGEAR_VERSION} EQUAL ${SimGear_FIND_VERSION})
118     message(FATAL_ERROR "You have installed a mismatching SimGear version ${SIMGEAR_VERSION} "
119             "instead of ${SimGear_FIND_VERSION} as required by FlightGear. "
120             "When using multiple SimGear installations, please use 'SIMGEAR_DIR' "
121             "to select the SimGear library location to be used.")
122 endif()
123
124 # dependent packages
125 find_package(ZLIB REQUIRED)
126 find_package(Threads REQUIRED)
127
128 if(SIMGEAR_SHARED)
129     message(STATUS "looking for shared Simgear libraries")
130
131     find_sg_library(SimGearCore SIMGEAR_CORE SIMGEAR_CORE_LIBRARIES)
132     find_sg_library(SimGearScene SIMGEAR_SCENE SIMGEAR_LIBRARIES)
133
134  
135     list(APPEND SIMGEAR_LIBRARIES ${SIMGEAR_CORE_LIBRARIES})
136     set(SIMGEAR_CORE_LIBRARY_DEPENDENCIES "")
137     set(SIMGEAR_SCENE_LIBRARY_DEPENDENCIES "")
138     
139    # message(STATUS "core lib ${SIMGEAR_CORE_LIBRARIES}")
140   #  message(STATUS "all libs ${SIMGEAR_LIBRARIES}")
141 else(SIMGEAR_SHARED)
142
143     set(SIMGEAR_LIBRARIES "") # clear value
144     set(SIMGEAR_CORE_LIBRARIES "") # clear value
145     message(STATUS "looking for static SimGear libraries")
146     
147   # note the order here affects the order Simgear libraries are
148   # linked in, and hence ability to link when using a traditional
149   # linker such as GNU ld on Linux
150     set(comps
151         environment
152         nasal
153         tsync
154         bucket
155         io
156         serial
157         math
158         props
159         structure
160         timing
161         xml
162         misc
163         threads
164         debug
165         magvar
166     )
167
168     set(scene_comps
169         ephem
170         sky
171         material
172         tgdb
173         model
174         screen
175         bvh
176         util
177         sound)
178             
179     foreach(component ${comps})
180         find_sg_component(${component} SIMGEAR_CORE_LIBRARIES)
181     endforeach()
182
183     foreach(component ${scene_comps})
184         find_sg_component(${component} SIMGEAR_LIBRARIES)
185     endforeach()
186
187     # again link order matters - scene libraries depend on core ones
188     list(APPEND SIMGEAR_LIBRARIES ${SIMGEAR_CORE_LIBRARIES})
189
190     #message(STATUS "all libs ${SIMGEAR_LIBRARIES}")
191     
192     set(SIMGEAR_CORE_LIBRARY_DEPENDENCIES
193         ${CMAKE_THREAD_LIBS_INIT}
194         ${ZLIB_LIBRARY}
195         ${LIBSVN_LIBRARIES}
196         ${WINMM_LIBRARY})
197
198     set(SIMGEAR_SCENE_LIBRARY_DEPENDENCIES 
199         ${OPENAL_LIBRARY})
200
201     if(WIN32)
202         list(APPEND SIMGEAR_CORE_LIBRARY_DEPENDENCIES ws2_32.lib)
203     endif(WIN32)
204
205     if(NOT MSVC)
206         # basic timing routines on non windows systems, may be also cygwin?!
207         check_library_exists(rt clock_gettime "" have_rt)
208         if(have_rt)
209             list(APPEND SIMGEAR_CORE_LIBRARY_DEPENDENCIES rt)
210         endif(have_rt)
211     endif(NOT MSVC)
212 endif(SIMGEAR_SHARED)
213
214 if((NOT SIMGEAR_CORE_LIBRARIES)OR(NOT SIMGEAR_LIBRARIES))
215     message(FATAL_ERROR "Cannot find SimGear libraries! (Forgot 'make install' for SimGear?) "
216             "Compile & INSTALL SimGear before configuring FlightGear. "
217             "When using non-standard locations, use 'SIMGEAR_DIR' to configure the SimGear location.")
218 else()
219     message(STATUS "found SimGear libraries")
220 endif()
221
222 # now we've found SimGear, try test-compiling using its includes
223 include(CheckCXXSourceRuns)
224
225 SET(CMAKE_REQUIRED_INCLUDES ${SIMGEAR_INCLUDE_DIR})
226
227 # clear cache, run a fresh compile test every time
228 unset(SIMGEAR_COMPILE_TEST CACHE)
229
230 # disable OSG dependencies for test-compiling
231 set(CMAKE_REQUIRED_DEFINITIONS "-DNO_OPENSCENEGRAPH_INTERFACE")
232 check_cxx_source_runs(
233     "#include <cstdio>
234     #include \"simgear/version.h\"
235     #include \"simgear/math/SGMath.hxx\"
236
237     #define xstr(s) str(s)
238     #define str(s) #s
239
240     #define MIN_MAJOR ${SimGear_FIND_VERSION_MAJOR}
241     #define MIN_MINOR ${SimGear_FIND_VERSION_MINOR}
242     #define MIN_MICRO ${SimGear_FIND_VERSION_PATCH}
243
244     int main() {
245         int major, minor, micro;
246
247         /* printf(%d.%d.%d or greater, , MIN_MAJOR, MIN_MINOR, MIN_MICRO); */
248         printf(\"found %s ... \", xstr(SIMGEAR_VERSION));
249
250         sscanf( xstr(SIMGEAR_VERSION), \"%d.%d.%d\", &major, &minor, &micro );
251
252         if ( (major != MIN_MAJOR) ||
253              (minor != MIN_MINOR) ||
254              (micro != MIN_MICRO) ) {
255          return -1;
256         }
257
258         return 0;
259     }
260     "
261     SIMGEAR_COMPILE_TEST)
262
263 if(NOT SIMGEAR_COMPILE_TEST)
264     message(FATAL_ERROR "Oops, you have installed SimGear includes, however test compiling failed. "
265             "Try removing 'CMakeCache.txt' and reconfigure with 'cmake'.")
266 endif()
267 unset(CMAKE_REQUIRED_DEFINITIONS)
268
269 include(FindPackageHandleStandardArgs)
270 FIND_PACKAGE_HANDLE_STANDARD_ARGS(SimGear DEFAULT_MSG
271      SIMGEAR_LIBRARIES SIMGEAR_CORE_LIBRARIES SIMGEAR_INCLUDE_DIR SIMGEAR_COMPILE_TEST)
272