#
#   $Id: sudo.Makefile,v 1.2 2001/11/27 17:21:42 dgregor Exp $
#
# Copyright (c) 1999 Daniel J. Gregor, Jr., All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. All advertising materials mentioning features or use of this software
#    must display the following acknowledgement:
# 	This product includes software developed by Daniel J. Gregor, Jr.
# 4. The name of Daniel J. Gregor, Jr. may not be used to endorse or promote
#    products derived from this software without specific prior written
#    permission.
# 
# THIS SOFTWARE IS PROVIDED BY DANIEL J. GREGOR, JR. ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL DANIEL J. GREGOR, JR. BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
#
# Homepage for Sudo:
#	http://www.courtesan.com/sudo/
#
# You can get the source at:
#	ftp://ftp.cs.colorado.edu/pub/sudo/cu-sudo.v1.5.9p3.tar.gz

BUILDDIR    = sudo.v1.5.9p3

DESTDIR     = ${TOPDIR}/pkg 

BASEDIR     = /opt/FSFsudo
ETCDIR      = /etc/opt/FSFsudo
BASEDIREXISTS=/opt /etc/opt

CONFOPTS    = 

PKGNAME     = FSFsudo
NAME        = sudo
DESC        = a utility to allow restricted root access
ARCH:sh     = uname -p
VERSIONSH1  = echo ${BUILDDIR} | sed -e 's/^[^-]*-//' -e 's/^.*\.v//'
VERSIONSH2  = uname -s
VERSIONSH3  = uname -r
VERSION     = ${VERSIONSH1:sh} (${VERSIONSH2:sh}-${VERSIONSH3:sh})
CATEGORY    = application
MAXINST     = 1000
VENDOR      = Free Sofware Foundation
EMAIL       = dj@gregor.com
CLASSES     = none

PKGPROTO    = /usr/bin/pkgproto
PKGMK       = /usr/bin/pkgmk
PKGTRANS    = /usr/bin/pkgtrans

INSTUSER    = root
INSTGROUP   = root

TOPDIR:sh   = pwd

SPOOLDIR    = /var/spool/pkg

OTHERFILES  = ${DESTDIR}${BASEDIR}/COPYING ${DESTDIR}/copyright
INSTALLFILES= pkginfo copyright

all: pkg

pkg: ${BUILDDIR}.pkg

${BUILDDIR}.pkg:  ${DESTDIR}/prototype
	-( cd ${DESTDIR}/${BASEDIR}/bin ; strip * )
	( cd ${DESTDIR} ; ${PKGMK} -d ${SPOOLDIR} -or . )
	( cd ${SPOOLDIR}/${PKGNAME}/reloc ; find . -depth -print | \
		grep -v '^\.$$' | cpio -odm | compress > ../reloc.cpio.Z )
	rm -rf ${SPOOLDIR}/${PKGNAME}/reloc
	$(PKGTRANS) ${SPOOLDIR} ${TOPDIR}/${BUILDDIR}.pkg ${PKGNAME}

${DESTDIR}/prototype: ${DESTDIR}/pkginfo
	@( cd ${DESTDIR} ; \
	 find . -print | \
		$(PKGPROTO) | nawk -v instuser="${INSTUSER}" \
		-v instgroup="${INSTGROUP}" -v basedirexists="${BASEDIREXISTS}"\
		-v installfiles="${INSTALLFILES}" \
		'BEGIN { \
			n = split(installfiles, setupinstallfiles); \
			for ( i = 1; i <= n; i++ ) { \
				print "i", setupinstallfiles[i]; \
			} \
		} \
		{ \
			if ( match($$3, "^prototype$$") ) { \
				next; \
 			} \
			checkbasedir = basedirexists; \
			sub("^/", "", checkbasedir); \
			while ( checkbasedir != "" ) { \
				if ( match($$3, "^"checkbasedir"$$") ) { \
					sub("[^/]*$$", "", checkbasedir); \
					sub("/$$", "", checkbasedir); \
					print $$1, $$2, $$3, "?", "?", "?"; \
					next; \
 				} \
				sub("[^/]*$$", "", checkbasedir); \
				sub("/$$", "", checkbasedir); \
			} \
			n = split(installfiles, checkinstallfiles); \
			for ( i = 1; i <= n; i++ ) { \
				if (match($$3, "^"checkinstallfiles[i]"$$")) { \
					next; \
 				} \
			} \
			\
			print $$1, $$2, $$3, $$4, instuser, instgroup; \
		}' \
	 ) | \
	sed '/ opt /d;/ etc /d;/ etc\/opt /d' | \
	sed 's!\(opt/FSFsudo/bin/sudo\) [0-9][0-9]*!\1 4111!' | \
	sed 's!\(opt/FSFsudo/sbin/visudo\) [0-9][0-9]*!\1 4111!' \
	> ${DESTDIR}/prototype

${DESTDIR}/pkginfo: .package-installed.${BUILDDIR}
	rm -f ${DESTDIR}/pkginfo
	@echo "PKG=\"${PKGNAME}\"" >> $@
	@echo "NAME=\"${NAME}\"" >> $@
	@echo "DESC=\"${DESC}\"" >> $@
	@echo "ARCH=\"${ARCH}\"" >> $@
	@echo "MAXINST=\"${MAXINST}\"" >> $@
	@echo "VERSION=\"${VERSION}\"" >> $@
	@echo "CATEGORY=\"${CATEGORY}\"" >> $@
	@echo "VENDOR=\"${VENDOR}\"" >> $@
	@echo "EMAIL=\"${EMAIL}\"" >> $@
	@echo "BASEDIR=\"/\"" >> $@
	@echo "CLASSES=\"${CLASSES}\"" >> $@

