2008-03-07 Jeff Johnston <jjohnstn@redhat.com>

* libc/include/getopt.h: Hide newlib extensions under
        the __need_getopt_newlib flag.
        * libc/stdlib/getopt.c: #define __need_getopt_newlib before including
        getopt.h.  Put entire code under !HAVE_GETOPT to support platforms
        with their own getopt implementation.
        * configure.host: Specify HAVE_GETOPT for x86-linux.
This commit is contained in:
Jeff Johnston 2008-03-07 18:16:35 +00:00
parent 0382d26727
commit c622842865
4 changed files with 39 additions and 17 deletions

View File

@ -1,3 +1,12 @@
2008-03-07 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/getopt.h: Hide newlib extensions under
the __need_getopt_newlib flag.
* libc/stdlib/getopt.c: #define __need_getopt_newlib before including
getopt.h. Put entire code under !HAVE_GETOPT to support platforms
with their own getopt implementation.
* configure.host: Specify HAVE_GETOPT for x86-linux.
2008-03-07 Jeff Johnston <jjohnstn@redhat.com> 2008-03-07 Jeff Johnston <jjohnstn@redhat.com>
* libc/include/sys/reent.h(_REENT_SMALL_CHECK_INIT): Specify * libc/include/sys/reent.h(_REENT_SMALL_CHECK_INIT): Specify

View File

@ -414,6 +414,7 @@ case "${host}" in
newlib_cflags="${newlib_cflags} -Wall" newlib_cflags="${newlib_cflags} -Wall"
newlib_cflags="${newlib_cflags} -D_I386MACH_ALLOW_HW_INTERRUPTS" newlib_cflags="${newlib_cflags} -D_I386MACH_ALLOW_HW_INTERRUPTS"
newlib_cflags="${newlib_cflags} -DHAVE_FCNTL" newlib_cflags="${newlib_cflags} -DHAVE_FCNTL"
newlib_cflags="${newlib_cflags} -DHAVE_GETOPT"
# --- Required when building a shared library ------------------------ # --- Required when building a shared library ------------------------
newlib_cflags="${newlib_cflags} -fPIC -D_I386MACH_NEED_SOTYPE_FUNCTION" newlib_cflags="${newlib_cflags} -fPIC -D_I386MACH_NEED_SOTYPE_FUNCTION"
# --- The three lines below are optional ------------------------------ # --- The three lines below are optional ------------------------------

View File

@ -82,6 +82,7 @@ Gregory Pietsch's current e-mail address:
gpietsch@comcast.net gpietsch@comcast.net
****************************************************************************/ ****************************************************************************/
/* This is a glibc-extension header file. */
#ifndef GETOPT_H #ifndef GETOPT_H
#define GETOPT_H #define GETOPT_H
@ -90,23 +91,9 @@ gpietsch@comcast.net
/* include files needed by this include file */ /* include files needed by this include file */
/* macros defined by this include file */ #define no_argument 0
#define NO_ARG 0 #define required_argument 1
#define REQUIRED_ARG 1 #define optional_argument 2
#define OPTIONAL_ARG 2
/* For glibc compatibility. */
#define no_argument NO_ARG
#define required_argument REQUIRED_ARG
#define optional_argument OPTIONAL_ARG
/* The GETOPT_DATA_INITIALIZER macro is used to initialize a statically-
allocated variable of type struct getopt_data. */
#define GETOPT_DATA_INITIALIZER {0,0,0,0,0}
/* These #defines are to keep the namespace clear... */
#define getopt_r __getopt_r
#define getopt_long_r __getopt_long_r
#define getopt_long_only_r __getopt_long_only_r
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
@ -130,6 +117,25 @@ extern "C"
}; };
/* While getopt.h is a glibc extension, the following are newlib extensions.
* They are optionally included via the __need_getopt_newlib flag. */
#ifdef __need_getopt_newlib
/* macros defined by this include file */
#define NO_ARG no_argument
#define REQUIRED_ARG required_argument
#define OPTIONAL_ARG optional_argument
/* The GETOPT_DATA_INITIALIZER macro is used to initialize a statically-
allocated variable of type struct getopt_data. */
#define GETOPT_DATA_INITIALIZER {0,0,0,0,0}
/* These #defines are to make accessing the reentrant functions easier. */
#define getopt_r __getopt_r
#define getopt_long_r __getopt_long_r
#define getopt_long_only_r __getopt_long_only_r
/* The getopt_data structure is for reentrancy. Its members are similar to /* The getopt_data structure is for reentrancy. Its members are similar to
the externally-defined variables. */ the externally-defined variables. */
typedef struct getopt_data typedef struct getopt_data
@ -138,6 +144,8 @@ extern "C"
int optind, opterr, optopt, optwhere; int optind, opterr, optopt, optwhere;
} getopt_data; } getopt_data;
#endif /* __need_getopt_newlib */
/* externally-defined variables */ /* externally-defined variables */
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;

View File

@ -83,11 +83,13 @@ Gregory Pietsch's current e-mail address:
gpietsch@comcast.net gpietsch@comcast.net
****************************************************************************/ ****************************************************************************/
#ifndef HAVE_GETOPT
/* include files */ /* include files */
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#define __need_getopt_newlib
#include <getopt.h> #include <getopt.h>
/* macros */ /* macros */
@ -472,4 +474,6 @@ __getopt_long_only_r (int argc, char *const argv[], const char *shortopts,
return getopt_internal (argc, argv, shortopts, longopts, longind, 1, data); return getopt_internal (argc, argv, shortopts, longopts, longind, 1, data);
} }
#endif /* !HAVE_GETOPT */
/* end of file GETOPT.C */ /* end of file GETOPT.C */