krb5 commit: Move the util/windows getopt to libkrb5support
Greg Hudson
ghudson at mit.edu
Thu Mar 31 11:43:26 EDT 2016
https://github.com/krb5/krb5/commit/8f9ade8ec50cde1176411085294f85ecfb2820a4
commit 8f9ade8ec50cde1176411085294f85ecfb2820a4
Author: Matt Rogers <mrogers at redhat.com>
Date: Wed Feb 24 16:06:53 2016 -0500
Move the util/windows getopt to libkrb5support
Relocate the internal getopt() and getopt_long() code to util/support,
and build conditionally. Put declarations in k5-platform.h. Adjust
Windows build directives for src/clients. Remove getopt-related #defines
from kinit.c, allowing kinit to use getopt_long() on all platforms.
[ghudson at mit.edu: fix some Windows build issues]
ticket: 8391
src/Makefile.in | 8 +-
src/clients/kcpytkt/Makefile.in | 2 +-
src/clients/kcpytkt/kcpytkt.c | 7 +-
src/clients/kdeltkt/Makefile.in | 2 +-
src/clients/kdeltkt/kdeltkt.c | 7 +-
src/clients/kdestroy/Makefile.in | 2 +-
src/clients/kdestroy/kdestroy.c | 6 -
src/clients/kinit/Makefile.in | 6 +-
src/clients/kinit/kinit.c | 37 +-----
src/clients/klist/Makefile.in | 2 +-
src/clients/klist/klist.c | 6 -
src/clients/kswitch/Makefile.in | 2 +-
src/clients/kvno/Makefile.in | 2 +-
src/clients/kvno/kvno.c | 4 -
src/configure.in | 20 +++
src/include/k5-platform.h | 39 ++++++
src/util/support/Makefile.in | 23 +++-
src/util/support/deps | 6 +
src/util/support/getopt.c | 149 ++++++++++++++++++++++
src/util/support/getopt_long.c | 232 ++++++++++++++++++++++++++++++++++
src/util/windows/Makefile.in | 6 +-
src/util/windows/getopt.c | 153 ----------------------
src/util/windows/getopt.h | 34 -----
src/util/windows/getopt_long.c | 237 -----------------------------------
src/windows/installer/wix/files.wxi | 2 -
src/windows/ms2mit/Makefile.in | 4 +-
src/windows/ms2mit/mit2ms.c | 4 +-
src/windows/ms2mit/ms2mit.c | 3 -
28 files changed, 486 insertions(+), 519 deletions(-)
diff --git a/src/Makefile.in b/src/Makefile.in
index 6c5e939..8b9e790 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -511,7 +511,6 @@ install-windows::
copy windows\kfwlogon\$(OUTPRE)*.exe "$(KRB_INSTALL_DIR)\bin\."
copy windows\kfwlogon\$(OUTPRE)*.dll "$(KRB_INSTALL_DIR)\bin\."
$(INSTALLDBGSYMS) windows\kfwlogon\$(OUTPRE)*.pdb "$(KRB_INSTALL_DIR)\bin\."
- copy util\windows\$(OUTPRE)*.lib $(KRB_INSTALL_DIR)\lib\."
copy util\wshelper\$(OUTPRE)$(DLIB).lib "$(KRB_INSTALL_DIR)\lib\."
copy util\wshelper\$(OUTPRE)$(DLIB).dll "$(KRB_INSTALL_DIR)\bin\."
$(INSTALLDBGSYMS) util\wshelper\$(OUTPRE)$(DLIB).pdb "$(KRB_INSTALL_DIR)\bin\."
@@ -635,11 +634,10 @@ BSDFILES = \
lib/krb5/krb/strftime.c \
lib/krb5/krb/strptime.c \
slave/kpropd_rpc.c \
+ util/support/getopt.c \
+ util/support/getopt_long.c \
util/support/mkstemp.c \
- util/support/strlcpy.c \
- util/windows/getopt.c \
- util/windows/getopt.h \
- util/windows/getopt_long.c
+ util/support/strlcpy.c
OTHEREXCLUDES = \
include/iprop.h \
diff --git a/src/clients/kcpytkt/Makefile.in b/src/clients/kcpytkt/Makefile.in
index ea73514..8b70201 100644
--- a/src/clients/kcpytkt/Makefile.in
+++ b/src/clients/kcpytkt/Makefile.in
@@ -18,7 +18,7 @@ all-mac::
kcpytkt: kcpytkt.o $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o $@ kcpytkt.o $(KRB5_BASE_LIBS)
-##WIN32##$(KCPYTKT): $(OUTPRE)kcpytkt.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KCPYTKT): $(OUTPRE)kcpytkt.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) /out:$@ $**
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/kcpytkt/kcpytkt.c b/src/clients/kcpytkt/kcpytkt.c
index 90b260b..47147cd 100644
--- a/src/clients/kcpytkt/kcpytkt.c
+++ b/src/clients/kcpytkt/kcpytkt.c
@@ -2,14 +2,9 @@
#include <stdio.h>
#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
#include <string.h>
#include <krb5.h>
-
-extern int optind;
-extern char *optarg;
+#include "k5-platform.h"
static char *prog;
diff --git a/src/clients/kdeltkt/Makefile.in b/src/clients/kdeltkt/Makefile.in
index e140b7b..529592a 100644
--- a/src/clients/kdeltkt/Makefile.in
+++ b/src/clients/kdeltkt/Makefile.in
@@ -18,7 +18,7 @@ all-mac::
kdeltkt: kdeltkt.o $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o $@ kdeltkt.o $(KRB5_BASE_LIBS)
-##WIN32##$(KDELTKT): $(OUTPRE)kdeltkt.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KDELTKT): $(OUTPRE)kdeltkt.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) /out:$@ $**
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/kdeltkt/kdeltkt.c b/src/clients/kdeltkt/kdeltkt.c
index 2f09c9d..9c7a549 100644
--- a/src/clients/kdeltkt/kdeltkt.c
+++ b/src/clients/kdeltkt/kdeltkt.c
@@ -2,14 +2,9 @@
#include <stdio.h>
#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
#include <string.h>
#include <krb5.h>
-
-extern int optind;
-extern char *optarg;
+#include "k5-platform.h"
static char *prog;
diff --git a/src/clients/kdestroy/Makefile.in b/src/clients/kdestroy/Makefile.in
index f299352..05f0a44 100644
--- a/src/clients/kdestroy/Makefile.in
+++ b/src/clients/kdestroy/Makefile.in
@@ -21,7 +21,7 @@ all-unix:: kdestroy
kdestroy: kdestroy.o $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o $@ kdestroy.o $(KRB5_BASE_LIBS)
-##WIN32##$(KDESTROY): $(OUTPRE)kdestroy.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KDESTROY): $(OUTPRE)kdestroy.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) -out:$@ $**
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/kdestroy/kdestroy.c b/src/clients/kdestroy/kdestroy.c
index 299838f..410d6cf 100644
--- a/src/clients/kdestroy/kdestroy.c
+++ b/src/clients/kdestroy/kdestroy.c
@@ -30,12 +30,6 @@
#include <locale.h>
#include <string.h>
#include <stdio.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef _WIN32
-#include <getopt.h>
-#endif
#ifdef __STDC__
#define BELL_CHAR '\a'
diff --git a/src/clients/kinit/Makefile.in b/src/clients/kinit/Makefile.in
index b1cd278..c7975c9 100644
--- a/src/clients/kinit/Makefile.in
+++ b/src/clients/kinit/Makefile.in
@@ -2,9 +2,7 @@ mydir=clients$(S)kinit
BUILDTOP=$(REL)..$(S)..
SRCS=kinit.c kinit_kdb.c
-
-##WIN32##LOCALINCLUDES=-I$(BUILDTOP)\util\windows
-##WIN32##DEFINES=-DGETOPT_LONG
+##WIN32##LOCALINCLUDES=-I$(BUILDTOP)\util\windows -I$(BUILDTOP)\util\support
##WIN32##VERSIONRC = $(BUILDTOP)\windows\version.rc
##WIN32##RCFLAGS=$(CPPFLAGS) -I$(top_srcdir) -D_WIN32 -DRES_ONLY
@@ -22,7 +20,7 @@ all-unix:: kinit
kinit: kinit.o kinit_kdb.o $(KRB5_BASE_DEPLIBS) $(KADMSRV_DEPLIBS)
$(CC_LINK) -o $@ kinit.o kinit_kdb.o $(KADMSRV_LIBS) $(KRB5_BASE_LIBS)
-##WIN32##$(KINIT): $(OUTPRE)kinit.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.lib $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KINIT): $(OUTPRE)kinit.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) -out:$@ $** advapi32.lib
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/kinit/kinit.c b/src/clients/kinit/kinit.c
index c442c53..3653960 100644
--- a/src/clients/kinit/kinit.c
+++ b/src/clients/kinit/kinit.c
@@ -26,7 +26,7 @@
#include "autoconf.h"
#include <k5-int.h>
-#include "k5-platform.h" /* for asprintf */
+#include "k5-platform.h" /* for asprintf and getopt */
#include <krb5.h>
#include "extern.h"
#include <locale.h>
@@ -36,23 +36,6 @@
#include <errno.h>
#include <com_err.h>
-#ifdef GETOPT_LONG
-#include <getopt.h>
-#else
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#ifdef sun
-/* SunOS4 unistd didn't declare these; okay to make unconditional? */
-extern int optind;
-extern char *optarg;
-#endif /* sun */
-#else
-extern int optind;
-extern char *optarg;
-extern int getopt();
-#endif /* HAVE_UNISTD_H */
-#endif /* GETOPT_LONG */
-
#ifndef _WIN32
#define GET_PROGNAME(x) (strrchr((x), '/') ? strrchr((x), '/')+1 : (x))
#else
@@ -140,7 +123,6 @@ struct k5_data
krb5_boolean switch_to_cache;
};
-#ifdef GETOPT_LONG
/* if struct[2] == NULL, then long_getopt acts as if the short flag
struct[3] was specified. If struct[2] != NULL, then struct[3] is
stored in *(struct[2]), the array index which was specified is
@@ -158,31 +140,19 @@ struct option long_options[] = {
{ NULL, 0, NULL, 0 }
};
-#define GETOPT(argc, argv, str) getopt_long(argc, argv, str, long_options, 0)
-#else
-#define GETOPT(argc, argv, str) getopt(argc, argv, str)
-#endif
+const char *shopts = "r:fpFPn54aAVl:s:c:kit:T:RS:vX:CEI:";
static void
usage()
{
#define USAGE_BREAK "\n\t"
-#ifdef GETOPT_LONG
#define USAGE_LONG_FORWARDABLE " | --forwardable | --noforwardable"
#define USAGE_LONG_PROXIABLE " | --proxiable | --noproxiable"
#define USAGE_LONG_ADDRESSES " | --addresses | --noaddresses"
#define USAGE_LONG_CANONICALIZE " | --canonicalize"
#define USAGE_LONG_ENTERPRISE " | --enterprise"
#define USAGE_BREAK_LONG USAGE_BREAK
-#else
-#define USAGE_LONG_FORWARDABLE ""
-#define USAGE_LONG_PROXIABLE ""
-#define USAGE_LONG_ADDRESSES ""
-#define USAGE_LONG_CANONICALIZE ""
-#define USAGE_LONG_ENTERPRISE ""
-#define USAGE_BREAK_LONG ""
-#endif
fprintf(stderr, "Usage: %s [-V] "
"[-l lifetime] [-s start_time] "
@@ -288,8 +258,7 @@ parse_options(argc, argv, opts)
int errflg = 0;
int i;
- while ((i = GETOPT(argc, argv,
- "r:fpFPn54aAVl:s:c:kit:T:RS:vX:CEI:")) != -1) {
+ while ((i = getopt_long(argc, argv, shopts, long_options, 0)) != -1) {
switch (i) {
case 'V':
opts->verbose = 1;
diff --git a/src/clients/klist/Makefile.in b/src/clients/klist/Makefile.in
index 3cdbb86..79255f2 100644
--- a/src/clients/klist/Makefile.in
+++ b/src/clients/klist/Makefile.in
@@ -21,7 +21,7 @@ all-unix:: klist
klist: klist.o $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o $@ klist.o $(KRB5_BASE_LIBS)
-##WIN32##$(KLIST): $(OUTPRE)klist.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.lib $(SLIB) $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KLIST): $(OUTPRE)klist.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) -out:$@ $** ws2_32.lib $(SCLIB)
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/klist/klist.c b/src/clients/klist/klist.c
index 0f6ca8a..f8183dd 100644
--- a/src/clients/klist/klist.c
+++ b/src/clients/klist/klist.c
@@ -29,12 +29,6 @@
#include <com_err.h>
#include <locale.h>
#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef _WIN32
-#include <getopt.h>
-#endif
#include <string.h>
#include <stdio.h>
#include <time.h>
diff --git a/src/clients/kswitch/Makefile.in b/src/clients/kswitch/Makefile.in
index b46fec6..e2a58dc 100644
--- a/src/clients/kswitch/Makefile.in
+++ b/src/clients/kswitch/Makefile.in
@@ -19,7 +19,7 @@ all-unix:: kswitch
kswitch: kswitch.o $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o $@ kswitch.o $(KRB5_BASE_LIBS)
-##WIN32##$(KSWITCH): $(OUTPRE)kswitch.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KSWITCH): $(OUTPRE)kswitch.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) -out:$@ $**
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/kvno/Makefile.in b/src/clients/kvno/Makefile.in
index 58519ae..6495080 100644
--- a/src/clients/kvno/Makefile.in
+++ b/src/clients/kvno/Makefile.in
@@ -22,7 +22,7 @@ all-unix:: kvno
kvno: kvno.o $(KRB5_BASE_DEPLIBS)
$(CC_LINK) -o $@ kvno.o $(KRB5_BASE_LIBS)
-##WIN32##$(KVNO): $(OUTPRE)kvno.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj $(KLIB) $(CLIB) $(EXERES)
+##WIN32##$(KVNO): $(OUTPRE)kvno.obj $(SLIB) $(KLIB) $(CLIB) $(EXERES)
##WIN32## link $(EXE_LINKOPTS) /out:$@ $**
##WIN32## $(_VC_MANIFEST_EMBED_EXE)
diff --git a/src/clients/kvno/kvno.c b/src/clients/kvno/kvno.c
index 377d4f3..80bee59 100644
--- a/src/clients/kvno/kvno.c
+++ b/src/clients/kvno/kvno.c
@@ -30,10 +30,6 @@
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
-#ifdef _WIN32
-#include <getopt.h>
-#endif
-
#include <string.h>
extern int optind;
diff --git a/src/configure.in b/src/configure.in
index 605b0c0..8216045 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -145,6 +145,26 @@ EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS krb5int_strlcpy krb5int_strlcat"])
AC_SUBST(STRLCPY_OBJ)
AC_SUBST(STRLCPY_ST_OBJ)
+AC_CHECK_FUNC(getopt,
+[GETOPT_ST_OBJ=
+GETOPT_OBJ=
+AC_DEFINE(HAVE_GETOPT, 1, [Define if system getopt should be used.])],
+[GETOPT_ST_OBJ='getopt.o'
+GETOPT_OBJ='$(OUTPRE)getopt.$(OBJEXT)'
+EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS k5_optind k5_optarg k5_opterr k5_optopt k5_getopt"])
+AC_SUBST(GETOPT_OBJ)
+AC_SUBST(GETOPT_ST_OBJ)
+
+AC_CHECK_FUNC(getopt_long,
+[GETOPT_LONG_ST_OBJ=
+GETOPT_LONG_OBJ=
+AC_DEFINE(HAVE_GETOPT_LONG, 1, [Define if system getopt_long should be used.])],
+[GETOPT_LONG_ST_OBJ='getopt_long.o'
+GETOPT_LONG_OBJ='$(OUTPRE)getopt_long.$(OBJEXT)'
+EXTRA_SUPPORT_SYMS="$EXTRA_SUPPORT_SYMS k5_getopt_long"])
+AC_SUBST(GETOPT_LONG_OBJ)
+AC_SUBST(GETOPT_LONG_ST_OBJ)
+
AC_CHECK_FUNC(fnmatch,
[FNMATCH_ST_OBJ=
FNMATCH_OBJ=],
diff --git a/src/include/k5-platform.h b/src/include/k5-platform.h
index cff7dc3..994f463 100644
--- a/src/include/k5-platform.h
+++ b/src/include/k5-platform.h
@@ -63,6 +63,10 @@
#include <fnmatch.h>
#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
#ifdef _WIN32
#define CAN_COPY_VA_LIST
#endif
@@ -1060,4 +1064,39 @@ int k5_path_isabs(const char *path);
#endif
#define N_(s) s
+#if !defined(HAVE_GETOPT) || !defined(HAVE_UNISTD_H)
+extern int k5_opterr;
+extern int k5_optind;
+extern int k5_optopt;
+extern char *k5_optarg;
+#define opterr k5_opterr
+#define optind k5_optind
+#define optopt k5_optopt
+#define optarg k5_optarg
+
+extern int k5_getopt(int nargc, char * const nargv[], const char *ostr);
+#define getopt k5_getopt
+#endif /* HAVE_GETOPT */
+
+#ifdef HAVE_GETOPT_LONG
+#include <getopt.h>
+#else
+
+struct option
+{
+ const char *name;
+ int has_arg;
+ int *flag;
+ int val;
+};
+
+#define no_argument 0
+#define required_argument 1
+#define optional_argument 2
+
+extern int k5_getopt_long(int nargc, char **nargv, char *options,
+ struct option *long_options, int *index);
+#define getopt_long k5_getopt_long
+#endif /* HAVE_GETOPT_LONG */
+
#endif /* K5_PLATFORM_H */
diff --git a/src/util/support/Makefile.in b/src/util/support/Makefile.in
index 5d38b03..d5da898 100644
--- a/src/util/support/Makefile.in
+++ b/src/util/support/Makefile.in
@@ -43,6 +43,16 @@ PRINTF_OBJ= @PRINTF_OBJ@
##DOS##PRINTF_ST_OBJ= printf.o
##DOS##PRINTF_OBJ= $(OUTPRE)printf.$(OBJEXT)
+GETOPT_ST_OBJ= @GETOPT_ST_OBJ@
+GETOPT_OBJ= @GETOPT_OBJ@
+##DOS##GETOPT_ST_OBJ= getopt.o
+##DOS##GETOPT_OBJ= $(OUTPRE)getopt.$(OBJEXT)
+
+GETOPT_LONG_ST_OBJ= @GETOPT_LONG_ST_OBJ@
+GETOPT_LONG_OBJ= @GETOPT_LONG_OBJ@
+##DOS##GETOPT_LONG_ST_OBJ= getopt_long.o
+##DOS##GETOPT_LONG_OBJ= $(OUTPRE)getopt_long.$(OBJEXT)
+
IPC_ST_OBJ=
IPC_OBJ=
##DOS##IPC_ST_OBJ= ipc_stream.o
@@ -78,7 +88,9 @@ STLIBOBJS= \
$(STRLCPY_ST_OBJ) \
$(FNMATCH_ST_OBJ) \
$(PRINTF_ST_OBJ) \
- $(MKSTEMP_ST_OBJ)
+ $(MKSTEMP_ST_OBJ) \
+ $(GETOPT_ST_OBJ) \
+ $(GETOPT_LONG_ST_OBJ)
LIBOBJS= \
$(OUTPRE)threads.$(OBJEXT) \
@@ -101,7 +113,9 @@ LIBOBJS= \
$(STRLCPY_OBJ) \
$(FNMATCH_OBJ) \
$(PRINTF_OBJ) \
- $(MKSTEMP_OBJ)
+ $(MKSTEMP_OBJ) \
+ $(GETOPT_OBJ) \
+ $(GETOPT_LONG_OBJ)
SRCS=\
$(srcdir)/threads.c \
@@ -128,7 +142,9 @@ SRCS=\
$(srcdir)/json.c \
$(srcdir)/bcmp.c \
$(srcdir)/strerror_r.c \
- $(srcdir)/t_utf8.c
+ $(srcdir)/t_utf8.c \
+ $(srcdir)/getopt.c \
+ $(srcdir)/getopt_long.c
SHLIB_EXPDEPS =
# Add -lm if dumping thread stats, for sqrt.
@@ -156,6 +172,7 @@ SHLIB_EXPORT_FILE=libkrb5support.exports
EXTRA_SUPPORT_SYMS= @EXTRA_SUPPORT_SYMS@
##DOS##EXTRA_SUPPORT_SYMS= krb5int_mkstemp krb5int_strlcpy krb5int_strlcat \
+##DOS## k5_optind k5_optarg k5_opterr k5_optopt k5_getopt k5_getopt_long \
##DOS## krb5int_vasprintf krb5int_asprintf krb5int_gettimeofday $(IPC_SYMS)
##DOS##!if 0
diff --git a/src/util/support/deps b/src/util/support/deps
index b27c97d..4dff014 100644
--- a/src/util/support/deps
+++ b/src/util/support/deps
@@ -84,3 +84,9 @@ strerror_r.so strerror_r.po $(OUTPRE)strerror_r.$(OBJEXT): \
t_utf8.so t_utf8.po $(OUTPRE)t_utf8.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
$(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-thread.h \
$(top_srcdir)/include/k5-utf8.h t_utf8.c
+getopt.so getopt.po $(OUTPRE)getopt.$(OBJEXT): $(BUILDTOP)/include/autoconf.h \
+ $(top_srcdir)/include/k5-platform.h $(top_srcdir)/include/k5-thread.h \
+ getopt.c
+getopt_long.so getopt_long.po $(OUTPRE)getopt_long.$(OBJEXT): \
+ $(BUILDTOP)/include/autoconf.h $(top_srcdir)/include/k5-platform.h \
+ $(top_srcdir)/include/k5-thread.h getopt_long.c
diff --git a/src/util/windows/getopt.c b/src/util/support/getopt.c
similarity index 94%
rename from src/util/windows/getopt.c
rename to src/util/support/getopt.c
index 4f9f062..44cda68 100644
--- a/src/util/windows/getopt.c
+++ b/src/util/support/getopt.c
@@ -34,6 +34,7 @@
* SUCH DAMAGE.
*/
+#if !defined(HAVE_GETOPT) || !defined(HAVE_UNISTD_H)
#if 0
static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
#endif
@@ -42,19 +43,14 @@ static char sccsid[] = "@(#)getopt.c 8.3 (Berkeley) 4/27/95";
#include <errno.h>
#include <stdio.h>
#include <string.h>
+#include "k5-platform.h"
#define __P(x) x
#define _DIAGASSERT(x) assert(x)
-#ifdef __weak_alias
-__weak_alias(getopt,_getopt);
-#endif
-
-
int opterr = 1, /* if error message should be printed */
optind = 1, /* index into parent argv vector */
- optopt, /* character checked for validity */
- optreset; /* reset getopt */
+ optopt; /* character checked for validity */
char *optarg; /* argument associated with option */
static char * _progname __P((char *));
@@ -98,8 +94,7 @@ getopt(nargc, nargv, ostr)
_DIAGASSERT(nargv != NULL);
_DIAGASSERT(ostr != NULL);
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
+ if (!*place) { /* update scanning pointer */
if (optind >= nargc || *(place = nargv[optind]) != '-') {
place = EMSG;
return (-1);
@@ -151,3 +146,4 @@ getopt(nargc, nargv, ostr)
}
return (optopt); /* dump back option letter */
}
+#endif /* !defined(HAVE_GETOPT) || !defined(HAVE_UNISTD_H) */
diff --git a/src/util/windows/getopt_long.c b/src/util/support/getopt_long.c
similarity index 94%
rename from src/util/windows/getopt_long.c
rename to src/util/support/getopt_long.c
index 5002804..1b508a1 100644
--- a/src/util/windows/getopt_long.c
+++ b/src/util/support/getopt_long.c
@@ -31,18 +31,13 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
+#ifndef HAVE_GETOPT_LONG
#include <assert.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include "getopt.h"
-
-extern int opterr; /* if error message should be printed */
-extern int optind; /* index into parent argv vector */
-extern int optopt; /* character checked for validity */
-extern int optreset; /* reset getopt */
-extern char *optarg; /* argument associated with option */
+#include "k5-platform.h"
#define __P(x) x
#define _DIAGASSERT(x) assert(x)
@@ -86,8 +81,7 @@ getopt_internal(nargc, nargv, ostr)
_DIAGASSERT(nargv != NULL);
_DIAGASSERT(ostr != NULL);
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
+ if (!*place) { /* update scanning pointer */
if (optind >= nargc || *(place = nargv[optind]) != '-') {
place = EMSG;
return (-1);
@@ -235,3 +229,4 @@ getopt_long(nargc, nargv, options, long_options, index)
}
return(retval);
}
+#endif /* not HAVE_GETOPT_LONG */
diff --git a/src/util/windows/Makefile.in b/src/util/windows/Makefile.in
index f857c46..65b323c 100644
--- a/src/util/windows/Makefile.in
+++ b/src/util/windows/Makefile.in
@@ -1,15 +1,11 @@
BUILDTOP = ..\..
-all-windows:: $(OUTPRE)libecho.exe $(OUTPRE)getopt.lib
+all-windows:: $(OUTPRE)libecho.exe
$(OUTPRE)libecho.exe: $(OUTPRE)libecho.obj
link -out:$@ $** $(SCLIB)
$(_VC_MANIFEST_EMBED_EXE)
-
-$(OUTPRE)getopt.lib: $(OUTPRE)getopt.obj $(OUTPRE)getopt_long.obj
- lib -out:$@ $**
-
install-windows::
clean-windows::
diff --git a/src/util/windows/getopt.h b/src/util/windows/getopt.h
deleted file mode 100644
index 8832dbc..0000000
--- a/src/util/windows/getopt.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* -*- mode: c; c-file-style: "bsd"; indent-tabs-mode: t -*- */
-#ifndef __GETOPT_H__
-#define __GETOPT_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-extern int opterr; /* if error message should be printed */
-extern int optind; /* index into parent argv vector */
-extern int optopt; /* character checked for validity */
-extern int optreset; /* reset getopt */
-extern char *optarg; /* argument associated with option */
-
-struct option
-{
- const char *name;
- int has_arg;
- int *flag;
- int val;
-};
-
-#define no_argument 0
-#define required_argument 1
-#define optional_argument 2
-
-int getopt(int, char**, char*);
-int getopt_long(int, char**, char*, struct option*, int*);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* __GETOPT_H__ */
diff --git a/src/windows/installer/wix/files.wxi b/src/windows/installer/wix/files.wxi
index ee18251..9194caf 100644
--- a/src/windows/installer/wix/files.wxi
+++ b/src/windows/installer/wix/files.wxi
@@ -418,7 +418,6 @@
<Directory Id="dirlib_i386" Name="i386" FileSource="$(var.LibDir)">
<Component Win64="$(var.Win64)" Id="cmp_dirlib_i386" Guid="CFEE3ED4-92D4-49e1-BB78-8BCBC60C3E57" DiskId="1">
<File Id="fil_comerr32_lib" Name="comerr32.lib" />
- <File Id="fil_getopt_32_lib" Name="getopt.lib" />
<File Id="fil_gssapi32_lib" Name="gssapi32.lib" />
<File Id="fil_krb5_32_lib" Name="krb5_32.lib" KeyPath="yes" />
<File Id="fil_krbcc32_lib" Name="krbcc32.lib" />
@@ -432,7 +431,6 @@
<Directory Id="dirlib_amd64" Name="amd64" FileSource="$(var.LibDir)">
<Component Win64="$(var.Win64)" Id="cmp_dirlib_amd64" Guid="F9A54201-FFD6-4a45-B021-276D9F6C40A2" DiskId="1">
<File Id="fil_comerr64_lib" Name="comerr64.lib" />
- <File Id="fil_getopt_64_lib" Name="getopt.lib" />
<File Id="fil_gssapi64_lib" Name="gssapi64.lib" />
<File Id="fil_krb5_64_lib" Name="krb5_64.lib" KeyPath="yes" />
<File Id="fil_krbcc64_lib" Name="krbcc64.lib" />
diff --git a/src/windows/ms2mit/Makefile.in b/src/windows/ms2mit/Makefile.in
index 59d5e7f..9af69ce 100644
--- a/src/windows/ms2mit/Makefile.in
+++ b/src/windows/ms2mit/Makefile.in
@@ -24,11 +24,11 @@ $(MIT2MSRES): $(VERSIONRC)
all-windows:: $(MS2MIT) $(MIT2MS)
$(MS2MIT): $(OUTPRE)ms2mit.obj $(MS2MITRES)
- link $(EXE_LINKOPTS) -out:$@ $(OUTPRE)ms2mit.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj user32.lib advapi32.lib $(KLIB) $(CLIB) $(MS2MITRES)
+ link $(EXE_LINKOPTS) -out:$@ $(OUTPRE)ms2mit.obj $(SLIB) user32.lib advapi32.lib $(KLIB) $(CLIB) $(MS2MITRES)
$(_VC_MANIFEST_EMBED_EXE)
$(MIT2MS): $(OUTPRE)mit2ms.obj $(MIT2MSRES)
- link $(EXE_LINKOPTS) -out:$@ $(OUTPRE)mit2ms.obj $(BUILDTOP)\util\windows\$(OUTPRE)getopt.obj user32.lib advapi32.lib $(KLIB) $(CLIB) $(MIT2MSRES)
+ link $(EXE_LINKOPTS) -out:$@ $(OUTPRE)mit2ms.obj $(SLIB) user32.lib advapi32.lib $(KLIB) $(CLIB) $(MIT2MSRES)
$(_VC_MANIFEST_EMBED_EXE)
install::
diff --git a/src/windows/ms2mit/mit2ms.c b/src/windows/ms2mit/mit2ms.c
index 5dc057e..24153ce 100644
--- a/src/windows/ms2mit/mit2ms.c
+++ b/src/windows/ms2mit/mit2ms.c
@@ -26,9 +26,7 @@
#include "krb5.h"
#include <stdio.h>
#include <string.h>
-
-extern int optind;
-extern char *optarg;
+#include "k5-platform.h"
static char *prog;
diff --git a/src/windows/ms2mit/ms2mit.c b/src/windows/ms2mit/ms2mit.c
index ebc9abd..c332503 100644
--- a/src/windows/ms2mit/ms2mit.c
+++ b/src/windows/ms2mit/ms2mit.c
@@ -29,9 +29,6 @@
#include <string.h>
#include <time.h>
-extern int optind;
-extern char *optarg;
-
static char *prog;
static void
More information about the cvs-krb5
mailing list