AIX lacks getopt_long

Michael Felt michael at felt.demon.nl
Mon Jun 12 10:07:19 EEST 2017


  * As a test I added the 'struct option' to the file needing it, and
    this confirmed the need for getopt_long() which AIX libc.a does not
    include.
  * p.s. I ran this dry-run from the "root" directory, perhaps it would
    be better from the ./src directory

--- src/x071-test/src/doveadm/doveadm-cmd.c     2017-06-12 06:10:53 +0000
+++ src/AIX-port/src/doveadm/doveadm-cmd.c      2017-06-10 12:24:53 +0000
@@ -13,23 +13,9 @@
  /*
   * getopt.h is non-POSIX
   * on AIX getopt() is declared in unistd.h
- * however, unistd.h does not include the 'struct option'
   */
  #ifndef _AIX
  #include <getopt.h>
-#else
-/*
- * copied from Debian 3.2.0 /usr/include/getopt.h
- */
-struct option
-{
-  const char *name;
-  /* has_arg can't be an enum because some compilers complain about
-     type mismatches in all the code that assumes it is an int.  */
-  int has_arg;
-  int *flag;
-  int val;
-};
  #endif

  static struct doveadm_cmd *doveadm_commands[] = {

  * I searched for a possible solution - and I am hoping gnulib will be
    something you would consider. I downloaded the latest gnulib using
    'git clone git://git.savannah.gnu.org/gnulib.git'
  * This is the --dry-run output.
  * As there maybe "license" issues, this is not something I am going to
    do "on my own" - in the package they speak of GPL and LGPL - but I
    know nothing about licensing issues.


michael at x071:[/data/prj/aixtools/github/dovecot/src/x071-test]/data/prj/aixtools/github/dovecot/gnulib/gnulib-tool 
--dry-run --import getopt-posix
Module list with included dependencies (indented):
     absolute-header
     extensions
     extern-inline
   getopt-posix
     gettext-h
     include_next
     snippet/arg-nonnull
     snippet/c++defs
     snippet/warn-on-use
     ssize_t
     stddef
     sys_types
     unistd
File list:
   lib/arg-nonnull.h
   lib/c++defs.h
   lib/getopt-cdefs.in.h
   lib/getopt-core.h
   lib/getopt-ext.h
   lib/getopt-pfx-core.h
   lib/getopt-pfx-ext.h
   lib/getopt.c
   lib/getopt.in.h
   lib/getopt1.c
   lib/getopt_int.h
   lib/gettext.h
   lib/stddef.in.h
   lib/sys_types.in.h
   lib/unistd.c
   lib/unistd.in.h
   lib/warn-on-use.h
   m4/00gnulib.m4
   m4/absolute-header.m4
   m4/extensions.m4
   m4/extern-inline.m4
   m4/getopt.m4
   m4/gnulib-common.m4
   m4/include_next.m4
   m4/off_t.m4
   m4/onceonly.m4
   m4/ssize_t.m4
   m4/stddef_h.m4
   m4/sys_types_h.m4
   m4/unistd_h.m4
   m4/warn-on-use.m4
   m4/wchar_t.m4
Create directory ./lib
Create directory ./lib
Copy file lib/arg-nonnull.h
Copy file lib/c++defs.h
Copy file lib/getopt-cdefs.in.h
Copy file lib/getopt-core.h
Copy file lib/getopt-ext.h
Copy file lib/getopt-pfx-core.h
Copy file lib/getopt-pfx-ext.h
Copy file lib/getopt.c
Copy file lib/getopt.in.h
Copy file lib/getopt1.c
Copy file lib/getopt_int.h
Copy file lib/gettext.h
Copy file lib/stddef.in.h
Copy file lib/sys_types.in.h
Copy file lib/unistd.c
Copy file lib/unistd.in.h
Copy file lib/warn-on-use.h
Copy file m4/00gnulib.m4
Copy file m4/absolute-header.m4
Copy file m4/extensions.m4
Copy file m4/extern-inline.m4
Copy file m4/getopt.m4
Copy file m4/gnulib-common.m4
Copy file m4/gnulib-tool.m4
Copy file m4/include_next.m4
Copy file m4/off_t.m4
Copy file m4/onceonly.m4
Copy file m4/ssize_t.m4
Copy file m4/stddef_h.m4
Copy file m4/sys_types_h.m4
Copy file m4/unistd_h.m4
Copy file m4/warn-on-use.m4
Copy file m4/wchar_t.m4
Create lib/Makefile.am
Create m4/gnulib-cache.m4
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the specification of how gnulib-tool is used.
# It acts as a cache: It is written and read by gnulib-tool.
# In projects that use version control, this file is meant to be put under
# version control, like the configure.ac and various Makefile.am files.


# Specification in the form of a command-line invocation:
#   gnulib-tool --import --lib=libgnu --source-base=lib --m4-base=m4 
--doc-base=doc --tests-base=tests --aux-dir=. 
--no-conditional-dependencies --no-libtool --macro-prefix=gl getopt-posix

# Specification in the form of a few gnulib-tool.m4 macro invocations:
gl_LOCAL_DIR([])
gl_MODULES([
   getopt-posix
])
gl_AVOID([])
gl_SOURCE_BASE([lib])
gl_M4_BASE([m4])
gl_PO_BASE([])
gl_DOC_BASE([doc])
gl_TESTS_BASE([tests])
gl_LIB([libgnu])
gl_MAKEFILE_NAME([])
gl_MACRO_PREFIX([gl])
gl_PO_DOMAIN([])
gl_WITNESS_C_MACRO([])
Create m4/gnulib-comp.m4
# DO NOT EDIT! GENERATED AUTOMATICALLY!
# Copyright (C) 2002-2017 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This file is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this file.  If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception to the GNU General Public License,
# this file may be distributed as part of a program that
# contains a configuration script generated by Autoconf, under
# the same distribution terms as the rest of that program.
#
# Generated by gnulib-tool.
#
# This file represents the compiled summary of the specification in
# gnulib-cache.m4. It lists the computed macro invocations that need
# to be invoked from configure.ac.
# In projects that use version control, this file can be treated like
# other built files.


# This macro should be invoked from ./configure.ac, in the section
# "Checks for programs", right after AC_PROG_CC, and certainly before
# any checks for libraries, header files, types and library functions.
AC_DEFUN([gl_EARLY],
[
   m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
   m4_pattern_allow([^gl_ES$])dnl a valid locale name
   m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
   m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable

   # Pre-early section.
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   AC_REQUIRE([gl_PROG_AR_RANLIB])

   # Code from module absolute-header:
   # Code from module extensions:
   # Code from module extern-inline:
   # Code from module getopt-posix:
   # Code from module gettext-h:
   # Code from module include_next:
   # Code from module snippet/arg-nonnull:
   # Code from module snippet/c++defs:
   # Code from module snippet/warn-on-use:
   # Code from module ssize_t:
   # Code from module stddef:
   # Code from module sys_types:
   # Code from module unistd:
])

# This macro should be invoked from ./configure.ac, in the section
# "Check for header files, types and library functions".
AC_DEFUN([gl_INIT],
[
   AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
   gl_cond_libtool=false
   gl_libdeps=
   gl_ltlibdeps=
   gl_m4_base='m4'
   m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
   m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
   m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
   m4_pushdef([gl_LIBSOURCES_LIST], [])
   m4_pushdef([gl_LIBSOURCES_DIR], [])
   gl_COMMON
   gl_source_base='lib'
   AC_REQUIRE([gl_EXTERN_INLINE])
   gl_FUNC_GETOPT_POSIX
   if test $REPLACE_GETOPT = 1; then
     AC_LIBOBJ([getopt])
     AC_LIBOBJ([getopt1])
     dnl Arrange for unistd.h to include getopt.h.
     GNULIB_GL_UNISTD_H_GETOPT=1
   fi
   AC_SUBST([GNULIB_GL_UNISTD_H_GETOPT])
   AC_SUBST([LIBINTL])
   AC_SUBST([LTLIBINTL])
   gt_TYPE_SSIZE_T
   gl_STDDEF_H
   gl_SYS_TYPES_H
   AC_PROG_MKDIR_P
   gl_UNISTD_H
   # End of code from modules
   m4_ifval(gl_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
       for gl_file in ]gl_LIBSOURCES_LIST[ ; do
         if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
           echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
           exit 1
         fi
       done])dnl
       m4_if(m4_sysval, [0], [],
         [AC_FATAL([expected source file, required through 
AC_LIBSOURCES, not found])])
   ])
   m4_popdef([gl_LIBSOURCES_DIR])
   m4_popdef([gl_LIBSOURCES_LIST])
   m4_popdef([AC_LIBSOURCES])
   m4_popdef([AC_REPLACE_FUNCS])
   m4_popdef([AC_LIBOBJ])
   AC_CONFIG_COMMANDS_PRE([
     gl_libobjs=
     gl_ltlibobjs=
     if test -n "$gl_LIBOBJS"; then
       # Remove the extension.
       sed_drop_objext='s/\.o$//;s/\.obj$//'
       for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e 
"$sed_drop_objext" | sort | uniq`; do
         gl_libobjs="$gl_libobjs $i.$ac_objext"
         gl_ltlibobjs="$gl_ltlibobjs $i.lo"
       done
     fi
     AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
     AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
   ])
   gltests_libdeps=
   gltests_ltlibdeps=
   m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
   m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
   m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
   m4_pushdef([gltests_LIBSOURCES_LIST], [])
   m4_pushdef([gltests_LIBSOURCES_DIR], [])
   gl_COMMON
   gl_source_base='tests'
changequote(,)dnl
   gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr 
abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 
's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
changequote([, ])dnl
   AC_SUBST([gltests_WITNESS])
   gl_module_indicator_condition=$gltests_WITNESS
   m4_pushdef([gl_MODULE_INDICATOR_CONDITION], 
[$gl_module_indicator_condition])
   m4_popdef([gl_MODULE_INDICATOR_CONDITION])
   m4_ifval(gltests_LIBSOURCES_LIST, [
     m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
       for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
         if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
           echo "missing file 
]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
           exit 1
         fi
       done])dnl
       m4_if(m4_sysval, [0], [],
         [AC_FATAL([expected source file, required through 
AC_LIBSOURCES, not found])])
   ])
   m4_popdef([gltests_LIBSOURCES_DIR])
   m4_popdef([gltests_LIBSOURCES_LIST])
   m4_popdef([AC_LIBSOURCES])
   m4_popdef([AC_REPLACE_FUNCS])
   m4_popdef([AC_LIBOBJ])
   AC_CONFIG_COMMANDS_PRE([
     gltests_libobjs=
     gltests_ltlibobjs=
     if test -n "$gltests_LIBOBJS"; then
       # Remove the extension.
       sed_drop_objext='s/\.o$//;s/\.obj$//'
       for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e 
"$sed_drop_objext" | sort | uniq`; do
         gltests_libobjs="$gltests_libobjs $i.$ac_objext"
         gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
       done
     fi
     AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
     AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
   ])
   LIBGNU_LIBDEPS="$gl_libdeps"
   AC_SUBST([LIBGNU_LIBDEPS])
   LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
   AC_SUBST([LIBGNU_LTLIBDEPS])
])