.package-installed.${BUILDDIR}: build clean.${DESTDIR} ${DESTDIR}${BASEDIR} \
		${OTHERFILES} install-docs deejinstall
	cd ${BUILDDIR} ; ${MAKE} prefix=${DESTDIR}${BASEDIR} \
		sysconfdir=${DESTDIR}${ETCDIR} \
		sbindir=${DESTDIR}${BASEDIR}/sbin \
		INSTALL=${TOPDIR}/deejinstall \
		install_uid=root install_gid=root \
		install
	-chmod 755 ${DESTDIR}${BASEDIR}/bin/* ${DESTDIR}${BASEDIR}/sbin/*
	touch $@

deejinstall:
	@echo "#!/bin/sh -" >> $@
	@echo "" >> $@
	@echo "basename=\"\`basename \$$0\`\"" >> $@
	@echo "die() {" >> $@
	@echo "        echo \"\$$basename: \$$*\" >&2" >> $@
	@echo "        exit 1" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "usage=\"\$$basename [-o <owner>] [-g <group>] [-m <mode>] [-s] <source> <dest>\"" >> $@
	@echo "" >> $@
	@echo "strip=0" >> $@
	@echo "" >> $@
	@echo "while getopts o:g:m:s c" >> $@
	@echo "do" >> $@
	@echo "	case \$$c in" >> $@
	@echo "		o)" >> $@
	@echo "			owner=\"\$$OPTARG\"" >> $@
	@echo "		;;" >> $@
	@echo "" >> $@
	@echo "		g)" >> $@
	@echo "			group=\"\$$OPTARG\"" >> $@
	@echo "		;;" >> $@
	@echo "" >> $@
	@echo "		m)" >> $@
	@echo "			mode=\"\$$OPTARG\"" >> $@
	@echo "		;;" >> $@
	@echo "" >> $@
	@echo "		s)" >> $@
	@echo "			strip=1" >> $@
	@echo "		;;" >> $@
	@echo "" >> $@
	@echo "		\\?)" >> $@
	@echo "			die \"What up?\"" >> $@
	@echo "		;;" >> $@
	@echo "	esac" >> $@
	@echo "done" >> $@
	@echo "" >> $@
	@echo "shift \`expr \$$OPTIND - 1\`" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -ne 2 ]; then" >> $@
	@echo "	die \"Usage: \$$usage\"" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "source=\"\$$1\"; shift" >> $@
	@echo "dest=\"\$$1\"; shift" >> $@
	@echo "" >> $@
	@echo "cp \"\$$source\" \"\$$dest\" || die \"Could not copy \$$source to \$$dest\"" >> $@
	@echo "" >> $@
	@echo "if [ \$$strip -ne 0 ]; then" >> $@
	@echo "	strip \"\$$dest\" || die \"Could not strip \$$dest\"" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \"\$$owner\"x != \"\"x ]; then" >> $@
	@echo "	chown \"\$$owner\" \"\$$dest\"	# don't care if it fails" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \"\$$group\"x != \"\"x ]; then" >> $@
	@echo "	chgrp \"\$$group\" \"\$$dest\" # don't care if it fails" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \"\$$mode\"x != \"\"x ]; then" >> $@
	@echo "	chmod \"\$$mode\" \"\$$dest\" # don't care if it fails" >> $@
	@echo "fi" >> $@
	@chmod 755 $@


${DESTDIR}${BASEDIR}/COPYING: ${BUILDDIR}/COPYING
	cp $? $@

${DESTDIR}/copyright:
	rm -f $@
	@echo "This is free software; you can redistribute it and/or" >> $@
	@echo "modify it under the terms of the GNU General Public" >> $@
	@echo "License, see the file ${BASEDIR}/COPYING." >> $@

clean.${DESTDIR}:
	rm -rf ${DESTDIR}

${DESTDIR}${BASEDIR}:
	mkdir -p ${DESTDIR}${BASEDIR}
	mkdir -p ${DESTDIR}${BASEDIR}/bin
	mkdir -p ${DESTDIR}${BASEDIR}/sbin
	mkdir -p ${DESTDIR}${BASEDIR}/man/man5
	mkdir -p ${DESTDIR}${BASEDIR}/man/man8

build: .configured.${BUILDDIR}
	cd ${BUILDDIR} ; ${MAKE} all

clean:
	rm -rf ${BUILDDIR} ${DESTDIR} .configured.${BUILDDIR} \
		.untarred.${BUILDDIR} .package-installed.${BUILDDIR} \
		deejinstall ${SPOOLDIR}/${PKGNAME} ${BUILDDIR}.pkg

.untarred.${BUILDDIR}: cu-${BUILDDIR}.tar.gz
	rm -rf ${BUILDDIR}
	gzip -cd $? | tar xvf -
	touch $@

.configured.${BUILDDIR}: .untarred.${BUILDDIR}
	cd ${BUILDDIR} ; ./configure --prefix=${BASEDIR} \
		--sysconfdir=${ETCDIR} --sbindir=${BASEDIR}/sbin
		${CONFOPTS} 
	touch $@

veryclean:
	rm -rf ${BUILDDIR} ${DESTDIR} .configured.${BUILDDIR} \
		.untarred.${BUILDDIR} .package-installed.${BUILDDIR} \
		.revision ${SPOOLDIR}/${PKGNAME} ${BUILDDIR}.pkg


install-docs: ${DESTDIR}${BASEDIR}/docs
	cd ${BUILDDIR} ; ls -1 [A-Z]* | egrep -v 'Makefile|ChangeLog.zoo' | \
		cpio -updm ${DESTDIR}${BASEDIR}/docs

${DESTDIR}${BASEDIR}/docs: ${DESTDIR}${BASEDIR}
	mkdir -p ${DESTDIR}${BASEDIR}/docs 

