AC_DEFUN([STP_PATH_LIB],[m4_pushdef([UP], m4_translit([$1], [a-z], [A-Z]))m4_pushdef([DOWN], m4_translit([$1], [A-Z], [a-z]))m4_pushdef([LDOWN], ac_path_lib_[]DOWN)m4_pushdef([CACHE], ac_cv_path_lib_[]DOWN)m4_pushdef([ERRORLOG], error.[]DOWN[]test)_STP_PATH_LIB_INIT([$1], [$3])
_STP_PATH_LIB_CHECK([$1], [$2], [$4])
_STP_PATH_LIB_CHECK_TESTS([$2])
_STP_PATH_LIB_ERROR_DUMP
_STP_PATH_LIB_FINI([$5], [$6])
m4_popdef([UP])m4_popdef([DOWN])m4_popdef([LDOWN])m4_popdef([CACHE])m4_popdef([ERRORLOG])])
AC_DEFUN([_STP_PATH_LIB_INIT],
[_STP_PATH_LIB_DEFAULTS([$1], [$2])
_STP_PATH_LIB_OPTIONS
rm -f ERRORLOG
ac_save_[]UP[]_CFLAGS="$UP[]_CFLAGS"
ac_save_[]UP[]_LIBS="$UP[]_LIBS"
ac_save_[]UP[]_VERSION="$UP[]_VERSION"
])
AC_DEFUN([_STP_PATH_LIB_DEFAULTS],
[m4_ifdef([STP_PATH_LIB_USEPKGCONFIG],, [STP_PATH_LIB_PKGCONFIG])
LDOWN[]_header="m4_default([_STP_PATH_LIB_HEADER], [$1/$1.h])"
LDOWN[]_config="m4_default([$2], [$1-config])"
ifdef([_STP_PATH_LIB_VERSION_PREFIX],,
[m4_define([_STP_PATH_LIB_VERSION_PREFIX],
DOWN[_])
])
ifdef([_STP_PATH_LIB_VERSION_MAJOR],,
[m4_define([_STP_PATH_LIB_VERSION_MAJOR],
[major])
])
ifdef([_STP_PATH_LIB_VERSION_MINOR],,
[m4_define([_STP_PATH_LIB_VERSION_MINOR],
[minor])
])
ifdef([_STP_PATH_LIB_VERSION_MICRO],,
[m4_define([_STP_PATH_LIB_VERSION_MICRO],
[micro])
])
ifdef([_STP_PATH_LIB_VERSION_SUFFIX],,
[m4_define([_STP_PATH_LIB_VERSION_SUFFIX],
[_version])
])
ifdef([_STP_PATH_LIB_DEFVERSION_PREFIX],,
[m4_define([_STP_PATH_LIB_DEFVERSION_PREFIX],
UP[_])
])
ifdef([_STP_PATH_LIB_DEFVERSION_MAJOR],,
[m4_define([_STP_PATH_LIB_DEFVERSION_MAJOR],
[MAJOR])
])
ifdef([_STP_PATH_LIB_DEFVERSION_MINOR],,
[m4_define([_STP_PATH_LIB_DEFVERSION_MINOR],
[MINOR])
])
ifdef([_STP_PATH_LIB_DEFVERSION_MICRO],,
[m4_define([_STP_PATH_LIB_DEFVERSION_MICRO],
[MICRO])
])
ifdef([_STP_PATH_LIB_DEFVERSION_SUFFIX],,
[m4_define([_STP_PATH_LIB_DEFVERSION_SUFFIX],
[_VERSION])
])
])
AC_DEFUN([_STP_PATH_LIB_OPTIONS],
[m4_if(STP_PATH_LIB_USEPKGCONFIG, [true], ,
[AC_ARG_WITH(DOWN-prefix,
AC_HELP_STRING([--with-DOWN-prefix=PFX],
[prefix where UP is installed (optional)]),
[LDOWN[]_config_prefix="$withval"],
[LDOWN[]_config_prefix=""])AC_ARG_WITH(DOWN-exec-prefix,
AC_HELP_STRING([--with-DOWN-exec-prefix=PFX],
[exec-prefix where UP is installed (optional)]),
[LDOWN[]_config_exec_prefix="$withval"],
[LDOWN[]_config_exec_prefix=""])])
AC_ARG_ENABLE(DOWN[]test,
AC_HELP_STRING([--disable-DOWN[]test],
[do not try to compile and run a test UP program]),
[LDOWN[]_test_enabled="no"],
[LDOWN[]_test_enabled="yes"])])
AC_DEFUN([_STP_PATH_LIB_CHECK],
[
m4_if([$3], , ,
[LDOWN[]_config_args="$LDOWN[]_config_args $3"])
LDOWN[]_min_version=`echo "$2" | sed -e 's/ -nocheck//'`
m4_if([$2], , ,[if test "$LDOWN[]_min_version" = "$2" ; then
LDOWN[]_version_test_enabled="yes"
fi])
m4_if(STP_PATH_LIB_USEPKGCONFIG, [true],
[LDOWN[]_config_args="$1 $LDOWN[]_config_args"
],
[ if test x$LDOWN[]_config_exec_prefix != x ; then
LDOWN[]_config_args="$LDOWN[]_config_args --exec-prefix=$LDOWN[]_config_exec_prefix"
fi
if test x$LDOWN[]_config_prefix != x ; then
LDOWN[]_config_args="$LDOWN[]_config_args --prefix=$LDOWN[]_config_prefix"
fi
])
m4_if(STP_PATH_LIB_USEPKGCONFIG, [true],
[AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
if test x$PKG_CONFIG != xno ; then
if pkg-config --atleast-pkgconfig-version 0.7 ; then
:
else
STP_PATH_LIB_ERROR([A new enough version of pkg-config was not found:])
STP_PATH_LIB_ERROR([version 0.7 or better required.])
STP_PATH_LIB_ERROR([See http://pkgconfig.sourceforge.net])
PKG_CONFIG=no
fi
fi
UP[]_CONFIG="$PKG_CONFIG"
LDOWN[]_config="pkg-config"
m4_pushdef([LIBCONFIG_CFLAGS], [--cflags])
m4_pushdef([LIBCONFIG_LIBS], [--libs])
m4_pushdef([LIBCONFIG_VERSION], [--modversion])
],
[AC_PATH_PROG(UP[]_CONFIG, $LDOWN[]_config, no)
m4_pushdef([LIBCONFIG_CFLAGS], [--cflags])
m4_pushdef([LIBCONFIG_LIBS], [--libs])
m4_pushdef([LIBCONFIG_VERSION], [--version])
if test x$UP[]_CONFIG = xno ; then
STP_PATH_LIB_ERROR([The $LDOWN[]_config script installed by UP could not be found.])
STP_PATH_LIB_ERROR([If UP was installed in PREFIX, make sure PREFIX/bin is in])
STP_PATH_LIB_ERROR([your path, or set the UP[]_CONFIG environment variable to the])
STP_PATH_LIB_ERROR([full path to $LDOWN[]_config.])
fi
])
if test x$UP[]_CONFIG = xno ; then
LDOWN[]_present_avoidcache="no"
else
LDOWN[]_present_avoidcache="yes"
AC_CACHE_CHECK([for UP CFLAGS],
[CACHE[]_cflags],
[CACHE[]_cflags=`$UP[]_CONFIG $LDOWN[]_config_args LIBCONFIG_CFLAGS`])
AC_CACHE_CHECK([for UP LIBS],
[CACHE[]_libs],
[CACHE[]_libs=`$UP[]_CONFIG $LDOWN[]_config_args LIBCONFIG_LIBS`])
AC_CACHE_CHECK([for UP VERSION],
[CACHE[]_version],
[CACHE[]_version=`$UP[]_CONFIG $LDOWN[]_config_args LIBCONFIG_VERSION`])
UP[]_CFLAGS="$CACHE[]_cflags"
UP[]_LIBS="$CACHE[]_libs"
UP[]_VERSION="$CACHE[]_version"
LDOWN[]_config_major_version=`echo "$CACHE[]_version" | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
LDOWN[]_config_minor_version=`echo "$CACHE[]_version" | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
LDOWN[]_config_micro_version=`echo "$CACHE[]_version" | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
LDOWN[]_min_major_version=`echo "$LDOWN[]_min_version" | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
LDOWN[]_min_minor_version=`echo "$LDOWN[]_min_version" | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
LDOWN[]_min_micro_version=`echo "$LDOWN[]_min_version" | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
fi
m4_popdef([LIBCONFIG_CFLAGS])m4_popdef([LIBCONFIG_LIBS])m4_popdef([LIBCONFIG_VERSION])])
AC_DEFUN([_STP_PATH_LIB_FINI],
[UP[]_CFLAGS="$CACHE[]_cflags"
UP[]_LIBS="$CACHE[]_libs"
UP[]_VERSION="$CACHE[]_version"
AC_SUBST(UP[]_CFLAGS)AC_SUBST(UP[]_LIBS)AC_SUBST(UP[]_VERSION)if test x$CACHE[]_present = xyes ; then
m4_if([$1], , :, [$1])
else
UP[]_CFLAGS="$ac_save_[]UP[]_CFLAGS"
UP[]_LIBS="$ac_save_[]UP[]_LIBS"
UP[]_VERSION="$ac_save_[]UP[]_VERSION"
m4_if([$2], , :, [$2])
fi
STP_PATH_LIB_CHECK_REGISTER_DEFAULTS
STP_PATH_LIB_PKGCONFIG
])
AC_DEFUN([_STP_PATH_LIB_CHECK_TESTS],
[AC_CACHE_CHECK([for UP - m4_if([$1], ,
[any version],
[version >= $LDOWN[]_min_version])],
[CACHE[]_present],
[CACHE[]_present="$LDOWN[]_present_avoidcache"
if test x$CACHE[]_present = xyes -a x$LDOWN[]_test_enabled = xyes -a \
x$LDOWN[]_version_test_enabled = xyes ; then
m4_default([_STP_PATH_LIB_CHECK_TEST_COMPILE],
[_STP_PATH_LIB_CHECK_TEST_COMPILE],
[_STP_PATH_LIB_CHECK_TEST_COMPILE_DEFAULT])
else
m4_default([_STP_PATH_LIB_CHECK_VERSION],
[_STP_PATH_LIB_CHECK_VERSION],
[_STP_PATH_LIB_CHECK_VERSION_DEFAULT])
if test x$LDOWN[]_test_enabled = xyes ; then
_STP_PATH_LIB_CHECK_LINK(, [
CACHE[]_present="no"
if test x$LDOWN[]_version_test_error = xyes ; then
STP_PATH_LIB_ERROR
fi
STP_PATH_LIB_ERROR([The test program failed to compile or link. See the file])
STP_PATH_LIB_ERROR([config.log for the exact error that occured. This usually])
STP_PATH_LIB_ERROR([means UP was not installed, was incorrectly installed])
STP_PATH_LIB_ERROR([or that you have moved UP since it was installed. In])
STP_PATH_LIB_ERROR([the latter case, you may want to edit the $LDOWN[]_config])
STP_PATH_LIB_ERROR([script: $UP[]_CONFIG])
])
fi
fi])
])
AC_DEFUN([_STP_PATH_LIB_CHECK_TEST_COMPILE],
[m4_pushdef([RUNLOG], run.[]DOWN[]test)m4_pushdef([MAJOR], _STP_PATH_LIB_VERSION_PREFIX[]_STP_PATH_LIB_VERSION_MAJOR[]_STP_PATH_LIB_VERSION_SUFFIX)m4_pushdef([MINOR], _STP_PATH_LIB_VERSION_PREFIX[]_STP_PATH_LIB_VERSION_MINOR[]_STP_PATH_LIB_VERSION_SUFFIX)m4_pushdef([MICRO], _STP_PATH_LIB_VERSION_PREFIX[]_STP_PATH_LIB_VERSION_MICRO[]_STP_PATH_LIB_VERSION_SUFFIX)m4_pushdef([DEFMAJOR], _STP_PATH_LIB_DEFVERSION_PREFIX[]_STP_PATH_LIB_DEFVERSION_MAJOR[]_STP_PATH_LIB_DEFVERSION_SUFFIX)m4_pushdef([DEFMINOR], _STP_PATH_LIB_DEFVERSION_PREFIX[]_STP_PATH_LIB_DEFVERSION_MINOR[]_STP_PATH_LIB_DEFVERSION_SUFFIX)m4_pushdef([DEFMICRO], _STP_PATH_LIB_DEFVERSION_PREFIX[]_STP_PATH_LIB_DEFVERSION_MICRO[]_STP_PATH_LIB_DEFVERSION_SUFFIX) ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $UP[]_CFLAGS"
LIBS="$UP[]_LIBS $LIBS"
rm -f RUNLOG
AC_TRY_RUN([
int
main ()
{
int major, minor, micro;
char *tmp_version;
FILE *errorlog;
if ((errorlog = fopen("]ERRORLOG[", "w")) == NULL) {
exit(1);
}
system ("touch ]RUNLOG[");
/* HP/UX 9 (%@ tmp_version = strdup("$]LDOWN[_min_version");
if (!tmp_version) {
exit(1);
}
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) {
fprintf(errorlog, "*** %s: bad version string\n", "$]LDOWN[_min_version");
exit(1);
}
if ((]MAJOR[ != $]LDOWN[_config_major_version) ||
(]MINOR[ != $]LDOWN[_config_minor_version) ||
(]MICRO[ != $]LDOWN[_config_micro_version))
{
fprintf(errorlog, "*** '$]UP[_CONFIG ]LIBCONFIG_VERSION[' returned %d.%d.%d, but \n", \
$]LDOWN[_config_major_version, $]LDOWN[_config_minor_version, \
$]LDOWN[_config_micro_version);
fprintf(errorlog, "*** ]UP[ (%d.%d.%d) was found!\n", \
]MAJOR[, ]MINOR[, ]MICRO[);
fprintf(errorlog, "***\n");
fprintf(errorlog, "*** If $]LDOWN[_config was correct, then it is best to remove\n");
fprintf(errorlog, "*** the old version of ]UP[. You may also be able to\n");
fprintf(errorlog, "*** fix the error by modifying your LD_LIBRARY_PATH enviroment\n");
fprintf(errorlog, "*** variable, or by editing /etc/ld.so.conf. Make sure you have\n");
fprintf(errorlog, "*** run ldconfig if that is required on your system.\n");
fprintf(errorlog, "*** If $]LDOWN[_config was wrong, set the environment\n");
fprintf(errorlog, "*** variable ]UP[_CONFIG to point to the correct copy of\n");
fprintf(errorlog, "*** $]LDOWN[_config, and remove the file config.cache\n");
fprintf(errorlog, "*** before re-running configure.\n");
}
else if ((]MAJOR[ != ]DEFMAJOR[) ||
(]MINOR[ != ]DEFMINOR[) ||
(]MICRO[ != ]DEFMICRO[))
{
fprintf(errorlog, "*** ]UP[ header files (version %d.%d.%d) do not match\n",
]DEFMAJOR[, ]DEFMINOR[, ]DEFMICRO[);
fprintf(errorlog, "*** library (version %d.%d.%d)\n",
]MAJOR[, ]MINOR[, ]MICRO[);
}
else
{
if ((]MAJOR[ > major) ||
((]MAJOR[ == major) && (]MINOR[ > minor)) ||
((]MAJOR[ == major) && (]MINOR[ == minor) && (]MICRO[ >= micro)))
{
return 0;
}
else
{
fprintf(errorlog, "*** An old version of ]UP[ (%d.%d.%d) was found.\n",
]MAJOR[, ]MINOR[, ]MICRO[);
fprintf(errorlog, "*** You need a version of ]UP[ newer than %d.%d.%d.\n",
major, minor, micro);
/*fprintf(errorlog, "*** The latest version of ]UP[ is always available from ftp://ftp.my.site\n");*/
fprintf(errorlog, "***\n");
fprintf(errorlog, "*** If you have already installed a sufficiently new version, this\n");
fprintf(errorlog, "*** error probably means that the wrong copy of the $]LDOWN[_config\n");
fprintf(errorlog, "*** shell script is being found. The easiest way to fix this is to\n");
fprintf(errorlog, "*** remove the old version of ]UP[, but you can also set the\n");
fprintf(errorlog, "*** ]UP[_CONFIG environment variable to point to the correct\n");
fprintf(errorlog, "*** copy of $]LDOWN[_config. (In this case, you will have to\n");
fprintf(errorlog, "*** modify your LD_LIBRARY_PATH environment variable, or edit\n");
fprintf(errorlog, "*** /etc/ld.so.conf so that the correct libraries are found at\n");
fprintf(errorlog, "*** run-time.)\n");
}
}
return 1;
}
],, [CACHE[]_present="no"],
[STP_PATH_LIB_ERROR([cross compiling; assumed OK.])])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
if test -f RUNLOG ; then
:
elif test x$LDOWN[]_version_test_enabled = xyes ; then
STP_PATH_LIB_ERROR([Could not run UP test program, checking why...])
STP_PATH_LIB_ERROR
_STP_PATH_LIB_CHECK_LINK( [STP_PATH_LIB_ERROR([The test program compiled, but did not run. This usually])
STP_PATH_LIB_ERROR([means that the run-time linker is not finding UP or finding])
STP_PATH_LIB_ERROR([finding the wrong version of UP. If it is not finding])
STP_PATH_LIB_ERROR([UP, you will need to set your LD_LIBRARY_PATH environment])
STP_PATH_LIB_ERROR([variable, or edit /etc/ld.so.conf to point to the installed])
STP_PATH_LIB_ERROR([location. Also, make sure you have run ldconfig if that is])
STP_PATH_LIB_ERROR([required on your system.])
STP_PATH_LIB_ERROR
STP_PATH_LIB_ERROR([If you have an old version installed, it is best to remove])
STP_PATH_LIB_ERROR([it, although you may also be able to get things to work by])
STP_PATH_LIB_ERROR([modifying LD_LIBRARY_PATH])
],
[STP_PATH_LIB_ERROR([The test program failed to compile or link. See the file])
STP_PATH_LIB_ERROR([config.log for the exact error that occured. This usually])
STP_PATH_LIB_ERROR([means UP was incorrectly installed or that you have])
STP_PATH_LIB_ERROR([moved UP since it was installed. In the latter case,])
STP_PATH_LIB_ERROR([you may want to edit the $LDOWN[]_config script:])
STP_PATH_LIB_ERROR([$UP[]_CONFIG])
])
fi
rm -f RUNLOG
m4_popdef([RUNLOG])dnl
m4_popdef([MAJOR])dnl
m4_popdef([MINOR])dnl
m4_popdef([MICRO])dnl
m4_popdef([DEFMAJOR])dnl
m4_popdef([DEFMINOR])dnl
m4_popdef([DEFMICRO])dnl
])# _STP_PATH_LIB_CHECK_TEST_COMPILE_DEFAULT
# _STP_PATH_LIB_CHECK_VERSION_DEFAULT
# -----------------------------------
# Check that the library version (config) is greater than or equal to
# the requested (minimum) version.
AC_DEFUN([_STP_PATH_LIB_CHECK_VERSION],
[m4_if([$2], , ,
[if test x$LDOWN[]_present_avoidcache = xyes ; then
if test \
"$LDOWN[]_config_major_version" -lt "$LDOWN[]_min_major_version" -o \
"$LDOWN[]_config_major_version" -eq "$LDOWN[]_min_major_version" -a \
"$LDOWN[]_config_minor_version" -lt "$LDOWN[]_min_minor_version" -o \
"$LDOWN[]_config_major_version" -eq "$LDOWN[]_min_major_version" -a \
"$LDOWN[]_config_minor_version" -eq "$LDOWN[]_min_minor_version" -a \
"$LDOWN[]_config_micro_version" -lt "$LDOWN[]_min_micro_version" ; then
CACHE[]_present="no"
LDOWN[]_version_test_error="yes"
STP_PATH_LIB_ERROR([$UP[]_CONFIG --version' returned $LDOWN[]_config_major_version.$LDOWN[]_config_minor_version.$LDOWN[]_config_micro_version, but])
STP_PATH_LIB_ERROR([UP (>= $LDOWN[]_min_version) was needed.])
STP_PATH_LIB_ERROR
STP_PATH_LIB_ERROR([If $]LDOWN[_config was wrong, set the environment])
STP_PATH_LIB_ERROR([variable ]UP[_CONFIG to point to the correct copy of])
STP_PATH_LIB_ERROR([$]LDOWN[_config, and remove the file config.cache])
STP_PATH_LIB_ERROR([before re-running configure.])
else
CACHE[]_present="yes"
fi
fi])
])
AC_DEFUN([_STP_PATH_LIB_CHECK_LINK],
[ac_save_CFLAGS="$CFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $UP[]_CFLAGS"
LIBS="$LIBS $UP[]_LIBS"
AC_TRY_LINK([ [m4_if([$1], , :, [$1])],
[m4_if([$2], , :, [$2])])
CFLAGS="$ac_save_CFLAGS"
LIBS="$ac_save_LIBS"
])
AC_DEFUN([STP_PATH_LIB_ERROR],
[echo '*** m4_if([$1], , , [$1])' >>ERRORLOG])
AC_DEFUN([_STP_PATH_LIB_ERROR_DUMP],
[if test -f ERRORLOG ; then
cat ERRORLOG
rm -f ERRORLOG
fi])
AC_DEFUN([STP_PATH_LIB_PKGCONFIG],
[m4_define([STP_PATH_LIB_USEPKGCONFIG], [true])
])
AC_DEFUN([STP_PATH_LIB_LIBCONFIG],
[m4_define([STP_PATH_LIB_USEPKGCONFIG], [false])
])
AC_DEFUN([STP_PATH_LIB_REGISTER],
[m4_define([$1], [$2])])
AC_DEFUN([STP_PATH_LIB_CHECK_REGISTER_DEFAULTS],
[_STP_PATH_LIB_CHECK_REGISTER_DEFAULTS([_STP_PATH_LIB_CHECK_COMPILE],
[_STP_PATH_LIP_CHECK_VERSION],
[_STP_PATH_LIB_HEADER],
[_STP_PATH_LIB_VERSION_PREFIX],
[_STP_PATH_LIB_VERSION_MAJOR],
[_STP_PATH_LIB_VERSION_MINOR],
[_STP_PATH_LIB_VERSION_MICRO],
[_STP_PATH_LIB_VERSION_SUFFIX],
[_STP_PATH_LIB_DEFVERSION_PREFIX],
[_STP_PATH_LIB_DEFVERSION_MAJOR],
[_STP_PATH_LIB_DEFVERSION_MINOR],
[_STP_PATH_LIB_DEFVERSION_MICRO],
[_STP_PATH_LIB_DEFVERSION_SUFFIX])
])
AC_DEFUN([STP_PATH_LIB_CHECK_REGISTER_DEFAULTS],
[m4_if([$1], , ,
[m4_ifdef([$1],
[m4_undefine([$1])])
STP_PATH_LIB_CHECK_REGISTER_DEFAULTS(m4_shift($@))
])
])