define(`concat',$1$2$3$4$5$6$7$8$9)
changequote([,])

# os - one of:
#   "bsd" - bsd 4.2, bsd 4.3, ultrix 1.1, acis 4.2,4.3 other
#       "standard" bsd systems without nfs
#   "ultrix12" - Ultrix 1.2
#   "ultrix20" - Ultrix 2.0 or greater
#   "ultrix40" - Ultrix 4.0 or greater
#   "osf1" - OSF/1 1.3 or greater
#   "hpux" - HP/UX
#   "aux" - A/UX
#   "uts" - Amdahl UTS
#   "xenix5" - SCO Xenix System V
#   "aix" - IBM AIX System V
#   "pyr" - pyramid (in BSD universe)
#   "sunos" - SunOS 4.N or less
#   "solaris" - Solaris 2.N (SunOS 5.0 and greater)
#   "encore" - Encore MultiMax
#   "next" - NeXT/MACH
#   "dynix" - Sequent Balance
#   "irix" - Silicon Graphics IRIS-4D/IRIX
#   "newsos" - Sony NEWS
#   "drsnx" - ICL DRS/NX V4.0
#   "epix" - Control Data EP/IX
#   "386bsd" - 386/BSD and derivatives
#   "netbsd" - NetBSD 1.0
#   "freebsd" - FreeBSD 2.0
#   "bsdi" - BSDI BSD/386 1.1
#   "domainosbsd" - HP/Apollo Domain BSD 4.3
# Warning: hpux, pyr are hardcoded in some of the makefiles (sorry)

# MAJOR CONFIGURATION
# set to one of the above (or configure your own below)
define([os],[[freebsd]])

# System call configuration (not for system v compatibilty)
# known: X_GETOPT, X_VPRINTF, X_GETMNT, X_STATFS, X_QUOTA,
# X_SUNQUOTA, X_FLOCK, X_LOCKF, X_FCNTLLOCKF
# getopt - "cap: argument processing"
define([X_GETOPT],1)
# getmnt - "aufs: info on file systems (dec)"
# define([X_GETMNT],1)
# statvfs - "aufs: info on file systems (solaris)"
# define([X_STATFS],1)
# statfs - "aufs: info on file systems (sun nfs)"
# define([X_STATFS],1)
# statfs - "aufs: info on file systems (irix,domainos)"
# define([X_STATFS],1)
# statfs - "aufs: info on file systems (bsd44)"
define([X_STATFS],1)
# quota - "aufs: info on user quota"
# define([X_QUOTA],1)
# ioctl - "aufs: info on user quota (solaris)"
# define([X_QUOTA],1)
# getmntent - "aufs: used by sunquota"
# define([X_SUNQUOTA],1)
# quotactl - "aufs: used by bsdquota"
# define([X_BSDQUOTA],1)
# flock - "afp: file locking"
define([X_FLOCK],1)
# lockf - "afp: byte range locking using unistd.h"
# define([X_LOCKF],1)
# lockf - "afp: byte range locking using fcntl.h"
# define([X_FCNTLLOCKF],1)
# vfprintf - "cap: variable arg fprintf"
define([X_VPRINTF],1)
# recvmsg - "cap: lib: scatter gather recv"
# define([X_NORECVMSG],1)
# sendmsg - "cap: lib: scatter gather send"
# define([X_NOSENDMSG],1)
# ffs - "cap: lib: ffs - find first set bit"
# define([X_NOFFS],1)

# GETOPT support
ifdef([X_GETOPT],[],[define([needgetopt],[att_getopt.o])])
# VPRINTF support
ifdef([X_VPRINTF],[define([usevprintf], 1)],[])

# Path to cap sources: useful for testing
define([cwd],[@CWD@])
# turn on if your system sends packets very quickly
# (see applications/aufs/INSTALLATION)
# define([fastether],1) # For papif and samples

# The following selects the correct lap delivery objects
define([lapobj],[abetalk.o abddp.o abnbp.o atalkdbm.o])

# This determines what happens to UAB and UAR
define([uabprogs],[])
define([uabplibs],[])
define([uabpobjs],[])

# This sets up Native EtherTalk support
define([etherprogs],[aarpd])
define([etherpobjs],[bpfiltp.o])

# This sets up capd
define([capdprogs],[])
define([capdpobjs],[])

# And this determines if Phase 2 packets are used
define([usephase2],1)

# The following selects byteswapping or otherwise
define([usebyteswap],1)

# We use build_here to restrict CAP to a single directory tree
# but still using etcdest (see below) for the location of atalk.local
# and other configuration files
# define([build_here],1)

# We use the debug flag to restrict CAP to a single directory tree
# for testing purposes, e.g. testing new versions
# define([debug],1)

# The includef flag sets an alternate localtion for include files
define([includef],1)

# Systems with kernel AppleTalk support do not need atis
define([useatis],1)

# uncomment if your param.h includes types.h and types.h doesn't
# prevent itself from being included twice
# define _TYPES
# define([selfdefinetypes],1)
# MINOR CONFIGURATION: configure various programs

#define([columbia],1) # so columbia can do things quickly
#define([rutgersdef],1) # so rutgers can do things quickly

# Installation prefix
define([prefix],[[@PREFIX@]])

# location of include files
define([includedest],concat(prefix,[[[/include]]]))
ifelse(os,[epix],[define([includedir],[[/bsd43/usr/include]])])
# location of des subroutine source (see lib/afp/README)
define([desloc],[[../../extras]])
# location of atalk.local, etc.
define([etcdest],concat(prefix,[/etc/cap]))
ifdef([columbia],[define([etcdest],[[/usr/local/lib/cap]])])
# location of user cap programs
define([capdestdir],concat(prefix,[/bin]))
# location of cap "server" programs (aufs, lwsrv, papif, uab etc.)
define([capsrvrdestdir],concat(prefix,[/sbin]))
# location of some cap data files
define([caplibdestdir],concat(prefix,[/lib/cap]))
ifdef([rutgersdef],[define([caplibdestdir],[[/usr/local/cap/lib]])])
# location of cap libraries
define([libdestdir],concat(prefix,[/lib]))
# override for aux (doesn't search /usr/local/lib)
ifelse(os,[aux],[define([libdestdir],[[/usr/lib]])])
# cap library names
define([caplib],[[libcap.a]])
define([afplib],[[libafp.a]])
define([afpclib],[[libafpc.a]])
# names to load cap libraries with
define([libcap],[[-lcap]])
define([libafp],[[-lafp]])
define([libafpc],[[-lafpc]])
ifelse(os,[encore],
	[define([libcap],concat([-L],libdestdir,[ ],libcap))])
ifelse(os,[encore],
	[define([libafp],concat([-L],libdestdir,[ ],libafp))])
ifelse(os,[encore],
	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
ifelse(os,[aix],
	[define([libcap],concat([-L],libdestdir,[ ],libcap))])
ifelse(os,[aix],
	[define([libafp],concat([-L],libdestdir,[ ],libafp))])
ifelse(os,[aix],
	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
ifelse(os,[hpux],
	[define([libcap],concat([-L],libdestdir,[ ],libcap))])
ifelse(os,[hpux],
	[define([libafp],concat([-L],libdestdir,[ ],libafp))])
ifelse(os,[hpux],
	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
ifelse(os,[epix],
	[define([libcap],concat([-L],libdestdir,[ ],libcap))])
ifelse(os,[epix],
	[define([libafp],concat([-L],libdestdir,[ ],libafp))])
ifelse(os,[epix],
	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
ifelse(os,[solaris],
	[define([libcap],concat([-L],libdestdir,[ ],libcap))])
ifelse(os,[solaris],
	[define([libafp],concat([-L],libdestdir,[ ],libafp))])
ifelse(os,[solaris],
	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
ifelse(os,[netbsd],
	[define([libcap],concat([-L],libdestdir,[ ],libcap))])
ifelse(os,[netbsd],
	[define([libafp],concat([-L],libdestdir,[ ],libafp))])
ifelse(os,[netbsd],
	[define([libafpc],concat([-L],libdestdir,[ ],libafpc))])
ifelse(os,[freebsd],
	[define([libcap],concat([-L],cwd,[/lib/cap],[ ],libcap))])
ifelse(os,[freebsd],
	[define([libafp],concat([-L],cwd,[/lib/afp],[ ],libafp))])
ifelse(os,[freebsd],
	[define([libafpc],concat([-L],cwd,[/lib/afpc],[ ],libafpc))])
# any special libraries
define([libspecial],[])
ifelse(os,[ultrix40],[
	define([libspecial],concat(libspecial,[ -lauth]))])
ifelse(os,[osf1],[
	define([libspecial],concat(libspecial,[ -lsecurity]))])
ifelse(os,[xenix5],[
	define([libspecial],concat(libspecial,[ -lsocket]))])
ifelse(os,[drsnx],[
	define([libspecial],concat(libspecial,[ -lucb]))])
ifelse(os,[uts],[
	define([libspecial],concat(libspecial,[ -lsocket -lbsd -la]))])
ifelse(os,[dynix],[
	define([libspecial],concat(libspecial,[ -lseq]))])
ifelse(os,[irix],[
	define([libspecial],concat(libspecial,[ -lbsd]))])
ifelse(os,[aix],[
	define([libspecial],concat(libspecial,[ -lbsd]))])
ifelse(os,[aux],[
	define([libspecial],concat(libspecial,[ -lat -lbsd]))])
ifelse(os,[hpux],[
	define([libspecial],concat(libspecial,[ -lBSD -lndbm]))])
ifelse(os,[epix],[
	define([libspecial],concat(libspecial,[ -lc -lsec]))])
ifelse(os,[386bsd],[
	define([libspecial],concat(libspecial,[ -lrpc]))])
ifelse(os,[netbsd],[
	define([libspecial],concat(libspecial,[ -lcrypt]))])
ifelse(os,[freebsd],[
	define([libspecial],concat(libspecial,[ -lcrypt]))])
ifelse(os,[bsdi],[
	define([libspecial],concat(libspecial,[ -lrpc -lkvm]))])
ifelse(os,[linux],[
	define([libspecial],concat(libspecial,[ -lgdbm]))])
ifelse(os,[solaris],[
	define([libspecial],concat(libspecial,[ -lsocket -lnsl ]))])
# rutgers specific
define([libru],[])
ifdef([rutgersdef], [
ifelse(os,[solaris],[
	define([libru],concat(libru,[ -L/usr/local/lib -R/usr/local/lib -lru ]))],[
	define([libru],concat(libru,[ -lru ]))])])

#
# special configurations for individual source files
#

#
# Aufs: see applications/aufs/INSTALLATION
#
# WARNING: OS DEPENDENT
# define([smartunixfinderinfo],1)
#
# Set -DNONLXLATE, -DFULL_NCS_SUPPORT, -DGGTYPE="gid_t" or -DNOCHGRPEXEC
#  in m4.features
# Others: USESTATFS, USEGETMNT, USECHOWN, USEQUOTA, USESUNQUOTA, USEBSDQUOTA
#  are autoconfigured
define([aufsosdefs],[aufsosflags()])

#
# lib/cap/authenticate.c: configuration file
#
define([authconfig],concat([\"],etcdest,[/],[cap.auth],[\"]))

#
# lwsrv: see applications/lwsrv/README
#
# lwflags and simpleflags are now defined in m4.features

#
# lwrename: set name of file containing list of printers to be renamed
#
define([lwrenamefile],concat([\"],caplibdestdir,[/lwrename.list\"]))

#
# papif: see applications/papif/README
#
# uncomment and set to right location to turn on printing "plain text files"
# define([pstextloc],[[\"/usr/local/lib/ps/pstext\"]])
#
# uncomment and set to right location to turn on page reversal
# define([psrevloc],[[\"/usr/local/lib/ps/psrev\"]])
#
# Valid are:
#  -DVERBOSELOG - default (set =0 to turn off)
#  -DNO_STRUCT - default is on (structured)
#  -DNOACCT - default is on (accounting)
#  -DIDLESTUFF - default is off
#  -DSFLOWQ - default is 8 (min 1, max 8)
#  -DRFLOWQ - default is 8 (min 1, max 8)
#  -DATPRESPONSETIMEOUT - default is 120 (2 minutes) - in seconds
#  -DWATCHTIME - default is 10 seconds (in seconds)
#  -DDEBUG - default is off
#  -DSTRIPCONTROLD - default is off
#  -DMAPCRTOLF - default is off
#  -DMACUSER - default is off (need LPD_JOB environment variable in lpd)
#  -DPLP - Use with PLP rather than Berkeley lpd
#  see papif README file for explanations of the above
# The following defines are recommended for System V lp printers (vs. bsd lpd)
#  -DWATCHTIME=0 (no status) -DNOACCT
define([papflags],[-DMACUSER])
define([papflags],concat(papflags,[ -DIDLESTUFF]))

# Set -DBANNERFIRST if you want the banner page to come out as the
#  first page instead of the last page 
# Set -DBANNERLAST if want it last
# Set -DPSBANNER if you want a custom PostScipt Banner (must specify
#  short banners in printcap). This still defaults to regular banners
# Add -DCHARGEBANNER if you want to charge the banner page to the user
#  on system V - there is no accounting, so leave blank
define([papbanner],[-DCHARGEBANNER])

# for cap.printers - uncomment and change the following line to point
# papif, et. al. to a location other than /etc/cap.printers.  (Note:
# line below would set it to $etcdest/cap.printers)
define([capprinters],concat([\"],etcdest,[/],[cap.printers],[\"]))
ifdef([columbia],
       [define([capprinters],concat([\"],etcdest,[/],[cap.printers],[\"]))])
# for atalkdbm - allows change following line(s) to modify atalk.local
# (probably shouldn't).  Remember that atalk.local is expected to
# be in etcdest
define([atalklocal],concat([\"],etcdest,[/],[atalk.local],[\"]))
define([etalklocal],concat([\"],etcdest,[/],[etalk.local],[\"]))
define([configdir],concat([\"],etcdest,[\"]))
define([uabpidfile],concat([\"],caplibdestdir,[/],[uab.pid],[\"]))
define([uabbrdescr],concat([\"],caplibdestdir,[/],[bridge_desc],[\"]))

# in case you want to globally change the c compiler
define([thecompiler],[cc])
define([theloader],[ld])
define([theinstaller],[cp])

#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#		      END OF CONFIGABLE OPTIONS                            #
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

# You should only edit past here if you are "porting"
# Automatics
define([osname],[Unknown])
ifelse(os,[ultrix12],[define([osname],[Ultrix 1.2])])
ifelse(os,[ultrix20],[define([osname],[Ultrix 2.0])])
ifelse(os,[ultrix40],[define([osname],[Ultrix 4.0])])
ifelse(os,[osf1],[define([osname],[OSF/1])])
ifelse(os,[aux],[define([osname],[A/UX])])
ifelse(os,[sunos],[define([osname],[SunOS])])
ifelse(os,[solaris],[define([osname],[Solaris 2.x in native SVR4 mode])])
ifelse(os,[encore],[define([osname],[Encore Umax])])
ifelse(os,[hpux],[define([osname],[HP-UX (for 9000 series)])])
ifelse(os,[uts],[define([osname],[Amdahl UTS])])
ifelse(os,[bsd],[define([osname],[Standard BSD])])
ifelse(os,[pyr],[define([osname],[Pyramid in BSD universe])])
ifelse(os,[xenix5],[define([osname],[SCO Xenix System V])])
ifelse(os,[aix],[define([osname],[IBM AIX System V])])
ifelse(os,[next],[define([osname],[NeXT/MACH])])
ifelse(os,[dynix],[define([osname],[Sequent Balance])])
ifelse(os,[irix],[define([osname],[Silicon Graphics IRIS/IRIX])])
ifelse(os,[newsos],[define([osname],[Sony NEWS])])
ifelse(os,[drsnx],[define([osname],[ICL DRS])])
ifelse(os,[epix],[define([osname],[Control Data EP/IX])])
ifelse(os,[386bsd],[define([osname],[386/BSD etc])])
ifelse(os,[netbsd],[define([osname],[NetBSD 1.0])])
ifelse(os,[freebsd],[define([osname],[FreeBSD])])
ifelse(os,[bsdi],[define([osname],[BSD/386])])
ifelse(os,[domainosbsd],[define([osname],[HP/Apollo Domain BSD 4.3])])
#
define([cflags],ifdef([selfdefinetypes],[-D_TYPES],[]))
define([cflags],concat(cflags,ifdef([usebyteswap],[ -DBYTESWAPPED],[])))
define([cflags],concat(cflags,ifdef([usephase2],[ -DPHASE2],[])))
define([bigcflags],ifelse(os,[hpux],[]))
# The encore optimiser is slightly over zealous
ifelse(os,[encore],[define([cflags],concat(cflags,[ -Dencore]))],[
    define([cflags],concat(cflags,[ -O]))])
ifelse(os,[pyr],[
    define([cflags],concat(cflags,[ -q]))])
ifelse(os,[next],[
    define([cflags],concat(cflags,[ -DNeXT -DADDRINPACK]))])
ifelse(os,[xenix5],[
    define([cflags],concat(cflags,[ -Dxenix5 -I$I -DLAI_TCP -Di386]))])
ifelse(os,[aix],[
    define([cflags],concat(cflags,[ -DAIX -DUSETIMES -DNOWAIT3 -DUSEDIRENT]))])
ifelse(os,[solaris],[
    define([cflags],concat(cflags,[ -DSOLARIS]))])
ifelse(os,[uts],[
    define([cflags],concat(cflags,[ -eft ]))])
ifelse(os,[irix],[
    define([cflags],concat(cflags,[ -cckr -D_BSD_COMPAT]))])
ifelse(os,[drsnx],[
    define([cflags],concat(cflags,[ -DNOWAIT3]))])
ifelse(os,[epix],[
    define([cflags],concat(cflags,[ -DEPIX]))])
ifelse(os,[osf1],[
    define([cflags],concat(cflags,[ -DUSEDIRENT]))])
ifelse(os,[netbsd],[
    define([cflags],concat(cflags,[ -D__386BSD__]))])
ifelse(os,[bsdi],[
    define([cflags],concat(cflags,[ -D__386BSD__]))])
ifelse(os,[linux],[
    define([cflags],concat(cflags,[ -DUSE_GDBM]))])

# was used for nbp, but found we needed more... leave in case
define([nbpflags],[])
define([lflags],[])
define([mflags],[])

# aux's c compiler isn't nice - it doesn't have a preprocessor
# definition for aux.  So, let's invent one.  Also turn on -n
# for shared code.
ifelse(os,[aux],[
	define([cflags],concat(cflags,[ -n -Daux]))
	define([lflags],concat(lflags,[ -n]))])

# for NetBSD 1.0 on 68k strip symbols to avoid ld error on some progs
ifelse(os,[netbsd],[define([lflags],concat(lflags,[ -s]))])

# use the transitional option of the C compiler - interpret as K&R C, not ANSI
ifelse(os,[drsnx],[
	define([cflags],concat(cflags,[ -Xt -Ddrsnx]))])

# check to see if we need sysvinstall usage
ifelse(os,[hpux6],[define([sysvinstall],[yes])],
       os,[irix3],[define([sysvinstall],[yes])])

# or if we really want to use install
# ifelse(os,[someOS], [define([theinstaller],[install])])

# for cap library
# Valid are:
#  NOFFS - no ffs function defined, fake it out
#  LOCALTIME_GTOD - uses pd localtime, but gettimeofday always reads
#   disk based time of day.  Always defined for AUX for now.  Probably
#   needs to be changed for versions of Aux after 1.0
#  NORECVMSG - no recvmsg in system (fake it out)
#  NOSENDMSG - no recvmsg in system (fake it out)
define([caposdefs],
	concat( ifdef([X_NOFFS],[ -DNOFFS],[]),
		ifelse(os,[aux],[ -DLOCALTIME_GTOD],[]),
		ifdef([X_NORECVMSG], [ -DNORECVMSG],[]),
		ifdef([X_NOSENDMSG], [ -DNOSENDMSG],[])))
# for afp library
# two cases for X_LOCKF - if lockf isn't defined
# first: X_FCNTLLOCKF is defined, so just note that lockf uses fcntl.h
# second: "         " isn't defined so define no lockf
# we "know" that flock() was hiding in libbsd.a under aix
define([afposdefs],
	concat( ifdef([X_FLOCK],[], ifelse(os,[aix],[],[ -DNOFLOCK])),
		ifdef([X_LOCKF],[],
		   [ifdef([X_FCNTLLOCKF],[ -DLOCKFUSESFCNTL],
		      ifelse(os,[freebsd],[ -DUSEFCNTLLOCK],[ -DNOLOCKF]))])))
# for aufs
define([aufsosdefs],
    concat(aufsosdefs,
	ifdef([X_STATFS],[ -DUSESTATFS],[]),
	ifdef([X_GETMNT],[ -DUSEGETMNT],[]),
	ifdef([X_QUOTA],[ -DUSEQUOTA],[]),
	ifdef([X_SUNQUOTA],[ -DUSESUNQUOTA],[]),
	ifdef([X_BSDQUOTA],[ -DUSEBSDQUOTA],[]),
	ifelse(os,[irix],[ -DNOVFORK]),
	ifelse(os,[aix],[ -DNOVFORK -DUSECHOWN],[])))

# if no ranlib (or fakeout like hpux) and need to order libaries
ifelse(os,[dummy],   [define(uselordertsort,[1])],
       os,[aux],     [define(uselordertsort,[1])],
       os,[solaris], [define(uselordertsort,[1])],
       os,[uts],     [define(uselordertsort,[1])],
       os,[drsnx],   [define(uselordertsort,[1])],
       os,[irix],    [define(uselordertsort,[1])])

# lw config
define([lwflags],
    concat(lwflags,
	ifdef([fastether],[ -DSFLOWQ=1],[]),
	ifelse(os,[aix],[],[])))

# more papif config
define([papflags],
    concat(papflags,
	ifelse(os,[irix],[ -DNOVFORK]),
	ifelse(os,[aix],[ -DNOVFORK],[])))

#NBPFLAGS = nbpflags()
#SPECCFLAGS = specialcflags()
#BIGCFLAGS = bigcflags()
#CFLAGS = cflags()
#LFLAGS = lflags()
#AFPOSDEFS = afposdefs()
#AUFSOSDEFS = aufsosdefs()

ifdef([debug],[
 define([build_here],1)
# location of atalk.local, etc.
 define([etcdest],concat(cwd,[[[/etc]]]))
])

ifdef([includef],[
# location of include files
 define([includedir],[cwd])
 define([cflags],concat(cflags,[ -I],includedir))
])

ifdef([build_here],[
# location of include files
 define([includedir],[cwd])
# location of des subroutine source (see lib/afp/README)
 define([desloc],[[../../extras]])
# location of user cap programs
 define([capdestdir],concat(cwd,[[[/bin]]]))
# location of cap "server" programs (aufs, lwsrv, papif, uab etc.)
 define([capsrvrdestdir],concat(cwd,[[[/bin]]]))
# location of some cap data files
 define([caplibdestdir],concat(cwd,[[[/bin]]]))
# location of cap libraries
 define([libdestdir],concat(cwd,[[[/lib]]]))
# cap library names
 define([caplib],[[libcap.a]])
 define([afplib],[[libafp.a]])
 define([afpclib],[[libafpc.a]])
# names to load cap libraries with
 define([libcap],concat(cwd,[[[/lib/libcap.a]]]))
 define([libafp],concat(cwd,[[[/lib/libafp.a]]]))
 define([libafpc],concat(cwd,[[[/lib/libafpc.a]]]))
 define([capprinters],concat([\"],etcdest,[/],[cap.printers],[\"]))
 define([cflags],concat(cflags,[ -I],includedir))
 define([atalklocal],concat([\"],etcdest,[/],[atalk.local],[\"]))
 define([etalklocal],concat([\"],etcdest,[/],[etalk.local],[\"]))
 define([configdir],concat([\"],etcdest,[\"]))
])

define([datestring],maketemp(/tmp/capcXXXXXX))
syscmd(date > datestring())
##########MARKER##########
# Makefile autoconfigured for ...
[#] osname() system on include(datestring())
syscmd(rm -f datestring())

MFLAGS=mflags()
LFLAGS=lflags()
CC=thecompiler()
LD=theloader()
SHELL=/bin/sh
INSTALLER=theinstaller()
