Apply 80_fix_string_search.patch
[mspang/vmailman.git] / configure.in
1 # Copyright (C) 1998-2004 by the Free Software Foundation, Inc.
2 #
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
7 #
8 # This program is distributed in the hope that it will be useful,
9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 # GNU General Public License for more details.
12 #
13 # You should have received a copy of the GNU General Public License
14 # along with this program; if not, write to the Free Software
15 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16
17 dnl Process this file with autoconf to produce a configure script.
18 AC_REVISION($Revision: 7462 $)
19 AC_PREREQ(2.0)
20 AC_INIT(src/common.h)
21
22
23 # /usr/local/mailman is the default installation directory
24 AC_PREFIX_DEFAULT(/usr/local/mailman)
25
26
27 # Check for Python!  Better be found on $PATH
28 AC_MSG_CHECKING(for --with-python)
29 AC_ARG_WITH(python, dnl
30 [  --with-python                specify path to Python interpreter])
31 case "$with_python" in
32     "") ans="no";;
33     *)  ans="$with_python"
34 esac
35 AC_MSG_RESULT($ans)
36
37 if test -z "$with_python"
38 then
39         AC_PATH_PROG(with_python, python, /usr/local/bin/python)
40 fi
41
42 AC_MSG_CHECKING(Python interpreter)
43 if test ! -x $with_python
44 then
45     AC_MSG_ERROR([
46
47 ***** No Python interpreter found!
48 ***** Try including the configure option
49 ***** --with-python=/path/to/python/interpreter])
50 fi
51 AC_SUBST(PYTHON)
52 PYTHON=$with_python
53 AC_MSG_RESULT($PYTHON)
54
55 # See if Python is new enough.  2.1 or better is required, with 2.1.3
56 # recommended.
57 AC_MSG_CHECKING(Python version)
58 changequote(,)
59 cat > conftest.py <<EOF
60 import sys
61 try:
62     v = sys.hexversion
63 except AttributeError:
64     v = 0
65 # int of hexversion 0x2010000
66 if v >= 0x2010000:
67     s = sys.version.split()[0]
68 else:
69     s = ""
70 fp = open("conftest.out", "w")
71 fp.write("%s\n" % s)
72 fp.close()
73 EOF
74 changequote([, ])
75 $PYTHON conftest.py
76 version=`cat conftest.out`
77 rm -f conftest.out conftest.py
78 if test -z "$version"
79 then
80     AC_MSG_ERROR([
81
82 ***** $PYTHON is too old (or broken)
83 ***** Python 2.1 or newer is required
84 ***** Python 2.1.3 or better is recommended])
85 fi
86 AC_MSG_RESULT($version)
87
88 # Make sure distutils is available.  Some Linux Python packages split
89 # distutils into the "-devel" package, so they need both.
90 AC_MSG_CHECKING(that Python has a working distutils)
91 changequote(,)
92 cat > conftest.py <<EOF
93 try:
94     import distutils.errors
95     import distutils.sysconfig
96 except ImportError:
97     res = "no"
98 else:
99     try:
100         distutils.sysconfig.get_config_vars()
101     except distutils.errors.DistutilsPlatformError:
102         res = "no"
103     else:
104         res = "yes"
105 fp = open("conftest.out", "w")
106 fp.write("%s\n" % res)
107 fp.close()
108 EOF
109 changequote([, ])
110 $PYTHON conftest.py
111 havedistutils=`cat conftest.out`
112 rm -f conftest.out conftest.py
113 if test "$havedistutils" != "yes"
114 then
115     AC_MSG_ERROR([
116
117 ***** Distutils is not available or is incomplete for $PYTHON
118 ***** If you installed Python from RPM (or other package manager)
119 ***** be sure to install the -devel package, or install Python
120 ***** from source.  See README.LINUX for details])
121 fi
122 AC_MSG_RESULT($havedistutils)
123
124 # Checks for programs.
125 AC_PROG_INSTALL
126 AC_PROG_MAKE_SET
127 AC_PATH_PROG(TRUE, true, true, $PATH:/bin:/usr/bin)
128
129 # Find compiler, allow alternatives to gcc
130 AC_MSG_CHECKING(for --without-gcc)
131 AC_ARG_WITH(gcc, [  --without-gcc               never use gcc], [
132         case $withval in
133         no)     CC=cc
134                 without_gcc=yes;;
135         yes)    CC=gcc
136                 without_gcc=no;;
137         *)      CC=$withval
138                 without_gcc=$withval;;
139         esac], without_gcc=no;)
140 AC_MSG_RESULT($without_gcc)
141
142 # If the user switches compilers, we can't believe the cache
143 if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
144 then
145   AC_ERROR(cached CC is different -- throw away $cache_file
146 (it is also a good idea to do 'make clean' before compiling))
147 fi
148
149 AC_PROG_CC
150
151
152 # Optimizer/debugger flags passed between Makefiles
153 AC_SUBST(OPT)
154 if test -z "$OPT"
155 then
156         case $GCC in
157         yes)
158                 case $ac_cv_prog_cc_g in
159                 yes)    OPT="-g -O2";;
160                 *)      OPT="-O2";;
161                 esac
162                 ;;
163         *)      OPT="-O";;
164         esac
165 fi
166
167 # We better be able to execute interpreters
168 AC_SYS_INTERPRETER
169 if test "$ac_cv_sys_interpreter" != "yes"
170 then
171     AC_MSG_ERROR([
172
173 ***** Cannot execute interpreter scripts?
174 ***** Are you sure you system doesn't support this?])
175 fi
176
177
178 # Check for an alternate data directory, separate from installation dir.
179 default_var_prefix="/var/mailman"
180 AC_SUBST(VAR_PREFIX)
181 AC_MSG_CHECKING(for --with-var-prefix)
182 AC_ARG_WITH(var-prefix, dnl
183 [  --with-var-prefix     directory for mutable data [/var/mailman]])
184 case "$with_var_prefix" in
185         yes)    VAR_PREFIX="$default_var_prefix"; ans=$VAR_PREFIX;;
186         ""|no)  VAR_PREFIX="$prefix"; ans="no";;
187         *)      VAR_PREFIX="$with_var_prefix"; ans=$VAR_PREFIX;
188 esac
189 AC_MSG_RESULT($ans)
190
191 AC_MSG_CHECKING(for --with-permcheck)
192 AC_ARG_WITH(permcheck, dnl
193 [  --without-permcheck  skip the check for target directory permissions])
194 if test -z "$with_permcheck"
195 then
196         with_permcheck="yes"
197 fi
198 AC_MSG_RESULT($with_permcheck)
199 # Now make sure that $prefix is set up correctly.  It must be group
200 # owned by the target group, it must have the group sticky bit set, and
201 # it must be a+rx
202 if test "$VAR_PREFIX" = "NONE"
203 then
204     VAR_PREFIX=$ac_default_prefix
205     prefixcheck=$ac_default_prefix
206 else
207     prefixcheck=$VAR_PREFIX
208 fi
209
210 # new macro for finding group names
211 AC_DEFUN(MM_FIND_GROUP_NAME, [
212 # $1 == variable name
213 # $2 == user id to check for
214 AC_SUBST($1)
215 changequote(,)
216 if test -z "$$1"
217 then
218     cat > conftest.py <<EOF
219 import grp
220 gid = ''
221 for group in "$2".split():
222     try:
223         try:
224             gname = grp.getgrgid(int(group))[0]
225             break
226         except ValueError:
227             gname = grp.getgrnam(group)[0]
228             break
229     except KeyError:
230         gname = ''
231 fp = open("conftest.out", "w")
232 fp.write("%s\n" % gname)
233 fp.close()
234 EOF
235     $PYTHON conftest.py
236     $1=`cat conftest.out`
237 fi
238 changequote([, ])
239 rm -f conftest.out conftest.py])
240
241
242 # new macro for finding UIDs
243 AC_DEFUN(MM_FIND_USER_NAME, [
244 # $1 == variable name
245 # $2 == user id to check for
246 AC_SUBST($1)
247 changequote(,)
248 if test -z "$$1"
249 then
250     cat > conftest.py <<EOF
251 import pwd
252 uid = ''
253 for user in "$2".split():
254     try:
255         try:
256             uname = pwd.getpwuid(int(user))[0]
257             break
258         except ValueError:
259             uname = pwd.getpwnam(user)[0]
260             break
261     except KeyError:
262         uname = ''
263 fp = open("conftest.out", "w")
264 fp.write("%s\n" % uname)
265 fp.close()
266 EOF
267     $PYTHON conftest.py
268     $1=`cat conftest.out`
269 fi
270 changequote([, ])
271 rm -f conftest.out conftest.py])
272
273 # Check for some other uid to use than `mailman'
274 AC_MSG_CHECKING(for --with-username)
275 AC_ARG_WITH(username, dnl
276 [  --with-username      specify a user name other than \"mailman\"])
277
278 if test -z "$with_username"
279 then
280         with_username="mailman"
281 fi
282 USERNAME=$with_username
283 AC_MSG_RESULT($USERNAME)
284
285 # User `mailman' must exist
286 AC_SUBST(MAILMAN_USER)
287 AC_MSG_CHECKING(for user name \"$USERNAME\")
288 MM_FIND_USER_NAME(MAILMAN_USER, $USERNAME)
289 if test -z "$MAILMAN_USER"
290 then
291   if test "$with_permcheck" = "yes"
292   then
293     AC_MSG_ERROR([
294 ***** No \"$USERNAME\" user found!
295 ***** Your system must have a \"$USERNAME\" user defined
296 ***** (usually in your /etc/passwd file).  Please see the INSTALL
297 ***** file for details.])
298   fi
299 fi
300 AC_MSG_RESULT(okay)
301
302
303 # Check for some other gid to use than `mailman'
304 AC_MSG_CHECKING(for --with-groupname)
305 AC_ARG_WITH(groupname, dnl
306 [  --with-groupname     specify a group name other than \"mailman\"])
307
308 if test -z "$with_groupname"
309 then
310         with_groupname="mailman"
311 fi
312 GROUPNAME=$with_groupname
313 AC_MSG_RESULT($GROUPNAME)
314
315
316 # Target group must exist
317 AC_SUBST(MAILMAN_GROUP)
318 AC_MSG_CHECKING(for group name \"$GROUPNAME\")
319 MM_FIND_GROUP_NAME(MAILMAN_GROUP, $GROUPNAME)
320 if test -z "$MAILMAN_GROUP"
321 then
322   if test "$with_permcheck" = "yes"
323   then
324     AC_MSG_ERROR([
325 ***** No \"$GROUPNAME\" group found!
326 ***** Your system must have a \"$GROUPNAME\" group defined
327 ***** (usually in your /etc/group file).  Please see the INSTALL
328 ***** file for details.])
329   fi
330 fi
331 AC_MSG_RESULT(okay)
332
333
334 AC_MSG_CHECKING(permissions on $prefixcheck)
335 changequote(,)
336 cat > conftest.py <<EOF
337 import os, grp
338 from stat import *
339 prefix = "$prefixcheck"
340 groupname = "$GROUPNAME"
341 mailmangroup = "$MAILMAN_GROUP"
342 try:
343     mailmangid = grp.getgrnam(mailmangroup)[2]
344 except KeyError:
345     mailmangid = -1
346 problems = []
347 try: statdata = os.stat(prefix)
348 except OSError:
349     problems.append("Directory doesn't exist: " + prefix)
350 else:
351     mode = statdata[ST_MODE]
352     gid = statdata[ST_GID]
353     if mailmangid <> gid:
354         problems.append("Directory must be owned by group " +
355                         groupname + ": " + prefix)
356     if (mode & S_ISGID) <> S_ISGID:
357         problems.append("Set-gid bit must be set for directory: " + prefix)
358     perms = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH
359     if (mode & perms) <> perms:
360         problems.append("Permissions should be at least 02775: " + prefix)
361 if not problems:
362     msg = "okay\n"
363 else:
364     msg = '***** ' + '\n***** '.join(problems) + '\n'
365 fp = open("conftest.out", "w")
366 fp.write(msg)
367 fp.close()
368 EOF
369 changequote([, ])
370 $PYTHON conftest.py
371 status=`cat conftest.out`
372 rm -f conftest.out conftest.py
373 if test "$with_permcheck" = "yes"
374 then
375     if test "$status" != "okay"
376     then
377         AC_MSG_ERROR([
378 ***** Installation directory $prefixcheck is not configured properly!
379 $status])
380     fi
381 else
382     status="skipped"
383 fi
384 AC_MSG_RESULT($status)
385
386
387 # Now find the UIDs and GIDs
388 # Support --with-mail-gid and --with-cgi-gid
389 AC_MSG_CHECKING(for mail wrapper group; i.e. --with-mail-gid)
390 AC_ARG_WITH(mail-gid, dnl
391 [  --with-mail-gid      group name mail programs run as])
392 if test -z "$with_mail_gid"
393 then
394     with_mail_gid="mailman other mail daemon"
395 fi
396 MM_FIND_GROUP_NAME(MAIL_GROUP, $with_mail_gid)
397 if test -z "$MAIL_GROUP"
398 then
399   if test "$with_permcheck" = "yes"
400   then
401     AC_MSG_ERROR([
402 ***** No group name \"$with_mail_gid\" found for the mail wrapper program.
403 ***** This is the group that your mail server will use to run Mailman's
404 ***** programs.  You should specify an existing group with the
405 ***** --with-mail-gid configure option, or use --without-permcheck to
406 ***** skip this verification step.  See also your mail server's documentation,
407 ***** and Mailman's INSTALL file for details])
408   else
409     MAIL_GROUP=$with_mail_gid
410   fi
411 fi
412 AC_MSG_RESULT($MAIL_GROUP)
413
414
415 AC_MSG_CHECKING(for CGI wrapper group; i.e. --with-cgi-gid)
416 AC_ARG_WITH(cgi-gid, dnl
417 [  --with-cgi-gid       group name CGI programs run as])
418 if test -z "$with_cgi_gid"
419 then
420     with_cgi_gid="www www-data nobody"
421 fi
422
423 MM_FIND_GROUP_NAME(CGI_GROUP, $with_cgi_gid)
424 if test -z "$CGI_GROUP"
425 then
426   if test "$with_permcheck" = "yes"
427   then
428     AC_MSG_ERROR([
429 ***** No group name \"$with_cgi_gid\" found for the CGI wrapper program.
430 ***** This is the group that your web server will use to run Mailman's
431 ***** programs.  You should specify an existing group with the
432 ***** --with-cgi-gid configure option, or use --without-permcheck to
433 ***** skip this verification step.  See also your web server's documentation,
434 ***** and Mailman's INSTALL file for details])
435   else
436     CGI_GROUP=$with_cgi_gid
437   fi
438 fi
439 AC_MSG_RESULT($CGI_GROUP)
440
441
442 # Check for CGI extensions, required by some Web servers
443 AC_SUBST(CGIEXT)
444 AC_MSG_CHECKING(for CGI extensions)
445 AC_ARG_WITH(cgi-ext, dnl
446 [  --with-cgi-ext       specify extension for CGI programs (include dot)])
447 if test -z "$with_cgi_ext"
448 then
449         CGIEXT=''
450         with_cgi_ext='no'
451 else
452         CGIEXT=$with_cgi_ext
453 fi
454 AC_MSG_RESULT($with_cgi_ext)
455
456
457 # figure out the default mail hostname and url host component
458 AC_SUBST(MAILHOST)
459 AC_MSG_CHECKING(for --with-mailhost)
460 AC_ARG_WITH(mailhost, dnl
461 [  --with-mailhost      specify the hostname part for outgoing email])
462 if test -z "$with_mailhost"
463 then
464         MAILHOST=''
465         with_mailhost='no'
466 else
467         MAILHOST=$with_mailhost
468 fi
469 AC_MSG_RESULT($with_mailhost)
470
471 AC_SUBST(URLHOST)
472 AC_MSG_CHECKING(for --with-urlhost)
473 AC_ARG_WITH(urlhost, dnl
474 [  --with-urlhost       specify the hostname part of urls])
475 if test -z "$with_urlhost"
476 then
477         URLHOST=''
478         with_urlhost='no'
479 else
480         URLHOST=$with_urlhost
481 fi
482 AC_MSG_RESULT($with_urlhost)
483
484 changequote(,)
485 cat > conftest.py <<EOF
486 # python
487 from socket import *
488 fqdn = getfqdn()
489 fp = open('conftest.out', 'w')
490 print >> fp, fqdn
491 print >> fp, fqdn
492 fp.close()
493 EOF
494 $PYTHON conftest.py
495 changequote([, ])
496 AC_MSG_CHECKING(for default mail host name)
497 if test -z "$MAILHOST"
498 then
499     MAILHOST=`sed q conftest.out`
500 fi
501 AC_MSG_RESULT($MAILHOST)
502 AC_MSG_CHECKING(for default URL host component)
503 if test -z "$URLHOST"
504 then
505     URLHOST=`sed -n '$p' conftest.out`
506 fi
507 AC_MSG_RESULT($URLHOST)
508 rm -f conftest.out conftest.py
509
510 # Checks for libraries.
511 AC_CHECK_FUNCS(strerror setregid syslog)
512 if test $ac_cv_func_syslog = no; then
513   # syslog is not in the default libraries.  See if it's in some other.
514   # Additionally, for at least SCO OpenServer, syslog() is #defined to
515   # one of several _real_ functions in syslog.h, so we need to do the test
516   # with the appropriate include.
517   for lib in bsd socket inet; do
518     AC_MSG_CHECKING(for syslog in -l$lib)
519     Mailman_LIBS_save="$LIBS"; LIBS="$LIBS -l$lib"
520     AC_TRY_LINK([#include <syslog.h>],
521                 [syslog(LOG_DEBUG, "Just a test...");],
522                 [AC_MSG_RESULT(yes)
523       AC_DEFINE(HAVE_SYSLOG)
524       break],
525                 [AC_MSG_RESULT(no)
526       LIBS="$Mailman_LIBS_save"])
527     unset Mailman_LIBS_save
528   done
529 fi
530
531 # Checks for header files.
532 AC_HEADER_STDC
533 AC_CHECK_HEADERS(syslog.h)
534
535 # Checks for typedefs, structures, and compiler characteristics.
536 AC_TYPE_UID_T
537 AC_TYPE_GETGROUPS
538
539 # Checks for library functions.
540 AC_CHECK_FUNCS(vsnprintf)
541
542 dnl Expand PYTHON path in the scripts, output into build/scriptname
543
544 AC_DEFUN(MM_SCRIPTS, [dnl
545 bin/add_members \
546 bin/arch \
547 bin/change_pw \
548 bin/check_db \
549 bin/check_perms \
550 bin/cleanarch \
551 bin/clone_member \
552 bin/config_list \
553 bin/convert.py \
554 bin/discard \
555 bin/dumpdb \
556 bin/find_member \
557 bin/fix_url.py \
558 bin/genaliases \
559 bin/inject \
560 bin/list_admins \
561 bin/list_lists \
562 bin/list_members \
563 bin/list_owners \
564 bin/mailmanctl \
565 bin/mmsitepass \
566 bin/msgfmt.py \
567 bin/newlist \
568 bin/pygettext.py \
569 bin/qrunner \
570 bin/remove_members \
571 bin/reset_pw.py \
572 bin/rmlist \
573 bin/show_qfiles \
574 bin/sync_members \
575 bin/transcheck \
576 bin/unshunt \
577 bin/update \
578 bin/version \
579 bin/withlist \
580 bin/b4b5-archfix \
581 bin/rb-archfix \
582 contrib/check_perms_grsecurity.py \
583 contrib/qmail-to-mailman.py \
584 contrib/rotatelogs.py \
585 cron/bumpdigests \
586 cron/checkdbs \
587 cron/disabled \
588 cron/gate_news \
589 cron/mailpasswds \
590 cron/nightly_gzip \
591 cron/senddigests \
592 ])
593
594 dnl Please make sure to leave a space at the end of the last entry.
595 dnl (This is so we don't have to use [a-z/] style character classes
596 dnl in the regexp below and mess with m4 quoting, which is not fun.)
597
598 dnl This regexp munges each line in MM_SCRIPTS, replacing:
599 dnl   path/script \
600 dnl with:
601 dnl   build/path/script:path/script \
602 dnl so that we can macro-expand variables in scripts without using
603 dnl script.in filenames, outputting the new files in build/ .
604
605 SCRIPTS="patsubst(MM_SCRIPTS, \(.+\) \(\\?\), build/\1:\1 \2)"
606
607 AC_SUBST(SCRIPTS)
608
609 # These directories are temporary directories to store macro-expanded
610 # scripts.  They're removed on a make distclean, so we make them here.
611 mkdir -p build/bin build/contrib build/cron
612
613 dnl Output everything
614 AC_OUTPUT([misc/paths.py Mailman/Defaults.py Mailman/mm_cfg.py.dist
615            src/Makefile misc/Makefile bin/Makefile
616            Mailman/Makefile Mailman/Cgi/Makefile Mailman/Logging/Makefile
617            Mailman/Archiver/Makefile Mailman/Commands/Makefile
618            Mailman/Handlers/Makefile Mailman/Bouncers/Makefile
619            Mailman/Queue/Makefile Mailman/MTA/Makefile Mailman/Gui/Makefile
620            templates/Makefile cron/Makefile scripts/Makefile messages/Makefile
621            cron/crontab.in misc/mailman Makefile
622            tests/Makefile tests/bounces/Makefile tests/msgs/Makefile
623            $SCRIPTS],
624         echo "configuration completed at" `date`)
625
626 # Make sure all the build scripts are executable.
627 chmod -R +x build
628
629 # Test for the Chinese codecs.
630 dnl AC_MSG_CHECKING(for Python Chinese Unicode codecs)
631 dnl cat > conftest.py <<EOF
632 dnl try:
633 dnl   unicode("abc", "big5-tw")
634 dnl   print "found"
635 dnl except LookupError:
636 dnl   print "not found"
637 dnl EOF
638 dnl chinese=`$PYTHON conftest.py 2>/dev/null`
639 dnl rm -f conftest.py
640 dnl AC_MSG_RESULT($chinese)
641 dnl if test "x$chinese" != "xfound"
642 dnl then
643 dnl     AC_MSG_WARN([
644
645 dnl ***** Python Unicode codecs for Chinese not found.
646 dnl ***** Chinese emails generated by or manipulated in Mailman will not
647 dnl ***** be sent in the correct encoding and may be unreadable.
648 dnl ***** Please uncompress and install the Chinese codecs from:
649 dnl ***** http://sourceforge.net/projects/python-codecs/
650 dnl *****
651 dnl ***** Note: Everything else will work just fine.
652 dnl ])
653 dnl fi