1 CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
6 SET(sarg_BUILDDATE "Sep-22-2009")
8 INCLUDE(AddFileDependencies)
9 INCLUDE(CheckIncludeFile)
10 INCLUDE(CheckLibraryExists)
11 INCLUDE(CheckFunctionExists)
12 INCLUDE(CheckTypeSize)
13 INCLUDE(CheckSymbolExists)
15 DEFINE_PROPERTY(GLOBAL PROPERTY enable-htmldir BRIEF_DOCS "--enable-htmldir=htmldir"
16 FULL_DOCS "Select htmldir as the root of your WWW documents")
18 SET(PACKAGE_NAME "sarg")
19 SET(PACKAGE_VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
21 MACRO(SET_ABS_SOURCE VAR DOC)
22 IF(${VAR} AND NOT ${VAR}_SOURCE)
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)
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")
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")
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)
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)
59 ADD_EXECUTABLE(sarg ${SRC})
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}")
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)
88 CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
91 CHECK_INCLUDE_FILE(gd.h 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")
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")
108 OPTION(ENABLE_ICONV "Enable the usage of iconv" ON)
110 CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
112 CHECK_FUNCTION_EXISTS(iconv_open 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")
118 SET(ICONV_CONST_FILE ${CMAKE_BINARY_DIR}/consticonv.c)
119 FILE(WRITE ${ICONV_CONST_FILE} "
126 #if defined(__STDC__) || defined(__cplusplus)
127 size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
132 TRY_COMPILE(USE_CONST_ICONV ${CMAKE_BINARY_DIR} ${ICONV_CONST_FILE})
133 FILE(REMOVE ${ICONV_CONST_FILE})
135 SET(ICONV_CONST "\"const\"")
136 ENDIF(USE_CONST_ICONV)
140 # Support for large files
141 OPTION(ENABLE_LARGEFILE "Enable the usage of large files" ON)
143 IF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
144 SET(SEARCH_LARGEFILE TRUE)
145 ENDIF(LFS_SEARCHED MATCHES "^LFS_SEARCHED$")
146 ENDIF(ENABLE_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} "
156 FILE *f = fopen64 (\"/tmp/foo\",\"r\");
160 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} COMPILE_DEFINITIONS "-Wall -Werror")
162 MESSAGE(STATUS "Looking for large file support - found")
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
171 FILE *f = fopen64 (\"/tmp/foo\",\"r\");
175 TRY_COMPILE(HAVE_FOPEN64 ${CMAKE_BINARY_DIR} ${LFS_FILE} OUTPUT_VARIABLE LFS_OUTPUT)
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)
180 MESSAGE("Failed with output ${LFS_OUTPUT}")
183 FILE(REMOVE ${LFS_FILE})
184 ENDIF(SEARCH_LARGEFILE)
187 ADD_DEFINITIONS(-D_LARGEFILE64_SOURCE)
188 ENDIF(LFS_NEED_DEFINE)
191 check_type_size(off_t OFF_T)
194 SET(OFFSET_STRING "\"%d\"")
195 elseif(OFF_T STREQUAL 8)
196 SET(OFFSET_STRING "\"%\"PRId64")
197 ENDIF(OFF_T STREQUAL 4)
199 MESSAGE(FATAL_ERROR Need off_t to compile the program)
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)
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)
216 MESSAGE("Cannot detect the size of your system's rlim_t type")
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)
226 #set_target_properties(sarg PROPERTIES LINK_FLAGS "${LINK_FLAGS} -lwsock32")
227 TARGET_LINK_LIBRARIES(sarg wsock32)
229 ADD_DEFINITIONS(-DWINDOWS)
230 ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
232 CHECK_FUNCTION_EXISTS(mkstemp 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")
237 TARGET_LINK_LIBRARIES(sarg iberty)
239 ENDIF(NOT HAVE_MKSTEMP)
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")
248 # Save the configuration for the project
249 CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY)
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)
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$")