]> git.ipfire.org Git - thirdparty/sarg.git/blame - CMakeLists.txt
Use the word "Redirector" instead of squidGuard in the report as other redirectors...
[thirdparty/sarg.git] / CMakeLists.txt
CommitLineData
b3695c67
FM
1CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
2PROJECT(sarg C)
3SET(sarg_VERSION 2)
fd46f082 4SET(sarg_REVISION "3-pre2")
e3af0ae9 5SET(sarg_BUILD "")
987e8375 6SET(sarg_BUILDDATE "Apr-12-2010")
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")
594c9da4 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")
7bbc1de4 44SET(SARGPHPDIR "share/sarg/sarg-php" CACHE PATH "The directory to copy sarg-php relative to the install directory")
b3695c67
FM
45
46# Sources to compile
47INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}") #Make it find this config.h before the one in src/include
48INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include")
49SET(SRC util.c log.c report.c topuser.c email.c sort.c html.c
50 totger.c index.c getconf.c usage.c decomp.c ip2name.c
51 useragent.c exclude.c convlog.c totday.c repday.c datafile.c
52 indexonly.c splitlog.c lastlog.c topsites.c siteuser.c css.c
c36c7384 53 smartfilter.c denied.c authfail.c charset.c
b3695c67 54 squidguard_log.c squidguard_report.c auth.c download.c grepday.c
8988b90d 55 dansguardian_log.c dansguardian_report.c realtime.c btree_cache.c
4ca814cc 56 usertab.c userinfo.c longline.c)
b3695c67
FM
57
58FOREACH(f ${SRC})
59 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)
60ENDFOREACH(f)
61
62ADD_EXECUTABLE(sarg ${SRC})
63
b3695c67
FM
64SET_TARGET_PROPERTIES(sarg PROPERTIES VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
65
d25d4e6a 66SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "$ENV{CFLAGS} -Wall -Wno-sign-compare")
0a4e18e1
FM
67SET_TARGET_PROPERTIES(sarg PROPERTIES LINK_FLAGS "$ENV{LDFLAGS}")
68
d25d4e6a
FM
69CHECK_C_COMPILER_FLAG("-Wextra" HAVE_WEXTRA)
70IF(HAVE_WEXTRA)
71 # Not supported by gcc 3.3
72 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
73 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Wextra -Wno-unused-parameter")
74ENDIF(HAVE_WEXTRA)
75
9c7c6346
FM
76CHECK_C_COMPILER_FLAG("-Werror=implicit-function-declaration" HAVE_WERROR_IMPLICIT_FUNCTION)
77IF(HAVE_WERROR_IMPLICIT_FUNCTION)
78 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
79 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=implicit-function-declaration")
80ENDIF(HAVE_WERROR_IMPLICIT_FUNCTION)
81
82CHECK_C_COMPILER_FLAG("-Werror=format" HAVE_WERROR_FORMAT)
83IF(HAVE_WERROR_FORMAT)
84 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
85 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=format")
86ENDIF(HAVE_WERROR_FORMAT)
87
b3695c67
FM
88# Required header files
89CHECK_INCLUDE_FILE(stdio.h HAVE_STDIO_H)
90CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
91CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
92CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
93CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
94CHECK_INCLUDE_FILE(time.h HAVE_TIME_H)
95CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
96CHECK_INCLUDE_FILE(sys/dirent.h HAVE_SYS_DIRENT_H)
97CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H)
98CHECK_INCLUDE_FILE(sys/socket.h HAVE_SYS_SOCKET_H)
99CHECK_INCLUDE_FILE(netdb.h HAVE_NETDB_H)
100CHECK_INCLUDE_FILE(arpa/inet.h HAVE_ARPA_INET_H)
101CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
102CHECK_INCLUDE_FILE(netinet/in.h HAVE_NETINET_H)
103CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
104CHECK_INCLUDE_FILE(ctype.h HAVE_CTYPE_H)
105CHECK_INCLUDE_FILE(errno.h HAVE_ERRNO_H)
106CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
107CHECK_INCLUDE_FILE(sys/wait.h HAVE_SYS_WAIT_H)
108CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
109CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
110CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
8988b90d 111CHECK_INCLUDE_FILE(math.h HAVE_MATH_H)
a1de61fe 112CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
e6414a9d 113CHECK_INCLUDE_FILE(execinfo.h HAVE_EXECINFO_H)
eca2cec9 114CHECK_INCLUDE_FILE(libintl.h HAVE_LIBINTL_H)
d5d021c5 115CHECK_INCLUDE_FILE(libgen.h HAVE_LIBGEN_H)
06b39c87 116CHECK_INCLUDE_FILE(stdbool.h HAVE_STDBOOL_H)
b3695c67
FM
117
118CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
e6414a9d 119CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE)
b5f13803 120CHECK_FUNCTION_EXISTS(symlink HAVE_SYMLINK)
463f8e09 121CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT)
72c27633 122CHECK_FUNCTION_EXISTS(getnameinfo HAVE_GETNAMEINFO)
b3695c67
FM
123
124# Find gd
125CHECK_INCLUDE_FILE(gd.h HAVE_GD_H)
126IF(HAVE_GD_H)
127 CHECK_INCLUDE_FILE(gdfontl.h HAVE_GDFONTL_H)
128 CHECK_INCLUDE_FILE(gdfontt.h HAVE_GDFONTT_H)
129 CHECK_INCLUDE_FILE(gdfonts.h HAVE_GDFONTS_H)
130 CHECK_INCLUDE_FILE(gdfontmb.h HAVE_GDFONTMB_H)
131 CHECK_INCLUDE_FILE(gdfontg.h HAVE_GDFONTG_H)
a1de61fe 132 FIND_LIBRARY(GD_LIBRARY NAMES gd bgd DOC "The GD library")
b3695c67 133 IF(GD_LIBRARY)
2824ec9b 134 #CHECK_LIBRARY_EXISTS(gd gdImagePng "." HAVE_GD_LIB)
a1de61fe 135 TARGET_LINK_LIBRARIES(sarg ${GD_LIBRARY})
2824ec9b
FM
136 SET(HAVE_GD_LIB GD_LIBRARY CACHE PATH DOC "True IF GD was found")
137 SET(HAVE_GD_LIB CACHE BOOL DOC "True IF must use GD")
b3695c67
FM
138 ENDIF(GD_LIBRARY)
139ENDIF(HAVE_GD_H)
140
141# Find iconv
142OPTION(ENABLE_ICONV "Enable the usage of iconv" ON)
143IF(ENABLE_ICONV)
144 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
145 IF(HAVE_ICONV_H)
463f8e09
FM
146 FIND_PATH(ICONV_INCLUDE_PATH NAMES iconv.h)
147 FIND_LIBRARY(ICONV_LIBRARY NAMES iconv DOC "The ICONV library")
148 IF(ICONV_LIBRARY)
149 TARGET_LINK_LIBRARIES(sarg ${ICONV_LIBRARY})
150 ENDIF(ICONV_LIBRARY)
b3695c67 151 CHECK_FUNCTION_EXISTS(iconv_open HAVE_ICONV)
b3695c67
FM
152
153 SET(ICONV_CONST_FILE ${CMAKE_BINARY_DIR}/consticonv.c)
154 FILE(WRITE ${ICONV_CONST_FILE} "
155#include <stdlib.h>
156#include <iconv.h>
157extern
158#ifdef __cplusplus
159"C"
160#endif
161#if defined(__STDC__) || defined(__cplusplus)
162size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
163#else
164size_t iconv();
165#endif
166")
167 TRY_COMPILE(USE_CONST_ICONV ${CMAKE_BINARY_DIR} ${ICONV_CONST_FILE})
168 FILE(REMOVE ${ICONV_CONST_FILE})
169 IF(USE_CONST_ICONV)
170 SET(ICONV_CONST "\"const\"")
171 ENDIF(USE_CONST_ICONV)
172 ENDIF(HAVE_ICONV_H)
173ENDIF(ENABLE_ICONV)
174
965c4a6f
FM
175# Find ldap
176CHECK_INCLUDE_FILE(ldap.h HAVE_LDAP_H)
177IF(HAVE_LDAP_H)
178 FIND_LIBRARY(LDAP_LIBRARY NAMES ldap DOC "The ldap library")
179 IF(LDAP_LIBRARY)
180 TARGET_LINK_LIBRARIES(sarg ${LDAP_LIBRARY})
181 SET(HAVE_LDAP LDAP_LIBRARY CACHE PATH DOC "True if LDAP was found")
182 SET(HAVE_LDAP CACHE BOOL DOC "True if must use LDAP")
183 ENDIF(LDAP_LIBRARY)
184ENDIF(HAVE_LDAP_H)
185
b3695c67
FM
186# Support for large files
187OPTION(ENABLE_LARGEFILE "Enable the usage of large files" ON)
188IF(ENABLE_LARGEFILE)
189 IF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
190 SET(SEARCH_LARGEFILE TRUE)
191 ENDIF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
192ENDIF(ENABLE_LARGEFILE)
193
194IF(SEARCH_LARGEFILE)
195 SET(LFS_SEARCHED TRUE CACHE INTERNAL "LFS has been searched")
196 MESSAGE(STATUS "Looking for large file support")
197 SET(LFS_FILE "${CMAKE_BINARY_DIR}/lfsfopen64.c")
198 FILE(WRITE ${LFS_FILE} "
199#include <stdio.h>
200int main(void)
201{
202FILE *f = fopen64 (\"/tmp/foo\",\"r\");
203return(0);
204}
205")
206 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} COMPILE_DEFINITIONS "-Wall -Werror")
207 IF(HAVE_FOPEN64)
208 MESSAGE(STATUS "Looking for large file support - found")
209 ELSE(HAVE_FOPEN64)
210 SET(LFS_NEED_DEFINE FALSE CACHE BOOL "Does LFS require _LARGEFILE64_SOURCE ?")
211 MESSAGE(STATUS "Looking for large file support with _LARGEFILE64_SOURCE")
212 FILE(WRITE ${LFS_FILE} "
213#define _LARGEFILE64_SOURCE
214#include <stdio.h>
215int main(void)
216{
217FILE *f = fopen64 (\"/tmp/foo\",\"r\");
218return(0);
219}
220")
221 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} OUTPUT_VARIABLE LFS_OUTPUT)
222 IF(HAVE_FOPEN64)
223 MESSAGE(STATUS "Looking for large file support with _LARGEFILE64_SOURCE - found")
224 SET(LFS_NEED_DEFINE TRUE CACHE BOOL "Does LFS require _LARGEFILE64_SOURCE ?" FORCE)
225 ELSE(HAVE_FOPEN64)
226 MESSAGE("Failed with output ${LFS_OUTPUT}")
227 ENDIF(HAVE_FOPEN64)
228 ENDIF(HAVE_FOPEN64)
229 FILE(REMOVE ${LFS_FILE})
230ENDIF(SEARCH_LARGEFILE)
231
232IF(LFS_NEED_DEFINE)
233 ADD_DEFINITIONS(-D_LARGEFILE64_SOURCE)
234ENDIF(LFS_NEED_DEFINE)
235
b3695c67
FM
236# Find rlim_t
237IF(HAVE_SYS_RESOURCE_H)
238 SET(CMAKE_EXTRA_INCLUDE_FILES "sys/resource.h")
239ENDIF(HAVE_SYS_RESOURCE_H)
240CHECK_TYPE_SIZE(rlim_t RLIM_T)
241IF(HAVE_RLIM_T)
242 IF(RLIM_T STREQUAL 4)
243 SET(RLIM_STRING "%d")
244 ELSEIF(RLIM_T STREQUAL 8)
245 SET(RLIM_STRING "%lli")
246 ELSE(RLIM_T STREQUAL 4)
247 MESSAGE("Unknown rlim_t size")
248 ENDIF(RLIM_T STREQUAL 4)
eca2cec9
FM
249#ELSE(HAVE_RLIM_T)
250# MESSAGE("Cannot detect the size of your system's rlim_t type")
b3695c67
FM
251ENDIF(HAVE_RLIM_T)
252
253# Windows need lib wsock32
e112fa1f 254IF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
b3695c67
FM
255 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
256 CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H)
9a2efbd0 257 FIND_LIBRARY(WSOCK_LIB NAMES wsock32 DOC "The winsock library")
b3695c67
FM
258 #check_library_exists(wsock32 "." HAVE_WSOCK)
259 IF(WSOCK_LIB)
260 #set_target_properties(sarg PROPERTIES LINK_FLAGS "${LINK_FLAGS} -lwsock32")
261 TARGET_LINK_LIBRARIES(sarg wsock32)
262 ENDIF(WSOCK_LIB)
6798f0a7 263 ADD_DEFINITIONS(-DWINDOWS)
e112fa1f 264ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
b3695c67
FM
265
266CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP)
e112fa1f 267IF(NOT HAVE_MKSTEMP)
b3695c67 268 # MingW provide mkstemps in libiberty but doesn't declare it in any header file
9a2efbd0 269 FIND_LIBRARY(IBERTY_LIB NAMES iberty DOC "The library of mingw containing mkstemps")
b3695c67
FM
270 IF(IBERTY_LIB)
271 TARGET_LINK_LIBRARIES(sarg iberty)
272 ENDIF(IBERTY_LIB)
e112fa1f 273ENDIF(NOT HAVE_MKSTEMP)
b3695c67 274
eca2cec9
FM
275# Gettext and friends
276IF(NOT HAVE_LC_MESSAGES)
d25d4e6a 277 SET(FILES)
eca2cec9
FM
278 IF(HAVE_LOCALE_H)
279 LIST(APPEND FILES "locale.h")
280 ENDIF(HAVE_LOCALE_H)
281 IF(HAVE_LIBINTL_H)
282 LIST(APPEND FILES "libintl.h")
283 ENDIF(HAVE_LIBINTL_H)
284 LIST(LENGTH FILES NFILES)
285 IF(NFILES GREATER 0)
eca2cec9
FM
286 CHECK_SYMBOL_EXISTS(LC_MESSAGES "${FILES}" HAVE_LC_MESSAGES)
287 ENDIF(NFILES GREATER 0)
288ENDIF(NOT HAVE_LC_MESSAGES)
289
b3695c67 290# System particularities
e112fa1f 291IF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
b3695c67
FM
292 TARGET_LINK_LIBRARIES(sarg socket nsl)
293 #SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_DEFINITIONS="-DSOLARIS ${COMPILE_DEFINITIONS}")
294 ADD_DEFINITIONS(-DSOLARIS)
e112fa1f 295ENDIF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
b3695c67 296
05b90947
FM
297OPTION(ENABLE_EXTRA_PROTECT "Enable compile and runtime extra protections" OFF)
298IF(ENABLE_EXTRA_PROTECT)
9c7c6346
FM
299 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
300 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -fstack-protector -D_FORTIFY_SOURCE=2 -Werror")
d9c45e9c 301 CHECK_C_COMPILER_FLAG("-Wformat -Werror=format-security" HAVE_WERROR_FORMAT_SECURITY)
9c7c6346
FM
302 IF(HAVE_WERROR_FORMAT_SECURITY)
303 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
d9c45e9c 304 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Wformat -Werror=format-security")
9c7c6346 305 ENDIF(HAVE_WERROR_FORMAT_SECURITY)
05b90947
FM
306ENDIF(ENABLE_EXTRA_PROTECT)
307
b3695c67
FM
308# Save the configuration for the project
309CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY)
310
311# Installation of the project
312INSTALL(TARGETS sarg DESTINATION "${BINDIR}")
6798f0a7
FM
313INSTALL(FILES sarg.conf DESTINATION "${SYSCONFDIR}" RENAME sarg.conf.exemple)
314INSTALL(FILES exclude_codes user_limit_block css.tpl DESTINATION "${SYSCONFDIR}")
b3695c67 315INSTALL(FILES sarg.1 DESTINATION "${MANDIR}")
a1de61fe
FM
316INSTALL(DIRECTORY languages/ DESTINATION "${LANGDIR}" PATTERN ".svn" EXCLUDE)
317INSTALL(DIRECTORY images/ DESTINATION "${IMAGEDIR}" PATTERN ".svn" EXCLUDE)
318INSTALL(DIRECTORY fonts/ DESTINATION "${FONTDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN ".svn" EXCLUDE)
7bbc1de4 319INSTALL(DIRECTORY sarg-php/ DESTINATION "${SARGPHPDIR}" PATTERN ".svn" EXCLUDE)
b3695c67
FM
320
321# Package creation
322SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Squid Analysis Report Generator")
323SET(CPACK_PACKAGE_VERSION_MAJOR "${sarg_VERSION}")
324SET(CPACK_PACKAGE_VERSION_MINOR "${sarg_REVISION}")
325SET(CPACK_PACKAGE_VERSION_PATCH "${sarg_BUILD}")
326SET(CPACK_GENERATOR TGZ)
327SET(CPACK_SOURCE_GENERATOR TGZ)
a1de61fe 328SET(CPACK_SOURCE_IGNORE_FILES "/.svn/" "/debian/" "/html/" "Makefile$" "config\\\\.log$" "config\\\\.status$" ".*~$" "\\\\.o$")
b3695c67 329INCLUDE(CPack)