root/gnuradio/branches/releases/3.1/config/grc_build.m4

Revision 7945 (checked in by jcorgan, 10 months ago)

Merged changeset r7936:7943 from jcorgan/bc-merge into release branch.

This merges in Michael Dicken's build system updates for ticket:186 into
the release 3.1 branch. It effectively combines changesets r7617, r7631,
r7632, r7769, and r7888 from the trunk.

Merge conflicts resulted from portions of changesets that applied to
files that are not on the release branch, and were manually resolved.

File config/pkg.m4 was copied over from the trunk.

  • Property svn:eol-style set to LF
Line 
1 dnl Copyright 2006,2008 Free Software Foundation, Inc.
2 dnl
3 dnl This file is part of GNU Radio
4 dnl
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)
8 dnl any later version.
9 dnl
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.
14 dnl
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.
19
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,-,_))
24 ])
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)
28
29 AC_DEFUN([_GRC_ENABLE],[
30     passed=yes
31     AC_ARG_ENABLE([$1],
32                   AC_HELP_STRING([--enable-$1],
33                                  [Stop if $1 fails configuration]),
34                   [],[
35         [enable_]$2=$enable_all_components
36         if test x$enable_all_components = xno; then
37             passed=no
38         fi
39     ])
40 ])
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.
53 dnl
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 .
57
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
64         pc_comp_name="$1"
65     else
66         pc_comp_name="$3"
67     fi
68     _GRC_WITH($1,[$2],${pc_comp_name},m4_bpatsubst($1,-,_))
69 ])
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],[
78     AC_ARG_WITH([$1],
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
83                     [with_]$4=yes
84                  fi],
85                 [])
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])
89         else
90             _GRC_WITH_PKG_CONFIG_CHECK($1,$3,$4)
91             ifelse([$2], , :, [$2])
92         fi
93     fi
94 ])
95
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
103         pc_comp_name="$1"
104     else
105         pc_comp_name="$2"
106     fi
107     _GRC_WITH_PKG_CONFIG_CHECK($1,${pc_comp_name},m4_bpatsubst($1,-,_))
108 ])
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
114
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
120
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 @:>@ .])
124         fi
125     fi
126
127     dnl do the check; error out if not found
128     PKG_CHECK_EXISTS($2, [passed=with; check1=yes], [
129         check1=no
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)
138             fi
139         fi
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 @:>@ .])
142         fi
143         dnl pkg-config Requires are now met; save the new PKG_CONFIG_PATH
144         s_PKG_CONFIG_PATH=$PKG_CONFIG_PATH
145     ])
146
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`
153
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}
159         fi
160     fi
161 ])
162
163 dnl Check the $prefix versus the --with libdirpath for this component
164 dnl $1 is the prefix
165 dnl $2 is the --with component name
166 dnl $3 is the --with component library path
167 AC_DEFUN([GRC_PREFIX_LDFLAGS],[
168     $2[_LIBDIRPATH]=$3
169     dnl create LDFLAGS for this --with, if different from the provided $prefix
170     if test [x]$1[/lib] != [x]$3; then
171         $2[_LDFLAG]=[-L]$3
172     else
173         $2[_LDFLAG]=
174     fi
175 ])
176
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
183 dnl   no   : otherwise
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,-,_)
188 dnl    echo
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'"
193 dnl    echo
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.])
199                 passed=no
200             fi
201         else
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-$1@<:@=arg@:>@])
205             fi
206         fi
207     fi
208 ])
209
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.])
215         passed=no
216     fi
217 ])
218
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}"
227         else
228             [with_]$2="${$1[_]$2}"$3"$[with_]$2"
229         fi
230         $1[_]$2=
231     fi
232 ])
233
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,-,_))
239 ])
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],[
247     $3[_with]=no
248     if test $passed = no; then
249         if test x$[enable_]$3 = xyes; then
250             AC_MSG_ERROR([Component $1 has errors; stopping.])
251         else
252             AC_MSG_RESULT([Not building component $1.])
253         fi
254     else
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.])
263             $3[_with]=yes
264         else
265             $3[_LDFLAG]=
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.])
270             else
271                 passed=no
272                 AC_MSG_RESULT([Component $1 passed configuration checks; but not building.])
273             fi
274         fi
275     fi
276     if test $passed = no; then
277         skipped_dirs="$skipped_dirs $1"
278         $3[_skipped]=yes
279     else
280         $3[_skipped]=no
281     fi
282     AC_SUBST($3[_INCLUDES])
283     AC_SUBST($3[_LA])
284     AC_SUBST($3[_INCLUDEDIR])
285     AC_SUBST($3[_LIBDIRPATH])
286     AC_SUBST($3[_LDFLAG])
287 ])
Note: See TracBrowser for help on using the browser.