Sfoglia il codice sorgente

* Add issue to cmake to make perl module as well

* Fix some portability issues (to FreeBSD mainly)
* Add script to make modules list
tags/0.2.7
Vsevolod Stakhov 15 anni fa
parent
commit
2300ff7346
5 ha cambiato i file con 150 aggiunte e 10 eliminazioni
  1. 91
    7
      CMakeLists.txt
  2. 27
    1
      config.h.in
  3. 2
    2
      perl/Makefile.PL.in
  4. 1
    0
      src/cfg_file.l
  5. 29
    0
      utils/gen-modules.sh

+ 91
- 7
CMakeLists.txt Vedi File

@@ -54,6 +54,23 @@ ENDIF(NOT LEX_EXECUTABLE OR NOT YACC_EXECUTABLE)
pkg_check_modules(GLIB2 REQUIRED glib-2.0>=2.10)
pkg_check_modules(GMIME2 REQUIRED gmime-2.0)

# Make from ; separated list normal space separated list
# Glib2
FOREACH(arg ${GLIB2_CFLAGS})
SET(GLIB_CFLAGS "${GLIB_CFLAGS} ${arg}")
ENDFOREACH(arg ${GLIB2_CFLAGS})
FOREACH(arg ${GLIB2_LDFLAGS})
SET(GLIB_LDFLAGS "${GLIB_LDFLAGS} ${arg}")
ENDFOREACH(arg ${GLIB2_LDFLAGS})
# Gmime2
FOREACH(arg ${GMIME2_CFLAGS})
SET(GMIME_CFLAGS "${GMIME_CFLAGS} ${arg}")
ENDFOREACH(arg ${GMIME2_CFLAGS})
FOREACH(arg ${GMIME2_LDFLAGS})
SET(GMIME_LDFLAGS "${GMIME_LDFLAGS} ${arg}")
ENDFOREACH(arg ${GMIME2_LDFLAGS})


