1 dnl Copyright 2006,2008,2009 Free Software Foundation, Inc.
3 dnl This file is part of GNU Radio
5 dnl GNU Radio is free software; you can redistribute it and/or modify
6 dnl it under the terms of the GNU General Public License as published by
7 dnl the Free Software Foundation; either version 3, or (at your option)
10 dnl GNU Radio is distributed in the hope that it will be useful,
11 dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
12 dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 dnl GNU General Public License for more details.
15 dnl You should have received a copy of the GNU General Public License
16 dnl along with GNU Radio; see the file COPYING. If not, write to
17 dnl the Free Software Foundation, Inc., 51 Franklin Street,
18 dnl Boston, MA 02110-1301, USA.
20 dnl Create --enable-foo argument for named component, create variables as needed
21 dnl $1 is component name
22 AC_DEFUN([GRC_ENABLE], [
23 _GRC_ENABLE($1,m4_bpatsubst($1,-,_))
25 dnl $2 is the '_'d component name
26 dnl on exit variable enable_$2 will be set to [yes|no];
27 dnl passed will be [yes|no] (same as enable_$2)
29 AC_DEFUN([_GRC_ENABLE],[
32 AC_HELP_STRING([--enable-$1],
33 [Stop if $1 fails configuration]),
35 [enable_]$2=$enable_all_components
36 if test x$enable_all_components = xno; then
41 dnl Component specific configuration
42 dnl The order of the GR_ macros determines the order of compilation
43 dnl For -any- checks on $enable_all_components
44 dnl use the following guildlines:
45 dnl yes : --enable-all-components was specified, so error out if any
46 dnl components do not pass configuration checks.
47 dnl no : --disable-all-components was specified, so try to build the
48 dnl --enable'd components, and error out if any do not pass
49 dnl configuration checks.
50 dnl "" : this option was not specified on the command line; try to
51 dnl build all components that are not --with'd, but don't
52 dnl error out if any component does not pass configuration checks.
54 dnl For each --enable-foo component, if that flag is not specified on
55 dnl the command line, the related variable $enable_foo will be set to
56 dnl $enable_all_components .
58 dnl Create --with-foo argument for named compoment, create variables as needed
59 dnl $1 is component name
60 dnl $2 is what to do on success
61 dnl $3 is the PKG_CONFIG name; if not given, then $1
62 AC_DEFUN([GRC_WITH], [
63 if test [x]$3 = x; then
68 _GRC_WITH($1,[$2],${pc_comp_name},m4_bpatsubst($1,-,_))
70 dnl $3 is the pkg-config component name
71 dnl $4 is the '_'d component name
72 dnl on exit variable passed will be [yes|no|with]:
73 dnl yes: if --enable-$1 and/or --enable-all-components was specified,
74 dnl but --with was not;
75 dnl with: if --with-$1 was specified, and passed checks;
76 dnl no: all other conditions
77 AC_DEFUN([_GRC_WITH],[
79 AC_HELP_STRING([--with-$1@<:@=PATH@:>@],
80 [Use package $1 if installed in PATH (if specified) or PKG_CONFIG_PATH (if PATH not specified); stop if $1 not found]),
81 [if test "x$withval" != "xyes"; then
82 [with_]$4[_val]=$withval
86 if test x$[with_]$4 = xyes; then
87 if test x$[enable_]$4 = xyes; then
88 AC_MSG_ERROR([Component $1: Cannot use both --enable and --with])
90 _GRC_WITH_PKG_CONFIG_CHECK($1,$3,$4)
91 ifelse([$2], , :, [$2])
96 dnl Use 'pkgconfig' to check for a package
97 dnl $1 is the --with component name
98 dnl $2 is the pkg-config component name, if provided; otherwise use $1 for this
99 dnl on success, resulting INCLUDES, INCLUDEDIR, LA, and LIBDIRPATH variables
100 dnl will be set; on failure, will exit with an error.
101 AC_DEFUN([GRC_WITH_PKG_CONFIG_CHECK], [
102 if test [x]$2 = x; then
107 _GRC_WITH_PKG_CONFIG_CHECK($1,${pc_comp_name},m4_bpatsubst($1,-,_))
109 dnl $2 is the pkg-config component name
110 dnl $3 is the '_'d component name
111 AC_DEFUN([_GRC_WITH_PKG_CONFIG_CHECK],[
112 dnl save PKG_CONFIG_PATH, restore at the end
113 s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
115 dnl create the PKG_CONFIG_PATH, via this component arg, if provided;
116 dnl else use the environment PKG_CONFIG_PATH
117 l_PKG_CONFIG_PATH=$[with_]$3[_val]
118 if test "x$l_PKG_CONFIG_PATH" != "x"; then
119 export PKG_CONFIG_PATH=$l_PKG_CONFIG_PATH
121 dnl verify that the file exists; if not, no point in continuing
122 if ! test -r ${l_PKG_CONFIG_PATH}/$2[.pc]; then
123 AC_MSG_ERROR([Component $1: PKGCONFIG cannot find info for $2, with provided PKG_CONFIG_PATH = @<:@ $l_PKG_CONFIG_PATH @:>@ .])
127 dnl do the check; error out if not found
128 PKG_CHECK_EXISTS($2, [passed=with; check1=yes], [
130 dnl pkg-config returned an error; this might be that the .pc
131 dnl file was not valid, or the Requires: were not met.
132 dnl If the arg was provided and the input PKG_CONFIG_PATH , then try
133 dnl again appending the whole PKG_CONFIG_PATH.
134 if test "x$l_PKG_CONFIG_PATH" != "x"; then
135 if test "x$s_PKG_CONFIG_PATH" != "x"; then
136 export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH}
137 PKG_CHECK_EXISTS($2, passed=with, passed=no)
140 if test $passed != with; then
141 AC_MSG_ERROR([Component $1: PKGCONFIG cannot find info for $2, with PKG_CONFIG_PATH = @<:@ $PKG_CONFIG_PATH @:>@ .])
143 dnl pkg-config Requires are now met; save the new PKG_CONFIG_PATH
144 s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
147 dnl if PKG_CHECK_EXISTS returned, then this component's .pc file was
148 dnl found in the provided 'arg' PKG_CONFIG_PATH;
149 dnl retrieve various parameters
150 $3[_INCLUDES]=`$PKG_CONFIG --cflags-only-I $2`
151 $3[_LA]=`$PKG_CONFIG --libs $2`
152 $3[_INCLUDEDIR]=`$PKG_CONFIG --variable=includedir $2`
154 if test x$check1 = xyes; then
155 dnl prepend the args PKG_CONFIG_PATH to the saved one, if the
156 dnl saved version was not empty
157 if test "x$s_PKG_CONFIG_PATH" != "x"; then
158 export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:${s_PKG_CONFIG_PATH}
163 dnl Check the $prefix versus the --with libdirpath for this component
165 dnl $2 is the --with component name
166 dnl $3 is the --with component library path
167 AC_DEFUN([GRC_PREFIX_LDFLAGS],[
169 dnl create LDFLAGS for this --with, if different from the provided $prefix
170 if test [x]$1[/lib] != [x]$3; then
177 dnl Check to make sure this dependency is fulfilled for this component
178 dnl $1 is the component's name
179 dnl $2 is the component dependency name
180 dnl On input and exit, $passed will be:
181 dnl with : if --with passed muster
182 dnl yes : if --enable passed muster
184 dnl If trying --with, will error-out if any dependency was not --with'd
185 AC_DEFUN([GRC_CHECK_DEPENDENCY],[
186 dnl f0=[enable_]m4_bpatsubst($1,-,_)
187 dnl f1=[$enable_]m4_bpatsubst($1,-,_)
189 dnl echo "$1 : Checking Dependency $2"
190 dnl echo "$1 : enable_all_components is '$enable_all_components'"
191 dnl echo "$1 : $f0 is '$f1'"
192 dnl echo "$1 : passed is '$passed'"
194 if test $passed != no; then
195 if test $passed = yes; then
196 dnl make sure this dependency was not skipped
197 if test [x$]m4_bpatsubst($2,-,_)[_skipped] = xyes; then
198 AC_MSG_RESULT([Component $1 requires $2, which is not being built or specified via pre-installed files.])
202 dnl make sure this dependency was --with'd only; not --enable'd
203 if test [x$]m4_bpatsubst($2,-,_)[_with] = xno; then
204 AC_MSG_ERROR([Component $1 requires $2 to be included as --with-$2@<:@=arg@:>@])
210 dnl Check to make sure GUILE is available
211 dnl $1 is the component name
212 AC_DEFUN([GRC_CHECK_GUILE],[
213 if test x"$GUILE" = x; then
214 AC_MSG_RESULT([Component $1 requires guile, which was not found.])
219 dnl Add the specified "with" list; clear the provided variable
220 dnl $1 is the component name
221 dnl $2 is the path list name suffix
222 dnl $3 is the separator (for paths, ":"; for includes " ")
223 AC_DEFUN([GRC_ADD_TO_LIST],[
224 if test "x${$1[_]$2}" != "x"; then
225 if test "x$[with_]$2" = "x"; then
226 [with_]$2="${$1[_]$2}"
228 [with_]$2="${$1[_]$2}"$3"$[with_]$2"
234 dnl Conditionally build named component.
235 dnl $1 is component name
236 dnl $2 is executed if configuration passes and build is desired
237 AC_DEFUN([GRC_BUILD_CONDITIONAL],[
238 _GRC_BUILD_CONDITIONAL($1, $2, m4_bpatsubst($1,-,_))
240 dnl $3=m4_bpatsubst($1,-,_)
241 dnl Use $passed=no to indicate configuration failure;
242 dnl Use $passed=with to indicate the use of pre-installed libraries and headers;
243 dnl Any other value of $passed, including blank, assumes success;
244 dnl Defines $3_with=[yes|no] depending on if $passed=with or not (respectively)
245 dnl Defines $3_skipped=[yes|no] depending on if $passed=no or not (respectively)
246 AC_DEFUN([_GRC_BUILD_CONDITIONAL],[
248 if test $passed = no; then
249 if test x$[enable_]$3 = xyes; then
250 AC_MSG_ERROR([Component $1 has errors; stopping.])
252 AC_MSG_RESULT([Not building component $1.])
255 if test $passed = with; then
256 with_dirs="$with_dirs $1"
257 GRC_ADD_TO_LIST($3, INCLUDES, " ")
258 GRC_ADD_TO_LIST($3, SWIG_INCLUDES, " ")
259 GRC_ADD_TO_LIST($3, PYDIRPATH, ":")
260 GRC_ADD_TO_LIST($3, SWIGDIRPATH, ":")
261 GRC_ADD_TO_LIST($3, LIBDIRPATH, ":")
262 AC_MSG_RESULT([Component $1 will be included from a pre-installed library and includes.])
266 if test x$[enable_]$3 != xno; then
267 ifelse([$2], , :, [$2])
268 build_dirs="$build_dirs $1"
269 AC_MSG_RESULT([Component $1 passed configuration checks; building.])
272 AC_MSG_RESULT([Component $1 passed configuration checks; but not building.])
276 if test $passed = no; then
277 skipped_dirs="$skipped_dirs $1"
282 AC_SUBST($3[_INCLUDES])
284 AC_SUBST($3[_INCLUDEDIR])
285 AC_SUBST($3[_LIBDIRPATH])
286 AC_SUBST($3[_LDFLAG])