]> git.ipfire.org Git - thirdparty/sarg.git/blame - CMakeLists.txt
Use boolean to enable all the options instead of string compares.
[thirdparty/sarg.git] / CMakeLists.txt
CommitLineData
b3695c67
FM
1CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
2PROJECT(sarg C)
3SET(sarg_VERSION 2)
4SET(sarg_REVISION 2)
120d768c 5SET(sarg_BUILD "7rc1")
e6414a9d 6SET(sarg_BUILDDATE "Dec-23-2009")
b3695c67
FM
7
8INCLUDE(AddFileDependencies)
9INCLUDE(CheckIncludeFile)
10INCLUDE(CheckLibraryExists)
11INCLUDE(CheckFunctionExists)
12INCLUDE(CheckTypeSize)
13INCLUDE(CheckSymbolExists)
9c7c6346 14INCLUDE(CheckCCompilerFlag)
b3695c67
FM
15
16DEFINE_PROPERTY(GLOBAL PROPERTY enable-htmldir BRIEF_DOCS "--enable-htmldir=htmldir"
17 FULL_DOCS "Select htmldir as the root of your WWW documents")
18
19SET(PACKAGE_NAME "sarg")
6798f0a7 20SET(PACKAGE_VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
b3695c67
FM
21
22MACRO(SET_ABS_SOURCE VAR DOC)
23 IF(${VAR} AND NOT ${VAR}_SOURCE)
24 SET(PATH "${${VAR}}")
25 IF(NOT IS_ABSOLUTE ${PATH})
969129f9 26 SET(PATH "${CMAKE_INSTALL_PREFIX}/${PATH}")
b3695c67 27 ENDIF(NOT IS_ABSOLUTE ${PATH})
969129f9 28 GET_FILENAME_COMPONENT(SOURCE_PATH "${PATH}" ABSOLUTE)
b3695c67
FM
29 SET(${VAR}_SOURCE "${SOURCE_PATH}" CACHE PATH "${DOC}")
30 ENDIF(${VAR} AND NOT ${VAR}_SOURCE)
31ENDMACRO(SET_ABS_SOURCE VAR DOC)
32
33SET_ABS_SOURCE(SYSCONFDIR "The full path of the configuration directory to be compiled in the program")
34SET_ABS_SOURCE(LANGDIR "The full path of the language directory to be compiled in the program")
35SET_ABS_SOURCE(FONTDIR "The full path of the fonts directory to be compiled in the program")
36SET_ABS_SOURCE(IMAGEDIR "The full path of the images directory to be compiled in the program")
37
38SET(SYSCONFDIR "etc/sarg" CACHE PATH "The configuration directory relative to the install directory")
39SET(BINDIR "bin" CACHE PATH "The directory to install the exec relative to the install directory")
40SET(MANDIR "share/man" CACHE PATH "The directory to copy the man page relative to the install directory")
41SET(LANGDIR "share/sarg/languages" CACHE PATH "The directory to copy the languages files relative to the install directory")
42SET(FONTDIR "share/sarg/fonts" CACHE PATH "The directory to copy the fonts relative to the install directory")
43SET(IMAGEDIR "share/sarg/images" CACHE PATH "The directory to copy the images files relative to the install directory")
44
45# Sources to compile
46INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}") #Make it find this config.h before the one in src/include
47INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include")
48SET(SRC util.c log.c report.c topuser.c email.c sort.c html.c
49 totger.c index.c getconf.c usage.c decomp.c ip2name.c
50 useragent.c exclude.c convlog.c totday.c repday.c datafile.c
51 indexonly.c splitlog.c lastlog.c topsites.c siteuser.c css.c
52 smartfilter.c denied.c authfail.c language.c charset.c
53 squidguard_log.c squidguard_report.c auth.c download.c grepday.c
54 dansguardian_log.c dansguardian_report.c realtime.c)
55
56FOREACH(f ${SRC})
57 ADD_FILE_DEPENDENCIES(${f} ${CMAKE_BINARY_DIR}/config.h ${CMAKE_SOURCE_DIR}/include/conf.h ${CMAKE_SOURCE_DIR}/include/info.h ${CMAKE_SOURCE_DIR}/include/defs.h)
58ENDFOREACH(f)
59
60ADD_EXECUTABLE(sarg ${SRC})
61
b3695c67
FM
62SET_TARGET_PROPERTIES(sarg PROPERTIES VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
63
0a4e18e1
FM
64SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "$ENV{CFLAGS} -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter")
65SET_TARGET_PROPERTIES(sarg PROPERTIES LINK_FLAGS "$ENV{LDFLAGS}")
66
9c7c6346
FM
67CHECK_C_COMPILER_FLAG("-Werror=implicit-function-declaration" HAVE_WERROR_IMPLICIT_FUNCTION)
68IF(HAVE_WERROR_IMPLICIT_FUNCTION)
69 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
70 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=implicit-function-declaration")
71ENDIF(HAVE_WERROR_IMPLICIT_FUNCTION)
72
73CHECK_C_COMPILER_FLAG("-Werror=format" HAVE_WERROR_FORMAT)
74IF(HAVE_WERROR_FORMAT)
75 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
76 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=format")
77ENDIF(HAVE_WERROR_FORMAT)
78
b3695c67
FM
79# Required header files
80CHECK_INCLUDE_FILE(stdio.h HAVE_STDIO_H)
81CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
82CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
83CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
84CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
85CHECK_INCLUDE_FILE(time.h HAVE_TIME_H)
86CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
87CHECK_INCLUDE_FILE(sys/dirent.h HAVE_SYS_DIRENT_H)
88CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H)
89CHECK_INCLUDE_FILE(sys/socket.h HAVE_SYS_SOCKET_H)
90CHECK_INCLUDE_FILE(netdb.h HAVE_NETDB_H)
91CHECK_INCLUDE_FILE(arpa/inet.h HAVE_ARPA_INET_H)
92CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
93CHECK_INCLUDE_FILE(netinet/in.h HAVE_NETINET_H)
94CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
95CHECK_INCLUDE_FILE(ctype.h HAVE_CTYPE_H)
96CHECK_INCLUDE_FILE(errno.h HAVE_ERRNO_H)
97CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
98CHECK_INCLUDE_FILE(sys/wait.h HAVE_SYS_WAIT_H)
99CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
100CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
101CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
a1de61fe 102CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
e6414a9d 103CHECK_INCLUDE_FILE(execinfo.h HAVE_EXECINFO_H)
b3695c67
FM
104
105CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
e6414a9d 106CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE)
b3695c67
FM
107
108# Find gd
109CHECK_INCLUDE_FILE(gd.h HAVE_GD_H)
110IF(HAVE_GD_H)
111 CHECK_INCLUDE_FILE(gdfontl.h HAVE_GDFONTL_H)
112 CHECK_INCLUDE_FILE(gdfontt.h HAVE_GDFONTT_H)
113 CHECK_INCLUDE_FILE(gdfonts.h HAVE_GDFONTS_H)
114 CHECK_INCLUDE_FILE(gdfontmb.h HAVE_GDFONTMB_H)
115 CHECK_INCLUDE_FILE(gdfontg.h HAVE_GDFONTG_H)
a1de61fe 116 FIND_LIBRARY(GD_LIBRARY NAMES gd bgd DOC "The GD library")
b3695c67
FM
117 IF(GD_LIBRARY)
118 #CHECK_LIBRARY_EXISTS(gd gdImagePng "." HAVE_GD)
a1de61fe 119 TARGET_LINK_LIBRARIES(sarg ${GD_LIBRARY})
b3695c67
FM
120 SET(HAVE_GD GD_LIBRARY CACHE PATH DOC "True IF GD was found")
121 SET(HAVE_GD CACHE BOOL DOC "True IF must use GD")
122 ENDIF(GD_LIBRARY)
123ENDIF(HAVE_GD_H)
124
125# Find iconv
126OPTION(ENABLE_ICONV "Enable the usage of iconv" ON)
127IF(ENABLE_ICONV)
128 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
129 IF(HAVE_ICONV_H)
130 CHECK_FUNCTION_EXISTS(iconv_open HAVE_ICONV)
131 IF(!HAVE_ICONV)
9a2efbd0
FM
132 FIND_PATH(ICONV_INCLUDE_PATH NAMES iconv.h)
133 FIND_LIBRARY(ICONV_LIBRARY NAMES iconv DOC "The ICONV library")
b3695c67
FM
134 ENDIF(!HAVE_ICONV)
135
136 SET(ICONV_CONST_FILE ${CMAKE_BINARY_DIR}/consticonv.c)
137 FILE(WRITE ${ICONV_CONST_FILE} "
138#include <stdlib.h>
139#include <iconv.h>
140extern
141#ifdef __cplusplus
142"C"
143#endif
144#if defined(__STDC__) || defined(__cplusplus)
145size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
146#else
147size_t iconv();
148#endif
149")
150 TRY_COMPILE(USE_CONST_ICONV ${CMAKE_BINARY_DIR} ${ICONV_CONST_FILE})
151 FILE(REMOVE ${ICONV_CONST_FILE})
152 IF(USE_CONST_ICONV)
153 SET(ICONV_CONST "\"const\"")
154 ENDIF(USE_CONST_ICONV)
155 ENDIF(HAVE_ICONV_H)
156ENDIF(ENABLE_ICONV)
157
158# Support for large files
159OPTION(ENABLE_LARGEFILE "Enable the usage of large files" ON)
160IF(ENABLE_LARGEFILE)
161 IF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
162 SET(SEARCH_LARGEFILE TRUE)
163 ENDIF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
164ENDIF(ENABLE_LARGEFILE)
165
166IF(SEARCH_LARGEFILE)
167 SET(LFS_SEARCHED TRUE CACHE INTERNAL "LFS has been searched")
168 MESSAGE(STATUS "Looking for large file support")
169 SET(LFS_FILE "${CMAKE_BINARY_DIR}/lfsfopen64.c")
170 FILE(WRITE ${LFS_FILE} "
171#include <stdio.h>
172int main(void)
173{
174FILE *f = fopen64 (\"/tmp/foo\",\"r\");
175return(0);
176}
177")
178 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} COMPILE_DEFINITIONS "-Wall -Werror")
179 IF(HAVE_FOPEN64)
180 MESSAGE(STATUS "Looking for large file support - found")
181 ELSE(HAVE_FOPEN64)
182 SET(LFS_NEED_DEFINE FALSE CACHE BOOL "Does LFS require _LARGEFILE64_SOURCE ?")
183 MESSAGE(STATUS "Looking for large file support with _LARGEFILE64_SOURCE")
184 FILE(WRITE ${LFS_FILE} "
185#define _LARGEFILE64_SOURCE
186#include <stdio.h>
187int main(void)
188{
189FILE *f = fopen64 (\"/tmp/foo\",\"r\");
190return(0);
191}
192")
193 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} OUTPUT_VARIABLE LFS_OUTPUT)
194 IF(HAVE_FOPEN64)
195 MESSAGE(STATUS "Looking for large file support with _LARGEFILE64_SOURCE - found")
196 SET(LFS_NEED_DEFINE TRUE CACHE BOOL "Does LFS require _LARGEFILE64_SOURCE ?" FORCE)
197 ELSE(HAVE_FOPEN64)
198 MESSAGE("Failed with output ${LFS_OUTPUT}")
199 ENDIF(HAVE_FOPEN64)
200 ENDIF(HAVE_FOPEN64)
201 FILE(REMOVE ${LFS_FILE})
202ENDIF(SEARCH_LARGEFILE)
203
204IF(LFS_NEED_DEFINE)
205 ADD_DEFINITIONS(-D_LARGEFILE64_SOURCE)
206ENDIF(LFS_NEED_DEFINE)
207
b3695c67
FM
208# Find rlim_t
209IF(HAVE_SYS_RESOURCE_H)
210 SET(CMAKE_EXTRA_INCLUDE_FILES "sys/resource.h")
211ENDIF(HAVE_SYS_RESOURCE_H)
212CHECK_TYPE_SIZE(rlim_t RLIM_T)
213IF(HAVE_RLIM_T)
214 IF(RLIM_T STREQUAL 4)
215 SET(RLIM_STRING "%d")
216 ELSEIF(RLIM_T STREQUAL 8)
217 SET(RLIM_STRING "%lli")
218 ELSE(RLIM_T STREQUAL 4)
219 MESSAGE("Unknown rlim_t size")
220 ENDIF(RLIM_T STREQUAL 4)
221ELSE(HAVE_RLIM_T)
222 MESSAGE("Cannot detect the size of your system's rlim_t type")
223ENDIF(HAVE_RLIM_T)
224
225# Windows need lib wsock32
e112fa1f 226IF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
b3695c67
FM
227 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
228 CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H)
9a2efbd0 229 FIND_LIBRARY(WSOCK_LIB NAMES wsock32 DOC "The winsock library")
b3695c67
FM
230 #check_library_exists(wsock32 "." HAVE_WSOCK)
231 IF(WSOCK_LIB)
232 #set_target_properties(sarg PROPERTIES LINK_FLAGS "${LINK_FLAGS} -lwsock32")
233 TARGET_LINK_LIBRARIES(sarg wsock32)
234 ENDIF(WSOCK_LIB)
6798f0a7 235 ADD_DEFINITIONS(-DWINDOWS)
e112fa1f 236ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
b3695c67
FM
237
238CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP)
e112fa1f 239IF(NOT HAVE_MKSTEMP)
b3695c67 240 # MingW provide mkstemps in libiberty but doesn't declare it in any header file
9a2efbd0 241 FIND_LIBRARY(IBERTY_LIB NAMES iberty DOC "The library of mingw containing mkstemps")
b3695c67
FM
242 IF(IBERTY_LIB)
243 TARGET_LINK_LIBRARIES(sarg iberty)
244 ENDIF(IBERTY_LIB)
e112fa1f 245ENDIF(NOT HAVE_MKSTEMP)
b3695c67
FM
246
247# System particularities
e112fa1f 248IF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
b3695c67
FM
249 TARGET_LINK_LIBRARIES(sarg socket nsl)
250 #SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_DEFINITIONS="-DSOLARIS ${COMPILE_DEFINITIONS}")
251 ADD_DEFINITIONS(-DSOLARIS)
e112fa1f 252ENDIF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
b3695c67 253
05b90947
FM
254OPTION(ENABLE_EXTRA_PROTECT "Enable compile and runtime extra protections" OFF)
255IF(ENABLE_EXTRA_PROTECT)
9c7c6346
FM
256 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
257 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -fstack-protector -D_FORTIFY_SOURCE=2 -Werror")
258 CHECK_C_COMPILER_FLAG("-Werror=format-security" HAVE_WERROR_FORMAT_SECURITY)
259 IF(HAVE_WERROR_FORMAT_SECURITY)
260 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
261 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=format-security")
262 ENDIF(HAVE_WERROR_FORMAT_SECURITY)
05b90947
FM
263ENDIF(ENABLE_EXTRA_PROTECT)
264
b3695c67
FM
265# Save the configuration for the project
266CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY)
267
268# Installation of the project
269INSTALL(TARGETS sarg DESTINATION "${BINDIR}")
6798f0a7
FM
270INSTALL(FILES sarg.conf DESTINATION "${SYSCONFDIR}" RENAME sarg.conf.exemple)
271INSTALL(FILES exclude_codes user_limit_block css.tpl DESTINATION "${SYSCONFDIR}")
b3695c67 272INSTALL(FILES sarg.1 DESTINATION "${MANDIR}")
a1de61fe
FM
273INSTALL(DIRECTORY languages/ DESTINATION "${LANGDIR}" PATTERN ".svn" EXCLUDE)
274INSTALL(DIRECTORY images/ DESTINATION "${IMAGEDIR}" PATTERN ".svn" EXCLUDE)
275INSTALL(DIRECTORY fonts/ DESTINATION "${FONTDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN ".svn" EXCLUDE)
b3695c67
FM
276
277# Package creation
278SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Squid Analysis Report Generator")
279SET(CPACK_PACKAGE_VERSION_MAJOR "${sarg_VERSION}")
280SET(CPACK_PACKAGE_VERSION_MINOR "${sarg_REVISION}")
281SET(CPACK_PACKAGE_VERSION_PATCH "${sarg_BUILD}")
282SET(CPACK_GENERATOR TGZ)
283SET(CPACK_SOURCE_GENERATOR TGZ)
a1de61fe 284SET(CPACK_SOURCE_IGNORE_FILES "/.svn/" "/debian/" "/html/" "Makefile$" "config\\\\.log$" "config\\\\.status$" ".*~$" "\\\\.o$")
b3695c67 285INCLUDE(CPack)