Statistics
| Revision:

gvsig-raster / org.gvsig.raster.ermapper / trunk / org.gvsig.raster.ermapper / org.gvsig.raster.ermapper.jni / CMakeModules / GeneralMacros.cmake @ 2449

History | View | Annotate | Download (13.4 KB)

1
MACRO(CONFIGURE_DEFAULTS)
2
    # Looking for arch extension!
3
    SET(LIB_POSTFIX "32")
4
    IF(UNIX)
5
	    IF(NOT APPLE)
6
		    IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
7
      		    SET(LIB_POSTFIX "64")
8
  		    ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
9
	    ENDIF(NOT APPLE)
10
    ELSE(UNIX)
11
	    IF(CMAKE_SYSTEM_NAME MATCHES Windows)
12
		    IF(CMAKE_CL_64)
13
      		    SET(LIB_POSTFIX "64")
14
		    ENDIF(CMAKE_CL_64)	
15
	    ENDIF(CMAKE_SYSTEM_NAME MATCHES Windows)
16
    ENDIF(UNIX)
17
	# This is for an advanced option to give aggressive warnings
18
	# under different compilers. If yours is not implemented, this option
19
	# will not be made available.
20
	IF(CMAKE_COMPILER_IS_GNUCXX)
21
	    # To be complete, we might also do GNUCC flags,
22
	    # but everything here is C++ code.
23
	    # -Wshadow and -Woverloaded-virtual are also interesting flags, but OSG
24
	    # returns too many hits.
25
	    # FYI, if we do implement GNUCC, then -Wmissing-prototypes in another
26
	    # interesting C-specific flag.
27
	    # Also, there is a bug in gcc 4.0. Under C++, -pedantic will create
28
	    # errors instead of warnings for certain issues, including superfluous
29
	    # semicolons and commas, and the use of long long. -fpermissive seems
30
	    # to be the workaround.
31
	    SET(AGGRESSIVE_WARNING_FLAGS "-Wall -Wparentheses -Wformat=2 -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused")
32
		#IF(NOT APPLE)
33
		#	SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-fpermissive")
34
		#ENDIF(NOT APPLE)
35
	ELSE(CMAKE_COMPILER_IS_GNUCXX)
36
	    IF(MSVC)
37
	        # FIXME: What are good aggressive warning flags for Visual Studio?
38
	        # And do we need to further subcase this for different versions of VS?
39
	        # CMake variables: MSVC60, MSVC70, MSVC71, MSVC80, CMAKE_COMPILER_2005
40
	        SET(AGGRESSIVE_WARNING_FLAGS "/Wall /W4")
41

    
42

    
43
	    ELSE(MSVC)
44
	        # CMake lacks an elseif, so other non-gcc, non-VS compilers need
45
	        # to be listed below. If unhandled, OSG_AGGRESSIVE_WARNING_FLAGS should
46
	        # remain unset.
47
	    ENDIF(MSVC)
48
	ENDIF(CMAKE_COMPILER_IS_GNUCXX)
49

    
50
	# This part is for the CMake menu option to toggle the warnings on/off.
51
	# This will only be made available if we set values for OSG_AGGRESSIVE_WARNING_FLAGS.
52
	IF(AGGRESSIVE_WARNING_FLAGS)
53
	    OPTION(USE_AGGRESSIVE_WARNINGS "Enable to activate aggressive warnings" OFF)
54
	    MARK_AS_ADVANCED(USE_AGGRESSIVE_WARNINGS)
55

    
56
	    IF(USE_AGGRESSIVE_WARNINGS)
57
	        IF(NOT "${OLD_CMAKE_CXX_FLAGS_WAS_SET}")
58
	            SET(OLD_CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE INTERNAL "Old CXX flags")
59
	            SET(OLD_CMAKE_CXX_FLAGS_WAS_SET 1 CACHE INTERNAL "Old CXX flags was set")
60
	            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${AGGRESSIVE_WARNING_FLAGS}" CACHE STRING "Flags used by the compiler during all build types." FORCE)
61
	        ENDIF(NOT "${OLD_CMAKE_CXX_FLAGS_WAS_SET}")
62
	    ELSE(USE_AGGRESSIVE_WARNINGS)
63
	        # FIXME: This will lose any changes made after OLD_CMAKE_CXX_FLAGS was
