#
#  di makefile
#
#  Copyright 1994 Brad Lanam
#
#  $Id: $
#  @(#)Makefile	1.11
#
# select:
#   one of
#     HAS_MNTTAB       (SysV.4, Solaris)
#     HAS_SVR3_MNTTAB  (SysV.3, Xenix, SCO, Coherent)
#     HAS_MNTENT       (SunOS, Pyramid, sgi, NeXT, linux)
#     HAS_GETMNTINFO   (OSF1, FreeBSD)
#     HAS_GETMNT       (ULTRIX)
#     HAS_MNTCTL       (AIX)
#   one of
#     HAS_STATVFS      (SysV.4, Solaris, sgi-irix-5)
#     HAS_STATFS       (SunOS, Pyramid, NeXT, linux, AIX)
#     HAS_SYSV_STATFS  (SysV.3, sgi-irix-4, Xenix, SCO, Coherent)
#     none needed      (ULTRIX, OSF1, FreeBSD)
#   other
#     NEED_GETOPT_DEFS (SysV.3, SunOS, Pyramid, sgi-irix-4, ULTRIX, NeXT, Xenix)
#                      Your system may or may not need this depending on
#                      compiler options, your version of os, the phase of
#                      the full moon, etc.
#     NEED_ERRNO_DEFS  (Pyramid, NeXT)
#     NEED_STATFS_DEFS (Linux)
#     HAS_SYSFS        (SysV.3, sgi)
#     HAS_NO_STDLIB_H  (if doesn't have <stdlib.h>; Pyramid)
#     HAS_STRINGS_H    (if using <strings.h> instead of <string.h>;
#                       Pyramid, NeXT)
#     HAS_NO_MALLOC_H  (if doesn't have <malloc.h>; Pyramid, NeXT, Xenix,
#                       FreeBSD)
#     HAS_NO_MEMORY_H  (if doesn't have <memory.h>; Pyramid)
#     HAS_BZERO        (bzero() rather than memset; Pyramid, NeXT)
#     HAS_NO_UNISTD_H  (if doesn't have <unistd.h>; NeXT)
#     HAS_NO_FSTYPES_H (FreeBSD)
#     NEED_BZERO_DEFS
#     NEED_BCOPY_DEFS
#
#  HISTORY:
#       24 nov 94 bll
#           added FreeBsd
#       2 jun 94 bll
#           added separate dynix; solaris w/gcc; fixed $(MAKE)
#       1 may 94 bll
#           added aix, coherent
#       7 apr 94 bll
#           Cleaned up sgi.
#       4 mar 94 bll
#           Added osf1, ultrix, solaris as a separate entry.
#       3 mar 94 bll
#           man page installation.
#       1 mar 94 bll
#           Added documentation.
#       1 mar 94 bll
#           Added defines for pyramid; rewrote make to select system;
#           added sgi.  Rewrote install to be portable.
#

SHELL = /bin/sh
CC = cc

#
# additional flags/libraries
#
CFLAGS =
LDFLAGS =
LIBS =

#
# installation options
#
STRIP = strip
MCS = mcs -d
USER = root
GROUP = bin
INSTDIR = /var/local/bin
PROG = di
TARGET = $(INSTDIR)/$(PROG)
#INSTPERM = 111   # change USER to bin also...
INSTPERM = 4111   # install suid if your system has a mount table only root
                  # can read.  SysV.4, Solaris are two.

#
# simple man page installation
#
TOPMANDIR=/var/local/man
CATDIR=cat1
MANDIR=man1
MANEXT=.1
COMPRESS=compress
COMPEXT=.Z
NROFF=nroff -man
MANTARGET=$(PROG)$(MANEXT)$(COMPEXT)
MANPERM = 444
MANUSER = bin
MANGRP = bin

nothing:
	@echo "Usage: make <system>"
	@echo "  where system is one of:"
	@echo "       aix         - AIX V3.2"
	@echo "       coherent    - Coherent 4.2"
	@echo "       dynix       - Sequent DYNIX 3.2"
	@echo "       freebsd     - FreeBSD"
	@echo "       hpux        - HP/UX"
	@echo "       linux       - Linux"
	@echo "       next3       - NextStep 3.x"
	@echo "       osf1        - OSF/1"
	@echo "       ptx         - Sequent DYNIX/ptx v2.0+"
	@echo "       pyr         - pyramid"
	@echo "       sco         - SCO w/getopt"
	@echo "       sco-2       - SCO w/o getopt (3.2.4 / ODT 3.0)"
	@echo "       sco_sl      - SCO w/o getopt w/shared lib (3.2.4/ODT 3.0)"
	@echo "       sgi4        - SGI Irix 4.x"
	@echo "       sgi5        - SGI Irix 5.x"
	@echo "       solaris     - Solaris 2.x"
	@echo "       solaris-gcc - Solaris 2.x w/gcc C compiler"
	@echo "       sun         - SunOS 4.x"
	@echo "       sysv3       - System V R3"
	@echo "       sysv4       - System V R4"
	@echo "       ultrix      - Ultrix"
	@echo "       xenix       - Xenix"
	@echo
	@echo "       'make install' to install the program."
	@echo "       'make installman' to install the man pages."
	@echo "       or 'make installcatman' to install the man pages."
	@echo

