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