64
	        # set. The better way would be to parse the string and remove each
65
	        # option explicitly.
66
	        IF("${OLD_CMAKE_CXX_FLAGS_WAS_SET}")
67
	            SET(CMAKE_CXX_FLAGS "${OLD_CMAKE_CXX_FLAGS}" CACHE STRING "Flags used by the compiler during all build types." FORCE)
68
	            SET(OLD_CMAKE_CXX_FLAGS_WAS_SET 0 CACHE INTERNAL "Old CXX flags was set")
69
	        ENDIF("${OLD_CMAKE_CXX_FLAGS_WAS_SET}")
70
	    ENDIF(USE_AGGRESSIVE_WARNINGS)
71
	ENDIF(AGGRESSIVE_WARNING_FLAGS)
72

    
73
	# Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
74
	# and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
75
	IF(APPLE)
76
	    # These are just defaults/recommendations, but how we want to build
77
	    # out of the box. But the user needs to be able to change these options.
78
	    # So we must only set the values the first time CMake is run, or we
79
	    # will overwrite any changes the user sets.
80
	    # FORCE is used because the options are not reflected in the UI otherwise.
81
	    # Seems like a good place to add version specific compiler flags too.
82
	    IF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
83
	        # This is really fragile, but CMake doesn't provide the OS system
84
	        # version information we need. (Darwin versions can be changed
85
	        # independently of OS X versions.)
86
	        # It does look like CMake handles the CMAKE_OSX_SYSROOT automatically.
87
	        IF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
88
	            #SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX")
89
				SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX")
90
	            SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
