1 CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
6 SET(sarg_BUILDDATE "Jan-22-2010")
8 INCLUDE(AddFileDependencies)
9 INCLUDE(CheckIncludeFile)
10 INCLUDE(CheckLibraryExists)
11 INCLUDE(CheckFunctionExists)
12 INCLUDE(CheckTypeSize)
13 INCLUDE(CheckSymbolExists)
14 INCLUDE(CheckCCompilerFlag)
16 DEFINE_PROPERTY(GLOBAL PROPERTY enable-htmldir BRIEF_DOCS "--enable-htmldir=htmldir"
17 FULL_DOCS "Select htmldir as the root of your WWW documents")
19 SET(PACKAGE_NAME "sarg")
20 SET(PACKAGE_VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
22 MACRO(SET_ABS_SOURCE VAR DOC)
23 IF(${VAR} AND NOT ${VAR}_SOURCE)
25 IF(NOT IS_ABSOLUTE ${PATH})
26 SET(PATH "${CMAKE_INSTALL_PREFIX}/${PATH}")
27 ENDIF(NOT IS_ABSOLUTE ${PATH})
28 GET_FILENAME_COMPONENT(SOURCE_PATH "${PATH}" ABSOLUTE)
29 SET(${VAR}_SOURCE "${SOURCE_PATH}" CACHE PATH "${DOC}")
30 ENDIF(${VAR} AND NOT ${VAR}_SOURCE)
31 ENDMACRO(SET_ABS_SOURCE VAR DOC)
33 SET_ABS_SOURCE(SYSCONFDIR "The full path of the configuration directory to be compiled in the program")
34 SET_ABS_SOURCE(LANGDIR "The full path of the language directory to be compiled in the program")
35 SET_ABS_SOURCE(FONTDIR "The full path of the fonts directory to be compiled in the program")
36 SET_ABS_SOURCE(IMAGEDIR "The full path of the images directory to be compiled in the program")
38 SET(SYSCONFDIR "etc/sarg" CACHE PATH "The configuration directory relative to the install directory")
39 SET(BINDIR "bin" CACHE PATH "The directory to install the exec relative to the install directory")
40 SET(MANDIR "share/man" CACHE PATH "The directory to copy the man page relative to the install directory")
41 SET(LANGDIR "share/sarg/languages" CACHE PATH "The directory to copy the languages files relative to the install directory")
42 SET(FONTDIR "share/sarg/fonts" CACHE PATH "The directory to copy the fonts relative to the install directory")
43 SET(IMAGEDIR "share/sarg/images" CACHE PATH "The directory to copy the images files relative to the install directory")
44 SET(SARGPHPDIR "share/sarg/sarg-php" CACHE PATH "The directory to copy sarg-php relative to the install directory")
47 INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}") #Make it find this config.h before the one in src/include
48 INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include")
49 SET(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
53 smartfilter.c denied.c authfail.c language.c charset.c
54 squidguard_log.c squidguard_report.c auth.c download.c grepday.c
55 dansguardian_log.c dansguardian_report.c realtime.c btree_cache.c
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)
62 ADD_EXECUTABLE(sarg ${SRC})
64 SET_TARGET_PROPERTIES(sarg PROPERTIES VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
66 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "$ENV{CFLAGS} -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter")
67 SET_TARGET_PROPERTIES(sarg PROPERTIES LINK_FLAGS "$ENV{LDFLAGS}")
69 CHECK_C_COMPILER_FLAG("-Werror=implicit-function-declaration" HAVE_WERROR_IMPLICIT_FUNCTION)
70 IF(HAVE_WERROR_IMPLICIT_FUNCTION)
71 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
72 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=implicit-function-declaration")
73 ENDIF(HAVE_WERROR_IMPLICIT_FUNCTION)
75 CHECK_C_COMPILER_FLAG("-Werror=format" HAVE_WERROR_FORMAT)
76 IF(HAVE_WERROR_FORMAT)
77 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
78 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=format")
79 ENDIF(HAVE_WERROR_FORMAT)
81 # Required header files
82 CHECK_INCLUDE_FILE(stdio.h HAVE_STDIO_H)
83 CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
84 CHECK_INCLUDE_FILE(string.h HAVE_STRING_H)
85 CHECK_INCLUDE_FILE(strings.h HAVE_STRINGS_H)
86 CHECK_INCLUDE_FILE(sys/time.h HAVE_SYS_TIME_H)
87 CHECK_INCLUDE_FILE(time.h HAVE_TIME_H)
88 CHECK_INCLUDE_FILE(unistd.h HAVE_UNISTD_H)
89 CHECK_INCLUDE_FILE(sys/dirent.h HAVE_SYS_DIRENT_H)
90 CHECK_INCLUDE_FILE(dirent.h HAVE_DIRENT_H)
91 CHECK_INCLUDE_FILE(sys/socket.h HAVE_SYS_SOCKET_H)
92 CHECK_INCLUDE_FILE(netdb.h HAVE_NETDB_H)
93 CHECK_INCLUDE_FILE(arpa/inet.h HAVE_ARPA_INET_H)
94 CHECK_INCLUDE_FILE(sys/types.h HAVE_SYS_TYPES_H)
95 CHECK_INCLUDE_FILE(netinet/in.h HAVE_NETINET_H)
96 CHECK_INCLUDE_FILE(sys/stat.h HAVE_SYS_STAT_H)
97 CHECK_INCLUDE_FILE(ctype.h HAVE_CTYPE_H)
98 CHECK_INCLUDE_FILE(errno.h HAVE_ERRNO_H)
99 CHECK_INCLUDE_FILE(sys/resource.h HAVE_SYS_RESOURCE_H)
100 CHECK_INCLUDE_FILE(sys/wait.h HAVE_SYS_WAIT_H)
101 CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
102 CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
103 CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
104 CHECK_INCLUDE_FILE(ldap.h HAVE_LDAP_H)
105 CHECK_INCLUDE_FILE(math.h HAVE_MATH_H)
106 CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
107 CHECK_INCLUDE_FILE(execinfo.h HAVE_EXECINFO_H)
109 CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
110 CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE)
111 CHECK_FUNCTION_EXISTS(symlink HAVE_SYMLINK)
112 CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT)
115 CHECK_INCLUDE_FILE(gd.h HAVE_GD_H)
117 CHECK_INCLUDE_FILE(gdfontl.h HAVE_GDFONTL_H)
118 CHECK_INCLUDE_FILE(gdfontt.h HAVE_GDFONTT_H)
119 CHECK_INCLUDE_FILE(gdfonts.h HAVE_GDFONTS_H)
120 CHECK_INCLUDE_FILE(gdfontmb.h HAVE_GDFONTMB_H)
121 CHECK_INCLUDE_FILE(gdfontg.h HAVE_GDFONTG_H)
122 FIND_LIBRARY(GD_LIBRARY NAMES gd bgd DOC "The GD library")
124 #CHECK_LIBRARY_EXISTS(gd gdImagePng "." HAVE_GD)
125 TARGET_LINK_LIBRARIES(sarg ${GD_LIBRARY})
126 SET(HAVE_GD GD_LIBRARY CACHE PATH DOC "True IF GD was found")
127 SET(HAVE_GD CACHE BOOL DOC "True IF must use GD")
132 OPTION(ENABLE_ICONV "Enable the usage of iconv" ON)
134 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
136 FIND_PATH(ICONV_INCLUDE_PATH NAMES iconv.h)
137 FIND_LIBRARY(ICONV_LIBRARY NAMES iconv DOC "The ICONV library")
139 TARGET_LINK_LIBRARIES(sarg ${ICONV_LIBRARY})
141 CHECK_FUNCTION_EXISTS(iconv_open HAVE_ICONV)
143 SET(ICONV_CONST_FILE ${CMAKE_BINARY_DIR}/consticonv.c)
144 FILE(WRITE ${ICONV_CONST_FILE} "
151 #if defined(__STDC__) || defined(__cplusplus)
152 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
157 TRY_COMPILE(USE_CONST_ICONV ${CMAKE_BINARY_DIR} ${ICONV_CONST_FILE})
158 FILE(REMOVE ${ICONV_CONST_FILE})
160 SET(ICONV_CONST "\"const\"")
161 ENDIF(USE_CONST_ICONV)
165 # Support for large files
166 OPTION(ENABLE_LARGEFILE "Enable the usage of large files" ON)
168 IF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
169 SET(SEARCH_LARGEFILE TRUE)
170 ENDIF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
171 ENDIF(ENABLE_LARGEFILE)
174 SET(LFS_SEARCHED TRUE CACHE INTERNAL "LFS has been searched")
175 MESSAGE(STATUS "Looking for large file support")
176 SET(LFS_FILE "${CMAKE_BINARY_DIR}/lfsfopen64.c")
177 FILE(WRITE ${LFS_FILE} "
181 FILE *f = fopen64 (\"/tmp/foo\",\"r\");
185 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} COMPILE_DEFINITIONS "-Wall -Werror")
187 MESSAGE(STATUS "Looking for large file support - found")
189 SET(LFS_NEED_DEFINE FALSE CACHE BOOL "Does LFS require _LARGEFILE64_SOURCE ?")
190 MESSAGE(STATUS "Looking for large file support with _LARGEFILE64_SOURCE")
191 FILE(WRITE ${LFS_FILE} "
192 #define _LARGEFILE64_SOURCE
196 FILE *f = fopen64 (\"/tmp/foo\",\"r\");
200 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} OUTPUT_VARIABLE LFS_OUTPUT)
202 MESSAGE(STATUS "Looking for large file support with _LARGEFILE64_SOURCE - found")
203 SET(LFS_NEED_DEFINE TRUE CACHE BOOL "Does LFS require _LARGEFILE64_SOURCE ?" FORCE)
205 MESSAGE("Failed with output ${LFS_OUTPUT}")
208 FILE(REMOVE ${LFS_FILE})
209 ENDIF(SEARCH_LARGEFILE)
212 ADD_DEFINITIONS(-D_LARGEFILE64_SOURCE)
213 ENDIF(LFS_NEED_DEFINE)
216 IF(HAVE_SYS_RESOURCE_H)
217 SET(CMAKE_EXTRA_INCLUDE_FILES "sys/resource.h")
218 ENDIF(HAVE_SYS_RESOURCE_H)
219 CHECK_TYPE_SIZE(rlim_t RLIM_T)
221 IF(RLIM_T STREQUAL 4)
222 SET(RLIM_STRING "%d")
223 ELSEIF(RLIM_T STREQUAL 8)
224 SET(RLIM_STRING "%lli")
225 ELSE(RLIM_T STREQUAL 4)
226 MESSAGE("Unknown rlim_t size")
227 ENDIF(RLIM_T STREQUAL 4)
229 MESSAGE("Cannot detect the size of your system's rlim_t type")
232 # Windows need lib wsock32
233 IF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
234 CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
235 CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H)
236 FIND_LIBRARY(WSOCK_LIB NAMES wsock32 DOC "The winsock library")
237 #check_library_exists(wsock32 "." HAVE_WSOCK)
239 #set_target_properties(sarg PROPERTIES LINK_FLAGS "${LINK_FLAGS} -lwsock32")
240 TARGET_LINK_LIBRARIES(sarg wsock32)
242 ADD_DEFINITIONS(-DWINDOWS)
243 ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
245 CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP)
247 # MingW provide mkstemps in libiberty but doesn't declare it in any header file
248 FIND_LIBRARY(IBERTY_LIB NAMES iberty DOC "The library of mingw containing mkstemps")
250 TARGET_LINK_LIBRARIES(sarg iberty)
252 ENDIF(NOT HAVE_MKSTEMP)
254 # System particularities
255 IF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
256 TARGET_LINK_LIBRARIES(sarg socket nsl)
257 #SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_DEFINITIONS="-DSOLARIS ${COMPILE_DEFINITIONS}")
258 ADD_DEFINITIONS(-DSOLARIS)
259 ENDIF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
261 OPTION(ENABLE_EXTRA_PROTECT "Enable compile and runtime extra protections" OFF)
262 IF(ENABLE_EXTRA_PROTECT)
263 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
264 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -fstack-protector -D_FORTIFY_SOURCE=2 -Werror")
265 CHECK_C_COMPILER_FLAG("-Wformat -Werror=format-security" HAVE_WERROR_FORMAT_SECURITY)
266 IF(HAVE_WERROR_FORMAT_SECURITY)
267 GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
268 SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Wformat -Werror=format-security")
269 ENDIF(HAVE_WERROR_FORMAT_SECURITY)
270 ENDIF(ENABLE_EXTRA_PROTECT)
272 # Save the configuration for the project
273 CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY)
275 # Installation of the project
276 INSTALL(TARGETS sarg DESTINATION "${BINDIR}")
277 INSTALL(FILES sarg.conf DESTINATION "${SYSCONFDIR}" RENAME sarg.conf.exemple)
278 INSTALL(FILES exclude_codes user_limit_block css.tpl DESTINATION "${SYSCONFDIR}")
279 INSTALL(FILES sarg.1 DESTINATION "${MANDIR}")
280 INSTALL(DIRECTORY languages/ DESTINATION "${LANGDIR}" PATTERN ".svn" EXCLUDE)
281 INSTALL(DIRECTORY images/ DESTINATION "${IMAGEDIR}" PATTERN ".svn" EXCLUDE)
282 INSTALL(DIRECTORY fonts/ DESTINATION "${FONTDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN ".svn" EXCLUDE)
283 INSTALL(DIRECTORY sarg-php/ DESTINATION "${SARGPHPDIR}" PATTERN ".svn" EXCLUDE)
286 SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Squid Analysis Report Generator")
287 SET(CPACK_PACKAGE_VERSION_MAJOR "${sarg_VERSION}")
288 SET(CPACK_PACKAGE_VERSION_MINOR "${sarg_REVISION}")
289 SET(CPACK_PACKAGE_VERSION_PATCH "${sarg_BUILD}")
290 SET(CPACK_GENERATOR TGZ)
291 SET(CPACK_SOURCE_GENERATOR TGZ)
292 SET(CPACK_SOURCE_IGNORE_FILES "/.svn/" "/debian/" "/html/" "Makefile$" "config\\\\.log$" "config\\\\.status$" ".*~$" "\\\\.o$")