OPTION(DEBUG_MODE "Enable debug output [default: ON]" ON)
OPTION(ENABLE_OPTIMIZATION "Enable optimization [default: OFF]" OFF)
+OPTION(ENABLE_PERL "Enable perl support [default: ON]" ON)
OPTION(SKIP_RELINK_RPATH "Skip relinking and full RPATH for the install tree" OFF)
OPTION(ENABLE_REDIRECTOR "Enable redirector install [default: OFF]" OFF)
INCLUDE(CheckSymbolExists)
INCLUDE(CheckLibraryExists)
INCLUDE(FindPkgConfig)
-INCLUDE(FindPerl)
-
-IF(NOT PERL_EXECUTABLE)
- MESSAGE(FATAL_ERROR "Error: Perl is not found but is required")
-ENDIF(NOT PERL_EXECUTABLE)
-
-# Find perl libraries and cflags
-EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ccopts OUTPUT_VARIABLE PERL_CFLAGS)
-EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ldopts OUTPUT_VARIABLE PERL_LDFLAGS)
-STRING(REGEX REPLACE "[\r\n]" " " PERL_CFLAGS ${PERL_CFLAGS})
-STRING(REGEX REPLACE " +$" "" PERL_CFLAGS ${PERL_CFLAGS})
-STRING(REGEX REPLACE "[\r\n]" " " PERL_LDFLAGS ${PERL_LDFLAGS})
-STRING(REGEX REPLACE " +$" "" PERL_LDFLAGS ${PERL_LDFLAGS})
-# Handle DynaLoader
-STRING(REGEX MATCH "/[^ ]*/DynaLoader.a" PERL_DYNALOADER ${PERL_LDFLAGS})
-STRING(REGEX REPLACE "/[^ ]*/DynaLoader.a " "" PERL_LDFLAGS ${PERL_LDFLAGS})
-
-IF(PERL_DYNALOADER)
- EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy ${PERL_DYNALOADER} ${rspamd_BINARY_DIR}/compat/libdynaloader.so)
- LINK_DIRECTORIES(${rspamd_BINARY_DIR}/compat/)
-ENDIF(PERL_DYNALOADER)
+
+IF(ENABLE_PERL MATCHES "ON")
+
+ INCLUDE(FindPerl)
+
+ IF(NOT PERL_EXECUTABLE)
+ MESSAGE(FATAL_ERROR "Error: Perl is not found but is required")
+ ENDIF(NOT PERL_EXECUTABLE)
+
+ # Find perl libraries and cflags
+ EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ccopts OUTPUT_VARIABLE PERL_CFLAGS)
+ EXECUTE_PROCESS(COMMAND ${PERL_EXECUTABLE} -MExtUtils::Embed -e ldopts OUTPUT_VARIABLE PERL_LDFLAGS)
+ STRING(REGEX REPLACE "[\r\n]" " " PERL_CFLAGS ${PERL_CFLAGS})
+ STRING(REGEX REPLACE " +$" "" PERL_CFLAGS ${PERL_CFLAGS})
+ STRING(REGEX REPLACE "[\r\n]" " " PERL_LDFLAGS ${PERL_LDFLAGS})
+ STRING(REGEX REPLACE " +$" "" PERL_LDFLAGS ${PERL_LDFLAGS})
+ # Handle DynaLoader
+ STRING(REGEX MATCH "/[^ ]*/DynaLoader.a" PERL_DYNALOADER ${PERL_LDFLAGS})
+ STRING(REGEX REPLACE "/[^ ]*/DynaLoader.a " "" PERL_LDFLAGS ${PERL_LDFLAGS})
+
+ IF(PERL_DYNALOADER)
+ EXECUTE_PROCESS(COMMAND ${CMAKE_COMMAND} -E copy ${PERL_DYNALOADER} ${rspamd_BINARY_DIR}/compat/libdynaloader.so)
+ LINK_DIRECTORIES(${rspamd_BINARY_DIR}/compat/)
+ ENDIF(PERL_DYNALOADER)
+ELSE(ENABLE_PERL MATCHES "ON")
+ SET(WITHOUT_PERL 1)
+ENDIF(ENABLE_PERL MATCHES "ON")
# Lex and yacc
FIND_PROGRAM(LEX_EXECUTABLE lex)
# Platform specific routines
IF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_BSD_SOURCE -DFREEBSD")
CONFIGURE_FILE(freebsd/rspamd.sh.in freebsd/rspamd.sh @ONLY)
IF(ENABLE_REDIRECTOR MATCHES "ON")
ENDIF(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD")
+IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_GNU_SOURCE -DLINUX")
+ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+
IF(ENABLE_REDIRECTOR MATCHES "ON")
CONFIGURE_FILE(utils/redirector.pl.in utils/redirector.pl @ONLY)
ENDIF(ENABLE_REDIRECTOR MATCHES "ON")
src/upstream.c
src/statfile.c
src/protocol.c
- src/perl.c
src/message.c
src/fuzzy.c
src/expressions.c
src/lmtp.c
src/lmtp_proto.c)
+IF(ENABLE_PERL MATCHES "ON")
+ LIST(APPEND RSPAMDSRC src/perl.c)
+ENDIF(ENABLE_PERL MATCHES "ON")
+
SET(TOKENIZERSSRC src/tokenizers/tokenizers.c
src/tokenizers/osb.c)
COMMAND ../utils/gen-modules.sh ${PLUGINSSRC}
WORKING_DIRECTORY src)
-ADD_CUSTOM_COMMAND(OUTPUT perl/Makefile
- COMMAND ${PERL_EXECUTABLE} ./Makefile.PL
- WORKING_DIRECTORY perl)
-ADD_CUSTOM_TARGET(perlxs
- COMMAND make
- DEPENDS perl/Makefile
- WORKING_DIRECTORY perl
- VERBATIM)
+IF(ENABLE_PERL MATCHES "ON")
+ ADD_CUSTOM_COMMAND(OUTPUT perl/Makefile
+ COMMAND ${PERL_EXECUTABLE} ./Makefile.PL
+ WORKING_DIRECTORY perl)
+ ADD_CUSTOM_TARGET(perlxs
+ COMMAND make
+ DEPENDS perl/Makefile
+ WORKING_DIRECTORY perl
+ VERBATIM)
+ CONFIGURE_FILE(perl/Makefile.PL.in perl/Makefile.PL)
+ENDIF(ENABLE_PERL MATCHES "ON")
CONFIGURE_FILE(config.h.in src/config.h)
-CONFIGURE_FILE(perl/Makefile.PL.in perl/Makefile.PL)
CONFIGURE_FILE(rspamc.pl.in rspamc.pl @ONLY)
ADD_EXECUTABLE(rspamd ${RSPAMDSRC} ${CONTRIBSRC} ${TOKENIZERSSRC}
${LEX_OUTPUT})
SET_TARGET_PROPERTIES(rspamd PROPERTIES LINKER_LANGUAGE C)
SET_TARGET_PROPERTIES(rspamd PROPERTIES VERSION ${RSPAMD_VERSION})
-SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS ${PERL_CFLAGS}
- LINK_FLAGS ${PERL_LDFLAGS})
-TARGET_LINK_LIBRARIES(rspamd ${GLIB2_LIBRARIES})
+
+IF(ENABLE_PERL MATCHES "ON")
+
+ SET_TARGET_PROPERTIES(rspamd PROPERTIES COMPILE_FLAGS ${PERL_CFLAGS}
+ LINK_FLAGS ${PERL_LDFLAGS})
+ IF(PERL_DYNALOADER)
+ TARGET_LINK_LIBRARIES(rspamd dynaloader)
+ ENDIF(PERL_DYNALOADER)
+ ADD_DEPENDENCIES(rspamd perlxs ${LEX_OUTPUT} ${YACC_OUTPUT})
+
+ENDIF(ENABLE_PERL MATCHES "ON")
+
+TARGET_LINK_LIBRARIES(rspamd m)
TARGET_LINK_LIBRARIES(rspamd event)
-IF(PERL_DYNALOADER)
- TARGET_LINK_LIBRARIES(rspamd dynaloader)
-ENDIF(PERL_DYNALOADER)
+TARGET_LINK_LIBRARIES(rspamd ${GLIB2_LIBRARIES})
TARGET_LINK_LIBRARIES(rspamd ${GMIME2_LIBRARIES})
-ADD_DEPENDENCIES(rspamd perlxs ${LEX_OUTPUT} ${YACC_OUTPUT})
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 m)
TARGET_LINK_LIBRARIES(test/rspamd-test event)
+TARGET_LINK_LIBRARIES(test/rspamd-test ${GLIB2_LIBRARIES})
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 m)
TARGET_LINK_LIBRARIES(utils/url-extracter ${GLIB2_LIBRARIES})
TARGET_LINK_LIBRARIES(utils/url-extracter ${GMIME2_LIBRARIES})
INSTALL(PROGRAMS rspamd-${RSPAMD_VERSION} DESTINATION bin RENAME rspamd)
INSTALL(PROGRAMS rspamc.pl DESTINATION bin RENAME rspamc)
-INSTALL(CODE "EXECUTE_PROCESS(COMMAND make install WORKING_DIRECTORY perl)")
+IF(ENABLE_PERL MATCHES "ON")
+ INSTALL(CODE "EXECUTE_PROCESS(COMMAND make install WORKING_DIRECTORY perl)")
+ENDIF(ENABLE_PERL MATCHES "ON")
IF(ENABLE_REDIRECTOR MATCHES "ON")
INSTALL(PROGRAMS utils/redirector.pl DESTINATION bin RENAME rspamd-redirector)
#include "main.h"
#include "cfg_file.h"
#include "util.h"
-#include "perl.h"
#include "lmtp.h"
+#ifndef WITHOUT_PERL
+#include "perl.h"
+#endif
+
/* 2 seconds to fork new process in place of dead one */
#define SOFT_FORK_TIME 2
extern int yynerrs;
extern FILE *yyin;
-extern void xs_init(pTHX);
static int dump_vars = 0;
+#ifndef WITHOUT_PERL
+extern void xs_init(pTHX);
extern PerlInterpreter *perl_interpreter;
+#endif
/* List of workers that are pending to start */
static GList *workers_pending = NULL;
struct rspamd_worker *cur, *cur_tmp, *active_worker;
FILE *f;
pid_t wrk;
+#ifndef WITHOUT_PERL
char *args[] = { "", "-e", "0", NULL };
+#endif
rspamd = (struct rspamd_main *)g_malloc (sizeof (struct rspamd_main));
bzero (rspamd, sizeof (struct rspamd_main));
exit (-errno);
}
+#ifndef WITHOUT_PERL
/* Init perl interpreter */
dTHXa (perl_interpreter);
PERL_SYS_INIT3 (&argc, &argv, &env);
PERL_SET_CONTEXT (perl_interpreter);
perl_construct (perl_interpreter);
perl_parse (perl_interpreter, xs_init, 3, args, NULL);
+#endif
+
/* Block signals to use sigsuspend in future */
sigprocmask(SIG_BLOCK, &signals.sa_mask, NULL);