summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBarry Warsaw2007-07-21 16:19:54 -0400
committerBarry Warsaw2007-07-21 16:19:54 -0400
commit276009e248e64cf0c60989c93b2f3d6b9713c199 (patch)
tree7b630f12e1b0feaa8cc9f77e9d11188629e2b8d2
parent61d8ec7117463493b946c0f82872fe716d7bc901 (diff)
parenta55d4aa436f34e5d3f1e0e06b372b57de323aa61 (diff)
downloadmailman-276009e248e64cf0c60989c93b2f3d6b9713c199.tar.gz
mailman-276009e248e64cf0c60989c93b2f3d6b9713c199.tar.zst
mailman-276009e248e64cf0c60989c93b2f3d6b9713c199.zip
-rw-r--r--.bzrignore26
-rw-r--r--MANIFEST.in1
-rw-r--r--Mailman/Archiver/Archiver.py26
-rw-r--r--Mailman/Archiver/HyperArch.py32
-rw-r--r--Mailman/Archiver/Makefile.in73
-rw-r--r--Mailman/Bouncers/Makefile.in75
-rw-r--r--Mailman/Cgi/Makefile.in72
-rw-r--r--Mailman/Cgi/admin.py112
-rw-r--r--Mailman/Cgi/confirm.py4
-rw-r--r--Mailman/Cgi/create.py6
-rw-r--r--Mailman/Cgi/listinfo.py18
-rw-r--r--Mailman/Cgi/options.py110
-rw-r--r--Mailman/Cgi/rmlist.py30
-rw-r--r--Mailman/Cgi/roster.py24
-rw-r--r--Mailman/Cgi/subscribe.py12
-rw-r--r--Mailman/Commands/Makefile.in70
-rw-r--r--Mailman/Commands/cmd_confirm.py4
-rw-r--r--Mailman/Commands/cmd_help.py6
-rw-r--r--Mailman/Commands/cmd_lists.py1
-rw-r--r--Mailman/Commands/cmd_password.py6
-rw-r--r--Mailman/Commands/cmd_set.py43
-rw-r--r--Mailman/Commands/cmd_who.py22
-rw-r--r--Mailman/Defaults.py (renamed from Mailman/Defaults.py.in)42
-rw-r--r--Mailman/Deliverer.py12
-rw-r--r--Mailman/Gui/Archive.py10
-rw-r--r--Mailman/Gui/Autoresponse.py20
-rw-r--r--Mailman/Gui/Bounce.py27
-rw-r--r--Mailman/Gui/ContentFilter.py24
-rw-r--r--Mailman/Gui/Digest.py28
-rw-r--r--Mailman/Gui/General.py76
-rw-r--r--Mailman/Gui/Language.py18
-rw-r--r--Mailman/Gui/Makefile.in71
-rw-r--r--Mailman/Gui/Privacy.py62
-rw-r--r--Mailman/Gui/Topics.py12
-rw-r--r--Mailman/Gui/Usenet.py20
-rw-r--r--Mailman/HTMLFormatter.py5
-rw-r--r--Mailman/Handlers/Makefile.in70
-rw-r--r--Mailman/MTA/Makefile.in70
-rw-r--r--Mailman/MailList.py15
-rw-r--r--Mailman/Mailbox.py8
-rw-r--r--Mailman/Makefile.in101
-rw-r--r--Mailman/OldStyleMemberships.py2
-rw-r--r--Mailman/Post.py4
-rw-r--r--Mailman/Queue/Makefile.in91
-rw-r--r--Mailman/Queue/tests/Makefile.in71
-rw-r--r--Mailman/SafeDict.py2
-rw-r--r--Mailman/Utils.py54
-rw-r--r--Mailman/Version.py6
-rw-r--r--Mailman/bin/Makefile.in71
-rw-r--r--Mailman/bin/__init__.py60
-rw-r--r--Mailman/bin/cleanarch.py (renamed from bin/cleanarch)114
-rw-r--r--Mailman/bin/genaliases.py4
-rw-r--r--Mailman/bin/mailmanctl.py12
-rw-r--r--Mailman/bin/make_instance.py174
-rw-r--r--Mailman/bin/newlist.py2
-rw-r--r--Mailman/bin/rmlist.py2
-rw-r--r--Mailman/bin/testall.py24
-rw-r--r--Mailman/bin/withlist.py4
-rw-r--r--Mailman/configuration.py162
-rw-r--r--Mailman/data/Elixir-0.3.0.tar.gz (renamed from misc/Elixir-0.3.0.tar.gz)bin99715 -> 99715 bytes
-rw-r--r--Mailman/data/Makefile.in (renamed from misc/Makefile.in)0
-rw-r--r--Mailman/data/PythonPowered.png (renamed from misc/PythonPowered.png)bin945 -> 945 bytes
-rw-r--r--Mailman/data/SQLAlchemy-0.3.3.tar.gz (renamed from misc/SQLAlchemy-0.3.3.tar.gz)bin737019 -> 737019 bytes
-rwxr-xr-x[-rw-r--r--]Mailman/data/__init__.py (renamed from Mailman/testing/__init__.py)0
-rw-r--r--Mailman/data/coverage.py (renamed from misc/coverage.py)0
-rw-r--r--Mailman/data/gnu-head-tiny.jpg (renamed from misc/gnu-head-tiny.jpg)bin3049 -> 3049 bytes
-rw-r--r--Mailman/data/mailman-large.jpg (renamed from misc/mailman-large.jpg)bin6150 -> 6150 bytes
-rw-r--r--Mailman/data/mailman.cfg.in (renamed from misc/mailman.cfg.sample)26
-rw-r--r--Mailman/data/mailman.in (renamed from misc/mailman.in)0
-rw-r--r--Mailman/data/mailman.jpg (renamed from misc/mailman.jpg)bin2022 -> 2022 bytes
-rw-r--r--Mailman/data/mm-icon.png (renamed from misc/mm-icon.png)bin281 -> 281 bytes
-rw-r--r--Mailman/data/munepy-1.1-py2.5.egg (renamed from misc/munepy-1.1-py2.5.egg)bin8192 -> 8192 bytes
-rw-r--r--Mailman/data/paths.py.in (renamed from misc/paths.py.in)0
-rw-r--r--Mailman/data/pysqlite-2.3.2.tar.gz (renamed from misc/pysqlite-2.3.2.tar.gz)bin79532 -> 79532 bytes
-rw-r--r--Mailman/data/setuptools-0.6c3.tar.gz (renamed from misc/setuptools-0.6c3.tar.gz)bin238544 -> 238544 bytes
-rw-r--r--Mailman/data/wsgiref-0.1.2-py2.4.egg (renamed from misc/wsgiref-0.1.2-py2.4.egg)bin39890 -> 39890 bytes
-rw-r--r--Mailman/data/zope.interface-3.3.0.1.tar.gz (renamed from misc/zope.interface-3.3.0.1.tar.gz)bin105075 -> 105075 bytes
-rw-r--r--Mailman/database/Makefile.in92
-rw-r--r--Mailman/database/model/Makefile.in71
-rw-r--r--Mailman/docs/Makefile.in82
-rw-r--r--Mailman/docs/acknowledge.txt1
-rw-r--r--Mailman/docs/digests.txt21
-rw-r--r--Mailman/docs/languages.txt104
-rw-r--r--Mailman/ext/Makefile.in71
-rw-r--r--Mailman/i18n.py9
-rw-r--r--Mailman/interfaces/Makefile.in71
-rw-r--r--Mailman/interfaces/languages.py73
-rw-r--r--Mailman/interfaces/manager.py57
-rw-r--r--Mailman/languages.py60
-rw-r--r--Mailman/messages/Makefile.in (renamed from messages/Makefile.in)0
-rw-r--r--Mailman/messages/__init__.py (renamed from bin/mailmanctl)0
-rw-r--r--Mailman/messages/ar/LC_MESSAGES/mailman.po (renamed from messages/ar/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/ca/LC_MESSAGES/mailman.po (renamed from messages/ca/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/cs/LC_MESSAGES/mailman.po (renamed from messages/cs/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/da/LC_MESSAGES/mailman.po (renamed from messages/da/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/de/LC_MESSAGES/mailman.po (renamed from messages/de/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/de/README.de (renamed from messages/de/README.de)0
-rw-r--r--Mailman/messages/docstring.files (renamed from messages/docstring.files)0
-rw-r--r--Mailman/messages/es/LC_MESSAGES/mailman.po (renamed from messages/es/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/es/README.es (renamed from messages/es/README.es)0
-rw-r--r--Mailman/messages/et/LC_MESSAGES/mailman.po (renamed from messages/et/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/eu/LC_MESSAGES/mailman.po (renamed from messages/eu/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/eu/README.eu (renamed from messages/eu/README.eu)0
-rw-r--r--Mailman/messages/fi/LC_MESSAGES/mailman.po (renamed from messages/fi/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/fi/README.fi (renamed from messages/fi/README.fi)0
-rw-r--r--Mailman/messages/fr/LC_MESSAGES/mailman.po (renamed from messages/fr/LC_MESSAGES/mailman.po)4
-rw-r--r--Mailman/messages/fr/README.fr (renamed from messages/fr/README.fr)0
-rw-r--r--Mailman/messages/hr/LC_MESSAGES/mailman.po (renamed from messages/hr/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/hu/FAQ.hu (renamed from messages/hu/FAQ.hu)0
-rw-r--r--Mailman/messages/hu/INSTALL.hu (renamed from messages/hu/INSTALL.hu)0
-rw-r--r--Mailman/messages/hu/LC_MESSAGES/mailman.po (renamed from messages/hu/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/hu/README.BSD.hu (renamed from messages/hu/README.BSD.hu)0
-rw-r--r--Mailman/messages/hu/README.CONTRIB.hu (renamed from messages/hu/README.CONTRIB.hu)0
-rw-r--r--Mailman/messages/hu/README.EXIM.hu (renamed from messages/hu/README.EXIM.hu)0
-rw-r--r--Mailman/messages/hu/README.LINUX.hu (renamed from messages/hu/README.LINUX.hu)0
-rw-r--r--Mailman/messages/hu/README.MACOSX.hu (renamed from messages/hu/README.MACOSX.hu)0
-rw-r--r--Mailman/messages/hu/README.NETSCAPE.hu (renamed from messages/hu/README.NETSCAPE.hu)0
-rw-r--r--Mailman/messages/hu/README.POSTFIX.hu (renamed from messages/hu/README.POSTFIX.hu)0
-rw-r--r--Mailman/messages/hu/README.QMAIL.hu (renamed from messages/hu/README.QMAIL.hu)0
-rw-r--r--Mailman/messages/hu/README.SENDMAIL.hu (renamed from messages/hu/README.SENDMAIL.hu)0
-rw-r--r--Mailman/messages/hu/README.USERAGENT.hu (renamed from messages/hu/README.USERAGENT.hu)0
-rw-r--r--Mailman/messages/hu/README.hu (renamed from messages/hu/README.hu)0
-rw-r--r--Mailman/messages/hu/UPGRADING.hu (renamed from messages/hu/UPGRADING.hu)0
-rw-r--r--Mailman/messages/ia/LC_MESSAGES/mailman.po (renamed from messages/ia/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/it/LC_MESSAGES/mailman.po (renamed from messages/it/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/it/README.it (renamed from messages/it/README.it)0
-rw-r--r--Mailman/messages/ja/INSTALL (renamed from messages/ja/INSTALL)0
-rw-r--r--Mailman/messages/ja/LC_MESSAGES/mailman.po (renamed from messages/ja/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/ja/README (renamed from messages/ja/README)0
-rw-r--r--Mailman/messages/ja/README.ja (renamed from messages/ja/README.ja)0
-rw-r--r--Mailman/messages/ja/UPGRADING (renamed from messages/ja/UPGRADING)0
-rw-r--r--Mailman/messages/ja/doc/Defaults.py.in (renamed from messages/ja/doc/Defaults.py.in)0
-rw-r--r--Mailman/messages/ja/doc/mailman-install.tex (renamed from messages/ja/doc/mailman-install.tex)0
-rw-r--r--Mailman/messages/ja/doc/mailman-member.tex (renamed from messages/ja/doc/mailman-member.tex)0
-rw-r--r--Mailman/messages/ko/LC_MESSAGES/mailman.po (renamed from messages/ko/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/ko/README.ko (renamed from messages/ko/README.ko)0
-rw-r--r--Mailman/messages/lt/LC_MESSAGES/mailman.po (renamed from messages/lt/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/mailman.pot (renamed from messages/mailman.pot)0
-rw-r--r--Mailman/messages/marked.files (renamed from messages/marked.files)0
-rw-r--r--Mailman/messages/nl/LC_MESSAGES/mailman.po (renamed from messages/nl/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/no/LC_MESSAGES/mailman.po (renamed from messages/no/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/pl/LC_MESSAGES/mailman.po (renamed from messages/pl/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/pl/README.pl (renamed from messages/pl/README.pl)0
-rw-r--r--Mailman/messages/pt/LC_MESSAGES/mailman.po (renamed from messages/pt/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/pt_BR/LC_MESSAGES/mailman.po (renamed from messages/pt_BR/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/ro/LC_MESSAGES/mailman.po (renamed from messages/ro/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/ru/LC_MESSAGES/mailman.po (renamed from messages/ru/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/ru/README.ru (renamed from messages/ru/README.ru)0
-rw-r--r--Mailman/messages/sl/LC_MESSAGES/mailman.po (renamed from messages/sl/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/sr/LC_MESSAGES/mailman.po (renamed from messages/sr/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/sr/readme.sr (renamed from messages/sr/readme.sr)0
-rw-r--r--Mailman/messages/sv/LC_MESSAGES/mailman.po (renamed from messages/sv/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/sv/README.sv (renamed from messages/sv/README.sv)0
-rw-r--r--Mailman/messages/tr/LC_MESSAGES/mailman.po (renamed from messages/tr/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/uk/LC_MESSAGES/mailman.po (renamed from messages/uk/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/vi/LC_MESSAGES/mailman.po (renamed from messages/vi/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/zh_CN/LC_MESSAGES/mailman.po (renamed from messages/zh_CN/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/messages/zh_TW/LC_MESSAGES/mailman.po (renamed from messages/zh_TW/LC_MESSAGES/mailman.po)0
-rw-r--r--Mailman/templates/Makefile.in (renamed from templates/Makefile.in)0
-rw-r--r--Mailman/templates/__init__.py (renamed from bin/qrunner)0
-rw-r--r--Mailman/templates/en/adminaddrchgack.txt (renamed from templates/en/adminaddrchgack.txt)0
-rw-r--r--Mailman/templates/en/admindbdetails.html (renamed from templates/en/admindbdetails.html)0
-rw-r--r--Mailman/templates/en/admindbpreamble.html (renamed from templates/en/admindbpreamble.html)0
-rw-r--r--Mailman/templates/en/admindbsummary.html (renamed from templates/en/admindbsummary.html)0
-rw-r--r--Mailman/templates/en/adminsubscribeack.txt (renamed from templates/en/adminsubscribeack.txt)0
-rw-r--r--Mailman/templates/en/adminunsubscribeack.txt (renamed from templates/en/adminunsubscribeack.txt)0
-rw-r--r--Mailman/templates/en/admlogin.html (renamed from templates/en/admlogin.html)0
-rw-r--r--Mailman/templates/en/approve.txt (renamed from templates/en/approve.txt)0
-rw-r--r--Mailman/templates/en/archidxentry.html (renamed from templates/en/archidxentry.html)0
-rw-r--r--Mailman/templates/en/archidxfoot.html (renamed from templates/en/archidxfoot.html)0
-rw-r--r--Mailman/templates/en/archidxhead.html (renamed from templates/en/archidxhead.html)0
-rw-r--r--Mailman/templates/en/archlistend.html (renamed from templates/en/archlistend.html)0
-rw-r--r--Mailman/templates/en/archliststart.html (renamed from templates/en/archliststart.html)0
-rw-r--r--Mailman/templates/en/archtoc.html (renamed from templates/en/archtoc.html)0
-rw-r--r--Mailman/templates/en/archtocentry.html (renamed from templates/en/archtocentry.html)0
-rw-r--r--Mailman/templates/en/archtocnombox.html (renamed from templates/en/archtocnombox.html)0
-rw-r--r--Mailman/templates/en/article.html (renamed from templates/en/article.html)0
-rw-r--r--Mailman/templates/en/bounce.txt (renamed from templates/en/bounce.txt)0
-rw-r--r--Mailman/templates/en/checkdbs.txt (renamed from templates/en/checkdbs.txt)0
-rw-r--r--Mailman/templates/en/convert.txt (renamed from templates/en/convert.txt)0
-rw-r--r--Mailman/templates/en/cronpass.txt (renamed from templates/en/cronpass.txt)0
-rw-r--r--Mailman/templates/en/disabled.txt (renamed from templates/en/disabled.txt)0
-rw-r--r--Mailman/templates/en/emptyarchive.html (renamed from templates/en/emptyarchive.html)0
-rw-r--r--Mailman/templates/en/headfoot.html (renamed from templates/en/headfoot.html)0
-rw-r--r--Mailman/templates/en/help.txt (renamed from templates/en/help.txt)0
-rw-r--r--Mailman/templates/en/invite.txt (renamed from templates/en/invite.txt)0
-rw-r--r--Mailman/templates/en/listinfo.html (renamed from templates/en/listinfo.html)0
-rw-r--r--Mailman/templates/en/masthead.txt (renamed from templates/en/masthead.txt)0
-rw-r--r--Mailman/templates/en/newlist.txt (renamed from templates/en/newlist.txt)0
-rw-r--r--Mailman/templates/en/nomoretoday.txt (renamed from templates/en/nomoretoday.txt)0
-rw-r--r--Mailman/templates/en/options.html (renamed from templates/en/options.html)0
-rw-r--r--Mailman/templates/en/postack.txt (renamed from templates/en/postack.txt)0
-rw-r--r--Mailman/templates/en/postauth.txt (renamed from templates/en/postauth.txt)0
-rw-r--r--Mailman/templates/en/postheld.txt (renamed from templates/en/postheld.txt)0
-rw-r--r--Mailman/templates/en/private.html (renamed from templates/en/private.html)0
-rw-r--r--Mailman/templates/en/probe.txt (renamed from templates/en/probe.txt)0
-rw-r--r--Mailman/templates/en/refuse.txt (renamed from templates/en/refuse.txt)0
-rw-r--r--Mailman/templates/en/roster.html (renamed from templates/en/roster.html)0
-rw-r--r--Mailman/templates/en/subauth.txt (renamed from templates/en/subauth.txt)0
-rw-r--r--Mailman/templates/en/subscribe.html (renamed from templates/en/subscribe.html)0
-rw-r--r--Mailman/templates/en/subscribeack.txt (renamed from templates/en/subscribeack.txt)0
-rw-r--r--Mailman/templates/en/unsub.txt (renamed from templates/en/unsub.txt)0
-rw-r--r--Mailman/templates/en/unsubauth.txt (renamed from templates/en/unsubauth.txt)0
-rw-r--r--Mailman/templates/en/userpass.txt (renamed from templates/en/userpass.txt)0
-rw-r--r--Mailman/templates/en/verify.txt (renamed from templates/en/verify.txt)0
-rw-r--r--Mailman/tests/Makefile.in (renamed from Mailman/testing/Makefile.in)0
-rw-r--r--Mailman/tests/__init__.py0
-rw-r--r--Mailman/tests/base.py (renamed from Mailman/testing/base.py)0
-rw-r--r--Mailman/tests/bounces/Makefile.in (renamed from Mailman/testing/bounces/Makefile.in)0
-rwxr-xr-xMailman/tests/bounces/__init__.py0
-rw-r--r--Mailman/tests/bounces/bounce_01.txt (renamed from Mailman/testing/bounces/bounce_01.txt)0
-rw-r--r--Mailman/tests/bounces/bounce_02.txt (renamed from Mailman/testing/bounces/bounce_02.txt)0
-rw-r--r--Mailman/tests/bounces/bounce_03.txt (renamed from Mailman/testing/bounces/bounce_03.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_01.txt (renamed from Mailman/testing/bounces/dsn_01.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_02.txt (renamed from Mailman/testing/bounces/dsn_02.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_03.txt (renamed from Mailman/testing/bounces/dsn_03.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_04.txt (renamed from Mailman/testing/bounces/dsn_04.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_05.txt (renamed from Mailman/testing/bounces/dsn_05.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_06.txt (renamed from Mailman/testing/bounces/dsn_06.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_07.txt (renamed from Mailman/testing/bounces/dsn_07.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_08.txt (renamed from Mailman/testing/bounces/dsn_08.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_09.txt (renamed from Mailman/testing/bounces/dsn_09.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_10.txt (renamed from Mailman/testing/bounces/dsn_10.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_11.txt (renamed from Mailman/testing/bounces/dsn_11.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_12.txt (renamed from Mailman/testing/bounces/dsn_12.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_13.txt (renamed from Mailman/testing/bounces/dsn_13.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_14.txt (renamed from Mailman/testing/bounces/dsn_14.txt)0
-rw-r--r--Mailman/tests/bounces/dsn_15.txt (renamed from Mailman/testing/bounces/dsn_15.txt)0
-rw-r--r--Mailman/tests/bounces/dumbass_01.txt (renamed from Mailman/testing/bounces/dumbass_01.txt)0
-rw-r--r--Mailman/tests/bounces/exim_01.txt (renamed from Mailman/testing/bounces/exim_01.txt)0
-rw-r--r--Mailman/tests/bounces/groupwise_01.txt (renamed from Mailman/testing/bounces/groupwise_01.txt)0
-rw-r--r--Mailman/tests/bounces/groupwise_02.txt (renamed from Mailman/testing/bounces/groupwise_02.txt)0
-rw-r--r--Mailman/tests/bounces/hotpop_01.txt (renamed from Mailman/testing/bounces/hotpop_01.txt)0
-rw-r--r--Mailman/tests/bounces/llnl_01.txt (renamed from Mailman/testing/bounces/llnl_01.txt)0
-rw-r--r--Mailman/tests/bounces/microsoft_01.txt (renamed from Mailman/testing/bounces/microsoft_01.txt)0
-rw-r--r--Mailman/tests/bounces/microsoft_02.txt (renamed from Mailman/testing/bounces/microsoft_02.txt)0
-rw-r--r--Mailman/tests/bounces/microsoft_03.txt (renamed from Mailman/testing/bounces/microsoft_03.txt)0
-rw-r--r--Mailman/tests/bounces/netscape_01.txt (renamed from Mailman/testing/bounces/netscape_01.txt)0
-rw-r--r--Mailman/tests/bounces/newmailru_01.txt (renamed from Mailman/testing/bounces/newmailru_01.txt)0
-rw-r--r--Mailman/tests/bounces/postfix_01.txt (renamed from Mailman/testing/bounces/postfix_01.txt)0
-rw-r--r--Mailman/tests/bounces/postfix_02.txt (renamed from Mailman/testing/bounces/postfix_02.txt)0
-rw-r--r--Mailman/tests/bounces/postfix_03.txt (renamed from Mailman/testing/bounces/postfix_03.txt)0
-rw-r--r--Mailman/tests/bounces/postfix_04.txt (renamed from Mailman/testing/bounces/postfix_04.txt)0
-rw-r--r--Mailman/tests/bounces/postfix_05.txt (renamed from Mailman/testing/bounces/postfix_05.txt)0
-rw-r--r--Mailman/tests/bounces/qmail_01.txt (renamed from Mailman/testing/bounces/qmail_01.txt)0
-rw-r--r--Mailman/tests/bounces/qmail_02.txt (renamed from Mailman/testing/bounces/qmail_02.txt)0
-rw-r--r--Mailman/tests/bounces/qmail_03.txt (renamed from Mailman/testing/bounces/qmail_03.txt)0
-rw-r--r--Mailman/tests/bounces/qmail_04.txt (renamed from Mailman/testing/bounces/qmail_04.txt)0
-rw-r--r--Mailman/tests/bounces/qmail_05.txt (renamed from Mailman/testing/bounces/qmail_05.txt)0
-rw-r--r--Mailman/tests/bounces/sendmail_01.txt (renamed from Mailman/testing/bounces/sendmail_01.txt)0
-rw-r--r--Mailman/tests/bounces/simple_01.txt (renamed from Mailman/testing/bounces/simple_01.txt)0
-rw-r--r--Mailman/tests/bounces/simple_02.txt (renamed from Mailman/testing/bounces/simple_02.txt)0
-rw-r--r--Mailman/tests/bounces/simple_03.txt (renamed from Mailman/testing/bounces/simple_03.txt)0
-rw-r--r--Mailman/tests/bounces/simple_04.txt (renamed from Mailman/testing/bounces/simple_04.txt)0
-rw-r--r--Mailman/tests/bounces/simple_05.txt (renamed from Mailman/testing/bounces/simple_05.txt)0
-rw-r--r--Mailman/tests/bounces/simple_06.txt (renamed from Mailman/testing/bounces/simple_06.txt)0
-rw-r--r--Mailman/tests/bounces/simple_07.txt (renamed from Mailman/testing/bounces/simple_07.txt)0
-rw-r--r--Mailman/tests/bounces/simple_08.txt (renamed from Mailman/testing/bounces/simple_08.txt)0
-rw-r--r--Mailman/tests/bounces/simple_09.txt (renamed from Mailman/testing/bounces/simple_09.txt)0
-rw-r--r--Mailman/tests/bounces/simple_10.txt (renamed from Mailman/testing/bounces/simple_10.txt)0
-rw-r--r--Mailman/tests/bounces/simple_11.txt (renamed from Mailman/testing/bounces/simple_11.txt)0
-rw-r--r--Mailman/tests/bounces/simple_12.txt (renamed from Mailman/testing/bounces/simple_12.txt)0
-rw-r--r--Mailman/tests/bounces/simple_13.txt (renamed from Mailman/testing/bounces/simple_13.txt)0
-rw-r--r--Mailman/tests/bounces/simple_14.txt (renamed from Mailman/testing/bounces/simple_14.txt)0
-rw-r--r--Mailman/tests/bounces/simple_15.txt (renamed from Mailman/testing/bounces/simple_15.txt)0
-rw-r--r--Mailman/tests/bounces/simple_16.txt (renamed from Mailman/testing/bounces/simple_16.txt)0
-rw-r--r--Mailman/tests/bounces/simple_17.txt (renamed from Mailman/testing/bounces/simple_17.txt)0
-rw-r--r--Mailman/tests/bounces/simple_18.txt (renamed from Mailman/testing/bounces/simple_18.txt)0
-rw-r--r--Mailman/tests/bounces/simple_19.txt (renamed from Mailman/testing/bounces/simple_19.txt)0
-rw-r--r--Mailman/tests/bounces/simple_20.txt (renamed from Mailman/testing/bounces/simple_20.txt)0
-rw-r--r--Mailman/tests/bounces/simple_21.txt (renamed from Mailman/testing/bounces/simple_21.txt)0
-rw-r--r--Mailman/tests/bounces/simple_22.txt (renamed from Mailman/testing/bounces/simple_22.txt)0
-rw-r--r--Mailman/tests/bounces/simple_23.txt (renamed from Mailman/testing/bounces/simple_23.txt)0
-rw-r--r--Mailman/tests/bounces/simple_24.txt (renamed from Mailman/testing/bounces/simple_24.txt)0
-rw-r--r--Mailman/tests/bounces/simple_25.txt (renamed from Mailman/testing/bounces/simple_25.txt)0
-rw-r--r--Mailman/tests/bounces/simple_26.txt (renamed from Mailman/testing/bounces/simple_26.txt)0
-rw-r--r--Mailman/tests/bounces/simple_27.txt (renamed from Mailman/testing/bounces/simple_27.txt)0
-rw-r--r--Mailman/tests/bounces/sina_01.txt (renamed from Mailman/testing/bounces/sina_01.txt)0
-rw-r--r--Mailman/tests/bounces/smtp32_01.txt (renamed from Mailman/testing/bounces/smtp32_01.txt)0
-rw-r--r--Mailman/tests/bounces/smtp32_02.txt (renamed from Mailman/testing/bounces/smtp32_02.txt)0
-rw-r--r--Mailman/tests/bounces/smtp32_03.txt (renamed from Mailman/testing/bounces/smtp32_03.txt)0
-rw-r--r--Mailman/tests/bounces/smtp32_04.txt (renamed from Mailman/testing/bounces/smtp32_04.txt)0
-rw-r--r--Mailman/tests/bounces/smtp32_05.txt (renamed from Mailman/testing/bounces/smtp32_05.txt)0
-rw-r--r--Mailman/tests/bounces/smtp32_06.txt (renamed from Mailman/testing/bounces/smtp32_06.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_01.txt (renamed from Mailman/testing/bounces/yahoo_01.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_02.txt (renamed from Mailman/testing/bounces/yahoo_02.txt)bin2212 -> 2212 bytes
-rw-r--r--Mailman/tests/bounces/yahoo_03.txt (renamed from Mailman/testing/bounces/yahoo_03.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_04.txt (renamed from Mailman/testing/bounces/yahoo_04.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_05.txt (renamed from Mailman/testing/bounces/yahoo_05.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_06.txt (renamed from Mailman/testing/bounces/yahoo_06.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_07.txt (renamed from Mailman/testing/bounces/yahoo_07.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_08.txt (renamed from Mailman/testing/bounces/yahoo_08.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_09.txt (renamed from Mailman/testing/bounces/yahoo_09.txt)0
-rw-r--r--Mailman/tests/bounces/yahoo_10.txt (renamed from Mailman/testing/bounces/yahoo_10.txt)0
-rw-r--r--Mailman/tests/bounces/yale_01.txt (renamed from Mailman/testing/bounces/yale_01.txt)0
-rw-r--r--Mailman/tests/emailbase.py (renamed from Mailman/testing/emailbase.py)2
-rw-r--r--Mailman/tests/test_bounces.py (renamed from Mailman/testing/test_bounces.py)22
-rw-r--r--Mailman/tests/test_documentation.py (renamed from Mailman/testing/test_documentation.py)0
-rw-r--r--Mailman/tests/test_handlers.py (renamed from Mailman/testing/test_handlers.py)3
-rw-r--r--Mailman/tests/test_lockfile.py (renamed from Mailman/testing/test_lockfile.py)0
-rw-r--r--Mailman/tests/test_membership.py (renamed from Mailman/testing/test_membership.py)6
-rw-r--r--Mailman/tests/test_passwords.py (renamed from Mailman/testing/test_passwords.py)0
-rw-r--r--Mailman/tests/test_safedict.py (renamed from Mailman/testing/test_safedict.py)0
-rw-r--r--Mailman/tests/test_security_mgr.py (renamed from Mailman/testing/test_security_mgr.py)11
-rw-r--r--Mailman/tests/testing.cfg.in (renamed from Mailman/testing/testing.cfg.in)2
-rw-r--r--Mailman/versions.py78
-rw-r--r--Makefile.in157
-rw-r--r--bin/Makefile.in93
-rwxr-xr-xbin/check_db153
-rw-r--r--bin/convert.py44
-rw-r--r--bin/mmshell48
-rwxr-xr-xconfigure5927
-rw-r--r--configure.in653
-rw-r--r--cron/Makefile.in78
-rw-r--r--ez_setup.py228
-rwxr-xr-xinstall-sh250
-rwxr-xr-xmkinstalldirs40
-rw-r--r--scripts/Makefile.in84
-rw-r--r--setup.py100
-rw-r--r--src/Makefile.in134
-rw-r--r--src/cgi-wrapper.c68
-rw-r--r--src/common.c306
-rw-r--r--src/common.h62
-rw-r--r--src/mail-wrapper.c92
-rw-r--r--src/vsnprintf.c125
-rw-r--r--tests/Makefile.in79
-rw-r--r--tests/msgs/Makefile.in69
327 files changed, 1515 insertions, 10464 deletions
diff --git a/.bzrignore b/.bzrignore
index 901a0cefd..185cd1cc1 100644
--- a/.bzrignore
+++ b/.bzrignore
@@ -1,27 +1,9 @@
*.mo
.bzrignore
-Mailman/Defaults.py
-Mailman/mm_cfg.py.dist
-Makefile
build/
-config.log
-config.status
cron/crontab.in
-misc/Elixir-0.3.0/
-misc/SQLAlchemy-0.3.3/
+dist/
+mailman.egg-info
misc/mailman
-misc/paths.py
-misc/setuptools-0.6c3/
-misc/zope.interface-3.3.0.1/
-src/admin
-src/admindb
-src/confirm
-src/create
-src/edithtml
-src/listinfo
-src/mailman
-src/options
-src/private
-src/rmlist
-src/roster
-src/subscribe
+setuptoolsbzr-*.egg
+staging
diff --git a/MANIFEST.in b/MANIFEST.in
new file mode 100644
index 000000000..a28dec7e1
--- /dev/null
+++ b/MANIFEST.in
@@ -0,0 +1 @@
+recursive-include Mailman/messages *.mo
diff --git a/Mailman/Archiver/Archiver.py b/Mailman/Archiver/Archiver.py
index 5d57a01a9..fa8839230 100644
--- a/Mailman/Archiver/Archiver.py
+++ b/Mailman/Archiver/Archiver.py
@@ -33,9 +33,9 @@ from string import Template
from Mailman import Mailbox
from Mailman import Utils
-from Mailman import mm_cfg
from Mailman.SafeDict import SafeDict
from Mailman.configuration import config
+from Mailman.configuration import config
from Mailman.i18n import _
log = logging.getLogger('mailman.error')
@@ -65,11 +65,11 @@ class Archiver:
#
def InitVars(self):
# Configurable
- self.archive = mm_cfg.DEFAULT_ARCHIVE
+ self.archive = config.DEFAULT_ARCHIVE
# 0=public, 1=private:
- self.archive_private = mm_cfg.DEFAULT_ARCHIVE_PRIVATE
+ self.archive_private = config.DEFAULT_ARCHIVE_PRIVATE
self.archive_volume_frequency = \
- mm_cfg.DEFAULT_ARCHIVE_VOLUME_FREQUENCY
+ config.DEFAULT_ARCHIVE_VOLUME_FREQUENCY
# The archive file structure by default is:
#
# archives/
@@ -188,23 +188,23 @@ class Archiver:
def ArchiveMail(self, msg):
"""Store postings in mbox and/or pipermail archive, depending."""
# Fork so archival errors won't disrupt normal list delivery
- if mm_cfg.ARCHIVE_TO_MBOX == -1:
+ if config.ARCHIVE_TO_MBOX == -1:
return
#
# We don't need an extra archiver lock here because we know the list
# itself must be locked.
- if mm_cfg.ARCHIVE_TO_MBOX in (1, 2):
+ if config.ARCHIVE_TO_MBOX in (1, 2):
self.__archive_to_mbox(msg)
- if mm_cfg.ARCHIVE_TO_MBOX == 1:
+ if config.ARCHIVE_TO_MBOX == 1:
# Archive to mbox only.
return
txt = str(msg)
# should we use the internal or external archiver?
private_p = self.archive_private
- if mm_cfg.PUBLIC_EXTERNAL_ARCHIVER and not private_p:
- self.ExternalArchive(mm_cfg.PUBLIC_EXTERNAL_ARCHIVER, txt)
- elif mm_cfg.PRIVATE_EXTERNAL_ARCHIVER and private_p:
- self.ExternalArchive(mm_cfg.PRIVATE_EXTERNAL_ARCHIVER, txt)
+ if config.PUBLIC_EXTERNAL_ARCHIVER and not private_p:
+ self.ExternalArchive(config.PUBLIC_EXTERNAL_ARCHIVER, txt)
+ elif config.PRIVATE_EXTERNAL_ARCHIVER and private_p:
+ self.ExternalArchive(config.PRIVATE_EXTERNAL_ARCHIVER, txt)
else:
# use the internal archiver
f = StringIO(txt)
@@ -222,7 +222,7 @@ class Archiver:
# for public vs private. If it doesn't exist, or some weird
# permissions errors prevent us from stating the directory, it's
# pointless to try to fix the perms, so we just return -scott
- if mm_cfg.ARCHIVE_TO_MBOX == -1:
+ if config.ARCHIVE_TO_MBOX == -1:
# Archiving is completely disabled, don't require the skeleton.
return
pubdir = os.path.join(config.PUBLIC_ARCHIVE_FILE_DIR,
@@ -238,5 +238,5 @@ class Archiver:
# OSError, ENOENT which should be caught and reported properly.
makelink(privdir, pubdir)
# Only make this link if the site has enabled public mbox files
- if mm_cfg.PUBLIC_MBOX:
+ if config.PUBLIC_MBOX:
makelink(privmbox, pubmbox)
diff --git a/Mailman/Archiver/HyperArch.py b/Mailman/Archiver/HyperArch.py
index 418aeb7f2..628f5da6d 100644
--- a/Mailman/Archiver/HyperArch.py
+++ b/Mailman/Archiver/HyperArch.py
@@ -40,16 +40,16 @@ from email.Charset import Charset
from email.Errors import HeaderParseError
from email.Header import decode_header, make_header
-from Mailman import i18n
-from Mailman import Utils
from Mailman import Errors
-from Mailman import mm_cfg
from Mailman import LockFile
from Mailman import MailList
+from Mailman import Utils
+from Mailman import i18n
from Mailman.Archiver import HyperDatabase
from Mailman.Archiver import pipermail
from Mailman.Mailbox import ArchiverMailbox
from Mailman.SafeDict import SafeDict
+from Mailman.configuration import config
log = logging.getLogger('mailman.error')
@@ -57,7 +57,7 @@ log = logging.getLogger('mailman.error')
_ = i18n._
gzip = None
-if mm_cfg.GZIP_ARCHIVE_TXT_FILES:
+if config.GZIP_ARCHIVE_TXT_FILES:
try:
import gzip
except ImportError:
@@ -187,7 +187,7 @@ def quick_maketext(templatefile, dict=None, lang=None, mlist=None):
listname = mlist.fqdn_listname
if lang is None:
if mlist is None:
- lang = mm_cfg.DEFAULT_SERVER_LANGUAGE
+ lang = config.DEFAULT_SERVER_LANGUAGE
else:
lang = mlist.preferred_language
cachekey = (templatefile, lang, listname)
@@ -247,7 +247,7 @@ class Article(pipermail.Article):
_last_article_time = time.time()
def __init__(self, message=None, sequence=0, keepHeaders=[],
- lang=mm_cfg.DEFAULT_SERVER_LANGUAGE, mlist=None):
+ lang=config.DEFAULT_SERVER_LANGUAGE, mlist=None):
self.__super_init(message, sequence, keepHeaders)
self.prev = None
self.next = None
@@ -264,7 +264,7 @@ class Article(pipermail.Article):
self._lang = lang
self._mlist = mlist
- if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS:
+ if config.ARCHIVER_OBSCURES_EMAILADDRS:
# Avoid i18n side-effects. Note that the language for this
# article (for this list) could be different from the site-wide
# preferred language, so we need to ensure no side-effects will
@@ -368,7 +368,7 @@ class Article(pipermail.Article):
if hasattr(self, '_mlist'):
self._lang = self._mlist.preferred_language
else:
- self._lang = mm_cfg.DEFAULT_SERVER_LANGUAGE
+ self._lang = config.DEFAULT_SERVER_LANGUAGE
if not d.has_key('cenc'):
self.cenc = None
if not d.has_key('decoded'):
@@ -400,7 +400,7 @@ class Article(pipermail.Article):
if email:
self.decoded['email'] = email
if subject:
- if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS:
+ if config.ARCHIVER_OBSCURES_EMAILADDRS:
otrans = i18n.get_translation()
try:
i18n.set_language(self._lang)
@@ -454,7 +454,7 @@ class Article(pipermail.Article):
d["subject_html"] = self.quote(self.subject)
d["subject_url"] = url_quote(self.subject)
d["in_reply_to_url"] = url_quote(self.in_reply_to)
- if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS:
+ if config.ARCHIVER_OBSCURES_EMAILADDRS:
# Point the mailto url back to the list
author = re.sub('@', _(' at '), self.author)
emailurl = self._mlist.GetListEmail()
@@ -561,7 +561,7 @@ class Article(pipermail.Article):
# Coerce the body to Unicode and replace any invalid characters.
if not isinstance(body, unicode):
body = unicode(body, cset, 'replace')
- if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS:
+ if config.ARCHIVER_OBSCURES_EMAILADDRS:
otrans = i18n.get_translation()
try:
atmark = unicode(_(' at '), cset)
@@ -778,7 +778,7 @@ class HyperArchive(pipermail.T):
# The TOC is always in the charset of the list's preferred language
d['meta'] += html_charset % Utils.GetCharSet(mlist.preferred_language)
# The site can disable public access to the mbox file.
- if mm_cfg.PUBLIC_MBOX:
+ if config.PUBLIC_MBOX:
template = 'archtoc.html'
else:
template = 'archtocnombox.html'
@@ -822,7 +822,7 @@ class HyperArchive(pipermail.T):
if self._lock_file:
return 1
self._lock_file = LockFile.LockFile(
- os.path.join(mm_cfg.LOCK_DIR,
+ os.path.join(config.LOCK_DIR,
self.maillist.fqdn_listname + '-arch.lock'))
try:
self._lock_file.lock(timeout=0.5)
@@ -1035,7 +1035,7 @@ class HyperArchive(pipermail.T):
def write_index_entry(self, article):
subject = self.get_header("subject", article)
author = self.get_header("author", article)
- if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS:
+ if config.ARCHIVER_OBSCURES_EMAILADDRS:
try:
author = re.sub('@', _(' at '), author)
except UnicodeError:
@@ -1111,7 +1111,7 @@ class HyperArchive(pipermail.T):
def update_archive(self, archive):
self.__super_update_archive(archive)
# only do this if the gzip module was imported globally, and
- # gzip'ing was enabled via mm_cfg.GZIP_ARCHIVE_TXT_FILES. See
+ # gzip'ing was enabled via config.GZIP_ARCHIVE_TXT_FILES. See
# above.
if gzip:
archz = None
@@ -1208,7 +1208,7 @@ class HyperArchive(pipermail.T):
if j != -1 and (j < k or k == -1):
text = jr.group(1)
length = len(text)
- if mm_cfg.ARCHIVER_OBSCURES_EMAILADDRS:
+ if config.ARCHIVER_OBSCURES_EMAILADDRS:
text = re.sub('@', atmark, text)
URL = self.maillist.GetScriptURL(
'listinfo', absolute=1)
diff --git a/Mailman/Archiver/Makefile.in b/Mailman/Archiver/Makefile.in
deleted file mode 100644
index 32ab5381d..000000000
--- a/Mailman/Archiver/Makefile.in
+++ /dev/null
@@ -1,73 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Archiver
-SHELL= /bin/sh
-
-MODULES= __init__.py Archiver.py HyperArch.py HyperDatabase.py \
-pipermail.py
-
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
-
diff --git a/Mailman/Bouncers/Makefile.in b/Mailman/Bouncers/Makefile.in
deleted file mode 100644
index 56a9402c0..000000000
--- a/Mailman/Bouncers/Makefile.in
+++ /dev/null
@@ -1,75 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Bouncers
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
-
-
-# Local Variables:
-# indent-tabs-mode: t
-# End:
diff --git a/Mailman/Cgi/Makefile.in b/Mailman/Cgi/Makefile.in
deleted file mode 100644
index 61ceec7db..000000000
--- a/Mailman/Cgi/Makefile.in
+++ /dev/null
@@ -1,72 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman
-CGIDIR= $(PACKAGEDIR)/Cgi
-SHELL= /bin/sh
-
-CGI_MODULES= *.py
-
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(CGI_MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(CGIDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/Cgi/admin.py b/Mailman/Cgi/admin.py
index 553f26656..cfca3a88e 100644
--- a/Mailman/Cgi/admin.py
+++ b/Mailman/Cgi/admin.py
@@ -33,16 +33,15 @@ from Mailman import MailList
from Mailman import MemberAdaptor
from Mailman import Utils
from Mailman import i18n
-from Mailman import mm_cfg
from Mailman import passwords
-
from Mailman.Cgi import Auth
-from Mailman.htmlformat import *
from Mailman.UserDesc import UserDesc
+from Mailman.configuration import config
+from Mailman.htmlformat import *
# Set up i18n
_ = i18n._
-i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+i18n.set_language(config.DEFAULT_SERVER_LANGUAGE)
NL = '\n'
OPTCOLUMNS = 11
@@ -74,8 +73,8 @@ def main():
# If the user is not authenticated, we're done.
cgidata = cgi.FieldStorage(keep_blank_values=1)
- if not mlist.WebAuthenticate((mm_cfg.AuthListAdmin,
- mm_cfg.AuthSiteAdmin),
+ if not mlist.WebAuthenticate((config.AuthListAdmin,
+ config.AuthSiteAdmin),
cgidata.getvalue('adminpw', '')):
if cgidata.has_key('adminpw'):
# This is a re-authorization attempt
@@ -98,7 +97,7 @@ def main():
# Is this a log-out request?
if category == 'logout':
- print mlist.ZapCookie(mm_cfg.AuthListAdmin)
+ print mlist.ZapCookie(config.AuthListAdmin)
Auth.loginpage(mlist, 'admin', frontpage=True)
return
@@ -173,13 +172,13 @@ def admin_overview(msg=''):
legend = _('%(hostname)s mailing lists - Admin Links')
# The html `document'
doc = Document()
- doc.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ doc.set_language(config.DEFAULT_SERVER_LANGUAGE)
doc.SetTitle(legend)
# The table that will hold everything
table = Table(border=0, width="100%")
table.AddRow([Center(Header(2, legend))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
# Skip any mailing list that isn't advertised.
advertised = []
for name in sorted(config.list_manager.names):
@@ -199,7 +198,7 @@ def admin_overview(msg=''):
greeting = _("Welcome!")
welcome = []
- mailmanlink = Link(mm_cfg.MAILMAN_URL, _('Mailman')).Format()
+ mailmanlink = Link(config.MAILMAN_URL, _('Mailman')).Format()
if not advertised:
welcome.extend([
greeting,
@@ -245,9 +244,9 @@ def admin_overview(msg=''):
table.AddRow(
[Link(url, Bold(real_name)),
description or Italic(_('[no description available]'))])
- if highlight and mm_cfg.WEB_HIGHLIGHT_COLOR:
+ if highlight and config.WEB_HIGHLIGHT_COLOR:
table.AddRowInfo(table.GetCurrentRowIndex(),
- bgcolor=mm_cfg.WEB_HIGHLIGHT_COLOR)
+ bgcolor=config.WEB_HIGHLIGHT_COLOR)
highlight = not highlight
doc.AddItem(table)
@@ -294,7 +293,7 @@ def option_help(mlist, varhelp):
header = Table(width='100%')
header.AddRow([Center(Header(3, legend))])
header.AddCellInfo(header.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
doc.SetTitle(_("Mailman %(varname)s List Option Help"))
doc.AddItem(header)
doc.AddItem("<b>%s</b> (%s): %s<p>" % (varname, category, description))
@@ -369,7 +368,7 @@ def show_results(mlist, doc, category, subcat, cgidata):
otherlinks.AddItem(Link(mlist.GetBaseArchiveURL(),
_('Go to list archives')).Format() +
'<br>&nbsp;<br>')
- if mm_cfg.OWNERS_CAN_DELETE_THEIR_OWN_LISTS:
+ if config.OWNERS_CAN_DELETE_THEIR_OWN_LISTS:
otherlinks.AddItem(Link(mlist.GetScriptURL('rmlist'),
_('Delete this mailing list')).Format() +
_(' (requires confirmation)<br>&nbsp;<br>'))
@@ -425,7 +424,7 @@ def show_results(mlist, doc, category, subcat, cgidata):
label = _('Emergency moderation of all list traffic is enabled')
etable.AddRow([Center(
Link('?VARHELP=general/emergency', Bold(label)))])
- color = mm_cfg.WEB_ERROR_COLOR
+ color = config.WEB_ERROR_COLOR
etable.AddCellInfo(etable.GetCurrentRowIndex(), 0,
colspan=2, bgcolor=color)
linktable.AddRow([etable, otherlinks])
@@ -453,7 +452,7 @@ def show_results(mlist, doc, category, subcat, cgidata):
table = Table(width='100%')
table.AddRow([Center(Header(2, _('Additional Member Tasks')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
# Add a blank separator row
table.AddRow(['&nbsp;', '&nbsp;'])
# Add a section to set the moderation bit for all members
@@ -489,7 +488,7 @@ def show_variables(mlist, category, subcat, cgidata, doc):
table.AddRow([Center(Header(2, label))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
# The very first item in the config info will be treated as a general
# description if it is a string
@@ -536,9 +535,9 @@ def add_options_table_item(mlist, category, subcat, table, item, detailsp=1):
val = get_item_gui_value(mlist, category, kind, varname, params, extra)
table.AddRow([descr, val])
table.AddCellInfo(table.GetCurrentRowIndex(), 0,
- bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
+ bgcolor=config.WEB_ADMINITEM_COLOR)
table.AddCellInfo(table.GetCurrentRowIndex(), 1,
- bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
+ bgcolor=config.WEB_ADMINITEM_COLOR)
@@ -574,7 +573,7 @@ def get_item_gui_value(mlist, category, kind, varname, params, extra):
if value is None and not varname.startswith('_'):
value = getattr(mlist, varname)
# Now create the widget for this value
- if kind == mm_cfg.Radio or kind == mm_cfg.Toggle:
+ if kind == config.Radio or kind == config.Toggle:
# If we are returning the option for subscribe policy and this site
# doesn't allow open subscribes, then we have to alter the value of
# mlist.subscribe_policy as passed to RadioButtonArray in order to
@@ -587,29 +586,29 @@ def get_item_gui_value(mlist, category, kind, varname, params, extra):
checked = 0
else:
checked = value
- if varname == 'subscribe_policy' and not mm_cfg.ALLOW_OPEN_SUBSCRIBE:
+ if varname == 'subscribe_policy' and not config.ALLOW_OPEN_SUBSCRIBE:
checked = checked - 1
# For Radio buttons, we're going to interpret the extra stuff as a
# horizontal/vertical flag. For backwards compatibility, the value 0
# means horizontal, so we use "not extra" to get the parity right.
return RadioButtonArray(varname, params, checked, not extra)
- elif (kind == mm_cfg.String or kind == mm_cfg.Email or
- kind == mm_cfg.Host or kind == mm_cfg.Number):
+ elif (kind == config.String or kind == config.Email or
+ kind == config.Host or kind == config.Number):
return TextBox(varname, value, params)
- elif kind == mm_cfg.Text:
+ elif kind == config.Text:
if params:
r, c = params
else:
r, c = None, None
return TextArea(varname, value or '', r, c)
- elif kind in (mm_cfg.EmailList, mm_cfg.EmailListEx):
+ elif kind in (config.EmailList, config.EmailListEx):
if params:
r, c = params
else:
r, c = None, None
res = NL.join(value)
return TextArea(varname, res, r, c, wrap='off')
- elif kind == mm_cfg.FileUpload:
+ elif kind == config.FileUpload:
# like a text area, but also with uploading
if params:
r, c = params
@@ -621,15 +620,15 @@ def get_item_gui_value(mlist, category, kind, varname, params, extra):
container.AddItem(_('<br><em>...specify a file to upload</em><br>'))
container.AddItem(FileUpload(varname+'_upload', r, c))
return container
- elif kind == mm_cfg.Select:
+ elif kind == config.Select:
if params:
values, legend, selected = params
else:
codes = mlist.language_codes
- legend = [Utils.GetLanguageDescr(code) for code in codes]
+ legend = [config.languages.get_description(code) for code in codes]
selected = codes.index(mlist.preferred_language)
return SelectOptions(varname, values, legend, selected)
- elif kind == mm_cfg.Topics:
+ elif kind == config.Topics:
# A complex and specialized widget type that allows for setting of a
# topic name, a mark button, a regexp text box, an "add after mark",
# and a delete button. Yeesh! params are ignored.
@@ -677,7 +676,7 @@ def get_item_gui_value(mlist, category, kind, varname, params, extra):
if i == 1:
makebox(i, '', '', '', empty=True)
return table
- elif kind == mm_cfg.HeaderFilter:
+ elif kind == config.HeaderFilter:
# A complex and specialized widget type that allows for setting of a
# spam filter rule including, a mark button, a regexp text box, an
# "add after mark", up and down buttons, and a delete button. Yeesh!
@@ -702,8 +701,8 @@ def get_item_gui_value(mlist, category, kind, varname, params, extra):
table.AddRow([Label(_('Spam Filter Regexp:')),
TextArea(reboxtag, text=pattern,
rows=4, cols=30, wrap='off')])
- values = [mm_cfg.DEFER, mm_cfg.HOLD, mm_cfg.REJECT,
- mm_cfg.DISCARD, mm_cfg.ACCEPT]
+ values = [config.DEFER, config.HOLD, config.REJECT,
+ config.DISCARD, config.ACCEPT]
try:
checked = values.index(action)
except ValueError:
@@ -739,9 +738,9 @@ def get_item_gui_value(mlist, category, kind, varname, params, extra):
# Add one more non-deleteable widget as the first blank entry, but
# only if there are no real entries.
if i == 1:
- makebox(i, '', mm_cfg.DEFER, empty=True)
+ makebox(i, '', config.DEFER, empty=True)
return table
- elif kind == mm_cfg.Checkbox:
+ elif kind == config.Checkbox:
return CheckBoxArray(varname, *params)
else:
assert 0, 'Bad gui widget type: %s' % kind
@@ -785,21 +784,21 @@ def membership_options(mlist, subcat, cgidata, doc, form):
if subcat == 'add':
header.AddRow([Center(Header(2, _('Mass Subscriptions')))])
header.AddCellInfo(header.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
container.AddItem(header)
mass_subscribe(mlist, container)
return container
if subcat == 'remove':
header.AddRow([Center(Header(2, _('Mass Removals')))])
header.AddCellInfo(header.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
container.AddItem(header)
mass_remove(mlist, container)
return container
# Otherwise...
header.AddRow([Center(Header(2, _('Membership List')))])
header.AddCellInfo(header.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
container.AddItem(header)
# Add a "search for member" button
table = Table(width='100%')
@@ -888,7 +887,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
usertable.AddCellInfo(usertable.GetCurrentRowIndex(),
usertable.GetCurrentCellIndex(),
colspan=OPTCOLUMNS,
- bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
+ bgcolor=config.WEB_ADMINITEM_COLOR)
# Add the alphabetical links
if bucket:
cells = []
@@ -906,7 +905,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
usertable.AddCellInfo(usertable.GetCurrentRowIndex(),
usertable.GetCurrentCellIndex(),
colspan=OPTCOLUMNS,
- bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
+ bgcolor=config.WEB_ADMINITEM_COLOR)
usertable.AddRow([Center(h) for h in (_('unsub'),
_('member address<br>member name'),
_('mod'), _('hide'),
@@ -917,7 +916,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
_('language'))])
rowindex = usertable.GetCurrentRowIndex()
for i in range(OPTCOLUMNS):
- usertable.AddCellInfo(rowindex, i, bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
+ usertable.AddCellInfo(rowindex, i, bgcolor=config.WEB_ADMINITEM_COLOR)
# Find the longest name in the list
longest = 0
if members:
@@ -942,7 +941,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
Hidden('user', urllib.quote(addr)).Format(),
]
# Do the `mod' option
- if mlist.getMemberOption(addr, mm_cfg.Moderate):
+ if mlist.getMemberOption(addr, config.Moderate):
value = 'on'
checked = 1
else:
@@ -961,7 +960,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
value = 'on'
checked = 1
extra = '[%s]' % ds_abbrevs[status]
- elif mlist.getMemberOption(addr, mm_cfg.OPTINFO[opt]):
+ elif mlist.getMemberOption(addr, config.OPTINFO[opt]):
value = 'on'
checked = 1
else:
@@ -977,7 +976,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
cells.append(Center(CheckBox(addr + '_digest', 'off', 0).Format()))
else:
cells.append(Center(CheckBox(addr + '_digest', 'on', 1).Format()))
- if mlist.getMemberOption(addr, mm_cfg.OPTINFO['plain']):
+ if mlist.getMemberOption(addr, config.OPTINFO['plain']):
value = 'on'
checked = 1
else:
@@ -987,7 +986,8 @@ def membership_options(mlist, subcat, cgidata, doc, form):
# User's preferred language
langpref = mlist.getMemberLanguage(addr)
langs = mlist.language_codes
- langdescs = [_(Utils.GetLanguageDescr(lang)) for lang in langs]
+ langdescs = [_(config.languges.get_description(code))
+ for code in langs]
try:
selected = langs.index(langpref)
except ValueError:
@@ -1079,7 +1079,7 @@ def membership_options(mlist, subcat, cgidata, doc, form):
def mass_subscribe(mlist, container):
# MASS SUBSCRIBE
- GREY = mm_cfg.WEB_ADMINITEM_COLOR
+ GREY = config.WEB_ADMINITEM_COLOR
table = Table(width='90%')
table.AddRow([
Label(_('Subscribe these users now or invite them?')),
@@ -1129,7 +1129,7 @@ def mass_subscribe(mlist, container):
def mass_remove(mlist, container):
# MASS UNSUBSCRIBE
- GREY = mm_cfg.WEB_ADMINITEM_COLOR
+ GREY = config.WEB_ADMINITEM_COLOR
table = Table(width='90%')
table.AddRow([
Label(_('Send unsubscription acknowledgement to the user?')),
@@ -1164,7 +1164,7 @@ def password_inputs(mlist):
table = Table(cellspacing=3, cellpadding=4)
table.AddRow([Center(Header(2, _('Change list ownership passwords')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
table.AddRow([_("""\
The <em>list administrators</em> are the people who have ultimate control over
all parameters of this mailing list. They are able to change any list
@@ -1183,14 +1183,14 @@ and also provide the email addresses of the list moderators in the
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2)
# Set up the admin password table on the left
atable = Table(border=0, cellspacing=3, cellpadding=4,
- bgcolor=mm_cfg.WEB_ADMINPW_COLOR)
+ bgcolor=config.WEB_ADMINPW_COLOR)
atable.AddRow([Label(_('Enter new administrator password:')),
PasswordBox('newpw', size=20)])
atable.AddRow([Label(_('Confirm administrator password:')),
PasswordBox('confirmpw', size=20)])
# Set up the moderator password table on the right
mtable = Table(border=0, cellspacing=3, cellpadding=4,
- bgcolor=mm_cfg.WEB_ADMINPW_COLOR)
+ bgcolor=config.WEB_ADMINPW_COLOR)
mtable.AddRow([Label(_('Enter new moderator password:')),
PasswordBox('newmodpw', size=20)])
mtable.AddRow([Label(_('Confirm moderator password:')),
@@ -1235,7 +1235,7 @@ def change_options(mlist, category, subcat, cgidata, doc):
if new == confirm:
mlist.password = passwords.make_secret(new, config.PASSWORD_SCHEME)
# Set new cookie
- print mlist.MakeCookie(mm_cfg.AuthListAdmin)
+ print mlist.MakeCookie(config.AuthListAdmin)
else:
doc.addError(_('Administrator passwords did not match'))
# Give the individual gui item a chance to process the form data
@@ -1363,7 +1363,7 @@ def change_options(mlist, category, subcat, cgidata, doc):
doc.addError(_('Bad moderation flag value'))
else:
for member in mlist.getMembers():
- mlist.setMemberOption(member, mm_cfg.Moderate, val)
+ mlist.setMemberOption(member, config.Moderate, val)
# do the user options for members category
if cgidata.has_key('setmemberopts_btn') and cgidata.has_key('user'):
user = cgidata['user']
@@ -1389,7 +1389,7 @@ def change_options(mlist, category, subcat, cgidata, doc):
continue
value = cgidata.has_key('%s_digest' % user)
try:
- mlist.setMemberOption(user, mm_cfg.Digests, value)
+ mlist.setMemberOption(user, config.Digests, value)
except (Errors.AlreadyReceivingDigests,
Errors.AlreadyReceivingRegularDeliveries,
Errors.CantDigestError,
@@ -1403,11 +1403,13 @@ def change_options(mlist, category, subcat, cgidata, doc):
newlang = cgidata.getvalue(user+'_language')
oldlang = mlist.getMemberLanguage(user)
- if Utils.IsLanguage(newlang) and newlang <> oldlang:
+ if (newlang not in config.languages.enabled_codes
+ and newlang <> oldlang):
+ # Then
mlist.setMemberLanguage(user, newlang)
moderate = not not cgidata.getvalue(user+'_mod')
- mlist.setMemberOption(user, mm_cfg.Moderate, moderate)
+ mlist.setMemberOption(user, config.Moderate, moderate)
# Set the `nomail' flag, but only if the user isn't already
# disabled (otherwise we might change BYUSER into BYADMIN).
@@ -1417,7 +1419,7 @@ def change_options(mlist, category, subcat, cgidata, doc):
else:
mlist.setDeliveryStatus(user, MemberAdaptor.ENABLED)
for opt in ('hide', 'ack', 'notmetoo', 'nodupes', 'plain'):
- opt_code = mm_cfg.OPTINFO[opt]
+ opt_code = config.OPTINFO[opt]
if cgidata.has_key('%s_%s' % (user, opt)):
mlist.setMemberOption(user, opt_code, 1)
else:
diff --git a/Mailman/Cgi/confirm.py b/Mailman/Cgi/confirm.py
index d2bc3b0aa..121d775ed 100644
--- a/Mailman/Cgi/confirm.py
+++ b/Mailman/Cgi/confirm.py
@@ -286,7 +286,7 @@ def subscription_prompt(mlist, doc, cookie, userdesc):
RadioButtonArray('digests', (_('No'), _('Yes')),
checked=digest, values=(0, 1))])
langs = mlist.language_codes
- values = [_(Utils.GetLanguageDescr(l)) for l in langs]
+ values = [_(config.languages.get_description(code)) for code in langs]
try:
selected = langs.index(lang)
except ValueError:
@@ -332,7 +332,7 @@ def subscription_confirm(mlist, doc, cookie, cgidata):
# Some pending values may be overridden in the form. email of
# course is hardcoded. ;)
lang = cgidata.getvalue('language')
- if not Utils.IsLanguage(lang):
+ if lang not in config.languages.enabled_codes:
lang = mlist.preferred_language
i18n.set_language(lang)
doc.set_language(lang)
diff --git a/Mailman/Cgi/create.py b/Mailman/Cgi/create.py
index 0ca51bd65..a25f240ed 100644
--- a/Mailman/Cgi/create.py
+++ b/Mailman/Cgi/create.py
@@ -361,13 +361,15 @@ def request_creation(doc, cgidata=dummy, errmsg=None):
# invocations.
checked = [0] * len(langs)
checked[langi] = 1
- deflang = _(Utils.GetLanguageDescr(config.DEFAULT_SERVER_LANGUAGE))
+ deflang = _(
+ config.languages.get_description(config.DEFAULT_SERVER_LANGUAGE))
ftable.AddRow([Label(_(
"""Initial list of supported languages. <p>Note that if you do not
select at least one initial language, the list will use the server
default language of $deflang""")),
CheckBoxArray('langs',
- [_(Utils.GetLanguageDescr(L)) for L in langs],
+ [_(config.languges.get_description(code))
+ for code in langs],
checked=checked,
values=langs)])
ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 0, bgcolor=GREY)
diff --git a/Mailman/Cgi/listinfo.py b/Mailman/Cgi/listinfo.py
index 13689b767..9861e2496 100644
--- a/Mailman/Cgi/listinfo.py
+++ b/Mailman/Cgi/listinfo.py
@@ -24,15 +24,15 @@ import cgi
import logging
from Mailman import Errors
-from Mailman import i18n
from Mailman import MailList
-from Mailman import mm_cfg
from Mailman import Utils
+from Mailman import i18n
+from Mailman.configuration import config
from Mailman.htmlformat import *
# Set up i18n
_ = i18n._
-i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+i18n.set_language(config.DEFAULT_SERVER_LANGUAGE)
log = logging.getLogger('mailman.error')
@@ -57,7 +57,7 @@ def main():
# See if the user want to see this page in other language
cgidata = cgi.FieldStorage()
language = cgidata.getvalue('language')
- if not Utils.IsLanguage(language):
+ if language not in config.languages.enabled_codes:
language = mlist.preferred_language
i18n.set_language(language)
list_listinfo(mlist, language)
@@ -70,7 +70,7 @@ def listinfo_overview(msg=''):
# Set up the document and assign it the correct language. The only one we
# know about at the moment is the server's default.
doc = Document()
- doc.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ doc.set_language(config.DEFAULT_SERVER_LANGUAGE)
legend = _("%(hostname)s Mailing Lists")
doc.SetTitle(legend)
@@ -78,7 +78,7 @@ def listinfo_overview(msg=''):
table = Table(border=0, width="100%")
table.AddRow([Center(Header(2, legend))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
# Skip any mailing lists that isn't advertised.
advertised = []
@@ -98,7 +98,7 @@ def listinfo_overview(msg=''):
greeting = FontAttr(_('Welcome!'), size='+2')
welcome = [greeting]
- mailmanlink = Link(mm_cfg.MAILMAN_URL, _('Mailman')).Format()
+ mailmanlink = Link(config.MAILMAN_URL, _('Mailman')).Format()
if not advertised:
welcome.extend(
_('''<p>There currently are no publicly-advertised
@@ -138,9 +138,9 @@ def listinfo_overview(msg=''):
table.AddRow(
[Link(url, Bold(real_name)),
description or Italic(_('[no description available]'))])
- if highlight and mm_cfg.WEB_HIGHLIGHT_COLOR:
+ if highlight and config.WEB_HIGHLIGHT_COLOR:
table.AddRowInfo(table.GetCurrentRowIndex(),
- bgcolor=mm_cfg.WEB_HIGHLIGHT_COLOR)
+ bgcolor=config.WEB_HIGHLIGHT_COLOR)
highlight = not highlight
doc.AddItem(table)
diff --git a/Mailman/Cgi/options.py b/Mailman/Cgi/options.py
index 29f05cf7b..faa813489 100644
--- a/Mailman/Cgi/options.py
+++ b/Mailman/Cgi/options.py
@@ -28,8 +28,8 @@ from Mailman import MailList
from Mailman import MemberAdaptor
from Mailman import Utils
from Mailman import i18n
-from Mailman import mm_cfg
from Mailman import passwords
+from Mailman.configuration import config
from Mailman.htmlformat import *
@@ -39,7 +39,7 @@ SETLANGUAGE = -1
# Set up i18n
_ = i18n._
-i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+i18n.set_language(config.DEFAULT_SERVER_LANGUAGE)
log = logging.getLogger('mailman.error')
mlog = logging.getLogger('mailman.mischief')
@@ -48,7 +48,7 @@ mlog = logging.getLogger('mailman.mischief')
def main():
doc = Document()
- doc.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ doc.set_language(config.DEFAULT_SERVER_LANGUAGE)
parts = Utils.GetPathPieces()
lenparts = parts and len(parts)
@@ -88,7 +88,7 @@ def main():
# preference to view the page in, so we should honor that here. If that's
# not available, use the list's default language.
language = cgidata.getvalue('language')
- if not Utils.IsLanguage(language):
+ if language not in config.languages.enabled_codes:
language = mlist.preferred_language
i18n.set_language(language)
doc.set_language(language)
@@ -138,7 +138,7 @@ def main():
# user's stored preferred language, overridden by any form settings for
# their new language preference.
userlang = cgidata.getvalue('language')
- if not Utils.IsLanguage(userlang):
+ if userlang not in config.languages.enabled_codes:
userlang = mlist.getMemberLanguage(user)
doc.set_language(userlang)
i18n.set_language(userlang)
@@ -222,18 +222,18 @@ def main():
# or the site admin, because they are the only ones who are allowed to
# change things globally. Specifically, the list admin may not change
# values globally.
- if mm_cfg.ALLOW_SITE_ADMIN_COOKIES:
- user_or_siteadmin_context = (mm_cfg.AuthUser, mm_cfg.AuthSiteAdmin)
+ if config.ALLOW_SITE_ADMIN_COOKIES:
+ user_or_siteadmin_context = (config.AuthUser, config.AuthSiteAdmin)
else:
# Site and list admins are treated equal so that list admin can pass
# site admin test. :-(
- user_or_siteadmin_context = (mm_cfg.AuthUser,)
+ user_or_siteadmin_context = (config.AuthUser,)
is_user_or_siteadmin = mlist.WebAuthenticate(
user_or_siteadmin_context, password, user)
# Authenticate, possibly using the password supplied in the login page
if not is_user_or_siteadmin and \
- not mlist.WebAuthenticate((mm_cfg.AuthListAdmin,
- mm_cfg.AuthSiteAdmin),
+ not mlist.WebAuthenticate((config.AuthListAdmin,
+ config.AuthSiteAdmin),
password, user):
# Not authenticated, so throw up the login page again. If they tried
# to authenticate via cgi (instead of cookie), then print an error
@@ -254,7 +254,7 @@ def main():
# locked.
if cgidata.has_key('logout'):
- print mlist.ZapCookie(mm_cfg.AuthUser, user)
+ print mlist.ZapCookie(config.AuthUser, user)
loginpage(mlist, doc, user, language)
print doc.Format()
return
@@ -440,7 +440,7 @@ address. Upon confirmation, any other mailing list containing the address
change_password(gmlist, user, pw)
# Regenerate the cookie so a re-authorization isn't necessary
- print mlist.MakeCookie(mm_cfg.AuthUser, user)
+ print mlist.MakeCookie(config.AuthUser, user)
options_page(mlist, doc, user, cpuser, userlang,
_('Password successfully changed.'))
print doc.Format()
@@ -501,15 +501,15 @@ address. Upon confirmation, any other mailing list containing the address
newvals = []
# First figure out which options have changed. The item names come
# from FormatOptionButton() in HTMLFormatter.py
- for item, flag in (('digest', mm_cfg.Digests),
- ('mime', mm_cfg.DisableMime),
- ('dontreceive', mm_cfg.DontReceiveOwnPosts),
- ('ackposts', mm_cfg.AcknowledgePosts),
- ('disablemail', mm_cfg.DisableDelivery),
- ('conceal', mm_cfg.ConcealSubscription),
- ('remind', mm_cfg.SuppressPasswordReminder),
- ('rcvtopic', mm_cfg.ReceiveNonmatchingTopics),
- ('nodupes', mm_cfg.DontReceiveDuplicates),
+ for item, flag in (('digest', config.Digests),
+ ('mime', config.DisableMime),
+ ('dontreceive', config.DontReceiveOwnPosts),
+ ('ackposts', config.AcknowledgePosts),
+ ('disablemail', config.DisableDelivery),
+ ('conceal', config.ConcealSubscription),
+ ('remind', config.SuppressPasswordReminder),
+ ('rcvtopic', config.ReceiveNonmatchingTopics),
+ ('nodupes', config.DontReceiveDuplicates),
):
try:
newval = int(cgidata.getvalue(item))
@@ -521,7 +521,7 @@ address. Upon confirmation, any other mailing list containing the address
# flags.
if newval is None:
continue
- elif flag == mm_cfg.DisableDelivery:
+ elif flag == config.DisableDelivery:
status = mlist.getDeliveryStatus(user)
# Here, newval == 0 means enable, newval == 1 means disable
if not newval and status <> MemberAdaptor.ENABLED:
@@ -533,7 +533,7 @@ address. Upon confirmation, any other mailing list containing the address
elif newval == mlist.getMemberOption(user, flag):
continue
# Should we warn about one more digest?
- if flag == mm_cfg.Digests and \
+ if flag == config.Digests and \
newval == 0 and mlist.getMemberOption(user, flag):
digestwarn = 1
@@ -573,7 +573,7 @@ address. Upon confirmation, any other mailing list containing the address
if flag == SETLANGUAGE:
mlist.setMemberLanguage(user, newval)
# Handle delivery status separately
- elif flag == mm_cfg.DisableDelivery:
+ elif flag == config.DisableDelivery:
mlist.setDeliveryStatus(user, newval)
else:
try:
@@ -605,25 +605,25 @@ address. Upon confirmation, any other mailing list containing the address
# Yes, this is inefficient, but the list is so small it shouldn't
# make much of a difference.
for flag, newval in newvals:
- if flag == mm_cfg.DisableDelivery:
+ if flag == config.DisableDelivery:
globalopts.enable = newval
break
if cgidata.getvalue('remind-globally'):
for flag, newval in newvals:
- if flag == mm_cfg.SuppressPasswordReminder:
+ if flag == config.SuppressPasswordReminder:
globalopts.remind = newval
break
if cgidata.getvalue('nodupes-globally'):
for flag, newval in newvals:
- if flag == mm_cfg.DontReceiveDuplicates:
+ if flag == config.DontReceiveDuplicates:
globalopts.nodupes = newval
break
if cgidata.getvalue('mime-globally'):
for flag, newval in newvals:
- if flag == mm_cfg.DisableMime:
+ if flag == config.DisableMime:
globalopts.mime = newval
break
@@ -687,40 +687,40 @@ def options_page(mlist, doc, user, cpuser, userlang, message=''):
replacements = mlist.GetStandardReplacements(userlang)
replacements['<mm-results>'] = Bold(FontSize('+1', message)).Format()
replacements['<mm-digest-radio-button>'] = mlist.FormatOptionButton(
- mm_cfg.Digests, 1, user)
+ config.Digests, 1, user)
replacements['<mm-undigest-radio-button>'] = mlist.FormatOptionButton(
- mm_cfg.Digests, 0, user)
+ config.Digests, 0, user)
replacements['<mm-plain-digests-button>'] = mlist.FormatOptionButton(
- mm_cfg.DisableMime, 1, user)
+ config.DisableMime, 1, user)
replacements['<mm-mime-digests-button>'] = mlist.FormatOptionButton(
- mm_cfg.DisableMime, 0, user)
+ config.DisableMime, 0, user)
replacements['<mm-global-mime-button>'] = (
CheckBox('mime-globally', 1, checked=0).Format())
replacements['<mm-delivery-enable-button>'] = mlist.FormatOptionButton(
- mm_cfg.DisableDelivery, 0, user)
+ config.DisableDelivery, 0, user)
replacements['<mm-delivery-disable-button>'] = mlist.FormatOptionButton(
- mm_cfg.DisableDelivery, 1, user)
+ config.DisableDelivery, 1, user)
replacements['<mm-disabled-notice>'] = mlist.FormatDisabledNotice(user)
replacements['<mm-dont-ack-posts-button>'] = mlist.FormatOptionButton(
- mm_cfg.AcknowledgePosts, 0, user)
+ config.AcknowledgePosts, 0, user)
replacements['<mm-ack-posts-button>'] = mlist.FormatOptionButton(
- mm_cfg.AcknowledgePosts, 1, user)
+ config.AcknowledgePosts, 1, user)
replacements['<mm-receive-own-mail-button>'] = mlist.FormatOptionButton(
- mm_cfg.DontReceiveOwnPosts, 0, user)
+ config.DontReceiveOwnPosts, 0, user)
replacements['<mm-dont-receive-own-mail-button>'] = (
- mlist.FormatOptionButton(mm_cfg.DontReceiveOwnPosts, 1, user))
+ mlist.FormatOptionButton(config.DontReceiveOwnPosts, 1, user))
replacements['<mm-dont-get-password-reminder-button>'] = (
- mlist.FormatOptionButton(mm_cfg.SuppressPasswordReminder, 1, user))
+ mlist.FormatOptionButton(config.SuppressPasswordReminder, 1, user))
replacements['<mm-get-password-reminder-button>'] = (
- mlist.FormatOptionButton(mm_cfg.SuppressPasswordReminder, 0, user))
+ mlist.FormatOptionButton(config.SuppressPasswordReminder, 0, user))
replacements['<mm-public-subscription-button>'] = (
- mlist.FormatOptionButton(mm_cfg.ConcealSubscription, 0, user))
+ mlist.FormatOptionButton(config.ConcealSubscription, 0, user))
replacements['<mm-hide-subscription-button>'] = mlist.FormatOptionButton(
- mm_cfg.ConcealSubscription, 1, user)
+ config.ConcealSubscription, 1, user)
replacements['<mm-dont-receive-duplicates-button>'] = (
- mlist.FormatOptionButton(mm_cfg.DontReceiveDuplicates, 1, user))
+ mlist.FormatOptionButton(config.DontReceiveDuplicates, 1, user))
replacements['<mm-receive-duplicates-button>'] = (
- mlist.FormatOptionButton(mm_cfg.DontReceiveDuplicates, 0, user))
+ mlist.FormatOptionButton(config.DontReceiveDuplicates, 0, user))
replacements['<mm-unsubscribe-button>'] = (
mlist.FormatButton('unsub', _('Unsubscribe')) + '<br>' +
CheckBox('unsubconfirm', 1, checked=0).Format() +
@@ -753,7 +753,7 @@ def options_page(mlist, doc, user, cpuser, userlang, message=''):
replacements['<mm-global-nodupes-button>'] = (
CheckBox('nodupes-globally', 1, checked=0).Format())
- days = int(mm_cfg.PENDING_REQUEST_LIFE / mm_cfg.days(1))
+ days = int(config.PENDING_REQUEST_LIFE / config.days(1))
if days > 1:
units = _('days')
else:
@@ -793,9 +793,9 @@ def options_page(mlist, doc, user, cpuser, userlang, message=''):
topicsfield = _('<em>No topics defined</em>')
replacements['<mm-topics>'] = topicsfield
replacements['<mm-suppress-nonmatching-topics>'] = (
- mlist.FormatOptionButton(mm_cfg.ReceiveNonmatchingTopics, 0, user))
+ mlist.FormatOptionButton(config.ReceiveNonmatchingTopics, 0, user))
replacements['<mm-receive-nonmatching-topics>'] = (
- mlist.FormatOptionButton(mm_cfg.ReceiveNonmatchingTopics, 1, user))
+ mlist.FormatOptionButton(config.ReceiveNonmatchingTopics, 1, user))
if cpuser is not None:
replacements['<mm-case-preserved-user>'] = _('''
@@ -827,7 +827,7 @@ def loginpage(mlist, doc, user, lang):
# buttons.
table.AddRow([Center(Header(2, title))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
if len(mlist.language_codes) > 1:
langform = Form(actionurl)
langform.AddItem(SubmitButton('displang-button',
@@ -867,7 +867,7 @@ def loginpage(mlist, doc, user, lang):
# Unsubscribe section
table.AddRow([Center(Header(2, _('Unsubscribe')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
table.AddRow([_("""By clicking on the <em>Unsubscribe</em> button, a
confirmation message will be emailed to you. This message will have a
@@ -879,7 +879,7 @@ def loginpage(mlist, doc, user, lang):
# Password reminder section
table.AddRow([Center(Header(2, _('Password reminder')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
table.AddRow([_("""By clicking on the <em>Remind</em> button, your
password will be emailed to you.""")])
@@ -948,15 +948,15 @@ def global_options(mlist, user, globalopts):
mlist.setDeliveryStatus(user, globalopts.enable)
if globalopts.remind is not None:
- mlist.setMemberOption(user, mm_cfg.SuppressPasswordReminder,
+ mlist.setMemberOption(user, config.SuppressPasswordReminder,
globalopts.remind)
if globalopts.nodupes is not None:
- mlist.setMemberOption(user, mm_cfg.DontReceiveDuplicates,
+ mlist.setMemberOption(user, config.DontReceiveDuplicates,
globalopts.nodupes)
if globalopts.mime is not None:
- mlist.setMemberOption(user, mm_cfg.DisableMime, globalopts.mime)
+ mlist.setMemberOption(user, config.DisableMime, globalopts.mime)
mlist.Save()
finally:
@@ -986,7 +986,7 @@ def topic_details(mlist, doc, user, cpuser, userlang, varhelp):
table = Table(border=3, width='100%')
table.AddRow([Center(Bold(_('Topic filter details')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0, colspan=2,
- bgcolor=mm_cfg.WEB_SUBHEADER_COLOR)
+ bgcolor=config.WEB_SUBHEADER_COLOR)
table.AddRow([Bold(Label(_('Name:'))),
Utils.websafe(name)])
table.AddRow([Bold(Label(_('Pattern (as regexp):'))),
@@ -996,7 +996,7 @@ def topic_details(mlist, doc, user, cpuser, userlang, varhelp):
Utils.websafe(description)])
# Make colors look nice
for row in range(1, 4):
- table.AddCellInfo(row, 0, bgcolor=mm_cfg.WEB_ADMINITEM_COLOR)
+ table.AddCellInfo(row, 0, bgcolor=config.WEB_ADMINITEM_COLOR)
options_page(mlist, doc, user, cpuser, userlang, table.Format())
print doc.Format()
diff --git a/Mailman/Cgi/rmlist.py b/Mailman/Cgi/rmlist.py
index e7dfaa386..534d06131 100644
--- a/Mailman/Cgi/rmlist.py
+++ b/Mailman/Cgi/rmlist.py
@@ -25,15 +25,15 @@ import shutil
import logging
from Mailman import Errors
-from Mailman import i18n
from Mailman import MailList
-from Mailman import mm_cfg
from Mailman import Utils
+from Mailman import i18n
+from Mailman.configuration import config
from Mailman.htmlformat import *
# Set up i18n
_ = i18n._
-i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+i18n.set_language(config.DEFAULT_SERVER_LANGUAGE)
log = logging.getLogger('mailman.error')
mlog = logging.getLogger('mailman.mischief')
@@ -42,7 +42,7 @@ mlog = logging.getLogger('mailman.mischief')
def main():
doc = Document()
- doc.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ doc.set_language(config.DEFAULT_SERVER_LANGUAGE)
cgidata = cgi.FieldStorage()
parts = Utils.GetPathPieces()
@@ -81,7 +81,7 @@ def main():
doc.set_language(mlist.preferred_language)
# Be sure the list owners are not sneaking around!
- if not mm_cfg.OWNERS_CAN_DELETE_THEIR_OWN_LISTS:
+ if not config.OWNERS_CAN_DELETE_THEIR_OWN_LISTS:
title = _("You're being a sneaky list owner!")
doc.SetTitle(title)
doc.AddItem(
@@ -114,18 +114,18 @@ def process_request(doc, cgidata, mlist):
# the list-admin, or the site-admin. Don't use WebAuthenticate here
# because we want to be sure the actual typed password is valid, not some
# password sitting in a cookie.
- if mlist.Authenticate((mm_cfg.AuthCreator,
- mm_cfg.AuthListAdmin,
- mm_cfg.AuthSiteAdmin),
- password) == mm_cfg.UnAuthorized:
+ if mlist.Authenticate((config.AuthCreator,
+ config.AuthListAdmin,
+ config.AuthSiteAdmin),
+ password) == config.UnAuthorized:
request_deletion(
doc, mlist,
_('You are not authorized to delete this mailing list'))
return
# Do the MTA-specific list deletion tasks
- if mm_cfg.MTA:
- modname = 'Mailman.MTA.' + mm_cfg.MTA
+ if config.MTA:
+ modname = 'Mailman.MTA.' + config.MTA
__import__(modname)
sys.modules[modname].remove(mlist, cgi=1)
@@ -141,7 +141,7 @@ def process_request(doc, cgidata, mlist):
problems = 0
listname = mlist.internal_name()
for dirtmpl in REMOVABLES:
- dir = os.path.join(mm_cfg.VAR_PREFIX, dirtmpl % listname)
+ dir = os.path.join(config.VAR_DIR, dirtmpl % listname)
if os.path.islink(dir):
try:
os.unlink(dir)
@@ -163,7 +163,7 @@ def process_request(doc, cgidata, mlist):
table = Table(border=0, width='100%')
table.AddRow([Center(Bold(FontAttr(title, size='+1')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
if not problems:
table.AddRow([_('''You have successfully deleted the mailing list
<b>%(listname)s</b>.''')])
@@ -192,7 +192,7 @@ def request_deletion(doc, mlist, errmsg=None):
table = Table(border=0, width='100%')
table.AddRow([Center(Bold(FontAttr(title, size='+1')))])
table.AddCellInfo(table.GetCurrentRowIndex(), 0,
- bgcolor=mm_cfg.WEB_HEADER_COLOR)
+ bgcolor=config.WEB_HEADER_COLOR)
# Add any error message
if errmsg:
@@ -216,7 +216,7 @@ def request_deletion(doc, mlist, errmsg=None):
<p>For your safety, you will be asked to reconfirm the list password.
""")])
- GREY = mm_cfg.WEB_ADMINITEM_COLOR
+ GREY = config.WEB_ADMINITEM_COLOR
form = Form(mlist.GetScriptURL('rmlist'))
ftable = Table(border=0, cols='2', width='100%',
cellspacing=3, cellpadding=4)
diff --git a/Mailman/Cgi/roster.py b/Mailman/Cgi/roster.py
index 41febbab0..4eb3174cd 100644
--- a/Mailman/Cgi/roster.py
+++ b/Mailman/Cgi/roster.py
@@ -30,15 +30,15 @@ import urllib
import logging
from Mailman import Errors
-from Mailman import i18n
from Mailman import MailList
-from Mailman import mm_cfg
from Mailman import Utils
+from Mailman import i18n
+from Mailman.configuration import config
from Mailman.htmlformat import *
# Set up i18n
_ = i18n._
-i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+i18n.set_language(config.DEFAULT_SERVER_LANGUAGE)
log = logging.getLogger('mailman.error')
@@ -64,7 +64,7 @@ def main():
# messages in form should go in selected language (if any...)
lang = cgidata.getvalue('language')
- if not Utils.IsLanguage(lang):
+ if lang not in config.languages.enabled_codes:
lang = mlist.preferred_language
i18n.set_language(lang)
@@ -80,17 +80,17 @@ def main():
# Members only
addr = cgidata.getvalue('roster-email', '')
password = cgidata.getvalue('roster-pw', '')
- ok = mlist.WebAuthenticate((mm_cfg.AuthUser,
- mm_cfg.AuthListModerator,
- mm_cfg.AuthListAdmin,
- mm_cfg.AuthSiteAdmin),
+ ok = mlist.WebAuthenticate((config.AuthUser,
+ config.AuthListModerator,
+ config.AuthListAdmin,
+ config.AuthSiteAdmin),
password, addr)
else:
# Admin only, so we can ignore the address field
password = cgidata.getvalue('roster-pw', '')
- ok = mlist.WebAuthenticate((mm_cfg.AuthListModerator,
- mm_cfg.AuthListAdmin,
- mm_cfg.AuthSiteAdmin),
+ ok = mlist.WebAuthenticate((config.AuthListModerator,
+ config.AuthListAdmin,
+ config.AuthSiteAdmin),
password)
if not ok:
realname = mlist.real_name
@@ -117,7 +117,7 @@ def main():
def error_page(errmsg):
doc = Document()
- doc.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ doc.set_language(config.DEFAULT_SERVER_LANGUAGE)
error_page_doc(doc, errmsg)
print doc.Format()
diff --git a/Mailman/Cgi/subscribe.py b/Mailman/Cgi/subscribe.py
index 489a26e16..512cd3195 100644
--- a/Mailman/Cgi/subscribe.py
+++ b/Mailman/Cgi/subscribe.py
@@ -23,20 +23,20 @@ import sys
import logging
from Mailman import Errors
-from Mailman import i18n
from Mailman import MailList
from Mailman import Message
-from Mailman import mm_cfg
from Mailman import Utils
-from Mailman.htmlformat import *
+from Mailman import i18n
from Mailman.UserDesc import UserDesc
+from Mailman.configuration import config
+from Mailman.htmlformat import *
SLASH = '/'
ERRORSEP = '\n\n<p>'
# Set up i18n
_ = i18n._
-i18n.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+i18n.set_language(config.DEFAULT_SERVER_LANGUAGE)
log = logging.getLogger('mailman.error')
mlog = logging.getLogger('mailman.mischief')
@@ -45,7 +45,7 @@ mlog = logging.getLogger('mailman.mischief')
def main():
doc = Document()
- doc.set_language(mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ doc.set_language(config.DEFAULT_SERVER_LANGUAGE)
parts = Utils.GetPathPieces()
if not parts:
@@ -70,7 +70,7 @@ def main():
# for the results. If not, use the list's preferred language.
cgidata = cgi.FieldStorage()
language = cgidata.getvalue('language')
- if not Utils.IsLanguage(language):
+ if language not in config.languages.enabled_codes:
language = mlist.preferred_language
i18n.set_language(language)
doc.set_language(language)
diff --git a/Mailman/Commands/Makefile.in b/Mailman/Commands/Makefile.in
deleted file mode 100644
index 4045cf9cd..000000000
--- a/Mailman/Commands/Makefile.in
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (C) 2002-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Commands
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/Commands/cmd_confirm.py b/Mailman/Commands/cmd_confirm.py
index 99d1fab39..49aa85267 100644
--- a/Mailman/Commands/cmd_confirm.py
+++ b/Mailman/Commands/cmd_confirm.py
@@ -21,9 +21,9 @@
supplied by a mailback confirmation notice.
"""
-from Mailman import mm_cfg
from Mailman import Errors
from Mailman import Pending
+from Mailman.configuration import config
from Mailman.i18n import _
STOP = 1
@@ -46,7 +46,7 @@ def process(res, args):
results = mlist.ProcessConfirmation(cookie, res.msg)
except Errors.MMBadConfirmation, e:
# Express in approximate days
- days = int(mm_cfg.PENDING_REQUEST_LIFE / mm_cfg.days(1) + 0.5)
+ days = int(config.PENDING_REQUEST_LIFE / config.days(1) + 0.5)
res.results.append(_("""\
Invalid confirmation string. Note that confirmation strings expire
approximately %(days)s days after the initial subscription request. If your
diff --git a/Mailman/Commands/cmd_help.py b/Mailman/Commands/cmd_help.py
index 33e908295..1afe25697 100644
--- a/Mailman/Commands/cmd_help.py
+++ b/Mailman/Commands/cmd_help.py
@@ -19,11 +19,11 @@
Print this help message.
"""
-import sys
import os
+import sys
-from Mailman import mm_cfg
from Mailman import Utils
+from Mailman.configuration import config
from Mailman.i18n import _
EMPTYSTRING = ''
@@ -81,7 +81,7 @@ def process(res, args):
helptext = Utils.maketext(
'help.txt',
{'listname' : mlist.real_name,
- 'version' : mm_cfg.VERSION,
+ 'version' : config.VERSION,
'listinfo_url': mlist.GetScriptURL('listinfo', absolute=1),
'requestaddr' : mlist.GetRequestEmail(),
'adminaddr' : mlist.GetOwnerEmail(),
diff --git a/Mailman/Commands/cmd_lists.py b/Mailman/Commands/cmd_lists.py
index 6d23d4745..f7c6365e3 100644
--- a/Mailman/Commands/cmd_lists.py
+++ b/Mailman/Commands/cmd_lists.py
@@ -20,7 +20,6 @@
See a list of the public mailing lists on this GNU Mailman server.
"""
-from Mailman import mm_cfg
from Mailman.MailList import MailList
from Mailman.configuration import config
from Mailman.i18n import _
diff --git a/Mailman/Commands/cmd_password.py b/Mailman/Commands/cmd_password.py
index 278dad3c0..ff9ae8762 100644
--- a/Mailman/Commands/cmd_password.py
+++ b/Mailman/Commands/cmd_password.py
@@ -28,7 +28,7 @@
from email.Utils import parseaddr
-from Mailman import mm_cfg
+from Mailman.configuration import config
from Mailman.i18n import _
STOP = 1
@@ -77,7 +77,7 @@ def process(res, args):
newpasswd = args[1]
realname, address = parseaddr(res.msg['from'])
if mlist.isMember(address):
- if mlist.Authenticate((mm_cfg.AuthUser, mm_cfg.AuthListAdmin),
+ if mlist.Authenticate((config.AuthUser, config.AuthListAdmin),
oldpasswd, address):
mlist.setMemberPassword(address, newpasswd)
res.results.append(_('Password successfully changed.'))
@@ -103,7 +103,7 @@ current password, then try again."""))
address = args[2][8:]
res.returnaddr = address
if mlist.isMember(address):
- if mlist.Authenticate((mm_cfg.AuthUser, mm_cfg.AuthListAdmin),
+ if mlist.Authenticate((config.AuthUser, config.AuthListAdmin),
oldpasswd, address):
mlist.setMemberPassword(address, newpasswd)
res.results.append(_('Password successfully changed.'))
diff --git a/Mailman/Commands/cmd_set.py b/Mailman/Commands/cmd_set.py
index 549628a76..dc53be243 100644
--- a/Mailman/Commands/cmd_set.py
+++ b/Mailman/Commands/cmd_set.py
@@ -12,14 +12,15 @@
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
from email.Utils import parseaddr, formatdate
-from Mailman import mm_cfg
from Mailman import Errors
from Mailman import MemberAdaptor
from Mailman import i18n
+from Mailman.configuration import config
def _(s): return s
@@ -149,13 +150,13 @@ class SetCommands:
_('You are not a member of the %(listname)s mailing list'))
return STOP
res.results.append(_('Your current option settings:'))
- opt = mlist.getMemberOption(address, mm_cfg.AcknowledgePosts)
+ opt = mlist.getMemberOption(address, config.AcknowledgePosts)
onoff = opt and _('on') or _('off')
res.results.append(_(' ack %(onoff)s'))
# Digests are a special ternary value
- digestsp = mlist.getMemberOption(address, mm_cfg.Digests)
+ digestsp = mlist.getMemberOption(address, config.Digests)
if digestsp:
- plainp = mlist.getMemberOption(address, mm_cfg.DisableMime)
+ plainp = mlist.getMemberOption(address, config.DisableMime)
if plainp:
res.results.append(_(' digest plain'))
else:
@@ -186,18 +187,18 @@ class SetCommands:
res.results.append(_(' %(status)s (%(how)s on %(date)s)'))
else:
res.results.append(' ' + status)
- opt = mlist.getMemberOption(address, mm_cfg.DontReceiveOwnPosts)
+ opt = mlist.getMemberOption(address, config.DontReceiveOwnPosts)
# sense is reversed
onoff = (not opt) and _('on') or _('off')
res.results.append(_(' myposts %(onoff)s'))
- opt = mlist.getMemberOption(address, mm_cfg.ConcealSubscription)
+ opt = mlist.getMemberOption(address, config.ConcealSubscription)
onoff = opt and _('on') or _('off')
res.results.append(_(' hide %(onoff)s'))
- opt = mlist.getMemberOption(address, mm_cfg.DontReceiveDuplicates)
+ opt = mlist.getMemberOption(address, config.DontReceiveDuplicates)
# sense is reversed
onoff = (not opt) and _('on') or _('off')
res.results.append(_(' duplicates %(onoff)s'))
- opt = mlist.getMemberOption(address, mm_cfg.SuppressPasswordReminder)
+ opt = mlist.getMemberOption(address, config.SuppressPasswordReminder)
# sense is reversed
onoff = (not opt) and _('on') or _('off')
res.results.append(_(' reminders %(onoff)s'))
@@ -218,8 +219,8 @@ class SetCommands:
res.results.append(
_('You are not a member of the %(listname)s mailing list'))
return STOP
- if not mlist.Authenticate((mm_cfg.AuthUser,
- mm_cfg.AuthListAdmin),
+ if not mlist.Authenticate((config.AuthUser,
+ config.AuthListAdmin),
password, address):
res.results.append(_('You did not give the correct password'))
return STOP
@@ -250,7 +251,7 @@ class SetCommands:
status = self._status(res, args[0])
if status < 0:
return STOP
- mlist.setMemberOption(self.__address, mm_cfg.AcknowledgePosts, status)
+ mlist.setMemberOption(self.__address, config.AcknowledgePosts, status)
res.results.append(_('ack option set'))
def set_digest(self, res, args):
@@ -264,21 +265,21 @@ class SetCommands:
arg = args[0].lower()
if arg == 'off':
try:
- mlist.setMemberOption(self.__address, mm_cfg.Digests, 0)
+ mlist.setMemberOption(self.__address, config.Digests, 0)
except Errors.AlreadyReceivingRegularDeliveries:
pass
elif arg == 'plain':
try:
- mlist.setMemberOption(self.__address, mm_cfg.Digests, 1)
+ mlist.setMemberOption(self.__address, config.Digests, 1)
except Errors.AlreadyReceivingDigests:
pass
- mlist.setMemberOption(self.__address, mm_cfg.DisableMime, 1)
+ mlist.setMemberOption(self.__address, config.DisableMime, 1)
elif arg == 'mime':
try:
- mlist.setMemberOption(self.__address, mm_cfg.Digests, 1)
+ mlist.setMemberOption(self.__address, config.Digests, 1)
except Errors.AlreadyReceivingDigests:
pass
- mlist.setMemberOption(self.__address, mm_cfg.DisableMime, 0)
+ mlist.setMemberOption(self.__address, config.DisableMime, 0)
else:
res.results.append(_('Bad argument: %(arg)s'))
self._usage(res)
@@ -311,7 +312,7 @@ class SetCommands:
if status < 0:
return STOP
# sense is reversed
- mlist.setMemberOption(self.__address, mm_cfg.DontReceiveOwnPosts,
+ mlist.setMemberOption(self.__address, config.DontReceiveOwnPosts,
not status)
res.results.append(_('myposts option set'))
@@ -322,7 +323,7 @@ class SetCommands:
status = self._status(res, args[0])
if status < 0:
return STOP
- mlist.setMemberOption(self.__address, mm_cfg.ConcealSubscription,
+ mlist.setMemberOption(self.__address, config.ConcealSubscription,
status)
res.results.append(_('hide option set'))
@@ -334,7 +335,7 @@ class SetCommands:
if status < 0:
return STOP
# sense is reversed
- mlist.setMemberOption(self.__address, mm_cfg.DontReceiveDuplicates,
+ mlist.setMemberOption(self.__address, config.DontReceiveDuplicates,
not status)
res.results.append(_('duplicates option set'))
@@ -346,7 +347,7 @@ class SetCommands:
if status < 0:
return STOP
# sense is reversed
- mlist.setMemberOption(self.__address, mm_cfg.SuppressPasswordReminder,
+ mlist.setMemberOption(self.__address, config.SuppressPasswordReminder,
not status)
res.results.append(_('reminder option set'))
diff --git a/Mailman/Commands/cmd_who.py b/Mailman/Commands/cmd_who.py
index 8470ef9d6..ecd1786d8 100644
--- a/Mailman/Commands/cmd_who.py
+++ b/Mailman/Commands/cmd_who.py
@@ -17,8 +17,8 @@
from email.Utils import parseaddr
-from Mailman import mm_cfg
from Mailman import i18n
+from Mailman.configuration import config
STOP = 1
@@ -79,8 +79,8 @@ def process(res, args):
# Public rosters
if args:
if len(args) == 1:
- if mlist.Authenticate((mm_cfg.AuthListModerator,
- mm_cfg.AuthListAdmin),
+ if mlist.Authenticate((config.AuthListModerator,
+ config.AuthListAdmin),
args[0]):
full = True
else:
@@ -102,15 +102,15 @@ def process(res, args):
usage(res)
return STOP
if mlist.isMember(address) and mlist.Authenticate(
- (mm_cfg.AuthUser,
- mm_cfg.AuthListModerator,
- mm_cfg.AuthListAdmin),
+ (config.AuthUser,
+ config.AuthListModerator,
+ config.AuthListAdmin),
password, address):
# Then
ok = True
if mlist.Authenticate(
- (mm_cfg.AuthListModerator,
- mm_cfg.AuthListAdmin),
+ (config.AuthListModerator,
+ config.AuthListAdmin),
password):
# Then
ok = full = True
@@ -119,8 +119,8 @@ def process(res, args):
if len(args) <> 1:
usage(res)
return STOP
- if mlist.Authenticate((mm_cfg.AuthListModerator,
- mm_cfg.AuthListAdmin),
+ if mlist.Authenticate((config.AuthListModerator,
+ config.AuthListAdmin),
args[0]):
ok = full = True
if not ok:
@@ -137,7 +137,7 @@ def process(res, args):
def addmembers(members):
for member in members:
if not full and mlist.getMemberOption(member,
- mm_cfg.ConcealSubscription):
+ config.ConcealSubscription):
continue
realname = mlist.getMemberName(member)
if realname:
diff --git a/Mailman/Defaults.py.in b/Mailman/Defaults.py
index 7c6242521..3c06b709a 100644
--- a/Mailman/Defaults.py.in
+++ b/Mailman/Defaults.py
@@ -101,6 +101,9 @@ HTML_TO_PLAIN_TEXT_COMMAND = '/usr/bin/lynx -dump %(filename)s'
# available schemes.
PASSWORD_SCHEME = 'ssha'
+# Default run-time directory.
+DEFAULT_VAR_DIRECTORY = '/var/mailman'
+
#####
@@ -200,6 +203,9 @@ WEB_ALINK_COLOR = '' # If true, forces ALINK=
WEB_VLINK_COLOR = '' # If true, forces VLINK=
WEB_HIGHLIGHT_COLOR = '#dddddd' # If true, alternating rows
# in listinfo & admin display
+# CGI file extension.
+CGIEXT = ''
+
#####
@@ -804,8 +810,8 @@ MAX_RESTARTS = 10
#####
# The default language for this server. Whenever we can't figure out the list
-# context or user context, we'll fall back to using this language. See
-# LC_DESCRIPTIONS below for legal values.
+# context or user context, we'll fall back to using this language. This code
+# must be in the list of available language codes.
DEFAULT_SERVER_LANGUAGE = 'en'
# When allowing only members to post to a mailing list, how is the sender of
@@ -1237,28 +1243,9 @@ PENDINGDB_LOCK_DEBUGGING = Off
#####
# Nothing below here is user configurable. Most of these values are in this
# file for internal system convenience. Don't change any of them or override
-# any of them in your mm_cfg.py file!
+# any of them in your mailman.cfg file!
#####
-# These directories are used to find various important files in the Mailman
-# installation. PREFIX and EXEC_PREFIX are set by configure and should point
-# to the installation directory of the Mailman package.
-PYTHON = '@PYTHON@'
-PREFIX = '@prefix@'
-EXEC_PREFIX = '@exec_prefix@'
-VAR_PREFIX = '@VAR_PREFIX@'
-
-# Work around a bogus autoconf 2.12 bug
-if EXEC_PREFIX == '${prefix}':
- EXEC_PREFIX = PREFIX
-
-# CGI extension, change using configure script
-CGIEXT = '@CGIEXT@'
-
-# Group id that group-owns the Mailman installation
-MAILMAN_USER = '@MAILMAN_USER@'
-MAILMAN_GROUP = '@MAILMAN_GROUP@'
-
# Enumeration for Mailman cgi widget types
Toggle = 1
Radio = 2
@@ -1376,8 +1363,7 @@ from Version import *
def _(s):
return s
-LANGUAGES = 'en ' + '@LANGUAGES@'
-LANGUAGE_DICT = {
+_DEFAULT_LANGUAGE_DATA = {
'ar': (_('Arabic'), 'utf-8'),
'ca': (_('Catalan'), 'iso-8859-1'),
'cs': (_('Czech'), 'iso-8859-2'),
@@ -1413,13 +1399,5 @@ LANGUAGE_DICT = {
'zh_TW': (_('Chinese (Taiwan)'), 'utf-8'),
}
-LC_DESCRIPTIONS = {}
-
-def add_language(code, description, charset):
- LC_DESCRIPTIONS[code] = (description, charset)
-
-for lang in LANGUAGES.split():
- if lang in LANGUAGE_DICT.keys():
- add_language(lang, LANGUAGE_DICT[lang][0], LANGUAGE_DICT[lang][1])
del _
diff --git a/Mailman/Deliverer.py b/Mailman/Deliverer.py
index 5682a4a22..e4ff15a58 100644
--- a/Mailman/Deliverer.py
+++ b/Mailman/Deliverer.py
@@ -23,12 +23,12 @@ import logging
from email.MIMEMessage import MIMEMessage
from email.MIMEText import MIMEText
-from Mailman import i18n
from Mailman import Errors
from Mailman import Message
-from Mailman import mm_cfg
from Mailman import Pending
from Mailman import Utils
+from Mailman import i18n
+from Mailman.configuration import config
_ = i18n._
@@ -75,7 +75,7 @@ your membership administrative address, %(addr)s.'''))
_('Welcome to the "%(realname)s" mailing list%(digmode)s'),
text, pluser)
msg['X-No-Archive'] = 'yes'
- msg.send(self, verp=mm_cfg.VERP_PERSONALIZED_DELIVERIES)
+ msg.send(self, verp=config.VERP_PERSONALIZED_DELIVERIES)
def SendUnsubscribeAck(self, addr, lang):
realname = self.real_name
@@ -83,7 +83,7 @@ your membership administrative address, %(addr)s.'''))
self.GetMemberAdminEmail(addr), self.GetBouncesEmail(),
_('You have been unsubscribed from the %(realname)s mailing list'),
Utils.wrap(self.goodbye_msg), lang)
- msg.send(self, verp=mm_cfg.VERP_PERSONALIZED_DELIVERIES)
+ msg.send(self, verp=config.VERP_PERSONALIZED_DELIVERIES)
def MailUserPassword(self, user):
listfullname = self.fqdn_listname
@@ -131,7 +131,7 @@ your membership administrative address, %(addr)s.'''))
msg = Message.UserNotification(recipient, adminaddr, subject, text,
lang)
msg['X-No-Archive'] = 'yes'
- msg.send(self, verp=mm_cfg.VERP_PERSONALIZED_DELIVERIES)
+ msg.send(self, verp=config.VERP_PERSONALIZED_DELIVERIES)
def ForwardMessage(self, msg, text=None, subject=None, tomoderators=True):
# Wrap the message as an attachment
@@ -206,7 +206,7 @@ is required.""")))
'bounces': self.internal_name() + '-bounces',
'token': token,
}
- probeaddr = '%s@%s' % ((mm_cfg.VERP_PROBE_FORMAT % probedict),
+ probeaddr = '%s@%s' % ((config.VERP_PROBE_FORMAT % probedict),
self.host_name)
# Calculate the Subject header, in the member's preferred language
ulang = self.getMemberLanguage(member)
diff --git a/Mailman/Gui/Archive.py b/Mailman/Gui/Archive.py
index 19ab7916b..6d90484ae 100644
--- a/Mailman/Gui/Archive.py
+++ b/Mailman/Gui/Archive.py
@@ -15,9 +15,9 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
-from Mailman import mm_cfg
-from Mailman.i18n import _
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
@@ -31,13 +31,13 @@ class Archive(GUIBase):
return [
_("List traffic archival policies."),
- ('archive', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('archive', config.Toggle, (_('No'), _('Yes')), 0,
_('Archive messages?')),
- ('archive_private', mm_cfg.Radio, (_('public'), _('private')), 0,
+ ('archive_private', config.Radio, (_('public'), _('private')), 0,
_('Is archive file source for public or private archival?')),
- ('archive_volume_frequency', mm_cfg.Radio,
+ ('archive_volume_frequency', config.Radio,
(_('Yearly'), _('Monthly'), _('Quarterly'),
_('Weekly'), _('Daily')),
0,
diff --git a/Mailman/Gui/Autoresponse.py b/Mailman/Gui/Autoresponse.py
index e5eca2b76..d35878f6b 100644
--- a/Mailman/Gui/Autoresponse.py
+++ b/Mailman/Gui/Autoresponse.py
@@ -17,10 +17,10 @@
"""Administrative GUI for the autoresponder."""
-from Mailman import mm_cfg
from Mailman import Utils
-from Mailman.i18n import _
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
# These are the allowable string substitution variables
ALLOWEDS = ('listname', 'listurl', 'requestemail', 'adminemail', 'owneremail')
@@ -34,7 +34,7 @@ class Autoresponse(GUIBase):
def GetConfigInfo(self, mlist, category, subcat=None):
if category <> 'autoreply':
return None
- WIDTH = mm_cfg.TEXTFIELDWIDTH
+ WIDTH = config.TEXTFIELDWIDTH
return [
_("""\
@@ -52,34 +52,34 @@ the following key/value substitutions:
<p>For each text field, you can either enter the text directly into the text
box, or you can specify a file on your local system to upload as the text."""),
- ('autorespond_postings', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('autorespond_postings', config.Toggle, (_('No'), _('Yes')), 0,
_('''Should Mailman send an auto-response to mailing list
posters?''')),
- ('autoresponse_postings_text', mm_cfg.FileUpload,
+ ('autoresponse_postings_text', config.FileUpload,
(6, WIDTH), 0,
_('Auto-response text to send to mailing list posters.')),
- ('autorespond_admin', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('autorespond_admin', config.Toggle, (_('No'), _('Yes')), 0,
_('''Should Mailman send an auto-response to emails sent to the
-owner address?''')),
- ('autoresponse_admin_text', mm_cfg.FileUpload,
+ ('autoresponse_admin_text', config.FileUpload,
(6, WIDTH), 0,
_('Auto-response text to send to -owner emails.')),
- ('autorespond_requests', mm_cfg.Radio,
+ ('autorespond_requests', config.Radio,
(_('No'), _('Yes, w/discard'), _('Yes, w/forward')), 0,
_('''Should Mailman send an auto-response to emails sent to the
-request address? If you choose yes, decide whether you want
Mailman to discard the original email, or forward it on to the
system as a normal mail command.''')),
- ('autoresponse_request_text', mm_cfg.FileUpload,
+ ('autoresponse_request_text', config.FileUpload,
(6, WIDTH), 0,
_('Auto-response text to send to -request emails.')),
- ('autoresponse_graceperiod', mm_cfg.Number, 3, 0,
+ ('autoresponse_graceperiod', config.Number, 3, 0,
_('''Number of days between auto-responses to either the mailing
list or -request/-owner address from the same poster. Set to
zero (or negative) for no grace period (i.e. auto-respond to
diff --git a/Mailman/Gui/Bounce.py b/Mailman/Gui/Bounce.py
index a90d2a660..0dd4bbd0d 100644
--- a/Mailman/Gui/Bounce.py
+++ b/Mailman/Gui/Bounce.py
@@ -15,10 +15,9 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
-from Mailman import mm_cfg
-from Mailman.i18n import _
-from Mailman.mm_cfg import days
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
@@ -75,14 +74,14 @@ class Bounce(GUIBase):
_('Bounce detection sensitivity'),
- ('bounce_processing', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('bounce_processing', config.Toggle, (_('No'), _('Yes')), 0,
_('Should Mailman perform automatic bounce processing?'),
_("""By setting this value to <em>No</em>, you disable all
automatic bounce processing for this list, however bounce
messages will still be discarded so that the list administrator
isn't inundated with them.""")),
- ('bounce_score_threshold', mm_cfg.Number, 5, 0,
+ ('bounce_score_threshold', config.Number, 5, 0,
_("""The maximum member bounce score before the member's
subscription is disabled. This value can be a floating point
number."""),
@@ -99,25 +98,25 @@ class Bounce(GUIBase):
score, above which they are automatically disabled, but not
removed from the mailing list.""")),
- ('bounce_info_stale_after', mm_cfg.Number, 5, 0,
+ ('bounce_info_stale_after', config.Number, 5, 0,
_("""The number of days after which a member's bounce information
is discarded, if no new bounces have been received in the
interim. This value must be an integer.""")),
- ('bounce_you_are_disabled_warnings', mm_cfg.Number, 5, 0,
+ ('bounce_you_are_disabled_warnings', config.Number, 5, 0,
_("""How many <em>Your Membership Is Disabled</em> warnings a
disabled member should get before their address is removed from
the mailing list. Set to 0 to immediately remove an address from
the list once their bounce score exceeds the threshold. This
value must be an integer.""")),
- ('bounce_you_are_disabled_warnings_interval', mm_cfg.Number, 5, 0,
+ ('bounce_you_are_disabled_warnings_interval', config.Number, 5, 0,
_("""The number of days between sending the <em>Your Membership
Is Disabled</em> warnings. This value must be an integer.""")),
_('Notifications'),
- ('bounce_unrecognized_goes_to_list_owner', mm_cfg.Toggle,
+ ('bounce_unrecognized_goes_to_list_owner', config.Toggle,
(_('No'), _('Yes')), 0,
_('''Should Mailman send you, the list owner, any bounce messages
that failed to be detected by the bounce processor? <em>Yes</em>
@@ -143,7 +142,7 @@ class Bounce(GUIBase):
<a href="?VARHELP=autoreply/autoresponse_admin_text">autoresponse
message</a> for email to the -owner and -admin address.""")),
- ('bounce_notify_owner_on_disable', mm_cfg.Toggle,
+ ('bounce_notify_owner_on_disable', config.Toggle,
(_('No'), _('Yes')), 0,
_("""Should Mailman notify you, the list owner, when bounces
cause a member's subscription to be disabled?"""),
@@ -152,7 +151,7 @@ class Bounce(GUIBase):
when a member's delivery is disabled due to excessive bounces.
An attempt to notify the member will always be made.""")),
- ('bounce_notify_owner_on_removal', mm_cfg.Toggle,
+ ('bounce_notify_owner_on_removal', config.Toggle,
(_('No'), _('Yes')), 0,
_("""Should Mailman notify you, the list owner, when bounces
cause a member to be unsubscribed?"""),
@@ -172,11 +171,11 @@ class Bounce(GUIBase):
elif property == 'bounce_score_threshold':
val = float(val)
elif property == 'bounce_info_stale_after':
- val = days(int(val))
+ val = config.days(int(val))
elif property == 'bounce_you_are_disabled_warnings':
val = int(val)
elif property == 'bounce_you_are_disabled_warnings_interval':
- val = days(int(val))
+ val = config.days(int(val))
elif property == 'bounce_notify_owner_on_disable':
val = int(val)
elif property == 'bounce_notify_owner_on_removal':
@@ -193,4 +192,4 @@ class Bounce(GUIBase):
if varname not in ('bounce_info_stale_after',
'bounce_you_are_disabled_warnings_interval'):
return None
- return int(getattr(mlist, varname) / days(1))
+ return int(getattr(mlist, varname) / config.days(1))
diff --git a/Mailman/Gui/ContentFilter.py b/Mailman/Gui/ContentFilter.py
index 0744c268e..8edc0bcb1 100644
--- a/Mailman/Gui/ContentFilter.py
+++ b/Mailman/Gui/ContentFilter.py
@@ -17,9 +17,9 @@
"""GUI component managing the content filtering options."""
-from Mailman import mm_cfg
-from Mailman.i18n import _
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
NL = '\n'
@@ -32,10 +32,10 @@ class ContentFilter(GUIBase):
def GetConfigInfo(self, mlist, category, subcat=None):
if category <> 'contentfilter':
return None
- WIDTH = mm_cfg.TEXTFIELDWIDTH
+ WIDTH = config.TEXTFIELDWIDTH
actions = [_('Discard'), _('Reject'), _('Forward to List Owner')]
- if mm_cfg.OWNERS_CAN_PRESERVE_FILTERED_MESSAGES:
+ if config.OWNERS_CAN_PRESERVE_FILTERED_MESSAGES:
actions.append(_('Preserve'))
return [
@@ -71,11 +71,11 @@ class ContentFilter(GUIBase):
>convert_html_to_plaintext</a> is enabled and the site is
configured to allow these conversions."""),
- ('filter_content', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('filter_content', config.Radio, (_('No'), _('Yes')), 0,
_("""Should Mailman filter the content of list traffic according
to the settings below?""")),
- ('filter_mime_types', mm_cfg.Text, (10, WIDTH), 0,
+ ('filter_mime_types', config.Text, (10, WIDTH), 0,
_("""Remove message attachments that have a matching content
type."""),
@@ -90,7 +90,7 @@ class ContentFilter(GUIBase):
<p>See also <a href="?VARHELP=contentfilter/pass_mime_types"
>pass_mime_types</a> for a content type whitelist.""")),
- ('pass_mime_types', mm_cfg.Text, (10, WIDTH), 0,
+ ('pass_mime_types', config.Text, (10, WIDTH), 0,
_("""Remove message attachments that don't have a matching
content type. Leave this field blank to skip this filter
test."""),
@@ -104,25 +104,25 @@ class ContentFilter(GUIBase):
<tt>multipart</tt> to this list, any messages with attachments
will be rejected by the pass filter.""")),
- ('filter_filename_extensions', mm_cfg.Text, (10, WIDTH), 0,
+ ('filter_filename_extensions', config.Text, (10, WIDTH), 0,
_("""Remove message attachments that have a matching filename
extension."""),),
- ('pass_filename_extensions', mm_cfg.Text, (10, WIDTH), 0,
+ ('pass_filename_extensions', config.Text, (10, WIDTH), 0,
_("""Remove message attachments that don't have a matching
filename extension. Leave this field blank to skip this filter
test."""),),
- ('collapse_alternatives', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('collapse_alternatives', config.Radio, (_('No'), _('Yes')), 0,
_("""Should Mailman collapse multipart/alternative to its
first part content?""")),
- ('convert_html_to_plaintext', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('convert_html_to_plaintext', config.Radio, (_('No'), _('Yes')), 0,
_("""Should Mailman convert <tt>text/html</tt> parts to plain
text? This conversion happens after MIME attachments have been
stripped.""")),
- ('filter_action', mm_cfg.Radio, tuple(actions), 0,
+ ('filter_action', config.Radio, tuple(actions), 0,
_("""Action to take when a message matches the content filtering
rules."""),
diff --git a/Mailman/Gui/Digest.py b/Mailman/Gui/Digest.py
index b01e3850b..0528a267f 100644
--- a/Mailman/Gui/Digest.py
+++ b/Mailman/Gui/Digest.py
@@ -17,8 +17,8 @@
"""Administrative GUI for digest deliveries."""
-from Mailman import mm_cfg
from Mailman import Utils
+from Mailman.configuration import config
from Mailman.i18n import _
# Intra-package import
@@ -39,62 +39,62 @@ class Digest(GUIBase):
def GetConfigInfo(self, mlist, category, subcat=None):
if category <> 'digest':
return None
- WIDTH = mm_cfg.TEXTFIELDWIDTH
+ WIDTH = config.TEXTFIELDWIDTH
info = [
_("Batched-delivery digest characteristics."),
- ('digestable', mm_cfg.Toggle, (_('No'), _('Yes')), 1,
+ ('digestable', config.Toggle, (_('No'), _('Yes')), 1,
_('Can list members choose to receive list traffic '
'bunched in digests?')),
- ('digest_is_default', mm_cfg.Radio,
+ ('digest_is_default', config.Radio,
(_('Regular'), _('Digest')), 0,
_('Which delivery mode is the default for new users?')),
- ('mime_is_default_digest', mm_cfg.Radio,
+ ('mime_is_default_digest', config.Radio,
(_('Plain'), _('MIME')), 0,
_('When receiving digests, which format is default?')),
- ('digest_size_threshhold', mm_cfg.Number, 3, 0,
+ ('digest_size_threshhold', config.Number, 3, 0,
_('How big in Kb should a digest be before it gets sent out?')),
# Should offer a 'set to 0' for no size threshhold.
- ('digest_send_periodic', mm_cfg.Radio, (_('No'), _('Yes')), 1,
+ ('digest_send_periodic', config.Radio, (_('No'), _('Yes')), 1,
_('Should a digest be dispatched daily when the size threshold '
"isn't reached?")),
- ('digest_header', mm_cfg.Text, (4, WIDTH), 0,
+ ('digest_header', config.Text, (4, WIDTH), 0,
_('Header added to every digest'),
_("Text attached (as an initial message, before the table"
" of contents) to the top of digests. ")
+ Utils.maketext('headfoot.html', raw=1, mlist=mlist)),
- ('digest_footer', mm_cfg.Text, (4, WIDTH), 0,
+ ('digest_footer', config.Text, (4, WIDTH), 0,
_('Footer added to every digest'),
_("Text attached (as a final message) to the bottom of digests. ")
+ Utils.maketext('headfoot.html', raw=1, mlist=mlist)),
- ('digest_volume_frequency', mm_cfg.Radio,
+ ('digest_volume_frequency', config.Radio,
(_('Yearly'), _('Monthly'), _('Quarterly'),
_('Weekly'), _('Daily')), 0,
_('How often should a new digest volume be started?'),
_('''When a new digest volume is started, the volume number is
incremented and the issue number is reset to 1.''')),
- ('_new_volume', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('_new_volume', config.Toggle, (_('No'), _('Yes')), 0,
_('Should Mailman start a new digest volume?'),
_('''Setting this option instructs Mailman to start a new volume
with the next digest sent out.''')),
- ('_send_digest_now', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('_send_digest_now', config.Toggle, (_('No'), _('Yes')), 0,
_('''Should Mailman send the next digest right now, if it is not
empty?''')),
]
-## if mm_cfg.OWNERS_CAN_ENABLE_PERSONALIZATION:
+## if config.OWNERS_CAN_ENABLE_PERSONALIZATION:
## info.extend([
-## ('digest_personalize', mm_cfg.Toggle, (_('No'), _('Yes')), 1,
+## ('digest_personalize', config.Toggle, (_('No'), _('Yes')), 1,
## _('''Should Mailman personalize each digest delivery?
## This is often useful for announce-only lists, but <a
diff --git a/Mailman/Gui/General.py b/Mailman/Gui/General.py
index 35b03d9c0..6dde9045e 100644
--- a/Mailman/Gui/General.py
+++ b/Mailman/Gui/General.py
@@ -19,11 +19,11 @@
import re
-from Mailman import mm_cfg
-from Mailman import Utils
from Mailman import Errors
-from Mailman.i18n import _
+from Mailman import Utils
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
OPTIONS = ('hide', 'ack', 'notmetoo', 'nodupes')
@@ -36,13 +36,13 @@ class General(GUIBase):
def GetConfigInfo(self, mlist, category, subcat):
if category <> 'general':
return None
- WIDTH = mm_cfg.TEXTFIELDWIDTH
+ WIDTH = config.TEXTFIELDWIDTH
# These are for the default_options checkboxes below.
- bitfields = {'hide' : mm_cfg.ConcealSubscription,
- 'ack' : mm_cfg.AcknowledgePosts,
- 'notmetoo' : mm_cfg.DontReceiveOwnPosts,
- 'nodupes' : mm_cfg.DontReceiveDuplicates
+ bitfields = {'hide' : config.ConcealSubscription,
+ 'ack' : config.AcknowledgePosts,
+ 'notmetoo' : config.DontReceiveOwnPosts,
+ 'nodupes' : config.DontReceiveDuplicates
}
bitdescrs = {
'hide' : _("Conceal the member's address"),
@@ -61,7 +61,7 @@ class General(GUIBase):
_('General list personality'),
- ('real_name', mm_cfg.String, WIDTH, 0,
+ ('real_name', config.String, WIDTH, 0,
_('The public name of this list (make case-changes only).'),
_('''The capitalization of this name can be changed to make it
presentable in polite company as a proper noun, or to make an
@@ -71,7 +71,7 @@ class General(GUIBase):
addresses are not case sensitive, but they are sensitive to
almost everything else :-)''')),
- ('owner', mm_cfg.EmailList, (3, WIDTH), 0,
+ ('owner', config.EmailList, (3, WIDTH), 0,
_("""The list administrator email addresses. Multiple
administrator addresses, each on separate line is okay."""),
@@ -95,7 +95,7 @@ class General(GUIBase):
addresses of the list moderators</a>. Note that the field you
are changing here specifies the list administrators.''')),
- ('moderator', mm_cfg.EmailList, (3, WIDTH), 0,
+ ('moderator', config.EmailList, (3, WIDTH), 0,
_("""The list moderator email addresses. Multiple
moderator addresses, each on separate line is okay."""),
@@ -119,7 +119,7 @@ class General(GUIBase):
this section. Note that the field you are changing here
specifies the list moderators.''')),
- ('description', mm_cfg.String, WIDTH, 0,
+ ('description', config.String, WIDTH, 0,
_('A terse phrase identifying this list.'),
_('''This description is used when the mailing list is listed with
@@ -127,7 +127,7 @@ class General(GUIBase):
be as succinct as you can get it, while still identifying what
the list is.''')),
- ('info', mm_cfg.Text, (7, WIDTH), 0,
+ ('info', config.Text, (7, WIDTH), 0,
_('''An introductory description - a few paragraphs - about the
list. It will be included, as html, at the top of the listinfo
page. Carriage returns will end a paragraph - see the details
@@ -139,7 +139,7 @@ class General(GUIBase):
bad html (like some unterminated HTML constructs) can prevent
display of the entire listinfo page.""")),
- ('subject_prefix', mm_cfg.String, WIDTH, 0,
+ ('subject_prefix', config.String, WIDTH, 0,
_('Prefix for subject line of list postings.'),
_("""This text will be prepended to subject lines of messages
posted to the list, to distinguish mailing list messages in in
@@ -151,19 +151,19 @@ class General(GUIBase):
(listname %%05d) -> (listname 00123)
""")),
- ('anonymous_list', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('anonymous_list', config.Radio, (_('No'), _('Yes')), 0,
_("""Hide the sender of a message, replacing it with the list
address (Removes From, Sender and Reply-To fields)""")),
_('''<tt>Reply-To:</tt> header munging'''),
- ('first_strip_reply_to', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('first_strip_reply_to', config.Radio, (_('No'), _('Yes')), 0,
_('''Should any existing <tt>Reply-To:</tt> header found in the
original message be stripped? If so, this will be done
regardless of whether an explict <tt>Reply-To:</tt> header is
added by Mailman or not.''')),
- ('reply_goes_to_list', mm_cfg.Radio,
+ ('reply_goes_to_list', config.Radio,
(_('Poster'), _('This list'), _('Explicit address')), 0,
_('''Where are replies to list messages directed?
<tt>Poster</tt> is <em>strongly</em> recommended for most mailing
@@ -201,7 +201,7 @@ class General(GUIBase):
<tt>Reply-To:</tt> address below to point to the parallel
list.""")),
- ('reply_to_address', mm_cfg.Email, WIDTH, 0,
+ ('reply_to_address', config.Email, WIDTH, 0,
_('Explicit <tt>Reply-To:</tt> header.'),
# Details for reply_to_address
_("""This is the address set in the <tt>Reply-To:</tt> header
@@ -235,7 +235,7 @@ class General(GUIBase):
_('Umbrella list settings'),
- ('umbrella_list', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('umbrella_list', config.Radio, (_('No'), _('Yes')), 0,
_('''Send password reminders to, eg, "-owner" address instead of
directly to user.'''),
@@ -246,7 +246,7 @@ class General(GUIBase):
value of "umbrella_member_suffix" appended to the member's
account name.""")),
- ('umbrella_member_suffix', mm_cfg.String, WIDTH, 0,
+ ('umbrella_member_suffix', config.String, WIDTH, 0,
_('''Suffix for use when this list is an umbrella for other
lists, according to setting of previous "umbrella_list"
setting.'''),
@@ -262,14 +262,14 @@ class General(GUIBase):
_('Notifications'),
- ('send_reminders', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('send_reminders', config.Radio, (_('No'), _('Yes')), 0,
_('''Send monthly password reminders?'''),
_('''Turn this on if you want password reminders to be sent once
per month to your members. Note that members may disable their
own individual password reminders.''')),
- ('welcome_msg', mm_cfg.Text, (4, WIDTH), 0,
+ ('welcome_msg', config.Text, (4, WIDTH), 0,
_('''List-specific text prepended to new-subscriber welcome
message'''),
@@ -289,21 +289,21 @@ class General(GUIBase):
<li>A blank line separates paragraphs.
</ul>""")),
- ('send_welcome_msg', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('send_welcome_msg', config.Radio, (_('No'), _('Yes')), 0,
_('Send welcome message to newly subscribed members?'),
_("""Turn this off only if you plan on subscribing people manually
and don't want them to know that you did so. This option is most
useful for transparently migrating lists from some other mailing
list manager to Mailman.""")),
- ('goodbye_msg', mm_cfg.Text, (4, WIDTH), 0,
+ ('goodbye_msg', config.Text, (4, WIDTH), 0,
_('''Text sent to people leaving the list. If empty, no special
text will be added to the unsubscribe message.''')),
- ('send_goodbye_msg', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('send_goodbye_msg', config.Radio, (_('No'), _('Yes')), 0,
_('Send goodbye message to members when they are unsubscribed?')),
- ('admin_immed_notify', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('admin_immed_notify', config.Radio, (_('No'), _('Yes')), 0,
_('''Should the list moderators get immediate notice of new
requests, as well as daily notices about collected ones?'''),
@@ -313,25 +313,25 @@ class General(GUIBase):
another. Setting this option causes notices to be sent
immediately on the arrival of new requests as well.''')),
- ('admin_notify_mchanges', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('admin_notify_mchanges', config.Radio, (_('No'), _('Yes')), 0,
_('''Should administrator get notices of subscribes and
unsubscribes?''')),
- ('respond_to_post_requests', mm_cfg.Radio,
+ ('respond_to_post_requests', config.Radio,
(_('No'), _('Yes')), 0,
_('Send mail to poster when their posting is held for approval?')
),
_('Additional settings'),
- ('emergency', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('emergency', config.Toggle, (_('No'), _('Yes')), 0,
_('Emergency moderation of all list traffic.'),
_("""When this option is enabled, all list traffic is emergency
moderated, i.e. held for moderation. Turn this option on when
your list is experiencing a flamewar and you want a cooling off
period.""")),
- ('new_member_options', mm_cfg.Checkbox,
+ ('new_member_options', config.Checkbox,
(opttext, optvals, 0, OPTIONS),
# The description for new_member_options includes a kludge where
# we add a hidden field so that even when all the checkboxes are
@@ -344,7 +344,7 @@ class General(GUIBase):
_("""When a new member is subscribed to this list, their initial
set of options is taken from the this variable's setting.""")),
- ('administrivia', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('administrivia', config.Radio, (_('No'), _('Yes')), 0,
_('''(Administrivia filter) Check postings and intercept ones
that seem to be administrative requests?'''),
@@ -354,11 +354,11 @@ class General(GUIBase):
requests queue, notifying the administrator of the new request,
in the process.""")),
- ('max_message_size', mm_cfg.Number, 7, 0,
+ ('max_message_size', config.Number, 7, 0,
_('''Maximum length in kilobytes (KB) of a message body. Use 0
for no limit.''')),
- ('host_name', mm_cfg.Host, WIDTH, 0,
+ ('host_name', config.Host, WIDTH, 0,
_('Host name this list prefers for email.'),
_("""The "host_name" is the preferred name for email to
@@ -369,9 +369,9 @@ class General(GUIBase):
]
- if mm_cfg.ALLOW_RFC2369_OVERRIDES:
+ if config.ALLOW_RFC2369_OVERRIDES:
rtn.append(
- ('include_rfc2369_headers', mm_cfg.Radio,
+ ('include_rfc2369_headers', config.Radio,
(_('No'), _('Yes')), 0,
_("""Should messages from this mailing list include the
<a href="http://www.faqs.org/rfcs/rfc2369.html">RFC 2369</a>
@@ -394,7 +394,7 @@ class General(GUIBase):
)
# Suppression of List-Post: headers
rtn.append(
- ('include_list_post_header', mm_cfg.Radio,
+ ('include_list_post_header', config.Radio,
(_('No'), _('Yes')), 0,
_('Should postings include the <tt>List-Post:</tt> header?'),
_("""The <tt>List-Post:</tt> header is one of the headers
@@ -411,7 +411,7 @@ class General(GUIBase):
# Discard held messages after this number of days
rtn.append(
- ('max_days_to_hold', mm_cfg.Number, 7, 0,
+ ('max_days_to_hold', config.Number, 7, 0,
_("""Discard held messages older than this number of days.
Use 0 for no automatic discarding."""))
)
@@ -428,7 +428,7 @@ class General(GUIBase):
elif property == 'new_member_options':
newopts = 0
for opt in OPTIONS:
- bitfield = mm_cfg.OPTINFO[opt]
+ bitfield = config.OPTINFO[opt]
if opt in val:
newopts |= bitfield
mlist.new_member_options = newopts
diff --git a/Mailman/Gui/Language.py b/Mailman/Gui/Language.py
index c29894fde..4c31447bd 100644
--- a/Mailman/Gui/Language.py
+++ b/Mailman/Gui/Language.py
@@ -21,8 +21,8 @@ import codecs
from Mailman import Utils
from Mailman import i18n
-from Mailman import mm_cfg
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
_ = i18n._
@@ -37,7 +37,7 @@ class Language(GUIBase):
return None
# Set things up for the language choices
langs = mlist.language_codes
- langnames = [_(Utils.GetLanguageDescr(L)) for L in langs]
+ langnames = [_(description) for description in config.enabled_names]
try:
langi = langs.index(mlist.preferred_language)
except ValueError:
@@ -53,16 +53,14 @@ class Language(GUIBase):
except LookupError:
return 0
- all = [key for key in mm_cfg.LC_DESCRIPTIONS.keys()
- if checkcodec(Utils.GetCharSet(key))]
- all.sort()
+ all = sorted(code for code in config.languages.enabled_codes
+ if checkcodec(Utils.GetCharSet(code)))
checked = [L in langs for L in all]
- allnames = [_(Utils.GetLanguageDescr(L)) for L in all]
-
+ allnames = [_(config.languages.get_description(code)) for code in all]
return [
_('Natural language (internationalization) options.'),
- ('preferred_language', mm_cfg.Select,
+ ('preferred_language', config.Select,
(langs, langnames, langi),
0,
_('Default language for this list.'),
@@ -74,7 +72,7 @@ class Language(GUIBase):
applies to both web-based and email-based messages, but not to
email posted by list members.''')),
- ('available_languages', mm_cfg.Checkbox,
+ ('available_languages', config.Checkbox,
(allnames, checked, 0, all), 0,
_('Languages supported by this list.'),
@@ -83,7 +81,7 @@ class Language(GUIBase):
<a href="?VARHELP=language/preferred_language">default
language</a> must be included.''')),
- ('encode_ascii_prefixes', mm_cfg.Radio,
+ ('encode_ascii_prefixes', config.Radio,
(_('Never'), _('Always'), _('As needed')), 0,
_("""Encode the
<a href="?VARHELP=general/subject_prefix">subject
diff --git a/Mailman/Gui/Makefile.in b/Mailman/Gui/Makefile.in
deleted file mode 100644
index aa8b63ef8..000000000
--- a/Mailman/Gui/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 2000-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Gui
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/Gui/Privacy.py b/Mailman/Gui/Privacy.py
index da41e93e2..3d218a2df 100644
--- a/Mailman/Gui/Privacy.py
+++ b/Mailman/Gui/Privacy.py
@@ -19,10 +19,10 @@
import re
-from Mailman import mm_cfg
from Mailman import Utils
-from Mailman.i18n import _
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
@@ -45,9 +45,9 @@ class Privacy(GUIBase):
# Pre-calculate some stuff. Technically, we shouldn't do the
# sub_cfentry calculation here, but it's too ugly to indent it any
# further, and besides, that'll mess up i18n catalogs.
- WIDTH = mm_cfg.TEXTFIELDWIDTH
- if mm_cfg.ALLOW_OPEN_SUBSCRIBE:
- sub_cfentry = ('subscribe_policy', mm_cfg.Radio,
+ WIDTH = config.TEXTFIELDWIDTH
+ if config.ALLOW_OPEN_SUBSCRIBE:
+ sub_cfentry = ('subscribe_policy', config.Radio,
# choices
(_('None'),
_('Confirm'),
@@ -71,7 +71,7 @@ class Privacy(GUIBase):
from creating subscriptions for others without
their consent.'''))
else:
- sub_cfentry = ('subscribe_policy', mm_cfg.Radio,
+ sub_cfentry = ('subscribe_policy', config.Radio,
# choices
(_('Confirm'),
_('Require approval'),
@@ -101,13 +101,13 @@ class Privacy(GUIBase):
separate archive-related privacy settings."""),
_('Subscribing'),
- ('advertised', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('advertised', config.Radio, (_('No'), _('Yes')), 0,
_('''Advertise this list when people ask what lists are on this
machine?''')),
sub_cfentry,
- ('subscribe_auto_approval', mm_cfg.EmailListEx, (10, WIDTH), 1,
+ ('subscribe_auto_approval', config.EmailListEx, (10, WIDTH), 1,
_("""List of addresses (or regexps) whose subscriptions do not
require approval."""),
@@ -116,7 +116,7 @@ class Privacy(GUIBase):
addresses one per line. You may begin a line with a ^ character
to designate a (case insensitive) regular expression match.""")),
- ('unsubscribe_policy', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('unsubscribe_policy', config.Radio, (_('No'), _('Yes')), 0,
_("""Is the list moderator's approval required for unsubscription
requests? (<em>No</em> is recommended)"""),
@@ -132,7 +132,7 @@ class Privacy(GUIBase):
are required to be members of.""")),
_('Ban list'),
- ('ban_list', mm_cfg.EmailListEx, (10, WIDTH), 1,
+ ('ban_list', config.EmailListEx, (10, WIDTH), 1,
_("""List of addresses which are banned from membership in this
mailing list."""),
@@ -142,14 +142,14 @@ class Privacy(GUIBase):
designate a regular expression match.""")),
_("Membership exposure"),
- ('private_roster', mm_cfg.Radio,
+ ('private_roster', config.Radio,
(_('Anyone'), _('List members'), _('List admin only')), 0,
_('Who can view subscription list?'),
_('''When set, the list of subscribers is protected by member or
admin password authentication.''')),
- ('obscure_addresses', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('obscure_addresses', config.Radio, (_('No'), _('Yes')), 0,
_("""Show member addresses so they're not directly recognizable
as email addresses?"""),
_("""Setting this option causes member email addresses to be
@@ -197,7 +197,7 @@ class Privacy(GUIBase):
_('Member filters'),
- ('default_member_moderation', mm_cfg.Radio, (_('No'), _('Yes')),
+ ('default_member_moderation', config.Radio, (_('No'), _('Yes')),
0, _('By default, should new list member postings be moderated?'),
_("""Each list member has a <em>moderation flag</em> which says
@@ -215,7 +215,7 @@ class Privacy(GUIBase):
<a href="%(adminurl)s/members">membership management
screens</a>.""")),
- ('member_moderation_action', mm_cfg.Radio,
+ ('member_moderation_action', config.Radio,
(_('Hold'), _('Reject'), _('Discard')), 0,
_("""Action to take when a moderated member posts to the
list."""),
@@ -232,7 +232,7 @@ class Privacy(GUIBase):
no notice sent to the post's author.
</ul>""")),
- ('member_moderation_notice', mm_cfg.Text, (10, WIDTH), 1,
+ ('member_moderation_notice', config.Text, (10, WIDTH), 1,
_("""Text to include in any
<a href="?VARHELP/privacy/sender/member_moderation_action"
>rejection notice</a> to
@@ -240,7 +240,7 @@ class Privacy(GUIBase):
_('Non-member filters'),
- ('accept_these_nonmembers', mm_cfg.EmailListEx, (10, WIDTH), 1,
+ ('accept_these_nonmembers', config.EmailListEx, (10, WIDTH), 1,
_("""List of non-member addresses whose postings should be
automatically accepted."""),
@@ -249,7 +249,7 @@ class Privacy(GUIBase):
addresses one per line; start the line with a ^ character to
designate a regular expression match.""")),
- ('hold_these_nonmembers', mm_cfg.EmailListEx, (10, WIDTH), 1,
+ ('hold_these_nonmembers', config.EmailListEx, (10, WIDTH), 1,
_("""List of non-member addresses whose postings will be
immediately held for moderation."""),
@@ -260,7 +260,7 @@ class Privacy(GUIBase):
line; start the line with a ^ character to designate a regular
expression match.""")),
- ('reject_these_nonmembers', mm_cfg.EmailListEx, (10, WIDTH), 1,
+ ('reject_these_nonmembers', config.EmailListEx, (10, WIDTH), 1,
_("""List of non-member addresses whose postings will be
automatically rejected."""),
@@ -275,7 +275,7 @@ class Privacy(GUIBase):
<p>Add member addresses one per line; start the line with a ^
character to designate a regular expression match.""")),
- ('discard_these_nonmembers', mm_cfg.EmailListEx, (10, WIDTH), 1,
+ ('discard_these_nonmembers', config.EmailListEx, (10, WIDTH), 1,
_("""List of non-member addresses whose postings will be
automatically discarded."""),
@@ -289,7 +289,7 @@ class Privacy(GUIBase):
<p>Add member addresses one per line; start the line with a ^
character to designate a regular expression match.""")),
- ('generic_nonmember_action', mm_cfg.Radio,
+ ('generic_nonmember_action', config.Radio,
(_('Accept'), _('Hold'), _('Reject'), _('Discard')), 0,
_("""Action to take for postings from non-members for which no
explicit action is defined."""),
@@ -305,11 +305,11 @@ class Privacy(GUIBase):
>discarded</a> addresses. If no match is found, then this action
is taken.""")),
- ('forward_auto_discards', mm_cfg.Radio, (_('No'), _('Yes')), 0,
+ ('forward_auto_discards', config.Radio, (_('No'), _('Yes')), 0,
_("""Should messages from non-members, which are automatically
discarded, be forwarded to the list moderator?""")),
- ('nonmember_rejection_notice', mm_cfg.Text, (10, WIDTH), 1,
+ ('nonmember_rejection_notice', config.Text, (10, WIDTH), 1,
_("""Text to include in any rejection notice to be sent to
non-members who post to this list. This notice can include
the list's owner address by %%(listowner)s and replaces the
@@ -323,7 +323,7 @@ class Privacy(GUIBase):
_('Recipient filters'),
- ('require_explicit_destination', mm_cfg.Radio,
+ ('require_explicit_destination', config.Radio,
(_('No'), _('Yes')), 0,
_("""Must posts have list named in destination (to, cc) field
(or be among the acceptable alias names, specified below)?"""),
@@ -345,7 +345,7 @@ class Privacy(GUIBase):
</ol>""")),
- ('acceptable_aliases', mm_cfg.Text, (4, WIDTH), 0,
+ ('acceptable_aliases', config.Text, (4, WIDTH), 0,
_("""Alias names (regexps) which qualify as explicit to or cc
destination names for this list."""),
@@ -366,7 +366,7 @@ class Privacy(GUIBase):
release, the pattern will always be matched against the entire
recipient address.""")),
- ('max_num_recipients', mm_cfg.Number, 5, 0,
+ ('max_num_recipients', config.Number, 5, 0,
_('Ceiling on acceptable number of recipients for a posting.'),
_('''If a posting has this number, or more, of recipients, it is
@@ -381,7 +381,7 @@ class Privacy(GUIBase):
_('Header filters'),
- ('header_filter_rules', mm_cfg.HeaderFilter, 0, 0,
+ ('header_filter_rules', config.HeaderFilter, 0, 0,
_('Filter rules to match against the headers of a message.'),
_("""Each header filter rule has two parts, a list of regular
@@ -403,7 +403,7 @@ class Privacy(GUIBase):
_('Legacy anti-spam filters'),
- ('bounce_matching_headers', mm_cfg.Text, (6, WIDTH), 0,
+ ('bounce_matching_headers', config.Text, (6, WIDTH), 0,
_('Hold posts with header value matching a specified regexp.'),
_("""Use this option to prohibit posts according to specific
header values. The target value is a regular-expression for
@@ -436,7 +436,7 @@ class Privacy(GUIBase):
# For subscribe_policy when ALLOW_OPEN_SUBSCRIBE is true, we need to
# add one to the value because the page didn't present an open list as
# an option.
- if property == 'subscribe_policy' and not mm_cfg.ALLOW_OPEN_SUBSCRIBE:
+ if property == 'subscribe_policy' and not config.ALLOW_OPEN_SUBSCRIBE:
val += 1
setattr(mlist, property, val)
@@ -476,7 +476,7 @@ class Privacy(GUIBase):
# We'll get a TypeError when the actiontag is missing and the
# .getvalue() call returns None.
except (ValueError, TypeError):
- action = mm_cfg.DEFER
+ action = config.DEFER
if pattern is None:
# We came to the end of the boxes
break
@@ -503,12 +503,12 @@ class Privacy(GUIBase):
where = cgidata.getvalue(wheretag)
if where == 'before':
# Add a new empty rule box before the current one
- rules.append(('', mm_cfg.DEFER, True))
+ rules.append(('', config.DEFER, True))
rules.append((pattern, action, False))
# Default is to add it after...
else:
rules.append((pattern, action, False))
- rules.append(('', mm_cfg.DEFER, True))
+ rules.append(('', config.DEFER, True))
# Was this an up movement?
elif cgidata.has_key(uptag):
# As long as this one isn't the first rule, move it up
diff --git a/Mailman/Gui/Topics.py b/Mailman/Gui/Topics.py
index 29613f3dd..731460a10 100644
--- a/Mailman/Gui/Topics.py
+++ b/Mailman/Gui/Topics.py
@@ -17,10 +17,10 @@
import re
-from Mailman import mm_cfg
from Mailman import Utils
-from Mailman.i18n import _
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
OR = '|'
@@ -33,12 +33,12 @@ class Topics(GUIBase):
def GetConfigInfo(self, mlist, category, subcat=None):
if category <> 'topics':
return None
- WIDTH = mm_cfg.TEXTFIELDWIDTH
+ WIDTH = config.TEXTFIELDWIDTH
return [
_('List topic keywords'),
- ('topics_enabled', mm_cfg.Radio, (_('Disabled'), _('Enabled')), 0,
+ ('topics_enabled', config.Radio, (_('Disabled'), _('Enabled')), 0,
_('''Should the topic filter be enabled or disabled?'''),
_("""The topic filter categorizes each incoming email message
@@ -61,7 +61,7 @@ class Topics(GUIBase):
href="?VARHELP=topics/topics_bodylines_limit">topics_bodylines_limit</a>
configuration variable.""")),
- ('topics_bodylines_limit', mm_cfg.Number, 5, 0,
+ ('topics_bodylines_limit', config.Number, 5, 0,
_('How many body lines should the topic matcher scan?'),
_("""The topic matcher will scan this many lines of the message
@@ -74,7 +74,7 @@ class Topics(GUIBase):
until a non-header-like line is encountered.
""")),
- ('topics', mm_cfg.Topics, 0, 0,
+ ('topics', config.Topics, 0, 0,
_('Topic keywords, one per line, to match against each message.'),
_("""Each topic keyword is actually a regular expression, which is
diff --git a/Mailman/Gui/Usenet.py b/Mailman/Gui/Usenet.py
index eddde6a02..0463fb3b2 100644
--- a/Mailman/Gui/Usenet.py
+++ b/Mailman/Gui/Usenet.py
@@ -15,9 +15,9 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
-from Mailman import mm_cfg
-from Mailman.i18n import _
from Mailman.Gui.GUIBase import GUIBase
+from Mailman.configuration import config
+from Mailman.i18n import _
@@ -29,7 +29,7 @@ class Usenet(GUIBase):
if category <> 'gateway':
return None
- WIDTH = mm_cfg.TEXTFIELDWIDTH
+ WIDTH = config.TEXTFIELDWIDTH
VERTICAL = 1
return [
@@ -37,7 +37,7 @@ class Usenet(GUIBase):
_('News server settings'),
- ('nntp_host', mm_cfg.String, WIDTH, 0,
+ ('nntp_host', config.String, WIDTH, 0,
_('The hostname of the machine your news server is running on.'),
_('''This value may be either the name of your news server, or
optionally of the format name:port, where port is a port number.
@@ -47,20 +47,20 @@ class Usenet(GUIBase):
recognize the machine this mailing list runs on as a machine
capable of reading and posting news.''')),
- ('linked_newsgroup', mm_cfg.String, WIDTH, 0,
+ ('linked_newsgroup', config.String, WIDTH, 0,
_('The name of the Usenet group to gateway to and/or from.')),
- ('gateway_to_news', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('gateway_to_news', config.Toggle, (_('No'), _('Yes')), 0,
_('''Should new posts to the mailing list be sent to the
newsgroup?''')),
- ('gateway_to_mail', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('gateway_to_mail', config.Toggle, (_('No'), _('Yes')), 0,
_('''Should new posts to the newsgroup be sent to the mailing
list?''')),
_('Forwarding options'),
- ('news_moderation', mm_cfg.Radio,
+ ('news_moderation', config.Radio,
(_('None'), _('Open list, moderated group'), _('Moderated')),
VERTICAL,
@@ -91,7 +91,7 @@ class Usenet(GUIBase):
Mailman moderation facilities, but to add an <tt>Approved</tt>
header to all messages that are gatewayed to Usenet.""")),
- ('news_prefix_subject_too', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('news_prefix_subject_too', config.Toggle, (_('No'), _('Yes')), 0,
_('Prefix <tt>Subject:</tt> headers on postings gated to news?'),
_("""Mailman prefixes <tt>Subject:</tt> headers with
<a href="?VARHELP=general/subject_prefix">text you can
@@ -103,7 +103,7 @@ class Usenet(GUIBase):
_('Mass catch up'),
- ('_mass_catchup', mm_cfg.Toggle, (_('No'), _('Yes')), 0,
+ ('_mass_catchup', config.Toggle, (_('No'), _('Yes')), 0,
_('Should Mailman perform a <em>catchup</em> on the newsgroup?'),
_('''When you tell Mailman to perform a catchup on the newsgroup,
this means that you want to start gating messages to the mailing
diff --git a/Mailman/HTMLFormatter.py b/Mailman/HTMLFormatter.py
index ab4c03a32..8fa650ed7 100644
--- a/Mailman/HTMLFormatter.py
+++ b/Mailman/HTMLFormatter.py
@@ -377,7 +377,8 @@ class HTMLFormatter:
# If only one language is enabled for this mailing list, omit the
# language choice buttons.
if len(self.language_codes) == 1:
- listlangs = _(Utils.GetLanguageDescr(self.preferred_language))
+ listlangs = _(
+ config.languages.get_description(self.preferred_language))
else:
listlangs = self.GetLangSelectBox(lang).Format()
d = {
@@ -424,7 +425,7 @@ class HTMLFormatter:
lang = self.preferred_language
# Figure out the available languages
values = self.language_codes
- legend = [Utils.GetLanguageDescr(code) for code in values]
+ legend = [config.languages.get_description(code) for code in values]
try:
selected = values.index(lang)
except ValueError:
diff --git a/Mailman/Handlers/Makefile.in b/Mailman/Handlers/Makefile.in
deleted file mode 100644
index 9e75be2d1..000000000
--- a/Mailman/Handlers/Makefile.in
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Handlers
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/MTA/Makefile.in b/Mailman/MTA/Makefile.in
deleted file mode 100644
index 15e8566d6..000000000
--- a/Mailman/MTA/Makefile.in
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/MTA
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 9d784de51..76538e6c2 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -1410,8 +1410,10 @@ bad regexp in bounce_matching_header line: %s
# default server language. The effect would be that the default
# server language would never get added to the list's list of
# languages.
- self.available_languages = [Language(code) for code in language_codes
- if code in config.LC_DESCRIPTIONS]
+ requested_codes = set(language_codes)
+ enabled_codes = set(config.languages.enabled_codes)
+ self.available_languages = [
+ Language(code) for code in requested_codes & enabled_codes]
def add_language(self, language_code):
self.available_languages.append(Language(language_code))
@@ -1419,12 +1421,13 @@ bad regexp in bounce_matching_header line: %s
@property
def language_codes(self):
# Callers of this method expect a list of language codes
- codes = [lang.code for lang in self.available_languages
- if lang.code in config.LC_DESCRIPTIONS]
+ available_codes = set(self.available_languages)
+ enabled_codes = set(config.languages.enabled_codes)
+ codes = available_codes & enabled_codes
# If we don't add this, and the site admin has never added any
# language support to the list, then the general admin page may have a
# blank field where the list owner is supposed to chose the list's
# preferred language.
if config.DEFAULT_SERVER_LANGUAGE not in codes:
- codes.append(config.DEFAULT_SERVER_LANGUAGE)
- return codes
+ codes.add(config.DEFAULT_SERVER_LANGUAGE)
+ return list(codes)
diff --git a/Mailman/Mailbox.py b/Mailman/Mailbox.py
index 12eea2bdb..9b3474c2b 100644
--- a/Mailman/Mailbox.py
+++ b/Mailman/Mailbox.py
@@ -25,8 +25,8 @@ from email.Errors import MessageParseError
from email.Generator import Generator
from email.Parser import Parser
-from Mailman import mm_cfg
from Mailman.Message import Message
+from Mailman.configuration import config
@@ -90,9 +90,9 @@ class ArchiverMailbox(Mailbox):
# scrub() method, giving the scrubber module a chance to do its thing
# before the message is archived.
def __init__(self, fp, mlist):
- if mm_cfg.ARCHIVE_SCRUBBER:
- __import__(mm_cfg.ARCHIVE_SCRUBBER)
- self._scrubber = sys.modules[mm_cfg.ARCHIVE_SCRUBBER].process
+ if config.ARCHIVE_SCRUBBER:
+ __import__(config.ARCHIVE_SCRUBBER)
+ self._scrubber = sys.modules[config.ARCHIVE_SCRUBBER].process
else:
self._scrubber = None
self._mlist = mlist
diff --git a/Mailman/Makefile.in b/Mailman/Makefile.in
deleted file mode 100644
index e71d86ce8..000000000
--- a/Mailman/Makefile.in
+++ /dev/null
@@ -1,101 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VERSION= @VERSION@
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman
-SHELL= /bin/sh
-
-MODULES= $(srcdir)/*.py
-SUBDIRS= Cgi Archiver Handlers Bouncers Queue MTA Gui Commands \
- bin database docs ext interfaces testing
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE)); \
- done
-
-install-here:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $$f $(DESTDIR)$(PACKAGEDIR); \
- done
- $(INSTALL) -m $(FILEMODE) mm_cfg.py.dist $(DESTDIR)$(PACKAGEDIR)
- if [ ! -f $(DESTDIR)$(PACKAGEDIR)/mm_cfg.py ]; \
- then \
- $(INSTALL) -m $(FILEMODE) mm_cfg.py.dist $(DESTDIR)$(PACKAGEDIR)/mm_cfg.py; \
- fi
-
-install: install-here
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
- done
-
-finish:
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) finish); \
- done
-
-clean:
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) clean); \
- done
-
-distclean:
- -rm Makefile Defaults.py mm_cfg.py.dist
- -rm *.pyc
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) distclean); \
- done
diff --git a/Mailman/OldStyleMemberships.py b/Mailman/OldStyleMemberships.py
index 2a72b8928..594096d9e 100644
--- a/Mailman/OldStyleMemberships.py
+++ b/Mailman/OldStyleMemberships.py
@@ -29,8 +29,8 @@ import time
from Mailman import Errors
from Mailman import MemberAdaptor
from Mailman import Utils
-from Mailman import mm_cfg
from Mailman import passwords
+from Mailman.configuration import config
ISREGULAR = 1
ISDIGEST = 2
diff --git a/Mailman/Post.py b/Mailman/Post.py
index cfb53c5da..719c3e68b 100644
--- a/Mailman/Post.py
+++ b/Mailman/Post.py
@@ -19,14 +19,14 @@
import sys
-from Mailman import mm_cfg
from Mailman.Queue.sbcache import get_switchboard
+from Mailman.configuration import config
def inject(listname, msg, recips=None, qdir=None):
if qdir is None:
- qdir = mm_cfg.INQUEUE_DIR
+ qdir = config.INQUEUE_DIR
queue = get_switchboard(qdir)
kws = {'listname' : listname,
'tolist' : 1,
diff --git a/Mailman/Queue/Makefile.in b/Mailman/Queue/Makefile.in
deleted file mode 100644
index 971d3c9f5..000000000
--- a/Mailman/Queue/Makefile.in
+++ /dev/null
@@ -1,91 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Queue
-SHELL= /bin/sh
-
-MODULES= *.py
-SUBDIRS= tests
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE)); \
- done
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
- done
-
-finish:
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) finish); \
- done
-
-clean:
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) clean); \
- done
-
-distclean:
- -rm *.pyc
- -rm Makefile
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) distclean); \
- done
diff --git a/Mailman/Queue/tests/Makefile.in b/Mailman/Queue/tests/Makefile.in
deleted file mode 100644
index e0a246a40..000000000
--- a/Mailman/Queue/tests/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 2006-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/Queue/tests
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/SafeDict.py b/Mailman/SafeDict.py
index 876ab88e4..2ddbc3dc5 100644
--- a/Mailman/SafeDict.py
+++ b/Mailman/SafeDict.py
@@ -35,7 +35,7 @@ class SafeDict(dict):
if charset:
self.cset = charset
elif lang:
- self.cset = config.LC_DESCRIPTIONS[lang][1]
+ self.cset = config.languages.get_charset(lang)
else:
self.cset = 'us-ascii'
diff --git a/Mailman/Utils.py b/Mailman/Utils.py
index 52642b0c3..2fff35c12 100644
--- a/Mailman/Utils.py
+++ b/Mailman/Utils.py
@@ -39,6 +39,7 @@ import email.Iterators
from email.Errors import HeaderParseError
from string import ascii_letters, digits, whitespace
+import Mailman.templates
from Mailman import Errors
from Mailman import passwords
from Mailman.SafeDict import SafeDict
@@ -51,6 +52,7 @@ EMPTYSTRING = ''
IDENTCHARS = ascii_letters + digits + '_'
NL = '\n'
UEMPTYSTRING = u''
+TEMPLATE_DIR = os.path.dirname(Mailman.templates.__file__)
# Search for $(identifier)s strings, except that the trailing s is optional,
# since that's a common mistake
@@ -450,7 +452,9 @@ def findtext(templatefile, dict=None, raw=False, lang=None, mlist=None):
# language. After that, the server default language is used for
# <language>. If that still doesn't yield a template, then the standard
# distribution's English language template is used as an ultimate
- # fallback. If that's missing you've got big problems. ;)
+ # fallback, and when lang is not 'en', the resulting template is passed
+ # through the translation service. If this template is missing you've got
+ # big problems. ;)
#
# A word on backwards compatibility: Mailman versions prior to 2.1 stored
# templates in templates/*.{html,txt} and lists/<listname>/*.{html,txt}.
@@ -466,19 +470,19 @@ def findtext(templatefile, dict=None, raw=False, lang=None, mlist=None):
# item returned.
#
# Calculate the languages to scan
- languages = []
+ languages = set()
if lang is not None:
- languages.append(lang)
+ languages.add(lang)
if mlist is not None:
- languages.append(mlist.preferred_language)
- languages.append(config.DEFAULT_SERVER_LANGUAGE)
+ languages.add(mlist.preferred_language)
+ languages.add(config.DEFAULT_SERVER_LANGUAGE)
# Calculate the locations to scan
searchdirs = []
if mlist is not None:
searchdirs.append(mlist.full_path)
- searchdirs.append(os.path.join(config.TEMPLATE_DIR, mlist.host_name))
- searchdirs.append(os.path.join(config.TEMPLATE_DIR, 'site'))
- searchdirs.append(config.TEMPLATE_DIR)
+ searchdirs.append(os.path.join(TEMPLATE_DIR, mlist.host_name))
+ searchdirs.append(os.path.join(TEMPLATE_DIR, 'site'))
+ searchdirs.append(TEMPLATE_DIR)
# Start scanning
fp = None
try:
@@ -498,24 +502,31 @@ def findtext(templatefile, dict=None, raw=False, lang=None, mlist=None):
# Try one last time with the distro English template, which, unless
# you've got a really broken installation, must be there.
try:
- filename = os.path.join(config.TEMPLATE_DIR, 'en', templatefile)
+ filename = os.path.join(TEMPLATE_DIR, 'en', templatefile)
fp = open(filename)
except IOError, e:
- if e.errno <> errno.ENOENT: raise
+ if e.errno <> errno.ENOENT:
+ raise
# We never found the template. BAD!
raise IOError(errno.ENOENT, 'No template file found', templatefile)
- template = fp.read()
- fp.close()
- template = unicode(template, GetCharSet(lang), 'replace')
+ else:
+ from Mailman.i18n import get_translation
+ # XXX BROKEN HACK
+ data = fp.read()[:-1]
+ template = get_translation().ugettext(data)
+ fp.close()
+ else:
+ template = fp.read()
+ fp.close()
+ template = unicode(template, GetCharSet(lang), 'replace')
text = template
if dict is not None:
try:
sdict = SafeDict(dict, lang=lang)
text = sdict.interpolate(template)
- except (TypeError, ValueError), e:
+ except (TypeError, ValueError):
# The template is really screwed up
- log.error('broken template: %s\n%s', filename, e)
- pass
+ log.exception('broken template: %s', filename)
if raw:
return text, filename
return wrap(text), filename
@@ -646,15 +657,10 @@ def makedirs(path, mode=02775):
-def GetLanguageDescr(lang):
- return config.LC_DESCRIPTIONS[lang][0]
-
-
+# XXX Replace this with direct calls. For now, existing uses of GetCharSet()
+# are too numerous to change.
def GetCharSet(lang):
- return config.LC_DESCRIPTIONS[lang][1]
-
-def IsLanguage(lang):
- return config.LC_DESCRIPTIONS.has_key(lang)
+ return config.languages.get_charset(lang)
diff --git a/Mailman/Version.py b/Mailman/Version.py
index 6fe2918c5..a922d88ad 100644
--- a/Mailman/Version.py
+++ b/Mailman/Version.py
@@ -16,7 +16,7 @@
# USA.
# Mailman version
-VERSION = "2.2.0a1"
+VERSION = "3.0.0a1"
# And as a hex number in the manner of PY_VERSION_HEX
ALPHA = 0xa
@@ -26,8 +26,8 @@ GAMMA = 0xc
RC = GAMMA
FINAL = 0xf
-MAJOR_REV = 2
-MINOR_REV = 2
+MAJOR_REV = 3
+MINOR_REV = 0
MICRO_REV = 0
REL_LEVEL = ALPHA
# at most 15 beta releases!
diff --git a/Mailman/bin/Makefile.in b/Mailman/bin/Makefile.in
deleted file mode 100644
index a90fb7094..000000000
--- a/Mailman/bin/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/bin
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/bin/__init__.py b/Mailman/bin/__init__.py
index e69de29bb..2bb75a4c8 100644
--- a/Mailman/bin/__init__.py
+++ b/Mailman/bin/__init__.py
@@ -0,0 +1,60 @@
+# Copyright (C) 2007 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+__all__ = [
+ 'add_members',
+ 'arch',
+ 'bounces',
+ 'bumpdigests',
+ 'change_pw',
+ 'check_perms',
+ 'checkdbs',
+ 'cleanarch',
+ 'config_list',
+ 'confirm',
+ 'disabled',
+ 'dumpdb',
+ 'export',
+ 'find_member',
+ 'gate_news',
+ 'genaliases',
+ 'import',
+ 'inject',
+ 'join',
+ 'leave',
+ 'list_lists',
+ 'list_members',
+ 'list_owners',
+ 'mailmanctl',
+ 'make_instance',
+ 'mmsitepass',
+ 'newlist',
+ 'nightly_gzip',
+ 'owner',
+ 'post',
+ 'qrunner',
+ 'request',
+ 'rmlist',
+ 'senddigests',
+ 'show_config',
+ 'show_qfiles',
+ 'testall',
+ 'unshunt',
+ 'update',
+ 'version',
+ 'withlist',
+ ]
diff --git a/bin/cleanarch b/Mailman/bin/cleanarch.py
index a8485333d..cda9ad112 100644
--- a/bin/cleanarch
+++ b/Mailman/bin/cleanarch.py
@@ -1,6 +1,4 @@
-#! @PYTHON@
-
-# Copyright (C) 2001-2006 by the Free Software Foundation, Inc.
+# Copyright (C) 2001-2007 by the Free Software Foundation, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -17,46 +15,19 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
-"""Clean up an .mbox archive file.
-
-The archiver looks for Unix-From lines separating messages in an mbox archive
-file. For compatibility, it specifically looks for lines that start with
-"From " -- i.e. the letters capital-F, lowercase-r, o, m, space, ignoring
-everything else on the line.
-
-Normally, any lines that start "From " in the body of a message should be
-escaped such that a > character is actually the first on a line. It is
-possible though that body lines are not actually escaped. This script
-attempts to fix these by doing a stricter test of the Unix-From lines. Any
-lines that start "From " but do not pass this stricter test are escaped with a
-> character.
-
-Usage: cleanarch [options] < inputfile > outputfile
-Options:
- -s n
- --status=n
- Print a # character every n lines processed
-
- -q / --quiet
- Don't print changed line information to standard error.
-
- -n / --dry-run
- Don't actually output anything.
-
- -h / --help
- Print this message and exit
-"""
+"""Clean up an .mbox archive file."""
import re
import sys
-import getopt
import mailbox
+import optparse
-import paths
+from Mailman import Version
from Mailman.i18n import _
-cre = re.compile(mailbox.UnixMailbox._fromlinepattern)
+__i18n_templates = True
+cre = re.compile(mailbox.UnixMailbox._fromlinepattern)
# From RFC 2822, a header field name must contain only characters from 33-126
# inclusive, excluding colon. I.e. from oct 41 to oct 176 less oct 072. Must
# use re.match() so that it's anchored at the beginning of the line.
@@ -64,15 +35,36 @@ fre = re.compile(r'[\041-\071\073-\176]+')
-def usage(code, msg=''):
- if code:
- fd = sys.stderr
- else:
- fd = sys.stdout
- print >> fd, _(__doc__)
- if msg:
- print >> fd, msg
- sys.exit(code)
+def parseargs():
+ parser = optparse.OptionParser(version=Version.MAILMAN_VERSION,
+ usage=_("""\
+%prog [options] < inputfile > outputfile
+
+The archiver looks for Unix-From lines separating messages in an mbox archive
+file. For compatibility, it specifically looks for lines that start with
+'From ' -- i.e. the letters capital-F, lowercase-r, o, m, space, ignoring
+everything else on the line.
+
+Normally, any lines that start 'From ' in the body of a message should be
+escaped such that a > character is actually the first on a line. It is
+possible though that body lines are not actually escaped. This script
+attempts to fix these by doing a stricter test of the Unix-From lines. Any
+lines that start From ' but do not pass this stricter test are escaped with a
+'>' character."""))
+ parser.add_option('-q', '--quiet',
+ default=False, action='store_true', help=_("""\
+Don't print changed line information to standard error."""))
+ parser.add_option('-s', '--status',
+ default=-1, type='int', help=_("""\
+Print a '#' character for every n lines processed. With a number less than or
+equal to zero, suppress the '#' characters."""))
+ parser.add_option('-n', '--dry-run',
+ default=False, action='store_true', help=_("""\
+Don't actually output anything."""))
+ opts, args = parser.parser_args()
+ if args:
+ parser.print_error(_('Unexpected arguments'))
+ return parser, opts, args
@@ -80,38 +72,13 @@ def escape_line(line, lineno, quiet, output):
if output:
sys.stdout.write('>' + line)
if not quiet:
- print >> sys.stderr, _('Unix-From line changed: %(lineno)d')
+ print >> sys.stderr, _('Unix-From line changed: $lineno')
print >> sys.stderr, line[:-1]
def main():
- try:
- opts, args = getopt.getopt(
- sys.argv[1:], 'hqns:',
- ['help', 'quiet', 'dry-run', 'status='])
- except getopt.error, msg:
- usage(1, msg)
-
- quiet = False
- output = True
- status = -1
-
- for opt, arg in opts:
- if opt in ('-h', '--help'):
- usage(0)
- elif opt in ('-q', '--quiet'):
- quiet = True
- elif opt in ('-n', '--dry-run'):
- output = False
- elif opt in ('-s', '--status'):
- try:
- status = int(arg)
- except ValueError:
- usage(1, _('Bad status number: %(arg)s'))
-
- if args:
- usage(1)
+ parser, opts, args = parseargs()
lineno = 0
statuscnt = 0
@@ -165,8 +132,3 @@ def main():
statuscnt = 0
prevline = line
print >> sys.stderr, _('%(messages)d messages found')
-
-
-
-if __name__ == '__main__':
- main()
diff --git a/Mailman/bin/genaliases.py b/Mailman/bin/genaliases.py
index 239f88c91..99a4234d4 100644
--- a/Mailman/bin/genaliases.py
+++ b/Mailman/bin/genaliases.py
@@ -45,9 +45,7 @@ verbosity."""))
help=_('Alternative configuration file to use'))
opts, args = parser.parse_args()
if args:
- parser.print_help()
- print >> sys.stderr, _('Unexpected arguments')
- sys.exit(1)
+ parser.print_error(_('Unexpected arguments'))
return parser, opts, args
diff --git a/Mailman/bin/mailmanctl.py b/Mailman/bin/mailmanctl.py
index 6d3636501..78ae0c8e8 100644
--- a/Mailman/bin/mailmanctl.py
+++ b/Mailman/bin/mailmanctl.py
@@ -40,6 +40,9 @@ __i18n_templates__ = True
COMMASPACE = ', '
DOT = '.'
+# Calculate this here and now, because we're going to do a chdir later on, and
+# if the path is relative, the qrunner script won't be found.
+BIN_DIR = os.path.abspath(os.path.dirname(sys.argv[0]))
# Since we wake up once per day and refresh the lock, the LOCK_LIFETIME
# needn't be (much) longer than SNOOZE. We pad it 6 hours just to be safe.
@@ -252,10 +255,11 @@ def start_runner(qrname, slice, count):
#
# Craft the command line arguments for the exec() call.
rswitch = '--runner=%s:%d:%d' % (qrname, slice, count)
- exe = os.path.join(config.BIN_DIR, 'qrunner')
+ # Wherever mailmanctl lives, so too must live the qrunner script.
+ exe = os.path.join(BIN_DIR, 'qrunner')
# config.PYTHON, which is the absolute path to the Python interpreter,
# must be given as argv[0] due to Python's library search algorithm.
- args = [config.PYTHON, config.PYTHON, exe, rswitch, '-s']
+ args = [sys.executable, sys.executable, exe, rswitch, '-s']
if opts.config:
args.extend(['-C', opts.config])
os.execl(*args)
@@ -380,8 +384,8 @@ def main():
# won't be opening any terminal devices, don't do the ultra-paranoid
# suggestion of doing a second fork after the setsid() call.
os.setsid()
- # Instead of cd'ing to root, cd to the Mailman installation home
- os.chdir(config.PREFIX)
+ # Instead of cd'ing to root, cd to the Mailman runtime directory.
+ os.chdir(config.VAR_DIR)
# I don't think we have any unneeded file descriptors.
#
# Now start all the qrunners. This returns a dictionary where the
diff --git a/Mailman/bin/make_instance.py b/Mailman/bin/make_instance.py
new file mode 100644
index 000000000..e82c12cde
--- /dev/null
+++ b/Mailman/bin/make_instance.py
@@ -0,0 +1,174 @@
+# Copyright (C) 2007 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+from __future__ import with_statement
+
+import os
+import grp
+import pwd
+import sys
+import errno
+import shutil
+import optparse
+import setuptools
+from string import Template
+
+import Mailman.data
+
+from Mailman import Defaults
+from Mailman.Version import MAILMAN_VERSION
+from Mailman.i18n import _
+
+__i18n_templates__ = True
+SPACE = ' '
+DATA_DIR = os.path.dirname(Mailman.data.__file__)
+
+
+
+def parseargs():
+ parser = optparse.OptionParser(version=MAILMAN_VERSION,
+ usage=_("""\
+%prog [options]
+
+Create a Mailman instance by generating all the necessary basic configuration
+support and intervening directories.
+"""))
+ parser.add_option('-d', '--var-dir',
+ type='string', default=Defaults.DEFAULT_VAR_DIRECTORY,
+ help=_("""\
+The top-level runtime data directory. All supporting runtime data will be
+placed in subdirectories of this directory. It will be created if necessary,
+although this might require superuser privileges."""))
+ parser.add_option('-f', '--force',
+ default=False, action='store_true', help=_("""\
+Force overwriting of mailman.cfg file with new values. Ordinarily, Mailman
+will never overwrite this file because it would cause you to lose your
+configuration data."""))
+ parser.add_option('-p', '--permchecks',
+ default=False, action='store_true', help=_("""\
+Perform permission checks on the runtime directory."""))
+ parser.add_option('-u', '--user',
+ type='string', default=None, help=_("""\
+The user id or name to use for the runtime environment. If not specified, the
+current user is used."""))
+ parser.add_option('-g', '--group',
+ type='string', default=None, help=_("""\
+The group id or name to use for the runtime environment. If not specified, the
+current group is used."""))
+ parser.add_option('-l', '--languages',
+ default=Defaults.DEFAULT_SERVER_LANGUAGE, type='string',
+ help=_("""\
+Space separated list of language codes to enable. Use -L to print all
+available language codes and the name of the associated native language.
+Default is to enable just English. Use the special code 'all' to enable all
+available languages."""))
+ opts, args = parser.parse_args()
+ if args:
+ unexpected = SPACE.join(args)
+ parser.print_error(_('Unexpected arguments: $unexpected'))
+ return parser, opts, args
+
+
+
+def instantiate(var_dir, user, group, languages, force):
+ # XXX This needs to be converted to use package resources.
+ etc_dir = os.path.join(var_dir, 'etc')
+ # Figure out which user name and group name to use.
+ if user is None:
+ uid = os.getuid()
+ else:
+ try:
+ uid = int(user)
+ except ValueError:
+ try:
+ uid = pwd.getpwnam(user).pw_uid
+ except KeyError:
+ parser.print_error(_('Unknown user: $user'))
+ try:
+ user_name = pwd.getpwuid(uid).pw_name
+ except KeyError:
+ parser.print_error(_('Unknown user: $user'))
+ if group is None:
+ gid = os.getgid()
+ else:
+ try:
+ gid = int(group)
+ except ValueError:
+ try:
+ gid = grp.getgrnam(group).gr_gid
+ except KeyError:
+ parser.print_error(_('Unknown group: $group'))
+ try:
+ group_name = grp.getgrgid(gid).gr_name
+ except KeyError:
+ parser.print_error(_('Unknown group: $group'))
+ # Make the runtime dir if it doesn't yet exist.
+ try:
+ omask = os.umask(0)
+ try:
+ os.makedirs(etc_dir, 02775)
+ finally:
+ os.umask(omask)
+ except OSError, e:
+ # Ignore the exceptions if the directory already exists
+ if e.errno <> errno.EEXIST:
+ raise
+ os.chown(etc_dir, uid, gid)
+ # Create an etc/mailman.cfg file which contains just a few configuration
+ # variables about the run-time environment that can't be calculated.
+ # Don't overwrite mailman.cfg unless the -f flag was given.
+ in_file_path = os.path.join(DATA_DIR, 'mailman.cfg.in')
+ out_file_path = os.path.join(etc_dir, 'mailman.cfg')
+ if os.path.exists(out_file_path) and not force:
+ # The logging subsystem isn't up yet, so just print this to stderr.
+ print >> sys.stderr, 'File exists:', out_file_path
+ print >> sys.stderr, 'Use --force to override.'
+ else:
+ with open(in_file_path) as fp:
+ raw = Template(fp.read())
+ processed = raw.safe_substitute(var_dir=var_dir,
+ user_id=uid,
+ user_name=user_name,
+ group_name=group_name,
+ group_id=gid,
+ languages=SPACE.join(languages),
+ )
+ with open(out_file_path, 'w') as fp:
+ fp.write(processed)
+ # XXX Do --permchecks
+
+
+
+def main():
+ parser, opts, args = parseargs()
+ available_languages = set(Defaults._DEFAULT_LANGUAGE_DATA)
+ enable_languages = set(opts.languages.split())
+ if 'all' in enable_languages:
+ languages = available_languages
+ else:
+ unknown_language = enable_languages - available_languages
+ if unknown_language:
+ print >> sys.stderr, 'Ignoring unknown language codes:', \
+ SPACE.join(unknown_language)
+ languages = available_languages & enable_languages
+ instantiate(opts.var_dir, opts.user, opts.group, languages, opts.force)
+
+
+
+if __name__ == '__main__':
+ main()
+
diff --git a/Mailman/bin/newlist.py b/Mailman/bin/newlist.py
index 5ac2dc5a6..1bbe818ff 100644
--- a/Mailman/bin/newlist.py
+++ b/Mailman/bin/newlist.py
@@ -104,7 +104,7 @@ def main():
if opts.language is None:
opts.language = config.DEFAULT_SERVER_LANGUAGE
# Is the language known?
- if opts.language not in config.LC_DESCRIPTIONS:
+ if opts.language not in config.languages.enabled_codes:
parser.print_help()
print >> sys.stderr, _('Unknown language: $opts.language')
sys.exit(1)
diff --git a/Mailman/bin/rmlist.py b/Mailman/bin/rmlist.py
index 26dbd1df7..fcc47b3f0 100644
--- a/Mailman/bin/rmlist.py
+++ b/Mailman/bin/rmlist.py
@@ -83,7 +83,7 @@ def delete_list(listname, mlist=None, archives=True, quiet=False):
])
for dirtmpl, msg in removeables:
- path = os.path.join(config.VAR_PREFIX, dirtmpl)
+ path = os.path.join(config.VAR_DIR, dirtmpl)
remove_it(listname, path, msg, quiet)
diff --git a/Mailman/bin/testall.py b/Mailman/bin/testall.py
index 005808cfe..3be33a655 100644
--- a/Mailman/bin/testall.py
+++ b/Mailman/bin/testall.py
@@ -30,7 +30,7 @@ import tempfile
import unittest
import Mailman
-import Mailman.testing
+import Mailman.tests
from Mailman import Version
from Mailman.configuration import config
@@ -167,24 +167,34 @@ def main():
# Set up the testing configuration file both for this process, and for all
# sub-processes testing will spawn (e.g. the qrunners).
#
- # Calculate a temporary VAR_PREFIX directory so that run-time artifacts of
+ # Calculate a temporary VAR_DIR directory so that run-time artifacts of
# the tests won't tread on the installation's data. This also makes it
# easier to clean up after the tests are done, and insures isolation of
# test suite runs.
- cfg_in = os.path.join(os.path.dirname(Mailman.testing.__file__),
+ cfg_in = os.path.join(os.path.dirname(Mailman.tests.__file__),
'testing.cfg.in')
fd, cfg_out = tempfile.mkstemp(suffix='.cfg')
os.close(fd)
shutil.copyfile(cfg_in, cfg_out)
- var_prefix = tempfile.mkdtemp()
+ var_dir = tempfile.mkdtemp()
if opts.verbosity > 2:
- print 'VAR_PREFIX :', var_prefix
+ print 'VAR_DIR :', var_dir
print 'config file:', cfg_out
+ user_id = os.getuid()
+ user_name = pwd.getpwuid(user_id).pw_name
+ group_id = os.getgid()
+ group_name = grp.getgrgid(group_id).gr_name
+
try:
with open(cfg_out, 'a') as fp:
- print >> fp, 'VAR_PREFIX = "%s"' % var_prefix
+ print >> fp, 'VAR_DIR = "%s"' % var_dir
+ print >> fp, 'MAILMAN_USER = "%s"' % user_name
+ print >> fp, 'MAILMAN_UID = %d' % user_id
+ print >> fp, 'MAILMAN_GROUP = "%s"' % group_name
+ print >> fp, 'MAILMAN_GID = %d' % group_id
+ print >> fp, "LANGUAGES = 'en'"
initialize_1(cfg_out, propagate_logs=opts.stderr)
mailman_uid = pwd.getpwnam(config.MAILMAN_USER).pw_uid
@@ -216,7 +226,7 @@ def main():
results = runner.run(suite(args))
finally:
os.remove(cfg_out)
- shutil.rmtree(var_prefix)
+ shutil.rmtree(var_dir)
# Turn off coverage and print a report
if opts.coverage:
diff --git a/Mailman/bin/withlist.py b/Mailman/bin/withlist.py
index ac1ab0aac..5e4655100 100644
--- a/Mailman/bin/withlist.py
+++ b/Mailman/bin/withlist.py
@@ -190,10 +190,6 @@ def main():
VERBOSE = not opts.quiet
LOCK = opts.lock
- # Append our bin directory to sys.path so that any withlist scripts living
- # their can be simply imported.
- sys.path.append(config.BIN_DIR)
-
# The default for interact is true unless -r was given
if opts.interactive is None:
if not opts.run:
diff --git a/Mailman/configuration.py b/Mailman/configuration.py
index aa3e1f9cf..dbb057a5f 100644
--- a/Mailman/configuration.py
+++ b/Mailman/configuration.py
@@ -18,10 +18,12 @@
"""Configuration file loading and management."""
import os
+import sys
import errno
from Mailman import Defaults
from Mailman import Errors
+from Mailman.languages import LanguageManager
_missing = object()
@@ -45,98 +47,126 @@ class Configuration(object):
self.qrunners = {}
def load(self, filename=None):
- # Load the configuration from the named file, or if not given, search
- # in VAR_PREFIX for an etc/mailman.cfg file. If that file is missing,
- # use Mailman/mm_cfg.py for backward compatibility.
- #
- # Whatever you find, create a namespace and execfile that file in it.
- # The values in that namespace are exposed as attributes on this
- # Configuration instance.
- original_filename = filename
- if filename is None:
- filename = os.path.join(Defaults.VAR_PREFIX, 'etc', 'mailman.cfg')
+ join = os.path.join
# Set up the execfile namespace
ns = Defaults.__dict__.copy()
# Prune a few things, add a few things
del ns['__file__']
del ns['__name__']
del ns['__doc__']
- ns['add_domain'] = self.add_domain
+ ns['add_domain'] = self.add_domain
ns['add_qrunner'] = self.add_qrunner
ns['del_qrunner'] = self.del_qrunner
+ self._languages = LanguageManager()
+ ns['add_language'] = self._languages.add_language
+ ns['enable_language'] = self._languages.enable_language
+ # Add all known languages, but don't enable them.
+ for code, (desc, charset) in Defaults._DEFAULT_LANGUAGE_DATA.items():
+ self._languages.add_language(code, desc, charset, False)
# Set up the default list of qrunners so that the mailman.cfg file may
# add or delete them.
for name in DEFAULT_QRUNNERS:
self.add_qrunner(name)
- # Attempt our first choice
- path = os.path.abspath(os.path.expanduser(filename))
- try:
- execfile(path, ns, ns)
- self.filename = path
- except EnvironmentError, e:
- if e.errno <> errno.ENOENT or original_filename:
- raise
- # The file didn't exist, so try mm_cfg.py
- from Mailman import mm_cfg
- ns.update(mm_cfg.__dict__)
- self.filename = None
- # Based on values possibly set in mailman.cfg, add additional qrunners
+ # Load the configuration from the named file, or if not given, search
+ # in the runtime data directory for an etc/mailman.cfg file. If there
+ # is an instance.cfg file in the same directory, load that first, then
+ # mailman.cfg.
+ #
+ # Whatever you find, create a namespace and execfile that file in it.
+ # The values in that namespace are exposed as attributes on this
+ # Configuration instance.
+ self.filename = None
+ paths = [
+ # Development directories.
+ join(os.getcwd(), 'etc', 'mailman.cfg'),
+ join(os.getcwd(), 'var', 'etc', 'mailman.cfg'),
+ # Standard installation directories.
+ join('/etc', 'mailman.cfg'),
+ join(Defaults.DEFAULT_VAR_DIRECTORY, 'etc', 'mailman.cfg'),
+ ]
+ if filename is not None:
+ paths.insert(0, filename)
+ for cfg_path in paths:
+ path = os.path.abspath(os.path.expanduser(cfg_path))
+ try:
+ execfile(path, ns, ns)
+ except EnvironmentError, e:
+ if e.errno <> errno.ENOENT:
+ # It's okay if the instance.cfg file does not exist. This
+ # can happen for example in the test suite.
+ raise
+ else:
+ self.filename = cfg_path
+ break
+ if self.filename is None:
+ # The logging subsystem isn't running yet, so use stderr.
+ print >> sys.stderr, 'No runtime configuration file file. Use -C'
+ sys.exit(-1)
+ # Based on values possibly set in mailman.cfg, add additional qrunners.
if ns['USE_MAILDIR']:
self.add_qrunner('Maildir')
if ns['USE_LMTP']:
self.add_qrunner('LMTP')
- # Pull out the defaults
- PREFIX = ns['PREFIX']
- VAR_PREFIX = ns['VAR_PREFIX']
- EXEC_PREFIX = ns['EXEC_PREFIX']
+ # Pull out the defaults.
+ VAR_DIR = ns['VAR_DIR']
# Now that we've loaded all the configuration files we're going to
# load, set up some useful directories.
- self.LIST_DATA_DIR = os.path.join(VAR_PREFIX, 'lists')
- self.LOG_DIR = os.path.join(VAR_PREFIX, 'logs')
- self.LOCK_DIR = lockdir = os.path.join(VAR_PREFIX, 'locks')
- self.DATA_DIR = datadir = os.path.join(VAR_PREFIX, 'data')
- self.ETC_DIR = etcdir = os.path.join(VAR_PREFIX, 'etc')
- self.SPAM_DIR = os.path.join(VAR_PREFIX, 'spam')
- self.EXT_DIR = os.path.join(VAR_PREFIX, 'ext')
- self.WRAPPER_DIR = os.path.join(EXEC_PREFIX, 'mail')
- self.BIN_DIR = os.path.join(PREFIX, 'bin')
- self.SCRIPTS_DIR = os.path.join(PREFIX, 'scripts')
- self.TEMPLATE_DIR = os.path.join(PREFIX, 'templates')
- self.MESSAGES_DIR = os.path.join(PREFIX, 'messages')
- self.PUBLIC_ARCHIVE_FILE_DIR = os.path.join(VAR_PREFIX,
- 'archives', 'public')
- self.PRIVATE_ARCHIVE_FILE_DIR = os.path.join(VAR_PREFIX,
- 'archives', 'private')
+ self.LIST_DATA_DIR = join(VAR_DIR, 'lists')
+ self.LOG_DIR = join(VAR_DIR, 'logs')
+ self.LOCK_DIR = lockdir = join(VAR_DIR, 'locks')
+ self.DATA_DIR = datadir = join(VAR_DIR, 'data')
+ self.ETC_DIR = etcdir = join(VAR_DIR, 'etc')
+ self.SPAM_DIR = join(VAR_DIR, 'spam')
+ self.EXT_DIR = join(VAR_DIR, 'ext')
+ self.PUBLIC_ARCHIVE_FILE_DIR = join(VAR_DIR, 'archives', 'public')
+ self.PRIVATE_ARCHIVE_FILE_DIR = join(VAR_DIR, 'archives', 'private')
# Directories used by the qrunner subsystem
- self.QUEUE_DIR = qdir = os.path.join(VAR_PREFIX, 'qfiles')
- self.INQUEUE_DIR = os.path.join(qdir, 'in')
- self.OUTQUEUE_DIR = os.path.join(qdir, 'out')
- self.CMDQUEUE_DIR = os.path.join(qdir, 'commands')
- self.BOUNCEQUEUE_DIR = os.path.join(qdir, 'bounces')
- self.NEWSQUEUE_DIR = os.path.join(qdir, 'news')
- self.ARCHQUEUE_DIR = os.path.join(qdir, 'archive')
- self.SHUNTQUEUE_DIR = os.path.join(qdir, 'shunt')
- self.VIRGINQUEUE_DIR = os.path.join(qdir, 'virgin')
- self.BADQUEUE_DIR = os.path.join(qdir, 'bad')
- self.RETRYQUEUE_DIR = os.path.join(qdir, 'retry')
- self.MAILDIR_DIR = os.path.join(qdir, 'maildir')
+ self.QUEUE_DIR = qdir = join(VAR_DIR, 'qfiles')
+ self.INQUEUE_DIR = join(qdir, 'in')
+ self.OUTQUEUE_DIR = join(qdir, 'out')
+ self.CMDQUEUE_DIR = join(qdir, 'commands')
+ self.BOUNCEQUEUE_DIR = join(qdir, 'bounces')
+ self.NEWSQUEUE_DIR = join(qdir, 'news')
+ self.ARCHQUEUE_DIR = join(qdir, 'archive')
+ self.SHUNTQUEUE_DIR = join(qdir, 'shunt')
+ self.VIRGINQUEUE_DIR = join(qdir, 'virgin')
+ self.BADQUEUE_DIR = join(qdir, 'bad')
+ self.RETRYQUEUE_DIR = join(qdir, 'retry')
+ self.MAILDIR_DIR = join(qdir, 'maildir')
# Other useful files
- self.PIDFILE = os.path.join(datadir,
- 'master-qrunner.pid')
- self.SITE_PW_FILE = os.path.join(datadir, 'adm.pw')
- self.LISTCREATOR_PW_FILE = os.path.join(datadir, 'creator.pw')
- self.CONFIG_FILE = os.path.join(etcdir, 'mailman.cfg')
- self.LOCK_FILE = os.path.join(lockdir, 'master-qrunner')
+ self.PIDFILE = join(datadir, 'master-qrunner.pid')
+ self.SITE_PW_FILE = join(datadir, 'adm.pw')
+ self.LISTCREATOR_PW_FILE = join(datadir, 'creator.pw')
+ self.CONFIG_FILE = join(etcdir, 'mailman.cfg')
+ self.LOCK_FILE = join(lockdir, 'master-qrunner')
# Now update our dict so attribute syntax just works
- if 'add_domain' in ns:
- del ns['add_domain']
- if 'add_runner' in ns:
- del ns['add_runner']
+ del ns['add_domain']
+ del ns['add_qrunner']
+ del ns['del_qrunner']
self.__dict__.update(ns)
# Add the default domain if there are no virtual domains currently
# defined.
if not self.domains:
self.add_domain(self.DEFAULT_EMAIL_HOST, self.DEFAULT_URL_HOST)
+ # Enable all specified languages, and promote the language manager to
+ # a public attribute.
+ self.languages = self._languages
+ del self._languages
+ available_languages = set(self._DEFAULT_LANGUAGE_DATA)
+ enabled_languages = set(self.LANGUAGES.split())
+ if 'all' in enabled_languages:
+ languages = available_languages
+ else:
+ unknown_language = enabled_languages - available_languages
+ if unknown_language:
+ print >> sys.stderr, 'Ignoring unknown language codes:', \
+ SPACE.join(unknown_language)
+ languages = available_languages & enabled_languages
+ for code in languages:
+ self.languages.enable_language(code)
+ # Always add and enable the default server language.
+ code = self.DEFAULT_SERVER_LANGUAGE
+ self.languages.enable_language(code)
def add_domain(self, email_host, url_host):
"""Add the definition of a virtual domain.
diff --git a/misc/Elixir-0.3.0.tar.gz b/Mailman/data/Elixir-0.3.0.tar.gz
index fd61be97e..fd61be97e 100644
--- a/misc/Elixir-0.3.0.tar.gz
+++ b/Mailman/data/Elixir-0.3.0.tar.gz
Binary files differ
diff --git a/misc/Makefile.in b/Mailman/data/Makefile.in
index 24f0f3a85..24f0f3a85 100644
--- a/misc/Makefile.in
+++ b/Mailman/data/Makefile.in
diff --git a/misc/PythonPowered.png b/Mailman/data/PythonPowered.png
index 2e9d99c2d..2e9d99c2d 100644
--- a/misc/PythonPowered.png
+++ b/Mailman/data/PythonPowered.png
Binary files differ
diff --git a/misc/SQLAlchemy-0.3.3.tar.gz b/Mailman/data/SQLAlchemy-0.3.3.tar.gz
index 5732923fd..5732923fd 100644
--- a/misc/SQLAlchemy-0.3.3.tar.gz
+++ b/Mailman/data/SQLAlchemy-0.3.3.tar.gz
Binary files differ
diff --git a/Mailman/testing/__init__.py b/Mailman/data/__init__.py
index e69de29bb..e69de29bb 100644..100755
--- a/Mailman/testing/__init__.py
+++ b/Mailman/data/__init__.py
diff --git a/misc/coverage.py b/Mailman/data/coverage.py
index 66e55e0c4..66e55e0c4 100644
--- a/misc/coverage.py
+++ b/Mailman/data/coverage.py
diff --git a/misc/gnu-head-tiny.jpg b/Mailman/data/gnu-head-tiny.jpg
index 441be50d6..441be50d6 100644
--- a/misc/gnu-head-tiny.jpg
+++ b/Mailman/data/gnu-head-tiny.jpg
Binary files differ
diff --git a/misc/mailman-large.jpg b/Mailman/data/mailman-large.jpg
index e184f3c6e..e184f3c6e 100644
--- a/misc/mailman-large.jpg
+++ b/Mailman/data/mailman-large.jpg
Binary files differ
diff --git a/misc/mailman.cfg.sample b/Mailman/data/mailman.cfg.in
index 3aab3d61e..3e24acc46 100644
--- a/misc/mailman.cfg.sample
+++ b/Mailman/data/mailman.cfg.in
@@ -19,15 +19,27 @@
"""This module contains your site-specific settings.
-Use this to override the default settings in Mailman/Defaults.py. You only
+Use this to override the default settings in `Mailman/Defaults.py`. You only
need to include those settings that you want to change, and unlike the old
-mm_cfg.py file, you do /not/ need to import Defaults. Its variables will
+`mm_cfg.py` file, you do /not/ need to `import Defaults`. Its variables will
automatically be available in this module's namespace.
-You should consult Defaults.py though for a complete listing of configuration
-variables that you can change.
+You should consult `Defaults.py` though for a complete listing of
+configuration variables that you can change.
-To use this, copy this file to $VAR_PREFIX/etc/mailman.cfg
-
-Mailman's installation procedure will never overwrite mailman.cfg.
+Mailman's installation procedure will never overwrite `mailman.cfg`.
"""
+
+# This is the top-level run-time data directory. All other runtime data by
+# default lives under this directory.
+VAR_DIR = '$var_dir'
+
+# User name and id that owns the Mailman process and files.
+MAILMAN_UID = '$user_id'
+MAILMAN_USER = '$user_name'
+
+# Group name and id that owns the Mailman process and files.
+MAILMAN_GID = '$group_id'
+MAILMAN_GROUP = '$group_name'
+
+LANGUAGES = '$languages'
diff --git a/misc/mailman.in b/Mailman/data/mailman.in
index 4fb0612f3..4fb0612f3 100644
--- a/misc/mailman.in
+++ b/Mailman/data/mailman.in
diff --git a/misc/mailman.jpg b/Mailman/data/mailman.jpg
index 94a4c0112..94a4c0112 100644
--- a/misc/mailman.jpg
+++ b/Mailman/data/mailman.jpg
Binary files differ
diff --git a/misc/mm-icon.png b/Mailman/data/mm-icon.png
index 42c3cf759..42c3cf759 100644
--- a/misc/mm-icon.png
+++ b/Mailman/data/mm-icon.png
Binary files differ
diff --git a/misc/munepy-1.1-py2.5.egg b/Mailman/data/munepy-1.1-py2.5.egg
index 00ed8ccfe..00ed8ccfe 100644
--- a/misc/munepy-1.1-py2.5.egg
+++ b/Mailman/data/munepy-1.1-py2.5.egg
Binary files differ
diff --git a/misc/paths.py.in b/Mailman/data/paths.py.in
index a840e3f14..a840e3f14 100644
--- a/misc/paths.py.in
+++ b/Mailman/data/paths.py.in
diff --git a/misc/pysqlite-2.3.2.tar.gz b/Mailman/data/pysqlite-2.3.2.tar.gz
index 52f5711e9..52f5711e9 100644
--- a/misc/pysqlite-2.3.2.tar.gz
+++ b/Mailman/data/pysqlite-2.3.2.tar.gz
Binary files differ
diff --git a/misc/setuptools-0.6c3.tar.gz b/Mailman/data/setuptools-0.6c3.tar.gz
index 30a4a464a..30a4a464a 100644
--- a/misc/setuptools-0.6c3.tar.gz
+++ b/Mailman/data/setuptools-0.6c3.tar.gz
Binary files differ
diff --git a/misc/wsgiref-0.1.2-py2.4.egg b/Mailman/data/wsgiref-0.1.2-py2.4.egg
index b38cb8321..b38cb8321 100644
--- a/misc/wsgiref-0.1.2-py2.4.egg
+++ b/Mailman/data/wsgiref-0.1.2-py2.4.egg
Binary files differ
diff --git a/misc/zope.interface-3.3.0.1.tar.gz b/Mailman/data/zope.interface-3.3.0.1.tar.gz
index c95bf0698..c95bf0698 100644
--- a/misc/zope.interface-3.3.0.1.tar.gz
+++ b/Mailman/data/zope.interface-3.3.0.1.tar.gz
Binary files differ
diff --git a/Mailman/database/Makefile.in b/Mailman/database/Makefile.in
deleted file mode 100644
index 10a689748..000000000
--- a/Mailman/database/Makefile.in
+++ /dev/null
@@ -1,92 +0,0 @@
-# Copyright (C) 2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/database
-SHELL= /bin/sh
-
-MODULES= *.py
-SUBDIRS= model
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE)); \
- done
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
- done
-
-finish:
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) finish); \
- done
-
-clean:
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) clean); \
- done
-
-distclean:
- -rm *.pyc
- -rm Makefile
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) distclean); \
- done
diff --git a/Mailman/database/model/Makefile.in b/Mailman/database/model/Makefile.in
deleted file mode 100644
index 2db8ce45e..000000000
--- a/Mailman/database/model/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/database/model
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/docs/Makefile.in b/Mailman/docs/Makefile.in
deleted file mode 100644
index 0662d8a3e..000000000
--- a/Mailman/docs/Makefile.in
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/docs
-SHELL= /bin/sh
-
-OTHERFILES= *.txt
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-# Directories make should decend into
-SUBDIRS=
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES) $(OTHERFILES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) distclean); \
- done
diff --git a/Mailman/docs/acknowledge.txt b/Mailman/docs/acknowledge.txt
index 82fdd3fd3..e22bf3d57 100644
--- a/Mailman/docs/acknowledge.txt
+++ b/Mailman/docs/acknowledge.txt
@@ -12,6 +12,7 @@ acknowledgment.
>>> from Mailman.database import flush
>>> mlist = config.list_manager.create('_xtest@example.com')
>>> mlist.real_name = 'XTest'
+ >>> mlist.preferred_language = 'en'
>>> # XXX This will almost certainly change once we've worked out the web
>>> # space layout for mailing lists now.
>>> mlist._data.web_page_url = 'http://lists.example.com/'
diff --git a/Mailman/docs/digests.txt b/Mailman/docs/digests.txt
index 3788651f9..3f6bcea3c 100644
--- a/Mailman/docs/digests.txt
+++ b/Mailman/docs/digests.txt
@@ -418,9 +418,16 @@ Internationalized digests
-------------------------
When messages come in with a content-type character set different than that of
-the list's preferred language, recipients wil get an internationalized digest.
+the list's preferred language, recipients wil get an internationalized
+digest. French is not enabled by default site-wide, so enable that now.
+XXX We also have to set the default server language to French, otherwise the
+English template will be found and the masthead won't be translated.
+
+ >>> config.languages.enable_language('fr')
+ >>> config.DEFAULT_SERVER_LANGUAGE = 'fr'
>>> mlist.preferred_language = 'fr'
+ >>> flush()
>>> msg = message_from_string("""\
... From: aperson@example.org
... To: _xtest@example.com
@@ -454,7 +461,7 @@ Set the digest threshold to zero so that the digests will be sent immediately.
Content-Type: multipart/mixed; boundary="..."
MIME-Version: 1.0
From: _xtest-request@example.com
- Subject: XTest Digest, Vol 2, Issue 11
+ Subject: Groupe XTest, Vol. 2, Parution 11
To: _xtest@example.com
Reply-To: _xtest@example.com
Date: ...
@@ -464,7 +471,7 @@ Set the digest threshold to zero so that the digests will be sent immediately.
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
- Content-Description: XTest Digest, Vol 2, Issue 11
+ Content-Description: Groupe XTest, Vol. 2, Parution 11
<BLANKLINE>
Envoyez vos messages pour la liste XTest =E0
_xtest@example.com
@@ -520,7 +527,7 @@ Set the digest threshold to zero so that the digests will be sent immediately.
('recips', set([])), ('version', 3)]
>>> print rfc1153msg.as_string()
From: _xtest-request@example.com
- Subject: XTest Digest, Vol 2, Issue 11
+ Subject: Groupe XTest, Vol. 2, Parution 11
To: _xtest@example.com
Reply-To: _xtest@example.com
Date: ...
@@ -537,3 +544,9 @@ Set the digest threshold to zero so that the digests will be sent immediately.
('listname', '_xtest@example.com'),
('received_time', ...),
('recips', set([])), ('version', 3)]
+
+
+Clean up
+--------
+
+ >>> config.DEFAULT_SERVER_LANGUAGE = 'en'
diff --git a/Mailman/docs/languages.txt b/Mailman/docs/languages.txt
new file mode 100644
index 000000000..e2df1d33d
--- /dev/null
+++ b/Mailman/docs/languages.txt
@@ -0,0 +1,104 @@
+Languages
+=========
+
+Mailman is multilingual. A language manager handles the known set of
+languages at run time, as well as enabling those languages for use in a
+running Mailman instance.
+
+ >>> from zope.interface.verify import verifyObject
+ >>> from Mailman.interfaces import ILanguageManager
+ >>> from Mailman.languages import LanguageManager
+ >>> mgr = LanguageManager()
+ >>> verifyObject(ILanguageManager, mgr)
+ True
+
+A language manager keeps track of the languages it knows about as well as the
+languages which are enabled. By default, none are known or enabled.
+
+ >>> sorted(mgr.known_codes)
+ []
+ >>> sorted(mgr.enabled_codes)
+ []
+
+The language manager also keeps track of information for each known language,
+but you obviously can't get information for an unknown language.
+
+ >>> mgr.get_description('en')
+ Traceback (most recent call last):
+ ...
+ KeyError: 'en'
+ >>> mgr.get_charset('en')
+ Traceback (most recent call last):
+ ...
+ KeyError: 'en'
+
+
+Adding languages
+----------------
+
+Adding a new language requires three pieces of information, the 2-character
+language code, the English description of the language, and the character set
+used by the language.
+
+ >>> mgr.add_language('en', 'English', 'us-ascii')
+ >>> mgr.add_language('it', 'Italian', 'iso-8859-1')
+
+By default, added languages are also enabled.
+
+ >>> sorted(mgr.known_codes)
+ ['en', 'it']
+ >>> sorted(mgr.enabled_codes)
+ ['en', 'it']
+
+And you can get information for all known languages.
+
+ >>> mgr.get_description('en')
+ 'English'
+ >>> mgr.get_charset('en')
+ 'us-ascii'
+ >>> mgr.get_description('it')
+ 'Italian'
+ >>> mgr.get_charset('it')
+ 'iso-8859-1'
+
+You can also add a language without enabling it.
+
+ >>> mgr.add_language('pl', 'Polish', 'iso-8859-2', enable=False)
+ >>> sorted(mgr.known_codes)
+ ['en', 'it', 'pl']
+ >>> sorted(mgr.enabled_codes)
+ ['en', 'it']
+
+You can get language data for disabled languages.
+
+ >>> mgr.get_description('pl')
+ 'Polish'
+ >>> mgr.get_charset('pl')
+ 'iso-8859-2'
+
+And of course you can enable a known language.
+
+ >>> mgr.enable_language('pl')
+ >>> sorted(mgr.enabled_codes)
+ ['en', 'it', 'pl']
+
+But you cannot enable languages that the manager does not know about.
+
+ >>> mgr.enable_language('xx')
+ Traceback (most recent call last):
+ ...
+ KeyError: 'xx'
+
+
+Other iterations
+----------------
+
+You can iterate over the descriptions (names) of all enabled languages.
+
+ >>> sorted(mgr.enabled_names)
+ ['English', 'Italian', 'Polish']
+
+You can ask whether a particular language code is enabled.
+
+ >>> 'it' in mgr.enabled_codes
+ True
diff --git a/Mailman/ext/Makefile.in b/Mailman/ext/Makefile.in
deleted file mode 100644
index be14be4f4..000000000
--- a/Mailman/ext/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/ext
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/i18n.py b/Mailman/i18n.py
index 66584e895..120e861ad 100644
--- a/Mailman/i18n.py
+++ b/Mailman/i18n.py
@@ -15,17 +15,23 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
+import os
import sys
import time
import string
import gettext
+import Mailman.messages
from Mailman.SafeDict import SafeDict
from Mailman.configuration import config
_translation = None
_missing = object()
+MESSAGES_DIR = os.path.dirname(Mailman.messages.__file__)
+
+
+
class Template(string.Template):
idpattern = r'[_a-z][_a-z0-9.]*'
@@ -47,8 +53,7 @@ def set_language(language=None):
if language is not None:
language = [language]
try:
- _translation = gettext.translation('mailman', config.MESSAGES_DIR,
- language)
+ _translation = gettext.translation('mailman', MESSAGES_DIR, language)
except IOError:
# The selected language was not installed in messages, so fall back to
# untranslated English.
diff --git a/Mailman/interfaces/Makefile.in b/Mailman/interfaces/Makefile.in
deleted file mode 100644
index d16bf9b70..000000000
--- a/Mailman/interfaces/Makefile.in
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (C) 2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-PACKAGEDIR= $(prefix)/Mailman/interfaces
-SHELL= /bin/sh
-
-MODULES= *.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(MODULES); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(PACKAGEDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
diff --git a/Mailman/interfaces/languages.py b/Mailman/interfaces/languages.py
new file mode 100644
index 000000000..b9ddd8c90
--- /dev/null
+++ b/Mailman/interfaces/languages.py
@@ -0,0 +1,73 @@
+# Copyright (C) 2007 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+"""Interfaces for managing languages."""
+
+from zope.interface import Interface, Attribute
+
+
+
+class ILanguageManager(Interface):
+ """A language manager.
+
+ Current, disabling languages is not supported.
+ """
+
+ def add_language(code, description, charset, enable=True):
+ """Teach the language manager about a language.
+
+ :param code: The short two-character language code for the
+ language. If the language manager already knows about this code,
+ the old language binding is lost.
+ :param description: The English description of the language,
+ e.g. 'English' or 'French'.
+ :param charset: The character set that the language uses,
+ e.g. 'us-ascii', 'iso-8859-1', or 'utf-8'
+ :param enable: Enable the language at the same time.
+ """
+
+ def enable_language(code):
+ """Enable a language that the manager already knows about.
+
+ :raises KeyError: when the manager does not know about the given
+ language code.
+ """
+
+ def get_description(code):
+ """Return the language description for the given code.
+
+ :param code: The two letter language code to look up.
+ :returns: The English description of the language.
+ :raises KeyError: when the code has not been added.
+ """
+
+ def get_charset(code):
+ """Return the character set for the given code.
+
+ :param code: The two letter language code to look up.
+ :returns: The character set of the language.
+ :raises KeyError: when the code has not been added.
+ """
+
+ known_codes = Attribute(
+ """An iterator over all known codes.""")
+
+ enabled_codes = Attribute(
+ """An iterator over all enabled codes.""")
+
+ enabled_names = Attribute(
+ """An iterator over all enabled language names.""")
diff --git a/Mailman/interfaces/manager.py b/Mailman/interfaces/manager.py
deleted file mode 100644
index fe22ec74d..000000000
--- a/Mailman/interfaces/manager.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# Copyright (C) 2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-"""Generic database object manager interface."""
-
-from zope.interface import Interface, Attribute
-
-
-
-class IManaged(Interface):
- """An object managed by an IManager."""
-
- name = Attribute("""The name of the managed object.""")
-
-
-
-class IManager(Interface):
- """Create and manage profiles."""
-
- def create(name):
- """Create and return a new IManaged object.
-
- name is the unique name for this object. Raises
- ExistingManagedObjectError if an IManaged object with the given name
- already exists.
- """
-
- def get(name):
- """Return the named IManaged object.
-
- Raises NoSuchManagedObjectError if the named IManaged object does not
- exist.
- """
-
- def delete(name):
- """Delete the named IManaged object.
-
- Raises NoSuchManagedObjectError if the named IManaged object does not
- exist.
- """
-
- iterator = Attribute(
- """Return an iterator over the all the IManaged objects.""")
diff --git a/Mailman/languages.py b/Mailman/languages.py
new file mode 100644
index 000000000..b97069c93
--- /dev/null
+++ b/Mailman/languages.py
@@ -0,0 +1,60 @@
+# Copyright (C) 2007 by the Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+"""Language manager."""
+
+from zope.interface import implements
+from Mailman.interfaces import ILanguageManager
+
+
+
+class LanguageManager:
+ implements(ILanguageManager)
+
+ def __init__(self):
+ self._language_data = {}
+ self._enabled = set()
+
+ def add_language(self, code, description, charset, enable=True):
+ self._language_data[code] = (description, charset)
+ if enable:
+ self._enabled.add(code)
+
+ def enable_language(self, code):
+ # As per the interface, let KeyError percolate up.
+ self._language_data[code]
+ self._enabled.add(code)
+
+ def get_description(self, code):
+ return self._language_data[code][0]
+
+ def get_charset(self, code):
+ return self._language_data[code][1]
+
+ @property
+ def known_codes(self):
+ return iter(self._language_data)
+
+ @property
+ def enabled_codes(self):
+ return iter(self._enabled)
+
+ @property
+ def enabled_names(self):
+ for code in self._enabled:
+ description, charset = self._language_data[code]
+ yield description
diff --git a/messages/Makefile.in b/Mailman/messages/Makefile.in
index dd2b1a610..dd2b1a610 100644
--- a/messages/Makefile.in
+++ b/Mailman/messages/Makefile.in
diff --git a/bin/mailmanctl b/Mailman/messages/__init__.py
index e69de29bb..e69de29bb 100644
--- a/bin/mailmanctl
+++ b/Mailman/messages/__init__.py
diff --git a/messages/ar/LC_MESSAGES/mailman.po b/Mailman/messages/ar/LC_MESSAGES/mailman.po
index 076a13434..076a13434 100644
--- a/messages/ar/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ar/LC_MESSAGES/mailman.po
diff --git a/messages/ca/LC_MESSAGES/mailman.po b/Mailman/messages/ca/LC_MESSAGES/mailman.po
index 3ec74f0fe..3ec74f0fe 100644
--- a/messages/ca/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ca/LC_MESSAGES/mailman.po
diff --git a/messages/cs/LC_MESSAGES/mailman.po b/Mailman/messages/cs/LC_MESSAGES/mailman.po
index 0b9fe96be..0b9fe96be 100644
--- a/messages/cs/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/cs/LC_MESSAGES/mailman.po
diff --git a/messages/da/LC_MESSAGES/mailman.po b/Mailman/messages/da/LC_MESSAGES/mailman.po
index c4afab6f2..c4afab6f2 100644
--- a/messages/da/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/da/LC_MESSAGES/mailman.po
diff --git a/messages/de/LC_MESSAGES/mailman.po b/Mailman/messages/de/LC_MESSAGES/mailman.po
index 9403a4f92..9403a4f92 100644
--- a/messages/de/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/de/LC_MESSAGES/mailman.po
diff --git a/messages/de/README.de b/Mailman/messages/de/README.de
index 4ca818d31..4ca818d31 100644
--- a/messages/de/README.de
+++ b/Mailman/messages/de/README.de
diff --git a/messages/docstring.files b/Mailman/messages/docstring.files
index c65b0e949..c65b0e949 100644
--- a/messages/docstring.files
+++ b/Mailman/messages/docstring.files
diff --git a/messages/es/LC_MESSAGES/mailman.po b/Mailman/messages/es/LC_MESSAGES/mailman.po
index 7a2224010..7a2224010 100644
--- a/messages/es/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/es/LC_MESSAGES/mailman.po
diff --git a/messages/es/README.es b/Mailman/messages/es/README.es
index 066e7d7dd..066e7d7dd 100644
--- a/messages/es/README.es
+++ b/Mailman/messages/es/README.es
diff --git a/messages/et/LC_MESSAGES/mailman.po b/Mailman/messages/et/LC_MESSAGES/mailman.po
index 2e404618f..2e404618f 100644
--- a/messages/et/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/et/LC_MESSAGES/mailman.po
diff --git a/messages/eu/LC_MESSAGES/mailman.po b/Mailman/messages/eu/LC_MESSAGES/mailman.po
index 979221811..979221811 100644
--- a/messages/eu/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/eu/LC_MESSAGES/mailman.po
diff --git a/messages/eu/README.eu b/Mailman/messages/eu/README.eu
index 8176d5288..8176d5288 100644
--- a/messages/eu/README.eu
+++ b/Mailman/messages/eu/README.eu
diff --git a/messages/fi/LC_MESSAGES/mailman.po b/Mailman/messages/fi/LC_MESSAGES/mailman.po
index eac01f0ca..eac01f0ca 100644
--- a/messages/fi/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/fi/LC_MESSAGES/mailman.po
diff --git a/messages/fi/README.fi b/Mailman/messages/fi/README.fi
index 796275f0a..796275f0a 100644
--- a/messages/fi/README.fi
+++ b/Mailman/messages/fi/README.fi
diff --git a/messages/fr/LC_MESSAGES/mailman.po b/Mailman/messages/fr/LC_MESSAGES/mailman.po
index d6546b6dc..6bccf8d9c 100644
--- a/messages/fr/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/fr/LC_MESSAGES/mailman.po
@@ -7958,8 +7958,8 @@ msgid "Message rejected by filter rule match"
msgstr "Message rejeté par correspondance avec une règle de filtrage"
#: Mailman/Handlers/ToDigest.py:159
-msgid "%(realname)s Digest, Vol %(volume)d, Issue %(issue)d"
-msgstr "Groupe %(realname)s, Vol. %(volume)d, Parution %(issue)d"
+msgid "$realname Digest, Vol $volume, Issue $issue"
+msgstr "Groupe $realname, Vol. $volume, Parution $issue"
#: Mailman/Handlers/ToDigest.py:205
msgid "digest header"
diff --git a/messages/fr/README.fr b/Mailman/messages/fr/README.fr
index 0ae05b224..0ae05b224 100644
--- a/messages/fr/README.fr
+++ b/Mailman/messages/fr/README.fr
diff --git a/messages/hr/LC_MESSAGES/mailman.po b/Mailman/messages/hr/LC_MESSAGES/mailman.po
index 243997947..243997947 100644
--- a/messages/hr/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/hr/LC_MESSAGES/mailman.po
diff --git a/messages/hu/FAQ.hu b/Mailman/messages/hu/FAQ.hu
index 7430f1d22..7430f1d22 100644
--- a/messages/hu/FAQ.hu
+++ b/Mailman/messages/hu/FAQ.hu
diff --git a/messages/hu/INSTALL.hu b/Mailman/messages/hu/INSTALL.hu
index 0fc4aaf76..0fc4aaf76 100644
--- a/messages/hu/INSTALL.hu
+++ b/Mailman/messages/hu/INSTALL.hu
diff --git a/messages/hu/LC_MESSAGES/mailman.po b/Mailman/messages/hu/LC_MESSAGES/mailman.po
index 2d568d554..2d568d554 100644
--- a/messages/hu/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/hu/LC_MESSAGES/mailman.po
diff --git a/messages/hu/README.BSD.hu b/Mailman/messages/hu/README.BSD.hu
index 6ff26c6d7..6ff26c6d7 100644
--- a/messages/hu/README.BSD.hu
+++ b/Mailman/messages/hu/README.BSD.hu
diff --git a/messages/hu/README.CONTRIB.hu b/Mailman/messages/hu/README.CONTRIB.hu
index 0b53cdc12..0b53cdc12 100644
--- a/messages/hu/README.CONTRIB.hu
+++ b/Mailman/messages/hu/README.CONTRIB.hu
diff --git a/messages/hu/README.EXIM.hu b/Mailman/messages/hu/README.EXIM.hu
index 107438b17..107438b17 100644
--- a/messages/hu/README.EXIM.hu
+++ b/Mailman/messages/hu/README.EXIM.hu
diff --git a/messages/hu/README.LINUX.hu b/Mailman/messages/hu/README.LINUX.hu
index 9646a6cee..9646a6cee 100644
--- a/messages/hu/README.LINUX.hu
+++ b/Mailman/messages/hu/README.LINUX.hu
diff --git a/messages/hu/README.MACOSX.hu b/Mailman/messages/hu/README.MACOSX.hu
index 3b9420c7c..3b9420c7c 100644
--- a/messages/hu/README.MACOSX.hu
+++ b/Mailman/messages/hu/README.MACOSX.hu
diff --git a/messages/hu/README.NETSCAPE.hu b/Mailman/messages/hu/README.NETSCAPE.hu
index efcda422e..efcda422e 100644
--- a/messages/hu/README.NETSCAPE.hu
+++ b/Mailman/messages/hu/README.NETSCAPE.hu
diff --git a/messages/hu/README.POSTFIX.hu b/Mailman/messages/hu/README.POSTFIX.hu
index f2a36c3f0..f2a36c3f0 100644
--- a/messages/hu/README.POSTFIX.hu
+++ b/Mailman/messages/hu/README.POSTFIX.hu
diff --git a/messages/hu/README.QMAIL.hu b/Mailman/messages/hu/README.QMAIL.hu
index 72ab96e31..72ab96e31 100644
--- a/messages/hu/README.QMAIL.hu
+++ b/Mailman/messages/hu/README.QMAIL.hu
diff --git a/messages/hu/README.SENDMAIL.hu b/Mailman/messages/hu/README.SENDMAIL.hu
index 028550952..028550952 100644
--- a/messages/hu/README.SENDMAIL.hu
+++ b/Mailman/messages/hu/README.SENDMAIL.hu
diff --git a/messages/hu/README.USERAGENT.hu b/Mailman/messages/hu/README.USERAGENT.hu
index d92dd1233..d92dd1233 100644
--- a/messages/hu/README.USERAGENT.hu
+++ b/Mailman/messages/hu/README.USERAGENT.hu
diff --git a/messages/hu/README.hu b/Mailman/messages/hu/README.hu
index 4638b78ea..4638b78ea 100644
--- a/messages/hu/README.hu
+++ b/Mailman/messages/hu/README.hu
diff --git a/messages/hu/UPGRADING.hu b/Mailman/messages/hu/UPGRADING.hu
index 1a070a27f..1a070a27f 100644
--- a/messages/hu/UPGRADING.hu
+++ b/Mailman/messages/hu/UPGRADING.hu
diff --git a/messages/ia/LC_MESSAGES/mailman.po b/Mailman/messages/ia/LC_MESSAGES/mailman.po
index 2cf4db675..2cf4db675 100644
--- a/messages/ia/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ia/LC_MESSAGES/mailman.po
diff --git a/messages/it/LC_MESSAGES/mailman.po b/Mailman/messages/it/LC_MESSAGES/mailman.po
index 598968457..598968457 100644
--- a/messages/it/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/it/LC_MESSAGES/mailman.po
diff --git a/messages/it/README.it b/Mailman/messages/it/README.it
index 56fcc422d..56fcc422d 100644
--- a/messages/it/README.it
+++ b/Mailman/messages/it/README.it
diff --git a/messages/ja/INSTALL b/Mailman/messages/ja/INSTALL
index f8c4de6b4..f8c4de6b4 100644
--- a/messages/ja/INSTALL
+++ b/Mailman/messages/ja/INSTALL
diff --git a/messages/ja/LC_MESSAGES/mailman.po b/Mailman/messages/ja/LC_MESSAGES/mailman.po
index 611dba470..611dba470 100644
--- a/messages/ja/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ja/LC_MESSAGES/mailman.po
diff --git a/messages/ja/README b/Mailman/messages/ja/README
index a163742c1..a163742c1 100644
--- a/messages/ja/README
+++ b/Mailman/messages/ja/README
diff --git a/messages/ja/README.ja b/Mailman/messages/ja/README.ja
index a459d9daa..a459d9daa 100644
--- a/messages/ja/README.ja
+++ b/Mailman/messages/ja/README.ja
diff --git a/messages/ja/UPGRADING b/Mailman/messages/ja/UPGRADING
index 3afc8c5fe..3afc8c5fe 100644
--- a/messages/ja/UPGRADING
+++ b/Mailman/messages/ja/UPGRADING
diff --git a/messages/ja/doc/Defaults.py.in b/Mailman/messages/ja/doc/Defaults.py.in
index cfbcc9ed8..cfbcc9ed8 100644
--- a/messages/ja/doc/Defaults.py.in
+++ b/Mailman/messages/ja/doc/Defaults.py.in
diff --git a/messages/ja/doc/mailman-install.tex b/Mailman/messages/ja/doc/mailman-install.tex
index aa4297400..aa4297400 100644
--- a/messages/ja/doc/mailman-install.tex
+++ b/Mailman/messages/ja/doc/mailman-install.tex
diff --git a/messages/ja/doc/mailman-member.tex b/Mailman/messages/ja/doc/mailman-member.tex
index 8fe6e3543..8fe6e3543 100644
--- a/messages/ja/doc/mailman-member.tex
+++ b/Mailman/messages/ja/doc/mailman-member.tex
diff --git a/messages/ko/LC_MESSAGES/mailman.po b/Mailman/messages/ko/LC_MESSAGES/mailman.po
index 1654f4f2a..1654f4f2a 100644
--- a/messages/ko/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ko/LC_MESSAGES/mailman.po
diff --git a/messages/ko/README.ko b/Mailman/messages/ko/README.ko
index 268a96d01..268a96d01 100644
--- a/messages/ko/README.ko
+++ b/Mailman/messages/ko/README.ko
diff --git a/messages/lt/LC_MESSAGES/mailman.po b/Mailman/messages/lt/LC_MESSAGES/mailman.po
index 1e87b6eea..1e87b6eea 100644
--- a/messages/lt/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/lt/LC_MESSAGES/mailman.po
diff --git a/messages/mailman.pot b/Mailman/messages/mailman.pot
index ae04e58f2..ae04e58f2 100644
--- a/messages/mailman.pot
+++ b/Mailman/messages/mailman.pot
diff --git a/messages/marked.files b/Mailman/messages/marked.files
index 375fb35a5..375fb35a5 100644
--- a/messages/marked.files
+++ b/Mailman/messages/marked.files
diff --git a/messages/nl/LC_MESSAGES/mailman.po b/Mailman/messages/nl/LC_MESSAGES/mailman.po
index 290808f90..290808f90 100644
--- a/messages/nl/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/nl/LC_MESSAGES/mailman.po
diff --git a/messages/no/LC_MESSAGES/mailman.po b/Mailman/messages/no/LC_MESSAGES/mailman.po
index 5e4c53696..5e4c53696 100644
--- a/messages/no/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/no/LC_MESSAGES/mailman.po
diff --git a/messages/pl/LC_MESSAGES/mailman.po b/Mailman/messages/pl/LC_MESSAGES/mailman.po
index de6273bd2..de6273bd2 100644
--- a/messages/pl/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/pl/LC_MESSAGES/mailman.po
diff --git a/messages/pl/README.pl b/Mailman/messages/pl/README.pl
index 47f40998b..47f40998b 100644
--- a/messages/pl/README.pl
+++ b/Mailman/messages/pl/README.pl
diff --git a/messages/pt/LC_MESSAGES/mailman.po b/Mailman/messages/pt/LC_MESSAGES/mailman.po
index 1976c787f..1976c787f 100644
--- a/messages/pt/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/pt/LC_MESSAGES/mailman.po
diff --git a/messages/pt_BR/LC_MESSAGES/mailman.po b/Mailman/messages/pt_BR/LC_MESSAGES/mailman.po
index 47c983be8..47c983be8 100644
--- a/messages/pt_BR/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/pt_BR/LC_MESSAGES/mailman.po
diff --git a/messages/ro/LC_MESSAGES/mailman.po b/Mailman/messages/ro/LC_MESSAGES/mailman.po
index 05a80aca7..05a80aca7 100644
--- a/messages/ro/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ro/LC_MESSAGES/mailman.po
diff --git a/messages/ru/LC_MESSAGES/mailman.po b/Mailman/messages/ru/LC_MESSAGES/mailman.po
index 6a02aca15..6a02aca15 100644
--- a/messages/ru/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/ru/LC_MESSAGES/mailman.po
diff --git a/messages/ru/README.ru b/Mailman/messages/ru/README.ru
index 027dbe878..027dbe878 100644
--- a/messages/ru/README.ru
+++ b/Mailman/messages/ru/README.ru
diff --git a/messages/sl/LC_MESSAGES/mailman.po b/Mailman/messages/sl/LC_MESSAGES/mailman.po
index ca1ed16d2..ca1ed16d2 100644
--- a/messages/sl/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/sl/LC_MESSAGES/mailman.po
diff --git a/messages/sr/LC_MESSAGES/mailman.po b/Mailman/messages/sr/LC_MESSAGES/mailman.po
index 058a4939e..058a4939e 100644
--- a/messages/sr/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/sr/LC_MESSAGES/mailman.po
diff --git a/messages/sr/readme.sr b/Mailman/messages/sr/readme.sr
index df7eef0e9..df7eef0e9 100644
--- a/messages/sr/readme.sr
+++ b/Mailman/messages/sr/readme.sr
diff --git a/messages/sv/LC_MESSAGES/mailman.po b/Mailman/messages/sv/LC_MESSAGES/mailman.po
index 724aefce3..724aefce3 100644
--- a/messages/sv/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/sv/LC_MESSAGES/mailman.po
diff --git a/messages/sv/README.sv b/Mailman/messages/sv/README.sv
index f74eaec5b..f74eaec5b 100644
--- a/messages/sv/README.sv
+++ b/Mailman/messages/sv/README.sv
diff --git a/messages/tr/LC_MESSAGES/mailman.po b/Mailman/messages/tr/LC_MESSAGES/mailman.po
index 273880afe..273880afe 100644
--- a/messages/tr/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/tr/LC_MESSAGES/mailman.po
diff --git a/messages/uk/LC_MESSAGES/mailman.po b/Mailman/messages/uk/LC_MESSAGES/mailman.po
index 296c0eecc..296c0eecc 100644
--- a/messages/uk/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/uk/LC_MESSAGES/mailman.po
diff --git a/messages/vi/LC_MESSAGES/mailman.po b/Mailman/messages/vi/LC_MESSAGES/mailman.po
index 880df992c..880df992c 100644
--- a/messages/vi/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/vi/LC_MESSAGES/mailman.po
diff --git a/messages/zh_CN/LC_MESSAGES/mailman.po b/Mailman/messages/zh_CN/LC_MESSAGES/mailman.po
index c5b2382d6..c5b2382d6 100644
--- a/messages/zh_CN/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/zh_CN/LC_MESSAGES/mailman.po
diff --git a/messages/zh_TW/LC_MESSAGES/mailman.po b/Mailman/messages/zh_TW/LC_MESSAGES/mailman.po
index 6c82e3794..6c82e3794 100644
--- a/messages/zh_TW/LC_MESSAGES/mailman.po
+++ b/Mailman/messages/zh_TW/LC_MESSAGES/mailman.po
diff --git a/templates/Makefile.in b/Mailman/templates/Makefile.in
index a69e558f4..a69e558f4 100644
--- a/templates/Makefile.in
+++ b/Mailman/templates/Makefile.in
diff --git a/bin/qrunner b/Mailman/templates/__init__.py
index e69de29bb..e69de29bb 100644
--- a/bin/qrunner
+++ b/Mailman/templates/__init__.py
diff --git a/templates/en/adminaddrchgack.txt b/Mailman/templates/en/adminaddrchgack.txt
index a24dd3d91..a24dd3d91 100644
--- a/templates/en/adminaddrchgack.txt
+++ b/Mailman/templates/en/adminaddrchgack.txt
diff --git a/templates/en/admindbdetails.html b/Mailman/templates/en/admindbdetails.html
index d97fcec11..d97fcec11 100644
--- a/templates/en/admindbdetails.html
+++ b/Mailman/templates/en/admindbdetails.html
diff --git a/templates/en/admindbpreamble.html b/Mailman/templates/en/admindbpreamble.html
index 659b77e72..659b77e72 100644
--- a/templates/en/admindbpreamble.html
+++ b/Mailman/templates/en/admindbpreamble.html
diff --git a/templates/en/admindbsummary.html b/Mailman/templates/en/admindbsummary.html
index 20ffef584..20ffef584 100644
--- a/templates/en/admindbsummary.html
+++ b/Mailman/templates/en/admindbsummary.html
diff --git a/templates/en/adminsubscribeack.txt b/Mailman/templates/en/adminsubscribeack.txt
index 388a3a240..388a3a240 100644
--- a/templates/en/adminsubscribeack.txt
+++ b/Mailman/templates/en/adminsubscribeack.txt
diff --git a/templates/en/adminunsubscribeack.txt b/Mailman/templates/en/adminunsubscribeack.txt
index 2ebcfeb70..2ebcfeb70 100644
--- a/templates/en/adminunsubscribeack.txt
+++ b/Mailman/templates/en/adminunsubscribeack.txt
diff --git a/templates/en/admlogin.html b/Mailman/templates/en/admlogin.html
index 03f763b95..03f763b95 100644
--- a/templates/en/admlogin.html
+++ b/Mailman/templates/en/admlogin.html
diff --git a/templates/en/approve.txt b/Mailman/templates/en/approve.txt
index dfb0dfb1e..dfb0dfb1e 100644
--- a/templates/en/approve.txt
+++ b/Mailman/templates/en/approve.txt
diff --git a/templates/en/archidxentry.html b/Mailman/templates/en/archidxentry.html
index f9bb57aab..f9bb57aab 100644
--- a/templates/en/archidxentry.html
+++ b/Mailman/templates/en/archidxentry.html
diff --git a/templates/en/archidxfoot.html b/Mailman/templates/en/archidxfoot.html
index 0b0a42075..0b0a42075 100644
--- a/templates/en/archidxfoot.html
+++ b/Mailman/templates/en/archidxfoot.html
diff --git a/templates/en/archidxhead.html b/Mailman/templates/en/archidxhead.html
index 4fdf4731d..4fdf4731d 100644
--- a/templates/en/archidxhead.html
+++ b/Mailman/templates/en/archidxhead.html
diff --git a/templates/en/archlistend.html b/Mailman/templates/en/archlistend.html
index 9bc052ddb..9bc052ddb 100644
--- a/templates/en/archlistend.html
+++ b/Mailman/templates/en/archlistend.html
diff --git a/templates/en/archliststart.html b/Mailman/templates/en/archliststart.html
index cdf5d17c4..cdf5d17c4 100644
--- a/templates/en/archliststart.html
+++ b/Mailman/templates/en/archliststart.html
diff --git a/templates/en/archtoc.html b/Mailman/templates/en/archtoc.html
index 6969d5152..6969d5152 100644
--- a/templates/en/archtoc.html
+++ b/Mailman/templates/en/archtoc.html
diff --git a/templates/en/archtocentry.html b/Mailman/templates/en/archtocentry.html
index 00cf9c47d..00cf9c47d 100644
--- a/templates/en/archtocentry.html
+++ b/Mailman/templates/en/archtocentry.html
diff --git a/templates/en/archtocnombox.html b/Mailman/templates/en/archtocnombox.html
index 0b1239ec8..0b1239ec8 100644
--- a/templates/en/archtocnombox.html
+++ b/Mailman/templates/en/archtocnombox.html
diff --git a/templates/en/article.html b/Mailman/templates/en/article.html
index 38dbc5543..38dbc5543 100644
--- a/templates/en/article.html
+++ b/Mailman/templates/en/article.html
diff --git a/templates/en/bounce.txt b/Mailman/templates/en/bounce.txt
index 8e02cc7a5..8e02cc7a5 100644
--- a/templates/en/bounce.txt
+++ b/Mailman/templates/en/bounce.txt
diff --git a/templates/en/checkdbs.txt b/Mailman/templates/en/checkdbs.txt
index d53925a4d..d53925a4d 100644
--- a/templates/en/checkdbs.txt
+++ b/Mailman/templates/en/checkdbs.txt
diff --git a/templates/en/convert.txt b/Mailman/templates/en/convert.txt
index ae17a79e0..ae17a79e0 100644
--- a/templates/en/convert.txt
+++ b/Mailman/templates/en/convert.txt
diff --git a/templates/en/cronpass.txt b/Mailman/templates/en/cronpass.txt
index 52ce5ea6c..52ce5ea6c 100644
--- a/templates/en/cronpass.txt
+++ b/Mailman/templates/en/cronpass.txt
diff --git a/templates/en/disabled.txt b/Mailman/templates/en/disabled.txt
index 54998a83b..54998a83b 100644
--- a/templates/en/disabled.txt
+++ b/Mailman/templates/en/disabled.txt
diff --git a/templates/en/emptyarchive.html b/Mailman/templates/en/emptyarchive.html
index 2f10766ce..2f10766ce 100644
--- a/templates/en/emptyarchive.html
+++ b/Mailman/templates/en/emptyarchive.html
diff --git a/templates/en/headfoot.html b/Mailman/templates/en/headfoot.html
index b2caf10f6..b2caf10f6 100644
--- a/templates/en/headfoot.html
+++ b/Mailman/templates/en/headfoot.html
diff --git a/templates/en/help.txt b/Mailman/templates/en/help.txt
index 654eda315..654eda315 100644
--- a/templates/en/help.txt
+++ b/Mailman/templates/en/help.txt
diff --git a/templates/en/invite.txt b/Mailman/templates/en/invite.txt
index 920c84213..920c84213 100644
--- a/templates/en/invite.txt
+++ b/Mailman/templates/en/invite.txt
diff --git a/templates/en/listinfo.html b/Mailman/templates/en/listinfo.html
index 0f0b5e614..0f0b5e614 100644
--- a/templates/en/listinfo.html
+++ b/Mailman/templates/en/listinfo.html
diff --git a/templates/en/masthead.txt b/Mailman/templates/en/masthead.txt
index 30c526ac9..30c526ac9 100644
--- a/templates/en/masthead.txt
+++ b/Mailman/templates/en/masthead.txt
diff --git a/templates/en/newlist.txt b/Mailman/templates/en/newlist.txt
index 3362887d8..3362887d8 100644
--- a/templates/en/newlist.txt
+++ b/Mailman/templates/en/newlist.txt
diff --git a/templates/en/nomoretoday.txt b/Mailman/templates/en/nomoretoday.txt
index 1019dce34..1019dce34 100644
--- a/templates/en/nomoretoday.txt
+++ b/Mailman/templates/en/nomoretoday.txt
diff --git a/templates/en/options.html b/Mailman/templates/en/options.html
index 8213b1f4b..8213b1f4b 100644
--- a/templates/en/options.html
+++ b/Mailman/templates/en/options.html
diff --git a/templates/en/postack.txt b/Mailman/templates/en/postack.txt
index 7402e4c2a..7402e4c2a 100644
--- a/templates/en/postack.txt
+++ b/Mailman/templates/en/postack.txt
diff --git a/templates/en/postauth.txt b/Mailman/templates/en/postauth.txt
index a10727716..a10727716 100644
--- a/templates/en/postauth.txt
+++ b/Mailman/templates/en/postauth.txt
diff --git a/templates/en/postheld.txt b/Mailman/templates/en/postheld.txt
index 877bb4050..877bb4050 100644
--- a/templates/en/postheld.txt
+++ b/Mailman/templates/en/postheld.txt
diff --git a/templates/en/private.html b/Mailman/templates/en/private.html
index 28ac9bfc8..28ac9bfc8 100644
--- a/templates/en/private.html
+++ b/Mailman/templates/en/private.html
diff --git a/templates/en/probe.txt b/Mailman/templates/en/probe.txt
index e0ae4ff57..e0ae4ff57 100644
--- a/templates/en/probe.txt
+++ b/Mailman/templates/en/probe.txt
diff --git a/templates/en/refuse.txt b/Mailman/templates/en/refuse.txt
index 9b6d9bb9c..9b6d9bb9c 100644
--- a/templates/en/refuse.txt
+++ b/Mailman/templates/en/refuse.txt
diff --git a/templates/en/roster.html b/Mailman/templates/en/roster.html
index aa5392ae4..aa5392ae4 100644
--- a/templates/en/roster.html
+++ b/Mailman/templates/en/roster.html
diff --git a/templates/en/subauth.txt b/Mailman/templates/en/subauth.txt
index 9c20c3dac..9c20c3dac 100644
--- a/templates/en/subauth.txt
+++ b/Mailman/templates/en/subauth.txt
diff --git a/templates/en/subscribe.html b/Mailman/templates/en/subscribe.html
index 20373877b..20373877b 100644
--- a/templates/en/subscribe.html
+++ b/Mailman/templates/en/subscribe.html
diff --git a/templates/en/subscribeack.txt b/Mailman/templates/en/subscribeack.txt
index fad433f28..fad433f28 100644
--- a/templates/en/subscribeack.txt
+++ b/Mailman/templates/en/subscribeack.txt
diff --git a/templates/en/unsub.txt b/Mailman/templates/en/unsub.txt
index b08f65bae..b08f65bae 100644
--- a/templates/en/unsub.txt
+++ b/Mailman/templates/en/unsub.txt
diff --git a/templates/en/unsubauth.txt b/Mailman/templates/en/unsubauth.txt
index 920f6c1b6..920f6c1b6 100644
--- a/templates/en/unsubauth.txt
+++ b/Mailman/templates/en/unsubauth.txt
diff --git a/templates/en/userpass.txt b/Mailman/templates/en/userpass.txt
index 2a53a846e..2a53a846e 100644
--- a/templates/en/userpass.txt
+++ b/Mailman/templates/en/userpass.txt
diff --git a/templates/en/verify.txt b/Mailman/templates/en/verify.txt
index 8e767f072..8e767f072 100644
--- a/templates/en/verify.txt
+++ b/Mailman/templates/en/verify.txt
diff --git a/Mailman/testing/Makefile.in b/Mailman/tests/Makefile.in
index 1326f67e5..1326f67e5 100644
--- a/Mailman/testing/Makefile.in
+++ b/Mailman/tests/Makefile.in
diff --git a/Mailman/tests/__init__.py b/Mailman/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/Mailman/tests/__init__.py
diff --git a/Mailman/testing/base.py b/Mailman/tests/base.py
index 562443b1e..562443b1e 100644
--- a/Mailman/testing/base.py
+++ b/Mailman/tests/base.py
diff --git a/Mailman/testing/bounces/Makefile.in b/Mailman/tests/bounces/Makefile.in
index 0c9b2759b..0c9b2759b 100644
--- a/Mailman/testing/bounces/Makefile.in
+++ b/Mailman/tests/bounces/Makefile.in
diff --git a/Mailman/tests/bounces/__init__.py b/Mailman/tests/bounces/__init__.py
new file mode 100755
index 000000000..e69de29bb
--- /dev/null
+++ b/Mailman/tests/bounces/__init__.py
diff --git a/Mailman/testing/bounces/bounce_01.txt b/Mailman/tests/bounces/bounce_01.txt
index ab7f45d47..ab7f45d47 100644
--- a/Mailman/testing/bounces/bounce_01.txt
+++ b/Mailman/tests/bounces/bounce_01.txt
diff --git a/Mailman/testing/bounces/bounce_02.txt b/Mailman/tests/bounces/bounce_02.txt
index 0f7d7f32d..0f7d7f32d 100644
--- a/Mailman/testing/bounces/bounce_02.txt
+++ b/Mailman/tests/bounces/bounce_02.txt
diff --git a/Mailman/testing/bounces/bounce_03.txt b/Mailman/tests/bounces/bounce_03.txt
index fc62dcab6..fc62dcab6 100644
--- a/Mailman/testing/bounces/bounce_03.txt
+++ b/Mailman/tests/bounces/bounce_03.txt
diff --git a/Mailman/testing/bounces/dsn_01.txt b/Mailman/tests/bounces/dsn_01.txt
index d09768c6a..d09768c6a 100644
--- a/Mailman/testing/bounces/dsn_01.txt
+++ b/Mailman/tests/bounces/dsn_01.txt
diff --git a/Mailman/testing/bounces/dsn_02.txt b/Mailman/tests/bounces/dsn_02.txt
index 3525605f8..3525605f8 100644
--- a/Mailman/testing/bounces/dsn_02.txt
+++ b/Mailman/tests/bounces/dsn_02.txt
diff --git a/Mailman/testing/bounces/dsn_03.txt b/Mailman/tests/bounces/dsn_03.txt
index 4e4fef058..4e4fef058 100644
--- a/Mailman/testing/bounces/dsn_03.txt
+++ b/Mailman/tests/bounces/dsn_03.txt
diff --git a/Mailman/testing/bounces/dsn_04.txt b/Mailman/tests/bounces/dsn_04.txt
index 9bea97589..9bea97589 100644
--- a/Mailman/testing/bounces/dsn_04.txt
+++ b/Mailman/tests/bounces/dsn_04.txt
diff --git a/Mailman/testing/bounces/dsn_05.txt b/Mailman/tests/bounces/dsn_05.txt
index 73331578e..73331578e 100644
--- a/Mailman/testing/bounces/dsn_05.txt
+++ b/Mailman/tests/bounces/dsn_05.txt
diff --git a/Mailman/testing/bounces/dsn_06.txt b/Mailman/tests/bounces/dsn_06.txt
index 22f69760a..22f69760a 100644
--- a/Mailman/testing/bounces/dsn_06.txt
+++ b/Mailman/tests/bounces/dsn_06.txt
diff --git a/Mailman/testing/bounces/dsn_07.txt b/Mailman/tests/bounces/dsn_07.txt
index 2e5a0e5d8..2e5a0e5d8 100644
--- a/Mailman/testing/bounces/dsn_07.txt
+++ b/Mailman/tests/bounces/dsn_07.txt
diff --git a/Mailman/testing/bounces/dsn_08.txt b/Mailman/tests/bounces/dsn_08.txt
index 8d4d3b8b6..8d4d3b8b6 100644
--- a/Mailman/testing/bounces/dsn_08.txt
+++ b/Mailman/tests/bounces/dsn_08.txt
diff --git a/Mailman/testing/bounces/dsn_09.txt b/Mailman/tests/bounces/dsn_09.txt
index 89c0f9add..89c0f9add 100644
--- a/Mailman/testing/bounces/dsn_09.txt
+++ b/Mailman/tests/bounces/dsn_09.txt
diff --git a/Mailman/testing/bounces/dsn_10.txt b/Mailman/tests/bounces/dsn_10.txt
index d37aa1745..d37aa1745 100644
--- a/Mailman/testing/bounces/dsn_10.txt
+++ b/Mailman/tests/bounces/dsn_10.txt
diff --git a/Mailman/testing/bounces/dsn_11.txt b/Mailman/tests/bounces/dsn_11.txt
index f3e8acaa7..f3e8acaa7 100644
--- a/Mailman/testing/bounces/dsn_11.txt
+++ b/Mailman/tests/bounces/dsn_11.txt
diff --git a/Mailman/testing/bounces/dsn_12.txt b/Mailman/tests/bounces/dsn_12.txt
index 473abb8b2..473abb8b2 100644
--- a/Mailman/testing/bounces/dsn_12.txt
+++ b/Mailman/tests/bounces/dsn_12.txt
diff --git a/Mailman/testing/bounces/dsn_13.txt b/Mailman/tests/bounces/dsn_13.txt
index c9156f3af..c9156f3af 100644
--- a/Mailman/testing/bounces/dsn_13.txt
+++ b/Mailman/tests/bounces/dsn_13.txt
diff --git a/Mailman/testing/bounces/dsn_14.txt b/Mailman/tests/bounces/dsn_14.txt
index 448b4e042..448b4e042 100644
--- a/Mailman/testing/bounces/dsn_14.txt
+++ b/Mailman/tests/bounces/dsn_14.txt
diff --git a/Mailman/testing/bounces/dsn_15.txt b/Mailman/tests/bounces/dsn_15.txt
index 37d5460c9..37d5460c9 100644
--- a/Mailman/testing/bounces/dsn_15.txt
+++ b/Mailman/tests/bounces/dsn_15.txt
diff --git a/Mailman/testing/bounces/dumbass_01.txt b/Mailman/tests/bounces/dumbass_01.txt
index c4e40d4b0..c4e40d4b0 100644
--- a/Mailman/testing/bounces/dumbass_01.txt
+++ b/Mailman/tests/bounces/dumbass_01.txt
diff --git a/Mailman/testing/bounces/exim_01.txt b/Mailman/tests/bounces/exim_01.txt
index 42ceb0b0a..42ceb0b0a 100644
--- a/Mailman/testing/bounces/exim_01.txt
+++ b/Mailman/tests/bounces/exim_01.txt
diff --git a/Mailman/testing/bounces/groupwise_01.txt b/Mailman/tests/bounces/groupwise_01.txt
index 68101ba07..68101ba07 100644
--- a/Mailman/testing/bounces/groupwise_01.txt
+++ b/Mailman/tests/bounces/groupwise_01.txt
diff --git a/Mailman/testing/bounces/groupwise_02.txt b/Mailman/tests/bounces/groupwise_02.txt
index 3abfdf869..3abfdf869 100644
--- a/Mailman/testing/bounces/groupwise_02.txt
+++ b/Mailman/tests/bounces/groupwise_02.txt
diff --git a/Mailman/testing/bounces/hotpop_01.txt b/Mailman/tests/bounces/hotpop_01.txt
index 970c39985..970c39985 100644
--- a/Mailman/testing/bounces/hotpop_01.txt
+++ b/Mailman/tests/bounces/hotpop_01.txt
diff --git a/Mailman/testing/bounces/llnl_01.txt b/Mailman/tests/bounces/llnl_01.txt
index 9a6de7f9a..9a6de7f9a 100644
--- a/Mailman/testing/bounces/llnl_01.txt
+++ b/Mailman/tests/bounces/llnl_01.txt
diff --git a/Mailman/testing/bounces/microsoft_01.txt b/Mailman/tests/bounces/microsoft_01.txt
index 92465f78b..92465f78b 100644
--- a/Mailman/testing/bounces/microsoft_01.txt
+++ b/Mailman/tests/bounces/microsoft_01.txt
diff --git a/Mailman/testing/bounces/microsoft_02.txt b/Mailman/tests/bounces/microsoft_02.txt
index 3c6c5416d..3c6c5416d 100644
--- a/Mailman/testing/bounces/microsoft_02.txt
+++ b/Mailman/tests/bounces/microsoft_02.txt
diff --git a/Mailman/testing/bounces/microsoft_03.txt b/Mailman/tests/bounces/microsoft_03.txt
index e4216e0c9..e4216e0c9 100644
--- a/Mailman/testing/bounces/microsoft_03.txt
+++ b/Mailman/tests/bounces/microsoft_03.txt
diff --git a/Mailman/testing/bounces/netscape_01.txt b/Mailman/tests/bounces/netscape_01.txt
index adcde15b9..adcde15b9 100644
--- a/Mailman/testing/bounces/netscape_01.txt
+++ b/Mailman/tests/bounces/netscape_01.txt
diff --git a/Mailman/testing/bounces/newmailru_01.txt b/Mailman/tests/bounces/newmailru_01.txt
index 7802c1516..7802c1516 100644
--- a/Mailman/testing/bounces/newmailru_01.txt
+++ b/Mailman/tests/bounces/newmailru_01.txt
diff --git a/Mailman/testing/bounces/postfix_01.txt b/Mailman/tests/bounces/postfix_01.txt
index 186cc7633..186cc7633 100644
--- a/Mailman/testing/bounces/postfix_01.txt
+++ b/Mailman/tests/bounces/postfix_01.txt
diff --git a/Mailman/testing/bounces/postfix_02.txt b/Mailman/tests/bounces/postfix_02.txt
index c4065816e..c4065816e 100644
--- a/Mailman/testing/bounces/postfix_02.txt
+++ b/Mailman/tests/bounces/postfix_02.txt
diff --git a/Mailman/testing/bounces/postfix_03.txt b/Mailman/tests/bounces/postfix_03.txt
index 5204712c4..5204712c4 100644
--- a/Mailman/testing/bounces/postfix_03.txt
+++ b/Mailman/tests/bounces/postfix_03.txt
diff --git a/Mailman/testing/bounces/postfix_04.txt b/Mailman/tests/bounces/postfix_04.txt
index 86a60ea8d..86a60ea8d 100644
--- a/Mailman/testing/bounces/postfix_04.txt
+++ b/Mailman/tests/bounces/postfix_04.txt
diff --git a/Mailman/testing/bounces/postfix_05.txt b/Mailman/tests/bounces/postfix_05.txt
index 4bd56d60a..4bd56d60a 100644
--- a/Mailman/testing/bounces/postfix_05.txt
+++ b/Mailman/tests/bounces/postfix_05.txt
diff --git a/Mailman/testing/bounces/qmail_01.txt b/Mailman/tests/bounces/qmail_01.txt
index dbe6f4351..dbe6f4351 100644
--- a/Mailman/testing/bounces/qmail_01.txt
+++ b/Mailman/tests/bounces/qmail_01.txt
diff --git a/Mailman/testing/bounces/qmail_02.txt b/Mailman/tests/bounces/qmail_02.txt
index ad3a232f1..ad3a232f1 100644
--- a/Mailman/testing/bounces/qmail_02.txt
+++ b/Mailman/tests/bounces/qmail_02.txt
diff --git a/Mailman/testing/bounces/qmail_03.txt b/Mailman/tests/bounces/qmail_03.txt
index 04e352806..04e352806 100644
--- a/Mailman/testing/bounces/qmail_03.txt
+++ b/Mailman/tests/bounces/qmail_03.txt
diff --git a/Mailman/testing/bounces/qmail_04.txt b/Mailman/tests/bounces/qmail_04.txt
index dae2db011..dae2db011 100644
--- a/Mailman/testing/bounces/qmail_04.txt
+++ b/Mailman/tests/bounces/qmail_04.txt
diff --git a/Mailman/testing/bounces/qmail_05.txt b/Mailman/tests/bounces/qmail_05.txt
index dd581cdab..dd581cdab 100644
--- a/Mailman/testing/bounces/qmail_05.txt
+++ b/Mailman/tests/bounces/qmail_05.txt
diff --git a/Mailman/testing/bounces/sendmail_01.txt b/Mailman/tests/bounces/sendmail_01.txt
index cfea95a2f..cfea95a2f 100644
--- a/Mailman/testing/bounces/sendmail_01.txt
+++ b/Mailman/tests/bounces/sendmail_01.txt
diff --git a/Mailman/testing/bounces/simple_01.txt b/Mailman/tests/bounces/simple_01.txt
index f2d2669f6..f2d2669f6 100644
--- a/Mailman/testing/bounces/simple_01.txt
+++ b/Mailman/tests/bounces/simple_01.txt
diff --git a/Mailman/testing/bounces/simple_02.txt b/Mailman/tests/bounces/simple_02.txt
index f017fa25d..f017fa25d 100644
--- a/Mailman/testing/bounces/simple_02.txt
+++ b/Mailman/tests/bounces/simple_02.txt
diff --git a/Mailman/testing/bounces/simple_03.txt b/Mailman/tests/bounces/simple_03.txt
index 16fc04d63..16fc04d63 100644
--- a/Mailman/testing/bounces/simple_03.txt
+++ b/Mailman/tests/bounces/simple_03.txt
diff --git a/Mailman/testing/bounces/simple_04.txt b/Mailman/tests/bounces/simple_04.txt
index 022a31980..022a31980 100644
--- a/Mailman/testing/bounces/simple_04.txt
+++ b/Mailman/tests/bounces/simple_04.txt
diff --git a/Mailman/testing/bounces/simple_05.txt b/Mailman/tests/bounces/simple_05.txt
index c67113b40..c67113b40 100644
--- a/Mailman/testing/bounces/simple_05.txt
+++ b/Mailman/tests/bounces/simple_05.txt
diff --git a/Mailman/testing/bounces/simple_06.txt b/Mailman/tests/bounces/simple_06.txt
index bbb2b7573..bbb2b7573 100644
--- a/Mailman/testing/bounces/simple_06.txt
+++ b/Mailman/tests/bounces/simple_06.txt
diff --git a/Mailman/testing/bounces/simple_07.txt b/Mailman/tests/bounces/simple_07.txt
index 46930ec4a..46930ec4a 100644
--- a/Mailman/testing/bounces/simple_07.txt
+++ b/Mailman/tests/bounces/simple_07.txt
diff --git a/Mailman/testing/bounces/simple_08.txt b/Mailman/tests/bounces/simple_08.txt
index c2067ce53..c2067ce53 100644
--- a/Mailman/testing/bounces/simple_08.txt
+++ b/Mailman/tests/bounces/simple_08.txt
diff --git a/Mailman/testing/bounces/simple_09.txt b/Mailman/tests/bounces/simple_09.txt
index 340c410b7..340c410b7 100644
--- a/Mailman/testing/bounces/simple_09.txt
+++ b/Mailman/tests/bounces/simple_09.txt
diff --git a/Mailman/testing/bounces/simple_10.txt b/Mailman/tests/bounces/simple_10.txt
index dfc9c3cf0..dfc9c3cf0 100644
--- a/Mailman/testing/bounces/simple_10.txt
+++ b/Mailman/tests/bounces/simple_10.txt
diff --git a/Mailman/testing/bounces/simple_11.txt b/Mailman/tests/bounces/simple_11.txt
index 2d046db5c..2d046db5c 100644
--- a/Mailman/testing/bounces/simple_11.txt
+++ b/Mailman/tests/bounces/simple_11.txt
diff --git a/Mailman/testing/bounces/simple_12.txt b/Mailman/tests/bounces/simple_12.txt
index b2146d46d..b2146d46d 100644
--- a/Mailman/testing/bounces/simple_12.txt
+++ b/Mailman/tests/bounces/simple_12.txt
diff --git a/Mailman/testing/bounces/simple_13.txt b/Mailman/tests/bounces/simple_13.txt
index 1cbe0f955..1cbe0f955 100644
--- a/Mailman/testing/bounces/simple_13.txt
+++ b/Mailman/tests/bounces/simple_13.txt
diff --git a/Mailman/testing/bounces/simple_14.txt b/Mailman/tests/bounces/simple_14.txt
index caffd77b7..caffd77b7 100644
--- a/Mailman/testing/bounces/simple_14.txt
+++ b/Mailman/tests/bounces/simple_14.txt
diff --git a/Mailman/testing/bounces/simple_15.txt b/Mailman/tests/bounces/simple_15.txt
index 522096a72..522096a72 100644
--- a/Mailman/testing/bounces/simple_15.txt
+++ b/Mailman/tests/bounces/simple_15.txt
diff --git a/Mailman/testing/bounces/simple_16.txt b/Mailman/tests/bounces/simple_16.txt
index 4ab1f1bee..4ab1f1bee 100644
--- a/Mailman/testing/bounces/simple_16.txt
+++ b/Mailman/tests/bounces/simple_16.txt
diff --git a/Mailman/testing/bounces/simple_17.txt b/Mailman/tests/bounces/simple_17.txt
index 10c8aac5a..10c8aac5a 100644
--- a/Mailman/testing/bounces/simple_17.txt
+++ b/Mailman/tests/bounces/simple_17.txt
diff --git a/Mailman/testing/bounces/simple_18.txt b/Mailman/tests/bounces/simple_18.txt
index 46bf0ea5d..46bf0ea5d 100644
--- a/Mailman/testing/bounces/simple_18.txt
+++ b/Mailman/tests/bounces/simple_18.txt
diff --git a/Mailman/testing/bounces/simple_19.txt b/Mailman/tests/bounces/simple_19.txt
index 2624fb607..2624fb607 100644
--- a/Mailman/testing/bounces/simple_19.txt
+++ b/Mailman/tests/bounces/simple_19.txt
diff --git a/Mailman/testing/bounces/simple_20.txt b/Mailman/tests/bounces/simple_20.txt
index 307619f7f..307619f7f 100644
--- a/Mailman/testing/bounces/simple_20.txt
+++ b/Mailman/tests/bounces/simple_20.txt
diff --git a/Mailman/testing/bounces/simple_21.txt b/Mailman/tests/bounces/simple_21.txt
index bc7af7e40..bc7af7e40 100644
--- a/Mailman/testing/bounces/simple_21.txt
+++ b/Mailman/tests/bounces/simple_21.txt
diff --git a/Mailman/testing/bounces/simple_22.txt b/Mailman/tests/bounces/simple_22.txt
index 7a72548ed..7a72548ed 100644
--- a/Mailman/testing/bounces/simple_22.txt
+++ b/Mailman/tests/bounces/simple_22.txt
diff --git a/Mailman/testing/bounces/simple_23.txt b/Mailman/tests/bounces/simple_23.txt
index ba87070ff..ba87070ff 100644
--- a/Mailman/testing/bounces/simple_23.txt
+++ b/Mailman/tests/bounces/simple_23.txt
diff --git a/Mailman/testing/bounces/simple_24.txt b/Mailman/tests/bounces/simple_24.txt
index fb9929774..fb9929774 100644
--- a/Mailman/testing/bounces/simple_24.txt
+++ b/Mailman/tests/bounces/simple_24.txt
diff --git a/Mailman/testing/bounces/simple_25.txt b/Mailman/tests/bounces/simple_25.txt
index bc4ba9247..bc4ba9247 100644
--- a/Mailman/testing/bounces/simple_25.txt
+++ b/Mailman/tests/bounces/simple_25.txt
diff --git a/Mailman/testing/bounces/simple_26.txt b/Mailman/tests/bounces/simple_26.txt
index e4f6af6c8..e4f6af6c8 100644
--- a/Mailman/testing/bounces/simple_26.txt
+++ b/Mailman/tests/bounces/simple_26.txt
diff --git a/Mailman/testing/bounces/simple_27.txt b/Mailman/tests/bounces/simple_27.txt
index 323f8e36a..323f8e36a 100644
--- a/Mailman/testing/bounces/simple_27.txt
+++ b/Mailman/tests/bounces/simple_27.txt
diff --git a/Mailman/testing/bounces/sina_01.txt b/Mailman/tests/bounces/sina_01.txt
index 366500a94..366500a94 100644
--- a/Mailman/testing/bounces/sina_01.txt
+++ b/Mailman/tests/bounces/sina_01.txt
diff --git a/Mailman/testing/bounces/smtp32_01.txt b/Mailman/tests/bounces/smtp32_01.txt
index decf0ddcc..decf0ddcc 100644
--- a/Mailman/testing/bounces/smtp32_01.txt
+++ b/Mailman/tests/bounces/smtp32_01.txt
diff --git a/Mailman/testing/bounces/smtp32_02.txt b/Mailman/tests/bounces/smtp32_02.txt
index 3336a28d4..3336a28d4 100644
--- a/Mailman/testing/bounces/smtp32_02.txt
+++ b/Mailman/tests/bounces/smtp32_02.txt
diff --git a/Mailman/testing/bounces/smtp32_03.txt b/Mailman/tests/bounces/smtp32_03.txt
index 0c284afcb..0c284afcb 100644
--- a/Mailman/testing/bounces/smtp32_03.txt
+++ b/Mailman/tests/bounces/smtp32_03.txt
diff --git a/Mailman/testing/bounces/smtp32_04.txt b/Mailman/tests/bounces/smtp32_04.txt
index 813d956a0..813d956a0 100644
--- a/Mailman/testing/bounces/smtp32_04.txt
+++ b/Mailman/tests/bounces/smtp32_04.txt
diff --git a/Mailman/testing/bounces/smtp32_05.txt b/Mailman/tests/bounces/smtp32_05.txt
index 92997ace2..92997ace2 100644
--- a/Mailman/testing/bounces/smtp32_05.txt
+++ b/Mailman/tests/bounces/smtp32_05.txt
diff --git a/Mailman/testing/bounces/smtp32_06.txt b/Mailman/tests/bounces/smtp32_06.txt
index ec7cc9522..ec7cc9522 100644
--- a/Mailman/testing/bounces/smtp32_06.txt
+++ b/Mailman/tests/bounces/smtp32_06.txt
diff --git a/Mailman/testing/bounces/yahoo_01.txt b/Mailman/tests/bounces/yahoo_01.txt
index 0758957f3..0758957f3 100644
--- a/Mailman/testing/bounces/yahoo_01.txt
+++ b/Mailman/tests/bounces/yahoo_01.txt
diff --git a/Mailman/testing/bounces/yahoo_02.txt b/Mailman/tests/bounces/yahoo_02.txt
index 90d835dc9..90d835dc9 100644
--- a/Mailman/testing/bounces/yahoo_02.txt
+++ b/Mailman/tests/bounces/yahoo_02.txt
Binary files differ
diff --git a/Mailman/testing/bounces/yahoo_03.txt b/Mailman/tests/bounces/yahoo_03.txt
index 9de32a43b..9de32a43b 100644
--- a/Mailman/testing/bounces/yahoo_03.txt
+++ b/Mailman/tests/bounces/yahoo_03.txt
diff --git a/Mailman/testing/bounces/yahoo_04.txt b/Mailman/tests/bounces/yahoo_04.txt
index cf6036360..cf6036360 100644
--- a/Mailman/testing/bounces/yahoo_04.txt
+++ b/Mailman/tests/bounces/yahoo_04.txt
diff --git a/Mailman/testing/bounces/yahoo_05.txt b/Mailman/tests/bounces/yahoo_05.txt
index 56d1a3018..56d1a3018 100644
--- a/Mailman/testing/bounces/yahoo_05.txt
+++ b/Mailman/tests/bounces/yahoo_05.txt
diff --git a/Mailman/testing/bounces/yahoo_06.txt b/Mailman/tests/bounces/yahoo_06.txt
index 16c04fd65..16c04fd65 100644
--- a/Mailman/testing/bounces/yahoo_06.txt
+++ b/Mailman/tests/bounces/yahoo_06.txt
diff --git a/Mailman/testing/bounces/yahoo_07.txt b/Mailman/tests/bounces/yahoo_07.txt
index 1f35e70f0..1f35e70f0 100644
--- a/Mailman/testing/bounces/yahoo_07.txt
+++ b/Mailman/tests/bounces/yahoo_07.txt
diff --git a/Mailman/testing/bounces/yahoo_08.txt b/Mailman/tests/bounces/yahoo_08.txt
index c531cef9b..c531cef9b 100644
--- a/Mailman/testing/bounces/yahoo_08.txt
+++ b/Mailman/tests/bounces/yahoo_08.txt
diff --git a/Mailman/testing/bounces/yahoo_09.txt b/Mailman/tests/bounces/yahoo_09.txt
index f8067a5b4..f8067a5b4 100644
--- a/Mailman/testing/bounces/yahoo_09.txt
+++ b/Mailman/tests/bounces/yahoo_09.txt
diff --git a/Mailman/testing/bounces/yahoo_10.txt b/Mailman/tests/bounces/yahoo_10.txt
index 958b90924..958b90924 100644
--- a/Mailman/testing/bounces/yahoo_10.txt
+++ b/Mailman/tests/bounces/yahoo_10.txt
diff --git a/Mailman/testing/bounces/yale_01.txt b/Mailman/tests/bounces/yale_01.txt
index 7be4754eb..7be4754eb 100644
--- a/Mailman/testing/bounces/yale_01.txt
+++ b/Mailman/tests/bounces/yale_01.txt
diff --git a/Mailman/testing/emailbase.py b/Mailman/tests/emailbase.py
index d0fdbf7d4..21b85ad63 100644
--- a/Mailman/testing/emailbase.py
+++ b/Mailman/tests/emailbase.py
@@ -26,7 +26,7 @@ import asyncore
import subprocess
from Mailman.configuration import config
-from Mailman.testing.base import TestBase
+from Mailman.tests.base import TestBase
TESTPORT = 10825
diff --git a/Mailman/testing/test_bounces.py b/Mailman/tests/test_bounces.py
index 54c82ff68..ebc7c6c4d 100644
--- a/Mailman/testing/test_bounces.py
+++ b/Mailman/tests/test_bounces.py
@@ -17,14 +17,18 @@
"""Test the bounce detection modules."""
+from __future__ import with_statement
+
import os
import sys
import email
import unittest
-from paths import prefix
+import Mailman.tests.bounces
from Mailman.Bouncers.BouncerAPI import Stop
+MSGDIR = os.path.dirname(Mailman.tests.bounces.__file__)
+
class BounceTest(unittest.TestCase):
@@ -157,15 +161,13 @@ class BounceTest(unittest.TestCase):
)
def test_bounce(self):
- for modname, file, addrs in self.DATA:
+ for modname, filename, addrs in self.DATA:
module = 'Mailman.Bouncers.' + modname
__import__(module)
- fp = open(os.path.join(prefix, 'Mailman', 'testing', 'bounces',
- file))
- try:
+ # XXX Convert this tousing package resources
+ path = os.path.join(MSGDIR, filename)
+ with open(path) as fp:
msg = email.message_from_file(fp)
- finally:
- fp.close()
foundaddrs = sys.modules[module].process(msg)
# Some modules return None instead of [] for failure
if foundaddrs is None:
@@ -181,12 +183,8 @@ class BounceTest(unittest.TestCase):
def test_SMTP32_failure(self):
from Mailman.Bouncers import SMTP32
# This file has no X-Mailer: header
- fp = open(os.path.join(prefix, 'Mailman', 'testing', 'bounces',
- 'postfix_01.txt'))
- try:
+ with open(os.path.join(MSGDIR, 'postfix_01.txt')) as fp:
msg = email.message_from_file(fp)
- finally:
- fp.close()
self.failIf(msg['x-mailer'] is not None)
self.failIf(SMTP32.process(msg))
diff --git a/Mailman/testing/test_documentation.py b/Mailman/tests/test_documentation.py
index c5fb62302..c5fb62302 100644
--- a/Mailman/testing/test_documentation.py
+++ b/Mailman/tests/test_documentation.py
diff --git a/Mailman/testing/test_handlers.py b/Mailman/tests/test_handlers.py
index 6901d4527..b4cb390ce 100644
--- a/Mailman/testing/test_handlers.py
+++ b/Mailman/tests/test_handlers.py
@@ -25,7 +25,6 @@ from Mailman import Message
from Mailman import passwords
from Mailman.MailList import MailList
from Mailman.configuration import config
-from Mailman.testing.base import TestBase
from Mailman.Handlers import Approve
# Don't test handlers such as SMTPDirect and Sendmail here
@@ -37,7 +36,7 @@ def password(cleartext):
-class TestApprove(TestBase):
+class TestApprove(unittest.TestCase):
def test_short_circuit(self):
msgdata = {'approved': 1}
rtn = Approve.process(self._mlist, None, msgdata)
diff --git a/Mailman/testing/test_lockfile.py b/Mailman/tests/test_lockfile.py
index ae0753578..ae0753578 100644
--- a/Mailman/testing/test_lockfile.py
+++ b/Mailman/tests/test_lockfile.py
diff --git a/Mailman/testing/test_membership.py b/Mailman/tests/test_membership.py
index c6f854f0c..b874ee67c 100644
--- a/Mailman/testing/test_membership.py
+++ b/Mailman/tests/test_membership.py
@@ -28,7 +28,6 @@ from Mailman import passwords
from Mailman.Errors import NotAMemberError
from Mailman.UserDesc import UserDesc
from Mailman.configuration import config
-from Mailman.testing.base import TestBase
@@ -37,7 +36,7 @@ def password(cleartext):
-class TestNoMembers(TestBase):
+class TestNoMembers(unittest.TestCase):
def test_no_member(self):
eq = self.assertEqual
raises = self.assertRaises
@@ -81,9 +80,8 @@ class TestNoMembers(TestBase):
-class TestMembers(TestBase):
+class TestMembers(unittest.TestCase):
def setUp(self):
- TestBase.setUp(self)
self._member_password = password('xxXXxx')
self._mlist.addNewMember('person@dom.ain',
digest=0,
diff --git a/Mailman/testing/test_passwords.py b/Mailman/tests/test_passwords.py
index 8298c22f6..8298c22f6 100644
--- a/Mailman/testing/test_passwords.py
+++ b/Mailman/tests/test_passwords.py
diff --git a/Mailman/testing/test_safedict.py b/Mailman/tests/test_safedict.py
index 699fef5f6..699fef5f6 100644
--- a/Mailman/testing/test_safedict.py
+++ b/Mailman/tests/test_safedict.py
diff --git a/Mailman/testing/test_security_mgr.py b/Mailman/tests/test_security_mgr.py
index ea6840127..4a9a6919e 100644
--- a/Mailman/testing/test_security_mgr.py
+++ b/Mailman/tests/test_security_mgr.py
@@ -31,7 +31,6 @@ from Mailman import Errors
from Mailman import Utils
from Mailman import passwords
from Mailman.configuration import config
-from Mailman.testing.base import TestBase
@@ -40,7 +39,7 @@ def password(cleartext):
-class TestSecurityManager(TestBase):
+class TestSecurityManager(unittest.TestCase):
def test_init_vars(self):
eq = self.assertEqual
eq(self._mlist.mod_password, None)
@@ -83,9 +82,8 @@ class TestSecurityManager(TestBase):
-class TestAuthenticate(TestBase):
+class TestAuthenticate(unittest.TestCase):
def setUp(self):
- TestBase.setUp(self)
Utils.set_global_password('bbBBbb', siteadmin=True)
Utils.set_global_password('ccCCcc', siteadmin=False)
@@ -98,7 +96,6 @@ class TestAuthenticate(TestBase):
os.unlink(config.LISTCREATOR_PW_FILE)
except OSError, e:
if e.errno <> errno.ENOENT: raise
- TestBase.tearDown(self)
def test_auth_creator(self):
self.assertEqual(self._mlist.Authenticate(
@@ -171,9 +168,8 @@ class StripperIO(StringIO):
StringIO.write(self, s)
-class TestWebAuthenticate(TestBase):
+class TestWebAuthenticate(unittest.TestCase):
def setUp(self):
- TestBase.setUp(self)
Utils.set_global_password('bbBBbb', siteadmin=True)
Utils.set_global_password('ccCCcc', siteadmin=False)
mlist = self._mlist
@@ -200,7 +196,6 @@ class TestWebAuthenticate(TestBase):
except OSError, e:
if e.errno <> errno.ENOENT: raise
del os.environ['HTTP_COOKIE']
- TestBase.tearDown(self)
def test_auth_site_admin(self):
self.failUnless(self._mlist.WebAuthenticate(
diff --git a/Mailman/testing/testing.cfg.in b/Mailman/tests/testing.cfg.in
index 2609ef5cf..074806cb1 100644
--- a/Mailman/testing/testing.cfg.in
+++ b/Mailman/tests/testing.cfg.in
@@ -10,4 +10,4 @@ MTA = None
add_domain('example.com', 'www.example.com')
-# bin/testall will add a SQLALCHEMY_ENGINE_URL below
+# bin/testall will add additional runtime configuration variables here.
diff --git a/Mailman/versions.py b/Mailman/versions.py
index d0e548d6c..8052db346 100644
--- a/Mailman/versions.py
+++ b/Mailman/versions.py
@@ -35,10 +35,10 @@ run again until another version change is detected.
import email
import logging
-from Mailman import mm_cfg
from Mailman import Message
from Mailman import Utils
from Mailman.MemberAdaptor import UNKNOWN
+from Mailman.configuration import config
log = logging.getLogger('mailman.error')
@@ -101,7 +101,7 @@ def UpdateOldVars(l, stored_state):
# Migrate to 2.1b3, baw 13-Oct-2001
# Basic defaults for new variables
if not hasattr(l, 'default_member_moderation'):
- l.default_member_moderation = mm_cfg.DEFAULT_DEFAULT_MEMBER_MODERATION
+ l.default_member_moderation = config.DEFAULT_DEFAULT_MEMBER_MODERATION
if not hasattr(l, 'accept_these_nonmembers'):
l.accept_these_nonmembers = []
if not hasattr(l, 'hold_these_nonmembers'):
@@ -111,9 +111,9 @@ def UpdateOldVars(l, stored_state):
if not hasattr(l, 'discard_these_nonmembers'):
l.discard_these_nonmembers = []
if not hasattr(l, 'forward_auto_discards'):
- l.forward_auto_discards = mm_cfg.DEFAULT_FORWARD_AUTO_DISCARDS
+ l.forward_auto_discards = config.DEFAULT_FORWARD_AUTO_DISCARDS
if not hasattr(l, 'generic_nonmember_action'):
- l.generic_nonmember_action = mm_cfg.DEFAULT_GENERIC_NONMEMBER_ACTION
+ l.generic_nonmember_action = config.DEFAULT_GENERIC_NONMEMBER_ACTION
# Now convert what we can... Note that the interaction between the
# MM2.0.x attributes `moderated', `member_posting_only', and `posters' is
# so confusing, it makes my brain really ache. Which is why they go away
@@ -177,7 +177,7 @@ def UpdateOldVars(l, stored_state):
if not l.isMember(addr):
l.accept_these_nonmembers.append(addr)
for member in l.getMembers():
- l.setMemberOption(member, mm_cfg.Moderate,
+ l.setMemberOption(member, config.Moderate,
# reset for explicitly named members
member not in l.posters)
l.generic_nonmember_action = 1
@@ -187,12 +187,12 @@ def UpdateOldVars(l, stored_state):
if not l.isMember(addr):
l.accept_these_nonmembers.append(addr)
for member in l.getMembers():
- l.setMemberOption(member, mm_cfg.Moderate, 0)
+ l.setMemberOption(member, config.Moderate, 0)
l.generic_nonmember_action = 1
l.default_member_moderation = 0
elif not l.posters:
for member in l.getMembers():
- l.setMemberOption(member, mm_cfg.Moderate, 0)
+ l.setMemberOption(member, config.Moderate, 0)
l.generic_nonmember_action = 0
l.default_member_moderation = 0
else:
@@ -200,7 +200,7 @@ def UpdateOldVars(l, stored_state):
if not l.isMember(addr):
l.accept_these_nonmembers.append(addr)
for member in l.getMembers():
- l.setMemberOption(member, mm_cfg.Moderate,
+ l.setMemberOption(member, config.Moderate,
# reset for explicitly named members
member not in l.posters)
l.generic_nonmember_action = 1
@@ -216,14 +216,14 @@ def UpdateOldVars(l, stored_state):
forbiddens = l.forbidden_posters
for addr in forbiddens:
if l.isMember(addr):
- l.setMemberOption(addr, mm_cfg.Moderate, 1)
+ l.setMemberOption(addr, config.Moderate, 1)
else:
l.hold_these_nonmembers.append(addr)
del l.forbidden_posters
# Migrate to 1.0b6, klm 10/22/1998:
PreferStored('reminders_to_admins', 'umbrella_list',
- mm_cfg.DEFAULT_UMBRELLA_LIST)
+ config.DEFAULT_UMBRELLA_LIST)
# Migrate up to 1.0b5:
PreferStored('auto_subscribe', 'open_subscribe')
@@ -234,7 +234,7 @@ def UpdateOldVars(l, stored_state):
PreferStored('automatically_remove', 'automatic_bounce_action')
if hasattr(l, "open_subscribe"):
if l.open_subscribe:
- if mm_cfg.ALLOW_OPEN_SUBSCRIBE:
+ if config.ALLOW_OPEN_SUBSCRIBE:
l.subscribe_policy = 0
else:
l.subscribe_policy = 1
@@ -242,10 +242,10 @@ def UpdateOldVars(l, stored_state):
l.subscribe_policy = 2 # admin approval
delattr(l, "open_subscribe")
if not hasattr(l, "administrivia"):
- setattr(l, "administrivia", mm_cfg.DEFAULT_ADMINISTRIVIA)
+ setattr(l, "administrivia", config.DEFAULT_ADMINISTRIVIA)
if not hasattr(l, "admin_member_chunksize"):
setattr(l, "admin_member_chunksize",
- mm_cfg.DEFAULT_ADMIN_MEMBER_CHUNKSIZE)
+ config.DEFAULT_ADMIN_MEMBER_CHUNKSIZE)
#
# this attribute was added then deleted, so there are a number of
# cases to take care of
@@ -282,7 +282,7 @@ def UpdateOldVars(l, stored_state):
#
if not hasattr(l, "admin_notify_mchanges"):
setattr(l, "admin_notify_mchanges",
- mm_cfg.DEFAULT_ADMIN_NOTIFY_MCHANGES)
+ config.DEFAULT_ADMIN_NOTIFY_MCHANGES)
#
# Convert the members and digest_members addresses so that the keys of
# both these are always lowercased, but if there is a case difference, the
@@ -336,10 +336,10 @@ def NewVars(l):
add_only_if_missing('postings_responses', {})
add_only_if_missing('admin_responses', {})
add_only_if_missing('reply_goes_to_list', '')
- add_only_if_missing('preferred_language', mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ add_only_if_missing('preferred_language', config.DEFAULT_SERVER_LANGUAGE)
add_only_if_missing('available_languages', [])
add_only_if_missing('digest_volume_frequency',
- mm_cfg.DEFAULT_DIGEST_VOLUME_FREQUENCY)
+ config.DEFAULT_DIGEST_VOLUME_FREQUENCY)
add_only_if_missing('digest_last_sent_at', 0)
add_only_if_missing('mod_password', None)
add_only_if_missing('moderator', [])
@@ -350,46 +350,46 @@ def NewVars(l):
add_only_if_missing('usernames', {})
add_only_if_missing('personalize', 0)
add_only_if_missing('first_strip_reply_to',
- mm_cfg.DEFAULT_FIRST_STRIP_REPLY_TO)
+ config.DEFAULT_FIRST_STRIP_REPLY_TO)
add_only_if_missing('subscribe_auto_approval',
- mm_cfg.DEFAULT_SUBSCRIBE_AUTO_APPROVAL)
+ config.DEFAULT_SUBSCRIBE_AUTO_APPROVAL)
add_only_if_missing('unsubscribe_policy',
- mm_cfg.DEFAULT_UNSUBSCRIBE_POLICY)
- add_only_if_missing('send_goodbye_msg', mm_cfg.DEFAULT_SEND_GOODBYE_MSG)
+ config.DEFAULT_UNSUBSCRIBE_POLICY)
+ add_only_if_missing('send_goodbye_msg', config.DEFAULT_SEND_GOODBYE_MSG)
add_only_if_missing('include_rfc2369_headers', 1)
add_only_if_missing('include_list_post_header', 1)
add_only_if_missing('bounce_score_threshold',
- mm_cfg.DEFAULT_BOUNCE_SCORE_THRESHOLD)
+ config.DEFAULT_BOUNCE_SCORE_THRESHOLD)
add_only_if_missing('bounce_info_stale_after',
- mm_cfg.DEFAULT_BOUNCE_INFO_STALE_AFTER)
+ config.DEFAULT_BOUNCE_INFO_STALE_AFTER)
add_only_if_missing('bounce_you_are_disabled_warnings',
- mm_cfg.DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS)
+ config.DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS)
add_only_if_missing(
'bounce_you_are_disabled_warnings_interval',
- mm_cfg.DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL)
+ config.DEFAULT_BOUNCE_YOU_ARE_DISABLED_WARNINGS_INTERVAL)
add_only_if_missing(
'bounce_unrecognized_goes_to_list_owner',
- mm_cfg.DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNER)
+ config.DEFAULT_BOUNCE_UNRECOGNIZED_GOES_TO_LIST_OWNER)
add_only_if_missing(
'bounce_notify_owner_on_disable',
- mm_cfg.DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE)
+ config.DEFAULT_BOUNCE_NOTIFY_OWNER_ON_DISABLE)
add_only_if_missing(
'bounce_notify_owner_on_removal',
- mm_cfg.DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL)
+ config.DEFAULT_BOUNCE_NOTIFY_OWNER_ON_REMOVAL)
add_only_if_missing('ban_list', [])
- add_only_if_missing('filter_mime_types', mm_cfg.DEFAULT_FILTER_MIME_TYPES)
- add_only_if_missing('pass_mime_types', mm_cfg.DEFAULT_PASS_MIME_TYPES)
- add_only_if_missing('filter_content', mm_cfg.DEFAULT_FILTER_CONTENT)
+ add_only_if_missing('filter_mime_types', config.DEFAULT_FILTER_MIME_TYPES)
+ add_only_if_missing('pass_mime_types', config.DEFAULT_PASS_MIME_TYPES)
+ add_only_if_missing('filter_content', config.DEFAULT_FILTER_CONTENT)
add_only_if_missing('convert_html_to_plaintext',
- mm_cfg.DEFAULT_CONVERT_HTML_TO_PLAINTEXT)
- add_only_if_missing('filter_action', mm_cfg.DEFAULT_FILTER_ACTION)
+ config.DEFAULT_CONVERT_HTML_TO_PLAINTEXT)
+ add_only_if_missing('filter_action', config.DEFAULT_FILTER_ACTION)
add_only_if_missing('delivery_status', {})
- # This really ought to default to mm_cfg.HOLD, but that doesn't work with
+ # This really ought to default to config.HOLD, but that doesn't work with
# the current GUI description model. So, 0==Hold, 1==Reject, 2==Discard
add_only_if_missing('member_moderation_action', 0)
add_only_if_missing('member_moderation_notice', '')
add_only_if_missing('new_member_options',
- mm_cfg.DEFAULT_NEW_MEMBER_OPTIONS)
+ config.DEFAULT_NEW_MEMBER_OPTIONS)
# Emergency moderation flag
add_only_if_missing('emergency', 0)
add_only_if_missing('hold_and_cmd_autoresponses', {})
@@ -406,14 +406,14 @@ def NewVars(l):
add_only_if_missing('scrub_nondigest', 0)
# ContentFilter by file extensions
add_only_if_missing('filter_filename_extensions',
- mm_cfg.DEFAULT_FILTER_FILENAME_EXTENSIONS)
+ config.DEFAULT_FILTER_FILENAME_EXTENSIONS)
add_only_if_missing('pass_filename_extensions', [])
# automatic discard
add_only_if_missing('max_days_to_hold', 0)
add_only_if_missing('nonmember_rejection_notice', '')
# multipart/alternative collapse
add_only_if_missing('collapse_alternatives',
- mm_cfg.DEFAULT_COLLAPSE_ALTERNATIVES)
+ config.DEFAULT_COLLAPSE_ALTERNATIVES)
@@ -463,10 +463,10 @@ def CanonicalizeUserOptions(l):
# member address. This is likely caused by an earlier bug.
del l.user_options[k]
continue
- if l.getMemberOption(k, mm_cfg.DisableDelivery):
+ if l.getMemberOption(k, config.DisableDelivery):
# Convert this flag into a legacy disable
l.setDeliveryStatus(k, UNKNOWN)
- l.setMemberOption(k, mm_cfg.DisableDelivery, 0)
+ l.setMemberOption(k, config.DisableDelivery, 0)
l.useropts_version = 1
@@ -509,7 +509,7 @@ def NewRequestsDatabase(l):
# See the note above; the same holds true.
for ign, ign, digest, addr, password in v:
l.HoldSubscription(addr, '', password, digest,
- mm_cfg.DEFAULT_SERVER_LANGUAGE)
+ config.DEFAULT_SERVER_LANGUAGE)
del r[k]
else:
log.error("""\
diff --git a/Makefile.in b/Makefile.in
deleted file mode 100644
index e71349e7b..000000000
--- a/Makefile.in
+++ /dev/null
@@ -1,157 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-SHELL= /bin/sh
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-var_prefix= @VAR_PREFIX@
-DESTDIR=
-
-CC= @CC@
-INSTALL= @INSTALL@
-PYTHON= @PYTHON@
-
-LANGUAGES= @LANGUAGES@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= @CFLAGS@ $(OPT) $(DEFS)
-
-VAR_DIRS= \
- etc ext logs archives lists locks data spam qfiles \
- archives/private archives/public
-
-ARCH_INDEP_DIRS= \
- bin templates scripts cron pythonlib \
- Mailman Mailman/bin Mailman/interfaces \
- Mailman/database Mailman/database/model \
- Mailman/docs Mailman/ext Mailman/Cgi Mailman/Archiver \
- Mailman/Handlers Mailman/Queue Mailman/Queue/tests \
- Mailman/Bouncers \
- Mailman/MTA Mailman/Gui Mailman/Commands messages icons \
- Mailman/testing Mailman/testing/bounces tests tests/msgs
-
-ARCH_DEP_DIRS= cgi-bin mail
-
-# Directories make should decend into
-SUBDIRS= bin cron misc Mailman scripts src templates messages tests
-
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-DIRSETGID= chmod g+s
-
-DATE = $(shell python -c 'import time; print time.strftime("%d-%b-%Y"),')
-LANGPACK = README-I18N.en templates messages
-EXCLUDES = --exclude=CVS --exclude=.cvsignore --exclude=Makefile* --exclude=*.files --exclude=*.old
-
-# Rules
-
-all: subdirs
-
-subdirs: $(SUBDIRS)
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE)); \
- done
-
-install: justinstall update
-
-justinstall: $(SUBDIRS)
- @echo "Creating architecture independent directories..."
- @for d in $(VAR_DIRS); \
- do \
- dir=$(DESTDIR)$(var_prefix)/$$d; \
- if test ! -d $$dir; then \
- echo "Creating directory hierarchy $$dir"; \
- $(srcdir)/mkinstalldirs $$dir; \
- chmod $(DIRMODE) $$dir; \
- $(DIRSETGID) $$dir; \
- else true; \
- fi; \
- done
- chmod o-r $(DESTDIR)$(var_prefix)/archives/private
- @for d in $(ARCH_INDEP_DIRS); \
- do \
- dir=$(DESTDIR)$(prefix)/$$d; \
- if test ! -d $$dir; then \
- echo "Creating directory hierarchy $$dir"; \
- $(srcdir)/mkinstalldirs $$dir; \
- chmod $(DIRMODE) $$dir; \
- $(DIRSETGID) $$dir; \
- else true; \
- fi; \
- done
- @echo "Creating architecture dependent directories..."
- @for d in $(ARCH_DEP_DIRS); \
- do \
- dir=$(DESTDIR)$(exec_prefix)/$$d; \
- if test ! -d $$dir; then \
- echo "Creating directory hierarchy $$dir"; \
- $(srcdir)/mkinstalldirs $$dir; \
- chmod $(DIRMODE) $$dir; \
- $(DIRSETGID) $$dir; \
- else true; \
- fi; \
- done
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
- done
- $(PYTHON) -c 'from compileall import *; compile_dir("$(DESTDIR)$(prefix)/Mailman")'
-
-# Only run bin/update if we aren't installing in DESTDIR, as this
-# means there are probably no lists to deal with, and it wouldn't
-# work anyway (because of import paths.)
-update:
- @(cd $(DESTDIR)$(prefix) ; test -n "$(DESTDIR)" || bin/update)
-
-clean: $(SUBDIRS)
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) clean); \
- done
- -rm -f update.log
-
-distclean: $(SUBDIRS)
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) distclean); \
- done
- -rm -f config.cache config.log config.status Makefile
- -rm -rf build
-
-langpack:
- tar zcvf langpack-$(DATE).tgz $(EXCLUDES) $(LANGPACK)
diff --git a/bin/Makefile.in b/bin/Makefile.in
deleted file mode 100644
index b10398f69..000000000
--- a/bin/Makefile.in
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-LN_S= @LN_S@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-MAILDIR= $(exec_prefix)/mail
-SCRIPTSDIR= $(prefix)/bin
-
-SHELL= /bin/sh
-
-SCRIPTS= mmshell \
- remove_members clone_member \
- sync_members check_db \
- cleanarch \
- list_admins \
- fix_url.py convert.py transcheck \
- msgfmt.py discard \
- reset_pw.py templ2pot.py po2templ.py
-
-LN_SCRIPTS= add_members arch change_pw check_perms config_list dumpdb \
- export find_member genaliases import inject list_lists \
- list_members list_owners mailmanctl mmsitepass newlist \
- qrunner rmlist show_config show_qfiles testall unshunt \
- update version withlist
-
-BUILDDIR= ../build/bin
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(SCRIPTS); \
- do \
- $(INSTALL) -m $(EXEMODE) $(BUILDDIR)/$$f $(DESTDIR)$(SCRIPTSDIR); \
- done
- for f in $(LN_SCRIPTS); \
- do \
- rm -f $(DESTDIR)$(SCRIPTSDIR)/$$f; \
- (cd $(DESTDIR)$(SCRIPTSDIR); $(LN_S) mmshell $$f); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm Makefile
diff --git a/bin/check_db b/bin/check_db
deleted file mode 100755
index b1157bc7d..000000000
--- a/bin/check_db
+++ /dev/null
@@ -1,153 +0,0 @@
-#! @PYTHON@
-#
-# Copyright (C) 1998,1999,2000,2001,2002 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-"""Check a list's config database file for integrity.
-
-All of the following files are checked:
-
- config.pck
- config.pck.last
- config.db
- config.db.last
- config.safety
-
-It's okay if any of these are missing. config.pck and config.pck.last are
-pickled versions of the config database file for 2.1a3 and beyond. config.db
-and config.db.last are used in all earlier versions, and these are Python
-marshals. config.safety is a pickle written by 2.1a3 and beyond when the
-primary config.pck file could not be read.
-
-Usage: %(PROGRAM)s [options] [listname [listname ...]]
-
-Options:
-
- --all / -a
- Check the databases for all lists. Otherwise only the lists named on
- the command line are checked.
-
- --verbose / -v
- Verbose output. The state of every tested file is printed.
- Otherwise only corrupt files are displayed.
-
- --help / -h
- Print this text and exit.
-"""
-
-import sys
-import os
-import errno
-import getopt
-import marshal
-import cPickle
-
-import paths
-from Mailman import mm_cfg
-from Mailman import Utils
-from Mailman.MailList import MailList
-from Mailman.i18n import _
-
-PROGRAM = sys.argv[0]
-
-
-
-def usage(code, msg=''):
- if code:
- fd = sys.stderr
- else:
- fd = sys.stdout
- print >> fd, _(__doc__)
- if msg:
- print >> fd, msg
- sys.exit(code)
-
-
-
-def testfile(dbfile):
- if dbfile.endswith('.db') or dbfile.endswith('.db.last'):
- loadfunc = marshal.load
- elif dbfile.endswith('.pck') or dbfile.endswith('.pck.last'):
- loadfunc = cPickle.load
- else:
- assert 0
- fp = open(dbfile)
- try:
- loadfunc(fp)
- finally:
- fp.close()
-
-
-def main():
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'ahv',
- ['all', 'verbose', 'help'])
- except getopt.error, msg:
- usage(1, msg)
-
- verbose = 0
- listnames = args
-
- for opt, arg in opts:
- if opt in ('-h', '--help'):
- usage(0)
- elif opt in ('-v', '--verbose'):
- verbose = 1
- elif opt in ('-a', '--all'):
- listnames = Utils.list_names()
-
- listnames = [n.lower().strip() for n in listnames]
- if not listnames:
- print _('Nothing to do.')
- sys.exit(0)
-
- for listname in listnames:
- if not Utils.list_exists(listname):
- print _('No list named:'), listname
- continue
- mlist = MailList(listname, lock=0)
- pfile = os.path.join(mlist.fullpath(), 'config.pck')
- plast = pfile + '.last'
- dfile = os.path.join(mlist.fullpath(), 'config.db')
- dlast = dfile + '.last'
-
- if verbose:
- print _('List:'), listname
-
- for file in (pfile, plast, dfile, dlast):
- status = 0
- try:
- testfile(file)
- except IOError, e:
- # Don't report ENOENT unless we're in verbose mode
- if verbose or e.errno <> errno.ENOENT:
- status = e
- except Exception, e:
- status = e
- # Report errors
- if status:
- if isinstance(status, EnvironmentError):
- # This already includes the file name
- print ' ', status
- else:
- print ' %s: %s' % (file, status)
- elif verbose:
- print _(' %(file)s: okay')
-
-
-
-if __name__ == '__main__':
- main()
diff --git a/bin/convert.py b/bin/convert.py
deleted file mode 100644
index aefc5d532..000000000
--- a/bin/convert.py
+++ /dev/null
@@ -1,44 +0,0 @@
-#! @PYTHON@
-#
-# Copyright (C) 2002-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-"""Convert a list's interpolation strings from %-strings to $-strings.
-
-This script is intended to be run as a bin/withlist script, i.e.
-
-% bin/withlist -l -r convert <mylist>
-"""
-
-import paths
-from Mailman import Utils
-from Mailman.i18n import _
-
-def convert(mlist):
- for attr in ('msg_header', 'msg_footer', 'digest_header', 'digest_footer',
- 'autoresponse_postings_text', 'autoresponse_admin_text',
- 'autoresponse_request_text'):
- s = getattr(mlist, attr)
- t = Utils.to_dollar(s)
- setattr(mlist, attr, t)
- mlist.use_dollar_strings = 1
- print _('Saving list')
- mlist.Save()
-
-
-
-if __name__ == '__main__':
- print _(__doc__.replace('%', '%%'))
diff --git a/bin/mmshell b/bin/mmshell
deleted file mode 100644
index 042f659f2..000000000
--- a/bin/mmshell
+++ /dev/null
@@ -1,48 +0,0 @@
-#! @PYTHON@
-#
-# Copyright (C) 2006 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-"""Driver for all command line scripts in Mailman.
-
-This works by interrogating sys.argv[0] to determine which module actually
-implements the script's functionality.
-"""
-
-import os
-import sys
-
-import paths
-from Mailman.i18n import _
-
-
-
-def main():
- script_name = os.path.basename(sys.argv[0])
- module_name = 'Mailman.bin.' + script_name
- __import__(module_name)
- try:
- status = sys.modules[module_name].main()
- except KeyboardInterrupt:
- print >> sys.stderr, _('Interrupted')
- status = 0
- sys.exit(status)
-
-
-
-if __name__ == '__main__':
- main()
diff --git a/configure b/configure
deleted file mode 100755
index 1e4c412c7..000000000
--- a/configure
+++ /dev/null
@@ -1,5927 +0,0 @@
-#! /bin/sh
-# From configure.in Revision: 8224 .
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.61 for GNU Mailman 2.2.0a0.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-as_nl='
-'
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-if test "x$CONFIG_SHELL" = x; then
- if (eval ":") 2>/dev/null; then
- as_have_required=yes
-else
- as_have_required=no
-fi
-
- if test $as_have_required = yes && (eval ":
-(as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=\$LINENO
- as_lineno_2=\$LINENO
- test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
- test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
-") 2> /dev/null; then
- :
-else
- as_candidate_shells=
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- case $as_dir in
- /*)
- for as_base in sh bash ksh sh5; do
- as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
- done;;
- esac
-done
-IFS=$as_save_IFS
-
-
- for as_shell in $as_candidate_shells $SHELL; do
- # Try only shells that exist, to save several forks.
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { ("$as_shell") 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-_ASEOF
-}; then
- CONFIG_SHELL=$as_shell
- as_have_required=yes
- if { "$as_shell" 2> /dev/null <<\_ASEOF
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-:
-(as_func_return () {
- (exit $1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = "$1" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test $exitcode = 0) || { (exit 1); exit 1; }
-
-(
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
-
-_ASEOF
-}; then
- break
-fi
-
-fi
-
- done
-
- if test "x$CONFIG_SHELL" != x; then
- for as_var in BASH_ENV ENV
- do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- done
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
-
- if test $as_have_required = no; then
- echo This script requires a shell more modern than all the
- echo shells that I found on your system. Please install a
- echo modern shell, or manually run the script under such a
- echo shell if you do have one.
- { (exit 1); exit 1; }
-fi
-
-
-fi
-
-fi
-
-
-
-(eval "as_func_return () {
- (exit \$1)
-}
-as_func_success () {
- as_func_return 0
-}
-as_func_failure () {
- as_func_return 1
-}
-as_func_ret_success () {
- return 0
-}
-as_func_ret_failure () {
- return 1
-}
-
-exitcode=0
-if as_func_success; then
- :
-else
- exitcode=1
- echo as_func_success failed.
-fi
-
-if as_func_failure; then
- exitcode=1
- echo as_func_failure succeeded.
-fi
-
-if as_func_ret_success; then
- :
-else
- exitcode=1
- echo as_func_ret_success failed.
-fi
-
-if as_func_ret_failure; then
- exitcode=1
- echo as_func_ret_failure succeeded.
-fi
-
-if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
- :
-else
- exitcode=1
- echo positional parameters were not saved.
-fi
-
-test \$exitcode = 0") || {
- echo No shell found that supports shell functions.
- echo Please tell autoconf@gnu.org about your system,
- echo including any error possibly output before this
- echo message
-}
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-SHELL=${CONFIG_SHELL-/bin/sh}
-
-# Identity of this package.
-PACKAGE_NAME='GNU Mailman'
-PACKAGE_TARNAME='mailman'
-PACKAGE_VERSION='2.2.0a0'
-PACKAGE_STRING='GNU Mailman 2.2.0a0'
-PACKAGE_BUGREPORT=''
-
-ac_default_prefix=/usr/local/mailman
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='SHELL
-PATH_SEPARATOR
-PACKAGE_NAME
-PACKAGE_TARNAME
-PACKAGE_VERSION
-PACKAGE_STRING
-PACKAGE_BUGREPORT
-exec_prefix
-prefix
-program_transform_name
-bindir
-sbindir
-libexecdir
-datarootdir
-datadir
-sysconfdir
-sharedstatedir
-localstatedir
-includedir
-oldincludedir
-docdir
-infodir
-htmldir
-dvidir
-pdfdir
-psdir
-libdir
-localedir
-mandir
-DEFS
-ECHO_C
-ECHO_N
-ECHO_T
-LIBS
-build_alias
-host_alias
-target_alias
-with_python
-PYTHON
-INSTALL_PROGRAM
-INSTALL_SCRIPT
-INSTALL_DATA
-LN_S
-SET_MAKE
-TRUE
-CC
-CFLAGS
-LDFLAGS
-CPPFLAGS
-ac_ct_CC
-EXEEXT
-OBJEXT
-OPT
-VAR_PREFIX
-MAILMAN_USER
-MAILMAN_GROUP
-MAIL_GROUP
-CGI_GROUP
-CGIEXT
-MAILHOST
-URLHOST
-LANGUAGES
-CPP
-GREP
-EGREP
-SCRIPTS
-LIBOBJS
-LTLIBOBJS'
-ac_subst_files=''
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
- eval enable_$ac_feature=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid feature name: $ac_feature" >&2
- { (exit 1); exit 1; }; }
- ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
- eval enable_$ac_feature=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
- eval with_$ac_package=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid package name: $ac_package" >&2
- { (exit 1); exit 1; }; }
- ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
- eval with_$ac_package=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) { echo "$as_me: error: unrecognized option: $ac_option
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; }
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
- { (exit 1); exit 1; }; }
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- { echo "$as_me: error: missing argument to $ac_option" >&2
- { (exit 1); exit 1; }; }
-fi
-
-# Be sure to have absolute directory names.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
- { (exit 1); exit 1; }; }
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- { echo "$as_me: error: Working directory cannot be determined" >&2
- { (exit 1); exit 1; }; }
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- { echo "$as_me: error: pwd does not report name of working directory" >&2
- { (exit 1); exit 1; }; }
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$0" ||
-$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$0" : 'X\(//\)[^/]' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$0" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
- { (exit 1); exit 1; }; }
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
- { (exit 1); exit 1; }; }
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures GNU Mailman 2.2.0a0 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/mailman]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
- case $ac_init_help in
- short | recursive ) echo "Configuration of GNU Mailman 2.2.0a0:";;
- esac
- cat <<\_ACEOF
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-python specify path to Python interpreter
- --without-gcc never use gcc
- --with-var-prefix directory for mutable data /var/mailman
- --without-permcheck skip the check for target directory permissions
- --with-username specify a user name other than "mailman"
- --with-groupname specify a group name other than "mailman"
- --with-mail-gid group name mail programs run as
- --with-cgi-gid group name CGI programs run as
- --with-cgi-ext specify extension for CGI programs (include dot)
- --with-mailhost specify the hostname part for outgoing email
- --with-urlhost specify the hostname part of urls
- --with-languages add i18n languages: specify "none" for English only.
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" || continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-GNU Mailman configure 2.2.0a0
-generated by GNU Autoconf 2.61
-
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by GNU Mailman $as_me 2.2.0a0, which was
-generated by GNU Autoconf 2.61. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- echo "PATH: $as_dir"
-done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
- 2)
- ac_configure_args1="$ac_configure_args1 '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- ac_configure_args="$ac_configure_args '$ac_arg'"
- ;;
- esac
- done
-done
-$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
-$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- echo "$as_me: caught signal $ac_signal"
- echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer explicitly selected file to automatically selected ones.
-if test -n "$CONFIG_SITE"; then
- set x "$CONFIG_SITE"
-elif test "x$prefix" != xNONE; then
- set x "$prefix/share/config.site" "$prefix/etc/config.site"
-else
- set x "$ac_default_prefix/share/config.site" \
- "$ac_default_prefix/etc/config.site"
-fi
-shift
-for ac_site_file
-do
- if test -r "$ac_site_file"; then
- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
-echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { echo "$as_me:$LINENO: loading cache $cache_file" >&5
-echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { echo "$as_me:$LINENO: creating cache $cache_file" >&5
-echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
-echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
-echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5
-echo "$as_me: former value: $ac_old_val" >&2;}
- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5
-echo "$as_me: current value: $ac_new_val" >&2;}
- ac_cache_corrupted=:
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
-echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
-echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-# /usr/local/mailman is the default installation directory
-
-
-
-# Check for Python! Better be found on $PATH
-{ echo "$as_me:$LINENO: checking for --with-python" >&5
-echo $ECHO_N "checking for --with-python... $ECHO_C" >&6; }
-
-# Check whether --with-python was given.
-if test "${with_python+set}" = set; then
- withval=$with_python;
-fi
-
-case "$with_python" in
- "") ans="no";;
- *) ans="$with_python"
-esac
-{ echo "$as_me:$LINENO: result: $ans" >&5
-echo "${ECHO_T}$ans" >&6; }
-
-if test -z "$with_python"
-then
- # Extract the first word of "python", so it can be a program name with args.
-set dummy python; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_with_python+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $with_python in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_with_python="$with_python" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_with_python="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_with_python" && ac_cv_path_with_python="/usr/local/bin/python"
- ;;
-esac
-fi
-with_python=$ac_cv_path_with_python
-if test -n "$with_python"; then
- { echo "$as_me:$LINENO: result: $with_python" >&5
-echo "${ECHO_T}$with_python" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-
-{ echo "$as_me:$LINENO: checking Python interpreter" >&5
-echo $ECHO_N "checking Python interpreter... $ECHO_C" >&6; }
-if test ! -x $with_python
-then
- { { echo "$as_me:$LINENO: error:
-
-***** No Python interpreter found!
-***** Try including the configure option
-***** --with-python=/path/to/python/interpreter" >&5
-echo "$as_me: error:
-
-***** No Python interpreter found!
-***** Try including the configure option
-***** --with-python=/path/to/python/interpreter" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-PYTHON=$with_python
-{ echo "$as_me:$LINENO: result: $PYTHON" >&5
-echo "${ECHO_T}$PYTHON" >&6; }
-
-# See if Python is new enough. 2.5 or better is required.
-{ echo "$as_me:$LINENO: checking Python version" >&5
-echo $ECHO_N "checking Python version... $ECHO_C" >&6; }
-
-cat > conftest.py <<EOF
-import sys
-try:
- v = sys.hexversion
-except AttributeError:
- v = 0
-if v >= 0x20500f0:
- s = sys.version.split()[0]
-else:
- s = ""
-fp = open("conftest.out", "w")
-fp.write("%s\n" % s)
-fp.close()
-EOF
-
-$PYTHON conftest.py
-version=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test -z "$version"
-then
- { { echo "$as_me:$LINENO: error:
-
-***** $PYTHON is too old (or broken)
-***** Python 2.5 or newer is required" >&5
-echo "$as_me: error:
-
-***** $PYTHON is too old (or broken)
-***** Python 2.5 or newer is required" >&2;}
- { (exit 1); exit 1; }; }
-fi
-{ echo "$as_me:$LINENO: result: $version" >&5
-echo "${ECHO_T}$version" >&6; }
-
-# Make sure distutils is available. Some Linux Python packages split
-# distutils into the "-devel" package, so they need both.
-{ echo "$as_me:$LINENO: checking that Python has a working distutils" >&5
-echo $ECHO_N "checking that Python has a working distutils... $ECHO_C" >&6; }
-
-cat > conftest.py <<EOF
-try:
- import distutils.errors
- import distutils.sysconfig
-except ImportError:
- res = "no"
-else:
- try:
- distutils.sysconfig.get_config_vars()
- except distutils.errors.DistutilsPlatformError:
- res = "no"
- else:
- res = "yes"
-fp = open("conftest.out", "w")
-fp.write("%s\n" % res)
-fp.close()
-EOF
-
-$PYTHON conftest.py
-havedistutils=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test "$havedistutils" != "yes"
-then
- { { echo "$as_me:$LINENO: error:
-
-***** Distutils is not available or is incomplete for $PYTHON
-***** If you installed Python from RPM (or other package manager)
-***** be sure to install the -devel package, or install Python
-***** from source. See README.LINUX for details" >&5
-echo "$as_me: error:
-
-***** Distutils is not available or is incomplete for $PYTHON
-***** If you installed Python from RPM (or other package manager)
-***** be sure to install the -devel package, or install Python
-***** from source. See README.LINUX for details" >&2;}
- { (exit 1); exit 1; }; }
-fi
-{ echo "$as_me:$LINENO: result: $havedistutils" >&5
-echo "${ECHO_T}$havedistutils" >&6; }
-
-# Checks for programs.
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
- if test -f "$ac_dir/install-sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install-sh -c"
- break
- elif test -f "$ac_dir/install.sh"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/install.sh -c"
- break
- elif test -f "$ac_dir/shtool"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/shtool install -c"
- break
- fi
-done
-if test -z "$ac_aux_dir"; then
- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
-echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
-echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in
- ./ | .// | /cC/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- done
- done
- ;;
-esac
-done
-IFS=$as_save_IFS
-
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ echo "$as_me:$LINENO: result: $INSTALL" >&5
-echo "${ECHO_T}$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ echo "$as_me:$LINENO: checking whether ln -s works" >&5
-echo $ECHO_N "checking whether ln -s works... $ECHO_C" >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-else
- { echo "$as_me:$LINENO: result: no, using $LN_S" >&5
-echo "${ECHO_T}no, using $LN_S" >&6; }
-fi
-
-{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
-set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
- @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
- *@@@%%%=?*=@@@%%%*)
- eval ac_cv_prog_make_${ac_make}_set=yes;;
- *)
- eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
- SET_MAKE=
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
- SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-# Extract the first word of "true", so it can be a program name with args.
-set dummy true; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_path_TRUE+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- case $TRUE in
- [\\/]* | ?:[\\/]*)
- ac_cv_path_TRUE="$TRUE" # Let the user override the test with a path.
- ;;
- *)
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_dummy="$PATH:/bin:/usr/bin"
-for as_dir in $as_dummy
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_path_TRUE="$as_dir/$ac_word$ac_exec_ext"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
- test -z "$ac_cv_path_TRUE" && ac_cv_path_TRUE="true"
- ;;
-esac
-fi
-TRUE=$ac_cv_path_TRUE
-if test -n "$TRUE"; then
- { echo "$as_me:$LINENO: result: $TRUE" >&5
-echo "${ECHO_T}$TRUE" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-
-# Find compiler, allow alternatives to gcc
-{ echo "$as_me:$LINENO: checking for --without-gcc" >&5
-echo $ECHO_N "checking for --without-gcc... $ECHO_C" >&6; }
-
-# Check whether --with-gcc was given.
-if test "${with_gcc+set}" = set; then
- withval=$with_gcc;
- case $withval in
- no) CC=cc
- without_gcc=yes;;
- yes) CC=gcc
- without_gcc=no;;
- *) CC=$withval
- without_gcc=$withval;;
- esac
-else
- without_gcc=no;
-fi
-
-{ echo "$as_me:$LINENO: result: $without_gcc" >&5
-echo "${ECHO_T}$without_gcc" >&6; }
-
-# If the user switches compilers, we can't believe the cache
-if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
-then
- { { echo "$as_me:$LINENO: error: cached CC is different -- throw away $cache_file
-(it is also a good idea to do 'make clean' before compiling)" >&5
-echo "$as_me: error: cached CC is different -- throw away $cache_file
-(it is also a good idea to do 'make clean' before compiling)" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- fi
-fi
-if test -z "$CC"; then
- # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { echo "$as_me:$LINENO: result: $CC" >&5
-echo "${ECHO_T}$CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ echo "$as_me:$LINENO: checking for $ac_word" >&5
-echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
-done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
-echo "${ECHO_T}$ac_ct_CC" >&6; }
-else
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&5
-echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
-whose name does not start with the host triplet. If you think this
-configuration is useful to you, please write to autoconf@gnu.org." >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&5
-echo "$as_me: error: no acceptable C compiler found in \$PATH
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-
-# Provide some information about the compiler.
-echo "$as_me:$LINENO: checking for C compiler version" >&5
-ac_compiler=`set X $ac_compile; echo $2`
-{ (ac_try="$ac_compiler --version >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler --version >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -v >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -v >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-{ (ac_try="$ac_compiler -V >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compiler -V >&5") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }
-
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
-echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
-ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-#
-# List of possible output files, starting from the most likely.
-# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
-# only as a last resort. b.out is created by i960 compilers.
-ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
-#
-# The IRIX 6 linker writes into existing files which may not be
-# executable, retaining their permissions. Remove them first so a
-# subsequent execution test works.
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { (ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-
-{ echo "$as_me:$LINENO: result: $ac_file" >&5
-echo "${ECHO_T}$ac_file" >&6; }
-if test -z "$ac_file"; then
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
-See \`config.log' for more details." >&5
-echo "$as_me: error: C compiler cannot create executables
-See \`config.log' for more details." >&2;}
- { (exit 77); exit 77; }; }
-fi
-
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
-echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
-# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { echo "$as_me:$LINENO: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
- fi
- fi
-fi
-{ echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
-
-rm -f a.out a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
-echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
-{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
-echo "${ECHO_T}$cross_compiling" >&6; }
-
-{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
-echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest$ac_cv_exeext
-{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
-echo "${ECHO_T}$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
-echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
-if test "${ac_cv_objext+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; then
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
-echo "${ECHO_T}$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
-echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_compiler_gnu=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_compiler_gnu=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
-echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
-GCC=`test $ac_compiler_gnu = yes && echo yes`
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
-echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- CFLAGS=""
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_g=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
-echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_prog_cc_c89=$ac_arg
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-
-fi
-
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { echo "$as_me:$LINENO: result: none needed" >&5
-echo "${ECHO_T}none needed" >&6; } ;;
- xno)
- { echo "$as_me:$LINENO: result: unsupported" >&5
-echo "${ECHO_T}unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
-echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-# Optimizer/debugger flags passed between Makefiles
-
-if test -z "$OPT"
-then
- case $GCC in
- yes)
- case $ac_cv_prog_cc_g in
- yes) OPT="-g -O2";;
- *) OPT="-O2";;
- esac
- ;;
- *) OPT="-O";;
- esac
-fi
-
-# We better be able to execute interpreters
-{ echo "$as_me:$LINENO: checking whether #! works in shell scripts" >&5
-echo $ECHO_N "checking whether #! works in shell scripts... $ECHO_C" >&6; }
-if test "${ac_cv_sys_interpreter+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- echo '#! /bin/cat
-exit 69
-' >conftest
-chmod u+x conftest
-(SHELL=/bin/sh; export SHELL; ./conftest >/dev/null 2>&1)
-if test $? -ne 69; then
- ac_cv_sys_interpreter=yes
-else
- ac_cv_sys_interpreter=no
-fi
-rm -f conftest
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_sys_interpreter" >&5
-echo "${ECHO_T}$ac_cv_sys_interpreter" >&6; }
-interpval=$ac_cv_sys_interpreter
-
-if test "$ac_cv_sys_interpreter" != "yes"
-then
- { { echo "$as_me:$LINENO: error:
-
-***** Cannot execute interpreter scripts?
-***** Are you sure you system doesn't support this?" >&5
-echo "$as_me: error:
-
-***** Cannot execute interpreter scripts?
-***** Are you sure you system doesn't support this?" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-
-# Check for an alternate data directory, separate from installation dir.
-default_var_prefix="/var/mailman"
-
-{ echo "$as_me:$LINENO: checking for --with-var-prefix" >&5
-echo $ECHO_N "checking for --with-var-prefix... $ECHO_C" >&6; }
-
-# Check whether --with-var-prefix was given.
-if test "${with_var_prefix+set}" = set; then
- withval=$with_var_prefix;
-fi
-
-case "$with_var_prefix" in
- yes) VAR_PREFIX="$default_var_prefix"; ans=$VAR_PREFIX;;
- ""|no) VAR_PREFIX="$prefix"; ans="no";;
- *) VAR_PREFIX="$with_var_prefix"; ans=$VAR_PREFIX;
-esac
-{ echo "$as_me:$LINENO: result: $ans" >&5
-echo "${ECHO_T}$ans" >&6; }
-
-{ echo "$as_me:$LINENO: checking for --with-permcheck" >&5
-echo $ECHO_N "checking for --with-permcheck... $ECHO_C" >&6; }
-
-# Check whether --with-permcheck was given.
-if test "${with_permcheck+set}" = set; then
- withval=$with_permcheck;
-fi
-
-if test -z "$with_permcheck"
-then
- with_permcheck="yes"
-fi
-{ echo "$as_me:$LINENO: result: $with_permcheck" >&5
-echo "${ECHO_T}$with_permcheck" >&6; }
-# Now make sure that $prefix is set up correctly. It must be group
-# owned by the target group, it must have the group sticky bit set, and
-# it must be a+rx
-if test "$VAR_PREFIX" = "NONE"
-then
- VAR_PREFIX=$ac_default_prefix
- prefixcheck=$ac_default_prefix
-else
- prefixcheck=$VAR_PREFIX
-fi
-
-# new macro for finding group names
-
-
-
-# new macro for finding UIDs
-
-
-# Check for some other uid to use than `mailman'
-{ echo "$as_me:$LINENO: checking for --with-username" >&5
-echo $ECHO_N "checking for --with-username... $ECHO_C" >&6; }
-
-# Check whether --with-username was given.
-if test "${with_username+set}" = set; then
- withval=$with_username;
-fi
-
-
-if test -z "$with_username"
-then
- with_username="mailman"
-fi
-USERNAME=$with_username
-{ echo "$as_me:$LINENO: result: $USERNAME" >&5
-echo "${ECHO_T}$USERNAME" >&6; }
-
-# User `mailman' must exist
-
-{ echo "$as_me:$LINENO: checking for user name \"$USERNAME\"" >&5
-echo $ECHO_N "checking for user name \"$USERNAME\"... $ECHO_C" >&6; }
-
-# MAILMAN_USER == variable name
-# $USERNAME == user id to check for
-
-
-if test -z "$MAILMAN_USER"
-then
- cat > conftest.py <<EOF
-import pwd
-uid = ''
-for user in "$USERNAME".split():
- try:
- try:
- uname = pwd.getpwuid(int(user))[0]
- break
- except ValueError:
- uname = pwd.getpwnam(user)[0]
- break
- except KeyError:
- uname = ''
-fp = open("conftest.out", "w")
-fp.write("%s\n" % uname)
-fp.close()
-EOF
- $PYTHON conftest.py
- MAILMAN_USER=`cat conftest.out`
-fi
-
-rm -f conftest.out conftest.py
-if test -z "$MAILMAN_USER"
-then
- if test "$with_permcheck" = "yes"
- then
- { { echo "$as_me:$LINENO: error:
-***** No \"$USERNAME\" user found!
-***** Your system must have a \"$USERNAME\" user defined
-***** (usually in your /etc/passwd file). Please see the INSTALL
-***** file for details." >&5
-echo "$as_me: error:
-***** No \"$USERNAME\" user found!
-***** Your system must have a \"$USERNAME\" user defined
-***** (usually in your /etc/passwd file). Please see the INSTALL
-***** file for details." >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-{ echo "$as_me:$LINENO: result: okay" >&5
-echo "${ECHO_T}okay" >&6; }
-
-
-# Check for some other gid to use than `mailman'
-{ echo "$as_me:$LINENO: checking for --with-groupname" >&5
-echo $ECHO_N "checking for --with-groupname... $ECHO_C" >&6; }
-
-# Check whether --with-groupname was given.
-if test "${with_groupname+set}" = set; then
- withval=$with_groupname;
-fi
-
-
-if test -z "$with_groupname"
-then
- with_groupname="mailman"
-fi
-GROUPNAME=$with_groupname
-{ echo "$as_me:$LINENO: result: $GROUPNAME" >&5
-echo "${ECHO_T}$GROUPNAME" >&6; }
-
-
-# Target group must exist
-
-{ echo "$as_me:$LINENO: checking for group name \"$GROUPNAME\"" >&5
-echo $ECHO_N "checking for group name \"$GROUPNAME\"... $ECHO_C" >&6; }
-
-# MAILMAN_GROUP == variable name
-# $GROUPNAME == user id to check for
-
-
-if test -z "$MAILMAN_GROUP"
-then
- cat > conftest.py <<EOF
-import grp
-gid = ''
-for group in "$GROUPNAME".split():
- try:
- try:
- gname = grp.getgrgid(int(group))[0]
- break
- except ValueError:
- gname = grp.getgrnam(group)[0]
- break
- except KeyError:
- gname = ''
-fp = open("conftest.out", "w")
-fp.write("%s\n" % gname)
-fp.close()
-EOF
- $PYTHON conftest.py
- MAILMAN_GROUP=`cat conftest.out`
-fi
-
-rm -f conftest.out conftest.py
-if test -z "$MAILMAN_GROUP"
-then
- if test "$with_permcheck" = "yes"
- then
- { { echo "$as_me:$LINENO: error:
-***** No \"$GROUPNAME\" group found!
-***** Your system must have a \"$GROUPNAME\" group defined
-***** (usually in your /etc/group file). Please see the INSTALL
-***** file for details." >&5
-echo "$as_me: error:
-***** No \"$GROUPNAME\" group found!
-***** Your system must have a \"$GROUPNAME\" group defined
-***** (usually in your /etc/group file). Please see the INSTALL
-***** file for details." >&2;}
- { (exit 1); exit 1; }; }
- fi
-fi
-{ echo "$as_me:$LINENO: result: okay" >&5
-echo "${ECHO_T}okay" >&6; }
-
-
-{ echo "$as_me:$LINENO: checking permissions on $prefixcheck" >&5
-echo $ECHO_N "checking permissions on $prefixcheck... $ECHO_C" >&6; }
-
-cat > conftest.py <<EOF
-import os, grp
-from stat import *
-prefix = "$prefixcheck"
-groupname = "$GROUPNAME"
-mailmangroup = "$MAILMAN_GROUP"
-try:
- mailmangid = grp.getgrnam(mailmangroup)[2]
-except KeyError:
- mailmangid = -1
-problems = []
-try: statdata = os.stat(prefix)
-except OSError:
- problems.append("Directory doesn't exist: " + prefix)
-else:
- mode = statdata[ST_MODE]
- gid = statdata[ST_GID]
- if mailmangid <> gid:
- problems.append("Directory must be owned by group " +
- groupname + ": " + prefix)
- if (mode & S_ISGID) <> S_ISGID:
- problems.append("Set-gid bit must be set for directory: " + prefix)
- perms = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH
- if (mode & perms) <> perms:
- problems.append("Permissions should be at least 02775: " + prefix)
-if not problems:
- msg = "okay\n"
-else:
- msg = '***** ' + '\n***** '.join(problems) + '\n'
-fp = open("conftest.out", "w")
-fp.write(msg)
-fp.close()
-EOF
-
-$PYTHON conftest.py
-status=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test "$with_permcheck" = "yes"
-then
- if test "$status" != "okay"
- then
- { { echo "$as_me:$LINENO: error:
-***** Installation directory $prefixcheck is not configured properly!
-$status" >&5
-echo "$as_me: error:
-***** Installation directory $prefixcheck is not configured properly!
-$status" >&2;}
- { (exit 1); exit 1; }; }
- fi
-else
- status="skipped"
-fi
-{ echo "$as_me:$LINENO: result: $status" >&5
-echo "${ECHO_T}$status" >&6; }
-
-
-# Now find the UIDs and GIDs
-# Support --with-mail-gid and --with-cgi-gid
-{ echo "$as_me:$LINENO: checking for mail wrapper group; i.e. --with-mail-gid" >&5
-echo $ECHO_N "checking for mail wrapper group; i.e. --with-mail-gid... $ECHO_C" >&6; }
-
-# Check whether --with-mail-gid was given.
-if test "${with_mail_gid+set}" = set; then
- withval=$with_mail_gid;
-fi
-
-if test -z "$with_mail_gid"
-then
- with_mail_gid="mailman other mail daemon"
-fi
-
-# MAIL_GROUP == variable name
-# $with_mail_gid == user id to check for
-
-
-if test -z "$MAIL_GROUP"
-then
- cat > conftest.py <<EOF
-import grp
-gid = ''
-for group in "$with_mail_gid".split():
- try:
- try:
- gname = grp.getgrgid(int(group))[0]
- break
- except ValueError:
- gname = grp.getgrnam(group)[0]
- break
- except KeyError:
- gname = ''
-fp = open("conftest.out", "w")
-fp.write("%s\n" % gname)
-fp.close()
-EOF
- $PYTHON conftest.py
- MAIL_GROUP=`cat conftest.out`
-fi
-
-rm -f conftest.out conftest.py
-if test -z "$MAIL_GROUP"
-then
- if test "$with_permcheck" = "yes"
- then
- { { echo "$as_me:$LINENO: error:
-***** No group name \"$with_mail_gid\" found for the mail wrapper program.
-***** This is the group that your mail server will use to run Mailman's
-***** programs. You should specify an existing group with the
-***** --with-mail-gid configure option, or use --without-permcheck to
-***** skip this verification step. See also your mail server's documentation,
-***** and Mailman's INSTALL file for details" >&5
-echo "$as_me: error:
-***** No group name \"$with_mail_gid\" found for the mail wrapper program.
-***** This is the group that your mail server will use to run Mailman's
-***** programs. You should specify an existing group with the
-***** --with-mail-gid configure option, or use --without-permcheck to
-***** skip this verification step. See also your mail server's documentation,
-***** and Mailman's INSTALL file for details" >&2;}
- { (exit 1); exit 1; }; }
- else
- MAIL_GROUP=$with_mail_gid
- fi
-fi
-{ echo "$as_me:$LINENO: result: $MAIL_GROUP" >&5
-echo "${ECHO_T}$MAIL_GROUP" >&6; }
-
-
-{ echo "$as_me:$LINENO: checking for CGI wrapper group; i.e. --with-cgi-gid" >&5
-echo $ECHO_N "checking for CGI wrapper group; i.e. --with-cgi-gid... $ECHO_C" >&6; }
-
-# Check whether --with-cgi-gid was given.
-if test "${with_cgi_gid+set}" = set; then
- withval=$with_cgi_gid;
-fi
-
-if test -z "$with_cgi_gid"
-then
- with_cgi_gid="www www-data nobody"
-fi
-
-
-# CGI_GROUP == variable name
-# $with_cgi_gid == user id to check for
-
-
-if test -z "$CGI_GROUP"
-then
- cat > conftest.py <<EOF
-import grp
-gid = ''
-for group in "$with_cgi_gid".split():
- try:
- try:
- gname = grp.getgrgid(int(group))[0]
- break
- except ValueError:
- gname = grp.getgrnam(group)[0]
- break
- except KeyError:
- gname = ''
-fp = open("conftest.out", "w")
-fp.write("%s\n" % gname)
-fp.close()
-EOF
- $PYTHON conftest.py
- CGI_GROUP=`cat conftest.out`
-fi
-
-rm -f conftest.out conftest.py
-if test -z "$CGI_GROUP"
-then
- if test "$with_permcheck" = "yes"
- then
- { { echo "$as_me:$LINENO: error:
-***** No group name \"$with_cgi_gid\" found for the CGI wrapper program.
-***** This is the group that your web server will use to run Mailman's
-***** programs. You should specify an existing group with the
-***** --with-cgi-gid configure option, or use --without-permcheck to
-***** skip this verification step. See also your web server's documentation,
-***** and Mailman's INSTALL file for details" >&5
-echo "$as_me: error:
-***** No group name \"$with_cgi_gid\" found for the CGI wrapper program.
-***** This is the group that your web server will use to run Mailman's
-***** programs. You should specify an existing group with the
-***** --with-cgi-gid configure option, or use --without-permcheck to
-***** skip this verification step. See also your web server's documentation,
-***** and Mailman's INSTALL file for details" >&2;}
- { (exit 1); exit 1; }; }
- else
- CGI_GROUP=$with_cgi_gid
- fi
-fi
-{ echo "$as_me:$LINENO: result: $CGI_GROUP" >&5
-echo "${ECHO_T}$CGI_GROUP" >&6; }
-
-
-# Check for CGI extensions, required by some Web servers
-
-{ echo "$as_me:$LINENO: checking for CGI extensions" >&5
-echo $ECHO_N "checking for CGI extensions... $ECHO_C" >&6; }
-
-# Check whether --with-cgi-ext was given.
-if test "${with_cgi_ext+set}" = set; then
- withval=$with_cgi_ext;
-fi
-
-if test -z "$with_cgi_ext"
-then
- CGIEXT=''
- with_cgi_ext='no'
-else
- CGIEXT=$with_cgi_ext
-fi
-{ echo "$as_me:$LINENO: result: $with_cgi_ext" >&5
-echo "${ECHO_T}$with_cgi_ext" >&6; }
-
-
-# figure out the default mail hostname and url host component
-
-{ echo "$as_me:$LINENO: checking for --with-mailhost" >&5
-echo $ECHO_N "checking for --with-mailhost... $ECHO_C" >&6; }
-
-# Check whether --with-mailhost was given.
-if test "${with_mailhost+set}" = set; then
- withval=$with_mailhost;
-fi
-
-if test -z "$with_mailhost"
-then
- MAILHOST=''
- with_mailhost='no'
-else
- MAILHOST=$with_mailhost
-fi
-{ echo "$as_me:$LINENO: result: $with_mailhost" >&5
-echo "${ECHO_T}$with_mailhost" >&6; }
-
-
-{ echo "$as_me:$LINENO: checking for --with-urlhost" >&5
-echo $ECHO_N "checking for --with-urlhost... $ECHO_C" >&6; }
-
-# Check whether --with-urlhost was given.
-if test "${with_urlhost+set}" = set; then
- withval=$with_urlhost;
-fi
-
-if test -z "$with_urlhost"
-then
- URLHOST=''
- with_urlhost='no'
-else
- URLHOST=$with_urlhost
-fi
-{ echo "$as_me:$LINENO: result: $with_urlhost" >&5
-echo "${ECHO_T}$with_urlhost" >&6; }
-
-
-cat > conftest.py <<EOF
-# python
-from socket import *
-fqdn = getfqdn()
-fp = open('conftest.out', 'w')
-print >> fp, fqdn
-print >> fp, fqdn
-fp.close()
-EOF
-$PYTHON conftest.py
-
-{ echo "$as_me:$LINENO: checking for default mail host name" >&5
-echo $ECHO_N "checking for default mail host name... $ECHO_C" >&6; }
-if test -z "$MAILHOST"
-then
- MAILHOST=`sed q conftest.out`
-fi
-{ echo "$as_me:$LINENO: result: $MAILHOST" >&5
-echo "${ECHO_T}$MAILHOST" >&6; }
-{ echo "$as_me:$LINENO: checking for default URL host component" >&5
-echo $ECHO_N "checking for default URL host component... $ECHO_C" >&6; }
-if test -z "$URLHOST"
-then
- URLHOST=`sed -n '$p' conftest.out`
-fi
-{ echo "$as_me:$LINENO: result: $URLHOST" >&5
-echo "${ECHO_T}$URLHOST" >&6; }
-rm -f conftest.out conftest.py
-
-# i18n --with-languages
-ALL_LINGUAS=`(cd ${srcdir}/messages && ls | grep '^..\(_..\)*$' | tr '\n' ' ')`
-
-{ echo "$as_me:$LINENO: checking for --with-languages" >&5
-echo $ECHO_N "checking for --with-languages... $ECHO_C" >&6; }
-
-# Check whether --with-languages was given.
-if test "${with_languages+set}" = set; then
- withval=$with_languages;
-fi
-
-if test -z "$with_languages"
-then
- LANGUAGES="$ALL_LINGUAS"
-elif test "$with_languages" = "none"
-then
- LANGUAGES=""
-else
- LANGUAGES="$with_languages"
-fi
-{ echo "$as_me:$LINENO: result: $with_languages" >&5
-echo "${ECHO_T}$with_languages" >&6; }
-
-# check CJKCodecs
-{ echo "$as_me:$LINENO: checking for CJK codecs" >&5
-echo $ECHO_N "checking for CJK codecs... $ECHO_C" >&6; }
-
-cat > conftest.py <<EOF
-langs = "$LANGUAGES".split()
-cset = {'ja': 'euc-jp', 'ko': 'euc-kr',
- 'zh_CN': 'gb2312', 'zh_TW': 'big5'}
-s = 'Not required'
-for lang in cset.keys():
- if lang in langs:
- try:
- s = unicode('OK', cset[lang]).encode('us-ascii')
- except LookupError:
- s = ''
- break
-fp = open("conftest.out", "w")
-fp.write("%s\n" % s)
-fp.close()
-EOF
-
-$PYTHON conftest.py
-cjkok=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test -z "$cjkok"
-then
- { { echo "$as_me:$LINENO: error:
-***** At least one of the CJK codecs missing!
-***** You have included ja, ko, or zh_* in --with-languages
-***** but valid codecs are not installed. You should
-***** either install CJKCodecs from http://cjkpython.i18n.org/
-***** or use Python 2.4 in which CJK languages are supported." >&5
-echo "$as_me: error:
-***** At least one of the CJK codecs missing!
-***** You have included ja, ko, or zh_* in --with-languages
-***** but valid codecs are not installed. You should
-***** either install CJKCodecs from http://cjkpython.i18n.org/
-***** or use Python 2.4 in which CJK languages are supported." >&2;}
- { (exit 1); exit 1; }; }
-fi
-{ echo "$as_me:$LINENO: result: $cjkok" >&5
-echo "${ECHO_T}$cjkok" >&6; }
-
-# Checks for libraries.
-
-
-
-
-for ac_func in strerror setregid syslog
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test $ac_cv_func_syslog = no; then
- # syslog is not in the default libraries. See if it's in some other.
- # Additionally, for at least SCO OpenServer, syslog() is #defined to
- # one of several _real_ functions in syslog.h, so we need to do the test
- # with the appropriate include.
- for lib in bsd socket inet; do
- { echo "$as_me:$LINENO: checking for syslog in -l$lib" >&5
-echo $ECHO_N "checking for syslog in -l$lib... $ECHO_C" >&6; }
- Mailman_LIBS_save="$LIBS"; LIBS="$LIBS -l$lib"
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <syslog.h>
-int
-main ()
-{
-syslog(LOG_DEBUG, "Just a test...");
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- { echo "$as_me:$LINENO: result: yes" >&5
-echo "${ECHO_T}yes" >&6; }
- cat >>confdefs.h <<\_ACEOF
-#define HAVE_SYSLOG 1
-_ACEOF
-
- break
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- { echo "$as_me:$LINENO: result: no" >&5
-echo "${ECHO_T}no" >&6; }
- LIBS="$Mailman_LIBS_save"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
- unset Mailman_LIBS_save
- done
-fi
-
-# Checks for header files.
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
-echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ echo "$as_me:$LINENO: result: $CPP" >&5
-echo "${ECHO_T}$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- :
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Broken: fails on valid input.
-continue
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- # Broken: success on invalid input.
-continue
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then
- :
-else
- { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&5
-echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
-echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- # Extract the first word of "grep ggrep" to use in msg output
-if test -z "$GREP"; then
-set dummy grep ggrep; ac_prog_name=$2
-if test "${ac_cv_path_GREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_path_GREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
- # Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_GREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
-
-
-fi
-
-GREP="$ac_cv_path_GREP"
-if test -z "$GREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-else
- ac_cv_path_GREP=$GREP
-fi
-
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
-echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ echo "$as_me:$LINENO: checking for egrep" >&5
-echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- # Extract the first word of "egrep" to use in msg output
-if test -z "$EGREP"; then
-set dummy egrep; ac_prog_name=$2
-if test "${ac_cv_path_EGREP+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- ac_path_EGREP_found=false
-# Loop through the user's path and test for each of PROGNAME-LIST
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
- # Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- ac_count=`expr $ac_count + 1`
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-
- $ac_path_EGREP_found && break 3
- done
-done
-
-done
-IFS=$as_save_IFS
-
-
-fi
-
-EGREP="$ac_cv_path_EGREP"
-if test -z "$EGREP"; then
- { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
-echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
- { (exit 1); exit 1; }; }
-fi
-
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
-
- fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
-echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
-echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_cv_header_stdc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_cv_header_stdc=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then
- :
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then
- :
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- :
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
-echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-cat >>confdefs.h <<\_ACEOF
-#define STDC_HEADERS 1
-_ACEOF
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-
-
-
-
-
-
-
-
-
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- eval "$as_ac_Header=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_Header=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-for ac_header in syslog.h
-do
-as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- { echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-else
- # Is the header compilable?
-{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
-echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-$ac_includes_default
-#include <$ac_header>
-_ACEOF
-rm -f conftest.$ac_objext
-if { (ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_compile") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then
- ac_header_compiler=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_compiler=no
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
-echo "${ECHO_T}$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
-echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
-cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <$ac_header>
-_ACEOF
-if { (ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then
- ac_header_preproc=yes
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_header_preproc=no
-fi
-
-rm -f conftest.err conftest.$ac_ext
-{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
-echo "${ECHO_T}$ac_header_preproc" >&6; }
-
-# So? What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
- yes:no: )
- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
-echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
- ac_header_preproc=yes
- ;;
- no:yes:* )
- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
-echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5
-echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
-echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&5
-echo "$as_me: WARNING: $ac_header: section \"Present But Cannot Be Compiled\"" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
-echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
-echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
-
- ;;
-esac
-{ echo "$as_me:$LINENO: checking for $ac_header" >&5
-echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
-if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- eval "$as_ac_Header=\$ac_header_preproc"
-fi
-ac_res=`eval echo '${'$as_ac_Header'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-
-fi
-if test `eval echo '${'$as_ac_Header'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-# Checks for typedefs, structures, and compiler characteristics.
-{ echo "$as_me:$LINENO: checking for uid_t in sys/types.h" >&5
-echo $ECHO_N "checking for uid_t in sys/types.h... $ECHO_C" >&6; }
-if test "${ac_cv_type_uid_t+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <sys/types.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "uid_t" >/dev/null 2>&1; then
- ac_cv_type_uid_t=yes
-else
- ac_cv_type_uid_t=no
-fi
-rm -f conftest*
-
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_uid_t" >&5
-echo "${ECHO_T}$ac_cv_type_uid_t" >&6; }
-if test $ac_cv_type_uid_t = no; then
-
-cat >>confdefs.h <<\_ACEOF
-#define uid_t int
-_ACEOF
-
-
-cat >>confdefs.h <<\_ACEOF
-#define gid_t int
-_ACEOF
-
-fi
-
-{ echo "$as_me:$LINENO: checking type of array argument to getgroups" >&5
-echo $ECHO_N "checking type of array argument to getgroups... $ECHO_C" >&6; }
-if test "${ac_cv_type_getgroups+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- if test "$cross_compiling" = yes; then
- ac_cv_type_getgroups=cross
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Thanks to Mike Rendell for this test. */
-$ac_includes_default
-#define NGID 256
-#undef MAX
-#define MAX(x, y) ((x) > (y) ? (x) : (y))
-
-int
-main ()
-{
- gid_t gidset[NGID];
- int i, n;
- union { gid_t gval; long int lval; } val;
-
- val.lval = -1;
- for (i = 0; i < NGID; i++)
- gidset[i] = val.gval;
- n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1,
- gidset);
- /* Exit non-zero if getgroups seems to require an array of ints. This
- happens when gid_t is short int but getgroups modifies an array
- of ints. */
- return n > 0 && gidset[n] != val.gval;
-}
-_ACEOF
-rm -f conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
- { (case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- ac_cv_type_getgroups=gid_t
-else
- echo "$as_me: program exited with status $ac_status" >&5
-echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-( exit $ac_status )
-ac_cv_type_getgroups=int
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
-fi
-
-
-if test $ac_cv_type_getgroups = cross; then
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-#include <unistd.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1; then
- ac_cv_type_getgroups=gid_t
-else
- ac_cv_type_getgroups=int
-fi
-rm -f conftest*
-
-fi
-fi
-{ echo "$as_me:$LINENO: result: $ac_cv_type_getgroups" >&5
-echo "${ECHO_T}$ac_cv_type_getgroups" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define GETGROUPS_T $ac_cv_type_getgroups
-_ACEOF
-
-
-
-# Checks for library functions.
-
-for ac_func in vsnprintf
-do
-as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
-{ echo "$as_me:$LINENO: checking for $ac_func" >&5
-echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
-if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $ac_func innocuous_$ac_func
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $ac_func
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $ac_func ();
-/* The GNU C library defines this for functions which it implements
- to always fail with ENOSYS. Some functions are actually named
- something starting with __ and the normal name is an alias. */
-#if defined __stub_$ac_func || defined __stub___$ac_func
-choke me
-#endif
-
-int
-main ()
-{
-return $ac_func ();
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext conftest$ac_exeext
-if { (ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
- (eval "$ac_link") 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext &&
- $as_test_x conftest$ac_exeext; then
- eval "$as_ac_var=yes"
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- eval "$as_ac_var=no"
-fi
-
-rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
- conftest$ac_exeext conftest.$ac_ext
-fi
-ac_res=`eval echo '${'$as_ac_var'}'`
- { echo "$as_me:$LINENO: result: $ac_res" >&5
-echo "${ECHO_T}$ac_res" >&6; }
-if test `eval echo '${'$as_ac_var'}'` = yes; then
- cat >>confdefs.h <<_ACEOF
-#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-
-
-
-SCRIPTS="build/bin/check_db:bin/check_db \
-build/bin/cleanarch:bin/cleanarch \
-build/bin/clone_member:bin/clone_member \
-build/bin/convert.py:bin/convert.py \
-build/bin/discard:bin/discard \
-build/bin/fix_url.py:bin/fix_url.py \
-build/bin/list_admins:bin/list_admins \
-build/bin/mmshell:bin/mmshell \
-build/bin/msgfmt.py:bin/msgfmt.py \
-build/bin/pygettext.py:bin/pygettext.py \
-build/bin/remove_members:bin/remove_members \
-build/bin/reset_pw.py:bin/reset_pw.py \
-build/bin/sync_members:bin/sync_members \
-build/bin/transcheck:bin/transcheck \
-build/bin/templ2pot.py:bin/templ2pot.py \
-build/bin/po2templ.py:bin/po2templ.py \
-build/contrib/check_perms_grsecurity.py:contrib/check_perms_grsecurity.py \
-build/contrib/qmail-to-mailman.py:contrib/qmail-to-mailman.py \
-build/contrib/rotatelogs.py:contrib/rotatelogs.py \
-"
-
-
-
-# These directories are temporary directories to store macro-expanded
-# scripts. They're removed on a make distclean, so we make them here.
-mkdir -p build/bin build/contrib build/cron
-
-ac_config_files="$ac_config_files misc/paths.py Mailman/Defaults.py Mailman/mm_cfg.py.dist src/Makefile misc/Makefile bin/Makefile Mailman/bin/Makefile Mailman/Makefile Mailman/Cgi/Makefile Mailman/database/Makefile Mailman/database/model/Makefile Mailman/docs/Makefile Mailman/ext/Makefile Mailman/interfaces/Makefile Mailman/Archiver/Makefile Mailman/Commands/Makefile Mailman/Handlers/Makefile Mailman/Bouncers/Makefile Mailman/Queue/Makefile Mailman/Queue/tests/Makefile Mailman/MTA/Makefile Mailman/Gui/Makefile templates/Makefile cron/Makefile scripts/Makefile messages/Makefile cron/crontab.in misc/mailman Makefile Mailman/testing/Makefile Mailman/testing/bounces/Makefile tests/Makefile tests/msgs/Makefile $SCRIPTS"
-
-ac_config_commands="$ac_config_commands default"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
-echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- *) $as_unset $ac_var ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes (double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \).
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { echo "$as_me:$LINENO: updating cache $cache_file" >&5
-echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
-echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-# Transform confdefs.h into DEFS.
-# Protect against shell expansion while executing Makefile rules.
-# Protect against Makefile macro expansion.
-#
-# If the first sed substitution is executed (which looks for macros that
-# take arguments), then branch to the quote section. Otherwise,
-# look for a macro that doesn't take arguments.
-ac_script='
-t clear
-:clear
-s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g
-t quote
-b any
-:quote
-s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g
-s/\[/\\&/g
-s/\]/\\&/g
-s/\$/$$/g
-H
-:any
-${
- g
- s/^\n//
- s/\n/ /g
- p
-}
-'
-DEFS=`sed -n "$ac_script" confdefs.h`
-
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
-echo "$as_me: creating $CONFIG_STATUS" >&6;}
-cat >$CONFIG_STATUS <<_ACEOF
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-SHELL=\${CONFIG_SHELL-$SHELL}
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-## --------------------- ##
-## M4sh Initialization. ##
-## --------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
- emulate sh
- NULLCMD=:
- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in
- *posix*) set -o posix ;;
-esac
-
-fi
-
-
-
-
-# PATH needs CR
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- echo "#! /bin/sh" >conf$$.sh
- echo "exit 0" >>conf$$.sh
- chmod +x conf$$.sh
- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
- PATH_SEPARATOR=';'
- else
- PATH_SEPARATOR=:
- fi
- rm -f conf$$.sh
-fi
-
-# Support unset when possible.
-if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
- as_unset=unset
-else
- as_unset=false
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-as_nl='
-'
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- { (exit 1); exit 1; }
-fi
-
-# Work around bugs in pre-3.0 UWIN ksh.
-for as_var in ENV MAIL MAILPATH
-do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-for as_var in \
- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
- LC_TELEPHONE LC_TIME
-do
- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
- eval $as_var=C; export $as_var
- else
- ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
- fi
-done
-
-# Required to use basename.
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-
-# Name of the executable.
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# CDPATH.
-$as_unset CDPATH
-
-
-
- as_lineno_1=$LINENO
- as_lineno_2=$LINENO
- test "x$as_lineno_1" != "x$as_lineno_2" &&
- test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
-
- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
- # uniformly replaced by the line number. The first 'sed' inserts a
- # line-number line after each line using $LINENO; the second 'sed'
- # does the real work. The second script uses 'N' to pair each
- # line-number line with the line containing $LINENO, and appends
- # trailing '-' during substitution so that $LINENO is not a special
- # case at line end.
- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
- # scripts with optimization help from Paolo Bonzini. Blame Lee
- # E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
- { (exit 1); exit 1; }; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in
--n*)
- case `echo 'x\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- *) ECHO_C='\c';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir
-fi
-echo >conf$$.file
-if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
-elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p=:
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-
-# Save the log message, to keep $[0] and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by GNU Mailman $as_me 2.2.0a0, which was
-generated by GNU Autoconf 2.61. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<_ACEOF
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-ac_cs_usage="\
-\`$as_me' instantiates files from templates according to the
-current configuration.
-
-Usage: $0 [OPTIONS] [FILE]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
-
-Configuration files:
-$config_files
-
-Configuration commands:
-$config_commands
-
-Report bugs to <bug-autoconf@gnu.org>."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-ac_cs_version="\\
-GNU Mailman config.status 2.2.0a0
-configured by $0, generated by GNU Autoconf 2.61,
- with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2006 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If no file are specified by the user, then we need to provide default
-# value. By we need to know if files were specified by the user.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- CONFIG_FILES="$CONFIG_FILES $ac_optarg"
- ac_need_defaults=false;;
- --he | --h | --help | --hel | -h )
- echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) { echo "$as_me: error: unrecognized option: $1
-Try \`$0 --help' for more information." >&2
- { (exit 1); exit 1; }; } ;;
-
- *) ac_config_targets="$ac_config_targets $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-if \$ac_cs_recheck; then
- echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
- CONFIG_SHELL=$SHELL
- export CONFIG_SHELL
- exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "misc/paths.py") CONFIG_FILES="$CONFIG_FILES misc/paths.py" ;;
- "Mailman/Defaults.py") CONFIG_FILES="$CONFIG_FILES Mailman/Defaults.py" ;;
- "Mailman/mm_cfg.py.dist") CONFIG_FILES="$CONFIG_FILES Mailman/mm_cfg.py.dist" ;;
- "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
- "misc/Makefile") CONFIG_FILES="$CONFIG_FILES misc/Makefile" ;;
- "bin/Makefile") CONFIG_FILES="$CONFIG_FILES bin/Makefile" ;;
- "Mailman/bin/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/bin/Makefile" ;;
- "Mailman/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Makefile" ;;
- "Mailman/Cgi/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Cgi/Makefile" ;;
- "Mailman/database/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/database/Makefile" ;;
- "Mailman/database/model/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/database/model/Makefile" ;;
- "Mailman/docs/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/docs/Makefile" ;;
- "Mailman/ext/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/ext/Makefile" ;;
- "Mailman/interfaces/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/interfaces/Makefile" ;;
- "Mailman/Archiver/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Archiver/Makefile" ;;
- "Mailman/Commands/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Commands/Makefile" ;;
- "Mailman/Handlers/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Handlers/Makefile" ;;
- "Mailman/Bouncers/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Bouncers/Makefile" ;;
- "Mailman/Queue/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Queue/Makefile" ;;
- "Mailman/Queue/tests/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Queue/tests/Makefile" ;;
- "Mailman/MTA/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/MTA/Makefile" ;;
- "Mailman/Gui/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/Gui/Makefile" ;;
- "templates/Makefile") CONFIG_FILES="$CONFIG_FILES templates/Makefile" ;;
- "cron/Makefile") CONFIG_FILES="$CONFIG_FILES cron/Makefile" ;;
- "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
- "messages/Makefile") CONFIG_FILES="$CONFIG_FILES messages/Makefile" ;;
- "cron/crontab.in") CONFIG_FILES="$CONFIG_FILES cron/crontab.in" ;;
- "misc/mailman") CONFIG_FILES="$CONFIG_FILES misc/mailman" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "Mailman/testing/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/testing/Makefile" ;;
- "Mailman/testing/bounces/Makefile") CONFIG_FILES="$CONFIG_FILES Mailman/testing/bounces/Makefile" ;;
- "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;;
- "tests/msgs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/msgs/Makefile" ;;
- "$SCRIPTS") CONFIG_FILES="$CONFIG_FILES $SCRIPTS" ;;
- "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
-
- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
-echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
- { (exit 1); exit 1; }; };;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap '{ (exit 1); exit 1; }' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} ||
-{
- echo "$me: cannot create a temporary directory in ." >&2
- { (exit 1); exit 1; }
-}
-
-#
-# Set up the sed scripts for CONFIG_FILES section.
-#
-
-# No need to generate the scripts if there are no CONFIG_FILES.
-# This happens for instance when ./config.status config.h
-if test -n "$CONFIG_FILES"; then
-
-_ACEOF
-
-
-
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- cat >conf$$subs.sed <<_ACEOF
-SHELL!$SHELL$ac_delim
-PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
-PACKAGE_NAME!$PACKAGE_NAME$ac_delim
-PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
-PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
-PACKAGE_STRING!$PACKAGE_STRING$ac_delim
-PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
-exec_prefix!$exec_prefix$ac_delim
-prefix!$prefix$ac_delim
-program_transform_name!$program_transform_name$ac_delim
-bindir!$bindir$ac_delim
-sbindir!$sbindir$ac_delim
-libexecdir!$libexecdir$ac_delim
-datarootdir!$datarootdir$ac_delim
-datadir!$datadir$ac_delim
-sysconfdir!$sysconfdir$ac_delim
-sharedstatedir!$sharedstatedir$ac_delim
-localstatedir!$localstatedir$ac_delim
-includedir!$includedir$ac_delim
-oldincludedir!$oldincludedir$ac_delim
-docdir!$docdir$ac_delim
-infodir!$infodir$ac_delim
-htmldir!$htmldir$ac_delim
-dvidir!$dvidir$ac_delim
-pdfdir!$pdfdir$ac_delim
-psdir!$psdir$ac_delim
-libdir!$libdir$ac_delim
-localedir!$localedir$ac_delim
-mandir!$mandir$ac_delim
-DEFS!$DEFS$ac_delim
-ECHO_C!$ECHO_C$ac_delim
-ECHO_N!$ECHO_N$ac_delim
-ECHO_T!$ECHO_T$ac_delim
-LIBS!$LIBS$ac_delim
-build_alias!$build_alias$ac_delim
-host_alias!$host_alias$ac_delim
-target_alias!$target_alias$ac_delim
-with_python!$with_python$ac_delim
-PYTHON!$PYTHON$ac_delim
-INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
-INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
-INSTALL_DATA!$INSTALL_DATA$ac_delim
-LN_S!$LN_S$ac_delim
-SET_MAKE!$SET_MAKE$ac_delim
-TRUE!$TRUE$ac_delim
-CC!$CC$ac_delim
-CFLAGS!$CFLAGS$ac_delim
-LDFLAGS!$LDFLAGS$ac_delim
-CPPFLAGS!$CPPFLAGS$ac_delim
-ac_ct_CC!$ac_ct_CC$ac_delim
-EXEEXT!$EXEEXT$ac_delim
-OBJEXT!$OBJEXT$ac_delim
-OPT!$OPT$ac_delim
-VAR_PREFIX!$VAR_PREFIX$ac_delim
-MAILMAN_USER!$MAILMAN_USER$ac_delim
-MAILMAN_GROUP!$MAILMAN_GROUP$ac_delim
-MAIL_GROUP!$MAIL_GROUP$ac_delim
-CGI_GROUP!$CGI_GROUP$ac_delim
-CGIEXT!$CGIEXT$ac_delim
-MAILHOST!$MAILHOST$ac_delim
-URLHOST!$URLHOST$ac_delim
-LANGUAGES!$LANGUAGES$ac_delim
-CPP!$CPP$ac_delim
-GREP!$GREP$ac_delim
-EGREP!$EGREP$ac_delim
-SCRIPTS!$SCRIPTS$ac_delim
-LIBOBJS!$LIBOBJS$ac_delim
-LTLIBOBJS!$LTLIBOBJS$ac_delim
-_ACEOF
-
- if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 68; then
- break
- elif $ac_last_try; then
- { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
-echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
- { (exit 1); exit 1; }; }
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
-if test -n "$ac_eof"; then
- ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
- ac_eof=`expr $ac_eof + 1`
-fi
-
-cat >>$CONFIG_STATUS <<_ACEOF
-cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
-_ACEOF
-sed '
-s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
-s/^/s,@/; s/!/@,|#_!!_#|/
-:n
-t n
-s/'"$ac_delim"'$/,g/; t
-s/$/\\/; p
-N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
-' >>$CONFIG_STATUS <conf$$subs.sed
-rm -f conf$$subs.sed
-cat >>$CONFIG_STATUS <<_ACEOF
-:end
-s/|#_!!_#|//g
-CEOF$ac_eof
-_ACEOF
-
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-fi # test -n "$CONFIG_FILES"
-
-
-for ac_tag in :F $CONFIG_FILES :C $CONFIG_COMMANDS
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
-echo "$as_me: error: Invalid tag $ac_tag." >&2;}
- { (exit 1); exit 1; }; };;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
-echo "$as_me: error: cannot find input file: $ac_f" >&2;}
- { (exit 1); exit 1; }; };;
- esac
- ac_file_inputs="$ac_file_inputs $ac_f"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input="Generated from "`IFS=:
- echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { echo "$as_me:$LINENO: creating $ac_file" >&5
-echo "$as_me: creating $ac_file" >&6;}
- fi
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin";;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- { as_dir="$ac_dir"
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
-echo "$as_me: error: cannot create directory $as_dir" >&2;}
- { (exit 1); exit 1; }; }; }
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-
-case `sed -n '/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p
-' $ac_file_inputs` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF
- sed "$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s&@configure_input@&$configure_input&;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-" $ac_file_inputs | sed -f "$tmp/subs-1.sed" >$tmp/out
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out"; rm -f "$tmp/out";;
- *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
- esac
- ;;
-
-
- :C) { echo "$as_me:$LINENO: executing $ac_file commands" >&5
-echo "$as_me: executing $ac_file commands" >&6;}
- ;;
- esac
-
-
- case $ac_file$ac_mode in
- "default":C) echo "configuration completed at" `date` ;;
-
- esac
-done # for ac_tag
-
-
-{ (exit 0); exit 0; }
-_ACEOF
-chmod +x $CONFIG_STATUS
-ac_clean_files=$ac_clean_files_save
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || { (exit 1); exit 1; }
-fi
-
-
-# Make sure all the build scripts are executable.
-chmod -R +x build
diff --git a/configure.in b/configure.in
deleted file mode 100644
index dd637d7e6..000000000
--- a/configure.in
+++ /dev/null
@@ -1,653 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-dnl Process this file with autoconf to produce a configure script.
-AC_REVISION($Revision: 8228 $)
-AC_PREREQ(2.0)
-AC_INIT([GNU Mailman], [2.2.0a0])
-
-# /usr/local/mailman is the default installation directory
-AC_PREFIX_DEFAULT(/usr/local/mailman)
-
-
-# Check for Python! Better be found on $PATH
-AC_MSG_CHECKING(for --with-python)
-AC_ARG_WITH(python, dnl
-[ --with-python specify path to Python interpreter])
-case "$with_python" in
- "") ans="no";;
- *) ans="$with_python"
-esac
-AC_MSG_RESULT($ans)
-
-if test -z "$with_python"
-then
- AC_PATH_PROG(with_python, python, /usr/local/bin/python)
-fi
-
-AC_MSG_CHECKING(Python interpreter)
-if test ! -x $with_python
-then
- AC_MSG_ERROR([
-
-***** No Python interpreter found!
-***** Try including the configure option
-***** --with-python=/path/to/python/interpreter])
-fi
-AC_SUBST(PYTHON)
-PYTHON=$with_python
-AC_MSG_RESULT($PYTHON)
-
-# See if Python is new enough. 2.5 or better is required.
-AC_MSG_CHECKING(Python version)
-changequote(,)
-cat > conftest.py <<EOF
-import sys
-try:
- v = sys.hexversion
-except AttributeError:
- v = 0
-if v >= 0x20500f0:
- s = sys.version.split()[0]
-else:
- s = ""
-fp = open("conftest.out", "w")
-fp.write("%s\n" % s)
-fp.close()
-EOF
-changequote([, ])
-$PYTHON conftest.py
-version=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test -z "$version"
-then
- AC_MSG_ERROR([
-
-***** $PYTHON is too old (or broken)
-***** Python 2.5 or newer is required])
-fi
-AC_MSG_RESULT($version)
-
-# Make sure distutils is available. Some Linux Python packages split
-# distutils into the "-devel" package, so they need both.
-AC_MSG_CHECKING(that Python has a working distutils)
-changequote(,)
-cat > conftest.py <<EOF
-try:
- import distutils.errors
- import distutils.sysconfig
-except ImportError:
- res = "no"
-else:
- try:
- distutils.sysconfig.get_config_vars()
- except distutils.errors.DistutilsPlatformError:
- res = "no"
- else:
- res = "yes"
-fp = open("conftest.out", "w")
-fp.write("%s\n" % res)
-fp.close()
-EOF
-changequote([, ])
-$PYTHON conftest.py
-havedistutils=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test "$havedistutils" != "yes"
-then
- AC_MSG_ERROR([
-
-***** Distutils is not available or is incomplete for $PYTHON
-***** If you installed Python from RPM (or other package manager)
-***** be sure to install the -devel package, or install Python
-***** from source. See README.LINUX for details])
-fi
-AC_MSG_RESULT($havedistutils)
-
-# Checks for programs.
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_PROG_MAKE_SET
-AC_PATH_PROG(TRUE, true, true, $PATH:/bin:/usr/bin)
-
-# Find compiler, allow alternatives to gcc
-AC_MSG_CHECKING(for --without-gcc)
-AC_ARG_WITH(gcc, [ --without-gcc never use gcc], [
- case $withval in
- no) CC=cc
- without_gcc=yes;;
- yes) CC=gcc
- without_gcc=no;;
- *) CC=$withval
- without_gcc=$withval;;
- esac], without_gcc=no;)
-AC_MSG_RESULT($without_gcc)
-
-# If the user switches compilers, we can't believe the cache
-if test ! -z "$ac_cv_prog_CC" -a ! -z "$CC" -a "$CC" != "$ac_cv_prog_CC"
-then
- AC_ERROR(cached CC is different -- throw away $cache_file
-(it is also a good idea to do 'make clean' before compiling))
-fi
-
-AC_PROG_CC
-
-
-# Optimizer/debugger flags passed between Makefiles
-AC_SUBST(OPT)
-if test -z "$OPT"
-then
- case $GCC in
- yes)
- case $ac_cv_prog_cc_g in
- yes) OPT="-g -O2";;
- *) OPT="-O2";;
- esac
- ;;
- *) OPT="-O";;
- esac
-fi
-
-# We better be able to execute interpreters
-AC_SYS_INTERPRETER
-if test "$ac_cv_sys_interpreter" != "yes"
-then
- AC_MSG_ERROR([
-
-***** Cannot execute interpreter scripts?
-***** Are you sure you system doesn't support this?])
-fi
-
-
-# Check for an alternate data directory, separate from installation dir.
-default_var_prefix="/var/mailman"
-AC_SUBST(VAR_PREFIX)
-AC_MSG_CHECKING(for --with-var-prefix)
-AC_ARG_WITH(var-prefix, dnl
-[ --with-var-prefix directory for mutable data [/var/mailman]])
-case "$with_var_prefix" in
- yes) VAR_PREFIX="$default_var_prefix"; ans=$VAR_PREFIX;;
- ""|no) VAR_PREFIX="$prefix"; ans="no";;
- *) VAR_PREFIX="$with_var_prefix"; ans=$VAR_PREFIX;
-esac
-AC_MSG_RESULT($ans)
-
-AC_MSG_CHECKING(for --with-permcheck)
-AC_ARG_WITH(permcheck, dnl
-[ --without-permcheck skip the check for target directory permissions])
-if test -z "$with_permcheck"
-then
- with_permcheck="yes"
-fi
-AC_MSG_RESULT($with_permcheck)
-# Now make sure that $prefix is set up correctly. It must be group
-# owned by the target group, it must have the group sticky bit set, and
-# it must be a+rx
-if test "$VAR_PREFIX" = "NONE"
-then
- VAR_PREFIX=$ac_default_prefix
- prefixcheck=$ac_default_prefix
-else
- prefixcheck=$VAR_PREFIX
-fi
-
-# new macro for finding group names
-AC_DEFUN(MM_FIND_GROUP_NAME, [
-# $1 == variable name
-# $2 == user id to check for
-AC_SUBST($1)
-changequote(,)
-if test -z "$$1"
-then
- cat > conftest.py <<EOF
-import grp
-gid = ''
-for group in "$2".split():
- try:
- try:
- gname = grp.getgrgid(int(group))[0]
- break
- except ValueError:
- gname = grp.getgrnam(group)[0]
- break
- except KeyError:
- gname = ''
-fp = open("conftest.out", "w")
-fp.write("%s\n" % gname)
-fp.close()
-EOF
- $PYTHON conftest.py
- $1=`cat conftest.out`
-fi
-changequote([, ])
-rm -f conftest.out conftest.py])
-
-
-# new macro for finding UIDs
-AC_DEFUN(MM_FIND_USER_NAME, [
-# $1 == variable name
-# $2 == user id to check for
-AC_SUBST($1)
-changequote(,)
-if test -z "$$1"
-then
- cat > conftest.py <<EOF
-import pwd
-uid = ''
-for user in "$2".split():
- try:
- try:
- uname = pwd.getpwuid(int(user))[0]
- break
- except ValueError:
- uname = pwd.getpwnam(user)[0]
- break
- except KeyError:
- uname = ''
-fp = open("conftest.out", "w")
-fp.write("%s\n" % uname)
-fp.close()
-EOF
- $PYTHON conftest.py
- $1=`cat conftest.out`
-fi
-changequote([, ])
-rm -f conftest.out conftest.py])
-
-# Check for some other uid to use than `mailman'
-AC_MSG_CHECKING(for --with-username)
-AC_ARG_WITH(username, dnl
-[ --with-username specify a user name other than "mailman"])
-
-if test -z "$with_username"
-then
- with_username="mailman"
-fi
-USERNAME=$with_username
-AC_MSG_RESULT($USERNAME)
-
-# User `mailman' must exist
-AC_SUBST(MAILMAN_USER)
-AC_MSG_CHECKING(for user name \"$USERNAME\")
-MM_FIND_USER_NAME(MAILMAN_USER, $USERNAME)
-if test -z "$MAILMAN_USER"
-then
- if test "$with_permcheck" = "yes"
- then
- AC_MSG_ERROR([
-***** No \"$USERNAME\" user found!
-***** Your system must have a \"$USERNAME\" user defined
-***** (usually in your /etc/passwd file). Please see the INSTALL
-***** file for details.])
- fi
-fi
-AC_MSG_RESULT(okay)
-
-
-# Check for some other gid to use than `mailman'
-AC_MSG_CHECKING(for --with-groupname)
-AC_ARG_WITH(groupname, dnl
-[ --with-groupname specify a group name other than "mailman"])
-
-if test -z "$with_groupname"
-then
- with_groupname="mailman"
-fi
-GROUPNAME=$with_groupname
-AC_MSG_RESULT($GROUPNAME)
-
-
-# Target group must exist
-AC_SUBST(MAILMAN_GROUP)
-AC_MSG_CHECKING(for group name \"$GROUPNAME\")
-MM_FIND_GROUP_NAME(MAILMAN_GROUP, $GROUPNAME)
-if test -z "$MAILMAN_GROUP"
-then
- if test "$with_permcheck" = "yes"
- then
- AC_MSG_ERROR([
-***** No \"$GROUPNAME\" group found!
-***** Your system must have a \"$GROUPNAME\" group defined
-***** (usually in your /etc/group file). Please see the INSTALL
-***** file for details.])
- fi
-fi
-AC_MSG_RESULT(okay)
-
-
-AC_MSG_CHECKING(permissions on $prefixcheck)
-changequote(,)
-cat > conftest.py <<EOF
-import os, grp
-from stat import *
-prefix = "$prefixcheck"
-groupname = "$GROUPNAME"
-mailmangroup = "$MAILMAN_GROUP"
-try:
- mailmangid = grp.getgrnam(mailmangroup)[2]
-except KeyError:
- mailmangid = -1
-problems = []
-try: statdata = os.stat(prefix)
-except OSError:
- problems.append("Directory doesn't exist: " + prefix)
-else:
- mode = statdata[ST_MODE]
- gid = statdata[ST_GID]
- if mailmangid <> gid:
- problems.append("Directory must be owned by group " +
- groupname + ": " + prefix)
- if (mode & S_ISGID) <> S_ISGID:
- problems.append("Set-gid bit must be set for directory: " + prefix)
- perms = S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH
- if (mode & perms) <> perms:
- problems.append("Permissions should be at least 02775: " + prefix)
-if not problems:
- msg = "okay\n"
-else:
- msg = '***** ' + '\n***** '.join(problems) + '\n'
-fp = open("conftest.out", "w")
-fp.write(msg)
-fp.close()
-EOF
-changequote([, ])
-$PYTHON conftest.py
-status=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test "$with_permcheck" = "yes"
-then
- if test "$status" != "okay"
- then
- AC_MSG_ERROR([
-***** Installation directory $prefixcheck is not configured properly!
-$status])
- fi
-else
- status="skipped"
-fi
-AC_MSG_RESULT($status)
-
-
-# Now find the UIDs and GIDs
-# Support --with-mail-gid and --with-cgi-gid
-AC_MSG_CHECKING(for mail wrapper group; i.e. --with-mail-gid)
-AC_ARG_WITH(mail-gid, dnl
-[ --with-mail-gid group name mail programs run as])
-if test -z "$with_mail_gid"
-then
- with_mail_gid="mailman other mail daemon"
-fi
-MM_FIND_GROUP_NAME(MAIL_GROUP, $with_mail_gid)
-if test -z "$MAIL_GROUP"
-then
- if test "$with_permcheck" = "yes"
- then
- AC_MSG_ERROR([
-***** No group name \"$with_mail_gid\" found for the mail wrapper program.
-***** This is the group that your mail server will use to run Mailman's
-***** programs. You should specify an existing group with the
-***** --with-mail-gid configure option, or use --without-permcheck to
-***** skip this verification step. See also your mail server's documentation,
-***** and Mailman's INSTALL file for details])
- else
- MAIL_GROUP=$with_mail_gid
- fi
-fi
-AC_MSG_RESULT($MAIL_GROUP)
-
-
-AC_MSG_CHECKING(for CGI wrapper group; i.e. --with-cgi-gid)
-AC_ARG_WITH(cgi-gid, dnl
-[ --with-cgi-gid group name CGI programs run as])
-if test -z "$with_cgi_gid"
-then
- with_cgi_gid="www www-data nobody"
-fi
-
-MM_FIND_GROUP_NAME(CGI_GROUP, $with_cgi_gid)
-if test -z "$CGI_GROUP"
-then
- if test "$with_permcheck" = "yes"
- then
- AC_MSG_ERROR([
-***** No group name \"$with_cgi_gid\" found for the CGI wrapper program.
-***** This is the group that your web server will use to run Mailman's
-***** programs. You should specify an existing group with the
-***** --with-cgi-gid configure option, or use --without-permcheck to
-***** skip this verification step. See also your web server's documentation,
-***** and Mailman's INSTALL file for details])
- else
- CGI_GROUP=$with_cgi_gid
- fi
-fi
-AC_MSG_RESULT($CGI_GROUP)
-
-
-# Check for CGI extensions, required by some Web servers
-AC_SUBST(CGIEXT)
-AC_MSG_CHECKING(for CGI extensions)
-AC_ARG_WITH(cgi-ext, dnl
-[ --with-cgi-ext specify extension for CGI programs (include dot)])
-if test -z "$with_cgi_ext"
-then
- CGIEXT=''
- with_cgi_ext='no'
-else
- CGIEXT=$with_cgi_ext
-fi
-AC_MSG_RESULT($with_cgi_ext)
-
-
-# figure out the default mail hostname and url host component
-AC_SUBST(MAILHOST)
-AC_MSG_CHECKING(for --with-mailhost)
-AC_ARG_WITH(mailhost, dnl
-[ --with-mailhost specify the hostname part for outgoing email])
-if test -z "$with_mailhost"
-then
- MAILHOST=''
- with_mailhost='no'
-else
- MAILHOST=$with_mailhost
-fi
-AC_MSG_RESULT($with_mailhost)
-
-AC_SUBST(URLHOST)
-AC_MSG_CHECKING(for --with-urlhost)
-AC_ARG_WITH(urlhost, dnl
-[ --with-urlhost specify the hostname part of urls])
-if test -z "$with_urlhost"
-then
- URLHOST=''
- with_urlhost='no'
-else
- URLHOST=$with_urlhost
-fi
-AC_MSG_RESULT($with_urlhost)
-
-changequote(,)
-cat > conftest.py <<EOF
-# python
-from socket import *
-fqdn = getfqdn()
-fp = open('conftest.out', 'w')
-print >> fp, fqdn
-print >> fp, fqdn
-fp.close()
-EOF
-$PYTHON conftest.py
-changequote([, ])
-AC_MSG_CHECKING(for default mail host name)
-if test -z "$MAILHOST"
-then
- MAILHOST=`sed q conftest.out`
-fi
-AC_MSG_RESULT($MAILHOST)
-AC_MSG_CHECKING(for default URL host component)
-if test -z "$URLHOST"
-then
- URLHOST=`sed -n '$p' conftest.out`
-fi
-AC_MSG_RESULT($URLHOST)
-rm -f conftest.out conftest.py
-
-# i18n --with-languages
-ALL_LINGUAS=`(cd ${srcdir}/messages && ls | grep '^..\(_..\)*$' | tr '\n' ' ')`
-AC_SUBST(LANGUAGES)
-AC_MSG_CHECKING(for --with-languages)
-AC_ARG_WITH(languages, dnl
-[ --with-languages add i18n languages: specify "none" for English only.])
-if test -z "$with_languages"
-then
- LANGUAGES="$ALL_LINGUAS"
-elif test "$with_languages" = "none"
-then
- LANGUAGES=""
-else
- LANGUAGES="$with_languages"
-fi
-AC_MSG_RESULT($with_languages)
-
-# check CJKCodecs
-AC_MSG_CHECKING(for CJK codecs)
-changequote(,)
-cat > conftest.py <<EOF
-langs = "$LANGUAGES".split()
-cset = {'ja': 'euc-jp', 'ko': 'euc-kr',
- 'zh_CN': 'gb2312', 'zh_TW': 'big5'}
-s = 'Not required'
-for lang in cset.keys():
- if lang in langs:
- try:
- s = unicode('OK', cset[lang]).encode('us-ascii')
- except LookupError:
- s = ''
- break
-fp = open("conftest.out", "w")
-fp.write("%s\n" % s)
-fp.close()
-EOF
-changequote([, ])
-$PYTHON conftest.py
-cjkok=`cat conftest.out`
-rm -f conftest.out conftest.py
-if test -z "$cjkok"
-then
- AC_MSG_ERROR([
-***** At least one of the CJK codecs missing!
-***** You have included ja, ko, or zh_* in --with-languages
-***** but valid codecs are not installed. You should
-***** either install CJKCodecs from http://cjkpython.i18n.org/
-***** or use Python 2.4 in which CJK languages are supported.])
-fi
-AC_MSG_RESULT($cjkok)
-
-# Checks for libraries.
-AC_CHECK_FUNCS(strerror setregid syslog)
-if test $ac_cv_func_syslog = no; then
- # syslog is not in the default libraries. See if it's in some other.
- # Additionally, for at least SCO OpenServer, syslog() is #defined to
- # one of several _real_ functions in syslog.h, so we need to do the test
- # with the appropriate include.
- for lib in bsd socket inet; do
- AC_MSG_CHECKING(for syslog in -l$lib)
- Mailman_LIBS_save="$LIBS"; LIBS="$LIBS -l$lib"
- AC_TRY_LINK([#include <syslog.h>],
- [syslog(LOG_DEBUG, "Just a test...");],
- [AC_MSG_RESULT(yes)
- AC_DEFINE(HAVE_SYSLOG)
- break],
- [AC_MSG_RESULT(no)
- LIBS="$Mailman_LIBS_save"])
- unset Mailman_LIBS_save
- done
-fi
-
-# Checks for header files.
-AC_HEADER_STDC
-AC_CHECK_HEADERS(syslog.h)
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_TYPE_UID_T
-AC_TYPE_GETGROUPS
-
-# Checks for library functions.
-AC_CHECK_FUNCS(vsnprintf)
-
-dnl Expand PYTHON path in the scripts, output into build/scriptname
-
-AC_DEFUN(MM_SCRIPTS, [dnl
-bin/check_db \
-bin/cleanarch \
-bin/clone_member \
-bin/convert.py \
-bin/discard \
-bin/fix_url.py \
-bin/list_admins \
-bin/mmshell \
-bin/msgfmt.py \
-bin/pygettext.py \
-bin/remove_members \
-bin/reset_pw.py \
-bin/sync_members \
-bin/transcheck \
-bin/templ2pot.py \
-bin/po2templ.py \
-contrib/check_perms_grsecurity.py \
-contrib/qmail-to-mailman.py \
-contrib/rotatelogs.py \
-])
-
-dnl Please make sure to leave a space at the end of the last entry.
-dnl (This is so we don't have to use [a-z/] style character classes
-dnl in the regexp below and mess with m4 quoting, which is not fun.)
-
-dnl This regexp munges each line in MM_SCRIPTS, replacing:
-dnl path/script \
-dnl with:
-dnl build/path/script:path/script \
-dnl so that we can macro-expand variables in scripts without using
-dnl script.in filenames, outputting the new files in build/ .
-
-SCRIPTS="patsubst(MM_SCRIPTS, \(.+\) \(\\?\), build/\1:\1 \2)"
-
-AC_SUBST(SCRIPTS)
-
-# These directories are temporary directories to store macro-expanded
-# scripts. They're removed on a make distclean, so we make them here.
-mkdir -p build/bin build/contrib build/cron
-
-dnl Output everything
-AC_OUTPUT([misc/paths.py Mailman/Defaults.py Mailman/mm_cfg.py.dist
- src/Makefile misc/Makefile bin/Makefile Mailman/bin/Makefile
- Mailman/Makefile Mailman/Cgi/Makefile
- Mailman/database/Makefile
- Mailman/database/model/Makefile Mailman/docs/Makefile
- Mailman/ext/Makefile Mailman/interfaces/Makefile
- Mailman/Archiver/Makefile Mailman/Commands/Makefile
- Mailman/Handlers/Makefile Mailman/Bouncers/Makefile
- Mailman/Queue/Makefile Mailman/Queue/tests/Makefile
- Mailman/MTA/Makefile Mailman/Gui/Makefile
- templates/Makefile cron/Makefile scripts/Makefile messages/Makefile
- cron/crontab.in misc/mailman Makefile
- Mailman/testing/Makefile Mailman/testing/bounces/Makefile
- tests/Makefile tests/msgs/Makefile
- $SCRIPTS],
- echo "configuration completed at" `date`)
-
-# Make sure all the build scripts are executable.
-chmod -R +x build
diff --git a/cron/Makefile.in b/cron/Makefile.in
deleted file mode 100644
index ed3f217a0..000000000
--- a/cron/Makefile.in
+++ /dev/null
@@ -1,78 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-LN_S= @LN_S@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-CRONDIR= $(prefix)/cron
-SCRIPTSDIR= ../bin
-
-SHELL= /bin/sh
-
-LN_PROGRAMS= bumpdigests checkdbs disabled gate_news nightly_gzip senddigests
-FILES= crontab.in
-BUILDDIR= ../build/cron
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-EXEMODE= 755
-FILEMODE= 644
-
-
-# Rules
-
-all:
-
-install:
- for f in $(FILES); \
- do \
- $(INSTALL) -m $(FILEMODE) $$f $(DESTDIR)$(CRONDIR); \
- done
- for f in $(LN_PROGRAMS); \
- do \
- rm -f $(DESTDIR)$(CRONDIR)/$$f; \
- (cd $(DESTDIR)$(CRONDIR); $(LN_S) $(SCRIPTSDIR)/mmshell $$f); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm Makefile crontab.in
diff --git a/ez_setup.py b/ez_setup.py
new file mode 100644
index 000000000..38c09c624
--- /dev/null
+++ b/ez_setup.py
@@ -0,0 +1,228 @@
+#!python
+"""Bootstrap setuptools installation
+
+If you want to use setuptools in your package's setup.py, just include this
+file in the same directory with it, and add this to the top of your setup.py::
+
+ from ez_setup import use_setuptools
+ use_setuptools()
+
+If you want to require a specific version of setuptools, set a download
+mirror, or use an alternate download directory, you can do so by supplying
+the appropriate options to ``use_setuptools()``.
+
+This file can also be run as a script to install or upgrade setuptools.
+"""
+import sys
+DEFAULT_VERSION = "0.6c5"
+DEFAULT_URL = "http://cheeseshop.python.org/packages/%s/s/setuptools/" % sys.version[:3]
+
+md5_data = {
+ 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca',
+ 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb',
+ 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b',
+ 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a',
+ 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618',
+ 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac',
+ 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5',
+ 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4',
+ 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c',
+ 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b',
+ 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27',
+ 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277',
+ 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa',
+ 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e',
+ 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e',
+ 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f',
+ 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2',
+ 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc',
+ 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167',
+ 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64',
+ 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d',
+}
+
+import sys, os
+
+def _validate_md5(egg_name, data):
+ if egg_name in md5_data:
+ from md5 import md5
+ digest = md5(data).hexdigest()
+ if digest != md5_data[egg_name]:
+ print >>sys.stderr, (
+ "md5 validation of %s failed! (Possible download problem?)"
+ % egg_name
+ )
+ sys.exit(2)
+ return data
+
+
+def use_setuptools(
+ version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
+ download_delay=15
+):
+ """Automatically find/download setuptools and make it available on sys.path
+
+ `version` should be a valid setuptools version number that is available
+ as an egg for download under the `download_base` URL (which should end with
+ a '/'). `to_dir` is the directory where setuptools will be downloaded, if
+ it is not already available. If `download_delay` is specified, it should
+ be the number of seconds that will be paused before initiating a download,
+ should one be required. If an older version of setuptools is installed,
+ this routine will print a message to ``sys.stderr`` and raise SystemExit in
+ an attempt to abort the calling script.
+ """
+ try:
+ import setuptools
+ if setuptools.__version__ == '0.0.1':
+ print >>sys.stderr, (
+ "You have an obsolete version of setuptools installed. Please\n"
+ "remove it from your system entirely before rerunning this script."
+ )
+ sys.exit(2)
+ except ImportError:
+ egg = download_setuptools(version, download_base, to_dir, download_delay)
+ sys.path.insert(0, egg)
+ import setuptools; setuptools.bootstrap_install_from = egg
+
+ import pkg_resources
+ try:
+ pkg_resources.require("setuptools>="+version)
+
+ except pkg_resources.VersionConflict, e:
+ # XXX could we install in a subprocess here?
+ print >>sys.stderr, (
+ "The required version of setuptools (>=%s) is not available, and\n"
+ "can't be installed while this script is running. Please install\n"
+ " a more recent version first.\n\n(Currently using %r)"
+ ) % (version, e.args[0])
+ sys.exit(2)
+
+def download_setuptools(
+ version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir,
+ delay = 15
+):
+ """Download setuptools from a specified location and return its filename
+
+ `version` should be a valid setuptools version number that is available
+ as an egg for download under the `download_base` URL (which should end
+ with a '/'). `to_dir` is the directory where the egg will be downloaded.
+ `delay` is the number of seconds to pause before an actual download attempt.
+ """
+ import urllib2, shutil
+ egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3])
+ url = download_base + egg_name
+ saveto = os.path.join(to_dir, egg_name)
+ src = dst = None
+ if not os.path.exists(saveto): # Avoid repeated downloads
+ try:
+ from distutils import log
+ if delay:
+ log.warn("""
+---------------------------------------------------------------------------
+This script requires setuptools version %s to run (even to display
+help). I will attempt to download it for you (from
+%s), but
+you may need to enable firewall access for this script first.
+I will start the download in %d seconds.
+
+(Note: if this machine does not have network access, please obtain the file
+
+ %s
+
+and place it in this directory before rerunning this script.)
+---------------------------------------------------------------------------""",
+ version, download_base, delay, url
+ ); from time import sleep; sleep(delay)
+ log.warn("Downloading %s", url)
+ src = urllib2.urlopen(url)
+ # Read/write all in one block, so we don't create a corrupt file
+ # if the download is interrupted.
+ data = _validate_md5(egg_name, src.read())
+ dst = open(saveto,"wb"); dst.write(data)
+ finally:
+ if src: src.close()
+ if dst: dst.close()
+ return os.path.realpath(saveto)
+
+def main(argv, version=DEFAULT_VERSION):
+ """Install or upgrade setuptools and EasyInstall"""
+
+ try:
+ import setuptools
+ except ImportError:
+ egg = None
+ try:
+ egg = download_setuptools(version, delay=0)
+ sys.path.insert(0,egg)
+ from setuptools.command.easy_install import main
+ return main(list(argv)+[egg]) # we're done here
+ finally:
+ if egg and os.path.exists(egg):
+ os.unlink(egg)
+ else:
+ if setuptools.__version__ == '0.0.1':
+ # tell the user to uninstall obsolete version
+ use_setuptools(version)
+
+ req = "setuptools>="+version
+ import pkg_resources
+ try:
+ pkg_resources.require(req)
+ except pkg_resources.VersionConflict:
+ try:
+ from setuptools.command.easy_install import main
+ except ImportError:
+ from easy_install import main
+ main(list(argv)+[download_setuptools(delay=0)])
+ sys.exit(0) # try to force an exit
+ else:
+ if argv:
+ from setuptools.command.easy_install import main
+ main(argv)
+ else:
+ print "Setuptools version",version,"or greater has been installed."
+ print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)'
+
+
+
+def update_md5(filenames):
+ """Update our built-in md5 registry"""
+
+ import re
+ from md5 import md5
+
+ for name in filenames:
+ base = os.path.basename(name)
+ f = open(name,'rb')
+ md5_data[base] = md5(f.read()).hexdigest()
+ f.close()
+
+ data = [" %r: %r,\n" % it for it in md5_data.items()]
+ data.sort()
+ repl = "".join(data)
+
+ import inspect
+ srcfile = inspect.getsourcefile(sys.modules[__name__])
+ f = open(srcfile, 'rb'); src = f.read(); f.close()
+
+ match = re.search("\nmd5_data = {\n([^}]+)}", src)
+ if not match:
+ print >>sys.stderr, "Internal error!"
+ sys.exit(2)
+
+ src = src[:match.start(1)] + repl + src[match.end(1):]
+ f = open(srcfile,'w')
+ f.write(src)
+ f.close()
+
+
+if __name__=='__main__':
+ if len(sys.argv)>2 and sys.argv[1]=='--md5update':
+ update_md5(sys.argv[2:])
+ else:
+ main(sys.argv[1:])
+
+
+
+
+
diff --git a/install-sh b/install-sh
deleted file mode 100755
index ebc66913e..000000000
--- a/install-sh
+++ /dev/null
@@ -1,250 +0,0 @@
-#! /bin/sh
-#
-# install - install a program, script, or datafile
-# This comes from X11R5 (mit/util/scripts/install.sh).
-#
-# Copyright 1991 by the Massachusetts Institute of Technology
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of M.I.T. not be used in advertising or
-# publicity pertaining to distribution of the software without specific,
-# written prior permission. M.I.T. makes no representations about the
-# suitability of this software for any purpose. It is provided "as is"
-# without express or implied warranty.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# `make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch. It can only install one file at a time, a restriction
-# shared with many OS's install programs.
-
-
-# set DOITPROG to echo to test this script
-
-# Don't use :- since 4.3BSD and earlier shells don't like it.
-doit="${DOITPROG-}"
-
-
-# put in absolute paths if you don't have them in your path; or use env. vars.
-
-mvprog="${MVPROG-mv}"
-cpprog="${CPPROG-cp}"
-chmodprog="${CHMODPROG-chmod}"
-chownprog="${CHOWNPROG-chown}"
-chgrpprog="${CHGRPPROG-chgrp}"
-stripprog="${STRIPPROG-strip}"
-rmprog="${RMPROG-rm}"
-mkdirprog="${MKDIRPROG-mkdir}"
-
-transformbasename=""
-transform_arg=""
-instcmd="$mvprog"
-chmodcmd="$chmodprog 0755"
-chowncmd=""
-chgrpcmd=""
-stripcmd=""
-rmcmd="$rmprog -f"
-mvcmd="$mvprog"
-src=""
-dst=""
-dir_arg=""
-
-while [ x"$1" != x ]; do
- case $1 in
- -c) instcmd="$cpprog"
- shift
- continue;;
-
- -d) dir_arg=true
- shift
- continue;;
-
- -m) chmodcmd="$chmodprog $2"
- shift
- shift
- continue;;
-
- -o) chowncmd="$chownprog $2"
- shift
- shift
- continue;;
-
- -g) chgrpcmd="$chgrpprog $2"
- shift
- shift
- continue;;
-
- -s) stripcmd="$stripprog"
- shift
- continue;;
-
- -t=*) transformarg=`echo $1 | sed 's/-t=//'`
- shift
- continue;;
-
- -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
- shift
- continue;;
-
- *) if [ x"$src" = x ]
- then
- src=$1
- else
- # this colon is to work around a 386BSD /bin/sh bug
- :
- dst=$1
- fi
- shift
- continue;;
- esac
-done
-
-if [ x"$src" = x ]
-then
- echo "install: no input file specified"
- exit 1
-else
- true
-fi
-
-if [ x"$dir_arg" != x ]; then
- dst=$src
- src=""
-
- if [ -d $dst ]; then
- instcmd=:
- else
- instcmd=mkdir
- fi
-else
-
-# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
-# might cause directories to be created, which would be especially bad
-# if $src (and thus $dsttmp) contains '*'.
-
- if [ -f $src -o -d $src ]
- then
- true
- else
- echo "install: $src does not exist"
- exit 1
- fi
-
- if [ x"$dst" = x ]
- then
- echo "install: no destination specified"
- exit 1
- else
- true
- fi
-
-# If destination is a directory, append the input filename; if your system
-# does not like double slashes in filenames, you may need to add some logic
-
- if [ -d $dst ]
- then
- dst="$dst"/`basename $src`
- else
- true
- fi
-fi
-
-## this sed command emulates the dirname command
-dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
-
-# Make sure that the destination directory exists.
-# this part is taken from Noah Friedman's mkinstalldirs script
-
-# Skip lots of stat calls in the usual case.
-if [ ! -d "$dstdir" ]; then
-defaultIFS='
-'
-IFS="${IFS-${defaultIFS}}"
-
-oIFS="${IFS}"
-# Some sh's can't handle IFS=/ for some reason.
-IFS='%'
-set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
-IFS="${oIFS}"
-
-pathcomp=''
-
-while [ $# -ne 0 ] ; do
- pathcomp="${pathcomp}${1}"
- shift
-
- if [ ! -d "${pathcomp}" ] ;
- then
- $mkdirprog "${pathcomp}"
- else
- true
- fi
-
- pathcomp="${pathcomp}/"
-done
-fi
-
-if [ x"$dir_arg" != x ]
-then
- $doit $instcmd $dst &&
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
-else
-
-# If we're going to rename the final executable, determine the name now.
-
- if [ x"$transformarg" = x ]
- then
- dstfile=`basename $dst`
- else
- dstfile=`basename $dst $transformbasename |
- sed $transformarg`$transformbasename
- fi
-
-# don't allow the sed command to completely eliminate the filename
-
- if [ x"$dstfile" = x ]
- then
- dstfile=`basename $dst`
- else
- true
- fi
-
-# Make a temp file name in the proper directory.
-
- dsttmp=$dstdir/#inst.$$#
-
-# Move or copy the file name to the temp name
-
- $doit $instcmd $src $dsttmp &&
-
- trap "rm -f ${dsttmp}" 0 &&
-
-# and set any options; do chmod last to preserve setuid bits
-
-# If any of these fail, we abort the whole thing. If we want to
-# ignore errors from any of these, just make sure not to ignore
-# errors from the above "$doit $instcmd $src $dsttmp" command.
-
- if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
- if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
- if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
- if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
-
-# Now rename the file to the real destination.
-
- $doit $rmcmd -f $dstdir/$dstfile &&
- $doit $mvcmd $dsttmp $dstdir/$dstfile
-
-fi &&
-
-
-exit 0
diff --git a/mkinstalldirs b/mkinstalldirs
deleted file mode 100755
index 845ebffd4..000000000
--- a/mkinstalldirs
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-# Author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain
-
-# $Id: mkinstalldirs 2858 2000-12-07 16:53:23Z bwarsaw $
-
-errstatus=0
-
-for file
-do
- set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
- shift
-
- pathcomp=
- for d
- do
- pathcomp="$pathcomp$d"
- case "$pathcomp" in
- -* ) pathcomp=./$pathcomp ;;
- esac
-
- if test ! -d "$pathcomp"; then
- echo "mkdir $pathcomp" 1>&2
-
- mkdir "$pathcomp" || lasterr=$?
-
- if test ! -d "$pathcomp"; then
- errstatus=$lasterr
- fi
- fi
-
- pathcomp="$pathcomp/"
- done
-done
-
-exit $errstatus
-
-# mkinstalldirs ends here
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
deleted file mode 100644
index aa472419f..000000000
--- a/scripts/Makefile.in
+++ /dev/null
@@ -1,84 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-# USA.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-LN_S= @LN_S@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-SCRIPTSDIR= $(prefix)/scripts
-BINDIR= ../bin
-
-SHELL= /bin/sh
-
-# Note that `admin' is a backwards compatible alias for `bounces'
-# 'subscribe' is an alias for join
-# 'unsubscribe' is an alias for leave
-SCRIPTS= driver
-LN_SCRIPTS= bounces confirm join leave owner post request
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-
-# Rules
-
-all:
-
-install:
- for f in $(SCRIPTS); \
- do \
- $(INSTALL) -m $(FILEMODE) $(srcdir)/$$f $(DESTDIR)$(SCRIPTSDIR); \
- done
- for f in $(LN_SCRIPTS); \
- do \
- rm -f $(DESTDIR)$(SCRIPTSDIR)/$$f; \
- (cd $(DESTDIR)$(SCRIPTSDIR); $(LN_S) $(BINDIR)/mmshell $$f); \
- done
- rm -f $(DESTDIR)$(SCRIPTSDIR)/admin
- (cd $(DESTDIR)$(SCRIPTSDIR); $(LN_S) $(BINDIR)/mmshell admin)
- rm -f $(DESTDIR)$(SCRIPTSDIR)/subscribe
- (cd $(DESTDIR)$(SCRIPTSDIR); $(LN_S) $(BINDIR)/mmshell subscribe)
- rm -f $(DESTDIR)$(SCRIPTSDIR)/unsubscribe
- (cd $(DESTDIR)$(SCRIPTSDIR); $(LN_S) $(BINDIR)/mmshell unsubscribe)
-
-finish:
-
-clean:
-
-distclean:
- -rm Makefile
diff --git a/setup.py b/setup.py
new file mode 100644
index 000000000..45167dadc
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,100 @@
+# Copyright (C) 2007 Barry A. Warsaw
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 2 of the License, or (at your option)
+# any later version.
+#
+# This program is distributed in the hope that it will be useful, but WITHOUT
+# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+# Place - Suite 330, Boston, MA 02111-1307, USA.
+
+import ez_setup
+ez_setup.use_setuptools()
+
+import sys
+from string import Template
+
+import Mailman.bin
+from Mailman.Version import VERSION as __version__
+from setuptools import setup, find_packages
+
+
+
+if sys.hexversion < 0x20500f0:
+ print 'Mailman requires at least Python 2.5'
+ sys.exit(1)
+
+
+
+# Ensure that all the .mo files are generated from the corresponding .po file.
+# This procedure needs to be made sane, probably when the language packs are
+# properly split out.
+
+import os
+import Mailman.messages
+
+start_dir = os.path.dirname(Mailman.messages.__file__)
+for dirpath, dirnames, filenames in os.walk(start_dir):
+ for filename in filenames:
+ po_file = os.path.join(dirpath, filename)
+ basename, ext = os.path.splitext(po_file)
+ if ext <> '.po':
+ continue
+ mo_file = basename + '.mo'
+ if (not os.path.exists(mo_file) or
+ os.path.getmtime(po_file) > os.path.getmtime(mo_file)):
+ # The mo file doesn't exist or is older than the po file.
+ os.system('bin/msgfmt.py -o %s %s' % (mo_file, po_file))
+
+
+
+# XXX The 'bin/' prefix here should be configurable.
+template = Template('bin/$script = Mailman.bin.$script:main')
+scripts = set(
+ template.substitute(script=os.path.splitext(script)[0])
+ for script in Mailman.bin.__all__
+ if not script.startswith('_')
+ )
+
+
+
+setup(
+ name = 'mailman',
+ version = __version__,
+ description = 'Mailman -- the GNU mailing list manager',
+ long_description= """\
+This is GNU Mailman, a mailing list management system distributed under the
+terms of the GNU General Public License (GPL). The name of this software is
+spelled 'Mailman' with a leading capital 'M' but with a lower case second `m'.
+Any other spelling is incorrect.""",
+ author = 'The Mailman Developers',
+ author_email = 'mailman-developers@python.org',
+ license = 'GPL',
+ url = 'http://www.list.org',
+ keywords = 'email',
+ packages = find_packages(),
+ include_package_data = True,
+ entry_points = {
+ 'console_scripts': list(scripts),
+ 'setuptools.file_finders': [
+ 'bzr = setuptoolsbzr:find_files_for_bzr',
+ ],
+ },
+ # Third-party requirements.
+ install_requires = [
+ 'Elixir',
+ 'SQLAlchemy',
+ 'munepy',
+ 'wsgiref',
+ 'zope.interface',
+ ],
+ setup_requires = [
+ 'setuptoolsbzr',
+ ],
+ )
diff --git a/src/Makefile.in b/src/Makefile.in
deleted file mode 100644
index 4b9f5fc6b..000000000
--- a/src/Makefile.in
+++ /dev/null
@@ -1,134 +0,0 @@
-# Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-PYTHON= @PYTHON@
-
-DEFS= @DEFS@
-LIBS= @LIBS@
-
-# user and group ids/names
-MAIL_GROUP= @MAIL_GROUP@
-CGI_GROUP= @CGI_GROUP@
-MAILMAN_USER= @MAILMAN_USER@
-
-# Customizable but not set by configure
-OPT= @OPT@
-CFLAGS= @CFLAGS@ $(OPT) $(DEFS) $(LIBS)
-CGIDIR= $(exec_prefix)/cgi-bin
-CGIEXT= @CGIEXT@
-MAILDIR= $(exec_prefix)/mail
-
-SHELL= /bin/sh
-
-MAIL_FLAGS= -DMAIL_GROUP="\"$(MAIL_GROUP)\""
-
-CGI_FLAGS= -DCGI_GROUP="\"$(CGI_GROUP)\""
-
-HELPFUL= -DHELPFUL
-
-COMMON_FLAGS= -DPREFIX="\"$(prefix)\"" \
- -DPYTHON="\"$(PYTHON)\"" \
- $(HELPFUL)
-
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-DIRSETGID= chmod g+s
-
-# Fixed definitions
-
-CGI_PROGS= admindb admin confirm create edithtml listinfo options \
- private rmlist roster subscribe
-
-COMMONOBJS= common.o vsnprintf.o
-
-MAIL_PROGS= mailman
-
-#ALIAS_PROGS= addaliases
-
-SUID_CGI_PROGS= private
-
-SUID_MAIL_PROGS=
-
-PROGRAMS= $(CGI_PROGS) $(MAIL_PROGS) $(ALIAS_PROGS)
-
-
-# Rules
-
-all: $(PROGRAMS)
-
-mailman: $(srcdir)/mail-wrapper.c $(COMMONOBJS)
- $(CC) -I. $(MAIL_FLAGS) $(CFLAGS) $(COMMONOBJS) -o $@ $(srcdir)/mail-wrapper.c
-
-#addaliases: $(srcdir)/alias-wrapper.c $(COMMONOBJS)
-# $(CC) -I. $(ALIAS_FLAGS) $(CFLAGS) -o $@ $(srcdir)/alias-wrapper.c
-
-$(CGI_PROGS): $(srcdir)/cgi-wrapper.c $(COMMONOBJS)
- $(CC) -DSCRIPT="\"$@\"" -I. $(CGI_FLAGS) $(CFLAGS) $(COMMONOBJS) -o $@ $(srcdir)/cgi-wrapper.c
-
-common.o: $(srcdir)/common.c $(srcdir)/common.h Makefile
- $(CC) -c -I. $(COMMON_FLAGS) $(CFLAGS) $(srcdir)/common.c
-
-vsnprintf.o: $(srcdir)/vsnprintf.c Makefile
- $(CC) -c -I. $(COMMON_FLAGS) $(CFLAGS) $(srcdir)/vsnprintf.c
-
-install: all
- for f in $(CGI_PROGS); \
- do \
- exe=$(DESTDIR)$(CGIDIR)/$$f$(CGIEXT); \
- $(INSTALL_PROGRAM) $$f $$exe; \
- $(DIRSETGID) $$exe; \
- done
- for f in $(MAIL_PROGS); \
- do \
- $(INSTALL_PROGRAM) $$f $(DESTDIR)$(MAILDIR); \
- $(DIRSETGID) $(DESTDIR)$(MAILDIR)/$$f; \
- done
-
-finish:
- -for f in $(SUID_CGI_PROGS); \
- do \
- exe=$(DESTDIR)$(CGIDIR)/$$f$(CGIEXT); \
- chown $(MAILMAN_USER) $$exe; \
- chmod u+s $$exe; \
- done
-
-clean:
- -@rm *.o
- -@rm -f $(PROGRAMS)
-
-distclean: clean
- -@rm Makefile
diff --git a/src/cgi-wrapper.c b/src/cgi-wrapper.c
deleted file mode 100644
index 6be29f6de..000000000
--- a/src/cgi-wrapper.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* cgi-wrapper.c --- Generic wrapper that will take info from a environment
- * variable, and pass it to two commands.
- *
- * Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- */
-
-#include "common.h"
-
-/* passed in by configure */
-#define SCRIPTNAME SCRIPT
-#define LOG_IDENT "Mailman cgi-wrapper (" SCRIPT ")"
-
-/* Group name that CGI scripts run as. See your web server's documentation
- * for details.
- */
-#define LEGAL_PARENT_GROUP CGI_GROUP
-
-const char* logident = LOG_IDENT;
-char* script = SCRIPTNAME;
-const char* parentgroup = LEGAL_PARENT_GROUP;
-
-
-int
-main(int argc, char** argv, char** env)
-{
- int status;
- char* fake_argv[3];
-
- running_as_cgi = 1;
- check_caller(logident, parentgroup);
-
- /* For these CGI programs, we can ignore argc and argv since they
- * don't contain anything useful. `script' will always be the driver
- * program and argv will always just contain the name of the real
- * script for the driver to import and execute (padded with two dummy
- * values in argv[0] and argv[1] that are ignored by run_script().
- */
- fake_argv[0] = NULL;
- fake_argv[1] = NULL;
- fake_argv[2] = script;
-
- status = run_script("driver", 3, fake_argv, env);
- fatal(logident, status, "%s", strerror(errno));
- return status;
-}
-
-
-
-/*
- * Local Variables:
- * c-file-style: "python"
- * End:
- */
diff --git a/src/common.c b/src/common.c
deleted file mode 100644
index af6a69692..000000000
--- a/src/common.c
+++ /dev/null
@@ -1,306 +0,0 @@
-/* common.c --- Common routines, constants, etc. Used by all the wrappers.
- *
- * Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- */
-
-#include "common.h"
-
-/* Passed in by configure. */
-#define SCRIPTDIR PREFIX "/scripts/" /* trailing slash */
-#define MODULEDIR PREFIX /* no trailing slash */
-
-const char* scriptdir = SCRIPTDIR;
-const char* moduledir = MODULEDIR;
-char* python = PYTHON;
-
-/* Global variable used as a flag */
-int running_as_cgi = 0;
-
-
-
-/* Some older systems don't define strerror(). Provide a replacement that is
- * good enough for our purposes.
- */
-#ifndef HAVE_STRERROR
-
-extern char *sys_errlist[];
-extern int sys_nerr;
-
-char* strerror(int errno)
-{
- if (errno < 0 || errno >= sys_nerr) {
- return "unknown error";
- }
- else {
- return sys_errlist[errno];
- }
-}
-
-#endif /* ! HAVE_STRERROR */
-
-
-
-/* Report on errors and exit
- */
-#define BUFSIZE 1024
-
-void
-fatal(const char* ident, int exitcode, char* format, ...)
-{
-#ifndef HAVE_VSNPRINTF
- /* A replacement is provided in vsnprintf.c for ancient systems still
- * lacking one in their C library.
- */
- int vsnprintf(char*, size_t, const char*, va_list);
-#endif /* !HAVE_VSNPRINTF */
-
- char log_entry[BUFSIZE];
-
- va_list arg_ptr;
- va_start(arg_ptr, format);
-
- vsnprintf(log_entry, BUFSIZE, format, arg_ptr);
- va_end(arg_ptr);
-
-#ifdef HAVE_SYSLOG
- /* Write to the console, maillog is often mostly ignored, and root
- * should definitely know about any problems.
- */
- openlog(ident, LOG_CONS, LOG_MAIL);
- syslog(LOG_ERR, "%s\n", log_entry);
- closelog();
-#endif /* HAVE_SYSLOG */
-
-#ifdef HELPFUL
- /* If we're running as a CGI script, we also want to write the log
- * file out as HTML, so the admin who is probably trying to debug his
- * installation will have a better clue as to what's going on.
- *
- * Otherwise, print to stderr a short message, hopefully returned to
- * the sender by the MTA.
- */
- if (running_as_cgi) {
- printf("Content-type: text/html\n\n");
- printf("<head>\n");
- printf("<title>Mailman CGI error!!!</title>\n");
- printf("</head><body>\n");
- printf("<h1>Mailman CGI error!!!</h1>\n");
- printf("The Mailman CGI wrapper encountered a fatal error. ");
- printf("This entry is being stored in your syslog:");
- printf("\n<pre>\n");
- printf(log_entry);
- printf("</pre>\n");
- }
- else
- fprintf(stderr, "%s\n", log_entry);
-#endif /* HELPFUL */
- exit(exitcode);
-}
-
-
-
-/* Is the parent process allowed to call us?
- */
-void
-check_caller(const char* ident, const char* parentgroup)
-{
- GID_T mygid = getgid();
- struct group *mygroup = getgrgid(mygid);
- char* option;
- char* server;
- char* wrapper;
-
- if (running_as_cgi) {
- option = "--with-cgi-gid";
- server = "web";
- wrapper = "CGI";
- }
- else {
- option = "--with-mail-gid";
- server = "mail";
- wrapper = "mail";
- }
-
- if (!mygroup)
- fatal(ident, GROUP_NAME_NOT_FOUND,
- "Failure to find group name for GID %d. Mailman\n"
- "expected the %s wrapper to be executed as group\n"
- "\"%s\", but the system's %s server executed the\n"
- "wrapper as GID %d for which the name could not be\n"
- "found. Try adding GID %d to your system as \"%s\",\n"
- "or tweak your %s server to run the wrapper as group\n"
- "\"%s\".",
- mygid, wrapper, parentgroup, server, mygid, mygid,
- parentgroup, server, parentgroup);
-
- if (strcmp(parentgroup, mygroup->gr_name))
- fatal(ident, GROUP_MISMATCH,
- "Group mismatch error. Mailman expected the %s\n"
- "wrapper script to be executed as group \"%s\", but\n"
- "the system's %s server executed the %s script as\n"
- "group \"%s\". Try tweaking the %s server to run the\n"
- "script as group \"%s\", or re-run configure, \n"
- "providing the command line option `%s=%s'.",
- wrapper, parentgroup, server, wrapper, mygroup->gr_name,
- server, parentgroup, option, mygroup->gr_name);
-}
-
-
-
-/* list of environment variables which are removed from the given
- * environment. Some may or may not be hand crafted and passed into
- * the execv'd environment.
- *
- * TBD: The logic of this should be inverted. IOW, we should audit the
- * Mailman CGI code for those environment variables that are used, and
- * specifically white list them, removing all other variables. John Viega
- * also suggests imposing a maximum size just in case Python doesn't handle
- * them right (which it should because Python strings have no hard limits).
- */
-static char* killenvars[] = {
- "PYTHONPATH=",
- "PYTHONHOME=",
- "PATH=",
- NULL
-};
-
-
-
-/* Run a Python script out of the script directory
- *
- * args[0] should be the abs path to the Python script to execute
- * argv[1:] are other args for the script
- * env may or may not contain PYTHONPATH, we'll substitute our own
- *
- * TBD: third argument env may not be universally portable
- */
-int
-run_script(const char* script, int argc, char** argv, char** env)
-{
- const char envstr[] = "PYTHONPATH=";
- const int envlen = strlen(envstr);
-
- int envcnt = 0;
- int i, j, status;
- char** newenv;
- char** newargv;
-
- /* We need to set the real gid to the effective gid because there are
- * some Linux systems which do not preserve the effective gid across
- * popen() calls. This breaks mail delivery unless the ~mailman/data
- * directory is chown'd to the uid that runs mail programs, and that
- * isn't a viable alternative.
- */
-#ifdef HAVE_SETREGID
- status = setregid(getegid(), -1);
- if (status)
- fatal(logident, SETREGID_FAILURE, "%s", strerror(errno));
-#endif /* HAVE_SETREGID */
-
- /* We want to tightly control how the CGI scripts get executed.
- * For portability and security, the path to the Python executable
- * is hard-coded into this C wrapper, rather than encoded in the #!
- * line of the script that gets executed. So we invoke those
- * scripts by passing the script name on the command line to the
- * Python executable.
- *
- * We also need to hack on the PYTHONPATH environment variable so
- * that the path to the installed Mailman modules will show up
- * first on sys.path.
- *
- */
- for (envcnt = 0; env[envcnt]; envcnt++)
- ;
-
- /* okay to be a little too big */
- newenv = (char**)malloc(sizeof(char*) * (envcnt + 2));
-
- /* filter out any troublesome environment variables */
- for (i = 0, j = 0; i < envcnt; i++) {
- char** k = &killenvars[0];
- int keep = 1;
- while (*k) {
- if (!strncmp(*k, env[i], strlen(*k))) {
- keep = 0;
- break;
- }
- *k++;
- }
- if (keep)
- newenv[j++] = env[i];
- }
-
- /* Tack on our own version of PYTHONPATH, which should contain only
- * the path to the Mailman package modules.
- *
- * $(PREFIX)/modules
- */
- newenv[j] = (char*)malloc(sizeof(char) * (
- strlen(envstr) +
- strlen(moduledir) +
- 1));
- strcpy(newenv[j], envstr);
- strcat(newenv[j], moduledir);
- j++;
-
- newenv[j] = NULL;
-
- /* Now put together argv. This will contain first the absolute path
- * to the Python executable, then the -S option (to speed executable
- * start times), then the absolute path to the script, then any
- * additional args passed in argv above.
- */
- newargv = (char**)malloc(sizeof(char*) * (argc + 3));
- j = 0;
- newargv[j++] = python;
- newargv[j++] = "-S";
- newargv[j] = (char*)malloc(sizeof(char) * (
- strlen(scriptdir) +
- strlen(script) +
- 1));
- strcpy(newargv[j], scriptdir);
- strcat(newargv[j], script);
-
- /* now tack on all the rest of the arguments. we can skip argv's
- * first two arguments because, for cgi-wrapper there is only argv[0].
- * For mail-wrapper, argv[1] is the mail command (e.g. post,
- * mailowner, or mailcmd) and argv[2] is the listname. The mail
- * command to execute gets passed in as this function's `script'
- * parameter and becomes the argument to the python interpreter. The
- * list name therefore should become argv[2] to this process.
- *
- * TBD: have to make sure this works with alias-wrapper.
- */
- for (i=2, j++; i < argc; i++)
- newargv[j++] = argv[i];
-
- newargv[j] = NULL;
-
- /* return always means failure */
- (void)execve(python, &newargv[0], &newenv[0]);
- return EXECVE_FAILURE;
-}
-
-
-
-/*
- * Local Variables:
- * c-file-style: "python"
- * indent-tabs-mode: nil
- * End:
- */
diff --git a/src/common.h b/src/common.h
deleted file mode 100644
index 092fe1bcb..000000000
--- a/src/common.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/* common.h --- Prototypes for common routines
- *
- * Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- */
-
-#include <stdlib.h>
-#include <stdarg.h>
-#ifdef HAVE_SYSLOG_H
-#include <syslog.h>
-#endif /* HAVE_SYSLOG_H */
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <grp.h>
-#include <unistd.h>
-
-/* GETGROUPS_T gets set in the makefile by configure */
-#define GID_T GETGROUPS_T
-
-extern void fatal(const char*, int, char*, ...);
-extern void check_caller(const char*, const char*);
-extern int run_script(const char*, int, char**, char**);
-
-/* Global variable used as a flag. */
-extern int running_as_cgi;
-
-/* Extern to reference this global from one of the wrapper mains */
-extern const char* logident;
-
-/* Exit codes, so it's easier to distinguish what caused fatal errors when
- * looking at syslogs.
- */
-#define GROUP_MISMATCH 2
-#define SETREGID_FAILURE 3
-#define EXECVE_FAILURE 4
-#define MAIL_USAGE_ERROR 5
-#define MAIL_ILLEGAL_COMMAND 6
-#define ADDALIAS_USAGE_ERROR 7
-#define GROUP_NAME_NOT_FOUND 8
-
-
-/*
- * Local Variables:
- * c-file-style: "python"
- * End:
- */
diff --git a/src/mail-wrapper.c b/src/mail-wrapper.c
deleted file mode 100644
index 3b7a5711b..000000000
--- a/src/mail-wrapper.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/* mail-wrapper.c --- Generic wrapper that will take info from a environment
- * variable, and pass it to two commands.
- *
- * Copyright (C) 1998-2007 by the Free Software Foundation, Inc.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
- * USA.
- */
-
-#include "common.h"
-
-/* Group name that your mail programs run as. See your mail server's
- * documentation for details.
- */
-#define LEGAL_PARENT_GROUP MAIL_GROUP
-
-const char* parentgroup = LEGAL_PARENT_GROUP;
-const char* logident = "Mailman mail-wrapper";
-
-
-
-const char *VALID_COMMANDS[] = {
- "admin",
- "bounces",
- "confirm",
- "join",
- "leave",
- "post",
- "owner",
- "request",
- "subscribe",
- "unsubscribe",
- NULL /* Sentinel, don't remove */
-};
-
-
-int
-check_command(char *command)
-{
- int i = 0;
-
- while (VALID_COMMANDS[i] != NULL) {
- if (!strcmp(command, VALID_COMMANDS[i]))
- return 1;
- i++;
- }
- return 0;
-}
-
-
-
-int
-main(int argc, char** argv, char** env)
-{
- int status;
-
- /* sanity check arguments */
- if (argc < 2)
- fatal(logident, MAIL_USAGE_ERROR,
- "Usage: %s program [args...]", argv[0]);
-
- if (!check_command(argv[1]))
- fatal(logident, MAIL_ILLEGAL_COMMAND,
- "Illegal command: %s", argv[1]);
-
- check_caller(logident, parentgroup);
-
- /* If we got here, everything must be OK */
- status = run_script(argv[1], argc, argv, env);
- fatal(logident, status, "%s", strerror(errno));
- return status;
-}
-
-
-
-/*
- * Local Variables:
- * c-file-style: "python"
- * End:
- */
diff --git a/src/vsnprintf.c b/src/vsnprintf.c
deleted file mode 100644
index 48eb58782..000000000
--- a/src/vsnprintf.c
+++ /dev/null
@@ -1,125 +0,0 @@
-/* Copyright (c) 1993
- * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de)
- * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de)
- * Copyright (c) 1987 Oliver Laumann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program (see the file COPYING); if not, write to the
- * Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
- *
- ****************************************************************
- */
-
-
-/* Implementation of vsnprintf() for systems that don't have it
- * (e.g. Solaris 2.5). This hasn't been tested much in the context of
- * Mailman; it was ripped from screen 3.7.6's misc.c file which contains
- * the above copyright.
- *
- * This code has been modified slightly:
- *
- * - use prototypes unconditionally
- * - Don't use macros for stdargs calls
- * - Reformat to Python C standard
- *
- * RMS says it's okay to include this code in Mailman but it should be kept
- * in a separate file.
- *
- * TBD: This file needs a security audit.
- */
-
-#ifndef HAVE_VSNPRINTF
-#include <strings.h>
-#include <stdarg.h>
-
-int vsnprintf(char* s, size_t n, const char* fmt, va_list stack)
-{
- char *f, *sf = 0;
- int i, on, argl = 0;
- char myf[10], buf[20];
- char *arg, *myfp;
-
- on = n;
- f = (char*)fmt;
- arg = 0;
- while (arg || (sf = index(f, '%')) || (sf = f + strlen(f))) {
- if (arg == 0) {
- arg = f;
- argl = sf - f;
- }
- if (argl) {
- i = argl > n - 1 ? n - 1 : argl;
- strncpy(s, arg, i);
- s += i;
- n -= i;
- if (i < argl) {
- *s = 0;
- return on;
- }
- }
- arg = 0;
- if (sf == 0)
- continue;
- f = sf;
- sf = 0;
- if (!*f)
- break;
- myfp = myf;
- *myfp++ = *f++;
- while (((*f >= '0' && *f <='9') || *f == '#')
- && myfp - myf < 8)
- {
- *myfp++ = *f++;
- }
- *myfp++ = *f;
- *myfp = 0;
- if (!*f++)
- break;
- switch(f[-1])
- {
- case '%':
- arg = "%";
- break;
- case 'c':
- case 'o':
- case 'd':
- case 'x':
- i = va_arg(stack, int);
- sprintf(buf, myf, i);
- arg = buf;
- break;
- case 's':
- arg = va_arg(stack, char *);
- if (arg == 0)
- arg = "NULL";
- break;
- default:
- arg = "";
- break;
- }
- argl = strlen(arg);
- }
- *s = 0;
- return on - n;
-
- va_end(stack);
-}
-#endif /* !HAVE_VSNPRINTF */
-
-
-/*
- * Local Variables:
- * c-file-style: "python"
- * End:
- */
diff --git a/tests/Makefile.in b/tests/Makefile.in
deleted file mode 100644
index dcc5cbee6..000000000
--- a/tests/Makefile.in
+++ /dev/null
@@ -1,79 +0,0 @@
-# Copyright (C) 2001-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-TESTDIR= $(prefix)/tests
-SHELL= /bin/sh
-
-EXECS= $(srcdir)/onebounce.py $(srcdir)/fblast.py
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-# Directories make should decend into
-SUBDIRS= msgs
-
-# Rules
-all:
-
-install:
- for f in $(EXECS); \
- do \
- $(INSTALL) -m $(EXEMODE) $$f $(DESTDIR)$(TESTDIR); \
- done
- for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) DESTDIR=$(DESTDIR) install); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile
- @for d in $(SUBDIRS); \
- do \
- (cd $$d; $(MAKE) distclean); \
- done
diff --git a/tests/msgs/Makefile.in b/tests/msgs/Makefile.in
deleted file mode 100644
index 3d2dd2a6f..000000000
--- a/tests/msgs/Makefile.in
+++ /dev/null
@@ -1,69 +0,0 @@
-# Copyright (C) 2001-2007 by the Free Software Foundation, Inc.
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public Licenseo
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-
-# NOTE: Makefile.in is converted into Makefile by the configure script
-# in the parent directory. Once configure has run, you can recreate
-# the Makefile by running just config.status.
-
-# Variables set by configure
-
-VPATH= @srcdir@
-srcdir= @srcdir@
-bindir= @bindir@
-prefix= @prefix@
-exec_prefix= @exec_prefix@
-DESTDIR=
-
-CC= @CC@
-CHMOD= @CHMOD@
-INSTALL= @INSTALL@
-
-DEFS= @DEFS@
-
-# Customizable but not set by configure
-
-OPT= @OPT@
-CFLAGS= $(OPT) $(DEFS)
-MSGSDIR= $(prefix)/tests/msgs
-SHELL= /bin/sh
-
-MSG_FILES= $(srcdir)/*.txt
-
-
-# Modes for directories and executables created by the install
-# process. Default to group-writable directories but
-# user-only-writable for executables.
-DIRMODE= 775
-EXEMODE= 755
-FILEMODE= 644
-INSTALL_PROGRAM=$(INSTALL) -m $(EXEMODE)
-
-# Rules
-all:
-
-install:
- for f in $(MSG_FILES); \
- do \
- $(INSTALL) -m $(FILEMODE) $$f $(DESTDIR)$(MSGSDIR); \
- done
-
-finish:
-
-clean:
-
-distclean:
- -rm *.pyc
- -rm Makefile