c816b75e350a74b229ef4ca734c63e7be9e4f0dc
[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.
24 #
25 AC_DEFUN([AMANDA_INIT_PROGS],
26 [
27     SYSPATH="/bin:/usr/bin:/sbin:/usr/sbin:/opt/SUNWspro/bin:/usr/ucb:/usr/sfw/bin:/usr/bsd:/etc:/usr/etc"
28     # expand prefix or exec_prefix in LOCPATH
29     LOCPATH=`(
30         test "x$prefix" = xNONE && prefix=$ac_default_prefix
31         test "x$exec_prefix" = xNONE && exec_prefix=${prefix}
32         eval echo "$libexecdir:$PATH:/usr/local/sbin:/usr/local/bin:/usr/ccs/bin"
33     )`
34     SYSLOCPATH="$SYSPATH:$LOCPATH"
35     LOCSYSPATH="$LOCPATH:$SYSPATH"
36 ])
37
38 # SYNOPSIS
39 #
40 #   AMANDA_PROG_LINT
41 #
42 # OVERVIEW
43 #
44 #   Find a lint binary (either lint or splint) and record its name in AMLINT.
45 #   Set up appropriate flags for the discovered binary in AMLINTFLAGS
46 #
47 AC_DEFUN([AMANDA_PROG_LINT],
48 [
49     AC_REQUIRE([AMANDA_INIT_PROGS])
50     AC_REQUIRE([AMANDA_PROG_GREP])
51
52     AC_PATH_PROG(AMLINT,lint,,/opt/SUNWspro/bin:$SYSLOCPATH)
53     if test ! -z "$AMLINT"; then
54       $AMLINT -flags 2>&1 | $GREP -- '-errfmt=' > /dev/null
55       if test $? -eq 0; then
56         AMLINTFLAGS="-n -s -u -m -x"
57         AMLINTFLAGS="$AMLINTFLAGS -errchk=%all"
58         AMLINTFLAGS="$AMLINTFLAGS -errfmt=macro"
59         AMLINTFLAGS="$AMLINTFLAGS -errhdr=no%/usr/include"
60         AMLINTFLAGS="$AMLINTFLAGS -errhdr=%user"
61         AMLINTFLAGS="$AMLINTFLAGS -errsecurity=extended"
62         AMLINTFLAGS="$AMLINTFLAGS -errtags=yes"
63         AMLINTFLAGS="$AMLINTFLAGS -Ncheck=%all"
64         AMLINTFLAGS="$AMLINTFLAGS -Nlevel=2"
65         AMLINTFLAGS="$AMLINTFLAGS -erroff=E_ASGN_NEVER_USED"
66         AMLINTFLAGS="$AMLINTFLAGS,E_ASGN_RESET"
67         AMLINTFLAGS="$AMLINTFLAGS,E_CAST_INT_CONST_TO_SMALL_INT"
68         AMLINTFLAGS="$AMLINTFLAGS,E_CAST_INT_TO_SMALL_INT"
69         AMLINTFLAGS="$AMLINTFLAGS,E_CAST_UINT_TO_SIGNED_INT"
70         AMLINTFLAGS="$AMLINTFLAGS,E_CONSTANT_CONDITION"
71         AMLINTFLAGS="$AMLINTFLAGS,E_ENUM_UNUSE"
72         AMLINTFLAGS="$AMLINTFLAGS,E_EXPR_NULL_EFFECT"
73         AMLINTFLAGS="$AMLINTFLAGS,E_FUNC_RET_ALWAYS_IGNOR"
74         AMLINTFLAGS="$AMLINTFLAGS,E_FUNC_RET_MAYBE_IGNORED"
75         AMLINTFLAGS="$AMLINTFLAGS,E_H_C_CHECK0"
76         AMLINTFLAGS="$AMLINTFLAGS,E_H_C_CHECK1"
77         AMLINTFLAGS="$AMLINTFLAGS,E_H_C_CHECK2"
78         AMLINTFLAGS="$AMLINTFLAGS,E_INCL_MNUSD"
79         AMLINTFLAGS="$AMLINTFLAGS,E_INCL_NUSD"
80         AMLINTFLAGS="$AMLINTFLAGS,E_MCR_NODIFF"
81         AMLINTFLAGS="$AMLINTFLAGS,E_NAME_MULTIPLY_DEF"
82         AMLINTFLAGS="$AMLINTFLAGS,E_P_REF_NULL_PSBL"
83         AMLINTFLAGS="$AMLINTFLAGS,E_P_REF_SUSP"
84         AMLINTFLAGS="$AMLINTFLAGS,E_PTRDIFF_OVERFLOW"
85         AMLINTFLAGS="$AMLINTFLAGS,E_P_USE_NULL_PSBL"
86         AMLINTFLAGS="$AMLINTFLAGS,E_P_USE_SUSP"
87         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_ACCESS_WARN"
88         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_CHDIR_WARN"
89         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_CHMOD_WARN"
90         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_CREAT_WITHOUT_EXCL"
91         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_EXEC_PATH"
92         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_EXEC_WARN"
93         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_FOPEN_MODE"
94         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_GETENV_WARN"
95         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_MKDIR_WARN"
96         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_PRINTF_VAR_FMT"
97         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_RAND_WARN"
98         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_SCANF_VAR_FMT"
99         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_SELECT_WARN"
100         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_SHELL_WARN"
101         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_STRNCPY_WARN"
102         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_UMASK_WARN"
103         AMLINTFLAGS="$AMLINTFLAGS,E_SEC_USE_AFTER_STAT"
104         AMLINTFLAGS="$AMLINTFLAGS,E_SIGN_EXTENSION_PSBL"
105         AMLINTFLAGS="$AMLINTFLAGS,E_TYPEDEF_UNUSE"
106         AMLINTFLAGS="$AMLINTFLAGS,E_UNCAL_F"
107       else
108         AMLINTFLAGS=""
109       fi
110     else
111       AC_PATH_PROG(AMLINT,splint,,$SYSLOCPATH)
112       if test ! -z "$AMLINT"; then
113         AMLINT="splint"
114         AMLINTFLAGS='+show-scan +unixlib -weak -globs +usedef +usereleased +impouts -paramimptemp -varuse -warnposix -redef -preproc -fixedformalarray -retval -unrecog -usevarargs -formatcode'
115       else
116         AMLINT='echo "Error: LINT is not installed" ; false'
117         AMLINTFLAGS=''
118       fi
119     fi
120     AC_SUBST(AMLINTFLAGS)
121 ])
122
123 # SYNOPSIS
124 #
125 #   AMANDA_PROG_GNUPLOT
126 #
127 # OVERVIEW
128 #
129 #   Search for a 'gnuplot' binary, placing the result in the precious 
130 #   variable GNUPLOT.  Also accepts --with-gnuplot to indicate the location
131 #   of the binary.
132 #
133 AC_DEFUN([AMANDA_PROG_GNUPLOT],
134 [
135     AC_REQUIRE([AMANDA_INIT_PROGS])
136
137     AC_ARG_WITH(gnuplot,
138     AS_HELP_STRING([--with-gnuplot=PATH],
139                    [use gnuplot executable at PATH in amplot]),
140         [
141             case "$withval" in
142                 y | ye | yes) : ;;
143                 n | no) GNUPLOT= ;;
144                 *) GNUPLOT="$withval" ;;
145             esac
146         ])
147     AC_PATH_PROG(GNUPLOT,gnuplot,,$LOCSYSPATH)
148
149     AC_ARG_VAR(GNUPLOT, [Location of the 'gnuplot' binary])
150     AC_SUBST(GNUPLOT)
151 ])
152
153 # SYNOPSIS
154 #
155 #   AMANDA_PROG_PRINT
156 #
157 # OVERVIEW
158 #
159 #   Search for a binary for printing, usually either 'lp' or 'lpr', and put its
160 #   path in PRINT, as well as defining it in LPRCMD in config.h.
161 #
162 #   LPRFLAG is defined in config.h as the appropriate command-line flag to use 
163 #   to select a printer; either -P or -d.
164 #
165 AC_DEFUN([AMANDA_PROG_PRINT],
166 [
167     AC_REQUIRE([AMANDA_INIT_PROGS])
168
169     AC_PATH_PROGS(PRINT, lpr lp)
170     if test ! -z "$PRINT"; then
171         AC_DEFINE_UNQUOTED(LPRCMD, "$PRINT",
172                 [Command for starting printing jobs. ])
173
174         AC_CACHE_CHECK([which flag to use to select a printer],
175             amanda_cv_printer_flag, [
176             amanda_cv_printer_flag=$PRINTER_FLAG
177             case "$PRINT" in
178                 lpr|*/lpr) amanda_cv_printer_flag="-P";;
179                 lp|*/lp) amanda_cv_printer_flag="-d";;
180             esac
181         ])
182         if test ! -z "$amanda_cv_printer_flag"; then
183             AC_DEFINE_UNQUOTED(LPRFLAG, "$amanda_cv_printer_flag",
184                     [LPRCMD switch for specifying a printer name. ])
185         else
186             AMANDA_MSG_WARN([WARNING: amanda will always print to the default printer])
187         fi
188     fi
189 ])
190
191 # SYNOPSIS
192 #
193 #   AMANDA_PROG_GNUPLOT
194 #
195 # OVERVIEW
196 #
197 #   Search for a 'gnuplot' binary, placing the result in the precious 
198 #   variable GNUPLOT.  Also accepts --with-gnuplot to indicate the location
199 #   of the binary.
200 #
201 AC_DEFUN([AMANDA_PROG_GNUPLOT],
202 [
203     AC_REQUIRE([AMANDA_INIT_PROGS])
204
205     AC_ARG_WITH(gnuplot,
206     AS_HELP_STRING([--with-gnuplot=PATH],
207                    [use gnuplot executable at PATH in amplot]),
208         [
209             case "$withval" in
210                 y | ye | yes) : ;;
211                 n | no) GNUPLOT=no ;;
212                 *) GNUPLOT="$withval" ;;
213             esac
214         ])
215     if test "x$GNUPLOT" = "xno"; then
216         GNUPLOT=
217     else
218         AC_PATH_PROG(GNUPLOT,gnuplot,,$LOCSYSPATH)
219     fi
220
221     AC_ARG_VAR(GNUPLOT, [Location of the 'gnuplot' binary])
222     AC_SUBST(GNUPLOT)
223 ])
224
225 ## simple macros needing no description; some add AC_DEFINE_UNQUOTED
226
227 AC_DEFUN([AMANDA_PROG_GREP],
228 [
229     AC_REQUIRE([AMANDA_INIT_PROGS])
230     AC_PATH_PROG(GREP,grep,grep,$LOCSYSPATH)
231     AC_DEFINE_UNQUOTED(GREP,"$GREP",
232             [Define the location of the grep program. ])
233 ])
234
235 AC_DEFUN([AMANDA_PROG_CAT],
236 [
237     AC_REQUIRE([AMANDA_INIT_PROGS])
238     AC_PATH_PROG(CAT,cat,cat,$LOCSYSPATH)
239 ])
240
241 AC_DEFUN([AMANDA_PROG_COMPRESS],
242 [
243     AC_REQUIRE([AMANDA_INIT_PROGS])
244     AC_PATH_PROG(COMPRESS,compress,,$LOCSYSPATH)
245 ])
246
247 AC_DEFUN([AMANDA_PROG_DD],
248 [
249     AC_REQUIRE([AMANDA_INIT_PROGS])
250     AC_PATH_PROG(DD,dd,,$LOCSYSPATH)
251 ])
252
253 AC_DEFUN([AMANDA_PROG_GETCONF],
254 [
255     AC_REQUIRE([AMANDA_INIT_PROGS])
256     AC_PATH_PROG(GETCONF,getconf,,$SYSPATH)
257 ])
258
259 AC_DEFUN([AMANDA_PROG_GZIP],
260 [
261     AC_REQUIRE([AMANDA_INIT_PROGS])
262     AC_PATH_PROG(GZIP,gzip,,$LOCSYSPATH)
263 ])
264
265 AC_DEFUN([AMANDA_PROG_SORT],
266 [
267     AC_REQUIRE([AMANDA_INIT_PROGS])
268     AC_REQUIRE([AMANDA_CHECK_COMPONENTS])
269
270     AC_PATH_PROG(SORT,sort,NONE,$LOCSYSPATH)
271
272     # sort is only needed in the server build
273     if test x"$SORT" = x"NONE" && $WANT_SERVER; then
274         AC_MSG_ERROR([Set SORT to the path of the sort program.])
275     fi
276
277     AC_DEFINE_UNQUOTED(SORT_PATH,"$SORT",
278             [Define to the exact path to the sort program. ])
279 ])
280
281 AC_DEFUN([AMANDA_PROG_MAILER],
282 [
283     AC_REQUIRE([AMANDA_INIT_PROGS])
284     AC_PATH_PROGS(MAILER,Mail mailx mail,NONE)
285     if test x"$MAILER" = x"NONE"; then
286         AMANDA_MSG_WARN([WARNING: Amanda cannot send mail reports without a mailer.])
287         DEFAULT_MAILER=""
288     else
289         DEFAULT_MAILER="$MAILER"
290     fi
291     AC_DEFINE_UNQUOTED(DEFAULT_MAILER,"$DEFAULT_MAILER",
292                 [A program that understands -s "subject" user < message_file])
293     AC_SUBST(DEFAULT_MAILER)
294 ])
295
296 # SYNOPSIS
297 #
298 #   AMANDA_PROG_MT
299 #
300 # OVERVIEW
301 #   
302 #   Find and SUBST 'mt', and additionally calculate the proper flag to use
303 #   to identify the tape device (usually -f) and DEFINE and SUBST that value
304 #   as MT_FILE_FLAG.
305 #
306 AC_DEFUN([AMANDA_PROG_MT],
307 [
308     AC_REQUIRE([AMANDA_INIT_PROGS])
309     AC_PATH_PROG(MT,mt,mt,$LOCSYSPATH)
310
311     case "$target" in
312         *-hp-*) MT_FILE_FLAG="-t" ;;
313         *) MT_FILE_FLAG="-f" ;;
314     esac
315
316     AC_SUBST(MT_FILE_FLAG)
317     AC_DEFINE_UNQUOTED(MT_FILE_FLAG, "$MT_FILE_FLAG",
318   [The switch to be used when invoking mt to specify the
319  * tape device. ])
320 ])
321
322
323 AC_DEFUN([AMANDA_PROG_CHIO],
324 [
325     AC_REQUIRE([AMANDA_INIT_PROGS])
326     AC_PATH_PROG(CHIO,chio,chio,$LOCSYSPATH)
327 ])
328
329
330 AC_DEFUN([AMANDA_PROG_CHS],
331 [
332     AC_REQUIRE([AMANDA_INIT_PROGS])
333     AC_PATH_PROG(CHS,chs,chs,$LOCSYSPATH)
334 ])
335
336
337 AC_DEFUN([AMANDA_PROG_MTX],
338 [
339     AC_REQUIRE([AMANDA_INIT_PROGS])
340     AC_PATH_PROG(MTX,mtx,mtx,$LOCSYSPATH)
341 ])
342
343 AC_DEFUN([AMANDA_PROG_MCUTIL],
344 [
345     AC_REQUIRE([AMANDA_INIT_PROGS])
346     AC_PATH_PROG(MCUTIL,mcutil,mcutil,$LOCSYSPATH)
347 ])
348
349 AC_DEFUN([AMANDA_PROG_PCAT],
350 [
351     AC_REQUIRE([AMANDA_INIT_PROGS])
352     AC_PATH_PROG(PCAT,pcat,,$LOCSYSPATH)
353 ])
354
355 AC_DEFUN([AMANDA_PROG_PERL],
356 [
357     AC_REQUIRE([AMANDA_INIT_PROGS])
358     AC_PATH_PROGS(PERL,perl5 perl,,$LOCSYSPATH)
359     AC_ARG_VAR([PERL], [Path to the 'perl' binary])
360     AC_PROG_PERL_VERSION([5.6.0], [], [
361         AC_MSG_ERROR([Amanda requires at least perl 5.6.0])
362     ])
363 ])
364
365 AC_DEFUN([AMANDA_PROG_SWIG],
366 [
367     AC_REQUIRE([AMANDA_INIT_PROGS])
368     AC_PATH_PROGS(SWIG,swig,,$LOCSYSPATH)
369     AC_ARG_VAR([SWIG], [Path to the 'swig' binary (developers only)])
370     AC_PROG_SWIG([1.3.28])
371 ])
372
373 AC_DEFUN([AMANDA_PROG_AR],
374 [
375     AC_REQUIRE([AMANDA_INIT_PROGS])
376     AC_PATH_PROG(AR,ar,,$LOCSYSPATH)
377 ])
378
379 AC_DEFUN([AMANDA_PROG_BASH],
380 [
381     AC_REQUIRE([AMANDA_INIT_PROGS])
382     AC_PATH_PROG(BASH,bash,,$SYSPATH)
383 ])
384
385 AC_DEFUN([AMANDA_PROG_SSH],
386 [
387     AC_REQUIRE([AMANDA_INIT_PROGS])
388     AC_PATH_PROGS(SSH, ssh, , $LOCSYSPATH)
389     AC_DEFINE_UNQUOTED(SSH, "$SSH", [Path to the SSH binary])
390 ])
391
392 AC_DEFUN([AMANDA_PROG_GETTEXT],
393 [
394     AC_REQUIRE([AMANDA_INIT_PROGS])
395     AC_PATH_PROG(GETTEXT,gettext,,$LOCSYSPATH)
396 ])