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