91
	        ELSE(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
92
	            IF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
93
	                SET(CMAKE_OSX_ARCHITECTURES "ppc;i386" CACHE STRING "Build architectures for OSX" FORCE)
94
	                SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.4 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
95
	            ELSE(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
96
	                # No Universal Binary support
97
	                # Should break down further to set the -mmacosx-version-min,
98
	                # but the SDK detection is too unreliable here.
99
	            ENDIF(EXISTS /Developer/SDKs/MacOSX10.4u.sdk)
100
	        ENDIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
101
	    ENDIF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
102
    	SET(CMAKE_INSTALL_NAME_DIR @executable_path/../Resources/NativeLibs CACHE STRING "Executable Path for MacOS X" FORCE)
103
	    MARK_AS_ADVANCED(CMAKE_INSTALL_NAME_DIR)
104
	ENDIF(APPLE)
105
	
106
	SET(OUTPUT_BINDIR ${CMAKE_BINARY_DIR}/bin)
107
	MAKE_DIRECTORY(${OUTPUT_BINDIR})
108

    
109
	SET(OUTPUT_LIBDIR ${CMAKE_BINARY_DIR}/lib)
110
	MAKE_DIRECTORY(${OUTPUT_LIBDIR})
111
	IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
112
	    # If CMake >= 2.6.0
113
	    SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
114
	    SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
115
	    IF(WIN32)
116
	        SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
117
	    ELSE(WIN32)
118
	        SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
119
	    ENDIF(WIN32)
120
	ELSE(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
121
	    SET(EXECUTABLE_OUTPUT_PATH ${OUTPUT_BINDIR})
122
	    SET(LIBRARY_OUTPUT_PATH ${OUTPUT_LIBDIR})
123
	ENDIF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION GREATER 4)
124
	
125
ENDMACRO(CONFIGURE_DEFAULTS)
126

    
127
MACRO(CONFIGURE_END)
128
	# This needs to be run very last so other parts of the scripts can take
129
	# advantage of this.
130
	IF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
131
	    SET(CONFIG_HAS_BEEN_RUN_BEFORE 1 CACHE INTERNAL "Flag to track whether this is the first time running CMake or if CMake has been configured before")
132
	ENDIF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
133
ENDMACRO(CONFIGURE_END)
134

    
135
MACRO(SETUP_CORELIB CORELIB_NAME)
136
	IF(COMPILE_STATIC)
137
		ADD_LIBRARY(${CORELIB_NAME}
138
			STATIC
139
			${HEADERS}
140
			${SOURCES}
141
		)
142
	ELSE(COMPILE_STATIC)
143
		ADD_LIBRARY(${CORELIB_NAME}
144
			SHARED
145
			${HEADERS}
146
			${SOURCES}
147
		)
148
	ENDIF(COMPILE_STATIC)
149

    
150
	TARGET_LINK_LIBRARIES(${CORELIB_NAME} ${LIBRARIES})
151

    
152
	IF(LIBRARIES_OPTIMIZED)
153
		FOREACH(LIBOPT ${LIBRARIES_OPTIMIZED})
154
			TARGET_LINK_LIBRARIES(${CORELIB_NAME} optimized ${LIBOPT})
155
		ENDFOREACH(LIBOPT)
156
	ENDIF(LIBRARIES_OPTIMIZED)
157

    
158
	IF(LIBRARIES_DEBUG)
159
		FOREACH(LIBDEBUG ${LIBRARIES_DEBUG})
160
			TARGET_LINK_LIBRARIES(${CORELIB_NAME} debug ${LIBDEBUG})
161
		ENDFOREACH(LIBDEBUG)
162
	ENDIF(LIBRARIES_DEBUG)
163

    
164
	SET_TARGET_PROPERTIES(${CORELIB_NAME}
165
		PROPERTIES
166
		PROJECT_LABEL "Core ${CORELIB_NAME}"
167
	)
168
	IF(WIN32)
169
		INSTALL(TARGETS ${CORELIB_NAME}
170
			RUNTIME DESTINATION bin
171
			ARCHIVE DESTINATION lib
172
		)
173
	ELSE(WIN32)
174
		INSTALL(TARGETS ${CORELIB_NAME}
175
			LIBRARY DESTINATION lib
176
			ARCHIVE DESTINATION lib
177
		)
178
	ENDIF(WIN32)
179
	
180
	IF(UNIX AND NOT APPLE)
181
		SET_TARGET_PROPERTIES ( ${CORELIB_NAME} PROPERTIES LINK_FLAGS "-Wl,-E")
182
	ENDIF(UNIX AND NOT APPLE)
183

    
184
	IF(VERSION)
185
		#SET_TARGET_PROPERTIES(${CORELIB_NAME} PROPERTIES VERSION "${VERSION}")
186
		SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES OUTPUT_NAME "${CORELIB_NAME}${VERSION}")
187
	ENDIF(VERSION)
188

    
189
ENDMACRO(SETUP_CORELIB)
190

    
191
MACRO(SETUP_JNILIB JNILIB_NAME)
192

    
193
	ADD_LIBRARY(${JNILIB_NAME}
194
		SHARED
195
		${HEADERS}
196
		${SOURCES}
197
	)
198

    
199
	TARGET_LINK_LIBRARIES(${JNILIB_NAME} ${LIBRARIES})
200

    
201
	IF(LIBRARIES_OPTIMIZED)
202
		FOREACH(LIBOPT ${LIBRARIES_OPTIMIZED})
203
			TARGET_LINK_LIBRARIES(${JNILIB_NAME} optimized ${LIBOPT})
204
		ENDFOREACH(LIBOPT)
205
	ENDIF(LIBRARIES_OPTIMIZED)
206

    
207
	IF(LIBRARIES_DEBUG)
208
		FOREACH(LIBDEBUG ${LIBRARIES_DEBUG})
209
			TARGET_LINK_LIBRARIES(${JNILIB_NAME} debug ${LIBDEBUG})
210
		ENDFOREACH(LIBDEBUG)
211
	ENDIF(LIBRARIES_DEBUG)
212
	
213
	IF(APPLE)
214
		SET_TARGET_PROPERTIES(${JNILIB_NAME}
215
    	PROPERTIES
216
    	SUFFIX .jnilib)
217
	ENDIF(APPLE)
218
	
219

    
220
	SET_TARGET_PROPERTIES(${JNILIB_NAME}
221
		PROPERTIES
222
		PROJECT_LABEL "JNI ${JNILIB_NAME}"
223
	)
224

    
225
	IF(WIN32)
226
		INSTALL(TARGETS ${JNILIB_NAME}
227
			RUNTIME DESTINATION bin
228
			ARCHIVE DESTINATION lib
229
		)
230
	ELSE(WIN32)
231
		INSTALL(TARGETS ${JNILIB_NAME}
232
			LIBRARY DESTINATION lib
233
		)
234
	ENDIF(WIN32)
235
	
236
	IF(UNIX AND NOT APPLE)
237
		SET_TARGET_PROPERTIES (${JNILIB_NAME} PROPERTIES LINK_FLAGS "-Wl,-E")
238
	ENDIF(UNIX AND NOT APPLE)
239
	
240
	IF(VERSION)
241
		#SET_TARGET_PROPERTIES(${CORELIB_NAME} PROPERTIES VERSION "${VERSION}")
242
		SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES OUTPUT_NAME "${JNILIB_NAME}${VERSION}")
