Blame contrib/libarchive_autodetect-st_lib_archive.m4

Packit Service 1d0348
dnl
Packit Service 1d0348
dnl @synopsis ST_LIB_ARCHIVE([ENABLED-DEFAULT])
Packit Service 1d0348
dnl
Packit Service 1d0348
dnl This macro figures out what's necessary to link a program against an
Packit Service 1d0348
dnl instance of the BSD libarchive package by Tim Kientzle.
Packit Service 1d0348
dnl 
Packit Service 1d0348
dnl See http://people.freebsd.org/~kientzle/libarchive/ for more info.
Packit Service 1d0348
dnl
Packit Service 1d0348
dnl It exports and substitutes the variables LIBARCHIVE_LIBS, LIBARCHIVE_LDFLAGS,
Packit Service 1d0348
dnl and LIBARCHIVE_CPPFLAGS to appropriate values for the identified instance of
Packit Service 1d0348
dnl libarchive.  The values are AC_SUBST'd, so a user could, for example, simply
Packit Service 1d0348
dnl include @LIBARCHIVE_CPPFLAGS@ in the definition of AM_CPPFLAGS in a Makefile.am.
Packit Service 1d0348
dnl
Packit Service 1d0348
dnl ENABLED-DEFAULT is either "yes" or "no" and determines whether the default value
Packit Service 1d0348
dnl is --with-libarchive or --without-libarchive.  It is not possible to specify a
Packit Service 1d0348
dnl default directory.  More simply, any reasonable choice for a default should just
Packit Service 1d0348
dnl go into the auto-detect list.
Packit Service 1d0348
dnl
Packit Service 1d0348
dnl The macro defines the symbol HAVE_LIBARCHIVE if the library is found. You
Packit Service 1d0348
dnl should use autoheader to include a definition for this symbol in a config.h
Packit Service 1d0348
dnl file. Sample usage in a C/C++ source is as follows:
Packit Service 1d0348
dnl
Packit Service 1d0348
dnl   #ifdef HAVE_LIBARCHIVE
Packit Service 1d0348
dnl   #include <archive.h>
Packit Service 1d0348
dnl   #endif /* HAVE_LIBARCHIVE */
Packit Service 1d0348
dnl
Packit Service 1d0348
dnl @category InstalledPackages
Packit Service 1d0348
dnl @author Andre Stechert <andre@splunk.com>
Packit Service 1d0348
dnl @version 2006-04-20
Packit Service 1d0348
dnl @license GPLWithACException
Packit Service 1d0348
Packit Service 1d0348
AC_DEFUN([ST_LIB_ARCHIVE],
Packit Service 1d0348
[
Packit Service 1d0348
#
Packit Service 1d0348
# Handle input from the configurer and blend with the requirements from the maintainer.
Packit Service 1d0348
# We go through the trouble of creating a second set of variables other than the with_foo
Packit Service 1d0348
# variables in order to be sure that error/corner cases have been cleaned up.
Packit Service 1d0348
#
Packit Service 1d0348
# After this statement, three trusted variable are defined.
Packit Service 1d0348
#
Packit Service 1d0348
# st_lib_archive_ENABLED will be either "yes" or "no".  its value determines whether
Packit Service 1d0348
# or not we bother with the rest of the checks and whether or not we export a
Packit Service 1d0348
# bunch of variables.
Packit Service 1d0348
#
Packit Service 1d0348
# st_lib_archive_LOCATION will be either "auto" or "defined".  if it is "auto", then
Packit Service 1d0348
# we try a bunch of standard locations.  if it is "defined", then we just try the value
Packit Service 1d0348
# provided in st_lib_archive_DIR.
Packit Service 1d0348
#
Packit Service 1d0348
# st_lib_archive_DIR will contain the string provided by the user, provided that it's
Packit Service 1d0348
# actually a directory.
Packit Service 1d0348
#
Packit Service 1d0348
AC_MSG_CHECKING([if libarchive is wanted])
Packit Service 1d0348
AC_ARG_WITH([libarchive],
Packit Service 1d0348
	AS_HELP_STRING([--with-libarchive=DIR], [libarchive installation directory]),
Packit Service 1d0348
	[if test "x$with_libarchive" = "xno" ; then
Packit Service 1d0348
		st_lib_archive_ENABLED=no
Packit Service 1d0348
	elif test "x$with_libarchive" = "xyes" ; then
Packit Service 1d0348
		st_lib_archive_ENABLED=yes
Packit Service 1d0348
		st_lib_archive_LOCATION=auto
Packit Service 1d0348
	else
Packit Service 1d0348
		st_lib_archive_ENABLED=yes
Packit Service 1d0348
		st_lib_archive_LOCATION=defined
Packit Service 1d0348
		if test -d "$with_libarchive" ; then
Packit Service 1d0348
			st_lib_archive_DIR="$with_libarchive"
Packit Service 1d0348
		else
Packit Service 1d0348
			AC_MSG_ERROR([$with_libarchive is not a directory])
Packit Service 1d0348
		fi
Packit Service 1d0348
	fi],
Packit Service 1d0348
	[if test "x$1" = "xno" ; then
Packit Service 1d0348
		st_lib_archive_ENABLED=no
Packit Service 1d0348
	elif test "x$1" = "xyes" ; then
Packit Service 1d0348
		st_lib_archive_ENABLED=yes
Packit Service 1d0348
	else
Packit Service 1d0348
		st_lib_archive_ENABLED=yes
Packit Service 1d0348
	fi])
Packit Service 1d0348
Packit Service 1d0348
if test "$st_lib_archive_ENABLED" = "yes" ; then
Packit Service 1d0348
	AC_MSG_RESULT([yes])
Packit Service 1d0348
#
Packit Service 1d0348
# After this statement, one trusted variable is defined.
Packit Service 1d0348
#
Packit Service 1d0348
# st_lib_archive_LIB will be either "lib" or "lib64", depending on whether the configurer
Packit Service 1d0348
# specified 32, 64.  The default is "lib".
Packit Service 1d0348
#
Packit Service 1d0348
	AC_MSG_CHECKING([whether to use lib or lib64])
Packit Service 1d0348
	AC_ARG_WITH([libarchive-bits],
Packit Service 1d0348
		AS_HELP_STRING([--with-libarchive-bits=32/64], [if 64, look in /lib64 on hybrid systems]),
Packit Service 1d0348
		[if test "x$with_libarchive_bits" = "x32" ; then
Packit Service 1d0348
			st_lib_archive_LIB=lib
Packit Service 1d0348
		elif test "x$with_libarchive_bits" = "x64" ; then
Packit Service 1d0348
			st_lib_archive_LIB=lib64
Packit Service 1d0348
		else
Packit Service 1d0348
			AC_MSG_ERROR([the argument must be either 32 or 64])
Packit Service 1d0348
		fi],
Packit Service 1d0348
		[st_lib_archive_LIB=lib])
Packit Service 1d0348
	AC_MSG_RESULT($st_lib_archive_LIB)
Packit Service 1d0348
#
Packit Service 1d0348
# Save the environment before verifying libarchive availability
Packit Service 1d0348
#
Packit Service 1d0348
	st_lib_archive_SAVECPPFLAGS="$CPPFLAGS"
Packit Service 1d0348
	st_lib_archive_SAVELDFLAGS="$LDFLAGS"
Packit Service 1d0348
	AC_LANG_SAVE
Packit Service 1d0348
	AC_LANG_C
Packit Service 1d0348
Packit Service 1d0348
	if test "x$st_lib_archive_LOCATION" = "xdefined" ; then
Packit Service 1d0348
		CPPFLAGS="-I$st_lib_archive_DIR/include $st_lib_archive_SAVECPPFLAGS"
Packit Service 1d0348
		LDFLAGS="-L$st_lib_archive_DIR/$st_lib_archive_LIB $st_lib_archive_SAVELDFLAGS"
Packit Service 1d0348
		AC_CHECK_LIB(archive, archive_read_new, [st_lib_archive_found_lib=yes], [st_lib_archive_found_lib=no])
Packit Service 1d0348
		AC_CHECK_HEADER(archive.h, [st_lib_archive_found_hdr=yes], [st_lib_archive_found_hdr=no])
Packit Service 1d0348
		if test "x$st_lib_archive_found_lib" = "xyes" && test "x$st_lib_archive_found_hdr" = "xyes"; then
Packit Service 1d0348
			LIBARCHIVE_CPPFLAGS="-I$dir/include"
Packit Service 1d0348
			LIBARCHIVE_LDFLAGS="-L$dir/$st_lib_archive_LIB"
Packit Service 1d0348
		else
Packit Service 1d0348
			AC_MSG_ERROR([could not find libarchive in the requested location])
Packit Service 1d0348
		fi
Packit Service 1d0348
	else
Packit Service 1d0348
		#
Packit Service 1d0348
		# These are the common install directories for Linux, FreeBSD, Solaris, and Mac.
Packit Service 1d0348
		#
Packit Service 1d0348
		for dir in /usr /usr/local /usr/sfw /opt/csw /opt/local /sw
Packit Service 1d0348
		do
Packit Service 1d0348
			if test -d "$dir" ; then
Packit Service 1d0348
				CPPFLAGS="-I$dir/include $st_lib_archive_SAVECPPFLAGS"
Packit Service 1d0348
				LDFLAGS="-L$dir/$st_lib_archive_LIB $st_lib_archive_SAVELDFLAGS"
Packit Service 1d0348
				AC_CHECK_LIB(archive, archive_read_new, [st_lib_archive_found_lib=yes], [st_lib_archive_found_lib=no])
Packit Service 1d0348
				AC_CHECK_HEADER(archive.h, [st_lib_archive_found_hdr=yes], [st_lib_archive_found_hdr=no])
Packit Service 1d0348
				if test "x$st_lib_archive_found_lib" = "xyes" && test "x$st_lib_archive_found_hdr" = "xyes"; then
Packit Service 1d0348
					LIBARCHIVE_CPPFLAGS="-I$dir/include"
Packit Service 1d0348
					LIBARCHIVE_LDFLAGS="-L$dir/$st_lib_archive_LIB"
Packit Service 1d0348
					break
Packit Service 1d0348
				fi
Packit Service 1d0348
			fi
Packit Service 1d0348
		done
Packit Service 1d0348
	fi
Packit Service 1d0348
Packit Service 1d0348
	if test "x$st_lib_archive_found_hdr" = "xyes" && test "x$st_lib_archive_found_lib" = "xyes" ; then
Packit Service 1d0348
		LIBARCHIVE_LIBS="-larchive"
Packit Service 1d0348
		AC_DEFINE([HAVE_LIBARCHIVE], [1], [Defined to 1 if libarchive is available for use.])
Packit Service 1d0348
		AC_SUBST(LIBARCHIVE_LIBS)
Packit Service 1d0348
		AC_SUBST(LIBARCHIVE_CPPFLAGS)
Packit Service 1d0348
		AC_SUBST(LIBARCHIVE_LDFLAGS)
Packit Service 1d0348
	fi
Packit Service 1d0348
Packit Service 1d0348
#
Packit Service 1d0348
# Restore the environment now that we're done.
Packit Service 1d0348
#
Packit Service 1d0348
	AC_LANG_RESTORE
Packit Service 1d0348
	CPPFLAGS="$st_lib_archive_SAVECPPFLAGS"
Packit Service 1d0348
	LDFLAGS="$st_lib_archive_SAVELDFLAGS"
Packit Service 1d0348
else
Packit Service 1d0348
	AC_MSG_RESULT([no])
Packit Service 1d0348
fi
Packit Service 1d0348
AM_CONDITIONAL(LIBARCHIVE, test "x$st_lib_archive_found_lib" = "xyes" && test "x$st_lib_archive_found_hdr" = "xyes")
Packit Service 1d0348
])