79babba8ab6bdd980c24f965e2dd74b347be54e1
[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       else
115         AMLINT='echo "Error: LINT is not installed" ; false'
116       fi
117       AMLINTFLAGS='+show-scan +unixlib -weak -globs +usedef +usereleased +impouts -paramimptemp -varuse -warnposix -redef -preproc -fixedformalarray -retval -unrecog -usevarargs -formatcode'
118     fi
119     AC_SUBST(AMLINTFLAGS)
120 ])
121
122 # SYNOPSIS
123 #
124 #   AMANDA_PROG_GNUPLOT
125 #
126 # OVERVIEW
127 #
128 #   Search for a 'gnuplot' binary, placing the result in the precious 
129 #   variable GNUPLOT.  Also accepts --with-gnuplot to indicate the location
130 #   of the binary.
131 #
132 AC_DEFUN([AMANDA_PROG_GNUPLOT],
133 [
134     AC_REQUIRE([AMANDA_INIT_PROGS])
135
136     AC_ARG_WITH(gnuplot,
137     AS_HELP_STRING([--with-gnuplot=PATH],
138                    [use gnuplot executable at PATH in amplot]),
139         [
140             case "$withval" in
141                 y | ye | yes) : ;;
142                 n | no) GNUPLOT= ;;
143                 *) GNUPLOT="$withval" ;;
144             esac
145         ])
146     AC_PATH_PROG(GNUPLOT,gnuplot,,$LOCSYSPATH)
147
148     AC_ARG_VAR(GNUPLOT, [Location of the 'gnuplot' binary])
149     AC_SUBST(GNUPLOT)
150 ])
151
152 # SYNOPSIS
153 #
154 #   AMANDA_PROG_PRINT
155 #
156 # OVERVIEW
157 #
158 #   Search for a binary for printing, usually either 'lp' or 'lpr', and put its
159 #   path in PRINT, as well as defining it in LPRCMD in config.h.
160 #
161 #   LPRFLAG is defined in config.h as the appropriate command-line flag to use 
162 #   to select a printer; either -P or -d.
163 #
164 AC_DEFUN([AMANDA_PROG_PRINT],
165 [
166     AC_REQUIRE([AMANDA_INIT_PROGS])
167
168     AC_PATH_PROGS(PRINT, lpr lp)
169     if test ! -z "$PRINT"; then
170         AC_DEFINE_UNQUOTED(LPRCMD, "$PRINT",
171                 [Command for starting printing jobs. ])
172
173         AC_CACHE_CHECK([which flag to use to select a printer],
174             amanda_cv_printer_flag, [
175             amanda_cv_printer_flag=$PRINTER_FLAG
176             case "$PRINT" in
177                 lpr|*/lpr) amanda_cv_printer_flag="-P";;
178                 lp|*/lp) amanda_cv_printer_flag="-d";;
179             esac
180         ])
181         if test ! -z "$amanda_cv_printer_flag"; then
182             AC_DEFINE_UNQUOTED(LPRFLAG, "$amanda_cv_printer_flag",
183                     [LPRCMD switch for specifying a printer name. ])
184         else
185             AMANDA_MSG_WARN([WARNING: amanda will always print to the default printer])
186         fi
187     fi
188 ])
189
190 # SYNOPSIS
191 #
192 #   AMANDA_PROG_GNUPLOT
193 #
194 # OVERVIEW
195 #
196 #   Search for a 'gnuplot' binary, placing the result in the precious 
197 #   variable GNUPLOT.  Also accepts --with-gnuplot to indicate the location
198 #   of the binary.
199 #
200 AC_DEFUN([AMANDA_PROG_GNUPLOT],
201 [
202     AC_REQUIRE([AMANDA_INIT_PROGS])
203
204     AC_ARG_WITH(gnuplot,
205     AS_HELP_STRING([--with-gnuplot=PATH],
206                    [use gnuplot executable at PATH in amplot]),
207         [
208             case "$withval" in
209                 y | ye | yes) : ;;
210                 n | no) GNUPLOT=no ;;
211                 *) GNUPLOT="$withval" ;;
212             esac
213         ])
214     if test "x$GNUPLOT" = "xno"; then
215         GNUPLOT=
216     else
217         AC_PATH_PROG(GNUPLOT,gnuplot,,$LOCSYSPATH)
218     fi
219
220     AC_ARG_VAR(GNUPLOT, [Location of the 'gnuplot' binary])
221     AC_SUBST(GNUPLOT)
222 ])
223
224 ## simple macros needing no description; some add AC_DEFINE_UNQUOTED
225
226 AC_DEFUN([AMANDA_PROG_GREP],
227 [
228     AC_REQUIRE([AMANDA_INIT_PROGS])
229     AC_PATH_PROG(GREP,grep,grep,$LOCSYSPATH)
230     AC_DEFINE_UNQUOTED(GREP,"$GREP",
231             [Define the location of the grep program. ])
232 ])
233
234 AC_DEFUN([AMANDA_PROG_CAT],
235 [
236     AC_REQUIRE([AMANDA_INIT_PROGS])
237     AC_PATH_PROG(CAT,cat,cat,$LOCSYSPATH)
238 ])
239
240 AC_DEFUN([AMANDA_PROG_COMPRESS],
241 [
242     AC_REQUIRE([AMANDA_INIT_PROGS])
243     AC_PATH_PROG(COMPRESS,compress,,$LOCSYSPATH)
244 ])
245
246 AC_DEFUN([AMANDA_PROG_DD],
247 [
248     AC_REQUIRE([AMANDA_INIT_PROGS])
249     AC_PATH_PROG(DD,dd,,$LOCSYSPATH)
250 ])
251
252 AC_DEFUN([AMANDA_PROG_GETCONF],
253 [
254     AC_REQUIRE([AMANDA_INIT_PROGS])
255     AC_PATH_PROG(GETCONF,getconf,,$SYSPATH)
256 ])
257
258 AC_DEFUN([AMANDA_PROG_GZIP],
259 [
260     AC_REQUIRE([AMANDA_INIT_PROGS])
261     AC_PATH_PROG(GZIP,gzip,,$LOCSYSPATH)
262 ])
263
264 AC_DEFUN([AMANDA_PROG_SORT],
265 [
266     AC_REQUIRE([AMANDA_INIT_PROGS])
267     AC_REQUIRE([AMANDA_CHECK_COMPONENTS])
268
269     AC_PATH_PROG(SORT,sort,NONE,$LOCSYSPATH)
270
271     # sort is only needed in the server build
272     if test x"$SORT" = x"NONE" && $WANT_SERVER; then
273         AC_MSG_ERROR([Set SORT to the path of the sort program.])
274     fi
275
276     AC_DEFINE_UNQUOTED(SORT_PATH,"$SORT",
277             [Define to the exact path to the sort program. ])
278 ])
279
280 AC_DEFUN([AMANDA_PROG_MAILER],
281 [
282     AC_REQUIRE([AMANDA_INIT_PROGS])
283     AC_PATH_PROGS(MAILER,Mail mailx mail,NONE)
284     if test x"$MAILER" = x"NONE"; then
285         AMANDA_MSG_WARN([WARNING: Amanda cannot send mail reports without a mailer.])
286     else
287         AC_DEFINE_UNQUOTED(MAILER,"$MAILER",
288                 [A program that understands -s "subject" user < message_file])
289     fi
290 ])
291
292 # SYNOPSIS
293 #
294 #   AMANDA_PROG_MT
295 #
296 # OVERVIEW
297 #   
298 #   Find and SUBST 'mt', and additionally calculate the proper flag to use
299 #   to identify the tape device (usually -f) and DEFINE and SUBST that value
300 #   as MT_FILE_FLAG.
301 #
302 AC_DEFUN([AMANDA_PROG_MT],
303 [
304     AC_REQUIRE([AMANDA_INIT_PROGS])
305     AC_PATH_PROG(MT,mt,mt,$LOCSYSPATH)
306
307     case "$target" in
308         *-hp-*) MT_FILE_FLAG="-t" ;;
309         *) MT_FILE_FLAG="-f" ;;
310     esac
311
312     AC_SUBST(MT_FILE_FLAG)
313     AC_DEFINE_UNQUOTED(MT_FILE_FLAG, "$MT_FILE_FLAG",
314   [The switch to be used when invoking mt to specify the
315  * tape device. ])
316 ])
317
318
319 AC_DEFUN([AMANDA_PROG_CHIO],
320 [
321     AC_REQUIRE([AMANDA_INIT_PROGS])
322     AC_PATH_PROG(CHIO,chio,chio,$LOCSYSPATH)
323 ])
324
325
326 AC_DEFUN([AMANDA_PROG_CHS],
327 [
328     AC_REQUIRE([AMANDA_INIT_PROGS])
329     AC_PATH_PROG(CHS,chs,chs,$LOCSYSPATH)
330 ])
331
332
333 AC_DEFUN([AMANDA_PROG_MTX],
334 [
335     AC_REQUIRE([AMANDA_INIT_PROGS])
336     AC_PATH_PROG(MTX,mtx,mtx,$LOCSYSPATH)
337 ])
338
339 AC_DEFUN([AMANDA_PROG_MCUTIL],
340 [
341     AC_REQUIRE([AMANDA_INIT_PROGS])
342     AC_PATH_PROG(MCUTIL,mcutil,mcutil,$LOCSYSPATH)
343 ])
344
345 AC_DEFUN([AMANDA_PROG_PCAT],
346 [
347     AC_REQUIRE([AMANDA_INIT_PROGS])
348     AC_PATH_PROG(PCAT,pcat,,$LOCSYSPATH)
349 ])
350
351 AC_DEFUN([AMANDA_PROG_PERL],
352 [
353     AC_REQUIRE([AMANDA_INIT_PROGS])
354     AC_PATH_PROGS(PERL,perl5 perl,,$LOCSYSPATH)
355     AC_ARG_VAR([PERL], [Path to the 'perl' binary])
356     AC_PROG_PERL_VERSION([5.6.0], [], [
357         AC_MSG_ERROR([Amanda requires at least perl 5.6.0])
358     ])
359 ])
360
361 AC_DEFUN([AMANDA_PROG_SWIG],
362 [
363     AC_REQUIRE([AMANDA_INIT_PROGS])
364     AC_PATH_PROGS(SWIG,swig,,$LOCSYSPATH)
365     AC_ARG_VAR([SWIG], [Path to the 'swig' binary (developers only)])
366     AC_PROG_SWIG([1.3.28])
367 ])
368
369 AC_DEFUN([AMANDA_PROG_AR],
370 [
371     AC_REQUIRE([AMANDA_INIT_PROGS])
372     AC_PATH_PROG(AR,ar,,$LOCSYSPATH)
373 ])
374
375 AC_DEFUN([AMANDA_PROG_BASH],
376 [
377     AC_REQUIRE([AMANDA_INIT_PROGS])
378     AC_PATH_PROG(BASH,bash,,$SYSPATH)
379 ])
380
381 AC_DEFUN([AMANDA_PROG_SSH],
382 [
383     AC_REQUIRE([AMANDA_INIT_PROGS])
384     AC_PATH_PROGS(SSH, ssh, , $LOCSYSPATH)
385     AC_DEFINE_UNQUOTED(SSH, "$SSH", [Path to the SSH binary])
386 ])
387
388 AC_DEFUN([AMANDA_PROG_GETTEXT],
389 [
390     AC_REQUIRE([AMANDA_INIT_PROGS])
391     AC_PATH_PROG(GETTEXT,gettext,,$LOCSYSPATH)
392 ])