243
	ENDIF(VERSION)
244
	
245
ENDMACRO(SETUP_JNILIB)
246

    
247
MACRO(SETUP_EXECUTABLE EXECUTABLE_NAME)
248

    
249
	IF(IS_APPLICATION)
250
		IF(APPLE)
251
		    # SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${CRSFX_MAJOR_VERSION}.${CRSFX_MINOR_VERSION}.${CRSFXCRSFX_PATCH_VERSION}")
252
		    # Short Version is the "marketing version". It is the version
253
		    # the user sees in an information panel.
254
		    SET(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VERSION}")
255
		    # Bundle version is the version the OS looks at.
256
		    SET(MACOSX_BUNDLE_BUNDLE_VERSION "${VERSION}")
257
		    SET(MACOSX_BUNDLE_GUI_IDENTIFIER "${EXECUTABLE_NAME}" )
258
		    SET(MACOSX_BUNDLE_BUNDLE_NAME "${EXECUTABLE_NAME}" )
259
		    # SET(MACOSX_BUNDLE_ICON_FILE "myicon.icns")
260
		    # SET(MACOSX_BUNDLE_COPYRIGHT "")
261
		    # SET(MACOSX_BUNDLE_INFO_STRING "Info string, localized?")
262
			SET(PLATFORM_SPECIFIC_CONTROL MACOSX_BUNDLE)
263
		ENDIF(APPLE)
264

    
265
		IF(WIN32)
266
		    IF (REQUIRE_WINMAIN_FLAG)
267
		        SET(PLATFORM_SPECIFIC_CONTROL WIN32)
268
		    ENDIF(REQUIRE_WINMAIN_FLAG)
269
		ENDIF(WIN32)
270
	
271
		ADD_EXECUTABLE(${EXECUTABLE_NAME} ${PLATFORM_SPECIFIC_CONTROL} ${SOURCES} ${HEADERS})
272
		IF(APPLE AND INSTALL_DEPENDENCIES)
273
		    SETUP_BUNDLE_DEPENDENCIES(${EXECUTABLE_NAME})
274
		ENDIF(APPLE AND INSTALL_DEPENDENCIES)
275
	ELSE(IS_APPLICATION)
276
		ADD_EXECUTABLE(${EXECTUABLE_NAME} ${SOURCES} ${HEADERS})
277
	ENDIF(IS_APPLICATION)
278

    
279
	TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} ${LIBRARIES})
280
	IF(LIBRARIES_OPTIMIZED)
281
		FOREACH(LIBOPT ${LIBRARIES_OPTIMIZED})
282
			TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} optimized ${LIBOPT})
283
		ENDFOREACH(LIBOPT)
284
	ENDIF(LIBRARIES_OPTIMIZED)
285

    
286
	IF(LIBRARIES_DEBUG)
287
		FOREACH(LIBDEBUG ${LIBRARIES_DEBUG})
288
			TARGET_LINK_LIBRARIES(${EXECUTABLE_NAME} debug ${LIBDEBUG})
289
		ENDFOREACH(LIBDEBUG)
290
	ENDIF(LIBRARIES_DEBUG)
291

    
292
	SET_TARGET_PROPERTIES(${EXECUTABLE_NAME} PROPERTIES PROJECT_LABEL "Application ${EXECUTABLE_NAME}")
293
	
294
	IF(APPLE)
295
		INSTALL(TARGETS ${EXECUTABLE_NAME}
296
			RUNTIME DESTINATION bin
297
			BUNDLE DESTINATION bin
298
		)
299
	ELSE(APPLE)
300
		INSTALL(TARGETS ${EXECUTABLE_NAME}
301
			RUNTIME DESTINATION bin
302
			COMPONENT DESTINATION bin
303
		)
