/
CMakeLists.txt
691 lines (588 loc) · 22.1 KB
1
2
3
4
5
6
7
8
# MojoSetup; a portable, flexible installation application.
#
# Please see the file LICENSE.txt in the source's root directory.
#
# This file written by Ryan C. Gordon.
9
10
11
12
13
14
# The "BINARY SIZE +=" comments note about how much bulk, in kilobytes, a
# given option adds to the binary on x86 Linux (built with gcc 3.3.6
# MinSizeRel options and stripped, uncompressed). These numbers will vary,
# and even on the original test system, become incorrect over time.
# Only choose options you want/need to squeeze every byte off the download.
15
16
17
18
19
20
IF(NOT BEOS)
PROJECT(MojoSetup C)
ELSE(NOT BEOS)
PROJECT(MojoSetup CXX)
ENDIF(NOT BEOS)
21
CMAKE_MINIMUM_REQUIRED(VERSION 2.4.4)
22
23
EXECUTE_PROCESS(
24
COMMAND hg tip --template hg-{rev}:{node|short}
25
26
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
RESULT_VARIABLE HGVERSION_RC
27
28
29
30
31
OUTPUT_VARIABLE MOJOSETUP_VERSION
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE
)
32
IF(HGVERSION_RC)
33
SET(MOJOSETUP_VERSION "???")
34
ENDIF(HGVERSION_RC)
35
36
37
38
39
40
41
42
43
44
45
46
# I hate that they define "WIN32" ... we're about to move to Win64...I hope!
IF(WIN32 AND NOT WINDOWS)
SET(WINDOWS TRUE)
ENDIF(WIN32 AND NOT WINDOWS)
# Bleh, let's do it for "APPLE" too.
IF(APPLE AND NOT MACOSX)
SET(MACOSX TRUE)
ENDIF(APPLE AND NOT MACOSX)
47
48
49
50
51
52
53
54
55
# And this might be wrong...
IF (CMAKE_SYSTEM MATCHES OS2)
SET(OS2 TRUE)
ENDIF (CMAKE_SYSTEM MATCHES OS2)
IF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
SET(SOLARIS TRUE)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
56
57
58
INCLUDE(CheckIncludeFile)
INCLUDE(CheckLibraryExists)
INCLUDE(CheckCSourceCompiles)
59
INCLUDE(CheckCCompilerFlag)
60
INCLUDE(TestBigEndian)
61
62
ADD_DEFINITIONS(-D__MOJOSETUP__=1)
63
ADD_DEFINITIONS(-DAPPID=mojosetup)
64
ADD_DEFINITIONS(-DAPPREV="${MOJOSETUP_VERSION}")
65
66
67
68
ADD_DEFINITIONS(-D_REENTRANT)
ADD_DEFINITIONS(-D_THREAD_SAFE)
INCLUDE_DIRECTORIES(.)
69
INCLUDE_DIRECTORIES(lua/src)
70
71
72
IF(WINDOWS)
ADD_DEFINITIONS(-DPLATFORM_WINDOWS=1)
73
ADD_DEFINITIONS(-D_CRT_SECURE_NO_WARNINGS=1)
74
SET(USES_WINMAIN WIN32)
75
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} shell32)
76
77
78
79
ENDIF(WINDOWS)
IF(MACOSX)
ADD_DEFINITIONS(-DPLATFORM_MACOSX=1)
80
81
82
83
IF(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
ADD_DEFINITIONS(-DMAC_OS_X_VERSION_MIN_REQUIRED=1020)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-mmacosx-version-min=10.2")
ENDIF(CMAKE_OSX_ARCHITECTURES MATCHES ppc)
84
85
86
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Carbon")
ENDIF(MACOSX)
87
IF(BEOS)
88
ADD_DEFINITIONS(-DPLATFORM_BEOS=1)
89
90
ENDIF(BEOS)
91
92
IF(UNIX)
ADD_DEFINITIONS(-DPLATFORM_UNIX=1)
93
94
95
96
# No _setjmp/_longjmp in BeOS 5 (or Haiku, at the moment).
IF(NOT BEOS)
ADD_DEFINITIONS(-DLUA_USE_ULONGJMP=1)
ENDIF(NOT BEOS)
97
98
99
ENDIF(UNIX)
IF(CMAKE_COMPILER_IS_GNUCC)
100
ADD_DEFINITIONS(-pipe -Wall -Werror -fsigned-char)
101
102
# See if -fvisibility=hidden is available to us.
103
104
105
106
107
108
109
110
111
CHECK_C_SOURCE_COMPILES("
#if ((defined(__GNUC__)) && (__GNUC__ >= 4))
int main(int argc, char **argv) { int is_gcc4 = 1; return 0; }
#else
#error This is not gcc4.
#endif
" MOJOSETUP_IS_GCC4)
IF(MOJOSETUP_IS_GCC4)
112
IF(NOT OS2 AND NOT SOLARIS) # Not supported on OS/2 or Solaris.
113
ADD_DEFINITIONS(-fvisibility=hidden)
114
ENDIF(NOT OS2 AND NOT SOLARIS)
115
ENDIF(MOJOSETUP_IS_GCC4)
116
117
118
119
120
121
122
# See if -fno-stack-protector is available to us.
# It doesn't seem to work well, and it adds bulk to the binary.
CHECK_C_COMPILER_FLAG("-fno-stack-protector" MOJOSETUP_GCC_HAS_STACKPROT)
IF(MOJOSETUP_GCC_HAS_STACKPROT)
ADD_DEFINITIONS(-fno-stack-protector)
ENDIF(MOJOSETUP_GCC_HAS_STACKPROT)
123
124
125
126
127
128
129
130
131
132
133
# !!! FIXME: probably not safe long-term.
# CMake mailing list had this hack for getting rid of -rdynamic:
# http://public.kitware.com/pipermail/cmake/2006-July/010404.html
IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
SET(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)
SET(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
# Don't use -rpath.
SET(CMAKE_SKIP_RPATH ON CACHE BOOL "Skip RPATH" FORCE)
134
135
ENDIF(CMAKE_COMPILER_IS_GNUCC)
136
137
IF(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
ADD_DEFINITIONS(-erroff=E_EMPTY_TRANSLATION_UNIT)
138
ADD_DEFINITIONS(-xldscope=hidden)
139
140
141
142
ENDIF(CMAKE_C_COMPILER_ID STREQUAL "SunPro")
143
144
145
146
147
148
149
TEST_BIG_ENDIAN(MOJOSETUP_IS_BIGENDIAN)
IF(MOJOSETUP_IS_BIGENDIAN)
ADD_DEFINITIONS(-DPLATFORM_BIGENDIAN=1)
ELSE(MOJOSETUP_IS_BIGENDIAN)
ADD_DEFINITIONS(-DPLATFORM_LITTLEENDIAN=1)
ENDIF(MOJOSETUP_IS_BIGENDIAN)
150
SET(ZLIB_DIR zlib-1.2.3)
151
SET(ZLIB_SRCS
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
${ZLIB_DIR}/adler32.c
${ZLIB_DIR}/compress.c
${ZLIB_DIR}/crc32.c
${ZLIB_DIR}/deflate.c
${ZLIB_DIR}/gzio.c
${ZLIB_DIR}/infback.c
${ZLIB_DIR}/inffast.c
${ZLIB_DIR}/inflate.c
${ZLIB_DIR}/inftrees.c
${ZLIB_DIR}/trees.c
${ZLIB_DIR}/uncompr.c
${ZLIB_DIR}/zutil.c
)
SET(BZLIB_DIR bzip2-1.0.4)
SET(BZLIB_SRCS
${BZLIB_DIR}/blocksort.c
${BZLIB_DIR}/huffman.c
${BZLIB_DIR}/crctable.c
${BZLIB_DIR}/randtable.c
${BZLIB_DIR}/compress.c
${BZLIB_DIR}/decompress.c
${BZLIB_DIR}/bzlib.c
175
176
)
177
178
179
180
181
SET(LIBFETCH_DIR libfetch)
SET(LIBFETCH_SRCS
${LIBFETCH_DIR}/fetch.c
${LIBFETCH_DIR}/common.c
${LIBFETCH_DIR}/ftp.c
182
${LIBFETCH_DIR}/http.c
183
184
)
185
SET(LUA_DIR lua)
186
SET(LUA_SRCS
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
${LUA_DIR}/src/lapi.c
${LUA_DIR}/src/ldebug.c
${LUA_DIR}/src/ldo.c
${LUA_DIR}/src/ldump.c
${LUA_DIR}/src/lfunc.c
${LUA_DIR}/src/lgc.c
${LUA_DIR}/src/lmem.c
${LUA_DIR}/src/lobject.c
${LUA_DIR}/src/lopcodes.c
${LUA_DIR}/src/lstate.c
${LUA_DIR}/src/lstring.c
${LUA_DIR}/src/ltable.c
${LUA_DIR}/src/ltm.c
${LUA_DIR}/src/lundump.c
${LUA_DIR}/src/lvm.c
${LUA_DIR}/src/lzio.c
${LUA_DIR}/src/lauxlib.c
${LUA_DIR}/src/lbaselib.c
${LUA_DIR}/src/lstrlib.c
206
${LUA_DIR}/src/ltablib.c
207
208
)
209
SET(LUA_PARSER_SRCS
210
211
212
${LUA_DIR}/src/lparser.c
${LUA_DIR}/src/llex.c
${LUA_DIR}/src/lcode.c
213
214
215
216
217
218
219
220
)
SET(MOJOSETUP_SRCS
buildver.c
mojosetup.c
gui.c
fileio.c
archive_zip.c
221
archive_tar.c
222
223
224
checksum_crc32.c
checksum_md5.c
checksum_sha1.c
225
platform_unix.c
226
platform_windows.c
227
228
229
230
lua_glue.c
${LUA_SRCS}
)
231
232
233
234
235
236
# Have to separate this, so CMake doesn't try to link in C++ support on other
# platforms.
IF(BEOS)
SET(MOJOSETUP_SRCS ${MOJOSETUP_SRCS} platform_beos.cpp)
ENDIF(BEOS)
237
238
239
SET(MOJOLUAC_SRCS
${LUA_SRCS}
${LUA_PARSER_SRCS}
240
241
${LUA_DIR}/src/luac.c
${LUA_DIR}/src/print.c
242
243
244
245
246
247
${LUA_DIR}/src/linit.c
${LUA_DIR}/src/ldblib.c
${LUA_DIR}/src/liolib.c
${LUA_DIR}/src/lmathlib.c
${LUA_DIR}/src/loslib.c
${LUA_DIR}/src/loadlib.c
248
249
)
250
251
252
253
SET(STBIMAGE_SRCS
stb_image.c
)
254
255
256
257
# Disabling the parser cuts the Lua binary bits by about 35%, plus .luac files
# are almost always smaller than the original scripts. The downside is you
# (and end users in the field) can't just tweak a script without recompiling
# it, but even that's not an unclimbable obstacle.
258
259
# In reality, you probably want to keep the parser, though, unless you REALLY
# must save every single byte in the download.
260
261
262
# YOU NEED THE PARSER IF YOU WANT MANIFESTS WRITTEN OUT.
# YOU NEED THE PARSER IF YOU WANT THE UNINSTALLER TO WORK.
# DON'T DISABLE THIS NOW IF YOU DON'T ABSOLUTELY HAVE TO.
263
# BINARY SIZE += 19
264
265
OPTION(MOJOSETUP_LUA_PARSER "Bigger binary but scripts don't need to be compiled." TRUE)
IF(MOJOSETUP_LUA_PARSER)
266
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_PARSER_SRCS})
267
ELSE(MOJOSETUP_LUA_PARSER)
268
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_DIR}/etc/noparser.c)
269
270
271
ADD_DEFINITIONS(-DDISABLE_LUA_PARSER=1)
ENDIF(MOJOSETUP_LUA_PARSER)
272
273
274
275
276
277
278
279
280
281
282
# Kludge for Linux x86/amd64 bins...
IF(UNIX AND NOT MACOSX) # Just use Mach-O Universal/"fat" binaries on OS X.
OPTION(MOJOSETUP_MULTIARCH "Allow multiarch hack." FALSE)
MARK_AS_ADVANCED(MOJOSETUP_MULTIARCH)
IF(MOJOSETUP_MULTIARCH)
ADD_DEFINITIONS(-DSUPPORT_MULTIARCH=1)
ENDIF(MOJOSETUP_MULTIARCH)
ENDIF(UNIX AND NOT MACOSX)
283
284
# Optional bits of the Lua runtime library...
285
# BINARY SIZE += 4.5
286
287
288
289
290
291
292
OPTION(MOJOSETUP_LUALIB_IO "Add Lua 'io' library" TRUE)
MARK_AS_ADVANCED(MOJOSETUP_LUALIB_IO)
IF(MOJOSETUP_LUALIB_IO)
ADD_DEFINITIONS(-DSUPPORT_LUALIB_IO=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_DIR}/src/liolib.c)
ENDIF(MOJOSETUP_LUALIB_IO)
293
# BINARY SIZE += 2.5
294
295
296
297
298
299
300
OPTION(MOJOSETUP_LUALIB_OS "Add Lua 'os' library" TRUE)
MARK_AS_ADVANCED(MOJOSETUP_LUALIB_OS)
IF(MOJOSETUP_LUALIB_OS)
ADD_DEFINITIONS(-DSUPPORT_LUALIB_OS=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_DIR}/src/loslib.c)
ENDIF(MOJOSETUP_LUALIB_OS)
301
# BINARY SIZE += 3.5
302
303
304
305
306
307
308
OPTION(MOJOSETUP_LUALIB_MATH "Add Lua 'math' library" TRUE)
MARK_AS_ADVANCED(MOJOSETUP_LUALIB_MATH)
IF(MOJOSETUP_LUALIB_MATH)
ADD_DEFINITIONS(-DSUPPORT_LUALIB_MATH=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_DIR}/src/lmathlib.c)
ENDIF(MOJOSETUP_LUALIB_MATH)
309
# BINARY SIZE += 3.5
310
311
312
313
314
315
316
OPTION(MOJOSETUP_LUALIB_DB "Add Lua 'db' library" TRUE)
MARK_AS_ADVANCED(MOJOSETUP_LUALIB_DB)
IF(MOJOSETUP_LUALIB_DB)
ADD_DEFINITIONS(-DSUPPORT_LUALIB_DB=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_DIR}/src/ldblib.c)
ENDIF(MOJOSETUP_LUALIB_DB)
317
# BINARY SIZE += 4
318
319
320
321
322
323
324
325
OPTION(MOJOSETUP_LUALIB_PACKAGE "Add Lua 'package' library" TRUE)
MARK_AS_ADVANCED(MOJOSETUP_LUALIB_PACKAGE)
IF(MOJOSETUP_LUALIB_PACKAGE)
ADD_DEFINITIONS(-DSUPPORT_LUALIB_PACKAGE=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LUA_DIR}/src/loadlib.c)
ENDIF(MOJOSETUP_LUALIB_PACKAGE)
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
# Checksums...
# BINARY SIZE += !!! FIXME: check this.
OPTION(MOJOSETUP_CHECKSUM_CRC32 "Enable CRC-32 checksum support" TRUE)
IF(MOJOSETUP_CHECKSUM_CRC32)
ADD_DEFINITIONS(-DSUPPORT_CRC32=1)
ENDIF(MOJOSETUP_CHECKSUM_CRC32)
# BINARY SIZE += !!! FIXME: check this.
OPTION(MOJOSETUP_CHECKSUM_MD5 "Enable MD5 checksum support" TRUE)
IF(MOJOSETUP_CHECKSUM_MD5)
ADD_DEFINITIONS(-DSUPPORT_MD5=1)
ENDIF(MOJOSETUP_CHECKSUM_MD5)
# BINARY SIZE += !!! FIXME: check this.
OPTION(MOJOSETUP_CHECKSUM_SHA1 "Enable SHA-1 checksum support" TRUE)
IF(MOJOSETUP_CHECKSUM_SHA1)
ADD_DEFINITIONS(-DSUPPORT_SHA1=1)
ENDIF(MOJOSETUP_CHECKSUM_SHA1)
347
348
# GUI plugins...
349
350
351
352
353
354
MACRO(MOJOSETUP_ADD_LIBRARY _TARGET _SRCS)
ADD_LIBRARY(${_TARGET} SHARED ${_SRCS})
SET(MOJOSETUP_TARGETS "${MOJOSETUP_TARGETS};${_TARGET}")
ENDMACRO(MOJOSETUP_ADD_LIBRARY)
355
# BINARY SIZE += 2.5
356
357
358
359
360
361
OPTION(MOJOSETUP_GUI_STDIO "Enable stdio GUI" TRUE)
IF(MOJOSETUP_GUI_STDIO)
ADD_DEFINITIONS(-DSUPPORT_GUI_STDIO=1)
OPTION(MOJOSETUP_GUI_STDIO_STATIC "Statically link stdio GUI" TRUE)
IF(MOJOSETUP_GUI_STDIO_STATIC)
ADD_DEFINITIONS(-DGUI_STATIC_LINK_STDIO=1)
362
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} gui_stdio.c)
363
ELSE(MOJOSETUP_GUI_STDIO_STATIC)
364
MOJOSETUP_ADD_LIBRARY(mojosetupgui_stdio gui_stdio.c)
365
366
367
ENDIF(MOJOSETUP_GUI_STDIO_STATIC)
ENDIF(MOJOSETUP_GUI_STDIO)
368
369
370
371
# BINARY SIZE += !!! FIXME: check this.
IF(UNIX) # !!! FIXME: use FindCurses instead...
IF(NOT BEOS)
IF(NOT MACOSX)
372
IF(NOT SOLARIS) # !!! FIXME: Solaris's curses is really broken, or I'm using it wrong.
373
OPTION(MOJOSETUP_GUI_NCURSES "Enable ncurses GUI" TRUE)
374
375
IF(MOJOSETUP_GUI_NCURSES)
ADD_DEFINITIONS(-DSUPPORT_GUI_NCURSES=1)
376
OPTION(MOJOSETUP_GUI_NCURSES_STATIC "Statically link ncurses GUI" FALSE)
377
378
379
IF(MOJOSETUP_GUI_NCURSES_STATIC)
ADD_DEFINITIONS(-DGUI_STATIC_LINK_NCURSES=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} gui_ncurses.c)
380
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} -lncursesw) # !!! FIXME
381
ELSE(MOJOSETUP_GUI_NCURSES_STATIC)
382
MOJOSETUP_ADD_LIBRARY(mojosetupgui_ncurses gui_ncurses.c)
383
TARGET_LINK_LIBRARIES(mojosetupgui_ncurses "-lncursesw") # !!! FIXME
384
385
ENDIF(MOJOSETUP_GUI_NCURSES_STATIC)
ENDIF(MOJOSETUP_GUI_NCURSES)
386
ENDIF(NOT SOLARIS)
387
388
389
390
ENDIF(NOT MACOSX)
ENDIF(NOT BEOS)
ENDIF(UNIX)
391
392
393
394
395
396
397
IF(MACOSX)
OPTION(MOJOSETUP_GUI_MACOSX "Enable Mac OS X GUI" TRUE)
IF(MOJOSETUP_GUI_MACOSX)
ADD_DEFINITIONS(-DSUPPORT_GUI_MACOSX=1)
OPTION(MOJOSETUP_GUI_MACOSX_STATIC "Statically link Mac OS X GUI" TRUE)
IF(MOJOSETUP_GUI_MACOSX_STATIC)
ADD_DEFINITIONS(-DGUI_STATIC_LINK_MACOSX=1)
398
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} gui_macosx.c)
399
ELSE(MOJOSETUP_GUI_MACOSX_STATIC)
400
MOJOSETUP_ADD_LIBRARY(mojosetupgui_macosx gui_macosx.c)
401
TARGET_LINK_LIBRARIES(mojosetupgui_macosx
402
"-framework Carbon -mmacosx-version-min=10.2"
403
)
404
405
406
407
ENDIF(MOJOSETUP_GUI_MACOSX_STATIC)
ENDIF(MOJOSETUP_GUI_MACOSX)
ENDIF(MACOSX)
408
409
410
IF(UNIX)
IF(NOT BEOS)
IF(NOT MACOSX)
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
#FIND_PACKAGE(PkgConfig)
#PKGCONFIG(libgtk-2.0 LIBGTK_INCLUDE_DIR LIBGTK_LINK_DIR LIBGTK_LINK_FLAGS LIBGTK_CFLAGS)
# !!! FIXME
SET(LIBGTK_LINK_FLAGS "-lgtk-x11-2.0")
SET(LIBGTK_CFLAGS "-DPNG_NO_MMX_CODE -I/usr/include/gtk-2.0 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/freetype2 -I/usr/include/libpng12")
IF(NOT LIBGTK_LINK_FLAGS)
MESSAGE(STATUS "Can't find GTK+v2 headers/libraries. Can't build GTK+ GUI.")
ELSE(NOT LIBGTK_LINK_FLAGS)
OPTION(MOJOSETUP_GUI_GTKPLUS2 "Enable GTK+ 2.0 GUI" TRUE)
IF(MOJOSETUP_GUI_GTKPLUS2)
ADD_DEFINITIONS(-DSUPPORT_GUI_GTKPLUS2=1)
#INCLUDE_DIRECTORIES(${LIBGTK_INCLUDE_DIR})
OPTION(MOJOSETUP_GUI_GTKPLUS2_STATIC "Statically link GTK+ GUI" FALSE)
IF(MOJOSETUP_GUI_GTKPLUS2_STATIC)
ADD_DEFINITIONS(-DGUI_STATIC_LINK_GTKPLUS2=1 ${LIBGTK_CFLAGS})
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} gui_gtkplus2.c)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${LIBGTK_LINK_FLAGS})
ELSE(MOJOSETUP_GUI_GTKPLUS2_STATIC)
429
MOJOSETUP_ADD_LIBRARY(mojosetupgui_gtkplus2 gui_gtkplus2.c)
430
ADD_DEFINITIONS(${LIBGTK_CFLAGS})
431
TARGET_LINK_LIBRARIES(mojosetupgui_gtkplus2 ${LIBGTK_LINK_FLAGS})
432
433
434
ENDIF(MOJOSETUP_GUI_GTKPLUS2_STATIC)
ENDIF(MOJOSETUP_GUI_GTKPLUS2)
ENDIF(NOT LIBGTK_LINK_FLAGS)
435
436
437
ENDIF(NOT MACOSX)
ENDIF(NOT BEOS)
ENDIF(UNIX)
438
439
# BINARY SIZE += !!! FIXME: check this.
440
OPTION(MOJOSETUP_GUI_WWW "Enable www GUI" FALSE) # !!! FIXME: make TRUE
441
442
IF(MOJOSETUP_GUI_WWW)
ADD_DEFINITIONS(-DSUPPORT_GUI_WWW=1)
443
OPTION(MOJOSETUP_GUI_WWW_STATIC "Statically link www GUI" FALSE)
444
445
446
IF(MOJOSETUP_GUI_WWW_STATIC)
ADD_DEFINITIONS(-DGUI_STATIC_LINK_WWW=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} gui_www.c)
447
IF(WINDOWS)
448
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} wsock32)
449
ENDIF(WINDOWS)
450
ELSE(MOJOSETUP_GUI_WWW_STATIC)
451
MOJOSETUP_ADD_LIBRARY(mojosetupgui_www gui_www.c)
452
IF(WINDOWS)
453
TARGET_LINK_LIBRARIES(mojosetupgui_www wsock32)
454
ENDIF(WINDOWS)
455
ENDIF(MOJOSETUP_GUI_WWW_STATIC)
456
SET(MOJOSETUP_USES_SOCKETS TRUE)
457
458
ENDIF(MOJOSETUP_GUI_WWW)
459
460
461
# Archivers...
462
# BINARY SIZE += 8
463
464
465
OPTION(MOJOSETUP_ARCHIVE_ZIP "Enable ZIP support" TRUE)
IF(MOJOSETUP_ARCHIVE_ZIP)
ADD_DEFINITIONS(-DSUPPORT_ZIP=1)
466
SET(MOJOSETUP_NEED_ZLIB TRUE)
467
468
ENDIF(MOJOSETUP_ARCHIVE_ZIP)
469
# BINARY SIZE += 2
470
471
472
OPTION(MOJOSETUP_ARCHIVE_TAR "Enable TAR support" TRUE)
IF(MOJOSETUP_ARCHIVE_TAR)
ADD_DEFINITIONS(-DSUPPORT_TAR=1)
473
474
# BINARY SIZE += 1.5
475
476
477
478
479
480
OPTION(MOJOSETUP_ARCHIVE_TAR_GZ "Enable TAR.GZ support" TRUE)
IF(MOJOSETUP_ARCHIVE_TAR_GZ)
ADD_DEFINITIONS(-DSUPPORT_TAR_GZ=1)
SET(MOJOSETUP_NEED_ZLIB TRUE)
ENDIF(MOJOSETUP_ARCHIVE_TAR_GZ)
481
# BINARY SIZE += 1.5
482
483
484
OPTION(MOJOSETUP_ARCHIVE_TAR_BZ2 "Enable TAR.BZ2 support" TRUE)
IF(MOJOSETUP_ARCHIVE_TAR_BZ2)
ADD_DEFINITIONS(-DSUPPORT_TAR_BZ2=1)
485
ADD_DEFINITIONS(-DBZ_NO_STDIO=1)
486
487
488
489
SET(MOJOSETUP_NEED_BZLIB TRUE)
ENDIF(MOJOSETUP_ARCHIVE_TAR_BZ2)
ENDIF(MOJOSETUP_ARCHIVE_TAR)
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
# Image decoders for GUIs...
OPTION(MOJOSETUP_IMAGE_JPG "Enable JPG support" TRUE)
IF(MOJOSETUP_IMAGE_JPG)
ADD_DEFINITIONS(-DSUPPORT_JPG=1)
SET(MOJOSETUP_NEED_STBIMAGE TRUE)
ENDIF(MOJOSETUP_IMAGE_JPG)
OPTION(MOJOSETUP_IMAGE_PNG "Enable PNG support" TRUE)
IF(MOJOSETUP_IMAGE_PNG)
ADD_DEFINITIONS(-DSUPPORT_PNG=1)
SET(MOJOSETUP_NEED_STBIMAGE TRUE)
ENDIF(MOJOSETUP_IMAGE_PNG)
OPTION(MOJOSETUP_IMAGE_TGA "Enable TGA support" FALSE)
IF(MOJOSETUP_IMAGE_TGA)
ADD_DEFINITIONS(-DSUPPORT_TGA=1)
SET(MOJOSETUP_NEED_STBIMAGE TRUE)
ENDIF(MOJOSETUP_IMAGE_TGA)
OPTION(MOJOSETUP_IMAGE_BMP "Enable BMP support" FALSE)
IF(MOJOSETUP_IMAGE_BMP)
ADD_DEFINITIONS(-DSUPPORT_BMP=1)
SET(MOJOSETUP_NEED_STBIMAGE TRUE)
ENDIF(MOJOSETUP_IMAGE_BMP)
OPTION(MOJOSETUP_IMAGE_PSD "Enable PSD support" FALSE)
IF(MOJOSETUP_IMAGE_PSD)
ADD_DEFINITIONS(-DSUPPORT_PSD=1)
SET(MOJOSETUP_NEED_STBIMAGE TRUE)
ENDIF(MOJOSETUP_IMAGE_PSD)
OPTION(MOJOSETUP_IMAGE_HDR "Enable HDR support" FALSE)
IF(MOJOSETUP_IMAGE_HDR)
ADD_DEFINITIONS(-DSUPPORT_HDR=1)
SET(MOJOSETUP_NEED_STBIMAGE TRUE)
ENDIF(MOJOSETUP_IMAGE_HDR)
IF(MOJOSETUP_NEED_STBIMAGE)
ADD_DEFINITIONS(-DSUPPORT_STBIMAGE=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${STBIMAGE_SRCS})
ENDIF(MOJOSETUP_NEED_STBIMAGE)
535
536
# Networking...
537
# BINARY SIZE += 5 ...plus libfetch
538
539
540
541
542
543
OPTION(MOJOSETUP_URL_HTTP "Enable http:// support" TRUE)
IF(MOJOSETUP_URL_HTTP)
ADD_DEFINITIONS(-DSUPPORT_URL_HTTP=1)
SET(MOJOSETUP_NEED_LIBFETCH TRUE)
ENDIF(MOJOSETUP_URL_HTTP)
544
# BINARY SIZE += 9 ...plus libfetch
545
546
547
548
549
550
OPTION(MOJOSETUP_URL_FTP "Enable ftp:// support" TRUE)
IF(MOJOSETUP_URL_FTP)
ADD_DEFINITIONS(-DSUPPORT_URL_FTP=1)
SET(MOJOSETUP_NEED_LIBFETCH TRUE)
ENDIF(MOJOSETUP_URL_FTP)
551
# BINARY SIZE += 10
552
553
IF(MOJOSETUP_NEED_LIBFETCH)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${LIBFETCH_SRCS})
554
# Had to spin up some threads in libfetch...lame.
555
556
557
558
# !!! FIXME: CMake will do -lpthread on Mac OS X, but it doesn't need it.
IF(NOT MACOSX)
FIND_PACKAGE(Threads)
ENDIF(NOT MACOSX)
559
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${CMAKE_THREAD_LIBS_INIT})
560
SET(MOJOSETUP_USES_SOCKETS TRUE)
561
562
ENDIF(MOJOSETUP_NEED_LIBFETCH)
563
564
565
566
567
568
IF(MOJOSETUP_USES_SOCKETS)
IF(SOLARIS)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "socket")
ENDIF(SOLARIS)
ENDIF(MOJOSETUP_USES_SOCKETS)
569
570
571
# Middleware...
572
573
574
575
576
577
578
579
580
581
582
583
IF(MOJOSETUP_NEED_ZLIB)
SET(HAVE_SYSTEM_ZLIB FALSE)
CHECK_INCLUDE_FILE(zlib.h HAVE_ZLIB_H)
IF(HAVE_ZLIB_H)
CHECK_LIBRARY_EXISTS("z" "inflate" "" HAVE_LIBZ)
IF(HAVE_LIBZ)
SET(HAVE_SYSTEM_ZLIB TRUE)
ENDIF(HAVE_LIBZ)
ENDIF(HAVE_ZLIB_H)
IF(HAVE_SYSTEM_ZLIB)
OPTION(MOJOSETUP_INTERNAL_ZLIB "Link own zlib instead of system library" FALSE)
584
585
ELSE(HAVE_SYSTEM_ZLIB)
SET(MOJOSETUP_INTERNAL_ZLIB TRUE)
586
587
ENDIF(HAVE_SYSTEM_ZLIB)
588
# BINARY SIZE += 50
589
IF(MOJOSETUP_INTERNAL_ZLIB)
590
INCLUDE_DIRECTORIES(${ZLIB_DIR})
591
592
593
594
595
596
597
ADD_DEFINITIONS(-DZ_PREFIX=1)
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${ZLIB_SRCS})
ELSE(MOJOSETUP_INTERNAL_ZLIB)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} z)
ENDIF(MOJOSETUP_INTERNAL_ZLIB)
ENDIF(MOJOSETUP_NEED_ZLIB)
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
IF(MOJOSETUP_NEED_BZLIB)
SET(HAVE_SYSTEM_BZLIB FALSE)
CHECK_INCLUDE_FILE(bzlib.h HAVE_BZLIB_H)
IF(HAVE_BZLIB_H)
CHECK_LIBRARY_EXISTS("bz2" "BZ2_bzDecompress" "" HAVE_LIBBZ2)
IF(HAVE_LIBBZ2)
SET(HAVE_SYSTEM_BZLIB TRUE)
ENDIF(HAVE_LIBBZ2)
ENDIF(HAVE_BZLIB_H)
IF(HAVE_SYSTEM_BZLIB)
OPTION(MOJOSETUP_INTERNAL_BZLIB "Link own bzlib instead of system library" FALSE)
ELSE(HAVE_SYSTEM_BZLIB)
SET(MOJOSETUP_INTERNAL_BZLIB TRUE)
ENDIF(HAVE_SYSTEM_BZLIB)
614
# BINARY SIZE += 46
615
IF(MOJOSETUP_INTERNAL_BZLIB)
616
ADD_DEFINITIONS(-DMOJOSETUP_INTERNAL_BZLIB=1)
617
618
619
620
621
622
623
INCLUDE_DIRECTORIES(${BZLIB_DIR})
SET(OPTIONAL_SRCS ${OPTIONAL_SRCS} ${BZLIB_SRCS})
ELSE(MOJOSETUP_INTERNAL_BZLIB)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} bz2)
ENDIF(MOJOSETUP_INTERNAL_BZLIB)
ENDIF(MOJOSETUP_NEED_BZLIB)
624
625
626
627
628
629
630
631
632
633
634
IF(UNIX)
CHECK_INCLUDE_FILE(sys/ucred.h HAVE_UCRED_H)
IF(HAVE_UCRED_H)
ADD_DEFINITIONS(-DMOJOSETUP_HAVE_SYS_UCRED_H=1)
ENDIF(HAVE_UCRED_H)
CHECK_INCLUDE_FILE(mntent.h HAVE_MNTENT_H)
IF(HAVE_MNTENT_H)
ADD_DEFINITIONS(-DMOJOSETUP_HAVE_MNTENT_H=1)
ENDIF(HAVE_MNTENT_H)
635
636
637
638
639
640
641
642
643
644
645
646
647
# !!! FIXME: Solaris fails this, because mnttab.h implicitly
# !!! FIXME: depends on other system headers. :(
#CHECK_INCLUDE_FILE(sys/mnttab.h HAVE_SYS_MNTTAB_H)
CHECK_C_SOURCE_COMPILES("
#include <stdio.h>
#include <sys/mnttab.h>
int main(int argc, char **argv) { return 0; }
" HAVE_SYS_MNTTAB_H)
IF(HAVE_SYS_MNTTAB_H)
ADD_DEFINITIONS(-DMOJOSETUP_HAVE_SYS_MNTTAB_H=1)
ENDIF(HAVE_SYS_MNTTAB_H)
648
649
650
651
652
653
654
655
656
657
658
IF(NOT MACOSX)
CHECK_LIBRARY_EXISTS("dl" "dlopen" "" HAVE_LIBDL)
IF(HAVE_LIBDL)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} dl)
ENDIF(HAVE_LIBDL)
CHECK_LIBRARY_EXISTS("m" "sin" "" HAVE_LIBM)
IF(HAVE_LIBM)
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} m)
ENDIF(HAVE_LIBM)
ENDIF(NOT MACOSX)
ENDIF(UNIX)
659
660
661
662
OPTION(MOJOSETUP_BUILD_LUAC "Build separate Lua compiler" TRUE)
IF(MOJOSETUP_BUILD_LUAC)
ADD_EXECUTABLE(mojoluac ${MOJOLUAC_SRCS})
663
TARGET_LINK_LIBRARIES(mojoluac ${OPTIONAL_LIBS})
664
665
GET_TARGET_PROPERTY(MOJOLUAC_LOCATION mojoluac LOCATION)
# !!! FIXME: actually compile this.
666
ADD_CUSTOM_TARGET(lua "${MOJOLUAC_LOCATION}" -p ${CMAKE_CURRENT_SOURCE_DIR}/scripts/*.lua)
667
ENDIF(MOJOSETUP_BUILD_LUAC)
668
669
ADD_EXECUTABLE(mojosetup ${USES_WINMAIN} ${MOJOSETUP_SRCS} ${OPTIONAL_SRCS})
670
GET_TARGET_PROPERTY(MOJOSETUP_BINARY_LOCATION mojosetup LOCATION)
671
TARGET_LINK_LIBRARIES(mojosetup ${OPTIONAL_LIBS})
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
SET(MOJOSETUP_TARGETS "${MOJOSETUP_TARGETS};mojosetup")
# For cobbling together a skeleton installer...
ADD_CUSTOM_TARGET(skeleton
COMMENT "Assembling Skeleton..."
COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_BINARY_DIR}/skeleton -P ${CMAKE_SOURCE_DIR}/misc/rm_recurse.cmake
COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_BINARY_DIR}/skeleton -P ${CMAKE_SOURCE_DIR}/misc/mkdir.cmake
COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_BINARY_DIR}/skeleton/scripts -P ${CMAKE_SOURCE_DIR}/misc/mkdir.cmake
COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_BINARY_DIR}/skeleton/guis -P ${CMAKE_SOURCE_DIR}/misc/mkdir.cmake
COMMAND ${CMAKE_COMMAND} -DDIR=${CMAKE_BINARY_DIR}/skeleton/data -P ${CMAKE_SOURCE_DIR}/misc/mkdir.cmake
COMMAND ${CMAKE_COMMAND} -DFROM=${CMAKE_SOURCE_DIR}/scripts/*.lua -DTO=${CMAKE_BINARY_DIR}/skeleton/scripts -P ${CMAKE_SOURCE_DIR}/misc/cp.cmake
COMMAND ${CMAKE_COMMAND} -DFROM=${CMAKE_SOURCE_DIR}/*mojosetupgui*.* -DTO=${CMAKE_BINARY_DIR}/skeleton/guis -P ${CMAKE_SOURCE_DIR}/misc/cp.cmake
COMMAND ${CMAKE_COMMAND} -DFROM=${MOJOSETUP_BINARY_LOCATION} -DTO=${CMAKE_BINARY_DIR}/skeleton -P ${CMAKE_SOURCE_DIR}/misc/cp.cmake
)
ADD_DEPENDENCIES(skeleton ${MOJOSETUP_TARGETS})
689
690
# end of CMakeLists.txt ...