s4:build: add some comments to the SMB_EXT_LIB() definition
[ira/wip.git] / source4 / build / m4 / public.m4
1 dnl SMB Build System
2 dnl ----------------
3 dnl Copyright (C) 2004 Stefan Metzmacher
4 dnl Copyright (C) 2004-2005 Jelmer Vernooij
5 dnl Published under the GPL
6 dnl
7 dnl SMB_EXT_LIB_FROM_PKGCONFIG(name,pkg-config name,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
8 dnl
9 dnl SMB_INCLUDED_LIB_PKGCONFIG(name,pkg-config name,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
10 dnl
11 dnl SMB_EXT_LIB(name,libs,cflags,cppflags,ldflags)
12 dnl
13 dnl SMB_ENABLE(name,default_build)
14 dnl
15 dnl SMB_INCLUDE_MK(file)
16 dnl
17 dnl SMB_WRITE_MAKEVARS(file)
18 dnl
19 dnl SMB_WRITE_PERLVARS(file)
20 dnl
21 dnl #######################################################
22 dnl ### And now the implementation                      ###
23 dnl #######################################################
24
25 dnl SMB_SUBSYSTEM(name,obj_files,required_subsystems,cflags)
26 AC_DEFUN([SMB_SUBSYSTEM],
27 [
28 MAKE_SETTINGS="$MAKE_SETTINGS
29 $1_CFLAGS = $4
30 $1_ENABLE = YES
31 $1_OBJ_FILES = $2
32 "
33
34 SMB_INFO_SUBSYSTEMS="$SMB_INFO_SUBSYSTEMS
35 ###################################
36 # Start Subsystem $1
37 @<:@SUBSYSTEM::$1@:>@
38 PRIVATE_DEPENDENCIES = $3
39 CFLAGS = \$($1_CFLAGS)
40 ENABLE = YES
41 # End Subsystem $1
42 ###################################
43 "
44 ])
45
46 dnl SMB_LIBRARY(name,obj_files,required_subsystems,cflags,ldflags)
47 AC_DEFUN([SMB_LIBRARY],
48 [
49 MAKE_SETTINGS="$MAKE_SETTINGS
50 $1_CFLAGS = $6
51 $1_LDFLAGS = $7
52 n1_ENABLE = YES
53 $1_OBJ_FILES = $2
54 "
55
56 SMB_INFO_LIBRARIES="$SMB_INFO_LIBRARIES
57 ###################################
58 # Start Library $1
59 @<:@LIBRARY::$1@:>@
60 PRIVATE_DEPENDENCIES = $3
61 CFLAGS = \$($1_CFLAGS)
62 LDFLAGS = \$($1_LDFLAGS)
63 ENABLE = YES
64 # End Library $1
65 ###################################
66 "
67 ])
68
69 dnl SMB_EXT_LIB_FROM_PKGCONFIG(name,pkg-config name,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
70 AC_DEFUN([SMB_EXT_LIB_FROM_PKGCONFIG], 
71 [
72         dnl Figure out the correct variables and call SMB_EXT_LIB()
73
74         if test -z "$PKG_CONFIG"; then
75                 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
76         fi
77
78         if test "$PKG_CONFIG" = "no" ; then
79                 echo "*** The pkg-config script could not be found. Make sure it is"
80                 echo "*** in your path, or set the PKG_CONFIG environment variable"
81                 echo "*** to the full path to pkg-config."
82                 echo "*** Or see http://pkg-config.freedesktop.org/ to get pkg-config."
83                         ac_cv_$1_found=no
84         else
85                 if $PKG_CONFIG --atleast-pkgconfig-version 0.9.0; then
86                         AC_MSG_CHECKING(for $2)
87
88                         if $PKG_CONFIG --exists '$2' ; then
89                                 AC_MSG_RESULT(yes)
90
91                                 $1_CFLAGS="`$PKG_CONFIG --cflags '$2'`"
92                                 OLD_CFLAGS="$CFLAGS"
93                                 CFLAGS="$CFLAGS $$1_CFLAGS"
94                                 AC_MSG_CHECKING([that the C compiler can use the $1_CFLAGS])
95                                 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
96                                         SMB_ENABLE($1, YES)
97                                         AC_MSG_RESULT(yes),
98                                         AC_MSG_RESULT(no),
99                                         AC_MSG_WARN([cannot run when cross-compiling]))
100                                 CFLAGS="$OLD_CFLAGS"
101
102                                 SMB_EXT_LIB($1, 
103                                         [`$PKG_CONFIG --libs-only-l '$2'`], 
104                                         [`$PKG_CONFIG --cflags-only-other '$2'`],
105                                         [`$PKG_CONFIG --cflags-only-I '$2'`],
106                                         [`$PKG_CONFIG --libs-only-other '$2'` `$PKG_CONFIG --libs-only-L '$2'`])
107                                 ac_cv_$1_found=yes
108
109                         else
110                                 AC_MSG_RESULT(no)
111                                 $PKG_CONFIG --errors-to-stdout --print-errors '$2'
112                                 ac_cv_$1_found=no
113                         fi
114                 else
115                         echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
116                         echo "*** See http://pkg-config.freedesktop.org/"
117                         ac_cv_$1_found=no
118                 fi
119         fi
120         if test x$ac_cv_$1_found = x"yes"; then
121                 ifelse([$3], [], [echo -n ""], [$3])
122         else
123                 ifelse([$4], [], [
124                           SMB_EXT_LIB($1)
125                           SMB_ENABLE($1, NO)
126                 ], [$4])
127         fi
128 ])
129
130 dnl SMB_INCLUDED_LIB_PKGCONFIG(name,pkg-config name,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
131 AC_DEFUN([SMB_INCLUDED_LIB_PKGCONFIG],
132 [
133         AC_ARG_ENABLE([external-]translit($1,`A-Z',`a-z'),
134                 AS_HELP_STRING([--enable-external-]translit($1,`A-Z',`a-z'), [Use external $1 instead of built-in (default=ifelse([$5],[],auto,$5))]), [], [enableval=ifelse([$5],[],auto,$5)])
135
136         if test $enableval = yes -o $enableval = auto; then
137                 SMB_EXT_LIB_FROM_PKGCONFIG([$1], [$2], [$3], [
138                         if test $enableval = yes; then
139                                 AC_MSG_ERROR([Unable to find external $1])
140                         fi
141                         enableval=no
142                 ])
143         fi
144         if test $enableval = no; then
145                 ifelse([$4], [], [
146                           SMB_EXT_LIB($1)
147                           SMB_ENABLE($1, NO)
148                 ], [$4])
149         fi
150 ])
151
152 dnl SMB_INCLUDE_MK(file)
153 AC_DEFUN([SMB_INCLUDE_MK],
154 [
155 SMB_INFO_EXT_LIBS="$SMB_INFO_EXT_LIBS
156 mkinclude $1
157 "
158 ])
159
160 dnl
161 dnl SMB_EXT_LIB() just specifies the details of the library.
162 dnl Note: the library isn't enabled by default.
163 dnl You need to enable it with SMB_ENABLE(name) if configure
164 dnl find it should be used. E.g. it should not be enabled
165 dnl if the library is present, but the header file is missing.
166 dnl
167 dnl SMB_EXT_LIB(name,libs,cflags,cppflags,ldflags)
168 AC_DEFUN([SMB_EXT_LIB],
169 [
170 MAKE_SETTINGS="$MAKE_SETTINGS
171 $1_LIBS = $2
172 $1_CFLAGS = $3
173 $1_CPPFLAGS = $4
174 $1_LDFLAGS = $5
175 "
176
177 ])
178
179 dnl SMB_ENABLE(name,default_build)
180 AC_DEFUN([SMB_ENABLE],
181 [
182         MAKE_SETTINGS="$MAKE_SETTINGS
183 $1_ENABLE = $2
184 "
185 SMB_INFO_ENABLES="$SMB_INFO_ENABLES
186 \$enabled{$1} = \"$2\";"
187 ])
188
189 dnl SMB_MAKE_SETTINGS(text)
190 AC_DEFUN([SMB_MAKE_SETTINGS],
191 [
192 MAKE_SETTINGS="$MAKE_SETTINGS
193 $1
194 "
195 ])
196
197 dnl SMB_WRITE_MAKEVARS(path, skip_vars)
198 AC_DEFUN([SMB_WRITE_MAKEVARS],
199 [
200 echo "configure: creating $1"
201 cat >$1<<CEOF
202 # $1 - Autogenerated by configure, DO NOT EDIT!
203 $MAKE_SETTINGS
204 CEOF
205 skip_vars=" $2 "
206 for ac_var in $ac_subst_vars
207 do
208     eval ac_val=\$$ac_var
209         if echo "$skip_vars" | grep -v " $ac_var " >/dev/null 2>/dev/null; then
210                 echo "$ac_var = $ac_val" >> $1
211         fi
212 done
213 ])
214
215 dnl SMB_WRITE_PERLVARS(path)
216 AC_DEFUN([SMB_WRITE_PERLVARS],
217 [
218 echo "configure: creating $1"
219 cat >$1<<CEOF
220 # config.pm - Autogenerate by configure. DO NOT EDIT!
221
222 package config;
223 require Exporter;
224 @ISA = qw(Exporter);
225 @EXPORT_OK = qw(%enabled %config);
226 use strict;
227
228 use vars qw(%enabled %config);
229
230 %config = (
231 CEOF
232
233 for ac_var in $ac_subst_vars
234 do
235         eval ac_val=\$$ac_var
236         # quote ' (\x27) inside '...' and make sure \ isn't eaten by shells, so use perl:
237         QAC_VAL=$ac_val QAC_VAR=$ac_var perl -e '$myval="$ENV{QAC_VAL}"; $myval =~ s/\x27/\\\x27/g ; print $ENV{QAC_VAR}." => \x27$myval\x27,\n"' >> $1
238 done
239
240 cat >>$1<<CEOF
241 );
242 $SMB_INFO_ENABLES
243 1;
244 CEOF
245 ])
246
247 dnl SMB_BUILD_RUN(OUTPUT_FILE)
248 AC_DEFUN([SMB_BUILD_RUN],
249 [
250 AC_OUTPUT_COMMANDS(
251 [
252 test "x$ac_abs_srcdir" != "x$ac_abs_builddir" && (
253         cd $builddir;
254         # NOTE: We *must* use -R so we don't follow symlinks (at least on BSD
255         # systems).
256         test -d heimdal || cp -R $srcdir/heimdal $builddir/
257         test -d heimdal_build || cp -R $srcdir/heimdal_build $builddir/
258         test -d build || builddir="$builddir" \
259                         srcdir="$srcdir" \
260                         $PERL ${srcdir}/script/buildtree.pl
261  )
262
263 $PERL -I${builddir} -I${builddir}/build \
264     -I${srcdir} -I${srcdir}/build \
265     ${srcdir}/build/smb_build/main.pl --output=$1 main.mk || exit $?
266 ],
267 [
268 srcdir="$srcdir"
269 builddir="$builddir"
270 PERL="$PERL"
271
272 export PERL
273 export srcdir
274 export builddir
275 ])
276 ])