This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Rely on C89 variadic prototypes
authorAaron Crane <arc@cpan.org>
Thu, 12 Oct 2017 16:17:02 +0000 (18:17 +0200)
committerAaron Crane <arc@cpan.org>
Sat, 21 Oct 2017 15:52:12 +0000 (16:52 +0100)
The Configure changes here were generated using a version of metaconfig
that copies U/modified/vaproto.U from dist/U/vaproto.U, and changes it to
refrain from promising to define a _V symbol (which would otherwise cause
the relevant probe to included in Configure).

18 files changed:
Configure
Cross/config.sh-arm-linux
NetWare/config.wc
Porting/Glossary
Porting/config.sh
Porting/config_H
config_h.SH
configure.com
plan9/config_sh.sample
symbian/config.sh
uconfig.h
uconfig.sh
uconfig64.sh
win32/config.ce
win32/config.gc
win32/config.vc
win32/config_H.gc
win32/config_H.vc

index dac8a66..4e3b964 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -1365,7 +1365,6 @@ usethreads=''
 incpath=''
 mips_type=''
 usrinc=''
-vaproto=''
 d_vendorarch=''
 installvendorarch=''
 vendorarch=''
@@ -22874,130 +22873,6 @@ case "$usesitecustomize" in
        ;;
     esac
 
-: see if stdarg is available
-echo " "
-if $test `./findhdr stdarg.h`; then
-       echo "<stdarg.h> found." >&4
-       valstd="$define"
-else
-       echo "<stdarg.h> NOT found." >&4
-       valstd="$undef"
-fi
-
-: see if varargs is available
-echo " "
-if $test `./findhdr varargs.h`; then
-       echo "<varargs.h> found." >&4
-else
-       echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
-fi
-
-: set up the varargs testing programs
-$cat > varargs.c <<EOP
-#ifdef I_STDARG
-#include <stdarg.h>
-#endif
-#ifdef I_VARARGS
-#include <varargs.h>
-#endif
-
-#ifdef I_STDARG
-int f(char *p, ...)
-#else
-int f(va_alist)
-va_dcl
-#endif
-{
-       va_list ap;
-#ifndef I_STDARG
-       char *p;
-#endif
-#ifdef I_STDARG
-       va_start(ap,p);
-#else
-       va_start(ap);
-       p = va_arg(ap, char *);
-#endif
-       va_end(ap);
-       return 0;
-}
-EOP
-$cat > varargs <<EOP
-$startsh
-if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
-       echo "true"
-else
-       echo "false"
-fi
-$rm -f varargs$_o
-EOP
-chmod +x varargs
-
-: now check which varargs header should be included
-echo " "
-i_varhdr=''
-val=''
-case "$valstd" in
-"$define")
-       if `./varargs I_STDARG`; then
-               val='stdarg.h'
-       elif `./varargs I_VARARGS`; then
-               val='varargs.h'
-       fi
-       ;;
-*)
-       if `./varargs I_VARARGS`; then
-               val='varargs.h'
-       fi
-       ;;
-esac
-case "$val" in
-'')
-       echo " "
-       echo "*** WHOA THERE!!! ***" >&4
-       echo "    Your C compiler \"$cc\" doesn't seem to support stdarg or varargs!" >&4
-       case "$knowitall" in
-       '')
-       echo "    I'm giving up; maybe you can try again with a different compiler?" >&4
-               exit 1
-               ;;
-       esac
-echo "I could not find the definition for va_dcl... You have problems..." >&4
-       val="$undef"; set i_stdarg; eval $setvar
-       val="$undef"; set i_varargs; eval $setvar
-       ;;
-*)
-       set i_varhdr
-       eval $setvar
-       case "$i_varhdr" in
-       stdarg.h)
-               val="$define"; set i_stdarg; eval $setvar
-               val="$undef"; set i_varargs; eval $setvar
-               ;;
-       varargs.h)
-               val="$undef"; set i_stdarg; eval $setvar
-               val="$define"; set i_varargs; eval $setvar
-               ;;
-       esac
-       echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
-esac
-$rm -f varargs*
-
-: see if prototypes support variable argument declarations
-echo " "
-case "$prototype$i_stdarg" in
-$define$define)
-       echo "It appears we'll be able to prototype varargs functions." >&4
-       val="$define"
-       ;;
-*)
-       echo "Too bad... We won't be using prototyped varargs functions..." >&4
-       val="$undef"
-       ;;
-esac
-set vaproto
-eval $setvar
-
 : determine compiler compiler
 case "$yacc" in
 '')
