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