]> git.mxchange.org Git - flightgear.git/blob - CMakeLists.txt
d1180065ce834525e209bfdc13abf5fbcd6eabfa
[flightgear.git] / CMakeLists.txt
1 cmake_minimum_required (VERSION 2.6.4)
2
3 include (CheckFunctionExists)
4 include (CheckCSourceCompiles)
5 include (CheckCXXSourceCompiles)
6 include (CheckIncludeFile)
7
8 project(FlightGear)
9
10 # We have some custom .cmake scripts not in the official distribution.
11 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
12
13 if(${CMAKE_VERSION} VERSION_GREATER 2.8.4)
14     # use official include provided by latest CMake
15     include(GNUInstallDirs)
16 else(${CMAKE_VERSION} VERSION_GREATER 2.8.4)
17     # backward compatibility: use our own module for older cmake versions
18     include(OldGNUInstallDirs)
19 endif(${CMAKE_VERSION} VERSION_GREATER 2.8.4)
20
21 # Warning when build is not an out-of-source build.
22 string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_BINARY_DIR}" InSourceBuild)
23 if(InSourceBuild)
24     message(WARNING  "Avoid building inside the source tree!")
25     message(WARNING  "Create a separate build directory instead (i.e. 'fgbuild') and call CMake from there: ")
26     message(WARNING  "  mkdir ../fgbuild && cd ../fgbuild && cmake ${CMAKE_SOURCE_DIR}")
27 endif(InSourceBuild)
28
29 set(CMAKE_DEBUG_POSTFIX          "d" CACHE STRING "add a postfix, usually d on windows")
30 set(CMAKE_RELEASE_POSTFIX        ""  CACHE STRING "add a postfix, usually empty on windows")
31 set(CMAKE_RELWITHDEBINFO_POSTFIX ""  CACHE STRING "add a postfix, usually empty on windows")
32 set(CMAKE_MINSIZEREL_POSTFIX     ""  CACHE STRING "add a postfix, usually empty on windows")
33
34 # read 'version' file into a variable (stripping any newlines or spaces)
35 file(READ version versionFile)
36 string(STRIP ${versionFile} FLIGHTGEAR_VERSION)
37
38 # FlightGear packaging (to build a source tarball)
39 include( ConfigureCPack )
40
41 # FlightGear base package path
42 if (FG_DATA_DIR)
43     message(STATUS "Using explicit data directory for base package: ${FG_DATA_DIR}")
44 else()
45     set(FG_DATA_DIR "${CMAKE_INSTALL_PREFIX}/lib/FlightGear" CACHE PATH "Default location where data files are located")
46     message(STATUS "Using default data directory for base package:  ${FG_DATA_DIR}")
47 endif()
48
49 # Change the default build type to something fast
50 if(NOT CMAKE_BUILD_TYPE)
51     set(CMAKE_BUILD_TYPE Release CACHE STRING
52         "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel."
53         FORCE)
54 endif(NOT CMAKE_BUILD_TYPE)
55
56 if(NOT "$ENV{BUILD_ID}" STREQUAL "")
57     set(HUDSON_BUILD_ID $ENV{BUILD_ID})
58     set(HUDSON_BUILD_NUMBER $ENV{BUILD_NUMBER})
59     message(STATUS "running under Hudson, build-number is ${HUDSON_BUILD_NUMBER}")
60 else()
61     set(HUDSON_BUILD_NUMBER 0)
62     set(HUDSON_BUILD_ID "none")
63 endif()
64
65 IF(APPLE)
66     set(EVENT_INPUT_DEFAULT 1)
67
68     find_library(CORESERVICES_LIBRARY CoreServices)
69     find_library(COCOA_LIBRARY Cocoa)
70     list(APPEND PLATFORM_LIBS ${COCOA_LIBRARY} ${CORESERVICES_LIBRARY})
71
72 elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
73     find_package(UDev)
74
75     if(UDEV_FOUND)
76         set(EVENT_INPUT_DEFAULT 1)
77     endif(UDEV_FOUND)
78 endif()
79
80 find_package(Git)
81 if (GIT_FOUND)
82     execute_process(COMMAND git --git-dir ${PROJECT_SOURCE_DIR}/.git rev-parse  HEAD
83         OUTPUT_VARIABLE REVISION
84         OUTPUT_STRIP_TRAILING_WHITESPACE)
85     message(STATUS "Git revision is ${REVISION}")
86 else()
87     set(REVISION "none")
88 endif()
89
90 option(LOGGING           "Set to OFF to build FlightGear without logging" ON)
91 option(SP_FDMS           "Set to ON to build FlightGear with special-purpose FDMs" OFF)
92 option(ENABLE_UIUC_MODEL "Set to ON to build FlightGear with UIUCModel FDM" OFF)
93 option(ENABLE_LARCSIM    "Set to ON to build FlightGear with LaRCsim FDM" OFF)
94 option(ENABLE_YASIM      "Set to ON to build FlightGear with YASIM FDM" ON)
95 option(ENABLE_JSBSIM     "Set to ON to build FlightGear with JSBSim FDM" ON)
96 option(ENABLE_FGADMIN    "Set to ON to build FlightGear with FGADMIN" ON)
97 option(EVENT_INPUT       "Set to ON to build FlightGear with event-based Input support" ${EVENT_INPUT_DEFAULT})
98 option(ENABLE_LIBSVN     "Set to ON to build FlightGear/terrasync with libsvnclient support" ON)
99 option(ENABLE_RTI        "Set to ON to build SimGear with RTI support" OFF)
100 option(WITH_FGPANEL      "Set to ON to build the fgpanel application" ON)
101 option(JPEG_FACTORY      "Enable JPEG-factory support" OFF)
102 option(ENABLE_TESTS      "Set to OFF to disable building test applications" ON)
103
104 if(LOGGING)
105     # nothing
106 else()
107     set(FG_NDEBUG 1)
108 endif()
109
110 if(SP_FDMS)
111     set(ENABLE_SP_FDM 1)
112 endif()
113
114 # Setup MSVC 3rd party directories
115 include( ConfigureMsvc3rdParty )
116
117 if(EVENT_INPUT)
118     if(APPLE)
119     elseif(CMAKE_SYSTEM_NAME MATCHES "Linux")
120         if(NOT UDEV_FOUND)
121             message(WARNING "UDev not found, event input is disabled!")
122             set(EVENT_INPUT 0)
123         else()
124             set(EVENT_INPUT_LIBRARIES ${UDEV_LIBRARIES})
125             message(STATUS "event-based input enabled. Using ${UDEV_LIBRARIES}")
126         endif()
127     else()
128         message(WARNING "event-based input is not supported on this platform yet")
129     endif()
130
131     # Keep PLIB INPUT enabled as long as EventInput does not replace current joystick configurations.
132     set(ENABLE_PLIB_JOYSTICK 1)
133 else(EVENT_INPUT)
134     set(ENABLE_PLIB_JOYSTICK 1)
135 endif(EVENT_INPUT)
136
137 # check required dependencies
138 find_package(Boost   REQUIRED)
139 find_package(ZLIB    REQUIRED)
140 find_package(Threads REQUIRED)
141 find_package(OpenGL  REQUIRED)
142 find_package(OpenAL  REQUIRED)
143 find_package(ALUT    REQUIRED)
144 find_package(OpenSceneGraph 3.0.0 REQUIRED osgText osgSim osgDB osgParticle osgFX osgUtil osgViewer osgGA)
145
146 if(ENABLE_FGADMIN)
147     find_package(FLTK)
148
149     if ( FLTK_FOUND )
150         if ( X11_Xinerama_FOUND )
151             message(STATUS "Found X11_Xinerama...")
152             list(APPEND FLTK_LIBRARIES ${X11_Xinerama_LIB})
153         endif()
154
155         if ( X11_Xft_FOUND )
156             message(STATUS "Found X11_Xft...")
157             list(APPEND FLTK_LIBRARIES ${X11_Xft_LIB})
158         endif()
159
160         message(STATUS "Using FLTK_LIBRARIES for fgadmin: ${FLTK_LIBRARIES}")
161     endif ( FLTK_FOUND )
162 endif(ENABLE_FGADMIN)
163
164 if(ENABLE_LIBSVN)
165     find_package(SvnClient)
166
167     if(LIBSVN_FOUND)
168         message(STATUS "libsvn found, enabling in terrasync")
169         set(HAVE_SVN_CLIENT_H 1)
170         set(HAVE_LIBSVN_CLIENT_1 1)
171     else()
172         message(STATUS "libsvn missing. Disabling...")
173     endif(LIBSVN_FOUND)
174 endif(ENABLE_LIBSVN)
175
176 find_package(PLIB REQUIRED puaux pu js fnt)
177
178 # FlightGear and SimGear versions need to match
179 find_package(SimGear ${FLIGHTGEAR_VERSION} REQUIRED)
180
181 if (JPEG_FACTORY)
182     # check simgear was built with JPEG-factory support
183     find_package(JPEG REQUIRED)
184     include_directories(${JPEG_INCLUDE_DIR})
185
186     set(CMAKE_REQUIRED_INCLUDES
187         ${SIMGEAR_INCLUDE_DIR}
188         ${JPEG_INCLUDE_DIR}
189         ${OPENSCENEGRAPH_INCLUDE_DIRS})
190
191     check_cxx_source_compiles(
192         "#include <simgear/screen/jpgfactory.hxx>
193         int main()    { return 0; } "
194         FG_JPEG_SERVER)
195
196     if (NOT FG_JPEG_SERVER)
197         message(STATUS "JPEG server support requested, but SimGear was built without JPEG support")
198     endif()
199 endif()
200
201 check_include_file(unistd.h   HAVE_UNISTD_H)
202 check_include_file(sys/time.h HAVE_SYS_TIME_H)
203 check_include_file(windows.h  HAVE_WINDOWS_H)
204
205 if(ENABLE_RTI)
206     find_package(RTI)
207     if(RTI_FOUND)
208         set(FG_HAVE_HLA 1)
209     endif(RTI_FOUND)
210 endif(ENABLE_RTI)
211
212 if(CMAKE_COMPILER_IS_GNUCXX)
213     set(WARNING_FLAGS_CXX "-Wall")
214     set(WARNING_FLAGS_C   "-Wall")
215 endif(CMAKE_COMPILER_IS_GNUCXX)
216
217 if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") 
218    set (WARNING_FLAGS_CXX "-Wall -Wno-overloaded-virtual")
219    set (WARNING_FLAGS_C   "-Wall")
220 endif() 
221
222 if(WIN32)
223
224     if(MSVC)
225         # turn off various warnings
226         # foreach(warning 4244 4251 4267 4275 4290 4786 4305 4996)
227         #     SET(WARNING_FLAGS "${WARNING_FLAGS} /wd${warning}")
228         # endforeach(warning)
229
230         set(MSVC_FLAGS "-DNOMINMAX -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D__CRT_NONSTDC_NO_WARNINGS")
231         if (${MSVC_VERSION} EQUAL 1600)
232             set( MSVC_LD_FLAGS "/FORCE:MULTIPLE" )
233         endif (${MSVC_VERSION} EQUAL 1600)
234     endif(MSVC)
235
236     set(NOMINMAX 1)
237 endif(WIN32)
238
239 set (BOOST_CXX_FLAGS "-DBOOST_MULTI_INDEX_DISABLE_SERIALIZATION -DBOOST_BIMAP_DISABLE_SERIALIZATION")
240
241 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WARNING_FLAGS_C} ${MSVC_FLAGS} -D_REENTRANT")
242 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNING_FLAGS_CXX} ${MSVC_FLAGS} -D_REENTRANT ${BOOST_CXX_FLAGS}")
243 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${MSVC_LD_FLAGS}")
244
245 include_directories(${OPENSCENEGRAPH_INCLUDE_DIRS}
246     ${Boost_INCLUDE_DIRS}
247     ${ZLIB_INCLUDE_DIR}
248     ${ALUT_INCLUDE_DIR}
249     ${OPENGL_INCLUDE_DIR}
250     ${OPENAL_INCLUDE_DIR}
251     ${SIMGEAR_INCLUDE_DIR}
252     ${PLIB_INCLUDE_DIR} )
253
254 include_directories(${PROJECT_SOURCE_DIR}/src)
255
256 # following is needed, because config.h is include 'bare', whereas
257 # version.h is included as <Include/version.h> - this should be cleaned up
258 include_directories(${PROJECT_BINARY_DIR}/src)
259 include_directories(${PROJECT_BINARY_DIR}/src/Include)
260
261 add_definitions(-DHAVE_CONFIG_H)
262
263 check_function_exists(mkfifo HAVE_MKFIFO)
264
265 # configure a header file to pass some of the CMake settings
266 # to the source code
267 configure_file (
268     "${PROJECT_SOURCE_DIR}/src/Include/config_cmake.h.in"
269     "${PROJECT_BINARY_DIR}/src/Include/config.h"
270 )
271
272 #and the same for the version header
273 configure_file (
274     "${PROJECT_SOURCE_DIR}/src/Include/version.h.cmake-in"
275     "${PROJECT_BINARY_DIR}/src/Include/version.h"
276 )
277
278 add_subdirectory(src)
279 add_subdirectory(utils)
280 add_subdirectory(man)
281
282 #-----------------------------------------------------------------------------
283 ### uninstall target
284 #-----------------------------------------------------------------------------
285 CONFIGURE_FILE(
286     "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
287     "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
288     IMMEDIATE @ONLY)
289 ADD_CUSTOM_TARGET(uninstall
290     "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")