@@ -23458,6 +23333,115 @@ set i_termio; eval $setvar
 val=$val2; set i_sgtty; eval $setvar
 val=$val3; set i_termios; eval $setvar
 
+: see if stdarg is available
+echo " "
+if $test `./findhdr stdarg.h`; then
+       echo "<stdarg.h> found." >&4
+       valstd="$define"
+else
+       echo "<stdarg.h> NOT found." >&4
+       valstd="$undef"
+fi
+
+: see if varargs is available
+echo " "
+if $test `./findhdr varargs.h`; then
+       echo "<varargs.h> found." >&4
+else
+       echo "<varargs.h> NOT found, but that's ok (I hope)." >&4
+fi
+
+: set up the varargs testing programs
+$cat > varargs.c <<EOP
+#ifdef I_STDARG
+#include <stdarg.h>
+#endif
+#ifdef I_VARARGS
+#include <varargs.h>
+#endif
+
+#ifdef I_STDARG
+int f(char *p, ...)
+#else
+int f(va_alist)
+va_dcl
+#endif
+{
+       va_list ap;
+#ifndef I_STDARG
+       char *p;
+#endif
+#ifdef I_STDARG
+       va_start(ap,p);
+#else
+       va_start(ap);
+       p = va_arg(ap, char *);
+#endif
+       va_end(ap);
+       return 0;
+}
+EOP
+$cat > varargs <<EOP
+$startsh
+if $cc -c $ccflags -D\$1 varargs.c >/dev/null 2>&1; then
+       echo "true"
+else
+       echo "false"
+fi
+$rm -f varargs$_o
+EOP
+chmod +x varargs
+
+: now check which varargs header should be included
+echo " "
+i_varhdr=''
+val=''
+case "$valstd" in
+"$define")
+       if `./varargs I_STDARG`; then
+               val='stdarg.h'
+       elif `./varargs I_VARARGS`; then
+               val='varargs.h'
+       fi
+       ;;
+*)
+       if `./varargs I_VARARGS`; then
+               val='varargs.h'
+       fi
+       ;;
+esac
+case "$val" in
+'')
+       echo " "
+       echo "*** WHOA THERE!!! ***" >&4
+       echo "    Your C compiler \"$cc\" doesn't seem to support stdarg or varargs!" >&4
+       case "$knowitall" in
+       '')
+       echo "    I'm giving up; maybe you can try again with a different compiler?" >&4
+               exit 1
+               ;;
+       esac
+echo "I could not find the definition for va_dcl... You have problems..." >&4
+       val="$undef"; set i_stdarg; eval $setvar
+       val="$undef"; set i_varargs; eval $setvar
+       ;;
+*)
+       set i_varhdr
+       eval $setvar
+       case "$i_varhdr" in
+       stdarg.h)
+               val="$define"; set i_stdarg; eval $setvar
+               val="$undef"; set i_varargs; eval $setvar
+               ;;
+       varargs.h)
+               val="$undef"; set i_stdarg; eval $setvar
+               val="$define"; set i_varargs; eval $setvar
+               ;;
+       esac
+       echo "We'll include <$i_varhdr> to get va_dcl definition." >&4;;
+esac
+$rm -f varargs*
+
 : see if stdbool is available
 : we want a real compile instead of Inhdr because some Solaris systems
 : have stdbool.h, but it can only be used if the compiler indicates it
@@ -25290,7 +25274,6 @@ uvsize='$uvsize'
 uvtype='$uvtype'
 uvuformat='$uvuformat'
 uvxformat='$uvxformat'
