1dnl @synopsis AC_PATH_GENERIC(LIBRARY [, MINIMUM-VERSION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
2dnl
3dnl Runs a LIBRARY-config script and defines LIBRARY_CFLAGS and LIBRARY_LIBS
4dnl
5dnl The script must support `--cflags' and `--libs' args.
6dnl If MINIMUM-VERSION is specified, the script must also support the
7dnl `--version' arg.
8dnl If the `--with-library-[exec-]prefix' arguments to ./configure are given,
9dnl it must also support `--prefix' and `--exec-prefix'.
10dnl (In other words, it must be like gtk-config.)
11dnl
12dnl For example:
13dnl
14dnl    AC_PATH_GENERIC(Foo, 1.0.0)
15dnl
16dnl would run `foo-config --version' and check that it is at least 1.0.0
17dnl
18dnl If so, the following would then be defined:
19dnl
20dnl    FOO_CFLAGS to `foo-config --cflags`
21dnl    FOO_LIBS   to `foo-config --libs`
22dnl
23dnl At present there is no support for additional "MODULES" (see AM_PATH_GTK)
24dnl (shamelessly stolen from gtk.m4 and then hacked around a fair amount)
25dnl
26dnl @author Angus Lees <gusl@cse.unsw.edu.au>
27dnl @version $Id: ac_path_generic.m4,v 1.1.4.1 2002/09/06 19:43:55 roth Exp $
28
29AC_DEFUN([AC_PATH_GENERIC],
30[dnl
31dnl we're going to need uppercase, lowercase and user-friendly versions of the
32dnl string `LIBRARY'
33pushdef([UP], translit([$1], [a-z], [A-Z]))dnl
34pushdef([DOWN], translit([$1], [A-Z], [a-z]))dnl
35
36dnl
37dnl Get the cflags and libraries from the LIBRARY-config script
38dnl
39AC_ARG_WITH(DOWN-prefix,[  --with-]DOWN[-prefix=PFX       Prefix where $1 is installed (optional)],
40        DOWN[]_config_prefix="$withval", DOWN[]_config_prefix="")
41AC_ARG_WITH(DOWN-exec-prefix,[  --with-]DOWN[-exec-prefix=PFX Exec prefix where $1 is installed (optional)],
42        DOWN[]_config_exec_prefix="$withval", DOWN[]_config_exec_prefix="")
43
44  if test x$DOWN[]_config_exec_prefix != x ; then
45     DOWN[]_config_args="$DOWN[]_config_args --exec-prefix=$DOWN[]_config_exec_prefix"
46     if test x${UP[]_CONFIG+set} != xset ; then
47       UP[]_CONFIG=$DOWN[]_config_exec_prefix/bin/DOWN-config
48     fi
49  fi
50  if test x$DOWN[]_config_prefix != x ; then
51     DOWN[]_config_args="$DOWN[]_config_args --prefix=$DOWN[]_config_prefix"
52     if test x${UP[]_CONFIG+set} != xset ; then
53       UP[]_CONFIG=$DOWN[]_config_prefix/bin/DOWN-config
54     fi
55  fi
56
57  AC_PATH_PROG(UP[]_CONFIG, DOWN-config, no)
58  ifelse([$2], ,
59     AC_MSG_CHECKING(for $1),
60     AC_MSG_CHECKING(for $1 - version >= $2)
61  )
62  no_[]DOWN=""
63  if test "$UP[]_CONFIG" = "no" ; then
64     no_[]DOWN=yes
65  else
66     UP[]_CFLAGS="`$UP[]_CONFIG $DOWN[]_config_args --cflags`"
67     UP[]_LIBS="`$UP[]_CONFIG $DOWN[]_config_args --libs`"
68     ifelse([$2], , ,[
69        DOWN[]_config_major_version=`$UP[]_CONFIG $DOWN[]_config_args \
70         --version | sed 's/[[^0-9]]*\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
71        DOWN[]_config_minor_version=`$UP[]_CONFIG $DOWN[]_config_args \
72         --version | sed 's/[[^0-9]]*\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
73        DOWN[]_config_micro_version=`$UP[]_CONFIG $DOWN[]_config_args \
74         --version | sed 's/[[^0-9]]*\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
75        DOWN[]_wanted_major_version="regexp($2, [\<\([0-9]*\)], [\1])"
76        DOWN[]_wanted_minor_version="regexp($2, [\<\([0-9]*\)\.\([0-9]*\)], [\2])"
77        DOWN[]_wanted_micro_version="regexp($2, [\<\([0-9]*\).\([0-9]*\).\([0-9]*\)], [\3])"
78
79        # Compare wanted version to what config script returned.
80        # If I knew what library was being run, i'd probably also compile
81        # a test program at this point (which also extracted and tested
82        # the version in some library-specific way)
83        if test "$DOWN[]_config_major_version" -lt \
84                        "$DOWN[]_wanted_major_version" \
85          -o \( "$DOWN[]_config_major_version" -eq \
86                        "$DOWN[]_wanted_major_version" \
87            -a "$DOWN[]_config_minor_version" -lt \
88                        "$DOWN[]_wanted_minor_version" \) \
89          -o \( "$DOWN[]_config_major_version" -eq \
90                        "$DOWN[]_wanted_major_version" \
91            -a "$DOWN[]_config_minor_version" -eq \
92                        "$DOWN[]_wanted_minor_version" \
93            -a "$DOWN[]_config_micro_version" -lt \
94                        "$DOWN[]_wanted_micro_version" \) ; then
95          # older version found
96          no_[]DOWN=yes
97          echo -n "*** An old version of $1 "
98          echo -n "($DOWN[]_config_major_version"
99          echo -n ".$DOWN[]_config_minor_version"
100          echo    ".$DOWN[]_config_micro_version) was found."
101          echo -n "*** You need a version of $1 newer than "
102          echo -n "$DOWN[]_wanted_major_version"
103          echo -n ".$DOWN[]_wanted_minor_version"
104          echo    ".$DOWN[]_wanted_micro_version."
105          echo "***"
106          echo "*** If you have already installed a sufficiently new version, this error"
107          echo "*** probably means that the wrong copy of the DOWN-config shell script is"
108          echo "*** being found. The easiest way to fix this is to remove the old version"
109          echo "*** of $1, but you can also set the UP[]_CONFIG environment to point to the"
110          echo "*** correct copy of DOWN-config. (In this case, you will have to"
111          echo "*** modify your LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf"
112          echo "*** so that the correct libraries are found at run-time)"
113        fi
114     ])
115  fi
116  if test "x$no_[]DOWN" = x ; then
117     AC_MSG_RESULT(yes)
118     ifelse([$3], , :, [$3])
119  else
120     AC_MSG_RESULT(no)
121     if test "$UP[]_CONFIG" = "no" ; then
122       echo "*** The DOWN-config script installed by $1 could not be found"
123       echo "*** If $1 was installed in PREFIX, make sure PREFIX/bin is in"
124       echo "*** your path, or set the UP[]_CONFIG environment variable to the"
125       echo "*** full path to DOWN-config."
126     fi
127     UP[]_CFLAGS=""
128     UP[]_LIBS=""
129     ifelse([$4], , :, [$4])
130  fi
131  AC_SUBST(UP[]_CFLAGS)
132  AC_SUBST(UP[]_LIBS)
133
134  popdef([UP])
135  popdef([DOWN])
136])
137