| #!/bin/sh |
| dnl This file is an input file used by the GNU "autoconf" program to |
| dnl generate the file "configure", which is run when building Rivet |
| dnl to configure the system for the local environment. |
| dnl |
| dnl You need at least autoconf 2.59 |
| dnl |
| # |
| #----------------------------------------------------------------------- |
| # Sample configure.in for Tcl Extensions. The only places you should |
| # need to modify this file are marked by the string __CHANGE__ |
| #----------------------------------------------------------------------- |
| |
| #----------------------------------------------------------------------- |
| # __CHANGE__ |
| # Set your package name and version numbers here. |
| # |
| # This initializes the environment with PACKAGE_NAME and PACKAGE_VERSION |
| # set as provided. These will also be added as -D defs in your Makefile |
| # so you can encode the package version directly into the source files. |
| #----------------------------------------------------------------------- |
| |
| AC_INIT([Rivet],[m4_esyscmd_s([cat VERSION])],[rivet-dev@tcl.apache.org]) |
| TEA_INIT([3.9]) |
| |
| # we are storing here the configure command line, as recursive |
| # invocations change the value of the shell variables $0 $* |
| |
| CONFIGURE_CMD="$0 $*" |
| |
| AC_CONFIG_AUX_DIR(tclconfig) |
| AM_INIT_AUTOMAKE |
| AC_CONFIG_HEADERS([config.h]) |
| AC_CONFIG_MACRO_DIR([m4]) |
| |
| # AX_PREFIX_CONFIG_H is a macro taken from the autotools macro archive. |
| # The typical configure generated 'config.h' can be renamed and |
| # preprocessor symbols in it can be prefixed in order to avoid clashes |
| # with Apache's config.h |
| # |
| # As of today (27 Sept 2008) this macro is not part of autotools and |
| # it's in the 'm4' directory |
| # |
| |
| AX_PREFIX_CONFIG_H([rivet_config.h],[rivet]) |
| |
| #-------------------------------------------------------------------- |
| # Call TEA_INIT as the first TEA_ macro to set up initial vars. |
| # This will define a ${TEA_PLATFORM} variable == "unix" or "windows" |
| # as well as PKG_LIB_FILE and PKG_STUB_LIB_FILE. |
| #-------------------------------------------------------------------- |
| |
| # |
| # Init automake stuff |
| # |
| AC_DISABLE_STATIC |
| AM_INIT_AUTOMAKE([foreign subdir-objects]) |
| |
| #-------------------------------------------------------------------- |
| # Load the tclConfig.sh file |
| #-------------------------------------------------------------------- |
| |
| TEA_PATH_TCLCONFIG |
| TEA_LOAD_TCLCONFIG |
| |
| #-------------------------------------------------------------------- |
| # Load the tkConfig.sh file if necessary (Tk extension) |
| #-------------------------------------------------------------------- |
| |
| #TEA_PATH_TKCONFIG |
| #TEA_LOAD_TKCONFIG |
| |
| #----------------------------------------------------------------------- |
| # Handle the --prefix=... option by defaulting to what Tcl gave. |
| # Must be called after TEA_LOAD_TCLCONFIG and before TEA_SETUP_COMPILER. |
| #----------------------------------------------------------------------- |
| |
| TEA_PREFIX |
| |
| #----------------------------------------------------------------------- |
| # Standard compiler checks. |
| # This sets up CC by using the CC env var, or looks for gcc otherwise. |
| # This also calls AC_PROG_CC, AC_PROG_INSTALL and a few others to create |
| # the basic setup necessary to compile executables. |
| #----------------------------------------------------------------------- |
| |
| TEA_SETUP_COMPILER |
| |
| # |
| # For automake to be happy, we also need AC_PROG_LIBTOOL |
| # |
| # the LIBTOOL_DEPS macro sets up for automatic updating of the |
| # libtool script if it becomes out of date, as per libtool docs |
| # |
| AC_PROG_LIBTOOL |
| AC_SUBST(LIBTOOL_DEPS) |
| |
| #----------------------------------------------------------------------- |
| # __CHANGE__ |
| # Specify the C source files to compile in TEA_ADD_SOURCES, |
| # public headers that need to be installed in TEA_ADD_HEADERS, |
| # stub library C source files to compile in TEA_ADD_STUB_SOURCES, |
| # and runtime Tcl library files in TEA_ADD_TCL_SOURCES. |
| # This defines PKG(_STUB)_SOURCES, PKG(_STUB)_OBJECTS, PKG_HEADERS |
| # and PKG_TCL_SOURCES. |
| #----------------------------------------------------------------------- |
| |
| # Unused: src/TclWeb.c |
| |
| #TEA_ADD_SOURCES([src/TclWebcgi.c src/TclWebapache.c src/apache_multipart_buffer.c src/apache_request.c src/mod_rivet.c src/parserPkgInit.c src/rivetChannel.c src/rivetCore.c src/rivetCrypt.c src/rivetList.c src/rivetParser.c src/rivetPkgInit.c src/rivetWWW.c win/nmakehlp.c src/testing.c]) |
| #TEA_ADD_HEADERS([src/TclWeb.h src/apache_multipart_buffer.h src/apache_request.h src/mod_rivet.h src/rivet.h src/rivetChannel.h src/rivetParser.h]) |
| TEA_ADD_INCLUDES([]) |
| TEA_ADD_LIBS([]) |
| TEA_ADD_CFLAGS([]) |
| TEA_ADD_STUB_SOURCES([]) |
| TEA_ADD_TCL_SOURCES([]) |
| |
| #-------------------------------------------------------------------- |
| # __CHANGE__ |
| # A few miscellaneous platform-specific items: |
| # |
| # Define a special symbol for Windows (BUILD_sample in this case) so |
| # that we create the export library with the dll. |
| # |
| # Windows creates a few extra files that need to be cleaned up. |
| # You can add more files to clean if your extension creates any extra |
| # files. |
| # |
| # TEA_ADD_* any platform specific compiler/build info here. |
| #-------------------------------------------------------------------- |
| |
| # removed AC_DEFINE(BUILD_rivet....) as per TEA 3.9 (Massimo Manghi 20100825) |
| |
| if test "${TEA_PLATFORM}" = "windows" ; then |
| # AC_DEFINE(BUILD_rivet,1,[Define to define the BUILD_rivet define (?)]) |
| CLEANFILES="pkgIndex.tcl *.lib *.dll *.exp *.ilk *.pdb vc*.pch" |
| # #TEA_ADD_SOURCES([win/winFile.c]) |
| # #TEA_ADD_INCLUDES([-I\"$(${CYGPATH} ${srcdir}/win)\"]) |
| else |
| CLEANFILES="pkgIndex.tcl" |
| # #TEA_ADD_SOURCES([unix/unixFile.c]) |
| # #TEA_ADD_LIBS([-lsuperfly]) |
| fi |
| AC_SUBST(CLEANFILES) |
| |
| #-------------------------------------------------------------------- |
| # __CHANGE__ |
| # Choose which headers you need. Extension authors should try very |
| # hard to only rely on the Tcl public header files. Internal headers |
| # contain private data structures and are subject to change without |
| # notice. |
| # This MUST be called after TEA_LOAD_TCLCONFIG / TEA_LOAD_TKCONFIG |
| #-------------------------------------------------------------------- |
| |
| TEA_PUBLIC_TCL_HEADERS |
| #TEA_PRIVATE_TCL_HEADERS |
| |
| #TEA_PUBLIC_TK_HEADERS |
| #TEA_PRIVATE_TK_HEADERS |
| #TEA_PATH_X |
| |
| #-------------------------------------------------------------------- |
| # Check whether --enable-threads or --disable-threads was given. |
| # This auto-enables if Tcl was compiled threaded. |
| #-------------------------------------------------------------------- |
| |
| TEA_ENABLE_THREADS |
| |
| #-------------------------------------------------------------------- |
| # The statement below defines a collection of symbols related to |
| # building as a shared library instead of a static library. |
| #-------------------------------------------------------------------- |
| |
| TEA_ENABLE_SHARED |
| |
| #-------------------------------------------------------------------- |
| # This macro figures out what flags to use with the compiler/linker |
| # when building shared/static debug/optimized objects. This information |
| # can be taken from the tclConfig.sh file, but this figures it all out. |
| #-------------------------------------------------------------------- |
| |
| TEA_CONFIG_CFLAGS |
| |
| #-------------------------------------------------------------------- |
| # Set the default compiler switches based on the --enable-symbols option. |
| #-------------------------------------------------------------------- |
| |
| TEA_ENABLE_SYMBOLS |
| |
| #-------------------------------------------------------------------- |
| # Everyone should be linking against the Tcl stub library. If you |
| # can't for some reason, remove this definition. If you aren't using |
| # stubs, you also need to modify the SHLIB_LD_LIBS setting below to |
| # link against the non-stubbed Tcl library. Add Tk too if necessary. |
| #-------------------------------------------------------------------- |
| |
| # |
| # stubs are causing segmentation violations when mod_rivet is getting |
| # loaded into apache. it would be nice if we did no stubs for this and |
| # still did stubs for librivet and librivetparser, which seem to be OK. |
| # |
| #AC_DEFINE(USE_TCL_STUBS,1,[Define to link against the Tcl stub library]) |
| #AC_DEFINE(USE_TK_STUBS) |
| |
| #-------------------------------------------------------------------- |
| # This macro generates a line to use when building a library. It |
| # depends on values set by the TEA_ENABLE_SHARED, TEA_ENABLE_SYMBOLS, |
| # and TEA_LOAD_TCLCONFIG macros above. |
| #-------------------------------------------------------------------- |
| |
| TEA_MAKE_LIB |
| |
| #-------------------------------------------------------------------- |
| # Find tclsh so that we can run pkg_mkIndex to generate the pkgIndex.tcl |
| # file during the install process. Don't run the TCLSH_PROG through |
| # ${CYGPATH} because it's being used directly by make. |
| # Require that we use a tclsh shell version 8.2 or later since earlier |
| # versions have bugs in the pkg_mkIndex routine. |
| # Add WISH as well if this is a Tk extension. |
| #-------------------------------------------------------------------- |
| |
| # We have to either find a working tclsh or be told where it is |
| # using --with-tclsh |
| AC_ARG_WITH(tclsh, [ --with-tclsh=FILE location of a working tclsh executable], with_tclsh=${withval}) |
| |
| # |
| # allow them to override the tclsh we think we found |
| # |
| if test x"${with_tclsh}" != x ; then |
| AC_MSG_CHECKING([for tclsh]) |
| if test -f "${with_tclsh}" ; then |
| TCLSH_PROG=${with_tclsh} |
| AC_MSG_RESULT([manually set by --with-tclsh=$TCLSH_PROG]) |
| else |
| AC_MSG_ERROR([No tclsh at place specified by --with-tclsh (${with_tclsh})]) |
| fi |
| AC_SUBST(TCLSH_PROG) |
| else |
| TEA_PROG_TCLSH |
| fi |
| |
| #TEA_PROG_WISH |
| |
| # apache base directory |
| |
| AC_DEFUN([APACHE],[ |
| AC_MSG_CHECKING(for Apache base) |
| AC_ARG_WITH( |
| apache, |
| [ --with-apache[=DIR] Apache server base directory],, |
| [with_apache="/usr/local/apache2"] |
| ) |
| apache_base="${with_apache}" |
| AC_MSG_RESULT([$apache_base]) |
| ]) |
| |
| # |
| # We have to either find apxs or be told where it is using --with-apxs |
| # |
| AC_DEFUN([CHECK_APXS],[ |
| AC_MSG_CHECKING(for Apache apxs) |
| AC_ARG_WITH( |
| apxs, |
| [ --with-apxs=FILE location of Apache apxs tool], |
| [if test -x "${with_apxs}" ; then |
| apxs_found="${with_apxs}" |
| AC_MSG_RESULT([$apxs_found]) |
| fi] |
| , |
| [ |
| APXS_NAMES=apxs |
| for apxs_file in ${APXS_NAMES}; do |
| for apxs_path in bin sbin; do |
| if test -x "${apache_base}"/"${apxs_path}"/"${apxs_file}"; then |
| apxs_found="${apache_base}"/"${apxs_path}"/"${apxs_file}" |
| break 2 |
| fi |
| done |
| done |
| if test x"$apxs_found" = x; then |
| AC_PATH_PROGS(with_apxs, apxs) |
| if test "${with_apxs+set}" = set ; then |
| apxs_found="${with_apxs}" |
| fi |
| fi |
| if test x"${apxs_found}" = x; then |
| AC_MSG_ERROR([Could not find apxs. apxs must be in your PATH or you must specify the location of the apxs script using --with-apxs]) |
| else |
| AC_MSG_RESULT([$apxs_found]) |
| fi |
| ] |
| ) |
| if test "${apxs_found+set}" = set ; then |
| dnl At this point we already have apr sorted out |
| export PATH=$PATH:`dirname $apxs_found` |
| APXS_CPPFLAGS=`${apxs_found} -q CFLAGS` |
| AC_SUBST(APXS_CPPFLAGS) |
| APXS_LDFLAGS=`${apxs_found} -q LDFLAGS_SHLIB` |
| AC_SUBST(APXS_LDFLAGS) |
| APXS_LIBS=`${apxs_found} -q LIBS_SHLIB` |
| AC_SUBST(APXS_LIBS) |
| APXS_INCLUDES=-I`${apxs_found} -q INCLUDEDIR` |
| AC_SUBST(APXS_INCLUDES) |
| APXS_CPPFLAGS_SHLIB=`${apxs_found} -q CFLAGS_SHLIB` |
| AC_SUBST(APXS_CPPFLAGS_SHLIB) |
| APXS_LD_SHLIB=`${apxs_found} -q LD_SHLIB` |
| AC_SUBST(APXS_LD_SHLIB) |
| APXS_LIBEXECDIR=`${apxs_found} -q LIBEXECDIR` |
| AC_SUBST(APXS_LIBEXECDIR) |
| APXS_SYSCONFDIR=`${apxs_found} -q SYSCONFDIR` |
| AC_SUBST(APXS_SYSCONFDIR) |
| APXS_PREFIX=`${apxs_found} -q PREFIX` |
| AC_SUBST(APXS_PREFIX) |
| else |
| AC_MSG_ERROR([Could not find apxs. apxs must be in your PATH or you must specify the location of the apxs script using --with-apxs]) |
| fi |
| ]) |
| |
| |
| AC_DEFUN([APACHE_INCLUDES],[ |
| AC_ARG_WITH( |
| apache_include, |
| [ --with-apache-include[=DIR] Apache server directory], |
| [apache_include="${with_apache_include}"] |
| ,[apache_include="${APXS_INCLUDES}"] |
| ) |
| AC_SUBST(apache_include) |
| ]) |
| |
| AC_DEFUN([APR_HANDLING],[ |
| AC_MSG_CHECKING(for Apache apr) |
| AC_ARG_WITH( |
| apr_config, |
| [ --with-apr-config=FILE apr portable apr-1-config path], |
| [if test -x "${with_apr_config}"; then |
| apr_found="${with_apr_config}" |
| fi] |
| , |
| [if test -x "${apache_base}/bin/apr-1-config" ; then |
| apr_found="${apache_base}/bin/apr-1-config" |
| elif test -x "${apache_base}/sbin/apr-1-config" ; then |
| apr_found="${apache_base}/sbin/apr-1-config" |
| elif test "${apache_base+set}" = set; then |
| AC_PATH_PROGS(with_apr_config, apr-1-config) |
| if test "${with_apr_config+set}" = set ; then |
| apr_found="${with_apr_config}" |
| fi |
| else |
| AC_MSG_ERROR( Specify the apr-1-config path using --with-apr-config, 1) |
| fi] |
| ) |
| if test "${apr_found+set}" = set ; then |
| AC_MSG_RESULT([$apr_found]) |
| dnl At this point we already have apr sorted out |
| dnl It actually calls another script, so the PATH needs to be set. |
| export PATH=$PATH:`dirname ${apr_found}` |
| APR_CPPFLAGS=`${apr_found} --cppflags` |
| AC_SUBST(APR_CPPFLAGS) |
| APR_INCLUDES=`${apr_found} --includes` |
| AC_SUBST(APR_INCLUDES) |
| APR_LDLFAGS=`${apr_found} --link-libtool --libs` |
| AC_SUBST(APR_LDFLAGS) |
| else |
| AC_MSG_ERROR([Could not find apr-1-config. apr-1-config must be in your PATH or you must specify the location of the apr script using --with-apr-config]) |
| fi |
| ]) |
| |
| # -- APU_HANDLING |
| # |
| # calling apu-1-config to determine where apr-utils includes |
| # and library are |
| # |
| |
| AC_DEFUN([APU_HANDLING],[ |
| AC_MSG_CHECKING(for Apache apu) |
| AC_ARG_WITH( |
| apu_config, |
| [ --with-apu-config=FILE apu portable apu-1-config path], |
| [if "${with_apu_config}" --version; then |
| apu_found="${with_apu_config}" |
| fi] |
| , |
| [if apu-1-config --version; then |
| apu_found=apu-1-config |
| elif test -x "${apache_base}/bin/apu-1-config" ; then |
| apu_found="${apache_base}/bin/apu-1-config" |
| elif test -x "${apache_base}/sbin/apu-1-config" ; then |
| apu_found="${apache_base}/sbin/apu-1-config" |
| elif test "${apache_base+set}" = set; then |
| AC_PATH_PROGS(with_apu_config, apu-1-config) |
| if test "${with_apu_config+set}" = set ; then |
| apu_found="${with_apu_config}" |
| fi |
| else |
| AC_MSG_ERROR( Specify the apu-1-config path or program name using --with-apu-config, 1) |
| fi] |
| ) |
| if test "${apu_found+set}" = set ; then |
| AC_MSG_RESULT([$apu_found_]) |
| dnl At this point we already have apu sorted out |
| dnl It actually calls another script, so the PATH needs to be set. |
| export PATH=$PATH:`dirname ${apu_found}` |
| APU_INCLUDES=`${apu_found} --includes` |
| AC_SUBST(APU_INCLUDES) |
| APU_LDLFAGS=`${apu_found} --link-libtool --libs` |
| AC_SUBST(APU_LDFLAGS) |
| else |
| AC_MSG_ERROR([Could not find apu-1-config. apu-1-config must be in your PATH or you must specify the location of the apu script using --with-apu-config]) |
| fi |
| ]) |
| |
| #-------------------------------------------------------------------- |
| # 6-Dec-2011: Introducing new ::rivet namespace. Some components |
| # (namely RivetTcl, providing Tcl level initialization) are required |
| # within mod_rivet.c. Unfortunalely Tcl < 8.5.10 shared |
| # libs exporting names could clash with Apache's binary own names. |
| # Hence we have to make sure we are running a Tcl compatible version. |
| # (See Tcl bug #3216070). |
| # |
| # Effect: If you're running Tcl < 8.5.10 we refuse to build Rivet... |
| |
| AX_COMPARE_VERSION([$TCL_VERSION$TCL_PATCH_LEVEL],[lt],[8.5.10],[ |
| AC_MSG_ERROR([Rivet 2.1 requires Tcl > 8.5.10 (current is $TCL_VERSION$TCL_PATCH_LEVEL)]) |
| ] , [ |
| AC_MSG_NOTICE([we are building Rivet with Tcl $TCL_VERSION$TCL_PATCH_LEVEL]) |
| ]) |
| |
| |
| print_fileevent_msg="0" |
| AX_COMPARE_VERSION([$TCL_VERSION$TCL_PATCH_LEVEL],[lt],[8.5.15],[ |
| print_fileevent_msg="1" |
| ] , ) |
| |
| |
| AX_COMPARE_VERSION([$TCL_VERSION],[eq],[8.6],[ |
| if test "$TCL_PATCH_LEVEL" = ".0" ; then |
| print_fileevent_msg="1" |
| fi |
| ] , ) |
| |
| # MOD_RIVET_CORE |
| # |
| # Determining the path to the mod_rivet.* source files |
| # |
| |
| AC_DEFUN([MOD_RIVET_CORE],[ |
| AC_ARG_WITH( |
| rivet_core, |
| [ --with-rivet-core[=path] mod_rivet core directory],, |
| [with_rivet_core="mod_rivet_ng"] |
| ) |
| |
| AC_MSG_CHECKING([mod_rivet core]) |
| |
| #if [[ -d "src/${with_rivet_core}" ]]; then |
| # rivet_core=$(pwd)/src/${with_rivet_core} |
| #else |
| # rivet_core=${with_rivet_core} |
| #fi |
| |
| rivet_core=${with_rivet_core} |
| |
| # by default we search the channel and core commands |
| # implementation in the same directory. This can |
| # be superseded by other macros |
| |
| default_rivet_commands=${rivet_core} |
| default_rivet_channel=${rivet_core} |
| |
| #AC_CONFIG_FILES([src/${rivet_core}/Makefile]) |
| AC_SUBST(rivet_core) |
| AC_MSG_RESULT([$rivet_core]) |
| ]) |
| |
| # |
| |
| AC_DEFUN([HANDLE_TCL_PACKAGE_PATH],[ |
| # shamelessly stolen from TEA_LOAD_TCLCONFIG |
| AC_MSG_CHECKING([Debian TCL_PACKAGE_PATH workaround]) |
| if test -f "${TCL_BIN_DIR}/tclConfig.sh" ; then |
| AC_MSG_RESULT([loading]) |
| . "${TCL_BIN_DIR}/tclConfig.sh" |
| else |
| AC_MSG_RESULT([could not find ${TCL_BIN_DIR}/tclConfig.sh]) |
| fi |
| # If we have multiple paths, pull the first one, add end slash if needed |
| res=`echo ${TCL_PACKAGE_PATH} | \ |
| grep '[[^\]] ' | \ |
| sed -e 's/\([[^\]]\)\( \)\(.*\)$/\1/' -e 's/\([[^\/]]\)$/\1\//' ` |
| if test x"${res}" != x; then |
| TCL_PACKAGE_PATH=${res} |
| AC_SUBST(TCL_PACKAGE_PATH) |
| fi |
| ]) |
| |
| AC_DEFUN([GET_RIVET_BASE], [ |
| RIVET_BASE_INCLUDE=`pwd`/src |
| AC_SUBST(RIVET_BASE_INCLUDE) |
| RIVET_SOURCE_BASE=`pwd`/src |
| AC_SUBST(RIVET_SOURCE_BASE) |
| ]) |
| |
| # APACHE_REQUEST |
| # |
| # Choosing where is located the code for handling Apache request data (like |
| # form data etc). Default: 'request' |
| |
| AC_DEFUN([APACHE_REQUEST],[ |
| AC_ARG_WITH( |
| apache_request, |
| [ --with-apache-request=DIR path to rivet HTML form and urlencoded data handler],, |
| [with_apache_request="request"] |
| ) |
| |
| AC_MSG_CHECKING([code for HTML form and urlencoded data handling]) |
| apache_request=${with_apache_request} |
| AC_SUBST(apache_request) |
| AC_MSG_RESULT([$apache_request]) |
| ]) |
| |
| # RIVET_CORE_CMDS |
| # |
| # selecting non default directory for Rivet code commands core |
| # |
| |
| AC_DEFUN([RIVET_CORE_CMDS],[ |
| AC_ARG_WITH( |
| rivet_commands, |
| [ --with-rivet-commands[=dir] path to Rivet core commands code],, |
| [with_rivet_commands=$default_rivet_commands] |
| ) |
| |
| AC_MSG_CHECKING([for Rivet core commands code]) |
| rivet_commands=${with_rivet_commands} |
| AC_SUBST(rivet_commands) |
| AC_MSG_RESULT([$rivet_commands]) |
| |
| ]) |
| |
| # RIVET_CHANNEL |
| # |
| # selecting the Rivet channel code directory |
| |
| AC_DEFUN([RIVET_CHANNEL],[ |
| AC_ARG_WITH( |
| rivet_channel, |
| [ --with-rivet-channel=DIR Rivet channel code path ],, |
| [with_rivet_channel=$default_rivet_channel] |
| ) |
| |
| AC_MSG_CHECKING([for Rivet channel code path]) |
| rivet_channel=${with_rivet_channel} |
| |
| AC_SUBST(rivet_channel) |
| AC_MSG_RESULT([$rivet_channel]) |
| ]) |
| |
| # RIVET_TCL_LIB |
| # |
| # |
| |
| AC_DEFUN([RIVET_TCL_LIB],[ |
| AC_ARG_WITH( |
| rivet_target_dir, |
| [ --with-rivet-target-dir=DIR Rivet tcl and binary libraries target dir ],, |
| with_rivet_target_dir="${apache_base}/lib/rivet${PACKAGE_VERSION}" |
| ) |
| AC_MSG_CHECKING([for Rivet libraries target]) |
| RIVET_TCL_TARGET=${with_rivet_target_dir} |
| AC_SUBST(RIVET_TCL_TARGET) |
| AC_MSG_RESULT([$with_rivet_target_dir]) |
| ]) |
| |
| # DISPLAY_RIVET_VERSION |
| # |
| # --enable-version-display=[yes|no] (default: no) |
| # switches on version number display in Apache's signature. |
| # |
| |
| AC_DEFUN([DISPLAY_RIVET_VERSION],[ |
| AC_ARG_ENABLE( |
| version_display, |
| [ --enable-version-display Display Rivet version in Apache signature], |
| [ signature_version_display=$enable_version_display ], |
| [ signature_version_display="no" ] |
| ) |
| |
| AC_MSG_CHECKING([whether rivet version is printed in Apache signature]) |
| if test "$signature_version_display" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(DISPLAY_VERSION,1,[Display Rivet version in Apache signature]) |
| else |
| AC_MSG_RESULT([no, Rivet version will be hidden]) |
| AC_DEFINE(DISPLAY_VERSION,0,[Display Rivet version in Apache signature]) |
| fi |
| ]) |
| |
| # UPLOAD_DIRECTORY |
| # |
| # Adds '--with-upload-dir=DIR' to configure's arguments |
| # |
| # let's make configuration of the upload directory more flexible for windows builds |
| # (in case someone steps forward and takes up the Windows port) |
| # The upload directory can be changed in the configuration, but we give the |
| # user/packager the chance to set a default at compile time. |
| # Default: /tmp |
| |
| AC_DEFUN([UPLOAD_DIRECTORY],[ |
| AC_ARG_WITH( |
| upload_dir, |
| [ --with-upload-dir=DIR Default directory for uploads],, |
| with_upload_dir="/tmp" |
| ) |
| AC_MSG_CHECKING(where Rivet will save uploads) |
| RIVET_UPLOAD_DIR=${with_upload_dir} |
| AC_SUBST(RIVET_UPLOAD_DIR) |
| AC_MSG_RESULT([$with_upload_dir]) |
| ]) |
| |
| # HONOR_HEAD_REQUESTS (--enable-head-requests) |
| # Rivet answers to HEAD requests with a standard response to avoid the whole workload |
| # of generating the content of a page with to the sole purpose of returning the HTTP |
| # headers.To test the configuration or scripts that manipulate the headers it |
| # can be useful to let Rivet honor a HEAD request as if the whole content was |
| # generated so that the real headers are returned (this can be set in configuration |
| # by adding "RivetServerConf HonorHeaderOnlyRequests yes" to the server configuration) |
| # |
| # Default: no |
| |
| AC_DEFUN([HONOR_HEAD_REQUESTS],[ |
| AC_ARG_ENABLE( |
| head_requests, |
| [ --enable-head-requests Returns real headers in response to a HEAD request], |
| [ honor_head_requests=$enable_head_requests ], |
| [ honor_head_requests="no"] |
| ) |
| |
| AC_MSG_CHECKING([if Rivet has to honor HEAD requests]) |
| if test "$honor_head_requests" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(HEAD_REQUESTS,1,[Honor HEAD requests]) |
| else |
| AC_MSG_RESULT([no, Rivet will shunt HEAD requests]) |
| AC_DEFINE(HEAD_REQUESTS,0,[Honor HEAD requests]) |
| fi |
| ]) |
| |
| # SINGLE_WORKER_TCL_THREAD |
| # |
| # This options is used by the worker MPM bridge for debugging. |
| # When enabled rivet_worker_bridge will create a single Tcl interp thread instead |
| # of the a whole pool of them |
| # |
| # Defautl: no |
| |
| AC_DEFUN([SINGLE_WORKER_TCL_THREAD],[ |
| AC_ARG_ENABLE( |
| single_thread, |
| [ --enable-single-thread forces the worker brigde to create a single thread (debug)], |
| [ single_thread=$enable_single_thread ], |
| [ single_thread="no"] |
| ) |
| |
| AC_MSG_CHECKING([if the worker MPM bridge will run in single thread mode]) |
| if test "$single_thread" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(MPM_SINGLE_TCL_THREAD,1,[yes, MPM worker single thread]) |
| else |
| AC_MSG_RESULT([no, maximal number of Tcl threads]) |
| fi |
| ]) |
| |
| # -- SERIALIZE_HTTP_REQUEST |
| # |
| # The macro defines the symbol SERIALIZE_HTTP_REQUESTS and cooperates |
| # with macro HTTP_REQUESTS_PROC. This option is useful only |
| # for debugging (avoids threads concurrency). See the code of the |
| # worker bridge to see the preprocessor macros cooperating to |
| # attain this feature |
| # |
| # Default: no |
| |
| AC_DEFUN([HTTP_REQUESTS_MUTEX],[ |
| AC_ARG_ENABLE( |
| requests_serialization, |
| [ --enable-requests-serialization Forces HTTP requests serialization among threads(debug)], |
| [ requests_serialization=$enable_requests_serialization ], |
| [ requests_serialization="no" ] |
| ) |
| |
| AC_MSG_CHECKING([if we want the worker bridge to serialize HTTP requests]) |
| if test "$requests_serialization" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(SERIALIZE_HTTP_REQUESTS,1,[requests will be serialized]) |
| else |
| AC_MSG_RESULT([no, HTTP requests will not be serialized]) |
| fi |
| ]) |
| |
| # -- RIVET_DEBUG_BUILD |
| # |
| # Defining a symbol for conditional inclusion of code for debugging purposes |
| # |
| # Default: no |
| # |
| |
| AC_DEFUN([BUILD_DEBUG_CODE],[ |
| AC_ARG_ENABLE( |
| rivet_debug_build, |
| [ --enable-rivet-debug-build Includes optional debugging code], |
| [ rivet_debug_build=$enable_rivet_debug_build ], |
| [ rivet_debug_build="no" ] |
| ) |
| |
| AC_MSG_CHECKING([if we are building mod_rivet for debugging]) |
| if test "$rivet_debug_build" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(DEBUG_BUILD,1,[we are building mod_rivet with optional code]) |
| else |
| AC_MSG_RESULT([no, ordinary build]) |
| fi |
| ]) |
| |
| # RIVET_COMMANDS_EXPORT (--enable-rivet-commands-export). |
| # Enable export of commands in Rivet's namespace. Definining this symbols |
| # sets the boolean configuration variable rivet_commands_export |
| # Default: yes |
| |
| AC_DEFUN([RIVET_COMMANDS_EXPORT],[ |
| AC_ARG_ENABLE( |
| rivet-commands-export, |
| [ --disable-rivet-commands-export to prevent export from ::rivet namespace], |
| [ rivet_commands_export=$enable_rivet_commands_export ], |
| [ rivet_commands_export="yes"] |
| ) |
| |
| AC_MSG_CHECKING([if the commands in ::rivet namespace will be exported]) |
| if test "$rivet_commands_export" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(NAMESPACE_EXPORT,1,[commands will be exported]) |
| else |
| AC_MSG_RESULT([no]) |
| AC_DEFINE(NAMESPACE_EXPORT,0,[commands will not be exported]) |
| fi |
| ]) |
| |
| # IMPORT_RIVET_COMMANDS (--enable-import-rivet-commands). |
| # For compatibility the module can be compiled and installed forcing rivet |
| # to import commands from ::rivet into the global namespace. |
| # Default: no |
| |
| AC_DEFUN([IMPORT_RIVET_COMMANDS],[ |
| AC_ARG_ENABLE( |
| import-rivet-commands, |
| [ --enable-import-rivet-commands requires explicit namespace import], |
| [ import_rivet_commands=$enable_import_rivet_commands], |
| [ import_rivet_commands="no"] |
| ) |
| |
| AC_MSG_CHECKING([if ::rivet namespace will be automatically imported for compatibility]) |
| if test "$import_rivet_commands" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(NAMESPACE_IMPORT,1,[commands will be imported into the global namespace]) |
| else |
| AC_MSG_RESULT([no]) |
| AC_DEFINE(NAMESPACE_IMPORT,0,[good, no automatic import will be done]) |
| fi |
| ]) |
| |
| |
| # SEPARATE_VIRTUAL_INTERPS (--enable-virtual-interps-separation) |
| # Virtual hosts get their own interpreter and configuration. Different |
| # applications running on different virtual hosts don't mix up variables |
| # and namespaces, avoiding conflicts. |
| # Default: no |
| |
| AC_DEFUN([VIRTUAL_INTERPS_SEPARATION],[ |
| AC_ARG_ENABLE( |
| virtual-interps-separation, |
| [ --enable-virtual-interps-separation to turn on virtual host separation], |
| [ separate_virtual_interps=$enable_virtual_interps_separation ], |
| [ separate_virtual_interps="no"] |
| ) |
| |
| AC_MSG_CHECKING([whether Rivet will create an interpreter for each virtual host]) |
| if test "$separate_virtual_interps" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(SEPARATE_VIRTUAL_INTERPS,1,[virtual hosts will have their own interp]) |
| else |
| AC_MSG_RESULT([no]) |
| AC_DEFINE(SEPARATE_VIRTUAL_INTERPS,0,[one interpreter per child]) |
| fi |
| ]) |
| |
| # POST_MAX_SIZE (--with-post-max) |
| # Maximum size of data posted by a form |
| # Default: 0=unlimited |
| |
| AC_DEFUN([POST_MAX_SIZE],[ |
| AC_ARG_WITH( |
| post_max, |
| [ --with-post-max=BYTES Maximum size of data to be sent with a POST],, |
| with_post_max=0 |
| ) |
| |
| AC_MSG_CHECKING([maximum size of a POST]) |
| MAX_POST=${with_post_max} |
| AC_SUBST(MAX_POST) |
| if test $with_post_max = 0; then |
| AC_MSG_RESULT([unlimited size]) |
| else |
| AC_MSG_RESULT([$with_post_max]) |
| fi |
| ]) |
| |
| # UPLOAD_TO_VAR (--enable-upload-var) |
| # Enables upload of files into Tcl variables |
| # Default: 1=enabled |
| |
| AC_DEFUN([UPLOAD_TO_VAR],[ |
| AC_ARG_ENABLE( |
| upload-var, |
| [ --disable-upload-var to disable automatic upload to variables ], |
| [ upload_var=$enable_upload_var ], |
| [ upload_var="yes"] |
| ) |
| |
| AC_MSG_CHECKING([whether files are uploaded to Tcl variables]) |
| if test "$upload_var" = "yes"; then |
| AC_MSG_RESULT([yes]) |
| AC_DEFINE(UPLOAD_FILES_TO_VAR,1,[Files are uploaded to Tcl variables]) |
| else |
| AC_MSG_RESULT([no]) |
| AC_DEFINE(UPLOAD_FILES_TO_VAR,0,[uploads go to files]) |
| fi |
| |
| ]) |
| |
| #APACHE_VERSION |
| MOD_RIVET_CORE |
| GET_RIVET_BASE |
| APACHE |
| CHECK_APXS |
| APACHE_INCLUDES |
| APR_HANDLING |
| APU_HANDLING |
| RIVET_TCL_LIB |
| DISPLAY_RIVET_VERSION |
| UPLOAD_DIRECTORY |
| HONOR_HEAD_REQUESTS |
| VIRTUAL_INTERPS_SEPARATION |
| POST_MAX_SIZE |
| UPLOAD_TO_VAR |
| IMPORT_RIVET_COMMANDS |
| APACHE_REQUEST |
| RIVET_CORE_CMDS |
| RIVET_CHANNEL |
| SINGLE_WORKER_TCL_THREAD |
| HTTP_REQUESTS_MUTEX |
| BUILD_DEBUG_CODE |
| AC_HEADER_STDBOOL |
| |
| # Let's separate the point version from the major and minor version |
| # to build a Rivet version to be substituted as basic version for |
| # package Rivet, central initialization of the Tcl environment |
| |
| VERSION=${PACKAGE_VERSION} |
| AX_SPLIT_VERSION |
| AC_DEFINE_UNQUOTED(INIT_VERSION,"${AX_MAJOR_VERSION}.${AX_MINOR_VERSION}",[Rivet Tcl package version]) |
| AC_MSG_NOTICE([Rivet package version is ${AX_MAJOR_VERSION}.${AX_MINOR_VERSION}]) |
| AC_SUBST(INIT_VERSION,"${AX_MAJOR_VERSION}.${AX_MINOR_VERSION}") |
| AC_SUBST(RIVETLIB_PACKAGE,"rivetlib",[rivetlib package name]) |
| AC_SUBST(RIVETLIB_PACKAGE_VERSION,"${AX_MAJOR_VERSION}.${AX_MINOR_VERSION}") |
| |
| if test $import_rivet_commands = "yes"; then |
| AC_MSG_NOTICE([forcing Rivet to export commands from ::rivet namespace]) |
| AC_DEFINE(NAMESPACE_EXPORT,1,[commands will be exported]) |
| else |
| RIVET_COMMANDS_EXPORT |
| fi |
| AC_C_INLINE |
| |
| #AC_SUBST(apache_version_dir) |
| AC_SUBST(MOD_RIVET_INCLUDES) |
| |
| AC_DEFINE_UNQUOTED(RIVETLIB_DESTDIR,"${RIVET_TCL_TARGET}",[The path to the rivet tcl library]) |
| AC_DEFINE_UNQUOTED(NAMEOFEXECUTABLE,"${TCLSH_PROG}",[The path to a working tclsh executable]) |
| AC_DEFINE_UNQUOTED(UPLOAD_DIR,"${RIVET_UPLOAD_DIR}",[Path to the disk directory where uploads are saved]) |
| AC_DEFINE_UNQUOTED(MAX_POST,[$MAX_POST],[Max size of data in POST operations]) |
| AC_DEFINE_UNQUOTED(SEPARATE_CHANNELS,0,[Separate Channels for virtual hosts]) |
| AC_DEFINE_UNQUOTED(CONFIGURE_CMD,"${CONFIGURE_CMD}",[configure command string]) |
| AC_DEFINE_UNQUOTED(RIVET_CORE,"${rivet_core}",[mod_rivet core]) |
| |
| # We need to use the package path for the installation procedure. On |
| #Debian linux TCL_PACKAGE_PATH may have more than one path in the |
| #TCL_PACKAGE_PATH variable, so we have to handle this |
| HANDLE_TCL_PACKAGE_PATH |
| AC_SUBST(TCL_PACKAGE_PATH) |
| |
| |
| # Finally, substitute all of the various values into the Makefile. |
| # You may alternatively have a special pkgIndex.tcl.in or other files |
| # which require substituting the AC variables in. Include these here. |
| #-------------------------------------------------------------------- |
| AC_CONFIG_FILES([Makefile src/Makefile rivet/init.tcl doc/Makefile doc/convert_examples.tcl doc/rivet.xml]) |
| |
| #case $apache_version_dir in |
| # apache-1) AC_CONFIG_FILES([Makefile src/Makefile src/apache-1/Makefile doc/Makefile]) ;; |
| # apache-2) AC_CONFIG_FILES([Makefile src/Makefile src/apache-2/Makefile doc/Makefile]) ;; |
| #esac |
| AC_OUTPUT |
| |
| if test "$print_fileevent_msg" = "1"; then |
| AC_MSG_NOTICE([========================================================================]) |
| AC_MSG_NOTICE([ WARNING!]) |
| AC_MSG_NOTICE([========================================================================]) |
| AC_MSG_NOTICE([The Tcl notifier (and consequently the event loop) does not work with]) |
| AC_MSG_NOTICE([Rivet running Tcl $TCL_VERSION$TCL_PATCH_LEVEL and the 'prefork' MPM of Apache.]) |
| AC_MSG_NOTICE([In order to have asynchronous I/O working the required versions are:]) |
| AC_MSG_NOTICE([ - threaded builds: Tcl >= 8.5.15 (8.5 version) or Tcl >= 8.6.1]) |
| AC_MSG_NOTICE([ - any non-threaded build of Tcl >= 8.5.10]) |
| AC_MSG_NOTICE([]) |
| AC_MSG_NOTICE([Nonetheless Rivet scripts work with Tcl >= 8.5.10 provided]) |
| AC_MSG_NOTICE([you do not have to rely on the event loop to do I/O (e.g. you]) |
| AC_MSG_NOTICE([cannot use the 'fileevent' command to set up callbacks)]) |
| AC_MSG_NOTICE([see https://issues.apache.org/bugzilla/show_bug.cgi?id=55153]) |
| AC_MSG_NOTICE([========================================================================]) |
| fi |
| |