BUILDDIR    = cvs-1.9

PKGNAME     = FSFcvs
DESTDIR     = ${TOPDIR}/pkg 

BASEDIR     = /opt/${PKGNAME}

CONFOPTS    = 

NAME        = cvs
ARCH        = Solaris2.5
VER         = 1.9
CATEGORY    = application
VENDOR      = Free Software 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

SUPPDIR     = ${BASEDIR}/supportbin

DIFF        = "${SUPPDIR}/diff"
GREP        = "${SUPPDIR}/grep"
PATCH_PROGRAM= "${SUPPDIR}/patch"
RCSBIN_DFLT = "${SUPPDIR}"

all: build

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

build.pkg: configured.${BUILDDIR} options.h
	cd ${BUILDDIR} ; ${MAKE} 

${BUILDDIR}/src/options.h.sav:
	mv ${BUILDDIR}/src/options.h ${BUILDDIR}/src/options.h.sav

options.h: ${BUILDDIR}/src/options.h

${BUILDDIR}/src/options.h: ${BUILDDIR}/src/options.h.sav
	sed -e 's|#define[ 	]*DIFF.*|#define DIFF	${DIFF}|' \
		-e 's|#define[ 	]*GREP.*|#define GREP	${GREP}|' \
		-e 's|#define[ 	]*PATCH_PROGRAM.*|#define PATCH_PROGRAM	${PATCH_PROGRAM}|' \
		-e 's|#define[ 	]*RCSBIN_DFLT.*|#define RCSBIN_DFLT	${RCSBIN_DFLT}|' \
		> ${BUILDDIR}/src/options.h < ${BUILDDIR}/src/options.h.sav


clean:
	cd ${BUILDDIR} ; ${MAKE} clean

install:
	cd ${BUILDDIR} ; ${MAKE} install

pkg:	${BUILDDIR}.pkg

${DESTDIR}${BASEDIR}:
	mkdir -p ${DESTDIR}${BASEDIR}
	mkdir -p ${DESTDIR}${BASEDIR}/bin
	mkdir -p ${DESTDIR}${BASEDIR}/man/man1
	mkdir -p ${DESTDIR}${BASEDIR}/man/man5
	mkdir -p ${DESTDIR}${BASEDIR}/man/man8
	mkdir -p ${DESTDIR}${BASEDIR}/lib
	mkdir -p ${DESTDIR}${BASEDIR}/info
	mkdir -p ${DESTDIR}${BASEDIR}/sbin
	mkdir -p ${DESTDIR}${SUPPDIR}

untarred.${BUILDDIR}: ${BUILDDIR}.tar.gz 
	gzip -cd ${BUILDDIR}.tar.gz | tar xvf -
	touch untarred.${BUILDDIR}

%.gz: %
	gzip -9 $<

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

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

${DESTDIR}/install/postinstall: ${DESTDIR}/install \
		${DESTDIR}${BASEDIR}/sbin/setuprcs \
		${DESTDIR}${BASEDIR}/sbin/setuppatch \
		${DESTDIR}${BASEDIR}/sbin/setupdiff \
		${DESTDIR}${BASEDIR}/sbin/setupgrep
	rm -f $@
	@echo "#!/bin/sh" >> $@
	@echo "${BASEDIR}/sbin/setuprcs" >> $@
	@echo "${BASEDIR}/sbin/setuppatch" >> $@
	@echo "${BASEDIR}/sbin/setupdiff" >> $@
	@echo "${BASEDIR}/sbin/setupgrep" >> $@
	chmod 755 $@

${DESTDIR}/install/preremove: ${DESTDIR}/install
	rm -f $@
	@echo "#!/bin/sh" >> $@
	@echo "rm -f ${BASEDIR}/supportbin/*" >> $@
	chmod 755 $@

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 

install-contrib: ${DESTDIR}${BASEDIR}/contrib
	cd ${BUILDDIR}/contrib ; find . -depth -print | \
		cpio -updm ${DESTDIR}${BASEDIR}/contrib

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

