2002-11-01 Jeff Bailey <jbailey@gnu.org>
* mh/Makefile.am: Use MHPROGRAMS and MHLIBRARIES instead of MH_PROGRAMS and MH_LIBRARIES so that automake doesn't complain. * mail.remote/Makefile.am: Use SMTPPROGRAMS instead of SMTP_PROGRAMS so that automake doesn't complain. * configure.ac: Adjust for above changes. * mh/Makefile.am: Use AM_YFLAGS instead of YFLAGS. * libmu_scm/Makefile.am: Use AM_CPPFLAGS instead of CPPFLAGS * autogen.sh: Redo using 'autoreconf'. This is now the right tool to use for generating the build environment. * Makefile.am: Require version 1.7.1, add std-options to AUTOMAKE_OPTIONS * configure.in: Require version 2.54. Update quoting. Change AC_ARG_WITH and AC_ARG_ENABLE to use AC_HELP_STRING * m4/enable.m4: Change AC_ARG_ENABLE to use AC_HELP_STRING * lib/Makefile.am: Remove ansi2knr * lib/ansi2knr.c: Remove * lib/ansi2knr.1: Remove
Showing
9 changed files
with
137 additions
and
798 deletions
1 | 2002-11-01 Jeff Bailey <jbailey@gnu.org> | ||
2 | |||
3 | * mh/Makefile.am: Use MHPROGRAMS and MHLIBRARIES instead of | ||
4 | MH_PROGRAMS and MH_LIBRARIES so that automake doesn't complain. | ||
5 | |||
6 | * mail.remote/Makefile.am: Use SMTPPROGRAMS instead of | ||
7 | SMTP_PROGRAMS so that automake doesn't complain. | ||
8 | |||
9 | * configure.ac: Adjust for above changes. | ||
10 | |||
11 | * mh/Makefile.am: Use AM_YFLAGS instead of YFLAGS. | ||
12 | |||
13 | * libmu_scm/Makefile.am: Use AM_CPPFLAGS instead of CPPFLAGS | ||
14 | |||
15 | * autogen.sh: Redo using 'autoreconf'. This is now the right | ||
16 | tool to use for generating the build environment. | ||
17 | |||
18 | * Makefile.am: Require version 1.7.1, add std-options to | ||
19 | AUTOMAKE_OPTIONS | ||
20 | |||
21 | * configure.in: Require version 2.54. Update quoting. Change | ||
22 | AC_ARG_WITH and AC_ARG_ENABLE to use AC_HELP_STRING | ||
23 | |||
24 | * m4/enable.m4: Change AC_ARG_ENABLE to use AC_HELP_STRING | ||
25 | |||
26 | * lib/Makefile.am: Remove ansi2knr | ||
27 | |||
28 | * lib/ansi2knr.c: Remove | ||
29 | |||
30 | * lib/ansi2knr.1: Remove | ||
31 | |||
1 | 2002-11-01 Sergey Poznyakoff | 32 | 2002-11-01 Sergey Poznyakoff |
2 | 33 | ||
3 | * m4/enable.m4: Fixed action-if-false. | 34 | * m4/enable.m4: Fixed action-if-false. |
... | @@ -7,15 +38,6 @@ | ... | @@ -7,15 +38,6 @@ |
7 | * mh/Makefile.am: Build the targets conditionally. | 38 | * mh/Makefile.am: Build the targets conditionally. |
8 | * mail.remote/Makefile.am: Likewise. | 39 | * mail.remote/Makefile.am: Likewise. |
9 | 40 | ||
10 | 2002-10-30 Jeff Bailey <jbailey@gnu.org> | ||
11 | |||
12 | * mh/Makefile.am: Use AM_YFLAGS instead of YFLAGS | ||
13 | |||
14 | * libmu_scm/Makefile.am: Use AM_CPPFLAGS instead of CPPFLAGS | ||
15 | |||
16 | * autogen.sh: Redo using 'autoreconf'. This is now the right | ||
17 | tool to use for generating the build environment. | ||
18 | |||
19 | 2002-10-29 Sergey Poznyakoff | 41 | 2002-10-29 Sergey Poznyakoff |
20 | 42 | ||
21 | Following the proposition of Olivier Bornet | 43 | Following the proposition of Olivier Bornet | ... | ... |
... | @@ -2,7 +2,7 @@ | ... | @@ -2,7 +2,7 @@ |
2 | # Copyright (C) 2000,2001,2002 Free Software Foundation | 2 | # Copyright (C) 2000,2001,2002 Free Software Foundation |
3 | # See file COPYING in the distribution root directory for copying conditions. | 3 | # See file COPYING in the distribution root directory for copying conditions. |
4 | 4 | ||
5 | AUTOMAKE_OPTIONS = gnu 1.6 readme-alpha | 5 | AUTOMAKE_OPTIONS = gnu 1.7.1 readme-alpha std-options |
6 | ACLOCAL_AMFLAGS = -I m4 | 6 | ACLOCAL_AMFLAGS = -I m4 |
7 | 7 | ||
8 | SUBDIRS = include m4 lib testsuite mailbox examples doc \ | 8 | SUBDIRS = include m4 lib testsuite mailbox examples doc \ | ... | ... |
... | @@ -17,13 +17,13 @@ | ... | @@ -17,13 +17,13 @@ |
17 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 17 | # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
18 | # | 18 | # |
19 | 19 | ||
20 | AC_INIT([GNU Mailutils], [0.1.2], [bug-mailutils@gnu.org]) | 20 | AC_INIT([GNU Mailutils],[0.1.2],[bug-mailutils@gnu.org]) |
21 | AC_CONFIG_SRCDIR([mailbox/mailbox.c]) | 21 | AC_CONFIG_SRCDIR([mailbox/mailbox.c]) |
22 | AC_CANONICAL_TARGET([]) | 22 | AC_CANONICAL_TARGET([]) |
23 | AM_INIT_AUTOMAKE | 23 | AM_INIT_AUTOMAKE |
24 | AM_CONFIG_HEADER(config.h) | 24 | AC_CONFIG_HEADERS([config.h]) |
25 | 25 | ||
26 | AC_PREREQ(2.52) | 26 | AC_PREREQ(2.54) |
27 | 27 | ||
28 | dnl Check for programs | 28 | dnl Check for programs |
29 | AC_PROG_CC | 29 | AC_PROG_CC |
... | @@ -42,34 +42,41 @@ MU_DEBUG_MODE | ... | @@ -42,34 +42,41 @@ MU_DEBUG_MODE |
42 | AUTHLIBS=../auth/libmuauth.la | 42 | AUTHLIBS=../auth/libmuauth.la |
43 | 43 | ||
44 | dnl Check for arguments | 44 | dnl Check for arguments |
45 | AC_ARG_ENABLE(pam, | 45 | AC_ARG_ENABLE([pam], |
46 | [ --disable-pam disable pam], | 46 | AC_HELP_STRING([--disable-pam], |
47 | [case "${enableval}" in | 47 | [disable pam]), |
48 | [ | ||
49 | case "${enableval}" in | ||
48 | yes) testpam=yes ;; | 50 | yes) testpam=yes ;; |
49 | no) testpam=no ;; | 51 | no) testpam=no ;; |
50 | *) AC_MSG_ERROR(bad value ${enableval} for --disable-pam) ;; | 52 | *) AC_MSG_ERROR([bad value ${enableval} for --disable-pam]) ;; |
51 | esac],[testpam=yes]) | 53 | esac],[testpam=yes]) |
52 | 54 | ||
53 | AC_ARG_ENABLE(pthread, | 55 | AC_ARG_ENABLE([pthread], |
54 | [ --disable-pthread disable pthread], | 56 | AC_HELP_STRING([--disable-pthread], |
55 | [case "${enableval}" in | 57 | [disable pthread]), |
58 | [ | ||
59 | case "${enableval}" in | ||
56 | yes) usepthread=yes ;; | 60 | yes) usepthread=yes ;; |
57 | no) usepthread=no ;; | 61 | no) usepthread=no ;; |
58 | *) AC_MSG_ERROR(bad value ${enableval} for --disable-pthread) ;; | 62 | *) AC_MSG_ERROR(bad value ${enableval} for --disable-pthread) ;; |
59 | esac],[usepthread=yes]) | 63 | esac],[usepthread=yes]) |
60 | 64 | ||
61 | AC_ARG_WITH(readline, | 65 | AC_ARG_WITH([readline], |
62 | [ --without-readline do not use readline], | 66 | AC_HELP_STRING([--without-readline], |
63 | [case "${withval}" in | 67 | [do not use readline]), |
68 | [ | ||
69 | case "${withval}" in | ||
64 | yes) usereadline=yes ;; | 70 | yes) usereadline=yes ;; |
65 | no) usereadline=no ;; | 71 | no) usereadline=no ;; |
66 | *) AC_MSG_ERROR(bad value ${withval} for --without-readline) ;; | 72 | *) AC_MSG_ERROR(bad value ${withval} for --without-readline) ;; |
67 | esac],[usereadline=yes]) | 73 | esac],[usereadline=yes]) |
68 | 74 | ||
69 | AC_ARG_WITH(gssapi, | 75 | AC_ARG_WITH([gssapi], |
70 | [ --with-gssapi use GSSAPI authentication ], | 76 | AC_HELP_STRING([--with-gssapi], |
71 | [WITH_GSSAPI=$withval], | 77 | [use GSSAPI authentication]), |
72 | [WITH_GSSAPI=no]) | 78 | [WITH_GSSAPI=$withval], |
79 | [WITH_GSSAPI=no]) | ||
73 | 80 | ||
74 | if test "x$WITH_GSSAPI" != "xno"; then | 81 | if test "x$WITH_GSSAPI" != "xno"; then |
75 | MU_CHECK_GSSAPI($WITH_GSSAPI) | 82 | MU_CHECK_GSSAPI($WITH_GSSAPI) |
... | @@ -85,32 +92,38 @@ if test "x$WITH_GSSAPI" != "xno"; then | ... | @@ -85,32 +92,38 @@ if test "x$WITH_GSSAPI" != "xno"; then |
85 | fi | 92 | fi |
86 | AC_SUBST(AUTHOBJS) | 93 | AC_SUBST(AUTHOBJS) |
87 | 94 | ||
88 | AC_ARG_WITH(guile, | 95 | AC_ARG_WITH([guile], |
89 | [ --without-guile do not build guile interface], | 96 | AC_HELP_STRING([--without-guile], |
90 | [case "${withval}" in | 97 | [do not build guile interface]), |
98 | [ | ||
99 | case "${withval}" in | ||
91 | yes) useguile=yes ;; | 100 | yes) useguile=yes ;; |
92 | no) useguile=no ;; | 101 | no) useguile=no ;; |
93 | *) AC_MSG_ERROR(bad value ${withval} for --without-guile) ;; | 102 | *) AC_MSG_ERROR(bad value ${withval} for --without-guile) ;; |
94 | esac],[useguile=yes]) | 103 | esac],[useguile=yes]) |
95 | 104 | ||
96 | AC_SUBST(SITE_MAIL_RC) | 105 | AC_SUBST(SITE_MAIL_RC) |
97 | AC_ARG_WITH(mail-rc, | 106 | AC_ARG_WITH([mail-rc], |
98 | [ --with-mail-rc=FILE use FILE instead of \$sysconfdir/mail.rc], | 107 | AC_HELP_STRING([--with-mail-rc=FILE], |
99 | [case "${withval}" in | 108 | [use FILE instead of $sysconfdir/mail.rc]), |
109 | [ | ||
110 | case "${withval}" in | ||
100 | /*) SITE_MAIL_RC="${withval}";; | 111 | /*) SITE_MAIL_RC="${withval}";; |
101 | *) SITE_MAIL_RC="\$(sysconfdir)/${withval}";; | 112 | *) SITE_MAIL_RC="\$(sysconfdir)/${withval}";; |
102 | esac], | 113 | esac], |
103 | [SITE_MAIL_RC="\$(sysconfdir)/mail.rc"]) | 114 | [SITE_MAIL_RC="\$(sysconfdir)/mail.rc"]) |
104 | 115 | ||
105 | MU_CONF_MAILDIR= | 116 | MU_CONF_MAILDIR= |
106 | AC_ARG_WITH(mail-spool, | 117 | AC_ARG_WITH([mail-spool], |
107 | [ --with-mail-spool=PATH use PATH instead of /var/spool/mail], | 118 | AC_HELP_STRING([--with-mail-spool=PATH], |
108 | [case "$withval" in | 119 | [use PATH instead of /var/spool/mail]), |
120 | [ | ||
121 | case "$withval" in | ||
109 | /*/) MU_CONF_MAILDIR="\"${withval}\"";; | 122 | /*/) MU_CONF_MAILDIR="\"${withval}\"";; |
110 | /*) MU_CONF_MAILDIR="\"${withval}/\"";; | 123 | /*) MU_CONF_MAILDIR="\"${withval}/\"";; |
111 | *:*[[/=]]) MU_CONF_MAILDIR="\"${withval}\"";; | 124 | *:*[[/=]]) MU_CONF_MAILDIR="\"${withval}\"";; |
112 | *) AC_MSG_ERROR(--with-mail-spool must be an absolute path or a valid URL);; | 125 | *) AC_MSG_ERROR(--with-mail-spool must be an absolute path or a valid URL);; |
113 | esac]) | 126 | esac]) |
114 | 127 | ||
115 | if test "x$MU_CONF_MAILDIR" != x; then | 128 | if test "x$MU_CONF_MAILDIR" != x; then |
116 | AC_DEFINE_UNQUOTED(MU_CONF_MAILDIR,$MU_CONF_MAILDIR, | 129 | AC_DEFINE_UNQUOTED(MU_CONF_MAILDIR,$MU_CONF_MAILDIR, |
... | @@ -134,44 +147,53 @@ AH_BOTTOM([ | ... | @@ -134,44 +147,53 @@ AH_BOTTOM([ |
134 | #endif]) | 147 | #endif]) |
135 | 148 | ||
136 | use_dbm=no | 149 | use_dbm=no |
137 | AC_ARG_WITH(gdbm, | 150 | AC_ARG_WITH([gdbm], |
138 | [ --with-gdbm use GDBM], | 151 | AC_HELP_STRING([--with-gdbm], |
139 | [case "${withval}" in | 152 | [use GDBM]), |
153 | [ | ||
154 | case "${withval}" in | ||
140 | yes) use_dbm=GDBM ;; | 155 | yes) use_dbm=GDBM ;; |
141 | no) use_dbm=no ;; | 156 | no) use_dbm=no ;; |
142 | *) AC_MSG_ERROR(bad value ${withval} for --with-gdbm) ;; | 157 | *) AC_MSG_ERROR(bad value ${withval} for --with-gdbm) ;; |
143 | esac]) | 158 | esac]) |
144 | 159 | ||
145 | AC_ARG_WITH(db2, | 160 | AC_ARG_WITH([db2], |
146 | [ --with-db2 use Berkeley DB], | 161 | AC_HELP_STRING([--with-db2], |
147 | [case "${withval}" in | 162 | [use Berkeley DB]), |
163 | [ | ||
164 | case "${withval}" in | ||
148 | yes) use_dbm=BDB2 ;; | 165 | yes) use_dbm=BDB2 ;; |
149 | no) use_dbm=no ;; | 166 | no) use_dbm=no ;; |
150 | *) AC_MSG_ERROR(bad value ${withval} for --with-db) ;; | 167 | *) AC_MSG_ERROR(bad value ${withval} for --with-db) ;; |
151 | esac]) | 168 | esac]) |
152 | 169 | ||
153 | AC_ARG_WITH(ndbm, | 170 | AC_ARG_WITH([ndbm], |
154 | [ --with-ndbm use NDBM], | 171 | AC_HELP_STRING([--with-ndbm], |
155 | [case "${withval}" in | 172 | [use NDBM]), |
173 | [ | ||
174 | case "${withval}" in | ||
156 | yes) use_dbm=NDBM ;; | 175 | yes) use_dbm=NDBM ;; |
157 | no) use_dbm=no ;; | 176 | no) use_dbm=no ;; |
158 | *) AC_MSG_ERROR(bad value ${withval} for --with-ndbm) ;; | 177 | *) AC_MSG_ERROR(bad value ${withval} for --with-ndbm) ;; |
159 | esac]) | 178 | esac]) |
160 | 179 | ||
161 | AC_ARG_WITH(dbm, | 180 | AC_ARG_WITH([dbm], |
162 | [ --with-dbm use old DBM], | 181 | AC_HELP_STRING([--with-dbm], |
163 | [case "${withval}" in | 182 | [use old DBM]), |
183 | [ | ||
184 | case "${withval}" in | ||
164 | yes) use_dbm=ODBM ;; | 185 | yes) use_dbm=ODBM ;; |
165 | no) use_dbm=no ;; | 186 | no) use_dbm=no ;; |
166 | *) AC_MSG_ERROR(bad value ${withval} for --with-old-dbm) ;; | 187 | *) AC_MSG_ERROR(bad value ${withval} for --with-old-dbm) ;; |
167 | esac]) | 188 | esac]) |
168 | 189 | ||
169 | AC_MSG_CHECKING(for log facility) | 190 | AC_MSG_CHECKING(for log facility) |
170 | log_facility="LOG_MAIL" | 191 | log_facility="LOG_MAIL" |
171 | AC_ARG_WITH(log-facility, | 192 | AC_ARG_WITH([log-facility], |
172 | [ --with-log-facility=facility enable logging to the given facility], | 193 | AC_HELP_STRING([--with-log-facility=facility], |
173 | AC_TRY_COMPILE([#include <syslog.h>], int lf = $withval, | 194 | [enable logging to the given facility]), |
174 | log_facility=$withval)) | 195 | [AC_TRY_COMPILE([#include <syslog.h>], int lf = $withval, |
196 | log_facility=$withval)]) | ||
175 | AC_DEFINE_UNQUOTED(LOG_FACILITY, $log_facility, | 197 | AC_DEFINE_UNQUOTED(LOG_FACILITY, $log_facility, |
176 | [Default syslog facility to use]) | 198 | [Default syslog facility to use]) |
177 | AC_MSG_RESULT($log_facility) | 199 | AC_MSG_RESULT($log_facility) |
... | @@ -308,7 +330,10 @@ AC_CHECK_FUNCS(_obstack_begin, | ... | @@ -308,7 +330,10 @@ AC_CHECK_FUNCS(_obstack_begin, |
308 | dnl check if mysql support was added | 330 | dnl check if mysql support was added |
309 | AC_SUBST(BUILD_LIBMYSQL) | 331 | AC_SUBST(BUILD_LIBMYSQL) |
310 | AC_SUBST(MYSQLLIBS) | 332 | AC_SUBST(MYSQLLIBS) |
311 | AC_ARG_ENABLE(mysql, [ --enable-mysql enable mysql support (default no)], [use_mysql="yes"],,) | 333 | AC_ARG_ENABLE([mysql], |
334 | AC_HELP_STRING([--enable-mysql], | ||
335 | [enable mysql support (default no)]), | ||
336 | [use_mysql="yes"],,) | ||
312 | if test x"$use_mysql" = x"yes"; then | 337 | if test x"$use_mysql" = x"yes"; then |
313 | AC_CHECK_HEADER(mysql/mysql.h, | 338 | AC_CHECK_HEADER(mysql/mysql.h, |
314 | [AUTHLIBS="$AUTHLIBS -lmysqlclient -lm -L/usr/lib/mysql -L/usr/local/lib/mysql" | 339 | [AUTHLIBS="$AUTHLIBS -lmysqlclient -lm -L/usr/lib/mysql -L/usr/local/lib/mysql" |
... | @@ -316,27 +341,32 @@ if test x"$use_mysql" = x"yes"; then | ... | @@ -316,27 +341,32 @@ if test x"$use_mysql" = x"yes"; then |
316 | fi | 341 | fi |
317 | 342 | ||
318 | dnl Virtual domain support, at least for pop3d | 343 | dnl Virtual domain support, at least for pop3d |
319 | AC_ARG_ENABLE(virtual-domains, [ --enable-virtual-domains enable virtual domain support (default no)], [use_virtual_domains="yes"],,) | 344 | AC_ARG_ENABLE([virtual-domains], |
345 | AC_HELP_STRING([--enable-virtual-domains], | ||
346 | [enable virtual domain support (default no)]), | ||
347 | [use_virtual_domains="yes"],,) | ||
320 | if test x"$use_virtual_domains" = x"yes"; then | 348 | if test x"$use_virtual_domains" = x"yes"; then |
321 | AC_DEFINE(USE_VIRTUAL_DOMAINS,1,[Enable use of virtual domains]) | 349 | AC_DEFINE(USE_VIRTUAL_DOMAINS,1,[Enable use of virtual domains]) |
322 | AC_SUBST(SITE_VIRTUAL_PWDDIR) | 350 | AC_SUBST(SITE_VIRTUAL_PWDDIR) |
323 | AC_ARG_WITH(virtual-pwddir, | 351 | AC_ARG_WITH([virtual-pwddir], |
324 | [ --with-virtual-pwddir=DIR use DIR instead of \$sysconfdir/domain], | 352 | AC_HELP_STRING([--with-virtual-pwddir=DIR], |
325 | [case "${withval}" in | 353 | [use DIR instead of $sysconfdir/domain]), |
354 | [ | ||
355 | case "${withval}" in | ||
326 | /*) SITE_VIRTUAL_PWDDIR="${withval}";; | 356 | /*) SITE_VIRTUAL_PWDDIR="${withval}";; |
327 | *) SITE_VIRTUAL_PWDDIR="\$(sysconfdir)/${withval}";; | 357 | *) SITE_VIRTUAL_PWDDIR="\$(sysconfdir)/${withval}";; |
328 | esac], | 358 | esac], |
329 | [SITE_VIRTUAL_PWDDIR="\$(sysconfdir)/domain"]) | 359 | [SITE_VIRTUAL_PWDDIR="\$(sysconfdir)/domain"]) |
330 | fi | 360 | fi |
331 | 361 | ||
332 | MU_ENABLE_SUPPORT(imap) | 362 | MU_ENABLE_SUPPORT(imap) |
333 | MU_ENABLE_SUPPORT(pop) | 363 | MU_ENABLE_SUPPORT(pop) |
334 | 364 | ||
335 | AC_SUBST(MH_PROGRAMS) | 365 | AC_SUBST(MHPROGRAMS) |
336 | AC_SUBST(MH_LIBRARIES) | 366 | AC_SUBST(MHLIBRARIES) |
337 | MU_ENABLE_SUPPORT(mh, [MH_PROGRAMS='$(MH_PROGRAMS)'; MH_LIBRARIES='$(MH_LIBRARIES)']) | 367 | MU_ENABLE_SUPPORT(mh, [MHPROGRAMS='$(MHPROGRAMS)'; MHLIBRARIES='$(MHLIBRARIES)']) |
338 | AC_SUBST(SMTP_PROGRAMS) | 368 | AC_SUBST(SMTPPROGRAMS) |
339 | MU_ENABLE_SUPPORT(smtp, [SMTP_PROGRAMS='$(SMTP_PROGRAMS)']) | 369 | MU_ENABLE_SUPPORT(smtp, [SMTPPROGRAMS='$(SMTPPROGRAMS)']) |
340 | MU_ENABLE_SUPPORT(sendmail) | 370 | MU_ENABLE_SUPPORT(sendmail) |
341 | 371 | ||
342 | if test x"$testpam" = x"yes"; then | 372 | if test x"$testpam" = x"yes"; then | ... | ... |
... | @@ -2,7 +2,6 @@ | ... | @@ -2,7 +2,6 @@ |
2 | # Copyright (C) 2000,2001,2002 Free Software Foundation | 2 | # Copyright (C) 2000,2001,2002 Free Software Foundation |
3 | # See file COPYING in the distribution root directory for copying conditions. | 3 | # See file COPYING in the distribution root directory for copying conditions. |
4 | 4 | ||
5 | AUTOMAKE_OPTIONS = ansi2knr | ||
6 | noinst_LTLIBRARIES = libmailutils.la | 5 | noinst_LTLIBRARIES = libmailutils.la |
7 | 6 | ||
8 | SUBDIRS = posix | 7 | SUBDIRS = posix | ... | ... |
lib/ansi2knr.1
deleted
100644 → 0
1 | .TH ANSI2KNR 1 "19 Jan 1996" | ||
2 | .SH NAME | ||
3 | ansi2knr \- convert ANSI C to Kernighan & Ritchie C | ||
4 | .SH SYNOPSIS | ||
5 | .I ansi2knr | ||
6 | [--varargs] input_file [output_file] | ||
7 | .SH DESCRIPTION | ||
8 | If no output_file is supplied, output goes to stdout. | ||
9 | .br | ||
10 | There are no error messages. | ||
11 | .sp | ||
12 | .I ansi2knr | ||
13 | recognizes function definitions by seeing a non-keyword identifier at the left | ||
14 | margin, followed by a left parenthesis, with a right parenthesis as the last | ||
15 | character on the line, and with a left brace as the first token on the | ||
16 | following line (ignoring possible intervening comments). It will recognize a | ||
17 | multi-line header provided that no intervening line ends with a left or right | ||
18 | brace or a semicolon. These algorithms ignore whitespace and comments, except | ||
19 | that the function name must be the first thing on the line. | ||
20 | .sp | ||
21 | The following constructs will confuse it: | ||
22 | .br | ||
23 | - Any other construct that starts at the left margin and follows the | ||
24 | above syntax (such as a macro or function call). | ||
25 | .br | ||
26 | - Some macros that tinker with the syntax of the function header. | ||
27 | .sp | ||
28 | The --varargs switch is obsolete, and is recognized only for | ||
29 | backwards compatibility. The present version of | ||
30 | .I ansi2knr | ||
31 | will always attempt to convert a ... argument to va_alist and va_dcl. | ||
32 | .SH AUTHOR | ||
33 | L. Peter Deutsch <ghost@aladdin.com> wrote the original ansi2knr and | ||
34 | continues to maintain the current version; most of the code in the current | ||
35 | version is his work. ansi2knr also includes contributions by Francois | ||
36 | Pinard <pinard@iro.umontreal.ca> and Jim Avera <jima@netcom.com>. |
lib/ansi2knr.c
deleted
100644 → 0
1 | /* Copyright (C) 1989, 1997, 1998, 1999 Aladdin Enterprises. All rights reserved. */ | ||
2 | |||
3 | /*$Id$*/ | ||
4 | /* Convert ANSI C function definitions to K&R ("traditional C") syntax */ | ||
5 | |||
6 | /* | ||
7 | ansi2knr is distributed in the hope that it will be useful, but WITHOUT ANY | ||
8 | WARRANTY. No author or distributor accepts responsibility to anyone for the | ||
9 | consequences of using it or for whether it serves any particular purpose or | ||
10 | works at all, unless he says so in writing. Refer to the GNU General Public | ||
11 | License (the "GPL") for full details. | ||
12 | |||
13 | Everyone is granted permission to copy, modify and redistribute ansi2knr, | ||
14 | but only under the conditions described in the GPL. A copy of this license | ||
15 | is supposed to have been given to you along with ansi2knr so you can know | ||
16 | your rights and responsibilities. It should be in a file named COPYLEFT, | ||
17 | or, if there is no file named COPYLEFT, a file named COPYING. Among other | ||
18 | things, the copyright notice and this notice must be preserved on all | ||
19 | copies. | ||
20 | |||
21 | We explicitly state here what we believe is already implied by the GPL: if | ||
22 | the ansi2knr program is distributed as a separate set of sources and a | ||
23 | separate executable file which are aggregated on a storage medium together | ||
24 | with another program, this in itself does not bring the other program under | ||
25 | the GPL, nor does the mere fact that such a program or the procedures for | ||
26 | constructing it invoke the ansi2knr executable bring any other part of the | ||
27 | program under the GPL. | ||
28 | */ | ||
29 | |||
30 | /* | ||
31 | * Usage: | ||
32 | ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]] | ||
33 | * --filename provides the file name for the #line directive in the output, | ||
34 | * overriding input_file (if present). | ||
35 | * If no input_file is supplied, input is read from stdin. | ||
36 | * If no output_file is supplied, output goes to stdout. | ||
37 | * There are no error messages. | ||
38 | * | ||
39 | * ansi2knr recognizes function definitions by seeing a non-keyword | ||
40 | * identifier at the left margin, followed by a left parenthesis, | ||
41 | * with a right parenthesis as the last character on the line, | ||
42 | * and with a left brace as the first token on the following line | ||
43 | * (ignoring possible intervening comments), except that a line | ||
44 | * consisting of only | ||
45 | * identifier1(identifier2) | ||
46 | * will not be considered a function definition unless identifier2 is | ||
47 | * the word "void", and a line consisting of | ||
48 | * identifier1(identifier2, <<arbitrary>>) | ||
49 | * will not be considered a function definition. | ||
50 | * ansi2knr will recognize a multi-line header provided | ||
51 | * that no intervening line ends with a left or right brace or a semicolon. | ||
52 | * These algorithms ignore whitespace and comments, except that | ||
53 | * the function name must be the first thing on the line. | ||
54 | * The following constructs will confuse it: | ||
55 | * - Any other construct that starts at the left margin and | ||
56 | * follows the above syntax (such as a macro or function call). | ||
57 | * - Some macros that tinker with the syntax of function headers. | ||
58 | */ | ||
59 | |||
60 | /* | ||
61 | * The original and principal author of ansi2knr is L. Peter Deutsch | ||
62 | * <ghost@aladdin.com>. Other authors are noted in the change history | ||
63 | * that follows (in reverse chronological order): | ||
64 | lpd 1999-04-12 added minor fixes from Pavel Roskin | ||
65 | <pavel_roskin@geocities.com> for clean compilation with | ||
66 | gcc -W -Wall | ||
67 | lpd 1999-03-22 added hack to recognize lines consisting of | ||
68 | identifier1(identifier2, xxx) as *not* being procedures | ||
69 | lpd 1999-02-03 made indentation of preprocessor commands consistent | ||
70 | lpd 1999-01-28 fixed two bugs: a '/' in an argument list caused an | ||
71 | endless loop; quoted strings within an argument list | ||
72 | confused the parser | ||
73 | lpd 1999-01-24 added a check for write errors on the output, | ||
74 | suggested by Jim Meyering <meyering@ascend.com> | ||
75 | lpd 1998-11-09 added further hack to recognize identifier(void) | ||
76 | as being a procedure | ||
77 | lpd 1998-10-23 added hack to recognize lines consisting of | ||
78 | identifier1(identifier2) as *not* being procedures | ||
79 | lpd 1997-12-08 made input_file optional; only closes input and/or | ||
80 | output file if not stdin or stdout respectively; prints | ||
81 | usage message on stderr rather than stdout; adds | ||
82 | --filename switch (changes suggested by | ||
83 | <ceder@lysator.liu.se>) | ||
84 | lpd 1996-01-21 added code to cope with not HAVE_CONFIG_H and with | ||
85 | compilers that don't understand void, as suggested by | ||
86 | Tom Lane | ||
87 | lpd 1996-01-15 changed to require that the first non-comment token | ||
88 | on the line following a function header be a left brace, | ||
89 | to reduce sensitivity to macros, as suggested by Tom Lane | ||
90 | <tgl@sss.pgh.pa.us> | ||
91 | lpd 1995-06-22 removed #ifndefs whose sole purpose was to define | ||
92 | undefined preprocessor symbols as 0; changed all #ifdefs | ||
93 | for configuration symbols to #ifs | ||
94 | lpd 1995-04-05 changed copyright notice to make it clear that | ||
95 | including ansi2knr in a program does not bring the entire | ||
96 | program under the GPL | ||
97 | lpd 1994-12-18 added conditionals for systems where ctype macros | ||
98 | don't handle 8-bit characters properly, suggested by | ||
99 | Francois Pinard <pinard@iro.umontreal.ca>; | ||
100 | removed --varargs switch (this is now the default) | ||
101 | lpd 1994-10-10 removed CONFIG_BROKETS conditional | ||
102 | lpd 1994-07-16 added some conditionals to help GNU `configure', | ||
103 | suggested by Francois Pinard <pinard@iro.umontreal.ca>; | ||
104 | properly erase prototype args in function parameters, | ||
105 | contributed by Jim Avera <jima@netcom.com>; | ||
106 | correct error in writeblanks (it shouldn't erase EOLs) | ||
107 | lpd 1989-xx-xx original version | ||
108 | */ | ||
109 | |||
110 | /* Most of the conditionals here are to make ansi2knr work with */ | ||
111 | /* or without the GNU configure machinery. */ | ||
112 | |||
113 | #if HAVE_CONFIG_H | ||
114 | # include <config.h> | ||
115 | #endif | ||
116 | |||
117 | #include <stdio.h> | ||
118 | #include <ctype.h> | ||
119 | |||
120 | #if HAVE_CONFIG_H | ||
121 | |||
122 | /* | ||
123 | For properly autoconfiguring ansi2knr, use AC_CONFIG_HEADER(config.h). | ||
124 | This will define HAVE_CONFIG_H and so, activate the following lines. | ||
125 | */ | ||
126 | |||
127 | # if STDC_HEADERS || HAVE_STRING_H | ||
128 | # include <string.h> | ||
129 | # else | ||
130 | # include <strings.h> | ||
131 | # endif | ||
132 | |||
133 | #else /* not HAVE_CONFIG_H */ | ||
134 | |||
135 | /* Otherwise do it the hard way */ | ||
136 | |||
137 | # ifdef BSD | ||
138 | # include <strings.h> | ||
139 | # else | ||
140 | # ifdef VMS | ||
141 | extern int strlen(), strncmp(); | ||
142 | # else | ||
143 | # include <string.h> | ||
144 | # endif | ||
145 | # endif | ||
146 | |||
147 | #endif /* not HAVE_CONFIG_H */ | ||
148 | |||
149 | #if STDC_HEADERS | ||
150 | # include <stdlib.h> | ||
151 | #else | ||
152 | /* | ||
153 | malloc and free should be declared in stdlib.h, | ||
154 | but if you've got a K&R compiler, they probably aren't. | ||
155 | */ | ||
156 | # ifdef MSDOS | ||
157 | # include <malloc.h> | ||
158 | # else | ||
159 | # ifdef VMS | ||
160 | extern char *malloc(); | ||
161 | extern void free(); | ||
162 | # else | ||
163 | extern char *malloc(); | ||
164 | extern int free(); | ||
165 | # endif | ||
166 | # endif | ||
167 | |||
168 | #endif | ||
169 | |||
170 | /* Define NULL (for *very* old compilers). */ | ||
171 | #ifndef NULL | ||
172 | # define NULL (0) | ||
173 | #endif | ||
174 | |||
175 | /* | ||
176 | * The ctype macros don't always handle 8-bit characters correctly. | ||
177 | * Compensate for this here. | ||
178 | */ | ||
179 | #ifdef isascii | ||
180 | # undef HAVE_ISASCII /* just in case */ | ||
181 | # define HAVE_ISASCII 1 | ||
182 | #else | ||
183 | #endif | ||
184 | #if STDC_HEADERS || !HAVE_ISASCII | ||
185 | # define is_ascii(c) 1 | ||
186 | #else | ||
187 | # define is_ascii(c) isascii(c) | ||
188 | #endif | ||
189 | |||
190 | #define is_space(c) (is_ascii(c) && isspace(c)) | ||
191 | #define is_alpha(c) (is_ascii(c) && isalpha(c)) | ||
192 | #define is_alnum(c) (is_ascii(c) && isalnum(c)) | ||
193 | |||
194 | /* Scanning macros */ | ||
195 | #define isidchar(ch) (is_alnum(ch) || (ch) == '_') | ||
196 | #define isidfirstchar(ch) (is_alpha(ch) || (ch) == '_') | ||
197 | |||
198 | /* Forward references */ | ||
199 | char *skipspace(); | ||
200 | char *scanstring(); | ||
201 | int writeblanks(); | ||
202 | int test1(); | ||
203 | int convert1(); | ||
204 | |||
205 | /* The main program */ | ||
206 | int | ||
207 | main(argc, argv) | ||
208 | int argc; | ||
209 | char *argv[]; | ||
210 | { FILE *in = stdin; | ||
211 | FILE *out = stdout; | ||
212 | char *filename = 0; | ||
213 | char *program_name = argv[0]; | ||
214 | char *output_name = 0; | ||
215 | #define bufsize 5000 /* arbitrary size */ | ||
216 | char *buf; | ||
217 | char *line; | ||
218 | char *more; | ||
219 | char *usage = | ||
220 | "Usage: ansi2knr [--filename FILENAME] [INPUT_FILE [OUTPUT_FILE]]\n"; | ||
221 | /* | ||
222 | * In previous versions, ansi2knr recognized a --varargs switch. | ||
223 | * If this switch was supplied, ansi2knr would attempt to convert | ||
224 | * a ... argument to va_alist and va_dcl; if this switch was not | ||
225 | * supplied, ansi2knr would simply drop any such arguments. | ||
226 | * Now, ansi2knr always does this conversion, and we only | ||
227 | * check for this switch for backward compatibility. | ||
228 | */ | ||
229 | int convert_varargs = 1; | ||
230 | int output_error; | ||
231 | |||
232 | while ( argc > 1 && argv[1][0] == '-' ) { | ||
233 | if ( !strcmp(argv[1], "--varargs") ) { | ||
234 | convert_varargs = 1; | ||
235 | argc--; | ||
236 | argv++; | ||
237 | continue; | ||
238 | } | ||
239 | if ( !strcmp(argv[1], "--filename") && argc > 2 ) { | ||
240 | filename = argv[2]; | ||
241 | argc -= 2; | ||
242 | argv += 2; | ||
243 | continue; | ||
244 | } | ||
245 | fprintf(stderr, "%s: Unrecognized switch: %s\n", program_name, | ||
246 | argv[1]); | ||
247 | fprintf(stderr, usage); | ||
248 | exit(1); | ||
249 | } | ||
250 | switch ( argc ) | ||
251 | { | ||
252 | default: | ||
253 | fprintf(stderr, usage); | ||
254 | exit(0); | ||
255 | case 3: | ||
256 | output_name = argv[2]; | ||
257 | out = fopen(output_name, "w"); | ||
258 | if ( out == NULL ) { | ||
259 | fprintf(stderr, "%s: Cannot open output file %s\n", | ||
260 | program_name, output_name); | ||
261 | exit(1); | ||
262 | } | ||
263 | /* falls through */ | ||
264 | case 2: | ||
265 | in = fopen(argv[1], "r"); | ||
266 | if ( in == NULL ) { | ||
267 | fprintf(stderr, "%s: Cannot open input file %s\n", | ||
268 | program_name, argv[1]); | ||
269 | exit(1); | ||
270 | } | ||
271 | if ( filename == 0 ) | ||
272 | filename = argv[1]; | ||
273 | /* falls through */ | ||
274 | case 1: | ||
275 | break; | ||
276 | } | ||
277 | if ( filename ) | ||
278 | fprintf(out, "#line 1 \"%s\"\n", filename); | ||
279 | buf = malloc(bufsize); | ||
280 | if ( buf == NULL ) | ||
281 | { | ||
282 | fprintf(stderr, "Unable to allocate read buffer!\n"); | ||
283 | exit(1); | ||
284 | } | ||
285 | line = buf; | ||
286 | while ( fgets(line, (unsigned)(buf + bufsize - line), in) != NULL ) | ||
287 | { | ||
288 | test: line += strlen(line); | ||
289 | switch ( test1(buf) ) | ||
290 | { | ||
291 | case 2: /* a function header */ | ||
292 | convert1(buf, out, 1, convert_varargs); | ||
293 | break; | ||
294 | case 1: /* a function */ | ||
295 | /* Check for a { at the start of the next line. */ | ||
296 | more = ++line; | ||
297 | f: if ( line >= buf + (bufsize - 1) ) /* overflow check */ | ||
298 | goto wl; | ||
299 | if ( fgets(line, (unsigned)(buf + bufsize - line), in) == NULL ) | ||
300 | goto wl; | ||
301 | switch ( *skipspace(more, 1) ) | ||
302 | { | ||
303 | case '{': | ||
304 | /* Definitely a function header. */ | ||
305 | convert1(buf, out, 0, convert_varargs); | ||
306 | fputs(more, out); | ||
307 | break; | ||
308 | case 0: | ||
309 | /* The next line was blank or a comment: */ | ||
310 | /* keep scanning for a non-comment. */ | ||
311 | line += strlen(line); | ||
312 | goto f; | ||
313 | default: | ||
314 | /* buf isn't a function header, but */ | ||
315 | /* more might be. */ | ||
316 | fputs(buf, out); | ||
317 | strcpy(buf, more); | ||
318 | line = buf; | ||
319 | goto test; | ||
320 | } | ||
321 | break; | ||
322 | case -1: /* maybe the start of a function */ | ||
323 | if ( line != buf + (bufsize - 1) ) /* overflow check */ | ||
324 | continue; | ||
325 | /* falls through */ | ||
326 | default: /* not a function */ | ||
327 | wl: fputs(buf, out); | ||
328 | break; | ||
329 | } | ||
330 | line = buf; | ||
331 | } | ||
332 | if ( line != buf ) | ||
333 | fputs(buf, out); | ||
334 | free(buf); | ||
335 | if ( output_name ) { | ||
336 | output_error = ferror(out); | ||
337 | output_error |= fclose(out); | ||
338 | } else { /* out == stdout */ | ||
339 | fflush(out); | ||
340 | output_error = ferror(out); | ||
341 | } | ||
342 | if ( output_error ) { | ||
343 | fprintf(stderr, "%s: error writing to %s\n", program_name, | ||
344 | (output_name ? output_name : "stdout")); | ||
345 | exit(1); | ||
346 | } | ||
347 | if ( in != stdin ) | ||
348 | fclose(in); | ||
349 | return 0; | ||
350 | } | ||
351 | |||
352 | /* Skip over whitespace and comments, in either direction. */ | ||
353 | char * | ||
354 | skipspace(p, dir) | ||
355 | register char *p; | ||
356 | register int dir; /* 1 for forward, -1 for backward */ | ||
357 | { for ( ; ; ) | ||
358 | { while ( is_space(*p) ) | ||
359 | p += dir; | ||
360 | if ( !(*p == '/' && p[dir] == '*') ) | ||
361 | break; | ||
362 | p += dir; p += dir; | ||
363 | while ( !(*p == '*' && p[dir] == '/') ) | ||
364 | { if ( *p == 0 ) | ||
365 | return p; /* multi-line comment?? */ | ||
366 | p += dir; | ||
367 | } | ||
368 | p += dir; p += dir; | ||
369 | } | ||
370 | return p; | ||
371 | } | ||
372 | |||
373 | /* Scan over a quoted string, in either direction. */ | ||
374 | char * | ||
375 | scanstring(p, dir) | ||
376 | register char *p; | ||
377 | register int dir; | ||
378 | { | ||
379 | for (p += dir; ; p += dir) | ||
380 | if (*p == '"' && p[-dir] != '\\') | ||
381 | return p + dir; | ||
382 | } | ||
383 | |||
384 | /* | ||
385 | * Write blanks over part of a string. | ||
386 | * Don't overwrite end-of-line characters. | ||
387 | */ | ||
388 | int | ||
389 | writeblanks(start, end) | ||
390 | char *start; | ||
391 | char *end; | ||
392 | { char *p; | ||
393 | for ( p = start; p < end; p++ ) | ||
394 | if ( *p != '\r' && *p != '\n' ) | ||
395 | *p = ' '; | ||
396 | return 0; | ||
397 | } | ||
398 | |||
399 | /* | ||
400 | * Test whether the string in buf is a function definition. | ||
401 | * The string may contain and/or end with a newline. | ||
402 | * Return as follows: | ||
403 | * 0 - definitely not a function definition; | ||
404 | * 1 - definitely a function definition; | ||
405 | * 2 - definitely a function prototype (NOT USED); | ||
406 | * -1 - may be the beginning of a function definition, | ||
407 | * append another line and look again. | ||
408 | * The reason we don't attempt to convert function prototypes is that | ||
409 | * Ghostscript's declaration-generating macros look too much like | ||
410 | * prototypes, and confuse the algorithms. | ||
411 | */ | ||
412 | int | ||
413 | test1(buf) | ||
414 | char *buf; | ||
415 | { register char *p = buf; | ||
416 | char *bend; | ||
417 | char *endfn; | ||
418 | int contin; | ||
419 | |||
420 | if ( !isidfirstchar(*p) ) | ||
421 | return 0; /* no name at left margin */ | ||
422 | bend = skipspace(buf + strlen(buf) - 1, -1); | ||
423 | switch ( *bend ) | ||
424 | { | ||
425 | case ';': contin = 0 /*2*/; break; | ||
426 | case ')': contin = 1; break; | ||
427 | case '{': return 0; /* not a function */ | ||
428 | case '}': return 0; /* not a function */ | ||
429 | default: contin = -1; | ||
430 | } | ||
431 | while ( isidchar(*p) ) | ||
432 | p++; | ||
433 | endfn = p; | ||
434 | p = skipspace(p, 1); | ||
435 | if ( *p++ != '(' ) | ||
436 | return 0; /* not a function */ | ||
437 | p = skipspace(p, 1); | ||
438 | if ( *p == ')' ) | ||
439 | return 0; /* no parameters */ | ||
440 | /* Check that the apparent function name isn't a keyword. */ | ||
441 | /* We only need to check for keywords that could be followed */ | ||
442 | /* by a left parenthesis (which, unfortunately, is most of them). */ | ||
443 | { static char *words[] = | ||
444 | { "asm", "auto", "case", "char", "const", "double", | ||
445 | "extern", "float", "for", "if", "int", "long", | ||
446 | "register", "return", "short", "signed", "sizeof", | ||
447 | "static", "switch", "typedef", "unsigned", | ||
448 | "void", "volatile", "while", 0 | ||
449 | }; | ||
450 | char **key = words; | ||
451 | char *kp; | ||
452 | unsigned len = endfn - buf; | ||
453 | |||
454 | while ( (kp = *key) != 0 ) | ||
455 | { if ( strlen(kp) == len && !strncmp(kp, buf, len) ) | ||
456 | return 0; /* name is a keyword */ | ||
457 | key++; | ||
458 | } | ||
459 | } | ||
460 | { | ||
461 | char *id = p; | ||
462 | int len; | ||
463 | /* | ||
464 | * Check for identifier1(identifier2) and not | ||
465 | * identifier1(void), or identifier1(identifier2, xxxx). | ||
466 | */ | ||
467 | |||
468 | while ( isidchar(*p) ) | ||
469 | p++; | ||
470 | len = p - id; | ||
471 | p = skipspace(p, 1); | ||
472 | if (*p == ',' || | ||
473 | (*p == ')' && (len != 4 || strncmp(id, "void", 4))) | ||
474 | ) | ||
475 | return 0; /* not a function */ | ||
476 | } | ||
477 | /* | ||
478 | * If the last significant character was a ), we need to count | ||
479 | * parentheses, because it might be part of a formal parameter | ||
480 | * that is a procedure. | ||
481 | */ | ||
482 | if (contin > 0) { | ||
483 | int level = 0; | ||
484 | |||
485 | for (p = skipspace(buf, 1); *p; p = skipspace(p + 1, 1)) | ||
486 | level += (*p == '(' ? 1 : *p == ')' ? -1 : 0); | ||
487 | if (level > 0) | ||
488 | contin = -1; | ||
489 | } | ||
490 | return contin; | ||
491 | } | ||
492 | |||
493 | /* Convert a recognized function definition or header to K&R syntax. */ | ||
494 | int | ||
495 | convert1(buf, out, header, convert_varargs) | ||
496 | char *buf; | ||
497 | FILE *out; | ||
498 | int header; /* Boolean */ | ||
499 | int convert_varargs; /* Boolean */ | ||
500 | { char *endfn; | ||
501 | register char *p; | ||
502 | /* | ||
503 | * The breaks table contains pointers to the beginning and end | ||
504 | * of each argument. | ||
505 | */ | ||
506 | char **breaks; | ||
507 | unsigned num_breaks = 2; /* for testing */ | ||
508 | char **btop; | ||
509 | char **bp; | ||
510 | char **ap; | ||
511 | char *vararg = 0; | ||
512 | |||
513 | /* Pre-ANSI implementations don't agree on whether strchr */ | ||
514 | /* is called strchr or index, so we open-code it here. */ | ||
515 | for ( endfn = buf; *(endfn++) != '('; ) | ||
516 | ; | ||
517 | top: p = endfn; | ||
518 | breaks = (char **)malloc(sizeof(char *) * num_breaks * 2); | ||
519 | if ( breaks == NULL ) | ||
520 | { /* Couldn't allocate break table, give up */ | ||
521 | fprintf(stderr, "Unable to allocate break table!\n"); | ||
522 | fputs(buf, out); | ||
523 | return -1; | ||
524 | } | ||
525 | btop = breaks + num_breaks * 2 - 2; | ||
526 | bp = breaks; | ||
527 | /* Parse the argument list */ | ||
528 | do | ||
529 | { int level = 0; | ||
530 | char *lp = NULL; | ||
531 | char *rp = NULL; | ||
532 | char *end = NULL; | ||
533 | |||
534 | if ( bp >= btop ) | ||
535 | { /* Filled up break table. */ | ||
536 | /* Allocate a bigger one and start over. */ | ||
537 | free((char *)breaks); | ||
538 | num_breaks <<= 1; | ||
539 | goto top; | ||
540 | } | ||
541 | *bp++ = p; | ||
542 | /* Find the end of the argument */ | ||
543 | for ( ; end == NULL; p++ ) | ||
544 | { switch(*p) | ||
545 | { | ||
546 | case ',': | ||
547 | if ( !level ) end = p; | ||
548 | break; | ||
549 | case '(': | ||
550 | if ( !level ) lp = p; | ||
551 | level++; | ||
552 | break; | ||
553 | case ')': | ||
554 | if ( --level < 0 ) end = p; | ||
555 | else rp = p; | ||
556 | break; | ||
557 | case '/': | ||
558 | if (p[1] == '*') | ||
559 | p = skipspace(p, 1) - 1; | ||
560 | break; | ||
561 | case '"': | ||
562 | p = scanstring(p, 1) - 1; | ||
563 | break; | ||
564 | default: | ||
565 | ; | ||
566 | } | ||
567 | } | ||
568 | /* Erase any embedded prototype parameters. */ | ||
569 | if ( lp && rp ) | ||
570 | writeblanks(lp + 1, rp); | ||
571 | p--; /* back up over terminator */ | ||
572 | /* Find the name being declared. */ | ||
573 | /* This is complicated because of procedure and */ | ||
574 | /* array modifiers. */ | ||
575 | for ( ; ; ) | ||
576 | { p = skipspace(p - 1, -1); | ||
577 | switch ( *p ) | ||
578 | { | ||
579 | case ']': /* skip array dimension(s) */ | ||
580 | case ')': /* skip procedure args OR name */ | ||
581 | { int level = 1; | ||
582 | while ( level ) | ||
583 | switch ( *--p ) | ||
584 | { | ||
585 | case ']': case ')': | ||
586 | level++; | ||
587 | break; | ||
588 | case '[': case '(': | ||
589 | level--; | ||
590 | break; | ||
591 | case '/': | ||
592 | if (p > buf && p[-1] == '*') | ||
593 | p = skipspace(p, -1) + 1; | ||
594 | break; | ||
595 | case '"': | ||
596 | p = scanstring(p, -1) + 1; | ||
597 | break; | ||
598 | default: ; | ||
599 | } | ||
600 | } | ||
601 | if ( *p == '(' && *skipspace(p + 1, 1) == '*' ) | ||
602 | { /* We found the name being declared */ | ||
603 | while ( !isidfirstchar(*p) ) | ||
604 | p = skipspace(p, 1) + 1; | ||
605 | goto found; | ||
606 | } | ||
607 | break; | ||
608 | default: | ||
609 | goto found; | ||
610 | } | ||
611 | } | ||
612 | found: if ( *p == '.' && p[-1] == '.' && p[-2] == '.' ) | ||
613 | { if ( convert_varargs ) | ||
614 | { *bp++ = "va_alist"; | ||
615 | vararg = p-2; | ||
616 | } | ||
617 | else | ||
618 | { p++; | ||
619 | if ( bp == breaks + 1 ) /* sole argument */ | ||
620 | writeblanks(breaks[0], p); | ||
621 | else | ||
622 | writeblanks(bp[-1] - 1, p); | ||
623 | bp--; | ||
624 | } | ||
625 | } | ||
626 | else | ||
627 | { while ( isidchar(*p) ) p--; | ||
628 | *bp++ = p+1; | ||
629 | } | ||
630 | p = end; | ||
631 | } | ||
632 | while ( *p++ == ',' ); | ||
633 | *bp = p; | ||
634 | /* Make a special check for 'void' arglist */ | ||
635 | if ( bp == breaks+2 ) | ||
636 | { p = skipspace(breaks[0], 1); | ||
637 | if ( !strncmp(p, "void", 4) ) | ||
638 | { p = skipspace(p+4, 1); | ||
639 | if ( p == breaks[2] - 1 ) | ||
640 | { bp = breaks; /* yup, pretend arglist is empty */ | ||
641 | writeblanks(breaks[0], p + 1); | ||
642 | } | ||
643 | } | ||
644 | } | ||
645 | /* Put out the function name and left parenthesis. */ | ||
646 | p = buf; | ||
647 | while ( p != endfn ) putc(*p, out), p++; | ||
648 | /* Put out the declaration. */ | ||
649 | if ( header ) | ||
650 | { fputs(");", out); | ||
651 | for ( p = breaks[0]; *p; p++ ) | ||
652 | if ( *p == '\r' || *p == '\n' ) | ||
653 | putc(*p, out); | ||
654 | } | ||
655 | else | ||
656 | { for ( ap = breaks+1; ap < bp; ap += 2 ) | ||
657 | { p = *ap; | ||
658 | while ( isidchar(*p) ) | ||
659 | putc(*p, out), p++; | ||
660 | if ( ap < bp - 1 ) | ||
661 | fputs(", ", out); | ||
662 | } | ||
663 | fputs(") ", out); | ||
664 | /* Put out the argument declarations */ | ||
665 | for ( ap = breaks+2; ap <= bp; ap += 2 ) | ||
666 | (*ap)[-1] = ';'; | ||
667 | if ( vararg != 0 ) | ||
668 | { *vararg = 0; | ||
669 | fputs(breaks[0], out); /* any prior args */ | ||
670 | fputs("va_dcl", out); /* the final arg */ | ||
671 | fputs(bp[0], out); | ||
672 | } | ||
673 | else | ||
674 | fputs(breaks[0], out); | ||
675 | } | ||
676 | free((char *)breaks); | ||
677 | return 0; | ||
678 | } |
... | @@ -23,13 +23,15 @@ AC_DEFUN([MU_ENABLE_SUPPORT], [ | ... | @@ -23,13 +23,15 @@ AC_DEFUN([MU_ENABLE_SUPPORT], [ |
23 | pushdef([mu_cache_var],[mu_cv_enable_]$1) | 23 | pushdef([mu_cache_var],[mu_cv_enable_]$1) |
24 | 24 | ||
25 | AC_ARG_ENABLE($1, | 25 | AC_ARG_ENABLE($1, |
26 | [ --disable-]$1[ disable ]$1[ support], | 26 | AC_HELP_STRING([--disable-]$1, |
27 | [case "${enableval}" in | 27 | [disable ]$1[ support]), |
28 | [ | ||
29 | case "${enableval}" in | ||
28 | yes) mu_cache_var=yes;; | 30 | yes) mu_cache_var=yes;; |
29 | no) mu_cache_var=no;; | 31 | no) mu_cache_var=no;; |
30 | *) AC_MSG_ERROR(bad value ${enableval} for --disable-$1) ;; | 32 | *) AC_MSG_ERROR(bad value ${enableval} for --disable-$1) ;; |
31 | esac], | 33 | esac], |
32 | [mu_cache_var=yes]) | 34 | [mu_cache_var=yes]) |
33 | 35 | ||
34 | if test x"[$]mu_cache_var" = x"yes"; then | 36 | if test x"[$]mu_cache_var" = x"yes"; then |
35 | AC_DEFINE([ENABLE_]mu_upcase,1,[Define this if you enable $1 support]) | 37 | AC_DEFINE([ENABLE_]mu_upcase,1,[Define this if you enable $1 support]) | ... | ... |
... | @@ -5,9 +5,9 @@ | ... | @@ -5,9 +5,9 @@ |
5 | AUTOMAKE_OPTIONS = ../lib/ansi2knr | 5 | AUTOMAKE_OPTIONS = ../lib/ansi2knr |
6 | INCLUDES =-I$(srcdir) -I$(top_srcdir)/lib -I$(top_srcdir)/include -I$(top_srcdir)/libmu_scm | 6 | INCLUDES =-I$(srcdir) -I$(top_srcdir)/lib -I$(top_srcdir)/include -I$(top_srcdir)/libmu_scm |
7 | 7 | ||
8 | SMTP_PROGRAMS = mail.remote | 8 | SMTPPROGRAMS = mail.remote |
9 | EXTRA_PROGRAMS = mail.remote | 9 | EXTRA_PROGRAMS = mail.remote |
10 | libexec_PROGRAMS = @SMTP_PROGRAMS@ | 10 | libexec_PROGRAMS = @SMTPPROGRAMS@ |
11 | mail_remote_SOURCES = mail.remote.c | 11 | mail_remote_SOURCES = mail.remote.c |
12 | 12 | ||
13 | mail_remote_LDADD = ../mailbox/libmailbox.la ../lib/libmailutils.la | 13 | mail_remote_LDADD = ../mailbox/libmailbox.la ../lib/libmailutils.la | ... | ... |
... | @@ -2,13 +2,13 @@ | ... | @@ -2,13 +2,13 @@ |
2 | # Copyright (C) 2000,2001,2002 Free Software Foundation | 2 | # Copyright (C) 2000,2001,2002 Free Software Foundation |
3 | # See file COPYING in the distribution root directory for copying conditions. | 3 | # See file COPYING in the distribution root directory for copying conditions. |
4 | 4 | ||
5 | MH_PROGRAMS = scan inc rmm refile mhpath folder rmf fmtcheck repl | 5 | MHPROGRAMS = scan inc rmm refile mhpath folder rmf fmtcheck repl |
6 | EXTRA_PROGRAMS = scan inc rmm refile mhpath folder rmf fmtcheck repl | 6 | EXTRA_PROGRAMS = scan inc rmm refile mhpath folder rmf fmtcheck repl |
7 | MH_LIBRARIES = libmh.a | 7 | MHLIBRARIES = libmh.a |
8 | EXTRA_LIBRARIES = libmh.a | 8 | EXTRA_LIBRARIES = libmh.a |
9 | 9 | ||
10 | bin_PROGRAMS = @MH_PROGRAMS@ | 10 | bin_PROGRAMS = @MHPROGRAMS@ |
11 | noinst_LIBRARIES = @MH_LIBRARIES@ | 11 | noinst_LIBRARIES = @MHLIBRARIES@ |
12 | libmh_a_SOURCES= \ | 12 | libmh_a_SOURCES= \ |
13 | mh_argp.c\ | 13 | mh_argp.c\ |
14 | mh_ctx.c\ | 14 | mh_ctx.c\ | ... | ... |
-
Please register or sign in to post a comment