# Like AC_LIBOBJ, except that the module name goes
# into gl_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gl_LIBOBJ], [
   AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
   gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
])

# Like AC_REPLACE_FUNCS, except that the module name goes
# into gl_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gl_REPLACE_FUNCS], [
   m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
   AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
])

# Like AC_LIBSOURCES, except the directory where the source file is
# expected is derived from the gnulib-tool parameterization,
# and alloca is special cased (for the alloca-opt module).
# We could also entirely rely on EXTRA_lib..._SOURCES.
AC_DEFUN([gl_LIBSOURCES], [
   m4_foreach([_gl_NAME], [$1], [
     m4_if(_gl_NAME, [alloca.c], [], [
       m4_define([gl_LIBSOURCES_DIR], [lib])
       m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
     ])
   ])
])

# Like AC_LIBOBJ, except that the module name goes
# into gltests_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gltests_LIBOBJ], [
   AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
   gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
])

# Like AC_REPLACE_FUNCS, except that the module name goes
# into gltests_LIBOBJS instead of into LIBOBJS.
AC_DEFUN([gltests_REPLACE_FUNCS], [
   m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
   AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
])

# Like AC_LIBSOURCES, except the directory where the source file is
# expected is derived from the gnulib-tool parameterization,
# and alloca is special cased (for the alloca-opt module).
# We could also entirely rely on EXTRA_lib..._SOURCES.
AC_DEFUN([gltests_LIBSOURCES], [
   m4_foreach([_gl_NAME], [$1], [
     m4_if(_gl_NAME, [alloca.c], [], [
       m4_define([gltests_LIBSOURCES_DIR], [tests])
       m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
     ])
   ])
])

