Imported Upstream version 3.2.0
[debian/amanda] / config / amanda / progs.m4
1 # OVERVIEW
2 #
3 #   Code to handle searches for programs Amanda needs.
4 #
5 #   Because Amanda uses a customized search path, many macros which are standard
6 #   in autoconf have been wrapped here.  Where this is the only change, the description
7 #   of those macros has been omitted.
8 #
9 #   All of these macros indicate their requirements using AC_REQUIRE, so the order in
10 #   which they are called in configure.in is inconsequential.
11
12 # SYNOPSIS
13 #
14 #   AMANDA_INIT_PROGS
15 #
16 # OVERVIEW
17 #
18 #   Set up some amanda-specific path directories.  This should be AC_REQUIRE()d by
19 #   any macros which need to search for a program.
20 #
21 #   SYSPATH is a list of likely system locations for a file, while
22 #   LOCPATH is a list of likely local locations.  The two are combined
23 #   in different orders in SYSLOCPATH and LOCSYSPATH.  These path differences
24 #   are known to affect Solaris 8.
25 #
26 AC_DEFUN([AMANDA_INIT_PROGS],
27 [
28     SYSPATH="/bin:/usr/bin:/sbin:/usr/sbin:/opt/SUNWspro/bin:/usr/ucb:/usr/sfw/bin:/usr/bsd:/etc:/usr/etc"
29     # expand prefix or exec_prefix in LOCPATH
30     LOCPATH=`(
31         test "x$prefix" = xNONE && prefix=$ac_default_prefix
32         test "x$exec_prefix" = xNONE && exec_prefix=${prefix}
33         eval echo "$libexecdir:$PATH:/usr/local/sbin:/usr/local/bin:/usr/ccs/bin"
34     )`
35     SYSLOCPATH="$SYSPATH:$LOCPATH"
36     LOCSYSPATH="$LOCPATH:$SYSPATH"
37 ])
38
39 # SYNOPSIS
40 #
41 #   AMANDA_PROG_LINT
42 #
43 # OVERVIEW
44 #
45 #   Find a lint binary (either lint or splint) and record its name in AMLINT.
46 #   Set up appropriate flags for the discovered binary in AMLINTFLAGS
47 #
48 AC_DEFUN([AMANDA_PROG_LINT],
49 [
50     AC_REQUIRE([AMANDA_INIT_PROGS])
51     AC_REQUIRE([AMANDA_PROG_GREP])
52
53     AC_PATH_PROG(AMLINT,lint,,/opt/SUNWspro/bin:$SYSLOCPATH)
54     if test ! -z "$AMLINT"; then
55       $AMLINT -flags 2>&1 | $GREP -- '-errfmt=' > /dev/null
56       if test $? -eq 0; then
57         AMLINTFLAGS="-n -s -u -m -x"
58         AMLINTFLAGS="$AMLINTFLAGS -errchk=%all"
59         AMLINTFLAGS="$AMLINTFLAGS -errfmt=macro"
60         AMLINTFLAGS="$AMLINTFLAGS -errhdr=no%/usr/include"
61         AMLINTFLAGS="$AMLINTFLAGS -errhdr=%user"
62         AMLINTFLAGS="$AMLINTFLAGS -errsecurity=extended"
63         AMLINTFLAGS="$AMLINTFLAGS -errtags=yes"
64         AMLINTFLAGS="$AMLINTFLAGS -Ncheck=%all"
65         AMLINTFLAGS="$AMLINTFLAGS -Nlevel=2"
66         AMLINTFLAGS="$AMLINTFLAGS -erroff=E_ASGN_NEVER_USED"
67         AMLINTFLAGS="$AMLINTFLAGS,E_ASGN_RESET"
68         AMLINTFLAGS="$AMLINTFLAGS,E_CAST_INT_CONST_TO_SMALL_INT"
69         AMLINTFLAGS="$AMLINTFLAGS,E_CAST_INT_TO_SMALL_INT"
70         AMLINTFLAGS="$AMLINTFLAGS,E_CAST_UINT_TO_SIGNED_INT"
71         AMLINTFLAGS="$AMLINTFLAGS,E_CONSTANT_CONDITION"
72         AMLINTFLAGS="$AMLINTFLAGS,E_ENUM_UNUSE"
73         AMLINTFLAGS="$AMLINTFLAGS,E_EXPR_NULL_EFFECT"
74         AMLINTFLAGS="$AMLINTFLAGS,E_FUNC_RET_ALWAYS_IGNOR"
75         AMLINTFLAGS="$AMLINTFLAGS,E_FUNC_RET_MAYBE_IGNORED"
76         AMLINTFLAGS="$AMLINTFLAGS,E_H_C_CHECK0"
77         AMLINTFLAGS="$AMLINTFLAGS,E_H_C_CHECK1"
78         AMLINTFLAGS="$AMLINTFLAGS,E_H_C_CHECK2"
79         AMLINTFLAGS="$AMLINTFLAGS,E_INCL_MNUSD"
80         AMLINTFLAGS="$AMLINTFLAGS,E_INCL_NUSD"
81         AMLINTFLAGS="$AMLINTFLAGS,E_MCR_NODIFF"
82         AMLINTFLAGS="$AMLINTFLAGS,E_NAME_MULTIPLY_DEF"
83         AMLINTFLAGS="$AMLINTFLAGS,E_P_REF_NULL_PSBL"
84         AMLINTFLAGS="$AMLINTFLAGS,E_P_REF_SUSP"
85         AMLINTFLAGS="$AMLINTFLAGS,E_PTRDIFF_OVERFLOW"
86         AMLINTFLAGS="$AMLINTFLAGS,E_P_USE_NULL_PSBL"
87         AMLINTFLAGS="$AMLINTFLAGS,E_P_USE_SUSP"
88         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_ACCESS_WARN"
89         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_CHDIR_WARN"
90         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_CHMOD_WARN"
91         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_CREAT_WITHOUT_EXCL"
92         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_EXEC_PATH"
93         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_EXEC_WARN"
94         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_FOPEN_MODE"
95         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_GETENV_WARN"
96         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_MKDIR_WARN"
97         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_PRINTF_VAR_FMT"
98         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_RAND_WARN"
99         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_SCANF_VAR_FMT"
100         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_SELECT_WARN"
101         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_SHELL_WARN"
102         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_STRNCPY_WARN"
103         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_UMASK_WARN"
104         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_USE_AFTER_STAT"
105         AMLINTFLAGS="$AMLINTFLAGS,E_SIGN_EXTENSION_PSBL"
106         AMLINTFLAGS="$AMLINTFLAGS,E_TYPEDEF_UNUSE"
107         AMLINTFLAGS="$AMLINTFLAGS,E_UNCAL_F"
108       else
109         AMLINTFLAGS=""
110       fi
111     else
112       AC_PATH_PROG(AMLINT,splint,,$SYSLOCPATH)
113       if test ! -z "$AMLINT"; then
114         AMLINT="splint"
115         AMLINTFLAGS='+show-scan +unixlib -weak -globs +usedef +usereleased +impouts -paramimptemp -varuse -warnposix -redef -preproc -fixedformalarray -retval -unrecog -usevarargs -formatcode'
116       else
117         AMLINT='echo "Error: LINT is not installed" ; false'
118         AMLINTFLAGS=''
119       fi
120     fi
121     AC_SUBST(AMLINTFLAGS)
122 ])
123
124 # SYNOPSIS
125 #
126 #   AMANDA_PROG_LPR
127 #
128 # OVERVIEW
129 #
130 #   Search for a binary for printing, usually either 'lp' or 'lpr', and put its
131 #   path in LPR.
132 #
133 #   LPRFLAG is substituted as the appropriate command-line flag to use 
134 #   to select a printer; either -P or -d.
135 #
136 AC_DEFUN([AMANDA_PROG_LPR],
137 [
138     AC_REQUIRE([AMANDA_INIT_PROGS])
139
140     AC_PATH_PROGS(LPR, lpr lp)
141     if test ! -z "$LPR"; then
142         AC_DEFINE([HAVE_LPR_CMD], [1],
143             [Set to 1 if an LPR command was found at configure time])
144
145         AC_CACHE_CHECK([which flag to use to select a printer],
146             amanda_cv_printer_flag, [
147             amanda_cv_printer_flag=$LPRFLAG
148             case "$LPR" in
149                 lpr|*/lpr) amanda_cv_printer_flag="-P";;
150                 lp|*/lp) amanda_cv_printer_flag="-d";;
151             esac
152         ])
153         if test -z "$amanda_cv_printer_flag"; then
154             AMANDA_MSG_WARN([WARNING: amanda will always print to the default printer])
155         fi
156     fi
157
158     AC_SUBST([LPR])
159     AC_SUBST([LPRFLAG])
160 ])
161
162 # SYNOPSIS
163 #
164 #   AMANDA_PROG_GNUPLOT
165 #
166 # OVERVIEW
167 #
168 #   Search for a 'gnuplot' binary, placing the result in the precious 
169 #   variable GNUPLOT.  Also accepts --with-gnuplot to indicate the location
170 #   of the binary.
171 #
172 AC_DEFUN([AMANDA_PROG_GNUPLOT],
173 [
174     AC_REQUIRE([AMANDA_INIT_PROGS])
175
176     AC_ARG_WITH(gnuplot,
177     AS_HELP_STRING([--with-gnuplot=PATH],
178                    [use gnuplot executable at PATH in amplot]),
179         [
180             case "$withval" in
181                 y | ye | yes) : ;;
182                 n | no) GNUPLOT=no ;;
183                 *) GNUPLOT="$withval" ;;
184             esac
185         ])
186     if test "x$GNUPLOT" = "xno"; then
187         GNUPLOT=
188     else
189         AC_PATH_PROG(GNUPLOT,gnuplot,,$LOCSYSPATH)
190     fi
191
192     AC_ARG_VAR(GNUPLOT, [Location of the 'gnuplot' binary])
193     AC_SUBST(GNUPLOT)
194 ])
195
196 ## simple macros needing no description; some add AC_DEFINE_UNQUOTED
197
198 AC_DEFUN([AMANDA_PROG_GREP],
199 [
200     AC_REQUIRE([AMANDA_INIT_PROGS])
201     AC_PATH_PROG(GREP,grep,grep,$LOCSYSPATH)
202     AC_DEFINE_UNQUOTED(GREP,"$GREP",
203             [Define the location of the grep program. ])
204 ])
205
206 AC_DEFUN([AMANDA_PROG_CAT],
207 [
208     AC_REQUIRE([AMANDA_INIT_PROGS])
209     AC_PATH_PROG(CAT,cat,cat,$LOCSYSPATH)
210 ])
211
212 AC_DEFUN([AMANDA_PROG_COMPRESS],
213 [
214     AC_REQUIRE([AMANDA_INIT_PROGS])
215     AC_PATH_PROG(COMPRESS,compress,,$LOCSYSPATH)
216 ])
217
218 AC_DEFUN([AMANDA_PROG_DD],
219 [
220     AC_REQUIRE([AMANDA_INIT_PROGS])
221     AC_PATH_PROG(DD,dd,,$LOCSYSPATH)
222 ])
223
224 AC_DEFUN([AMANDA_PROG_GETCONF],
225 [
226     AC_REQUIRE([AMANDA_INIT_PROGS])
227     AC_PATH_PROG(GETCONF,getconf,,$SYSPATH)
228 ])
229
230 AC_DEFUN([AMANDA_PROG_GZIP],
231 [
232     AC_REQUIRE([AMANDA_INIT_PROGS])
233     AC_PATH_PROG(GZIP,gzip,,$LOCSYSPATH)
234 ])
235
236 AC_DEFUN([AMANDA_PROG_SORT],
237 [
238     AC_REQUIRE([AMANDA_INIT_PROGS])
239     AC_REQUIRE([AMANDA_CHECK_COMPONENTS])
240
241     AC_PATH_PROG(SORT,sort,NONE,$LOCSYSPATH)
242
243     # sort is only needed in the server build
244     if test x"$SORT" = x"NONE" && $WANT_SERVER; then
245         AC_MSG_ERROR([Set SORT to the path of the sort program.])
246     fi
247
248     AC_DEFINE_UNQUOTED(SORT_PATH,"$SORT",
249             [Define to the exact path to the sort program. ])
250 ])
251
252 AC_DEFUN([AMANDA_PROG_MAILER],
253 [
254     AC_REQUIRE([AMANDA_INIT_PROGS])
255     AC_PATH_PROGS(MAILER,Mail mailx mail,NONE)
256     if test x"$MAILER" = x"NONE"; then
257         AMANDA_MSG_WARN([WARNING: Amanda cannot send mail reports without a mailer.])
258         DEFAULT_MAILER=""
259     else
260         DEFAULT_MAILER="$MAILER"
261     fi
262     AC_DEFINE_UNQUOTED(DEFAULT_MAILER,"$DEFAULT_MAILER",
263                 [A program that understands -s "subject" user < message_file])
264     AC_SUBST(DEFAULT_MAILER)
265 ])
266
267 # SYNOPSIS
268 #
269 #   AMANDA_PROG_MT
270 #
271 # OVERVIEW
272 #   
273 #   Find and SUBST 'mt', and additionally calculate the proper flag to use
274 #   to identify the tape device (usually -f) and DEFINE and SUBST that value
275 #   as MT_FILE_FLAG.
276 #
277 AC_DEFUN([AMANDA_PROG_MT],
278 [
279     AC_REQUIRE([AMANDA_INIT_PROGS])
280     AC_PATH_PROG(MT,mt,mt,$SYSLOCPATH)
281
282     case "$host" in
283         *-hp-*) MT_FILE_FLAG="-t" ;;
284         *) MT_FILE_FLAG="-f" ;;
285     esac
286
287     AC_SUBST(MT_FILE_FLAG)
288     AC_DEFINE_UNQUOTED(MT_FILE_FLAG, "$MT_FILE_FLAG",
289   [The switch to be used when invoking mt to specify the
290  * tape device. ])
291 ])
292
293
294 AC_DEFUN([AMANDA_PROG_MTX],
295 [
296     AC_REQUIRE([AMANDA_INIT_PROGS])
297     AC_PATH_PROG(MTX,mtx,mtx,$LOCSYSPATH)
298     AC_ARG_VAR([MTX], [Path to the 'mtx' binary])
299 ])
300
301 AC_DEFUN([AMANDA_PROG_PCAT],
302 [
303     AC_REQUIRE([AMANDA_INIT_PROGS])
304     AC_PATH_PROG(PCAT,pcat,,$LOCSYSPATH)
305 ])
306
307 AC_DEFUN([AMANDA_PROG_PERL],
308 [
309     AC_REQUIRE([AMANDA_INIT_PROGS])
310     AC_PATH_PROGS(PERL,perl5 perl,,$LOCSYSPATH)
311     AC_ARG_VAR([PERL], [Path to the 'perl' binary])
312     AC_PROG_PERL_VERSION([5.6.0], [], [
313         AC_MSG_ERROR([Amanda requires at least perl 5.6.0])
314     ])
315 ])
316
317 AC_DEFUN([AMANDA_PROG_SWIG],
318 [
319     AC_REQUIRE([AMANDA_INIT_PROGS])
320     AC_PATH_PROGS(SWIG,swig,,$LOCSYSPATH)
321     AC_ARG_VAR([SWIG], [Path to the 'swig' binary (developers only)])
322     # 1.3.32 introduces a change in the way empty strings are handled (old versions
323     # returned undef in Perl, while new versions return an empty Perl string)
324     # 1.3.39 is required for the %begin block
325     AC_PROG_SWIG([1.3.39])
326 ])
327
328 AC_DEFUN([AMANDA_PROG_AR],
329 [
330     AC_REQUIRE([AMANDA_INIT_PROGS])
331     AC_PATH_PROG(AR,ar,,$LOCSYSPATH)
332 ])
333
334 AC_DEFUN([AMANDA_PROG_BASH],
335 [
336     AC_REQUIRE([AMANDA_INIT_PROGS])
337     AC_PATH_PROG(BASH,bash,,$SYSPATH)
338 ])
339
340 AC_DEFUN([AMANDA_PROG_SSH],
341 [
342     AC_REQUIRE([AMANDA_INIT_PROGS])
343     AC_PATH_PROGS(SSH, ssh, , $LOCSYSPATH)
344     AC_DEFINE_UNQUOTED(SSH, "$SSH", [Path to the SSH binary])
345 ])
346
347 AC_DEFUN([AMANDA_PROG_GETTEXT],
348 [
349     AC_REQUIRE([AMANDA_INIT_PROGS])
350     AC_PATH_PROG(GETTEXT,gettext,,$LOCSYSPATH)
351 ])
352
353 AC_DEFUN([AMANDA_PROG_RPCGEN],
354 [
355     AC_REQUIRE([AMANDA_INIT_PROGS])
356     AC_PATH_PROG(RPCGEN,rpcgen,,$LOCSYSPATH)
357 ])
358
359 AC_DEFUN([AMANDA_PROG_LEX],
360 [
361     AC_REQUIRE([AM_PROG_LEX])
362     AC_REQUIRE([AMANDA_PROG_GREP])
363     if test x"$LEX" != x""; then
364         AC_MSG_CHECKING([whether lex is broken Solaris (SGU) lex])
365         $LEX -V < /dev/null >/dev/null 2>conftest.out
366         if grep SGU conftest.out >/dev/null; then
367             AC_MSG_RESULT([yes - disabled (set LEX=/path/to/lex to use a specific binary)])
368             LEX='echo no lex equivalent available; false'
369         else
370             AC_MSG_RESULT([no])
371         fi
372         rm conftest.out
373     fi
374 ])
375