304
	ENDIF(APPLE)
305

    
306
ENDMACRO(SETUP_EXECUTABLE)
307

    
308

    
309
MACRO(SETUP_BUNDLE_DEPENDENCIES TARGET_NAME)
310
	IF(DEPENDENCY_FILES)
311
		IF(APPLE AND IS_APPLICATION)
312
			INSTALL(PROGRAMS ${DEPENDENCY_FILES}
313
				DESTINATION bin/${TARGET_NAME}.app/Contents/MacOS
314
			)
315
		ENDIF(APPLE AND IS_APPLICATION)
316
	ENDIF(DEPENDENCY_FILES)
317
	
318
	IF(DEPENDENCY_DIRS)
319
		IF(APPLE AND IS_APPLICATION)
320
			INSTALL(DIRECTORY ${DEPENDENCY_DIRS}		
321
					DESTINATION bin/${TARGET_NAME}.app/Contents/Resources
322
					PATTERN ".svn" EXCLUDE)
323
		ENDIF(APPLE AND IS_APPLICATION)
324
	ENDIF(DEPENDENCY_DIRS)
325

    
326
	IF(RESOURCE_FILES)
327
		IF(APPLE AND IS_APPLICATION)
328
			INSTALL(FILES ${RESOURCE_FILES}
329
		        	DESTINATION bin/${TARGET_NAME}.app/Contents/Resources
330
			)
331
		ENDIF(APPLE AND IS_APPLICATION)
332
	ENDIF(RESOURCE_FILES)
333

    
334
	IF(RESOURCE_DIRS)
335
		IF(APPLE AND IS_APPLICATION)
336
			INSTALL(DIRECTORY ${RESOURCE_DIRS}		
337
					DESTINATION bin/${TARGET_NAME}.app/Contents/Resources
338
					PATTERN ".svn" EXCLUDE
339
					)
340
		ENDIF(APPLE AND IS_APPLICATION)
341
	ENDIF(RESOURCE_DIRS)
342
	
343
ENDMACRO(SETUP_BUNDLE_DEPENDENCIES TARGET_NAME)
344

    
345
MACRO(SETUP_DEPENDENCIES)
346
	IF(DEPENDENCY_FILES)
347
		IF(WIN32)
348
			INSTALL(PROGRAMS ${DEPENDENCY_FILES}
349
				DESTINATION bin
350
			)
351
		ELSE(WIN32)
352
		    INSTALL(PROGRAMS ${DEPENDENCY_FILES}
353
			    DESTINATION lib
354
			)
355
		ENDIF(WIN32)
356
	ENDIF(DEPENDENCY_FILES)
357
	
358
	IF(DEPENDENCY_DIRS)
359
        IF(WIN32)
360
    	    INSTALL(DIRECTORY ${DEPENDENCY_DIRS}		
361
    				DESTINATION bin
362
    				PATTERN ".svn" EXCLUDE
363
    				PATTERN ".cache" EXCLUDE)
364
    	ELSE(WIN32)
365
    	    INSTALL(DIRECTORY ${DEPENDENCY_DIRS}		
366
    				DESTINATION lib
367
    				PATTERN ".svn" EXCLUDE
368
    				PATTERN ".cache" EXCLUDE)		
369
		ENDIF(WIN32)
370
	ENDIF(DEPENDENCY_DIRS)
371

    
372
	IF(RESOURCE_FILES)
373
		INSTALL(FILES ${RESOURCE_FILES}
374
		       	DESTINATION share/${CMAKE_PROJECT_NAME}/resources
375
		)
376
	ENDIF(RESOURCE_FILES)
377

    
378
	IF(RESOURCE_DIRS)
379
		INSTALL(DIRECTORY ${RESOURCE_DIRS}		
380
				DESTINATION share/${CMAKE_PROJECT_NAME}/resources
381
				PATTERN ".svn" EXCLUDE
382
		)
383
	ENDIF(RESOURCE_DIRS)
384
	
385
	IF(SCRIPT_FILES)
386
		INSTALL(PROGRAMS ${SCRIPT_FILES}
387
				DESTINATION .
388
				PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
389
		)
390
	ENDIF(SCRIPT_FILES)
391
ENDMACRO(SETUP_DEPENDENCIES)
392

    
393