root/trunk/src/CMakeLists.txt

Revision 2301, 22.0 kB (checked in by moo, 4 weeks ago)

detect crypt correctly

  • Property svn:eol-style set to native
Line 
1INCLUDE(CheckIncludeFiles)
2INCLUDE(CheckFunctionExists)
3INCLUDE(CheckVariableExists)
4INCLUDE(CheckTypeSize)
5INCLUDE(CheckLibraryExists)
6INCLUDE(CMakeDetermineCCompiler)
7INCLUDE(FindThreads)
8INCLUDE(CPack)
9INCLUDE(UsePkgConfig)
10
11INCLUDE(LighttpdMacros)
12
13ADD_DEFINITIONS(-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGE_FILES)
14
15OPTION(WITH_XATTR "with xattr-support for the stat-cache [default: off]")
16OPTION(WITH_MYSQL "with mysql-support for the mod_sql_vhost [default: off]")
17OPTION(WITH_POSTGRESQL "with postgress-support for the mod_sql_vhost [default: off]")
18OPTION(WITH_OPENSSL "with openssl-support [default: off]")
19OPTION(WITH_PCRE "with regex support [default: on]" ON)
20OPTION(WITH_WEBDAV_PROPS "with property-support for mod_webdav [default: off]")
21OPTION(WITH_BZIP "with bzip2-support for mod_compress [default: off]")
22OPTION(WITH_ZLIB "with deflate-support for mod_compress [default: on]" ON)
23OPTION(WITH_LDAP "with LDAP-support for the mod_auth [default: off]")
24OPTION(WITH_LIBAIO "with libaio for the linux [default: off]")
25OPTION(WITH_LIBFCGI "with libfcgi for fcgi-stat-accel [default: off]")
26OPTION(WITH_LUA "with lua 5.1 for mod_magnet [default: off]")
27OPTION(WITH_GLIB "with glib support for internal caches [default: on]" ON)
28OPTION(BUILD_STATIC "build a static lighttpd with all modules added")
29IF(BUILD_STATIC)
30  SET(LIGHTTPD_STATIC 1)
31ELSE(BUILD_STATIC)
32  SET(CMAKE_SHARED_LIBRARY_PREFIX "")
33ENDIF(BUILD_STATIC)
34
35IF(WITH_WEBDAV_PROPS)
36  SET(WITH_XML 1)
37  SET(WITH_SQLITE3 1)
38  SET(WITH_UUID 1)
39ENDIF(WITH_WEBDAV_PROPS)
40
41CHECK_INCLUDE_FILES(sys/devpoll.h HAVE_SYS_DEVPOLL_H)
42CHECK_INCLUDE_FILES(sys/epoll.h HAVE_SYS_EPOLL_H)
43CHECK_INCLUDE_FILES(sys/event.h HAVE_SYS_EVENT_H)
44CHECK_INCLUDE_FILES(sys/mman.h HAVE_SYS_MMAN_H)
45CHECK_INCLUDE_FILES(sys/poll.h HAVE_SYS_POLL_H)
46CHECK_INCLUDE_FILES(sys/port.h HAVE_SYS_PORT_H)
47CHECK_INCLUDE_FILES(sys/prctl.h HAVE_SYS_PRCTL_H)
48CHECK_INCLUDE_FILES(sys/resource.h HAVE_SYS_RESOURCE_H)
49CHECK_INCLUDE_FILES(sys/sendfile.h HAVE_SYS_SENDFILE_H)
50CHECK_INCLUDE_FILES(sys/select.h HAVE_SYS_SELECT_H)
51CHECK_INCLUDE_FILES(sys/syslimits.h HAVE_SYS_SYSLIMITS_H)
52CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
53CHECK_INCLUDE_FILES(sys/uio.h HAVE_SYS_UIO_H)
54CHECK_INCLUDE_FILES(sys/un.h HAVE_SYS_UN_H)
55CHECK_INCLUDE_FILES(sys/wait.h HAVE_SYS_WAIT_H)
56CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
57CHECK_INCLUDE_FILES(time.h HAVE_TIME_H)
58CHECK_INCLUDE_FILES(unistd.h HAVE_UNISTD_H)
59CHECK_INCLUDE_FILES(pthread.h HAVE_PTHREAD_H)
60
61
62## refactor me
63MACRO(XCONFIG _package _include_DIR _link_DIR _link_FLAGS _cflags)
64# reset the variables at the beginning
65  SET(${_include_DIR})
66  SET(${_link_DIR})
67  SET(${_link_FLAGS})
68  SET(${_cflags})
69
70  FIND_PROGRAM(${_package}CONFIG_EXECUTABLE NAMES ${_package} PATHS /usr/local/bin )
71
72  # if pkg-config has been found
73  IF(${_package}CONFIG_EXECUTABLE)
74    SET(XCONFIG_EXECUTABLE "${${_package}CONFIG_EXECUTABLE}")
75    MESSAGE(STATUS "found ${_package}: ${XCONFIG_EXECUTABLE}")
76
77    EXEC_PROGRAM(${XCONFIG_EXECUTABLE} ARGS --libs OUTPUT_VARIABLE __link_FLAGS)
78    STRING(REPLACE "\n" "" ${_link_FLAGS} ${__link_FLAGS})
79    EXEC_PROGRAM(${XCONFIG_EXECUTABLE} ARGS --cflags OUTPUT_VARIABLE __cflags)
80    STRING(REPLACE "\n" "" ${_cflags} ${__cflags})
81
82  ELSE(${_package}CONFIG_EXECUTABLE)
83    MESSAGE(STATUS "found ${_package}: no")
84  ENDIF(${_package}CONFIG_EXECUTABLE)
85ENDMACRO(XCONFIG _package _include_DIR _link_DIR _link_FLAGS _cflags)
86
87##INCLUDE_DIRECTORIES(${GTHREAD_INCDIR})
88ADD_DEFINITIONS(${GTHREAD_CFLAGS})
89
90IF(WITH_XATTR)
91  CHECK_INCLUDE_FILES(attr/attributes.h HAVE_ATTR_ATTRIBUTES_H)
92ENDIF(WITH_XATTR)
93
94IF(WITH_MYSQL)
95  XCONFIG(mysql_config MYSQL_INCDIR MYSQL_LIBDIR MYSQL_LDFLAGS MYSQL_CFLAGS)
96
97  SET(CMAKE_REQUIRED_INCLUDES /usr/include/mysql)
98  CHECK_INCLUDE_FILES(mysql.h HAVE_MYSQL_H)
99  SET(CMAKE_REQUIRED_INCLUDES)
100  IF(HAVE_MYSQL_H)
101    CHECK_LIBRARY_EXISTS(mysqlclient mysql_real_connect "" HAVE_LIBMYSQL)
102  ENDIF(HAVE_MYSQL_H)
103ENDIF(WITH_MYSQL)
104
105IF(WITH_POSTGRESQL)
106  SET(CMAKE_REQUIRED_INCLUDES /usr/include/pgsql)
107  CHECK_INCLUDE_FILES(libpq-fe.h HAVE_LIBPQ_FE_H)
108  SET(CMAKE_REQUIRED_INCLUDES)
109  IF(HAVE_LIBPG_FE_H)
110    CHECK_LIBRARY_EXISTS(pq PQconnectdb "" HAVE_LIBPQ)
111  ENDIF(HAVE_LIBPG_FE_H)
112ENDIF(WITH_POSTGRESQL)
113
114IF(WITH_OPENSSL)
115  CHECK_INCLUDE_FILES(openssl/ssl.h HAVE_OPENSSL_SSL_H)
116  IF(HAVE_OPENSSL_SSL_H)
117    CHECK_LIBRARY_EXISTS(crypto BIO_f_base64 "" HAVE_LIBCRYPTO)
118    IF(HAVE_LIBCRYPTO)
119      SET(OPENSSL_NO_KRB5 1)
120      CHECK_LIBRARY_EXISTS(ssl SSL_new "" HAVE_LIBSSL)
121    ENDIF(HAVE_LIBCRYPTO)
122  ENDIF(HAVE_OPENSSL_SSL_H)
123ENDIF(WITH_OPENSSL)
124
125CHECK_INCLUDE_FILES(aio.h HAVE_AIO_H)
126IF(WITH_BZIP)
127  CHECK_INCLUDE_FILES(bzlib.h HAVE_BZLIB_H)
128  CHECK_LIBRARY_EXISTS(bz2 BZ2_bzCompressInit "" HAVE_LIBBZ2)
129ENDIF(WITH_BZIP)
130
131CHECK_INCLUDE_FILES(getopt.h HAVE_GETOPT_H)
132CHECK_INCLUDE_FILES(inttypes.h HAVE_INTTYPES_H)
133IF(WITH_LDAP)
134  CHECK_INCLUDE_FILES(ldap.h HAVE_LDAP_H)
135  CHECK_LIBRARY_EXISTS(ldap ldap_open "" HAVE_LIBLDAP)
136ENDIF(WITH_LDAP)
137
138IF(WITH_LIBAIO)
139  CHECK_INCLUDE_FILES(libaio.h HAVE_LIBAIO_H)
140  CHECK_LIBRARY_EXISTS(aio io_getevents "" HAVE_LIBAIO)
141ENDIF(WITH_LIBAIO)
142
143IF(WITH_XML)
144  XCONFIG(xml2-config XML2_INCDIR XML2_LIBDIR XML2_LDFLAGS XML2_CFLAGS)
145  IF(XML2_LDFLAGS OR XML2_CFLAGS)
146    MESSAGE(STATUS "found xml2 at: LDFLAGS: ${XML2_LDFLAGS} CFLAGS: ${XML2_CFLAGS}")
147
148    ## if it is empty we'll get newline returned
149    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${XML2_CFLAGS}")
150
151    CHECK_INCLUDE_FILES(libxml/tree.h HAVE_LIBXML_H)
152
153    SET(CMAKE_REQUIRED_FLAGS ${XML2_LDFLAGS})
154    CHECK_LIBRARY_EXISTS(xml2 xmlParseChunk "" HAVE_LIBXML)
155    SET(CMAKE_REQUIRED_FLAGS)
156  ELSE(XML2_LDFLAGS OR XML2_CFLAGS)
157    CHECK_INCLUDE_FILES(libxml.h HAVE_LIBXML_H)
158    CHECK_LIBRARY_EXISTS(xml2 xmlParseChunk "" HAVE_LIBXML)
159  ENDIF(XML2_LDFLAGS OR XML2_CFLAGS)
160
161  IF(NOT HAVE_LIBXML_H)
162    MESSAGE(FATAL_ERROR "libxml/tree.h couldn't be found")
163  ENDIF(NOT HAVE_LIBXML_H)
164  IF(NOT HAVE_LIBXML)
165    MESSAGE(FATAL_ERROR "libxml2 couldn't be found")
166  ENDIF(NOT HAVE_LIBXML)
167
168ENDIF(WITH_XML)
169
170IF(WITH_PCRE)
171  ## if we have pcre-config, use it
172  XCONFIG(pcre-config PCRE_INCDIR PCRE_LIBDIR PCRE_LDFLAGS PCRE_CFLAGS)
173  IF(PCRE_LDFLAGS OR PCRE_CFLAGS)
174    MESSAGE(STATUS "found pcre at: LDFLAGS: ${PCRE_LDFLAGS} CFLAGS: ${PCRE_CFLAGS}")
175
176    IF(NOT PCRE_CFLAGS STREQUAL "\n")
177      ## if it is empty we'll get newline returned
178      SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PCRE_CFLAGS}")
179    ENDIF(NOT PCRE_CFLAGS STREQUAL "\n")
180
181    CHECK_INCLUDE_FILES(pcre.h HAVE_PCRE_H)
182
183    SET(CMAKE_REQUIRED_FLAGS ${PCRE_LDFLAGS})
184    CHECK_LIBRARY_EXISTS(pcre pcre_exec "" HAVE_LIBPCRE)
185    SET(CMAKE_REQUIRED_FLAGS)
186
187  ELSE(PCRE_LDFLAGS OR PCRE_CFLAGS)
188    IF(NOT WIN32)
189      CHECK_INCLUDE_FILES(pcre.h HAVE_PCRE_H)
190      CHECK_LIBRARY_EXISTS(pcre pcre_exec "" HAVE_LIBPCRE)
191                SET(PCRE_LIBRARY pcre)
192    ELSE(NOT WIN32)
193      FIND_PATH(PCRE_INCLUDE_DIR pcre.h
194      /usr/local/include
195      /usr/include
196      )
197 
198      SET(PCRE_NAMES pcre)
199      FIND_LIBRARY(PCRE_LIBRARY
200      NAMES ${PCRE_NAMES}
201      PATHS /usr/lib /usr/local/lib
202      )
203 
204      IF(PCRE_INCLUDE_DIR AND PCRE_LIBRARY)
205        SET(CMAKE_REQUIRED_INCLUDES ${PCRE_INCLUDE_DIR})
206        SET(CMAKE_REQUIRED_LIBRARIES ${PCRE_LIBRARY})
207        CHECK_INCLUDE_FILES(pcre.h HAVE_PCRE_H)
208        CHECK_LIBRARY_EXISTS(pcre pcre_exec "" HAVE_LIBPCRE)
209        SET(CMAKE_REQUIRED_INCLUDES)
210        SET(CMAKE_REQUIRED_LIBRARIES)
211        INCLUDE_DIRECTORIES(${PCRE_INCLUDE_DIR})
212      ENDIF(PCRE_INCLUDE_DIR AND PCRE_LIBRARY)
213    ENDIF(NOT WIN32)
214  ENDIF(PCRE_LDFLAGS OR PCRE_CFLAGS)
215
216  IF(NOT HAVE_PCRE_H)
217    MESSAGE(FATAL_ERROR "pcre.h couldn't be found")
218  ENDIF(NOT HAVE_PCRE_H)
219  IF(NOT HAVE_LIBPCRE)
220    MESSAGE(FATAL_ERROR "libpcre couldn't be found")
221  ENDIF(NOT HAVE_LIBPCRE)
222
223ENDIF(WITH_PCRE)
224
225CHECK_INCLUDE_FILES(poll.h HAVE_POLL_H)
226CHECK_INCLUDE_FILES(pwd.h HAVE_PWD_H)
227
228OPTION(WITH_SQLITE3 "with property-support [sqlite3] for mod_webdav [default: off]")
229IF(WITH_SQLITE3)
230  CHECK_INCLUDE_FILES(sqlite3.h HAVE_SQLITE3_H)
231  CHECK_LIBRARY_EXISTS(sqlite3 sqlite3_reset "" HAVE_SQLITE3)
232ENDIF(WITH_SQLITE3)
233
234IF(WITH_GLIB)
235  PKGCONFIG(gthread-2.0 GTHREAD_INCDIR GTHREAD_LIBDIR GTHREAD_LDFLAGS GTHREAD_CFLAGS)
236  MESSAGE(STATUS "found gthread-2.0 at: INCDIR: ${GTHREAD_INCDIR} LIBDIR: ${GTHREAD_LIBDIR} LDFLAGS: ${GTHREAD_LDFLAGS} CFLAGS: ${GTHREAD_CFLAGS}")
237
238  SET(GLIB_INC_DIRS ${GTHREAD_INCDIR}/glib-2.0/ ${GTHREAD_LIBDIR}/glib-2.0/include/)
239  INCLUDE_DIRECTORIES(${GLIB_INC_DIRS})
240
241  SET(CMAKE_REQUIRED_INCLUDES ${GLIB_INC_DIRS})
242  CHECK_INCLUDE_FILES(glib.h HAVE_GLIB_H)
243  SET(CMAKE_REQUIRED_INCLUDES)
244ENDIF(WITH_GLIB)
245
246IF(WITH_LIBFCGI)
247  CHECK_INCLUDE_FILES(fastcgi.h HAVE_FASTCGI_H)
248  CHECK_INCLUDE_FILES(fastcgi/fastcgi.h HAVE_FASTCGI_FASTCGI_H)
249  IF(HAVE_FASTCGI_H OR HAVE_FASTCGI_FASTCGI_H)
250    CHECK_LIBRARY_EXISTS(fcgi FCGI_Accept "" HAVE_LIBFCGI)
251  ENDIF(HAVE_FASTCGI_H OR HAVE_FASTCGI_FASTCGI_H)
252ENDIF(WITH_LIBFCGI)
253
254CHECK_INCLUDE_FILES(stddef.h HAVE_STDDEF_H)
255CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
256CHECK_INCLUDE_FILES(syslog.h HAVE_SYSLOG_H)
257IF(WITH_UUID)
258  CHECK_INCLUDE_FILES(uuid/uuid.h HAVE_UUID_H)
259  CHECK_LIBRARY_EXISTS(uuid uuid_generate "" NEED_LIBUUID)
260  IF(NOT NEED_LIBUUID)
261    CHECK_FUNCTION_EXISTS(uuid_generate HAVE_LIBUUID)
262  ELSE(NOT NEED_LIBUUID)
263    SET(HAVE_LIBUUID 1)
264  ENDIF(NOT NEED_LIBUUID)
265ENDIF(WITH_UUID)
266
267CHECK_INCLUDE_FILES(sys/inotify.h HAVE_SYS_INOTIFY_H)
268IF(HAVE_SYS_INOTIFY_H)
269  CHECK_FUNCTION_EXISTS(inotify_init HAVE_INOTIFY_INIT)
270ENDIF(HAVE_SYS_INOTIFY_H)
271
272IF(WITH_ZLIB)
273  IF(NOT WIN32)
274    CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
275    CHECK_LIBRARY_EXISTS(z deflate "" HAVE_LIBZ)
276                SET(ZLIB_LIBRARY z)
277  ELSE(NOT WIN32)
278    FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
279    /usr/local/include
280    /usr/include
281    )
282 
283    SET(ZLIB_NAMES z zlib zdll)
284    FIND_LIBRARY(ZLIB_LIBRARY
285    NAMES ${ZLIB_NAMES}
286    PATHS /usr/lib /usr/local/lib
287    )
288 
289 
290    IF(ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
291      SET(CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIR})
292      SET(CMAKE_REQUIRED_LIBRARIES ${ZLIB_LIBRARY})
293      GET_FILENAME_COMPONENT(ZLIB_NAME ${ZLIB_LIBRARY} NAME)
294      CHECK_INCLUDE_FILES(zlib.h HAVE_ZLIB_H)
295      CHECK_LIBRARY_EXISTS(${ZLIB_NAME} deflate "" HAVE_LIBZ)
296      SET(CMAKE_REQUIRED_INCLUDES)
297      SET(CMAKE_REQUIRED_LIBRARIES)
298      INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
299 
300    ENDIF(ZLIB_INCLUDE_DIR AND ZLIB_LIBRARY)
301  ENDIF(NOT WIN32)
302ENDIF(WITH_ZLIB)
303
304IF(WITH_LUA)
305  PKGCONFIG(lua LUA_INCDIR LUA_LIBDIR LUA_LDFLAGS LUA_CFLAGS)
306  IF(NOT LUA_LDFLAGS)
307    PKGCONFIG(lua5.1 LUA_INCDIR LUA_LIBDIR LUA_LDFLAGS LUA_CFLAGS)
308  ENDIF(NOT LUA_LDFLAGS)
309  MESSAGE(STATUS "found lua at: INCDIR: ${LUA_INCDIR} LIBDIR: ${LUA_LIBDIR} LDFLAGS: ${LUA_LDFLAGS} CFLAGS: ${LUA_CFLAGS}")
310  IF(LUA_LDFLAGS)
311    SET(HAVE_LIBLUA 1 "Have liblua")
312    INCLUDE_DIRECTORIES(${LUA_INCDIR})
313                ADD_DEFINITIONS(${LUA_CFLAGS})
314
315    SET(CMAKE_REQUIRED_INCLUDES ${LUA_INCDIR})
316    SET(CMAKE_REQUIRED_FLAGS ${LUA_CFLAGS})
317    CHECK_INCLUDE_FILES(lua.h HAVE_LUA_H)
318    SET(CMAKE_REQUIRED_INCLUDES)
319    SET(CMAKE_REQUIRED_FLAGS)
320  ELSE(LUA_LDFLAGS)
321    SET(HAVE_LIBLUA "" "Have liblua")
322    SET(HAVE_LUA_H  "" "Have liblua header")
323  ENDIF(LUA_LDFLAGS)
324ENDIF(WITH_LUA)
325
326CHECK_INCLUDE_FILES(crypt.h HAVE_CRYPT_H)
327IF(NOT BUILD_STATIC)
328  CHECK_INCLUDE_FILES(dlfcn.h HAVE_DLFCN_H)
329ENDIF(NOT BUILD_STATIC)
330
331SET(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
332CHECK_TYPE_SIZE(socklen_t HAVE_SOCKLEN_T)
333SET(CMAKE_EXTRA_INCLUDE_FILES)
334
335CHECK_TYPE_SIZE(long SIZEOF_LONG)
336CHECK_TYPE_SIZE(off_t SIZEOF_OFF_T)
337
338CHECK_FUNCTION_EXISTS(chroot HAVE_CHROOT)
339CHECK_FUNCTION_EXISTS(crypt HAVE_CRYPT)
340CHECK_FUNCTION_EXISTS(epoll_ctl HAVE_EPOLL_CTL)
341CHECK_FUNCTION_EXISTS(fork HAVE_FORK)
342CHECK_FUNCTION_EXISTS(getrlimit HAVE_GETRLIMIT)
343CHECK_FUNCTION_EXISTS(getuid HAVE_GETUID)
344CHECK_FUNCTION_EXISTS(gmtime_r HAVE_GMTIME_R)
345CHECK_FUNCTION_EXISTS(inet_ntop HAVE_INET_NTOP)
346CHECK_FUNCTION_EXISTS(kqueue HAVE_KQUEUE)
347CHECK_FUNCTION_EXISTS(localtime_r HAVE_LOCALTIME_R)
348CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT)
349CHECK_FUNCTION_EXISTS(madvise HAVE_MADVISE)
350CHECK_FUNCTION_EXISTS(memcpy HAVE_MEMCPY)
351CHECK_FUNCTION_EXISTS(memset HAVE_MEMSET)
352CHECK_FUNCTION_EXISTS(mmap HAVE_MMAP)
353CHECK_FUNCTION_EXISTS(pathconf HAVE_PATHCONF)
354CHECK_FUNCTION_EXISTS(poll HAVE_POLL)
355CHECK_FUNCTION_EXISTS(port_create HAVE_PORT_CREATE)
356CHECK_FUNCTION_EXISTS(prctl HAVE_PRCTL)
357CHECK_FUNCTION_EXISTS(pread HAVE_PREAD)
358CHECK_FUNCTION_EXISTS(posix_fadvise HAVE_POSIX_FADVISE)
359CHECK_FUNCTION_EXISTS(select HAVE_SELECT)
360CHECK_FUNCTION_EXISTS(sendfile HAVE_SENDFILE)
361CHECK_FUNCTION_EXISTS(sendfile64 HAVE_SENDFILE64)
362CHECK_FUNCTION_EXISTS(sendfilev HAVE_SENDFILEV)
363CHECK_FUNCTION_EXISTS(sigaction HAVE_SIGACTION)
364CHECK_FUNCTION_EXISTS(signal HAVE_SIGNAL)
365CHECK_FUNCTION_EXISTS(sigtimedwait HAVE_SIGTIMEDWAIT)
366CHECK_FUNCTION_EXISTS(strptime HAVE_STRPTIME)
367CHECK_FUNCTION_EXISTS(syslog HAVE_SYSLOG)
368CHECK_FUNCTION_EXISTS(writev HAVE_WRITEV)
369CHECK_FUNCTION_EXISTS(inet_aton HAVE_INET_ATON)
370CHECK_FUNCTION_EXISTS(inet_atop HAVE_IPV6)
371
372IF(HAVE_CRYPT_H)
373  ## check if we need libcrypt for crypt()
374  CHECK_LIBRARY_EXISTS(crypt crypt "" HAVE_LIBCRYPT)
375ENDIF(HAVE_CRYPT_H)
376
377IF(HAVE_DLFCN_H)
378  CHECK_LIBRARY_EXISTS(dl dlopen "" HAVE_LIBDL)
379ENDIF(HAVE_DLFCN_H)
380
381ADD_DEFINITIONS(
382  -DLIGHTTPD_VERSION_ID=10500
383  -DPACKAGE_NAME="\\"${CMAKE_PROJECT_NAME}\\""
384  -DPACKAGE_VERSION="\\"${CPACK_PACKAGE_VERSION}\\""
385  )
386
387IF(NOT SBINDIR)
388    SET(SBINDIR "sbin")
389ENDIF(NOT SBINDIR)
390
391SET(LIGHTTPD_MODULES_DIR "lib${LIB_SUFFIX}/lighttpd")
392IF(NOT WIN32)
393ADD_DEFINITIONS(
394  -DLIBRARY_DIR="\\"${CMAKE_INSTALL_PREFIX}/${LIGHTTPD_MODULES_DIR}\\""
395)
396ELSE(NOT WIN32)
397## We use relative path in windows
398ADD_DEFINITIONS(
399  -DLIBRARY_DIR="\\"lib\\""
400)
401ENDIF(NOT WIN32)
402
403## Write out config.h
404CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
405
406ADD_DEFINITIONS(-DHAVE_CONFIG_H)
407
408INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
409
410SET(COMMON_SRC
411      buffer.c log.c
412      keyvalue.c chunk.c
413      stream.c fdevent.c
414      stat_cache.c plugin.c joblist.c etag.c array.c
415      data_string.c data_count.c data_array.c
416      data_integer.c md5.c
417      fdevent_select.c fdevent_linux_rtsig.c
418      fdevent_poll.c fdevent_linux_sysepoll.c
419      fdevent_solaris_devpoll.c fdevent_freebsd_kqueue.c
420      data_config.c bitset.c
421      inet_ntop_cache.c crc32.c
422      connections-glue.c iosocket.c
423      configfile-glue.c
424      http-header-glue.c status_counter.c
425      network_writev.c
426      network_write.c
427      network_linux_sendfile.c
428      network_freebsd_sendfile.c
429      network_win32_send.c
430      network_solaris_sendfilev.c
431      network_openssl.c
432      network_linux_aio.c
433      network_posix_aio.c
434      network_gthread_aio.c
435      network_gthread_sendfile.c
436      http_resp.c
437      http_resp_parser.c
438      http_req.c
439      http_req_parser.c
440      http_req_range.c
441      http_req_range_parser.c
442      sys-files.c
443      sys-socket.c
444      filter.c
445      timing.c
446)
447
448IF(WIN32)
449  MESSAGE(STATUS "Adding local getopt implementation.")
450  SET(COMMON_SRC ${COMMON_SRC} xgetopt.c)
451ENDIF(WIN32)
452
453ADD_EXECUTABLE(lemon lemon.c)
454
455## Build parsers by using lemon...
456LEMON_PARSER(configparser.y)
457LEMON_PARSER(http_req_parser.y)
458LEMON_PARSER(http_req_range_parser.y)
459LEMON_PARSER(http_resp_parser.y)
460LEMON_PARSER(mod_ssi_exprparser.y)
461
462SET(L_INSTALL_TARGETS)
463
464IF(HAVE_LIBFCGI)
465  ADD_EXECUTABLE(fcgi-stat-accel fcgi-stat-accel.c)
466  TARGET_LINK_LIBRARIES(fcgi-stat-accel fcgi)
467  SET_TARGET_PROPERTIES(fcgi-stat-accel PROPERTIES LINK_FLAGS "-pthread")
468  SET(L_INSTALL_TARGETS ${L_INSTALL_TARGETS} fcgi-stat-accel)
469ENDIF(HAVE_LIBFCGI)
470
471ADD_EXECUTABLE(spawn-fcgi spawn-fcgi.c)
472SET(L_INSTALL_TARGETS ${L_INSTALL_TARGETS} spawn-fcgi)
473
474ADD_EXECUTABLE(lighttpd
475        server.c
476        network.c
477        configfile.c
478        configparser.c
479        connections.c
480        proc_open.c
481        request.c
482        response.c
483        ${COMMON_SRC})
484SET(L_INSTALL_TARGETS ${L_INSTALL_TARGETS} lighttpd)
485
486
487ADD_AND_INSTALL_LIBRARY(mod_access mod_access.c)
488ADD_AND_INSTALL_LIBRARY(mod_alias mod_alias.c)
489ADD_AND_INSTALL_LIBRARY(mod_dirlisting mod_dirlisting.c)
490ADD_AND_INSTALL_LIBRARY(mod_staticfile mod_staticfile.c)
491
492ADD_AND_INSTALL_LIBRARY(mod_indexfile mod_indexfile.c)
493ADD_AND_INSTALL_LIBRARY(mod_setenv mod_setenv.c)
494ADD_AND_INSTALL_LIBRARY(mod_rrdtool mod_rrdtool.c)
495ADD_AND_INSTALL_LIBRARY(mod_usertrack mod_usertrack.c)
496ADD_AND_INSTALL_LIBRARY(mod_proxy_core  "mod_proxy_core.c;mod_proxy_core_pool.c;mod_proxy_core_backend.c;mod_proxy_core_address.c;mod_proxy_core_backlog.c;mod_proxy_core_protocol.c;mod_proxy_core_rewrites.c")
497ADD_AND_INSTALL_LIBRARY(mod_proxy_backend_http mod_proxy_backend_http.c)
498ADD_AND_INSTALL_LIBRARY(mod_proxy_backend_fastcgi mod_proxy_backend_fastcgi.c)
499ADD_AND_INSTALL_LIBRARY(mod_proxy_backend_scgi mod_proxy_backend_scgi.c)
500ADD_AND_INSTALL_LIBRARY(mod_proxy_backend_ajp13 mod_proxy_backend_ajp13.c)
501ADD_AND_INSTALL_LIBRARY(mod_userdir mod_userdir.c)
502ADD_AND_INSTALL_LIBRARY(mod_secdownload mod_secure_download.c)
503ADD_AND_INSTALL_LIBRARY(mod_accesslog mod_accesslog.c)
504ADD_AND_INSTALL_LIBRARY(mod_simple_vhost mod_simple_vhost.c)
505ADD_AND_INSTALL_LIBRARY(mod_evhost mod_evhost.c)
506ADD_AND_INSTALL_LIBRARY(mod_expire mod_expire.c)
507ADD_AND_INSTALL_LIBRARY(mod_status mod_status.c)
508ADD_AND_INSTALL_LIBRARY(mod_compress mod_compress.c)
509ADD_AND_INSTALL_LIBRARY(mod_redirect mod_redirect.c)
510ADD_AND_INSTALL_LIBRARY(mod_rewrite mod_rewrite.c)
511ADD_AND_INSTALL_LIBRARY(mod_auth "mod_auth.c;http_auth_digest.c;http_auth.c")
512ADD_AND_INSTALL_LIBRARY(mod_sql_vhost_core mod_sql_vhost_core.c)
513ADD_AND_INSTALL_LIBRARY(mod_mysql_vhost mod_mysql_vhost.c)
514ADD_AND_INSTALL_LIBRARY(mod_postgresql_vhost mod_postgresql_vhost.c)
515ADD_AND_INSTALL_LIBRARY(mod_trigger_b4_dl mod_trigger_b4_dl.c)
516ADD_AND_INSTALL_LIBRARY(mod_uploadprogress mod_uploadprogress.c)
517ADD_AND_INSTALL_LIBRARY(mod_evasive mod_evasive.c)
518ADD_AND_INSTALL_LIBRARY(mod_ssi "mod_ssi_exprparser.c;mod_ssi_expr.c;mod_ssi.c")
519ADD_AND_INSTALL_LIBRARY(mod_flv_streaming mod_flv_streaming.c)
520ADD_AND_INSTALL_LIBRARY(mod_chunked mod_chunked.c)
521ADD_AND_INSTALL_LIBRARY(mod_magnet "mod_magnet.c;mod_magnet_cache.c")
522ADD_AND_INSTALL_LIBRARY(mod_deflate mod_deflate.c)
523ADD_AND_INSTALL_LIBRARY(mod_webdav mod_webdav.c)
524
525IF(NOT WIN32)
526ADD_AND_INSTALL_LIBRARY(mod_cgi mod_cgi.c)
527ENDIF(NOT WIN32)
528
529IF(HAVE_PCRE_H)
530  TARGET_LINK_LIBRARIES(lighttpd ${PCRE_LIBRARY})
531  TARGET_LINK_LIBRARIES(mod_rewrite ${PCRE_LIBRARY})
532  TARGET_LINK_LIBRARIES(mod_dirlisting ${PCRE_LIBRARY})
533  TARGET_LINK_LIBRARIES(mod_redirect ${PCRE_LIBRARY})
534  TARGET_LINK_LIBRARIES(mod_ssi ${PCRE_LIBRARY})
535  TARGET_LINK_LIBRARIES(mod_trigger_b4_dl ${PCRE_LIBRARY})
536  TARGET_LINK_LIBRARIES(mod_proxy_core ${PCRE_LIBRARY})
537ENDIF(HAVE_PCRE_H)
538
539ADD_TARGET_PROPERTIES(mod_magnet LINK_FLAGS "${LUA_LDFLAGS}")
540ADD_TARGET_PROPERTIES(mod_magnet COMPILE_FLAGS "${LUA_CFLAGS}")
541
542IF(HAVE_MYSQL_H AND HAVE_LIBMYSQL)
543  TARGET_LINK_LIBRARIES(mod_mysql_vhost mysqlclient)
544  INCLUDE_DIRECTORIES(/usr/include/mysql)
545ENDIF(HAVE_MYSQL_H AND HAVE_LIBMYSQL)
546
547IF(HAVE_LIBPQ_FE_H AND HAVE_LIBPQ)
548  TARGET_LINK_LIBRARIES(mod_postgresql_vhost pq)
549  INCLUDE_DIRECTORIES(/usr/include/pgsql)
550ENDIF(HAVE_LIBPQ_FE_H AND HAVE_LIBPQ)
551
552SET(L_MOD_WEBDAV)
553IF(HAVE_SQLITE3_H)
554  SET(L_MOD_WEBDAV ${L_MOD_WEBDAV} sqlite3)
555ENDIF(HAVE_SQLITE3_H)
556IF(HAVE_LIBXML_H)
557  SET_TARGET_PROPERTIES(mod_webdav PROPERTIES LINK_FLAGS ${XML2_LDFLAGS})
558ENDIF(HAVE_LIBXML_H)
559IF(HAVE_UUID_H)
560  IF(NEED_LIBUUID)
561    SET(L_MOD_WEBDAV ${L_MOD_WEBDAV} uuid)
562  ENDIF(NEED_LIBUUID)
563ENDIF(HAVE_UUID_H)
564
565TARGET_LINK_LIBRARIES(mod_webdav ${L_MOD_WEBDAV})
566
567SET(L_MOD_AUTH)
568IF(HAVE_LIBCRYPT)
569  SET(L_MOD_AUTH ${L_MOD_AUTH} crypt)
570ENDIF(HAVE_LIBCRYPT)
571
572IF(HAVE_LDAP_H)
573  SET(L_MOD_AUTH ${L_MOD_AUTH} ldap lber)
574ENDIF(HAVE_LDAP_H)
575TARGET_LINK_LIBRARIES(mod_auth ${L_MOD_AUTH})
576
577IF(HAVE_ZLIB_H)
578  IF(HAVE_BZLIB_H)
579    TARGET_LINK_LIBRARIES(mod_compress ${ZLIB_LIBRARY} bz2)
580    TARGET_LINK_LIBRARIES(mod_deflate ${ZLIB_LIBRARY} bz2)
581  ELSE(HAVE_BZLIB_H)
582    TARGET_LINK_LIBRARIES(mod_compress ${ZLIB_LIBRARY})
583    TARGET_LINK_LIBRARIES(mod_deflate ${ZLIB_LIBRARY})
584  ENDIF(HAVE_BZLIB_H)
585ENDIF(HAVE_ZLIB_H)
586
587IF(CMAKE_COMPILER_IS_GNUCC)
588  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=gnu99 -Wall -g -Wshadow -W -pedantic")
589  SET(CMAKE_C_FLAGS_RELEASE        "${CMAKE_C_FLAGS_RELEASE}     -O2")
590  SET(CMAKE_C_FLAGS_DEBUG          "${CMAKE_C_FLAGS_DEBUG}       -O0")
591  SET(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_WITHDEBINFO} -O2")
592  ADD_DEFINITIONS(-D_GNU_SOURCE)
593ENDIF(CMAKE_COMPILER_IS_GNUCC)
594
595ADD_TARGET_PROPERTIES(lighttpd LINK_FLAGS "${GTHREAD_LDFLAGS} ${XML2_LDFLAGS}")
596IF(CMAKE_SYSTEM MATCHES "Linux")
597  ## on linux we need pthread and librt for posix-aio
598  ADD_TARGET_PROPERTIES(lighttpd LINK_FLAGS "-lrt")
599ENDIF(CMAKE_SYSTEM MATCHES "Linux")
600
601ADD_TARGET_PROPERTIES(lighttpd COMPILE_FLAGS "${GTHREAD_CFLAGS}")
602SET_TARGET_PROPERTIES(lighttpd PROPERTIES CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
603
604IF(WIN32)
605  SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVALGRIND")
606  ADD_TARGET_PROPERTIES(lighttpd COMPILE_FLAGS "-DLI_DECLARE_EXPORTS")
607  TARGET_LINK_LIBRARIES(lighttpd ws2_32)
608  TARGET_LINK_LIBRARIES(mod_proxy_core ws2_32)
609  TARGET_LINK_LIBRARIES(mod_proxy_backend_ajp13 ws2_32)
610  TARGET_LINK_LIBRARIES(mod_proxy_backend_fastcgi ws2_32)
611  TARGET_LINK_LIBRARIES(mod_proxy_backend_scgi ws2_32)
612  TARGET_LINK_LIBRARIES(mod_ssi ws2_32)
613  # required for mingw gcc/ld
614  IF(WITH_GLIB)
615    TARGET_LINK_LIBRARIES(lighttpd glib-2.0 gthread-2.0)
616  ENDIF(WITH_GLIB)
617
618  IF(MINGW)
619    TARGET_LINK_LIBRARIES(lighttpd msvcr70)
620    ADD_TARGET_PROPERTIES(lighttpd LINK_FLAGS "-Wl,-subsystem,console")
621  ENDIF(MINGW)
622ENDIF(WIN32)
623
624IF(NOT BUILD_STATIC)
625  IF(HAVE_LIBDL)
626    TARGET_LINK_LIBRARIES(lighttpd dl)
627  ENDIF(HAVE_LIBDL)
628ENDIF(NOT BUILD_STATIC)
629
630IF(HAVE_LIBAIO_H)
631  TARGET_LINK_LIBRARIES(lighttpd aio)
632ENDIF(HAVE_LIBAIO_H)
633
634IF(HAVE_PCRE_H)
635  TARGET_LINK_LIBRARIES(lighttpd pcre)
636ENDIF(HAVE_PCRE_H)
637
638IF(HAVE_LIBSSL AND HAVE_LIBCRYPTO)
639  TARGET_LINK_LIBRARIES(lighttpd ssl)
640  TARGET_LINK_LIBRARIES(lighttpd crypto)
641ENDIF(HAVE_LIBSSL AND HAVE_LIBCRYPTO)
642
643IF(NOT WIN32)
644INSTALL(TARGETS ${L_INSTALL_TARGETS}
645        RUNTIME DESTINATION ${SBINDIR}
646        LIBRARY DESTINATION ${LIGHTTPD_MODULES_DIR}
647        ARCHIVE DESTINATION ${LIGHTTPD_MODULES_DIR}/static)
648ELSE(NOT WIN32)
649## HACK to make win32 to install our libraries in desired directory..
650INSTALL(TARGETS lighttpd
651        RUNTIME DESTINATION ${SBINDIR}
652        ARCHIVE DESTINATION lib/static)
653LIST(REMOVE_ITEM L_INSTALL_TARGETS lighttpd)
654INSTALL(TARGETS ${L_INSTALL_TARGETS}
655        RUNTIME DESTINATION ${SBINDIR}/lib
656        LIBRARY DESTINATION lib
657        ARCHIVE DESTINATION lib/static)
658ENDIF(NOT WIN32)
Note: See TracBrowser for help on using the browser.