INCLUDE_DIRECTORIES(${GLIB2_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${GMIME2_INCLUDE_DIRS})
LINK_DIRECTORIES(${GLIB2_LIBRARY_DIRS})
@@ -62,11 +79,29 @@ LINK_DIRECTORIES(${GMIME2_LIBRARY_DIRS})
SET(CMAKE_REQUIRED_LIBRARIES m)
SET(CMAKE_REQUIRED_INCLUDES sys/mman.h stdlib.h stdio.h unistd.h time.h sched.h)

CHECK_LIBRARY_EXISTS(util pidfile_open " " HAVE_PIDFILE)
CHECK_LIBRARY_EXISTS(event event_loop " " HAVE_LIBEVENT)
IF(NOT HAVE_LIBEVENT)
FIND_LIBRARY(LIBEVENT_LIBRARY NAMES event PATHS /lib
/opt/lib
/usr/lib
/usr/local/lib
DOC "Path where the libevent library can be found")
IF(NOT LIBEVENT_LIBRARY)
MESSAGE(FATAL_ERROR "libevent is required for building rspamd")
ENDIF(NOT HAVE_LIBEVENT)
ENDIF(NOT LIBEVENT_LIBRARY)

FIND_LIBRARY(LIBUTIL_LIBRARY NAMES util PATHS /lib
/opt/lib
/usr/lib
/usr/local/lib
DOC "Path where the libutil library can be found")
IF(LIBUTIL_LIBRARY)
LIST(APPEND CMAKE_REQUIRED_LIBRARIES util)
CHECK_FUNCTION_EXISTS(pidfile_open HAVE_PIDFILE)

FIND_FILE(HAVE_LIBUTIL_H NAMES libutil.h PATHS /usr/include
/opt/include
/usr/local/include
DOC "Path to libutil header")
ENDIF(LIBUTIL_LIBRARY)

CHECK_INCLUDE_FILES(sys/types.h HAVE_SYS_TYPES_H)
CHECK_INCLUDE_FILES(sys/time.h HAVE_SYS_TIME_H)
@@ -91,11 +126,15 @@ CHECK_INCLUDE_FILES(sys/socket.h HAVE_SYS_SOCKET_H)
CHECK_INCLUDE_FILES(sys/mman.h HAVE_SYS_MMAN_H)
CHECK_INCLUDE_FILES(sys/un.h HAVE_SYS_UN_H)
CHECK_INCLUDE_FILES(sys/stat.h HAVE_SYS_STAT_H)
CHECK_INCLUDE_FILES(sys/wait.h HAVE_SYS_WAIT_H)
CHECK_INCLUDE_FILES(sys/param.h HAVE_SYS_PARAM_H)
CHECK_INCLUDE_FILES(sys/cdefs.h HAVE_SYS_CDEFS_H)
CHECK_INCLUDE_FILES(netinet/in.h HAVE_NETINET_IN_H)
CHECK_INCLUDE_FILES(arpa/inet.h HAVE_ARPA_INET_H)
CHECK_INCLUDE_FILES(netdb.h HAVE_NETDB_H)
CHECK_INCLUDE_FILES(syslog.h HAVE_SYSLOG_H)


CHECK_FUNCTION_EXISTS(setproctitle HAVE_SETPROCTITLE)
CHECK_FUNCTION_EXISTS(getpagesize HAVE_GETPAGESIZE)
CHECK_FUNCTION_EXISTS(nanosleep HAVE_NANOSLEEP)
@@ -107,9 +146,9 @@ CHECK_SYMBOL_EXISTS(MAP_ANON sys/mman.h HAVE_MMAP_ANON)
CHECK_SYMBOL_EXISTS(_SC_NPROCESSORS_ONLN unistd.h HAVE_SC_NPROCESSORS_ONLN)
CHECK_SYMBOL_EXISTS(SLIST_FOREACH_SAFE sys/queue.h HAVE_COMPATIBLE_QUEUE_H)

if (NOT HAVE_COMPATIBLE_QUEUE_H)
IF(NOT HAVE_COMPATIBLE_QUEUE_H)
INCLUDE_DIRECTORIES(compat)
endif (NOT HAVE_COMPATIBLE_QUEUE_H)
ENDIF(NOT HAVE_COMPATIBLE_QUEUE_H)


SET(CONTRIBSRC "")
@@ -171,6 +210,28 @@ SET(CLASSIFIERSSRC src/classifiers/classifiers.c
SET(PLUGINSSRC src/plugins/surbl.c
src/plugins/regexp.c)

SET(TESTSRC test/rspamd_expression_test.c
test/rspamd_memcached_test.c
test/rspamd_mem_pool_test.c
test/rspamd_statfile_test.c
test/rspamd_test_suite.c
test/rspamd_url_test.c)

SET(TESTDEPENDS src/mem_pool.c
src/hash.c
src/url.c
src/util.c
src/memcached.c
src/statfile.c)

SET(UTILSSRC utils/url_extracter.c)

SET(UTILSDEPENDS src/mem_pool.c
src/hash.c
src/url.c
src/util.c
src/memcached.c)

LIST(LENGTH PLUGINSSRC RSPAMD_MODULES_NUM)

SET(YACC_SRC src/cfg_file.y)
@@ -183,12 +244,19 @@ ADD_CUSTOM_COMMAND(OUTPUT ${LEX_OUTPUT}
COMMAND ${LEX_EXECUTABLE} -o${LEX_OUTPUT} ${LEX_SRC})
ADD_CUSTOM_COMMAND(OUTPUT ${YACC_OUTPUT}
COMMAND ${YACC_EXECUTABLE} -d -o ${YACC_OUTPUT} ${YACC_SRC})
ADD_CUSTOM_COMMAND(TARGET perlxs PRE_LINK
ADD_CUSTOM_COMMAND(OUTPUT src/modules.c
COMMAND ../utils/gen-modules.sh ${PLUGINSSRC}
WORKING_DIRECTORY src)

ADD_CUSTOM_TARGET(perlxs ALL
COMMAND ${PERL_EXECUTABLE} ./Makefile.PL
COMMAND make
WORKING_DIRECTORY perl
VERBATIM)

CONFIGURE_FILE(config.h.in src/config.h)
CONFIGURE_FILE(perl/Makefile.PL.in perl/Makefile.PL)

ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CONTRIBSRC} ${TOKENIZERSSRC} ${CLASSIFIERSSRC} ${PLUGINSSRC} ${YACC_OUTPUT} ${LEX_OUTPUT})
SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
@@ -197,3 +265,19 @@ SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS ${PERL_CFLAGS}
TARGET_LINK_LIBRARIES(rspamd ${GLIB2_LIBRARIES})
TARGET_LINK_LIBRARIES(rspamd event)
TARGET_LINK_LIBRARIES(rspamd ${GMIME2_LIBRARIES})

ADD_EXECUTABLE(test/rspamd-test ${TESTDEPENDS} ${CONTRIBSRC} ${TESTSRC})
SET_TARGET_PROPERTIES(test/rspamd-test PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(test/rspamd-test PROPERTIES COMPILE_FLAGS ${PERL_CFLAGS}
LINK_FLAGS ${PERL_LDFLAGS})
TARGET_LINK_LIBRARIES(test/rspamd-test ${GLIB2_LIBRARIES})
TARGET_LINK_LIBRARIES(test/rspamd-test event)
TARGET_LINK_LIBRARIES(test/rspamd-test ${GMIME2_LIBRARIES})

ADD_EXECUTABLE(utils/url-extracter ${UTILSDEPENDS} ${CONTRIBSRC} ${UTILSSRC})
SET_TARGET_PROPERTIES(utils/url-extracter PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(utils/url-extracter PROPERTIES COMPILE_FLAGS ${PERL_CFLAGS}
LINK_FLAGS ${PERL_LDFLAGS})
TARGET_LINK_LIBRARIES(utils/url-extracter ${GLIB2_LIBRARIES})
TARGET_LINK_LIBRARIES(utils/url-extracter event)
TARGET_LINK_LIBRARIES(utils/url-extracter ${GMIME2_LIBRARIES})

+ 27
- 1
config.h.in Vedi File

@@ -35,14 +35,22 @@

#cmakedefine HAVE_SYSLOG_H 1

#cmakedefine HAVE_LIBUTIL_H 1

#cmakedefine HAVE_ENDIAN_H 1
#cmakedefine HAVE_SYS_ENDIAN_H 1
#cmakedefine HAVE_MACHINE_ENDIAN_H 1
#cmakedefine HAVE_SYS_CDEFS_H 1

#cmakedefine HAVE_SYS_QUEUE_H 1
#cmakedefine HAVE_SYS_MMAN_H 1
#cmakedefine HAVE_SYS_SOCKET_H 1
#cmakedefine HAVE_SYS_UN_H 1
#cmakedefine HAVE_SYS_STAT_H 1
#cmakedefine HAVE_SYS_WAIT_H 1
#cmakedefine HAVE_SYS_PARAM_H 1

#cmakedefine HAVE_PIDFILE 1

#cmakedefine HAVE_SETPROCTITLE 1

@@ -58,7 +66,7 @@

#cmakedefine HAVE_MMAP_ANON 1

#cmakedefine HAVE_OWN_QUEUE_H 1
#cmakedefine HAVE_COMPATIBLE_QUEUE_H 1

#cmakedefine HAVE_SC_NPROCESSORS_ONLN 1

@@ -74,6 +82,16 @@
#include <sys/types.h>
#endif

/* cdefs */
#ifdef HAVE_SYS_CDEFS_H
#include <sys/cdefs.h>
#endif

/* sys/param */
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif

/* stdint */
#ifdef HAVE_STDINT_H
#include <stdint.h>
@@ -164,6 +182,11 @@
#include <sys/stat.h>
#endif

/* sys/wait */
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.h>
#endif

/* math */
#ifdef HAVE_MATH_H
#include <math.h>
@@ -181,7 +204,10 @@
#include <signal.h>
#include <event.h>
#include <glib.h>

#ifndef NO_GMIME
#include <gmime/gmime.h>
#endif

/* Forwarded declaration */
struct module_ctx;

+ 2
- 2
perl/Makefile.PL.in Vedi File

@@ -2,8 +2,8 @@ use ExtUtils::MakeMaker;
WriteMakefile(
NAME => 'rspamd',
VERSION_FROM => 'rspamd.pm', # finds $VERSION
LIBS => ['%%libs%%'], # e.g., '-lm'
LIBS => ['${GLIB_LDFLAGS} ${GMIME_LDFLAGS} -levent'], # e.g., '-lm'
DEFINE => '',
INC => '%%include%%',
INC => '${GLIB_CFLAGS} ${GMIME_CFLAGS}',
);


+ 1
- 0
src/cfg_file.l Vedi File

@@ -3,6 +3,7 @@

%{

#define NO_GMIME
#include "config.h"
#include "cfg_file.h"
#include "cfg_yacc.h"

+ 29
- 0
utils/gen-modules.sh Vedi File

@@ -0,0 +1,29 @@
#!/bin/sh
#
# This script generate modules.c and modules.h for rspamd
# Used by build system

echo "#ifndef MODULES_H" > modules.h
echo "#include \"config.h\"" >> modules.h
echo "#include \"modules.h\"" > modules.c
echo "module_t modules[] = {" >> modules.c;

for arg in $@ ; do
IFS=/
for comp in ${arg} ; do
echo $comp | egrep '^[^/]+.c$' > /dev/null 2>&1
if [ $? -eq 0 ] ; then
mod=`echo $comp | sed -e 's/.c$//'`
fi
done
if [ "F${mod}" != "F" ] ; then
echo "{\"${mod}\", ${mod}_module_init, ${mod}_module_config, ${mod}_module_reconfig}," >> modules.c
echo "int ${mod}_module_init(struct config_file *cfg, struct module_ctx **ctx);" >> modules.h
echo "int ${mod}_module_config(struct config_file *cfg);" >> modules.h
echo "int ${mod}_module_reconfig(struct config_file *cfg);" >> modules.h
fi
IFS=" "
done

echo "};" >> modules.c
echo "#endif" >> modules.h

Loading…
Annulla
Salva