-vaproto='$vaproto'
 vendorarch='$vendorarch'
 vendorarchexp='$vendorarchexp'
 vendorbin='$vendorbin'
index 4f9fde3..d9ea739 100644 (file)
@@ -1161,7 +1161,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index b0cea40..a50ee8f 100644 (file)
@@ -1124,7 +1124,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index 74d18d6..4007c44 100644 (file)
@@ -5688,11 +5688,6 @@ uvXUformat (perlxvf.U):
        This variable contains the format string used for printing
        a Perl UV as an unsigned hexadecimal integer in uppercase ABCDEF.
 
-vaproto (vaproto.U):
-       This variable conditionally defines CAN_VAPROTO on systems supporting
-       prototype declaration of functions with a variable number of
-       arguments. See also prototype.
-
 vendorarch (vendorarch.U):
        This variable contains the value of the PERL_VENDORARCH symbol.
        It may have a ~ on the front.
index d268159..d8c7a4d 100644 (file)
@@ -1189,7 +1189,6 @@ uvsize='8'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='define'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index b2d85ed..6e11af8 100644 (file)
  */
 /*#define I_VFORK      / **/
 
-/* CAN_VAPROTO:
- *     This variable is defined on systems supporting prototype declaration
- *     of functions with a variable number of arguments.
- */
-/* _V:
- *     This macro is used to declare function parameters in prototypes for
- *     functions with a variable number of parameters. Use double parentheses.
- *     For example:
- *
- *             int printf _V((char *fmt, ...));
- *
- *     Remember to use the plain simple _() macro when declaring a function
- *     with no variable number of arguments, since it might be possible to
- *     have a non-effect _V() macro and still get prototypes via _().
- */
-#define CAN_VAPROTO    /**/
-#ifdef CAN_VAPROTO
-#define        _V(args) args
-#else
-#define        _V(args) ()
-#endif
-
 /* INTSIZE:
  *     This symbol contains the value of sizeof(int) so that the C
  *     preprocessor can make decisions based on it.
index 1a80585..9f79f4d 100755 (executable)
@@ -859,28 +859,6 @@ sed <<!GROK!THIS! >$CONFIG_H -e 's!^#undef\(.*/\)\*!/\*#define\1 \*!' -e 's!^#un
  */
 #define STDCHAR $stdchar       /**/
 
-/* CAN_VAPROTO:
- *     This variable is defined on systems supporting prototype declaration
- *     of functions with a variable number of arguments.
- */
-/* _V:
- *     This macro is used to declare function parameters in prototypes for
- *     functions with a variable number of parameters. Use double parentheses.
- *     For example:
- *
- *             int printf _V((char *fmt, ...));
- *
- *     Remember to use the plain simple _() macro when declaring a function
- *     with no variable number of arguments, since it might be possible to
- *     have a non-effect _V() macro and still get prototypes via _().
- */
-#$vaproto CAN_VAPROTO  /**/
-#ifdef CAN_VAPROTO
-#define        _V(args) args
-#else
-#define        _V(args) ()
-#endif
-
 /* INTSIZE:
  *     This symbol contains the value of sizeof(int) so that the C
  *     preprocessor can make decisions based on it.
index 9f3e8b9..9f46366 100644 (file)
@@ -6882,7 +6882,6 @@ $ WC "uvuformat='" + uvuformat + "'"
 $ WC "uvxformat='" + uvxformat + "'"
 $ WC "uvXUformat='" + uvXUformat + "'"
 $ WC "vendorarch='" + "'"
-$ WC "vaproto='define'"
 $ WC "vendorarchexp='" + "'"
 $ WC "vendorbin='" + "'"
 $ WC "vendorbinexp='" + "'"
index e291ea4..362193a 100644 (file)
@@ -1132,7 +1132,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index 31496b0..8cec7ff 100644 (file)
@@ -945,7 +945,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorlib=''
index d216c1e..ae678dd 100644 (file)
--- a/uconfig.h
+++ b/uconfig.h
  */
 #define STDCHAR char   /**/
 