aix:
	@$(MAKE) CFLAGS="$(CFLAGS) -DHAS_MNTCTL=1 -DHAS_STATFS=1" all


#
# tested on Coherent 4.2.05
#
# Apparently coherent swaps the name and special device fields around
# in their mount table.  Otherwise is SysV.3.
#
coherent:
	@$(MAKE) CFLAGS="$(CFLAGS) -f -O -DHAS_SYSV_STATFS=1 -DHAS_SVR3_MNTTAB=1 \
            -DNEED_GETOPT_DEFS=1" all


dynix:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_MNTENT=1 -DHAS_STATFS=1 \
	-DHAS_NO_MALLOC_H -DNEED_GETOPT_DEFS" \
	LIBS="-lseq" all

freebsd:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_GETMNTINFO=1 -DHAS_NO_MALLOC_H \
	-DHAS_NO_FSTYPES_H" all

#
# CFLAGS="-Aa"
#
# > Pasi.Kaara@tpo.fi
# On hp-ux 8.02 di needs " -DNEED_GETOPT_DEFS=1 ".
# On hp-ux 9.00 it is not needed, but it does not hurt either.
#
hpux:
	@$(MAKE) CFLAGS="$(CFLAGS) +O3 -D_HPUX_SOURCE -DHAS_MNTENT=1 \
		-DHAS_STATFS=1 -DNEED_GETOPT_DEFS=1" all

#
# CFLAGS="-m486"
# also might need -DNEED_STATFS_DEFS=1
#
# Tested w/SLS 1.02
linux:
	@$(MAKE) CFLAGS="$(CFLAGS) -O6 -N -s -DHAS_MNTENT=1 -DHAS_STATFS=1" \
		LDFLAGS="$(LDFLAGS) -N -s" all

# Definition for NextStep 3.x
next3:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_STATFS=1 -DHAS_MNTENT=1 \
                -DNEED_GETOPT_DEFS=1 -DHAS_NO_MALLOC_H=1\
                -DHAS_STRINGS_H=1 -DHAS_BZERO=1 \
                -DNEED_ERRNO_DEFS=1 -DHAS_NO_UNISTD_H=1" all

osf1:
	@$(MAKE) CFLAGS="$(CFLAGS) -DHAS_GETMNTINFO=1" all

#
# Use the following for Sequent DYNIX/ptx v2.0+
#
ptx:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_MNTENT=1 -DHAS_SYSV_STATFS=1" \
		LIBS="-lseq" all

pyr:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -Xa -DHAS_STATFS=1 -DHAS_MNTENT=1 \
                -DNEED_GETOPT_DEFS=1 -DHAS_NO_MALLOC_H=1 -DHAS_NO_MEMORY_H=1 \
                -DHAS_NO_STDLIB_H=1 -DHAS_STRINGS_H=1 -DHAS_BZERO=1 \
                -DNEED_ERRNO_DEFS=1" all

#
# SCO UNIX and ODT
#
# may need -DNEED_GETOPT_DEFS=1
#
sco:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_SYSV_STATFS=1 -DHAS_SVR3_MNTTAB=1 \
            -DNEED_GETOPT_DEFS=1 -DHAS_SYSFS=1 -DHAS_NO_MNTOPTS" all

sco-2:		# use for UNIX 3.2.4 and ODT 3.0
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_SYSV_STATFS=1 -DHAS_SVR3_MNTTAB=1 \
            -DHAS_SYSFS=1 -DHAS_NO_MNTOPTS" all

sco_sl:		# SCO UNIX/ODT with shared libs (small executable)
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_SYSV_STATFS=1 -DHAS_SVR3_MNTTAB=1 \
			-DHAS_SYSFS=1 -DHAS_NO_MNTOPTS"
			LDFLAGS="-s -nointl" \
	    LIBS="-lc_s" all

sgi4:
	@$(MAKE) CFLAGS="$(CFLAGS) -O2 -DHAS_MNTENT=1 -DHAS_SYSV_STATFS=1 \
                -DHAS_SYSFS=1 -DNEED_GETOPT_DEFS=1" LIBS="-lsun" all

sgi5:
	@$(MAKE) CFLAGS="$(CFLAGS) -O2 -DHAS_MNTENT=1 -DHAS_STATVFS=1 \
		-DHAS_SYSFS=1" LIBS="-lsun" all

solaris:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -Xc -v -DHAS_STATVFS=1 -DHAS_MNTTAB=1 \
                -DNEED_GETOPT_DEFS=1" all

solaris-gcc:
	@$(MAKE) CC="gcc" CFLAGS="$(CFLAGS) -O -v -DHAS_STATVFS=1 \
		-DHAS_MNTTAB=1" all

#
# gcc compilation for sun4...
#gcc -g -Wall -O -DHAS_STATFS -DHAS_MNTENT -DNEED_GETOPT_DEFS \
#    -target sun4 -c  di.c
#
sun:
	@$(MAKE) CFLAGS="$(CFLAGS) -O2 -DHAS_STATFS=1 -DHAS_MNTENT=1 \
            -DNEED_GETOPT_DEFS=1" all