install-pkg: clean.${DESTDIR} build.pkg ${DESTDIR}${BASEDIR} \
		${DESTDIR}/install/postinstall ${DESTDIR}/install/preremove \
		install-contrib install-docs install-README
	cd ${BUILDDIR} ; ${MAKE} prefix=${DESTDIR}${BASEDIR} \
		INSTALL=/usr/ucb/install install

configured.${BUILDDIR}: untarred.${BUILDDIR}
	cd ${BUILDDIR} ; ./configure --prefix=${BASEDIR} \
		${CONFOPTS} 
	touch configured.${BUILDDIR}

veryclean:
	rm -rf ${BUILDDIR} ${DESTDIR} configured.${BUILDDIR} \
		untarred.${BUILDDIR} /var/spool/pkg/${PKGNAME} \
		${BUILDDIR}.pkg

${BUILDDIR}.pkg:  ${DESTDIR}/prototype
	( cd ${DESTDIR} ; pkgmk -or ./${BASEDIR} )
	$(PKGTRANS) /var/spool/pkg ${TOPDIR}/${BUILDDIR}.pkg ${PKGNAME}

${DESTDIR}/prototype: ${DESTDIR}/pkginfo
	( cd ${DESTDIR} ; echo "i pkginfo" ; \
	 find . -print | egrep -v './(prototype|pkginfo)' | $(PKGPROTO) | \
	 sed -e 's/ \([0-9][0-9]*\) [^ ][^ ]* [^ ][^ ]*$$/ \1 '"${INSTUSER} ${INSTGROUP}/" \
		-e 's|none |none /|' \
		-e 's|${BASEDIR}/||' \
		-e '/ \/opt/d' \
		-e '/ \/install /d' \
		-e 's|^f none /install/\([^ ]*\) .*|i \1=install/\1|' \
	 ) > ${DESTDIR}/prototype

${DESTDIR}/pkginfo:	install-pkg
	rm -f ${DESTDIR}/pkginfo
	@echo "PKG=\"${PKGNAME}\"" >> ${DESTDIR}/pkginfo
	@echo "NAME=\"${NAME}\"" >> ${DESTDIR}/pkginfo
	@echo "ARCH=\"${ARCH}\"" >> ${DESTDIR}/pkginfo
	@echo "VERSION=\"${VER}\"" >> ${DESTDIR}/pkginfo
	@echo "CATEGORY=\"${CATEGORY}\"" >> ${DESTDIR}/pkginfo
	@echo "VENDOR=\"${VENDOR}\"" >> ${DESTDIR}/pkginfo
	@echo "EMAIL=\"${EMAIL}\"" >> ${DESTDIR}/pkginfo
#	@echo "PSTAMP=\"${PSTAMP}\"" >> ${DESTDIR}/pkginfo
	@echo "BASEDIR=\"${BASEDIR}\"" >> ${DESTDIR}/pkginfo
	@echo "CLASSES=\"${CLASSES}\"" >> ${DESTDIR}/pkginfo