-/* CAN_VAPROTO:
- *     This variable is defined on systems supporting prototype declaration
- *     of functions with a variable number of arguments.
- */
-/* _V:
- *     This macro is used to declare function parameters in prototypes for
- *     functions with a variable number of parameters. Use double parentheses.
- *     For example:
- *
- *             int printf _V((char *fmt, ...));
- *
- *     Remember to use the plain simple _() macro when declaring a function
- *     with no variable number of arguments, since it might be possible to
- *     have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO  / **/
-#ifdef CAN_VAPROTO
-#define        _V(args) args
-#else
-#define        _V(args) ()
-#endif
-
 /* INTSIZE:
  *     This symbol contains the value of sizeof(int) so that the C
  *     preprocessor can make decisions based on it.
 #endif
 
 /* Generated from:
- * 7f3bfc1e6859428578c0019ab544d62b4ee21c87767834fb8501279c5b475c34 config_h.SH
- * b8700c9bc8dced75e16f3f8e898323e77d2c3af9b5722e21942e864eb0a0502b uconfig.sh
+ * 3690e5bc441c5e9339d85fcb354568da9527990929543d72c73cf8ed150832fc config_h.SH
+ * 51a3d2a1b0cd9329ef5b65d93eca04f6f0769a86b8c16db672fda17ea1308fd3 uconfig.sh
  * ex: set ro: */
index 836e35e..c39cb81 100644 (file)
@@ -912,7 +912,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorlib_stem=''
index 798e8cb..45dde39 100644 (file)
@@ -913,7 +913,6 @@ uvsize='8'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorlib_stem=''
index fd52ac0..e974db9 100644 (file)
@@ -1114,7 +1114,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index 2385ca3..1303cdc 100644 (file)
@@ -1157,7 +1157,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index bcc779e..cba7b69 100644 (file)
@@ -1154,7 +1154,6 @@ uvsize='4'
 uvtype='unsigned long'
 uvuformat='"lu"'
 uvxformat='"lx"'
-vaproto='undef'
 vendorarch=''
 vendorarchexp=''
 vendorbin=''
index af12777..702bdb5 100644 (file)
  */
 #define STDCHAR char   /**/
 
-/* CAN_VAPROTO:
- *     This variable is defined on systems supporting prototype declaration
- *     of functions with a variable number of arguments.
- */
-/* _V:
- *     This macro is used to declare function parameters in prototypes for
- *     functions with a variable number of parameters. Use double parentheses.
- *     For example:
- *
- *             int printf _V((char *fmt, ...));
- *
- *     Remember to use the plain simple _() macro when declaring a function
- *     with no variable number of arguments, since it might be possible to
- *     have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO  / **/
-#ifdef CAN_VAPROTO
-#define        _V(args) args
-#else
-#define        _V(args) ()
-#endif
-
 /* INTSIZE:
  *     This symbol contains the value of sizeof(int) so that the C
  *     preprocessor can make decisions based on it.
index bf51e50..74f4947 100644 (file)
  */
 #define STDCHAR char   /**/
 
-/* CAN_VAPROTO:
- *     This variable is defined on systems supporting prototype declaration
- *     of functions with a variable number of arguments.
- */
-/* _V:
- *     This macro is used to declare function parameters in prototypes for
- *     functions with a variable number of parameters. Use double parentheses.
- *     For example:
- *
- *             int printf _V((char *fmt, ...));
- *
- *     Remember to use the plain simple _() macro when declaring a function
- *     with no variable number of arguments, since it might be possible to
- *     have a non-effect _V() macro and still get prototypes via _().
- */
-/*#define CAN_VAPROTO  / **/
-#ifdef CAN_VAPROTO
-#define        _V(args) args
-#else
-#define        _V(args) ()
-#endif
-
 /* INTSIZE:
  *     This symbol contains the value of sizeof(int) so that the C
  *     preprocessor can make decisions based on it.