704811bf06b8962642dad272caec9804746cbebe
[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                 SAMBA_PKG_CONFIG_MIN_VERSION="0.9.0"
86                 if $PKG_CONFIG --atleast-pkgconfig-version $SAMBA_PKG_CONFIG_MIN_VERSION; then
87                         AC_MSG_CHECKING(for $2)
88
89                         if $PKG_CONFIG --exists '$2' ; then
90                                 AC_MSG_RESULT(yes)
91
92                                 $1_CFLAGS="`$PKG_CONFIG --cflags '$2'`"
93                                 OLD_CFLAGS="$CFLAGS"
94                                 CFLAGS="$CFLAGS $$1_CFLAGS"
95                                 AC_MSG_CHECKING([that the C compiler can use the $1_CFLAGS])
96                                 AC_TRY_RUN([#include "${srcdir-.}/../tests/trivial.c"],
97                                         SMB_ENABLE($1, YES)
98                                         AC_MSG_RESULT(yes),
99                                         AC_MSG_RESULT(no),
100                                         AC_MSG_WARN([cannot run when cross-compiling]))
101                                 CFLAGS="$OLD_CFLAGS"
102
103                                 ac_cv_$1_libs_only_other="`$PKG_CONFIG --libs-only-other '$2'` `$PKG_CONFIG --libs-only-L '$2'`"
104                                 LIB_REMOVE_USR_LIB(ac_cv_$1_libs_only_other)
105                                 ac_cv_$1_includedir_only="`$PKG_CONFIG --cflags-only-I '$2'`"
106                                 CFLAGS_REMOVE_USR_INCLUDE(ac_cv_$1_includedir_only)
107                                 SMB_EXT_LIB($1, 
108                                         [`$PKG_CONFIG --libs-only-l '$2'`], 
109                                         [`$PKG_CONFIG --cflags-only-other '$2'`],
110                                         [$ac_cv_$1_includedir_only],
111                                         [$ac_cv_$1_libs_only_other])
112                                 ac_cv_$1_found=yes
113
114                         else
115                                 AC_MSG_RESULT(no)
116                                 $PKG_CONFIG --errors-to-stdout --print-errors '$2'
117                                 ac_cv_$1_found=no
118                         fi
119                 else
120                         echo "*** Your version of pkg-config is too old. You need version $SAMBA_PKG_CONFIG_MIN_VERSION or newer."
121                         echo "*** See http://pkg-config.freedesktop.org/"
122                         ac_cv_$1_found=no
123                 fi
124         fi
125         if test x$ac_cv_$1_found = x"yes"; then
126                 ifelse([$3], [], [echo -n ""], [$3])
127         else
128                 ifelse([$4], [], [
129                           SMB_EXT_LIB($1)
130                           SMB_ENABLE($1, NO)
131                 ], [$4])
132         fi
133 ])
134
135 dnl SMB_INCLUDED_LIB_PKGCONFIG(name,pkg-config name,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND])
136 AC_DEFUN([SMB_INCLUDED_LIB_PKGCONFIG],
137 [
138         AC_ARG_ENABLE([external-]translit($1,`A-Z',`a-z'),
139                 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)])
140
141         if test $enableval = yes -o $enableval = auto; then
142                 SMB_EXT_LIB_FROM_PKGCONFIG([$1], [$2], [$3], [
143                         if test $enableval = yes; then
144                                 AC_MSG_ERROR([Unable to find external $1])
145                         fi
146                         enableval=no
147                 ])
148         fi
149         if test $enableval = no; then
150                 ifelse([$4], [], [
151                           SMB_EXT_LIB($1)
152                           SMB_ENABLE($1, NO)
153                 ], [$4])
154         fi
155 ])
156
157 dnl SMB_INCLUDE_MK(file)
158 AC_DEFUN([SMB_INCLUDE_MK],
159 [
160 SMB_INFO_EXT_LIBS="$SMB_INFO_EXT_LIBS
161 mkinclude $1
162 "
163 ])
164
165 dnl
166 dnl SMB_EXT_LIB() just specifies the details of the library.
167 dnl Note: the library isn't enabled by default.
168 dnl You need to enable it with SMB_ENABLE(name) if configure
169 dnl find it should be used. E.g. it should not be enabled
170 dnl if the library is present, but the header file is missing.
171 dnl
172 dnl SMB_EXT_LIB(name,libs,cflags,cppflags,ldflags)
173 AC_DEFUN([SMB_EXT_LIB],
174 [
175 MAKE_SETTINGS="$MAKE_SETTINGS
176 $1_LIBS = $2
177 $1_CFLAGS = $3
178 $1_CPPFLAGS = $4
179 $1_LDFLAGS = $5
180 "
181
182 ])
183
184 dnl SMB_ENABLE(name,default_build)
185 AC_DEFUN([SMB_ENABLE],
186 [
187         MAKE_SETTINGS="$MAKE_SETTINGS
188 $1_ENABLE = $2
189 "
190 SMB_INFO_ENABLES="$SMB_INFO_ENABLES
191 \$enabled{\"$1\"} = \"$2\";"
192 ])
193
194 dnl SMB_MAKE_SETTINGS(text)
195 AC_DEFUN([SMB_MAKE_SETTINGS],
196 [
197 MAKE_SETTINGS="$MAKE_SETTINGS
198 $1
199 "
200 ])
201
202 dnl SMB_WRITE_MAKEVARS(path, skip_vars)
203 AC_DEFUN([SMB_WRITE_MAKEVARS],
204 [
205 echo "configure: creating $1"
206 cat >$1<<CEOF
207 # $1 - Autogenerated by configure, DO NOT EDIT!
208 $MAKE_SETTINGS
209 CEOF
210 skip_vars=" $2 "
211 for ac_var in $ac_subst_vars
212 do
213     eval ac_val=\$$ac_var
214         if echo "$skip_vars" | grep -v " $ac_var " >/dev/null 2>/dev/null; then
215                 echo "$ac_var = $ac_val" >> $1
216         fi
217 done
218 ])
219
220 dnl SMB_WRITE_PERLVARS(path)
221 AC_DEFUN([SMB_WRITE_PERLVARS],
222 [
223 echo "configure: creating $1"
224 cat >$1<<CEOF
225 # config.pm - Autogenerate by configure. DO NOT EDIT!
226
227 package config;
228 require Exporter;
229 @ISA = qw(Exporter);
230 @EXPORT_OK = qw(%enabled %config);
231 use strict;
232
233 use vars qw(%enabled %config);
234
235 %config = (
236 CEOF
237
238 for ac_var in $ac_subst_vars
239 do
240         eval ac_val=\$$ac_var
241         # quote ' (\x27) inside '...' and make sure \ isn't eaten by shells, so use perl:
242         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
243 done
244
245 cat >>$1<<CEOF
246 );
247 $SMB_INFO_ENABLES
248 1;
249 CEOF
250 ])
251
252 dnl SMB_BUILD_RUN(OUTPUT_FILE)
253 AC_DEFUN([SMB_BUILD_RUN],
254 [
255 AC_OUTPUT_COMMANDS(
256 [
257 test "x$ac_abs_srcdir" != "x$ac_abs_builddir" && (
258         cd $builddir;
259         # NOTE: We *must* use -R so we don't follow symlinks (at least on BSD
260         # systems).
261         test -d heimdal || cp -R $srcdir/heimdal $builddir/
262         test -d heimdal_build || cp -R $srcdir/heimdal_build $builddir/
263         test -d build || builddir="$builddir" \
264                         srcdir="$srcdir" \
265                         $PERL ${srcdir}/script/buildtree.pl
266  )
267
268 $PERL -I${builddir} -I${builddir}/build \
269     -I${srcdir} -I${srcdir}/build \
270     ${srcdir}/build/smb_build/main.pl --output=$1 main.mk || exit $?
271 ],
272 [
273 srcdir="$srcdir"
274 builddir="$builddir"
275 PERL="$PERL"
276
277 export PERL
278 export srcdir
279 export builddir
280 ])
281 ])