${DESTDIR}${BASEDIR}/sbin/setuprcs:
	rm -f $@
	@echo "#!/bin/sh" >> $@
	@echo "" >> $@
	@echo "SUPPDIR=$(SUPPDIR)" >> $@
	@echo "" >> $@
	@echo "makelinks() {" >> $@
	@echo "	RCSCOMMANDS=\"ci co ident merge rcs rcsclean rcsdiff rcsmerge rlog\"" >> $@
	@echo "" >> $@
	@echo "	echo \"Making links for RCS binary directory \$${RCSDIR}\"" >> $@
	@echo "" >> $@
	@echo "	for RCSCOMMAND in \$${RCSCOMMANDS}" >> $@
	@echo "	do" >> $@
	@echo "		rm -f \$${SUPPDIR}/\$${RCSCOMMAND}" >> $@
	@echo "		ln -s \$${RCSDIR}/\$${RCSCOMMAND} \$${SUPPDIR}/\$${RCSCOMMAND}" >> $@
	@echo "	done" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "searchforrcsdir() {" >> $@
	@echo "" >> $@
	@echo "	PATH=\$$PATH:/usr/local/bin:/opt/FSFrcs/bin" >> $@
	@echo "	export PATH" >> $@
	@echo "	" >> $@
	@echo "	RCSCMD=co" >> $@
	@echo "	WHICHOUT=\`which \$${RCSCMD}\`" >> $@
	@echo "	" >> $@
	@echo "	if echo \"\$${WHICHOUT}\" | grep \"^no \$${RCSCMD} in\" > /dev/null" >> $@
	@echo "	then" >> $@
	@echo "		RCSDIR=\"\"" >> $@
	@echo "	else" >> $@
	@echo "		# See if it is a symbolic link--if so, find what it references" >> $@
	@echo "		RCSCMDPATH=\`ls -l \$$WHICHOUT | sed 's/^.* \\([^ ]*\\)\$$/\\1/'\`" >> $@
	@echo "	" >> $@
	@echo "		# get just the directory" >> $@
	@echo "		RCSDIR=\`echo \$$RCSCMDPATH | sed 's|/[^/]*\$$||'\`" >> $@
	@echo "	fi" >> $@
	@echo "" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -gt 1 ]" >> $@
	@echo "then" >> $@
	@echo "	echo \"\`basename \$$0\`: too many arguments.  Usage: \`basename \$$0\` [<RCS bin directory\" >&2" >> $@
	@echo "	exit 1" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -eq 1 ]" >> $@
	@echo "then" >> $@
	@echo "	RCSDIR=\$$1;shift" >> $@
	@echo "	makelinks" >> $@
	@echo "	exit 0" >> $@
	@echo "else" >> $@
	@echo "	searchforrcsdir" >> $@
	@echo "	if [ \"x\$${RCSDIR}\" = \"x\" ]" >> $@
	@echo "	then" >> $@
	@echo "		echo \"\`basename \$$0\`: could not find RCS binary directory\" >&2" >> $@
	@echo "		echo \"Please run \\\"\`basename \$$0\` <RCS bin directory>\\\" to specify the RCS directory\" >&2" >> $@
	@echo "		exit 1" >> $@
	@echo "	fi" >> $@
	@echo "	makelinks" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "exit 0" >> $@
	chmod 755 $@

${DESTDIR}${BASEDIR}/sbin/setupdiff:
	rm -f $@
	@echo "#!/bin/sh" >> $@
	@echo "" >> $@
	@echo "SUPPDIR=$(SUPPDIR)" >> $@
	@echo "" >> $@
	@echo "makelinks() {" >> $@
	@echo "	echo \"Making link for diff from \$${DIFF}\"" >> $@
	@echo "" >> $@
	@echo "	rm -f \$${SUPPDIR}/diff" >> $@
	@echo "	ln -s \$${DIFF} \$${SUPPDIR}/diff" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "searchfordiff() {" >> $@
	@echo "" >> $@
	@echo "	PATH=\$$PATH:/usr/local/bin:/opt/FSFdiff/bin" >> $@
	@echo "	export PATH" >> $@
	@echo "" >> $@
	@echo "	PATHSAVE=\$$PATH" >> $@
	@echo "	PATH=\`echo \$$PATH | sed 's|^/bin:||;s|:/bin:|:|;s|^/usr/bin:||;s|:/usr/bin:|:|'\`" >> $@
	@echo "" >> $@
	@echo "	WHICHOUT=\`/usr/bin/which diff\`" >> $@
	@echo "" >> $@
	@echo "	PATH=\$$PATHSAVE" >> $@
	@echo "	" >> $@
	@echo "	if echo \"\$${WHICHOUT}\" | grep \"^no diff in\" > /dev/null" >> $@
	@echo "	then" >> $@
	@echo "		DIFF=\"\"" >> $@
	@echo "	else" >> $@
	@echo "		# See if it is a symbolic link--if so, find what it references" >> $@
	@echo "		DIFF=\`ls -l \$$WHICHOUT | sed 's/^.* \\([^ ]*\\)\$$/\\1/'\`" >> $@
	@echo "	fi" >> $@
	@echo "" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -gt 1 ]" >> $@
	@echo "then" >> $@
	@echo "	echo \"\`basename \$$0\`: too many arguments.  Usage: \`basename \$$0\` [<GNU diff executable>\" >&2" >> $@
	@echo "	exit 1" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -eq 1 ]" >> $@
	@echo "then" >> $@
	@echo "	DIFF=\$$1;shift" >> $@
	@echo "	makelinks" >> $@
	@echo "	exit 0" >> $@
	@echo "else" >> $@
	@echo "	searchfordiff" >> $@
	@echo "	if [ \"x\$${DIFF}\" = \"x\" ]" >> $@
	@echo "	then" >> $@
	@echo "		echo \"\`basename \$$0\`: could not find GNU diff\" >&2" >> $@
	@echo "		echo \"Please run \\\"\`basename \$$0\` <GNU diff executable>\\\" to specify a GNU diff executable\" >&2" >> $@
	@echo "		exit 1" >> $@
	@echo "	fi" >> $@
	@echo "	makelinks" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "exit 0" >> $@
	chmod 755 $@