sysv3:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -DHAS_SYSV_STATFS=1 -DHAS_SVR3_MNTTAB=1 \
            -DHAS_SYSFS=1 -DNEED_GETOPT_DEFS=1" all

sysv4:
	@$(MAKE) CFLAGS="$(CFLAGS) -O -Xc -v -DHAS_STATVFS=1 -DHAS_MNTTAB=1" \
		LDFLAGS="$(LDFLAGS) -s" all

sysv4-2:
	@$(MAKE) CFLAGS="$(CFLAGS) -Xc -v -DHAS_SYSV_STATFS=1 -DHAS_MNTTAB=1 \
            -DHAS_SYSFS=1" LDFLAGS="$(LDFLAGS) -s -Xc" all

sysv4-3:
	@$(MAKE) CFLAGS="$(CFLAGS) -Xc -v -I/usr/ucbinclude -DHAS_STATVFS=1 \
            -DHAS_MNTTAB=1 -DHAS_STRINGS_H=1 -DHAS_BZERO=1 -DNEED_BZERO_DEFS=1 \
            -DHAS_NO_MEMORY_H=1 -DNEED_BCOPY_DEFS=1" LDFLAGS="$(LDFLAGS) -Xc" \
            LIBS="/usr/ucblib/libucb.a" all

ultrix:
	@$(MAKE) CFLAGS="$(CFLAGS) -DHAS_GETMNT=1 -DNEED_GETOPT_DEFS=1" all

xenix:
	@$(MAKE) CFLAGS="$(CFLAGS) -DHAS_SYSV_STATFS=1 -DHAS_SVR3_MNTTAB=1 \
			-DHAS_NO_MALLOC_H=1 -DNEED_GETOPT_DEFS=1" all

####################

LINTOUT = lint.out

lint:
	> $(LINTOUT)
	@echo "::::::::::::::" >> $(LINTOUT)
	@echo "sysv4" >> $(LINTOUT)
	@echo "::::::::::::::" >> $(LINTOUT)
	-lint -p -Xc -DHAS_STATVFS=1 -DHAS_MNTTAB=1 di.c >> $(LINTOUT)

test:
	make clean
	make sysv4
	mv di di-4
	make clean
	make sysv4-2
	mv di di-3
	make clean
	make sysv4-3
	mv di di-4a
	./di-4 -f "MmSsbuf1iUFPTC" > out-4
	cp out-4 out-3  # so we don't get a difference because of out* files.
	cp out-4 out-4a  # so we don't get a difference because of out* files.
	@make test-2

test-2:
	./di-4 -a -f "MmSsbuf1iUFPTC" > out-4
	./di-3 -a -f "MmSsbuf1iUFPTC" > out-3
	./di-4a -a -f "MmSsbuf1iUFPTC" > out-4a
	diff out-3 out-4
	diff out-3 out-4a

all:	di

clean:
	-rm -f di di.o

realclean:
	-rm -f di di.o di-3 di-4 di-4a out-* \
             lint.out di.shar Makelog >/dev/null 2>&1

install:
	$(STRIP) di
	$(MCS) di
	test -f $(TARGET) && mv $(TARGET) $(TARGET).old
	cp di $(TARGET)
	chown $(USER) $(TARGET)
	chgrp $(GROUP) $(TARGET)
	chmod $(INSTPERM) $(TARGET)

installman:
	cat di.1 | $(COMPRESS) > $(TOPMANDIR)/$(MANDIR)/$(MANTARGET)
	chown $(MANUSER) $(TOPMANDIR)/$(MANDIR)/$(MANTARGET)
	chgrp $(MANGRP) $(TOPMANDIR)/$(MANDIR)/$(MANTARGET)
	chmod $(MANPERM) $(TOPMANDIR)/$(MANDIR)/$(MANTARGET)

installcatman:
	$(NROFF) di.1 | $(COMPRESS) > $(TOPMANDIR)/$(CATDIR)/$(MANTARGET)
	chown $(MANUSER) $(TOPMANDIR)/$(CATDIR)/$(MANTARGET)
	chgrp $(MANGRP) $(TOPMANDIR)/$(CATDIR)/$(MANTARGET)
	chmod $(MANPERM) $(TOPMANDIR)/$(CATDIR)/$(MANTARGET)

di:	di.o
	$(CC) $(CFLAGS) $(LDFLAGS) -o di di.o $(LIBS)

di.o:	di.c
	$(CC) -c $(CFLAGS) di.c

sccsget:
	get -e SCCS

shar:	di.shar

MANIFEST:
	echo "" > MANIFEST
	echo "" >> MANIFEST
	echo "README		1	Read This" >> MANIFEST
	echo "di.1		1	di Manual Page" >> MANIFEST
	echo "di.c		1	di source" >> MANIFEST
	echo "Makefile		1	di makefile" >> MANIFEST

di.shar:	MANIFEST README di.1 di.c Makefile
	-rm -f di.shar Part??
	makekit -m -s100k
	-@rm -f MANIFEST.BAK
	sh setname.sh
	touch di.shar
