37 |
37 |
38 set(FPFLAGS "" CACHE STRING "Additional Freepascal flags") |
38 set(FPFLAGS "" CACHE STRING "Additional Freepascal flags") |
39 set(GHFLAGS "" CACHE STRING "Additional Haskell flags") |
39 set(GHFLAGS "" CACHE STRING "Additional Haskell flags") |
40 if(UNIX AND NOT APPLE) |
40 if(UNIX AND NOT APPLE) |
41 set(DATA_INSTALL_DIR "share/hedgewars" CACHE STRING "Resource folder path") |
41 set(DATA_INSTALL_DIR "share/hedgewars" CACHE STRING "Resource folder path") |
42 endif() |
|
43 |
|
44 |
|
45 #detect Mercurial revision and init rev/hash information |
|
46 find_program(HGCOMMAND hg) |
|
47 if(HGCOMMAND AND (EXISTS ${CMAKE_SOURCE_DIR}/.hg)) |
|
48 execute_process(COMMAND ${HGCOMMAND} identify -in |
|
49 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} |
|
50 OUTPUT_VARIABLE internal_version |
|
51 ERROR_QUIET |
|
52 ) |
|
53 #check local repo status |
|
54 string(REGEX REPLACE "[^+]" "" HGCHANGED ${internal_version}) |
|
55 string(REGEX REPLACE "[0-9a-zA-Z]+(.*) ([0-9]+)(.*)" "\\2" HEDGEWARS_REVISION ${internal_version}) |
|
56 string(REGEX REPLACE "([0-9a-zA-Z]+)(.*) [0-9]+(.*)" "\\1" HEDGEWARS_HASH ${internal_version}) |
|
57 |
|
58 if(HGCHANGED) |
|
59 message(${WARNING} "You have uncommitted changes in your repository!") |
|
60 endif() |
|
61 #let's assume that if you have hg you might be interested in debugging |
|
62 set(default_build_type "DEBUG") |
|
63 #write down hash and rev for easy picking should hg be missing |
|
64 file(WRITE "${CMAKE_SOURCE_DIR}/share/version_info.txt" "Hedgewars versioning information, do not modify\nrev ${HEDGEWARS_REVISION}\nhash ${HEDGEWARS_HASH}\n") |
|
65 else() |
|
66 set(default_build_type "RELEASE") |
|
67 # when compiling outside rev control, fetch revision and hash information from version_info.txt |
|
68 find_file(version_info version_info.txt PATH ${CMAKE_SOURCE_DIR}/share) |
|
69 if(version_info) |
|
70 file(STRINGS ${version_info} internal_version REGEX "rev") |
|
71 string(REGEX REPLACE "rev ([0-9]*)" "\\1" HEDGEWARS_REVISION ${internal_version}) |
|
72 file(STRINGS ${version_info} internal_version REGEX "hash") |
|
73 string(REGEX REPLACE "hash ([a-zA-Z0-9]*)" "\\1" HEDGEWARS_HASH ${internal_version}) |
|
74 else() |
|
75 message(${WARNING} "${CMAKE_SOURCE_DIR}/share/version_info.txt not found, revision information " |
|
76 "will be incorrect!!! Contact your source provider to fix this!") |
|
77 set(HEDGEWARS_REVISION "0000") |
|
78 set(HEDGEWARS_HASH "unknown") |
|
79 endif() |
|
80 endif() |
42 endif() |
81 |
43 |
82 |
44 |
83 #versioning |
45 #versioning |
84 set(CPACK_PACKAGE_VERSION_MAJOR 0) |
46 set(CPACK_PACKAGE_VERSION_MAJOR 0) |
85 set(CPACK_PACKAGE_VERSION_MINOR 9) |
47 set(CPACK_PACKAGE_VERSION_MINOR 9) |
86 set(CPACK_PACKAGE_VERSION_PATCH 20) |
48 set(CPACK_PACKAGE_VERSION_PATCH 20) |
87 set(HEDGEWARS_PROTO_VER 46) |
49 set(HEDGEWARS_PROTO_VER 46) |
88 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") |
50 set(HEDGEWARS_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}") |
|
51 include(${CMAKE_MODULE_PATH}/revinfo.cmake) |
89 |
52 |
90 message(STATUS "Building ${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION} (${HEDGEWARS_HASH})") |
53 message(STATUS "Building ${HEDGEWARS_VERSION}-r${HEDGEWARS_REVISION} (${HEDGEWARS_HASH})") |
91 |
54 |
92 |
55 |
93 #where to build libs and bins |
56 #where to build libs and bins |
120 set(HEDGEWARS_FULL_DATADIR "${CMAKE_INSTALL_PREFIX}/") |
83 set(HEDGEWARS_FULL_DATADIR "${CMAKE_INSTALL_PREFIX}/") |
121 link_directories("${EXECUTABLE_OUTPUT_PATH}" "${CMAKE_SOURCE_DIR}/misc/winutils/bin") |
84 link_directories("${EXECUTABLE_OUTPUT_PATH}" "${CMAKE_SOURCE_DIR}/misc/winutils/bin") |
122 endif() |
85 endif() |
123 endif() |
86 endif() |
124 |
87 |
125 |
88 #platform specific init code |
126 if(APPLE) |
89 include(${CMAKE_MODULE_PATH}/platform.cmake) |
127 set(CMAKE_FIND_FRAMEWORK "FIRST") |
|
128 |
|
129 #what system are we building for |
|
130 set(minimum_macosx_version $ENV{MACOSX_DEPLOYMENT_TARGET}) |
|
131 |
|
132 #detect on which system we are: if sw_vers cannot be found for any reason (re)use minimum_macosx_version |
|
133 find_program(sw_vers sw_vers) |
|
134 if(sw_vers) |
|
135 execute_process(COMMAND ${sw_vers} "-productVersion" |
|
136 OUTPUT_VARIABLE current_macosx_version |
|
137 OUTPUT_STRIP_TRAILING_WHITESPACE) |
|
138 string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" current_macosx_version ${current_macosx_version}) |
|
139 else() |
|
140 if(NOT minimum_macosx_version) |
|
141 message(FATAL_ERROR "sw_vers not found! Need explicit MACOSX_DEPLOYMENT_TARGET variable set") |
|
142 else() |
|
143 message(${WARNING} "sw_vers not found! Fallback to MACOSX_DEPLOYMENT_TARGET variable") |
|
144 set(current_macosx_version ${minimum_macosx_version}) |
|
145 endif() |
|
146 endif() |
|
147 |
|
148 #if nothing is set, we deploy only for the current system |
|
149 if(NOT minimum_macosx_version) |
|
150 set(minimum_macosx_version ${current_macosx_version}) |
|
151 endif() |
|
152 |
|
153 #lower systems don't have enough processing power anyway |
|
154 if (minimum_macosx_version VERSION_LESS "10.4") |
|
155 message(FATAL_ERROR "Hedgewars is not supported on Mac OS X pre-10.4") |
|
156 endif() |
|
157 |
|
158 #workaround for http://playcontrol.net/ewing/jibberjabber/big_behind-the-scenes_chang.html#SDL_mixer (Update 2) |
|
159 if(current_macosx_version VERSION_EQUAL "10.4") |
|
160 find_package(SDL_mixer REQUIRED) |
|
161 set(DYLIB_SMPEG "-dylib_file @loader_path/Frameworks/smpeg.framework/Versions/A/smpeg:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/smpeg.framework/Versions/A/smpeg") |
|
162 set(DYLIB_MIKMOD "-dylib_file @loader_path/Frameworks/mikmod.framework/Versions/A/mikmod:${SDLMIXER_LIBRARY}/Versions/A/Frameworks/mikmod.framework/Versions/A/mikmod") |
|
163 set(CMAKE_C_FLAGS "${DYLIB_SMPEG} ${DYLIB_MIKMOD}") |
|
164 list(APPEND pascal_flags "-k${DYLIB_SMPEG}" "-k${DYLIB_MIKMOD}") |
|
165 endif() |
|
166 |
|
167 #CMAKE_OSX_ARCHITECTURES and CMAKE_OSX_SYSROOT need to be set for universal binary and correct linking |
|
168 if(NOT CMAKE_OSX_ARCHITECTURES) |
|
169 if(current_macosx_version VERSION_LESS "10.6") |
|
170 if(${CMAKE_SYSTEM_PROCESSOR} MATCHES "powerpc*") |
|
171 set(CMAKE_OSX_ARCHITECTURES "ppc7400") |
|
172 else() |
|
173 set(CMAKE_OSX_ARCHITECTURES "i386") |
|
174 endif() |
|
175 else() |
|
176 set(CMAKE_OSX_ARCHITECTURES "x86_64") |
|
177 endif() |
|
178 endif() |
|
179 |
|
180 #CMAKE_OSX_SYSROOT is set at the system version we are supposed to build on |
|
181 #we need to provide the correct one when host and target differ |
|
182 if(NOT ${minimum_macosx_version} VERSION_EQUAL ${current_macosx_version}) |
|
183 if(minimum_macosx_version VERSION_EQUAL "10.4") |
|
184 set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.4u.sdk/") |
|
185 set(CMAKE_C_COMPILER "/Developer/usr/bin/gcc-4.0") |
|
186 set(CMAKE_CXX_COMPILER "/Developer/usr/bin/g++-4.0") |
|
187 else() |
|
188 string(REGEX REPLACE "([0-9]+.[0-9]+).[0-9]+" "\\1" sdk_version ${minimum_macosx_version}) |
|
189 set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX${sdk_version}.sdk/") |
|
190 endif() |
|
191 endif() |
|
192 |
|
193 #add user framework directory, other paths can be passed via FPFLAGS |
|
194 list(APPEND pascal_flags "-Ff~/Library/Frameworks") |
|
195 #set deployment target |
|
196 list(APPEND pascal_flags "-k-macosx_version_min" "-k${minimum_macosx_version}" "-XR${CMAKE_OSX_SYSROOT}") |
|
197 endif(APPLE) |
|
198 |
90 |
199 |
91 |
200 #when build type is not specified, assume Debug/Release according to build version information |
92 #when build type is not specified, assume Debug/Release according to build version information |
201 if (CMAKE_BUILD_TYPE) |
93 if (CMAKE_BUILD_TYPE) |
202 string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE) |
94 string (TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE) |
209 endif (CMAKE_BUILD_TYPE) |
101 endif (CMAKE_BUILD_TYPE) |
210 |
102 |
211 |
103 |
212 #set default flags values for all projects (unless MINIMAL_FLAGS is true) |
104 #set default flags values for all projects (unless MINIMAL_FLAGS is true) |
213 if(NOT ${MINIMAL_FLAGS}) |
105 if(NOT ${MINIMAL_FLAGS}) |
214 if(WINDOWS) |
|
215 #this flags prevents a few dll hell problems |
|
216 set(CMAKE_C_FLAGS "-static-libgcc ${CMAKE_C_FLAGS}") |
|
217 endif(WINDOWS) |
|
218 set(CMAKE_C_FLAGS "-pipe ${CMAKE_C_FLAGS}") |
106 set(CMAKE_C_FLAGS "-pipe ${CMAKE_C_FLAGS}") |
219 set(CMAKE_C_FLAGS_RELEASE "-w -Os -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}") |
107 set(CMAKE_C_FLAGS_RELEASE "-w -Os -fomit-frame-pointer ${CMAKE_C_FLAGS_RELEASE}") |
220 set(CMAKE_C_FLAGS_DEBUG "-Wall -O0 -g -DDEBUG ${CMAKE_C_FLAGS_DEBUG}") |
108 set(CMAKE_C_FLAGS_DEBUG "-Wall -O0 -g -DDEBUG ${CMAKE_C_FLAGS_DEBUG}") |
221 set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS}) |
109 set(CMAKE_CXX_FLAGS ${CMAKE_C_FLAGS}) |
222 set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}) |
110 set(CMAKE_CXX_FLAGS_RELEASE ${CMAKE_C_FLAGS_RELEASE}) |