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