CMAKE_MINIMUM_REQUIRED (VERSION 2.6)
PROJECT(sarg C)
SET(sarg_VERSION 2)
-SET(sarg_REVISION 2)
-SET(sarg_BUILD 5)
-SET(sarg_BUILDDATE "Sep-14-2009")
+SET(sarg_REVISION "3rc1")
+SET(sarg_BUILD "")
+SET(sarg_BUILDDATE "Mar-02-2010")
INCLUDE(AddFileDependencies)
INCLUDE(CheckIncludeFile)
INCLUDE(CheckFunctionExists)
INCLUDE(CheckTypeSize)
INCLUDE(CheckSymbolExists)
+INCLUDE(CheckCCompilerFlag)
DEFINE_PROPERTY(GLOBAL PROPERTY enable-htmldir BRIEF_DOCS "--enable-htmldir=htmldir"
FULL_DOCS "Select htmldir as the root of your WWW documents")
SET(PACKAGE_NAME "sarg")
-SET(PACKAGE_VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD} ${sarg_BUILDDATE}")
+SET(PACKAGE_VERSION "${sarg_VERSION}.${sarg_REVISION}${sarg_BUILD}")
MACRO(SET_ABS_SOURCE VAR DOC)
IF(${VAR} AND NOT ${VAR}_SOURCE)
SET(LANGDIR "share/sarg/languages" CACHE PATH "The directory to copy the languages files relative to the install directory")
SET(FONTDIR "share/sarg/fonts" CACHE PATH "The directory to copy the fonts relative to the install directory")
SET(IMAGEDIR "share/sarg/images" CACHE PATH "The directory to copy the images files relative to the install directory")
+SET(SARGPHPDIR "share/sarg/sarg-php" CACHE PATH "The directory to copy sarg-php relative to the install directory")
# Sources to compile
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}") #Make it find this config.h before the one in src/include
totger.c index.c getconf.c usage.c decomp.c ip2name.c
useragent.c exclude.c convlog.c totday.c repday.c datafile.c
indexonly.c splitlog.c lastlog.c topsites.c siteuser.c css.c
- smartfilter.c denied.c authfail.c language.c charset.c
+ smartfilter.c denied.c authfail.c charset.c
squidguard_log.c squidguard_report.c auth.c download.c grepday.c
- dansguardian_log.c dansguardian_report.c realtime.c)
+ dansguardian_log.c dansguardian_report.c realtime.c btree_cache.c
+ usertab.c userinfo.c)
FOREACH(f ${SRC})
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)
ADD_EXECUTABLE(sarg ${SRC})
-SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAG "${CFLAGS} -Wall -Werror=implicit-function-declaration")
SET_TARGET_PROPERTIES(sarg PROPERTIES VERSION "${sarg_VERSION}.${sarg_REVISION}.${sarg_BUILD}")
+SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "$ENV{CFLAGS} -Wall -Wno-sign-compare")
+SET_TARGET_PROPERTIES(sarg PROPERTIES LINK_FLAGS "$ENV{LDFLAGS}")
+
+CHECK_C_COMPILER_FLAG("-Wextra" HAVE_WEXTRA)
+IF(HAVE_WEXTRA)
+ # Not supported by gcc 3.3
+ GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
+ SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Wextra -Wno-unused-parameter")
+ENDIF(HAVE_WEXTRA)
+
+CHECK_C_COMPILER_FLAG("-Werror=implicit-function-declaration" HAVE_WERROR_IMPLICIT_FUNCTION)
+IF(HAVE_WERROR_IMPLICIT_FUNCTION)
+ GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
+ SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=implicit-function-declaration")
+ENDIF(HAVE_WERROR_IMPLICIT_FUNCTION)
+
+CHECK_C_COMPILER_FLAG("-Werror=format" HAVE_WERROR_FORMAT)
+IF(HAVE_WERROR_FORMAT)
+ GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
+ SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Werror=format")
+ENDIF(HAVE_WERROR_FORMAT)
+
# Required header files
CHECK_INCLUDE_FILE(stdio.h HAVE_STDIO_H)
CHECK_INCLUDE_FILE(stdlib.h HAVE_STDLIB_H)
CHECK_INCLUDE_FILE(stdarg.h HAVE_STDARG_H)
CHECK_INCLUDE_FILE(inttypes.h HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE(limits.h HAVE_LIMITS_H)
+CHECK_INCLUDE_FILE(math.h HAVE_MATH_H)
+CHECK_INCLUDE_FILE(locale.h HAVE_LOCALE_H)
+CHECK_INCLUDE_FILE(execinfo.h HAVE_EXECINFO_H)
+CHECK_INCLUDE_FILE(libintl.h HAVE_LIBINTL_H)
CHECK_FUNCTION_EXISTS(bzero HAVE_BZERO)
+CHECK_FUNCTION_EXISTS(backtrace HAVE_BACKTRACE)
+CHECK_FUNCTION_EXISTS(symlink HAVE_SYMLINK)
+CHECK_FUNCTION_EXISTS(lstat HAVE_LSTAT)
# Find gd
CHECK_INCLUDE_FILE(gd.h HAVE_GD_H)
CHECK_INCLUDE_FILE(gdfonts.h HAVE_GDFONTS_H)
CHECK_INCLUDE_FILE(gdfontmb.h HAVE_GDFONTMB_H)
CHECK_INCLUDE_FILE(gdfontg.h HAVE_GDFONTG_H)
- FIND_LIBRARY(GD_LIBRARY NAMES gd PATHS /usr/lib /usr/local/lib DOC "The GD library")
+ FIND_LIBRARY(GD_LIBRARY NAMES gd bgd DOC "The GD library")
IF(GD_LIBRARY)
#CHECK_LIBRARY_EXISTS(gd gdImagePng "." HAVE_GD)
- TARGET_LINK_LIBRARIES(sarg gd)
+ TARGET_LINK_LIBRARIES(sarg ${GD_LIBRARY})
SET(HAVE_GD GD_LIBRARY CACHE PATH DOC "True IF GD was found")
SET(HAVE_GD CACHE BOOL DOC "True IF must use GD")
ENDIF(GD_LIBRARY)
IF(ENABLE_ICONV)
CHECK_INCLUDE_FILE(iconv.h HAVE_ICONV_H)
IF(HAVE_ICONV_H)
+ FIND_PATH(ICONV_INCLUDE_PATH NAMES iconv.h)
+ FIND_LIBRARY(ICONV_LIBRARY NAMES iconv DOC "The ICONV library")
+ IF(ICONV_LIBRARY)
+ TARGET_LINK_LIBRARIES(sarg ${ICONV_LIBRARY})
+ ENDIF(ICONV_LIBRARY)
CHECK_FUNCTION_EXISTS(iconv_open HAVE_ICONV)
- IF(!HAVE_ICONV)
- FIND_PATH(ICONV_INCLUDE_PATH NAMES iconv.h PATHS /usr/include /usr/local/include)
- FIND_LIBRARY(ICONV_LIBRARY NAMES iconv PATHS /lib /usr/lib /usr/local/lib DOC "The ICONV library")
- ENDIF(!HAVE_ICONV)
SET(ICONV_CONST_FILE ${CMAKE_BINARY_DIR}/consticonv.c)
FILE(WRITE ${ICONV_CONST_FILE} "
ENDIF(HAVE_ICONV_H)
ENDIF(ENABLE_ICONV)
+# Find ldap
+CHECK_INCLUDE_FILE(ldap.h HAVE_LDAP_H)
+IF(HAVE_LDAP_H)
+ FIND_LIBRARY(LDAP_LIBRARY NAMES ldap DOC "The ldap library")
+ IF(LDAP_LIBRARY)
+ TARGET_LINK_LIBRARIES(sarg ${LDAP_LIBRARY})
+ SET(HAVE_LDAP LDAP_LIBRARY CACHE PATH DOC "True if LDAP was found")
+ SET(HAVE_LDAP CACHE BOOL DOC "True if must use LDAP")
+ ENDIF(LDAP_LIBRARY)
+ENDIF(HAVE_LDAP_H)
+
# Support for large files
OPTION(ENABLE_LARGEFILE "Enable the usage of large files" ON)
IF(ENABLE_LARGEFILE)
ADD_DEFINITIONS(-D_LARGEFILE64_SOURCE)
ENDIF(LFS_NEED_DEFINE)
-# Find off_t size
-check_type_size(off_t OFF_T)
-IF(HAVE_OFF_T)
- IF(OFF_T STREQUAL 4)
- SET(OFFSET_STRING "\"%d\"")
- elseif(OFF_T STREQUAL 8)
- SET(OFFSET_STRING "\"%\"PRId64")
- ENDIF(OFF_T STREQUAL 4)
-ELSE(HAVE_OFF_T)
- MESSAGE(FATAL_ERROR Need off_t to compile the program)
-ENDIF(HAVE_OFF_T)
-
# Find rlim_t
IF(HAVE_SYS_RESOURCE_H)
SET(CMAKE_EXTRA_INCLUDE_FILES "sys/resource.h")
ELSE(RLIM_T STREQUAL 4)
MESSAGE("Unknown rlim_t size")
ENDIF(RLIM_T STREQUAL 4)
-ELSE(HAVE_RLIM_T)
- MESSAGE("Cannot detect the size of your system's rlim_t type")
+#ELSE(HAVE_RLIM_T)
+# MESSAGE("Cannot detect the size of your system's rlim_t type")
ENDIF(HAVE_RLIM_T)
# Windows need lib wsock32
IF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
CHECK_INCLUDE_FILE(windows.h HAVE_WINDOWS_H)
CHECK_INCLUDE_FILE(winsock.h HAVE_WINSOCK_H)
- FIND_LIBRARY(WSOCK_LIB NAMES wsock32 PATHS /usr/lib /usr/local/lib DOC "The winsock library")
+ FIND_LIBRARY(WSOCK_LIB NAMES wsock32 DOC "The winsock library")
#check_library_exists(wsock32 "." HAVE_WSOCK)
IF(WSOCK_LIB)
#set_target_properties(sarg PROPERTIES LINK_FLAGS "${LINK_FLAGS} -lwsock32")
TARGET_LINK_LIBRARIES(sarg wsock32)
ENDIF(WSOCK_LIB)
+ ADD_DEFINITIONS(-DWINDOWS)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Windows")
CHECK_FUNCTION_EXISTS(mkstemp HAVE_MKSTEMP)
IF(NOT HAVE_MKSTEMP)
# MingW provide mkstemps in libiberty but doesn't declare it in any header file
- FIND_LIBRARY(IBERTY_LIB NAMES iberty PATHS /mingw/lib DOC "The library of mingw containing mkstemps")
+ FIND_LIBRARY(IBERTY_LIB NAMES iberty DOC "The library of mingw containing mkstemps")
IF(IBERTY_LIB)
TARGET_LINK_LIBRARIES(sarg iberty)
ENDIF(IBERTY_LIB)
ENDIF(NOT HAVE_MKSTEMP)
+# Gettext and friends
+IF(NOT HAVE_LC_MESSAGES)
+ SET(FILES)
+ IF(HAVE_LOCALE_H)
+ LIST(APPEND FILES "locale.h")
+ ENDIF(HAVE_LOCALE_H)
+ IF(HAVE_LIBINTL_H)
+ LIST(APPEND FILES "libintl.h")
+ ENDIF(HAVE_LIBINTL_H)
+ LIST(LENGTH FILES NFILES)
+ IF(NFILES GREATER 0)
+ CHECK_SYMBOL_EXISTS(LC_MESSAGES "${FILES}" HAVE_LC_MESSAGES)
+ ENDIF(NFILES GREATER 0)
+ENDIF(NOT HAVE_LC_MESSAGES)
+
# System particularities
IF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
TARGET_LINK_LIBRARIES(sarg socket nsl)
ADD_DEFINITIONS(-DSOLARIS)
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "solaris")
+OPTION(ENABLE_EXTRA_PROTECT "Enable compile and runtime extra protections" OFF)
+IF(ENABLE_EXTRA_PROTECT)
+ GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
+ SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -fstack-protector -D_FORTIFY_SOURCE=2 -Werror")
+ CHECK_C_COMPILER_FLAG("-Wformat -Werror=format-security" HAVE_WERROR_FORMAT_SECURITY)
+ IF(HAVE_WERROR_FORMAT_SECURITY)
+ GET_TARGET_PROPERTY(TMPCFLAGS sarg COMPILE_FLAGS)
+ SET_TARGET_PROPERTIES(sarg PROPERTIES COMPILE_FLAGS "${TMPCFLAGS} -Wformat -Werror=format-security")
+ ENDIF(HAVE_WERROR_FORMAT_SECURITY)
+ENDIF(ENABLE_EXTRA_PROTECT)
+
# Save the configuration for the project
CONFIGURE_FILE("${CMAKE_SOURCE_DIR}/include/config.h.in" "${CMAKE_BINARY_DIR}/config.h" @ONLY)
# Installation of the project
INSTALL(TARGETS sarg DESTINATION "${BINDIR}")
-INSTALL(FILES sarg.conf exclude_codes user_limit_block css.tpl DESTINATION "${SYSCONFDIR}")
+INSTALL(FILES sarg.conf DESTINATION "${SYSCONFDIR}" RENAME sarg.conf.exemple)
+INSTALL(FILES exclude_codes user_limit_block css.tpl DESTINATION "${SYSCONFDIR}")
INSTALL(FILES sarg.1 DESTINATION "${MANDIR}")
-INSTALL(DIRECTORY languages/ DESTINATION "${LANGDIR}" PATTERN "CVS" EXCLUDE)
-INSTALL(DIRECTORY images/ DESTINATION "${IMAGEDIR}" PATTERN "CVS" EXCLUDE)
-INSTALL(DIRECTORY fonts/ DESTINATION "${FONTDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN "CVS" EXCLUDE)
+INSTALL(DIRECTORY languages/ DESTINATION "${LANGDIR}" PATTERN ".svn" EXCLUDE)
+INSTALL(DIRECTORY images/ DESTINATION "${IMAGEDIR}" PATTERN ".svn" EXCLUDE)
+INSTALL(DIRECTORY fonts/ DESTINATION "${FONTDIR}" FILES_MATCHING PATTERN "*.ttf" PATTERN ".svn" EXCLUDE)
+INSTALL(DIRECTORY sarg-php/ DESTINATION "${SARGPHPDIR}" PATTERN ".svn" EXCLUDE)
# Package creation
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Squid Analysis Report Generator")
SET(CPACK_PACKAGE_VERSION_PATCH "${sarg_BUILD}")
SET(CPACK_GENERATOR TGZ)
SET(CPACK_SOURCE_GENERATOR TGZ)
-SET(CPACK_SOURCE_IGNORE_FILES "/CVS/" "/debian/" "/html/" "Makefile$" "config\\\\.log$" "config\\\\.status$" ".*~$" "\\\\.o$")
+SET(CPACK_SOURCE_IGNORE_FILES "/.svn/" "/debian/" "/html/" "Makefile$" "config\\\\.log$" "config\\\\.status$" ".*~$" "\\\\.o$")
INCLUDE(CPack)