# This macro records the list of files which have been installed by
# gnulib-tool and may be removed by future gnulib-tool invocations.
AC_DEFUN([gl_FILE_LIST], [
   lib/arg-nonnull.h
   lib/c++defs.h
   lib/getopt-cdefs.in.h
   lib/getopt-core.h
   lib/getopt-ext.h
   lib/getopt-pfx-core.h
   lib/getopt-pfx-ext.h
   lib/getopt.c
   lib/getopt.in.h
   lib/getopt1.c
   lib/getopt_int.h
   lib/gettext.h
   lib/stddef.in.h
   lib/sys_types.in.h
   lib/unistd.c
   lib/unistd.in.h
   lib/warn-on-use.h
   m4/00gnulib.m4
   m4/absolute-header.m4
   m4/extensions.m4
   m4/extern-inline.m4
   m4/getopt.m4
   m4/gnulib-common.m4
   m4/include_next.m4
   m4/off_t.m4
   m4/onceonly.m4
   m4/ssize_t.m4
   m4/stddef_h.m4
   m4/sys_types_h.m4
   m4/unistd_h.m4
   m4/warn-on-use.m4
   m4/wchar_t.m4
])
Create ./lib/.gitignore
Create ./m4/.gitignore
Finished.

You may need to add #include directives for the following .h files.
   #include <unistd.h>

You may need to use the following Makefile variables when linking.
Use them in <program>_LDADD when linking a program, or
in <library>_a_LDFLAGS or <library>_la_LDFLAGS when linking a library.
   $(LTLIBINTL) when linking with libtool, $(LIBINTL) otherwise

Don't forget to
   - add "lib/Makefile" to AC_CONFIG_FILES in ./configure.ac,
   - mention "lib" in SUBDIRS in Makefile.am,
   - mention "-I m4" in ACLOCAL_AMFLAGS in Makefile.am,
   - mention "m4/gnulib-cache.m4" in EXTRA_DIST in Makefile.am,
   - invoke gl_EARLY in ./configure.ac, right after AC_PROG_CC,
   - invoke gl_INIT in ./configure.ac.
michael at x071:[/data/prj/aixtools/github/dovecot/src/x071-test]



More information about the dovecot mailing list