${DESTDIR}${BASEDIR}/sbin/setuppatch:
	rm -f $@
	@echo "#!/bin/sh" >> $@
	@echo "" >> $@
	@echo "SUPPDIR=$(SUPPDIR)" >> $@
	@echo "" >> $@
	@echo "makelinks() {" >> $@
	@echo "	echo \"Making link for patch from \$${PATCH}\"" >> $@
	@echo "" >> $@
	@echo "	rm -f \$${SUPPDIR}/patch" >> $@
	@echo "	ln -s \$${PATCH} \$${SUPPDIR}/patch" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "searchforpatch() {" >> $@
	@echo "" >> $@
	@echo "	PATH=\$$PATH:/usr/local/bin:/opt/FSFpatch/bin" >> $@
	@echo "	export PATH" >> $@
	@echo "" >> $@
	@echo "	PATHSAVE=\$$PATH" >> $@
	@echo "	PATH=\`echo \$$PATH | sed 's|^/bin:||;s|:/bin:|:|;s|^/usr/bin:||;s|:/usr/bin:|:|'\`" >> $@
	@echo "" >> $@
	@echo "	WHICHOUT=\`/usr/bin/which patch\`" >> $@
	@echo "" >> $@
	@echo "	PATH=\$$PATHSAVE" >> $@
	@echo "	" >> $@
	@echo "	if echo \"\$${WHICHOUT}\" | grep \"^no patch in\" > /dev/null" >> $@
	@echo "	then" >> $@
	@echo "		PATCH=\"\"" >> $@
	@echo "	else" >> $@
	@echo "		# See if it is a symbolic link--if so, find what it references" >> $@
	@echo "		PATCH=\`ls -l \$$WHICHOUT | sed 's/^.* \\([^ ]*\\)\$$/\\1/'\`" >> $@
	@echo "	fi" >> $@
	@echo "" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -gt 1 ]" >> $@
	@echo "then" >> $@
	@echo "	echo \"\`basename \$$0\`: too many arguments.  Usage: \`basename \$$0\` [<GNU patch executable>\" >&2" >> $@
	@echo "	exit 1" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -eq 1 ]" >> $@
	@echo "then" >> $@
	@echo "	PATCH=\$$1;shift" >> $@
	@echo "	makelinks" >> $@
	@echo "	exit 0" >> $@
	@echo "else" >> $@
	@echo "	searchforpatch" >> $@
	@echo "	if [ \"x\$${PATCH}\" = \"x\" ]" >> $@
	@echo "	then" >> $@
	@echo "		echo \"\`basename \$$0\`: could not find GNU patch\" >&2" >> $@
	@echo "		echo \"Please run \\\"\`basename \$$0\` <GNU patch executable>\\\" to specify a GNU patch executable\" >&2" >> $@
	@echo "		exit 1" >> $@
	@echo "	fi" >> $@
	@echo "	makelinks" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "exit 0" >> $@
	chmod 755 $@

