mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-03 09:13:20 +03:00 
			
		
		
		
	Use our own getopt() on OpenBSD.
Recent OpenBSD (at least 5.9 and up) has a version of getopt(3) that will not cope with the "-:" spec we use to accept double-dash options in postgres.c and postmaster.c. Admittedly, that's a hack because POSIX only requires getopt() to allow alphanumeric option characters. I have no desire to find another way, however, so let's just do what we were already doing on Solaris: force use of our own src/port/getopt.c implementation. In passing, improve some of the comments around said implementation. Per buildfarm and local testing. Back-patch to all supported branches. Discussion: https://postgr.es/m/30197.1547835700@sss.pgh.pa.us
This commit is contained in:
		
							
								
								
									
										6
									
								
								configure
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								configure
									
									
									
									
										vendored
									
									
								
							@@ -13199,9 +13199,9 @@ esac
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Solaris' getopt() doesn't do what we want for long options, so always use
 | 
					# On OpenBSD and Solaris, getopt() doesn't do what we want for long options
 | 
				
			||||||
# our version on that platform.
 | 
					# (i.e., allow '-' as a flag character), so use our version on those platforms.
 | 
				
			||||||
if test "$PORTNAME" = "solaris"; then
 | 
					if test "$PORTNAME" = "openbsd" -o "$PORTNAME" = "solaris"; then
 | 
				
			||||||
  case " $LIBOBJS " in
 | 
					  case " $LIBOBJS " in
 | 
				
			||||||
  *" getopt.$ac_objext "* ) ;;
 | 
					  *" getopt.$ac_objext "* ) ;;
 | 
				
			||||||
  *) LIBOBJS="$LIBOBJS getopt.$ac_objext"
 | 
					  *) LIBOBJS="$LIBOBJS getopt.$ac_objext"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1587,9 +1587,9 @@ else
 | 
				
			|||||||
  AC_LIBOBJ(getopt_long)
 | 
					  AC_LIBOBJ(getopt_long)
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Solaris' getopt() doesn't do what we want for long options, so always use
 | 
					# On OpenBSD and Solaris, getopt() doesn't do what we want for long options
 | 
				
			||||||
# our version on that platform.
 | 
					# (i.e., allow '-' as a flag character), so use our version on those platforms.
 | 
				
			||||||
if test "$PORTNAME" = "solaris"; then
 | 
					if test "$PORTNAME" = "openbsd" -o "$PORTNAME" = "solaris"; then
 | 
				
			||||||
  AC_LIBOBJ(getopt)
 | 
					  AC_LIBOBJ(getopt)
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,13 @@
 | 
				
			|||||||
/*
 | 
					/*
 | 
				
			||||||
 | 
					 * Postgres files that use getopt(3) always include this file.
 | 
				
			||||||
 | 
					 * We must cope with three different scenarios:
 | 
				
			||||||
 | 
					 * 1. We're using the platform's getopt(), and we should just import the
 | 
				
			||||||
 | 
					 *    appropriate declarations.
 | 
				
			||||||
 | 
					 * 2. The platform lacks getopt(), and we must declare everything.
 | 
				
			||||||
 | 
					 * 3. The platform has getopt(), but we're not using it because we don't
 | 
				
			||||||
 | 
					 *    like its behavior.  The declarations we make here must be compatible
 | 
				
			||||||
 | 
					 *    with both the platform's getopt() and our src/port/getopt.c.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * Portions Copyright (c) 1987, 1993, 1994
 | 
					 * Portions Copyright (c) 1987, 1993, 1994
 | 
				
			||||||
 * The Regents of the University of California.  All rights reserved.
 | 
					 * The Regents of the University of California.  All rights reserved.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
@@ -39,6 +48,7 @@ extern int	optopt;
 | 
				
			|||||||
extern int	optreset;
 | 
					extern int	optreset;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Provide getopt() declaration if the platform doesn't have it */
 | 
				
			||||||
#ifndef HAVE_GETOPT
 | 
					#ifndef HAVE_GETOPT
 | 
				
			||||||
extern int	getopt(int nargc, char *const * nargv, const char *ostr);
 | 
					extern int	getopt(int nargc, char *const * nargv, const char *ostr);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,5 @@
 | 
				
			|||||||
/* src/port/getopt.c */
 | 
					/* src/port/getopt.c */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* This is used by psql under Win32 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright (c) 1987, 1993, 1994
 | 
					 * Copyright (c) 1987, 1993, 1994
 | 
				
			||||||
 *	The Regents of the University of California.  All rights reserved.
 | 
					 *	The Regents of the University of California.  All rights reserved.
 | 
				
			||||||
@@ -40,10 +38,11 @@ static char sccsid[] = "@(#)getopt.c	8.3 (Berkeley) 4/27/95";
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * On some versions of Solaris, opterr and friends are defined in core libc
 | 
					 * On OpenBSD and some versions of Solaris, opterr and friends are defined in
 | 
				
			||||||
 * rather than in a separate getopt module.  Define these variables only
 | 
					 * core libc rather than in a separate getopt module.  Define these variables
 | 
				
			||||||
 * if configure found they aren't there by default.  (We assume that testing
 | 
					 * only if configure found they aren't there by default; otherwise, this
 | 
				
			||||||
 * opterr is sufficient for all of these.)
 | 
					 * module and its callers will just use libc's variables.  (We assume that
 | 
				
			||||||
 | 
					 * testing opterr is sufficient for all of these.)
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#ifndef HAVE_INT_OPTERR
 | 
					#ifndef HAVE_INT_OPTERR
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user