xref: /freebsd/contrib/ntp/sntp/libopts/m4/libopts.m4 (revision a466cc55373fc3cf86837f09da729535b57e69a1)
1*a466cc55SCy Schubert
2ea906c41SOllivier Robertdnl do always before generated macros:
3ea906c41SOllivier Robertdnl
4ea906c41SOllivier RobertAC_DEFUN([INVOKE_LIBOPTS_MACROS_FIRST],[
52b15cb3dSCy Schubert  AC_REQUIRE([AC_HEADER_STDC])
6ea906c41SOllivier Robert  AC_HEADER_DIRENT
7ea906c41SOllivier Robert
8ea906c41SOllivier Robert  # =================
9ea906c41SOllivier Robert  # AC_CHECK_HEADERS
10ea906c41SOllivier Robert  # =================
112b15cb3dSCy Schubert  AC_CHECK_HEADERS([ \
122b15cb3dSCy Schubert      sys/mman.h    sys/param.h   sys/poll.h    sys/procset.h \
132b15cb3dSCy Schubert      sys/select.h  sys/socket.h  sys/stropts.h sys/time.h \
142b15cb3dSCy Schubert      sys/un.h      sys/wait.h    dlfcn.h       errno.h \
152b15cb3dSCy Schubert      fcntl.h       libgen.h      libintl.h     memory.h \
162b15cb3dSCy Schubert      netinet/in.h  setjmp.h      stdbool.h     sysexits.h \
172b15cb3dSCy Schubert      unistd.h      utime.h])
182b15cb3dSCy Schubert
192b15cb3dSCy Schubert  AC_CHECK_HEADERS([stdarg.h     varargs.h],
202b15cb3dSCy Schubert      [lo_have_arg_hdr=true;break],
212b15cb3dSCy Schubert      [lo_have_arg_hdr=false])
222b15cb3dSCy Schubert
232b15cb3dSCy Schubert  AC_CHECK_HEADERS([string.h     strings.h],
242b15cb3dSCy Schubert      [lo_have_str_hdr=true;break],
252b15cb3dSCy Schubert      [lo_have_str_hdr=false])
262b15cb3dSCy Schubert
272b15cb3dSCy Schubert  AC_CHECK_HEADERS([limits.h     sys/limits.h  values.h],
282b15cb3dSCy Schubert      [lo_have_lim_hdr=true;break],
292b15cb3dSCy Schubert      [lo_have_lim_hdr=false])
302b15cb3dSCy Schubert
312b15cb3dSCy Schubert  AC_CHECK_HEADERS([inttypes.h   stdint.h],
322b15cb3dSCy Schubert      [lo_have_typ_hdr=true;break],
332b15cb3dSCy Schubert      [lo_have_typ_hdr=false])
342b15cb3dSCy Schubert  gl_STDNORETURN_H
352b15cb3dSCy Schubert
362b15cb3dSCy Schubert  # ----------------------------------------------------------------------
372b15cb3dSCy Schubert  # check for various programs used during the build.
382b15cb3dSCy Schubert  # On OS/X, "wchar.h" needs "runetype.h" to work properly.
392b15cb3dSCy Schubert  # ----------------------------------------------------------------------
402b15cb3dSCy Schubert  AC_CHECK_HEADERS([runetype.h wchar.h], [], [],[
412b15cb3dSCy Schubert  AC_INCLUDES_DEFAULT
422b15cb3dSCy Schubert  #if HAVE_RUNETYPE_H
432b15cb3dSCy Schubert  # include <runetype.h>
442b15cb3dSCy Schubert  #endif
452b15cb3dSCy Schubert  ])
462b15cb3dSCy Schubert
472b15cb3dSCy Schubert  AC_ARG_ENABLE([nls],
482b15cb3dSCy Schubert  AS_HELP_STRING([--disable-nls],[disable nls support in libopts]))
492b15cb3dSCy Schubert  AS_IF([test "x$enable_nls" != "xno" && \
502b15cb3dSCy Schubert  test "X${ac_cv_header_libintl_h}" = Xyes], [
512b15cb3dSCy Schubert  AC_DEFINE([ENABLE_NLS],[1],[nls support in libopts])])
52ea906c41SOllivier Robert
53ea906c41SOllivier Robert  # --------------------------------------------
54ea906c41SOllivier Robert  # Verify certain entries from AC_CHECK_HEADERS
55ea906c41SOllivier Robert  # --------------------------------------------
562b15cb3dSCy Schubert  [${lo_have_arg_hdr} || \
572b15cb3dSCy Schubert    ]AC_MSG_ERROR([you must have stdarg.h or varargs.h on your system])[
582b15cb3dSCy Schubert
592b15cb3dSCy Schubert  ${lo_have_str_hdr} || \
602b15cb3dSCy Schubert    ]AC_MSG_ERROR([you must have string.h or strings.h on your system])[
612b15cb3dSCy Schubert
622b15cb3dSCy Schubert  ${lo_have_lim_hdr} || \
632b15cb3dSCy Schubert    ]AC_MSG_ERROR(
642b15cb3dSCy Schubert      [you must have one of limits.h, sys/limits.h or values.h])[
652b15cb3dSCy Schubert
662b15cb3dSCy Schubert  ${lo_have_typ_hdr} || \
672b15cb3dSCy Schubert    ]AC_MSG_ERROR([you must have inttypes.h or stdint.h on your system])[
682b15cb3dSCy Schubert
692b15cb3dSCy Schubert  for f in sys_types sys_param sys_stat string errno stdlib memory setjmp
702b15cb3dSCy Schubert  do eval as_ac_var=\${ac_cv_header_${f}_h}
712b15cb3dSCy Schubert     test "X${as_ac_var}" = Xyes || {
722b15cb3dSCy Schubert       ]AC_MSG_ERROR([you must have ${f}.h on your system])[
732b15cb3dSCy Schubert     }
74ea906c41SOllivier Robert  done
752b15cb3dSCy Schubert  test "X${ac_cv_header_inttypes_h-no}" = Xyes || \
762b15cb3dSCy Schubert    echo '#include <stdint.h>' > inttypes.h]
77ea906c41SOllivier Robert
782b15cb3dSCy Schubert  # ----------------------------------------------------------------------
792b15cb3dSCy Schubert  # Checks for typedefs
802b15cb3dSCy Schubert  # ----------------------------------------------------------------------
812b15cb3dSCy Schubert  AC_CHECK_TYPES(wchar_t)
822b15cb3dSCy Schubert  AC_CHECK_TYPES(wint_t, [], [], [
832b15cb3dSCy Schubert    AC_INCLUDES_DEFAULT
842b15cb3dSCy Schubert    #if HAVE_RUNETYPE_H
852b15cb3dSCy Schubert    # include <runetype.h>
862b15cb3dSCy Schubert    #endif
872b15cb3dSCy Schubert    #if HAVE_WCHAR_H
882b15cb3dSCy Schubert    # include <wchar.h>
892b15cb3dSCy Schubert    #endif
902b15cb3dSCy Schubert  ])
91ea906c41SOllivier Robert  AC_CHECK_TYPES([int8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t,
922b15cb3dSCy Schubert  intptr_t, uintptr_t, uint_t, pid_t, size_t, ptrdiff_t])
932b15cb3dSCy Schubert  AC_CHECK_SIZEOF(char *, 8)
94ea906c41SOllivier Robert  AC_CHECK_SIZEOF(int,    4)
952b15cb3dSCy Schubert  AC_CHECK_SIZEOF(long,   8)
96ea906c41SOllivier Robert  AC_CHECK_SIZEOF(short,  2)
97ea906c41SOllivier Robert
982b15cb3dSCy Schubert  # ------------
992b15cb3dSCy Schubert  # AC_CHECK_LIB
1002b15cb3dSCy Schubert  # ------------
101ea906c41SOllivier Robert  AC_CHECK_LIB(gen, pathfind)
1022b15cb3dSCy Schubert  AC_CHECK_LIB(intl,gettext)
103ea906c41SOllivier Robert  AC_FUNC_VPRINTF
1042b15cb3dSCy Schubert  AC_FUNC_FORK
1052b15cb3dSCy Schubert  AC_CHECK_FUNCS([mmap canonicalize_file_name snprintf strdup strchr \
1062b15cb3dSCy Schubert                 strrchr strsignal fchmod fstat chmod])
1072b15cb3dSCy Schubert  AC_PROG_SED
1082b15cb3dSCy Schubert  [while :
1092b15cb3dSCy Schubert  do
110*a466cc55SCy Schubert      test -x "$POSIX_SHELL" && break
1112b15cb3dSCy Schubert      POSIX_SHELL=`which bash`
1122b15cb3dSCy Schubert      test -x "$POSIX_SHELL" && break
1132b15cb3dSCy Schubert      POSIX_SHELL=`which dash`
1142b15cb3dSCy Schubert      test -x "$POSIX_SHELL" && break
1152b15cb3dSCy Schubert      POSIX_SHELL=/usr/xpg4/bin/sh
1162b15cb3dSCy Schubert      test -x "$POSIX_SHELL" && break
1172b15cb3dSCy Schubert      POSIX_SHELL=`/bin/sh -c '
1182b15cb3dSCy Schubert          exec 2>/dev/null
1192b15cb3dSCy Schubert          if ! true ; then exit 1 ; fi
1202b15cb3dSCy Schubert          echo /bin/sh'`
1212b15cb3dSCy Schubert      test -x "$POSIX_SHELL" && break
1222b15cb3dSCy Schubert      ]AC_MSG_ERROR([cannot locate a working POSIX shell])[
1232b15cb3dSCy Schubert  done]
1242b15cb3dSCy Schubert  AC_DEFINE_UNQUOTED([POSIX_SHELL], ["${POSIX_SHELL}"],
1252b15cb3dSCy Schubert           [define to a working POSIX compliant shell])
1262b15cb3dSCy Schubert  AC_SUBST([POSIX_SHELL])
1272b15cb3dSCy Schubert])
128ea906c41SOllivier Robert
129ea906c41SOllivier Robertdnl
130ea906c41SOllivier Robertdnl @synopsis  INVOKE_LIBOPTS_MACROS
131ea906c41SOllivier Robertdnl
132ea906c41SOllivier Robertdnl  This macro will invoke the AutoConf macros specified in libopts.def
133ea906c41SOllivier Robertdnl  that have not been disabled with "omit-invocation".
134ea906c41SOllivier Robertdnl
135ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_WITH_REGEX_HEADER],[
136ea906c41SOllivier Robert  AC_ARG_WITH([regex-header],
1372b15cb3dSCy Schubert    AS_HELP_STRING([--with-regex-header], [a reg expr header is specified]),
138ea906c41SOllivier Robert    [libopts_cv_with_regex_header=${with_regex_header}],
139ea906c41SOllivier Robert    AC_CACHE_CHECK([whether a reg expr header is specified], libopts_cv_with_regex_header,
140ea906c41SOllivier Robert      libopts_cv_with_regex_header=no)
141ea906c41SOllivier Robert  ) # end of AC_ARG_WITH
142ea906c41SOllivier Robert  if test "X${libopts_cv_with_regex_header}" != Xno
143ea906c41SOllivier Robert  then
144ea906c41SOllivier Robert    AC_DEFINE_UNQUOTED([REGEX_HEADER],[<${libopts_cv_with_regex_header}>])
145ea906c41SOllivier Robert  else
146ea906c41SOllivier Robert    AC_DEFINE([REGEX_HEADER],[<regex.h>],[name of regex header file])
147ea906c41SOllivier Robert  fi
148ea906c41SOllivier Robert
149ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_WITH_REGEX_HEADER
150ea906c41SOllivier Robert
151ea906c41SOllivier Robert
152ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_WITHLIB_REGEX],[
153ea906c41SOllivier Robert  AC_ARG_WITH([libregex],
1542b15cb3dSCy Schubert    AS_HELP_STRING([--with-libregex], [libregex installation prefix]),
155ea906c41SOllivier Robert    [libopts_cv_with_libregex_root=${with_libregex}],
156ea906c41SOllivier Robert    AC_CACHE_CHECK([whether with-libregex was specified], libopts_cv_with_libregex_root,
157ea906c41SOllivier Robert      libopts_cv_with_libregex_root=no)
158ea906c41SOllivier Robert  ) # end of AC_ARG_WITH libregex
159ea906c41SOllivier Robert
1602b15cb3dSCy Schubert  if test "${with_libregex+set}" = set && \
1612b15cb3dSCy Schubert     test "X${withval}" = Xno
162ea906c41SOllivier Robert  then ## disabled by request
163ea906c41SOllivier Robert    libopts_cv_with_libregex_root=no
164ea906c41SOllivier Robert    libopts_cv_with_libregex_cflags=no
165ea906c41SOllivier Robert    libopts_cv_with_libregex_libs=no
166ea906c41SOllivier Robert  else
167ea906c41SOllivier Robert
168ea906c41SOllivier Robert  AC_ARG_WITH([libregex-cflags],
1692b15cb3dSCy Schubert    AS_HELP_STRING([--with-libregex-cflags], [libregex compile flags]),
1702b15cb3dSCy Schubert    [libopts_cv_with_libregex_cflags=${with_libregex_cflags}],
171ea906c41SOllivier Robert    AC_CACHE_CHECK([whether with-libregex-cflags was specified], libopts_cv_with_libregex_cflags,
172ea906c41SOllivier Robert      libopts_cv_with_libregex_cflags=no)
173ea906c41SOllivier Robert  ) # end of AC_ARG_WITH libregex-cflags
174ea906c41SOllivier Robert
175ea906c41SOllivier Robert  AC_ARG_WITH([libregex-libs],
1762b15cb3dSCy Schubert    AS_HELP_STRING([--with-libregex-libs], [libregex link command arguments]),
1772b15cb3dSCy Schubert    [libopts_cv_with_libregex_libs=${with_libregex_libs}],
178ea906c41SOllivier Robert    AC_CACHE_CHECK([whether with-libregex-libs was specified], libopts_cv_with_libregex_libs,
179ea906c41SOllivier Robert      libopts_cv_with_libregex_libs=no)
180ea906c41SOllivier Robert  ) # end of AC_ARG_WITH libregex-libs
181ea906c41SOllivier Robert
182ea906c41SOllivier Robert  case "X${libopts_cv_with_libregex_cflags}" in
183ea906c41SOllivier Robert  Xyes|Xno|X )
184ea906c41SOllivier Robert    case "X${libopts_cv_with_libregex_root}" in
185ea906c41SOllivier Robert    Xyes|Xno|X ) libopts_cv_with_libregex_cflags=no ;;
186ea906c41SOllivier Robert    * ) libopts_cv_with_libregex_cflags=-I${libopts_cv_with_libregex_root}/include ;;
187ea906c41SOllivier Robert    esac
188ea906c41SOllivier Robert  esac
189ea906c41SOllivier Robert  case "X${libopts_cv_with_libregex_libs}" in
190ea906c41SOllivier Robert  Xyes|Xno|X )
191ea906c41SOllivier Robert    case "X${libopts_cv_with_libregex_root}" in
192ea906c41SOllivier Robert    Xyes|Xno|X ) libopts_cv_with_libregex_libs=no ;;
193ea906c41SOllivier Robert    * )        libopts_cv_with_libregex_libs="-L${libopts_cv_with_libregex_root}/lib -lregex" ;;
194ea906c41SOllivier Robert    esac
195ea906c41SOllivier Robert  esac
196ea906c41SOllivier Robert  libopts_save_CPPFLAGS="${CPPFLAGS}"
197ea906c41SOllivier Robert  libopts_save_LIBS="${LIBS}"
198ea906c41SOllivier Robert  case "X${libopts_cv_with_libregex_cflags}" in
199ea906c41SOllivier Robert  Xyes|Xno|X )
200ea906c41SOllivier Robert    libopts_cv_with_libregex_cflags="" ;;
201ea906c41SOllivier Robert  * ) CPPFLAGS="${CPPFLAGS} ${libopts_cv_with_libregex_cflags}" ;;
202ea906c41SOllivier Robert  esac
203ea906c41SOllivier Robert  case "X${libopts_cv_with_libregex_libs}" in
204ea906c41SOllivier Robert  Xyes|Xno|X )
205ea906c41SOllivier Robert    libopts_cv_with_libregex_libs="" ;;
206ea906c41SOllivier Robert  * )
207ea906c41SOllivier Robert    LIBS="${LIBS} ${libopts_cv_with_libregex_libs}" ;;
208ea906c41SOllivier Robert  esac
209ea906c41SOllivier Robert  LIBREGEX_CFLAGS=""
210ea906c41SOllivier Robert  LIBREGEX_LIBS=""
211ea906c41SOllivier Robert  AC_MSG_CHECKING([whether libregex functions properly])
212ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_with_libregex],[
2132d4e511cSCy Schubert  AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include <stdio.h>
214ea906c41SOllivier Robert@%:@include <stdlib.h>
215ea906c41SOllivier Robert@%:@include <sys/types.h>
216ea906c41SOllivier Robert@%:@include REGEX_HEADER
217ea906c41SOllivier Robertstatic regex_t re;
218ea906c41SOllivier Robertvoid comp_re(char const * pzPat) {
219ea906c41SOllivier Robert  int res = regcomp( &re, pzPat, REG_EXTENDED|REG_ICASE|REG_NEWLINE );
220ea906c41SOllivier Robert  if (res == 0) return;
221ea906c41SOllivier Robert  exit( res ); }
222ea906c41SOllivier Robertint main() {
223ea906c41SOllivier Robert  regmatch_t m@<:@2@:>@;
224ea906c41SOllivier Robert  comp_re( "^.*\@S|@"   );
225ea906c41SOllivier Robert  comp_re( "()|no.*" );
226ea906c41SOllivier Robert  comp_re( "."       );
227ea906c41SOllivier Robert  if (regexec( &re, "X", 2, m, 0 ) != 0)  return 1;
228ea906c41SOllivier Robert  if ((m@<:@0@:>@.rm_so != 0) || (m@<:@0@:>@.rm_eo != 1)) {
229ea906c41SOllivier Robert    fputs( "error: regex -->.<-- did not match\n", stderr );
230ea906c41SOllivier Robert    return 1;
231ea906c41SOllivier Robert  }
2322d4e511cSCy Schubert  return 0; }] )],
233ea906c41SOllivier Robert    [libopts_cv_with_libregex=yes], [libopts_cv_with_libregex=no],
2342b15cb3dSCy Schubert    [libopts_cv_with_libregex=no]) # end of AC_RUN_IFELSE
235ea906c41SOllivier Robert  ]) # end of AC_CACHE_VAL for libopts_cv_with_libregex
2362b15cb3dSCy Schubert  fi ## disabled by request
237ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_with_libregex}])
238ea906c41SOllivier Robert  if test "X${libopts_cv_with_libregex}" != Xno
239ea906c41SOllivier Robert  then
240ea906c41SOllivier Robert    AC_DEFINE([WITH_LIBREGEX],[1],
241ea906c41SOllivier Robert        [Define this if a working libregex can be found])
242ea906c41SOllivier Robert  else
243ea906c41SOllivier Robert    CPPFLAGS="${libopts_save_CPPFLAGS}"
244ea906c41SOllivier Robert    LIBS="${libopts_save_LIBS}"
2452b15cb3dSCy Schubert    libopts_cv_with_libregex_root=no
2462b15cb3dSCy Schubertlibopts_cv_with_libregex_cflags=no
2472b15cb3dSCy Schubertlibopts_cv_with_libregex_libs=no
2482b15cb3dSCy Schubertlibopts_cv_with_libregex=no
249ea906c41SOllivier Robert  fi
250ea906c41SOllivier Robert
251ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_WITHLIB_REGEX
252ea906c41SOllivier Robert
253ea906c41SOllivier Robert
254ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_RUN_PATHFIND],[
255ea906c41SOllivier Robert  AC_MSG_CHECKING([whether pathfind(3) works])
256ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_run_pathfind],[
2572d4e511cSCy Schubert  AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include <string.h>
258ea906c41SOllivier Robert@%:@include <stdlib.h>
259ea906c41SOllivier Robertint main (int argc, char ** argv) {
260ea906c41SOllivier Robert   char * pz = pathfind( getenv( "PATH" ), "sh", "x" );
261ea906c41SOllivier Robert   return (pz == 0) ? 1 : 0;
2622d4e511cSCy Schubert}] )],
263ea906c41SOllivier Robert    [libopts_cv_run_pathfind=yes],[libopts_cv_run_pathfind=no],[libopts_cv_run_pathfind=no]
2642b15cb3dSCy Schubert  ) # end of RUN_IFELSE
265ea906c41SOllivier Robert  ]) # end of AC_CACHE_VAL for libopts_cv_run_pathfind
266ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_run_pathfind}])
267ea906c41SOllivier Robert  if test "X${libopts_cv_run_pathfind}" != Xno
268ea906c41SOllivier Robert  then
269ea906c41SOllivier Robert    AC_DEFINE([HAVE_PATHFIND],[1],
270ea906c41SOllivier Robert        [Define this if pathfind(3) works])
271ea906c41SOllivier Robert  fi
272ea906c41SOllivier Robert
273ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_RUN_PATHFIND
274ea906c41SOllivier Robert
275ea906c41SOllivier Robert
276ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_TEST_DEV_ZERO],[
277ea906c41SOllivier Robert  AC_MSG_CHECKING([whether /dev/zero is readable device])
278ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_test_dev_zero],[
279ea906c41SOllivier Robert    libopts_cv_test_dev_zero=`exec 2> /dev/null
280ea906c41SOllivier Robertdzero=\`ls -lL /dev/zero | egrep ^c......r\`
281ea906c41SOllivier Roberttest -z "${dzero}" && exit 1
282ea906c41SOllivier Robertecho ${dzero}`
2832b15cb3dSCy Schubert    if test $? -ne 0 || test -z "$libopts_cv_test_dev_zero"
284ea906c41SOllivier Robert    then libopts_cv_test_dev_zero=no
285ea906c41SOllivier Robert    fi
286ea906c41SOllivier Robert  ]) # end of CACHE_VAL of libopts_cv_test_dev_zero
287ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_test_dev_zero}])
288ea906c41SOllivier Robert  if test "X${libopts_cv_test_dev_zero}" != Xno
289ea906c41SOllivier Robert  then
290ea906c41SOllivier Robert    AC_DEFINE([HAVE_DEV_ZERO],[1],
291ea906c41SOllivier Robert        [Define this if /dev/zero is readable device])
292ea906c41SOllivier Robert  fi
293ea906c41SOllivier Robert
294ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_TEST_DEV_ZERO
295ea906c41SOllivier Robert
296ea906c41SOllivier Robert
297ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_RUN_REALPATH],[
298ea906c41SOllivier Robert  AC_MSG_CHECKING([whether we have a functional realpath(3C)])
299ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_run_realpath],[
3002d4e511cSCy Schubert  AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include <limits.h>
301ea906c41SOllivier Robert@%:@include <stdlib.h>
302ea906c41SOllivier Robertint main (int argc, char ** argv) {
303ea906c41SOllivier Robert@%:@ifndef PATH_MAX
304ea906c41SOllivier Robertchoke me!!
305ea906c41SOllivier Robert@%:@else
306ea906c41SOllivier Robert   char zPath@<:@PATH_MAX+1@:>@;
307ea906c41SOllivier Robert@%:@endif
308ea906c41SOllivier Robert   char *pz = realpath(argv@<:@0@:>@, zPath);
309ea906c41SOllivier Robert   return (pz == zPath) ? 0 : 1;
3102d4e511cSCy Schubert}] )],
311ea906c41SOllivier Robert    [libopts_cv_run_realpath=yes],[libopts_cv_run_realpath=no],[libopts_cv_run_realpath=no]
3122b15cb3dSCy Schubert  ) # end of RUN_IFELSE
313ea906c41SOllivier Robert  ]) # end of AC_CACHE_VAL for libopts_cv_run_realpath
314ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_run_realpath}])
315ea906c41SOllivier Robert  if test "X${libopts_cv_run_realpath}" != Xno
316ea906c41SOllivier Robert  then
317ea906c41SOllivier Robert    AC_DEFINE([HAVE_REALPATH],[1],
318ea906c41SOllivier Robert        [Define this if we have a functional realpath(3C)])
319ea906c41SOllivier Robert  fi
320ea906c41SOllivier Robert
321ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_RUN_REALPATH
322ea906c41SOllivier Robert
323ea906c41SOllivier Robert
324ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_RUN_STRFTIME],[
325ea906c41SOllivier Robert  AC_MSG_CHECKING([whether strftime() works])
326ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_run_strftime],[
3272d4e511cSCy Schubert  AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include <time.h>
328ea906c41SOllivier Robert@%:@include <string.h>
329ea906c41SOllivier Robertchar t_buf@<:@ 64 @:>@;
330ea906c41SOllivier Robertint main() {
331ea906c41SOllivier Robert  static char const z@<:@@:>@ = "Thursday Aug 28 240";
332ea906c41SOllivier Robert  struct tm tm;
333ea906c41SOllivier Robert  tm.tm_sec   = 36;  /* seconds after the minute @<:@0, 61@:>@  */
334ea906c41SOllivier Robert  tm.tm_min   = 44;  /* minutes after the hour @<:@0, 59@:>@ */
335ea906c41SOllivier Robert  tm.tm_hour  = 12;  /* hour since midnight @<:@0, 23@:>@ */
336ea906c41SOllivier Robert  tm.tm_mday  = 28;  /* day of the month @<:@1, 31@:>@ */
337ea906c41SOllivier Robert  tm.tm_mon   =  7;  /* months since January @<:@0, 11@:>@ */
338ea906c41SOllivier Robert  tm.tm_year  = 86;  /* years since 1900 */
339ea906c41SOllivier Robert  tm.tm_wday  =  4;  /* days since Sunday @<:@0, 6@:>@ */
340ea906c41SOllivier Robert  tm.tm_yday  = 239; /* days since January 1 @<:@0, 365@:>@ */
341ea906c41SOllivier Robert  tm.tm_isdst =  1;  /* flag for daylight savings time */
342ea906c41SOllivier Robert  strftime( t_buf, sizeof( t_buf ), "%A %b %d %j", &tm );
3432d4e511cSCy Schubert  return (strcmp( t_buf, z ) != 0); }] )],
344ea906c41SOllivier Robert    [libopts_cv_run_strftime=yes],[libopts_cv_run_strftime=no],[libopts_cv_run_strftime=no]
3452b15cb3dSCy Schubert  ) # end of RUN_IFELSE
346ea906c41SOllivier Robert  ]) # end of AC_CACHE_VAL for libopts_cv_run_strftime
347ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_run_strftime}])
348ea906c41SOllivier Robert  if test "X${libopts_cv_run_strftime}" != Xno
349ea906c41SOllivier Robert  then
350ea906c41SOllivier Robert    AC_DEFINE([HAVE_STRFTIME],[1],
351ea906c41SOllivier Robert        [Define this if strftime() works])
352ea906c41SOllivier Robert  fi
353ea906c41SOllivier Robert
354ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_RUN_STRFTIME
355ea906c41SOllivier Robert
356ea906c41SOllivier Robert
357ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_RUN_FOPEN_BINARY],[
358ea906c41SOllivier Robert  AC_MSG_CHECKING([whether fopen accepts "b" mode])
359ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_run_fopen_binary],[
3602d4e511cSCy Schubert  AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include <stdio.h>
361ea906c41SOllivier Robertint main (int argc, char ** argv) {
362ea906c41SOllivier RobertFILE * fp = fopen("conftest.@S|@ac_ext", "rb");
3632d4e511cSCy Schubertreturn (fp == NULL) ? 1 : fclose(fp); }] )],
364ea906c41SOllivier Robert    [libopts_cv_run_fopen_binary=yes],[libopts_cv_run_fopen_binary=no],[libopts_cv_run_fopen_binary=no]
3652b15cb3dSCy Schubert  ) # end of RUN_IFELSE
366ea906c41SOllivier Robert  ]) # end of AC_CACHE_VAL for libopts_cv_run_fopen_binary
367ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_run_fopen_binary}])
368ea906c41SOllivier Robert  if test "X${libopts_cv_run_fopen_binary}" != Xno
369ea906c41SOllivier Robert  then
370ea906c41SOllivier Robert    AC_DEFINE([FOPEN_BINARY_FLAG],"b",
371ea906c41SOllivier Robert	[fopen(3) accepts a 'b' in the mode flag])
372ea906c41SOllivier Robert  else
373ea906c41SOllivier Robert    AC_DEFINE([FOPEN_BINARY_FLAG],"",
374ea906c41SOllivier Robert	[fopen(3) accepts a 'b' in the mode flag])
375ea906c41SOllivier Robert  fi
376ea906c41SOllivier Robert
377ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_RUN_FOPEN_BINARY
378ea906c41SOllivier Robert
379ea906c41SOllivier Robert
380ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_RUN_FOPEN_TEXT],[
381ea906c41SOllivier Robert  AC_MSG_CHECKING([whether fopen accepts "t" mode])
382ea906c41SOllivier Robert  AC_CACHE_VAL([libopts_cv_run_fopen_text],[
3832d4e511cSCy Schubert  AC_RUN_IFELSE([AC_LANG_SOURCE([@%:@include <stdio.h>
384ea906c41SOllivier Robertint main (int argc, char ** argv) {
385ea906c41SOllivier RobertFILE * fp = fopen("conftest.@S|@ac_ext", "rt");
3862d4e511cSCy Schubertreturn (fp == NULL) ? 1 : fclose(fp); }] )],
387ea906c41SOllivier Robert    [libopts_cv_run_fopen_text=yes],[libopts_cv_run_fopen_text=no],[libopts_cv_run_fopen_text=no]
3882b15cb3dSCy Schubert  ) # end of RUN_IFELSE
389ea906c41SOllivier Robert  ]) # end of AC_CACHE_VAL for libopts_cv_run_fopen_text
390ea906c41SOllivier Robert  AC_MSG_RESULT([${libopts_cv_run_fopen_text}])
391ea906c41SOllivier Robert  if test "X${libopts_cv_run_fopen_text}" != Xno
392ea906c41SOllivier Robert  then
393ea906c41SOllivier Robert    AC_DEFINE([FOPEN_TEXT_FLAG],"t",
394ea906c41SOllivier Robert	[fopen(3) accepts a 't' in the mode flag])
395ea906c41SOllivier Robert  else
396ea906c41SOllivier Robert    AC_DEFINE([FOPEN_TEXT_FLAG],"",
397ea906c41SOllivier Robert	[fopen(3) accepts a 't' in the mode flag])
398ea906c41SOllivier Robert  fi
399ea906c41SOllivier Robert
400ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_RUN_FOPEN_TEXT
401ea906c41SOllivier Robert
402ea906c41SOllivier Robert
403ea906c41SOllivier RobertAC_DEFUN([LIBOPTS_DISABLE_OPTIONAL_ARGS],[
404ea906c41SOllivier Robert  AC_ARG_ENABLE([optional-args],
4052b15cb3dSCy Schubert    AS_HELP_STRING([--disable-optional-args], [not wanting optional option args]),
406ea906c41SOllivier Robert    [libopts_cv_enable_optional_args=${enable_optional_args}],
407ea906c41SOllivier Robert    AC_CACHE_CHECK([whether not wanting optional option args], libopts_cv_enable_optional_args,
408ea906c41SOllivier Robert      libopts_cv_enable_optional_args=yes)
409ea906c41SOllivier Robert  ) # end of AC_ARG_ENABLE
410ea906c41SOllivier Robert  if test "X${libopts_cv_enable_optional_args}" = Xno
411ea906c41SOllivier Robert  then
412ea906c41SOllivier Robert    AC_DEFINE([NO_OPTIONAL_OPT_ARGS], [1],
413ea906c41SOllivier Robert          [Define this if optional arguments are disallowed])
414ea906c41SOllivier Robert  fi
415ea906c41SOllivier Robert
416ea906c41SOllivier Robert]) # end of AC_DEFUN of LIBOPTS_DISABLE_OPTIONAL_ARGS
417ea906c41SOllivier Robert
418ea906c41SOllivier Robert
419ea906c41SOllivier RobertAC_DEFUN([INVOKE_LIBOPTS_MACROS],[
4202b15cb3dSCy Schubert  AC_REQUIRE([INVOKE_LIBOPTS_MACROS_FIRST])
421ea906c41SOllivier Robert  # Check to see if a reg expr header is specified.
422ea906c41SOllivier Robert  LIBOPTS_WITH_REGEX_HEADER
423ea906c41SOllivier Robert
424ea906c41SOllivier Robert  # Check to see if a working libregex can be found.
425ea906c41SOllivier Robert  LIBOPTS_WITHLIB_REGEX
426ea906c41SOllivier Robert
427ea906c41SOllivier Robert  # Check to see if pathfind(3) works.
428ea906c41SOllivier Robert  LIBOPTS_RUN_PATHFIND
429ea906c41SOllivier Robert
430ea906c41SOllivier Robert  # Check to see if /dev/zero is readable device.
431ea906c41SOllivier Robert  LIBOPTS_TEST_DEV_ZERO
432ea906c41SOllivier Robert
433ea906c41SOllivier Robert  # Check to see if we have a functional realpath(3C).
434ea906c41SOllivier Robert  LIBOPTS_RUN_REALPATH
435ea906c41SOllivier Robert
436ea906c41SOllivier Robert  # Check to see if strftime() works.
437ea906c41SOllivier Robert  LIBOPTS_RUN_STRFTIME
438ea906c41SOllivier Robert
439ea906c41SOllivier Robert  # Check to see if fopen accepts "b" mode.
440ea906c41SOllivier Robert  LIBOPTS_RUN_FOPEN_BINARY
441ea906c41SOllivier Robert
442ea906c41SOllivier Robert  # Check to see if fopen accepts "t" mode.
443ea906c41SOllivier Robert  LIBOPTS_RUN_FOPEN_TEXT
444ea906c41SOllivier Robert
445ea906c41SOllivier Robert  # Check to see if not wanting optional option args.
446ea906c41SOllivier Robert  LIBOPTS_DISABLE_OPTIONAL_ARGS
447ea906c41SOllivier Robert
448ea906c41SOllivier Robert]) # end AC_DEFUN of INVOKE_LIBOPTS_MACROS
449ea906c41SOllivier Robert
450ea906c41SOllivier Robertdnl @synopsis  LIBOPTS_CHECK
451ea906c41SOllivier Robertdnl
452ea906c41SOllivier Robertdnl If autoopts-config works, add the linking information to LIBS.
453ea906c41SOllivier Robertdnl Otherwise, add ``libopts-${ao_rev}'' to SUBDIRS and run all
454ea906c41SOllivier Robertdnl the config tests that the library needs.  Invoke the
455ea906c41SOllivier Robertdnl "INVOKE_LIBOPTS_MACROS" macro iff we are building libopts.
456ea906c41SOllivier Robertdnl
4572b15cb3dSCy Schubertdnl  This file is part of AutoGen.
458*a466cc55SCy Schubertdnl  AutoGen Copyright (C) 1992-2018 by Bruce Korb - all rights reserved
4592b15cb3dSCy Schubertdnl
4602b15cb3dSCy Schubertdnl  AutoGen is free software: you can redistribute it and/or modify it
4612b15cb3dSCy Schubertdnl  under the terms of the GNU General Public License as published by the
4622b15cb3dSCy Schubertdnl  Free Software Foundation, either version 3 of the License, or
4632b15cb3dSCy Schubertdnl  (at your option) any later version.
4642b15cb3dSCy Schubertdnl
4652b15cb3dSCy Schubertdnl  AutoGen is distributed in the hope that it will be useful, but
4662b15cb3dSCy Schubertdnl  WITHOUT ANY WARRANTY; without even the implied warranty of
4672b15cb3dSCy Schubertdnl  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
4682b15cb3dSCy Schubertdnl  See the GNU General Public License for more details.
4692b15cb3dSCy Schubertdnl
4702b15cb3dSCy Schubertdnl  You should have received a copy of the GNU General Public License along
4712b15cb3dSCy Schubertdnl  with this program.  If not, see <http://www.gnu.org/licenses/>.
4722b15cb3dSCy Schubertdnl
473ea906c41SOllivier Robertdnl Default to system libopts
474ea906c41SOllivier Robertdnl
4752b15cb3dSCy SchubertAC_DEFUN([LIBOPTS_CHECK_COMMON],[
4762b15cb3dSCy Schubert  AC_REQUIRE([INVOKE_LIBOPTS_MACROS_FIRST])
477ea906c41SOllivier Robert  [NEED_LIBOPTS_DIR='']
478ea906c41SOllivier Robert  m4_pushdef([AO_Libopts_Dir],
479ea906c41SOllivier Robert	    [ifelse($1, , [libopts], [$1])])
480ea906c41SOllivier Robert  AC_ARG_ENABLE([local-libopts],
481ea906c41SOllivier Robert    AC_HELP_STRING([--enable-local-libopts],
4822b15cb3dSCy Schubert       [Use the supplied libopts tearoff code]),[
483ea906c41SOllivier Robert    if test x$enableval = xyes ; then
484ea906c41SOllivier Robert       AC_MSG_NOTICE([Using supplied libopts tearoff])
485ea906c41SOllivier Robert       LIBOPTS_CFLAGS='-I$(top_srcdir)/AO_Libopts_Dir'
486ea906c41SOllivier Robert       NEED_LIBOPTS_DIR=true
4872b15cb3dSCy Schubert       LIBOPTS_LDADD='$(top_builddir)/AO_Libopts_Dir/libopts.la'
488ea906c41SOllivier Robert    fi])
489ea906c41SOllivier Robert
490ea906c41SOllivier Robert  AC_ARG_ENABLE([libopts-install],
4912b15cb3dSCy Schubert    AC_HELP_STRING([--enable-libopts-install],
4922b15cb3dSCy Schubert       [Install libopts with client installation]))
4932b15cb3dSCy Schubert  AM_CONDITIONAL([INSTALL_LIBOPTS],[test "X${enable_libopts_install}" = Xyes])
494ea906c41SOllivier Robert
495ea906c41SOllivier Robert  [if test -z "${NEED_LIBOPTS_DIR}" ; then]
496ea906c41SOllivier Robert     AC_MSG_CHECKING([whether autoopts-config can be found])
497ea906c41SOllivier Robert     AC_ARG_WITH([autoopts-config],
498ea906c41SOllivier Robert        AC_HELP_STRING([--with-autoopts-config],
499ea906c41SOllivier Robert             [specify the config-info script]),
500ea906c41SOllivier Robert        [lo_cv_with_autoopts_config=${with_autoopts_config}],
501ea906c41SOllivier Robert        AC_CACHE_CHECK([whether autoopts-config is specified],
502ea906c41SOllivier Robert             [lo_cv_with_autoopts_config],
503ea906c41SOllivier Robert             [if autoopts-config --help 2>/dev/null 1>&2
504ea906c41SOllivier Robert        then lo_cv_with_autoopts_config=autoopts-config
505ea906c41SOllivier Robert        elif libopts-config --help 2>/dev/null 1>&2
506ea906c41SOllivier Robert        then lo_cv_with_autoopts_config=libopts-config
507ea906c41SOllivier Robert        else lo_cv_with_autoopts_config=no ; fi])
508ea906c41SOllivier Robert     ) # end of AC_ARG_WITH
509ea906c41SOllivier Robert
510ea906c41SOllivier Robert     AC_CACHE_VAL([lo_cv_test_autoopts],[
511ea906c41SOllivier Robert        if test -z "${lo_cv_with_autoopts_config}" \
512ea906c41SOllivier Robert                -o X"${lo_cv_with_autoopts_config}" = Xno
513ea906c41SOllivier Robert        then
514ea906c41SOllivier Robert           if autoopts-config --help 2>/dev/null 1>&2
515ea906c41SOllivier Robert           then lo_cv_with_autoopts_config=autoopts-config
516ea906c41SOllivier Robert           elif libopts-config --help 2>/dev/null 1>&2
517ea906c41SOllivier Robert           then lo_cv_with_autoopts_config=libopts-config
518ea906c41SOllivier Robert           else lo_cv_with_autoopts_config=false ; fi
519ea906c41SOllivier Robert        fi
520ea906c41SOllivier Robert        lo_cv_test_autoopts=`
521ea906c41SOllivier Robert            ${lo_cv_with_autoopts_config} --libs` 2> /dev/null
522ea906c41SOllivier Robert        if test $? -ne 0 -o -z "${lo_cv_test_autoopts}"
523ea906c41SOllivier Robert        then lo_cv_test_autoopts=no ; fi
524ea906c41SOllivier Robert     ]) # end of CACHE_VAL
525ea906c41SOllivier Robert     AC_MSG_RESULT([${lo_cv_test_autoopts}])
526ea906c41SOllivier Robert
527ea906c41SOllivier Robert     [if test "X${lo_cv_test_autoopts}" != Xno
528ea906c41SOllivier Robert     then
529ea906c41SOllivier Robert        LIBOPTS_LDADD="${lo_cv_test_autoopts}"
530ea906c41SOllivier Robert        LIBOPTS_CFLAGS="`${lo_cv_with_autoopts_config} --cflags`"
531ea906c41SOllivier Robert     else
532ea906c41SOllivier Robert        LIBOPTS_LDADD='$(top_builddir)/]AO_Libopts_Dir[/libopts.la'
533ea906c41SOllivier Robert        LIBOPTS_CFLAGS='-I$(top_srcdir)/]AO_Libopts_Dir['
534ea906c41SOllivier Robert        NEED_LIBOPTS_DIR=true
535ea906c41SOllivier Robert     fi
5362b15cb3dSCy Schubert  fi # end of if test -z "${NEED_LIBOPTS_DIR}"
5372b15cb3dSCy Schubert  if test -n "${LIBOPTS_BUILD_BLOCKED}" ; then
5382b15cb3dSCy Schubert    NEED_LIBOPTS_DIR=''
5392b15cb3dSCy Schubert  fi]
540ea906c41SOllivier Robert  AM_CONDITIONAL([NEED_LIBOPTS], [test -n "${NEED_LIBOPTS_DIR}"])
541ea906c41SOllivier Robert  AC_SUBST(LIBOPTS_LDADD)
542ea906c41SOllivier Robert  AC_SUBST(LIBOPTS_CFLAGS)
543ea906c41SOllivier Robert  AC_SUBST(LIBOPTS_DIR, AO_Libopts_Dir)
544ea906c41SOllivier Robert  m4_popdef([AO_Libopts_Dir])
5452b15cb3dSCy Schubert[# end of AC_DEFUN of LIBOPTS_CHECK_COMMON]
5462b15cb3dSCy Schubert])
5472b15cb3dSCy Schubertdnl
5482b15cb3dSCy Schubertdnl AC_CONFIG_FILES conditionalization requires using AM_COND_IF, however
5492b15cb3dSCy Schubertdnl AM_COND_IF is new to Automake 1.11.  To use it on new Automake without
5502b15cb3dSCy Schubertdnl requiring same, a fallback implementation for older Automake is provided.
5512b15cb3dSCy Schubertdnl Note that disabling of AC_CONFIG_FILES requires Automake 1.11, this code
5522b15cb3dSCy Schubertdnl is correct only in terms of m4sh generated script.
5532b15cb3dSCy Schubertdnl
5542b15cb3dSCy Schubertm4_ifndef([AM_COND_IF],
5552b15cb3dSCy Schubert  [AC_DEFUN([AM_COND_IF], [
5562b15cb3dSCy Schubert    if test -z "$$1_TRUE"; then :
5572b15cb3dSCy Schubert      m4_n([$2])[]dnl
5582b15cb3dSCy Schubert      m4_ifval([$3],[
559ea906c41SOllivier Robert    else
5602b15cb3dSCy Schubert      $3
5612b15cb3dSCy Schubert    ])dnl
5622b15cb3dSCy Schubert    fi[]dnl
5632b15cb3dSCy Schubert  ])dnl
5642b15cb3dSCy Schubert])
5652b15cb3dSCy Schubertdnl
5662b15cb3dSCy SchubertAC_DEFUN([LIBOPTS_CHECK_NOBUILD], [
5672b15cb3dSCy Schubert  m4_pushdef([AO_Libopts_Dir],
5682b15cb3dSCy Schubert	      [ifelse($1, , [libopts], [$1])])
5692b15cb3dSCy Schubert  LIBOPTS_BUILD_BLOCKED=true
5702b15cb3dSCy Schubert  LIBOPTS_CHECK_COMMON(AO_Libopts_Dir)
5712b15cb3dSCy Schubert  m4_popdef([AO_Libopts_Dir])dnl
5722b15cb3dSCy Schubert# end of AC_DEFUN of LIBOPTS_CHECK_NOBUILD
5732b15cb3dSCy Schubert])
5742b15cb3dSCy Schubertdnl
5752b15cb3dSCy SchubertAC_DEFUN([LIBOPTS_CHECK], [
5762b15cb3dSCy Schubert  m4_pushdef([AO_Libopts_Dir],
5772b15cb3dSCy Schubert	      [ifelse($1, , [libopts], [$1])])
5782b15cb3dSCy Schubert  LIBOPTS_BUILD_BLOCKED=''
5792b15cb3dSCy Schubert  LIBOPTS_CHECK_COMMON(AO_Libopts_Dir)
5802b15cb3dSCy Schubert  AM_COND_IF([NEED_LIBOPTS], [
5812b15cb3dSCy Schubert    INVOKE_LIBOPTS_MACROS
5822b15cb3dSCy Schubert  ])
5832b15cb3dSCy Schubert  AC_CONFIG_FILES(AO_Libopts_Dir/Makefile)
5842b15cb3dSCy Schubert  m4_popdef([AO_Libopts_Dir])dnl
5852b15cb3dSCy Schubert# end of AC_DEFUN of LIBOPTS_CHECK
586ea906c41SOllivier Robert])
587