Imported Upstream version 2.8.3
[platform/upstream/libarchive.git] / contrib / libarchive_autodetect-st_lib_archive.m4
1 dnl
2 dnl @synopsis ST_LIB_ARCHIVE([ENABLED-DEFAULT])
3 dnl
4 dnl This macro figures out what's necessary to link a program against an
5 dnl instance of the BSD libarchive package by Tim Kientzle.
6 dnl 
7 dnl See http://people.freebsd.org/~kientzle/libarchive/ for more info.
8 dnl
9 dnl It exports and substitutes the variables LIBARCHIVE_LIBS, LIBARCHIVE_LDFLAGS,
10 dnl and LIBARCHIVE_CPPFLAGS to appropriate values for the identified instance of
11 dnl libarchive.  The values are AC_SUBST'd, so a user could, for example, simply
12 dnl include @LIBARCHIVE_CPPFLAGS@ in the definition of AM_CPPFLAGS in a Makefile.am.
13 dnl
14 dnl ENABLED-DEFAULT is either "yes" or "no" and determines whether the default value
15 dnl is --with-libarchive or --without-libarchive.  It is not possible to specify a
16 dnl default directory.  More simply, any reasonable choice for a default should just
17 dnl go into the auto-detect list.
18 dnl
19 dnl The macro defines the symbol HAVE_LIBARCHIVE if the library is found. You
20 dnl should use autoheader to include a definition for this symbol in a config.h
21 dnl file. Sample usage in a C/C++ source is as follows:
22 dnl
23 dnl   #ifdef HAVE_LIBARCHIVE
24 dnl   #include <archive.h>
25 dnl   #endif /* HAVE_LIBARCHIVE */
26 dnl
27 dnl @category InstalledPackages
28 dnl @author Andre Stechert <andre@splunk.com>
29 dnl @version 2006-04-20
30 dnl @license GPLWithACException
31
32 AC_DEFUN([ST_LIB_ARCHIVE],
33 [
34 #
35 # Handle input from the configurer and blend with the requirements from the maintainer.
36 # We go through the trouble of creating a second set of variables other than the with_foo
37 # variables in order to be sure that error/corner cases have been cleaned up.
38 #
39 # After this statement, three trusted variable are defined.
40 #
41 # st_lib_archive_ENABLED will be either "yes" or "no".  its value determines whether
42 # or not we bother with the rest of the checks and whether or not we export a
43 # bunch of variables.
44 #
45 # st_lib_archive_LOCATION will be either "auto" or "defined".  if it is "auto", then
46 # we try a bunch of standard locations.  if it is "defined", then we just try the value
47 # provided in st_lib_archive_DIR.
48 #
49 # st_lib_archive_DIR will contain the string provided by the user, provided that it's
50 # actually a directory.
51 #
52 AC_MSG_CHECKING([if libarchive is wanted])
53 AC_ARG_WITH([libarchive],
54         AS_HELP_STRING([--with-libarchive=DIR], [libarchive installation directory]),
55         [if test "x$with_libarchive" = "xno" ; then
56                 st_lib_archive_ENABLED=no
57         elif test "x$with_libarchive" = "xyes" ; then
58                 st_lib_archive_ENABLED=yes
59                 st_lib_archive_LOCATION=auto
60         else
61                 st_lib_archive_ENABLED=yes
62                 st_lib_archive_LOCATION=defined
63                 if test -d "$with_libarchive" ; then
64                         st_lib_archive_DIR="$with_libarchive"
65                 else
66                         AC_MSG_ERROR([$with_libarchive is not a directory])
67                 fi
68         fi],
69         [if test "x$1" = "xno" ; then
70                 st_lib_archive_ENABLED=no
71         elif test "x$1" = "xyes" ; then
72                 st_lib_archive_ENABLED=yes
73         else
74                 st_lib_archive_ENABLED=yes
75         fi])
76
77 if test "$st_lib_archive_ENABLED" = "yes" ; then
78         AC_MSG_RESULT([yes])
79 #
80 # After this statement, one trusted variable is defined.
81 #
82 # st_lib_archive_LIB will be either "lib" or "lib64", depending on whether the configurer
83 # specified 32, 64.  The default is "lib".
84 #
85         AC_MSG_CHECKING([whether to use lib or lib64])
86         AC_ARG_WITH([libarchive-bits],
87                 AS_HELP_STRING([--with-libarchive-bits=32/64], [if 64, look in /lib64 on hybrid systems]),
88                 [if test "x$with_libarchive_bits" = "x32" ; then
89                         st_lib_archive_LIB=lib
90                 elif test "x$with_libarchive_bits" = "x64" ; then
91                         st_lib_archive_LIB=lib64
92                 else
93                         AC_MSG_ERROR([the argument must be either 32 or 64])
94                 fi],
95                 [st_lib_archive_LIB=lib])
96         AC_MSG_RESULT($st_lib_archive_LIB)
97 #
98 # Save the environment before verifying libarchive availability
99 #
100         st_lib_archive_SAVECPPFLAGS="$CPPFLAGS"
101         st_lib_archive_SAVELDFLAGS="$LDFLAGS"
102         AC_LANG_SAVE
103         AC_LANG_C
104
105         if test "x$st_lib_archive_LOCATION" = "xdefined" ; then
106                 CPPFLAGS="-I$st_lib_archive_DIR/include $st_lib_archive_SAVECPPFLAGS"
107                 LDFLAGS="-L$st_lib_archive_DIR/$st_lib_archive_LIB $st_lib_archive_SAVELDFLAGS"
108                 AC_CHECK_LIB(archive, archive_read_new, [st_lib_archive_found_lib=yes], [st_lib_archive_found_lib=no])
109                 AC_CHECK_HEADER(archive.h, [st_lib_archive_found_hdr=yes], [st_lib_archive_found_hdr=no])
110                 if test "x$st_lib_archive_found_lib" = "xyes" && test "x$st_lib_archive_found_hdr" = "xyes"; then
111                         LIBARCHIVE_CPPFLAGS="-I$dir/include"
112                         LIBARCHIVE_LDFLAGS="-L$dir/$st_lib_archive_LIB"
113                 else
114                         AC_MSG_ERROR([could not find libarchive in the requested location])
115                 fi
116         else
117                 #
118                 # These are the common install directories for Linux, FreeBSD, Solaris, and Mac.
119                 #
120                 for dir in /usr /usr/local /usr/sfw /opt/csw /opt/local /sw
121                 do
122                         if test -d "$dir" ; then
123                                 CPPFLAGS="-I$dir/include $st_lib_archive_SAVECPPFLAGS"
124                                 LDFLAGS="-L$dir/$st_lib_archive_LIB $st_lib_archive_SAVELDFLAGS"
125                                 AC_CHECK_LIB(archive, archive_read_new, [st_lib_archive_found_lib=yes], [st_lib_archive_found_lib=no])
126                                 AC_CHECK_HEADER(archive.h, [st_lib_archive_found_hdr=yes], [st_lib_archive_found_hdr=no])
127                                 if test "x$st_lib_archive_found_lib" = "xyes" && test "x$st_lib_archive_found_hdr" = "xyes"; then
128                                         LIBARCHIVE_CPPFLAGS="-I$dir/include"
129                                         LIBARCHIVE_LDFLAGS="-L$dir/$st_lib_archive_LIB"
130                                         break
131                                 fi
132                         fi
133                 done
134         fi
135
136         if test "x$st_lib_archive_found_hdr" = "xyes" && test "x$st_lib_archive_found_lib" = "xyes" ; then
137                 LIBARCHIVE_LIBS="-larchive"
138                 AC_DEFINE([HAVE_LIBARCHIVE], [1], [Defined to 1 if libarchive is available for use.])
139                 AC_SUBST(LIBARCHIVE_LIBS)
140                 AC_SUBST(LIBARCHIVE_CPPFLAGS)
141                 AC_SUBST(LIBARCHIVE_LDFLAGS)
142         fi
143
144 #
145 # Restore the environment now that we're done.
146 #
147         AC_LANG_RESTORE
148         CPPFLAGS="$st_lib_archive_SAVECPPFLAGS"
149         LDFLAGS="$st_lib_archive_SAVELDFLAGS"
150 else
151         AC_MSG_RESULT([no])
152 fi
153 AM_CONDITIONAL(LIBARCHIVE, test "x$st_lib_archive_found_lib" = "xyes" && test "x$st_lib_archive_found_hdr" = "xyes")
154 ])