${DESTDIR}${BASEDIR}/sbin/setupgrep:
	rm -f $@
	@echo "#!/bin/sh" >> $@
	@echo "" >> $@
	@echo "SUPPDIR=$(SUPPDIR)" >> $@
	@echo "" >> $@
	@echo "makelinks() {" >> $@
	@echo "	echo \"Making link for grep from \$${GREP}\"" >> $@
	@echo "" >> $@
	@echo "	rm -f \$${SUPPDIR}/grep" >> $@
	@echo "	ln -s \$${GREP} \$${SUPPDIR}/grep" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "searchforgrep() {" >> $@
	@echo "" >> $@
	@echo "	PATH=\$$PATH:/usr/local/bin:/opt/FSFgrep/bin" >> $@
	@echo "	export PATH" >> $@
	@echo "" >> $@
	@echo "	WHICHOUT=\`which grep\`" >> $@
	@echo "" >> $@
	@echo "	if echo \"\$${WHICHOUT}\" | grep \"^no grep in\" > /dev/null" >> $@
	@echo "	then" >> $@
	@echo "		GREP=\"\"" >> $@
	@echo "	else" >> $@
	@echo "		# See if it is a symbolic link--if so, find what it references" >> $@
	@echo "		GREP=\`ls -l \$$WHICHOUT | sed 's/^.* \\([^ ]*\\)\$$/\\1/'\`" >> $@
	@echo "	fi" >> $@
	@echo "" >> $@
	@echo "}" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -gt 1 ]" >> $@
	@echo "then" >> $@
	@echo "	echo \"\`basename \$$0\`: too many arguments.  Usage: \`basename \$$0\` [<Grep executable>\" >&2" >> $@
	@echo "	exit 1" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "if [ \$$# -eq 1 ]" >> $@
	@echo "then" >> $@
	@echo "	GREP=\$$1;shift" >> $@
	@echo "	makelinks" >> $@
	@echo "	exit 0" >> $@
	@echo "else" >> $@
	@echo "	searchforgrep" >> $@
	@echo "	if [ \"x\$${GREP}\" = \"x\" ]" >> $@
	@echo "	then" >> $@
	@echo "		echo \"\`basename \$$0\`: could not find grep\" >&2" >> $@
	@echo "		echo \"Please run \\\"\`basename \$$0\` <Grep executable>\\\" to specify a Grep executable\" >&2" >> $@
	@echo "		exit 1" >> $@
	@echo "	fi" >> $@
	@echo "	makelinks" >> $@
	@echo "fi" >> $@
	@echo "" >> $@
	@echo "exit 0" >> $@
	chmod 755 $@

install-README: ${DESTDIR}${BASEDIR}/README

${DESTDIR}${BASEDIR}/README: ${DESTDIR}${BASEDIR}
	rm -f $@
	@echo "CVS package built by Daniel J. Gregor Jr. on `date`" >> $@
	@echo "" >> $@
	@echo "See the docs/README file for copyright information." >> $@
	@echo "" >> $@
	@echo "Documentation is in the docs/ and info/ directories." >> $@
	@echo "" >> $@
	@echo "CVS needs to know where to find grep, RCS binaries, and a" >> $@
	@echo "GNU version of patch and diff. (The ones with Solaris will" >> $@
	@echo "_not_ work!!)  There are shell scripts in the sbin/" >> $@
	@echo "that attempt to do this when the package is installed." >> $@
	@echo "If they failed, or found the wrong versions, you need to" >> $@
	@echo "make the links into supportbin/ yourself, or re-run the" >> $@
	@echo "failed scripts with the location of the binaries." >> $@
	@echo "" >> $@
	@echo "If you need to get RCS, you can find it at:" >> $@
	@echo "	ftp://opcom.sun.ca/pub/freeware/rcs-5.7.gz" >> $@
	@echo "" >> $@
	@echo "GNU patch and diff are at:" >> $@
	@echo "	ftp://opcom.sun.ca/pub/freeware/patch-2.1.gz" >> $@
	@echo "	ftp://opcom.sun.ca/pub/freeware/diffutils-2.7.gz" >> $@
	@echo "" >> $@
	@echo "If you have any questions, comments, problems, etc.," >> $@
	@echo "with this package, please contact me at <dj@gregor.com>." >> $@
	chmod 644 $@

