# Makefile for the kmem-ps suite of programs
# for Linux version 1.1.18.

#### Start of system configuration section. ####

# Compile time options:
#VERSION_CHECK = -DVERSION_CHECK

CC = gcc
CPPFLAGS =
CFLAGS = -O2
WARNFLAGS = -Wall -Wstrict-prototypes
LDFLAGS = -s
# For top
LDLIBS = -ltermcap
# Where the kernel source is located.
KERNEL_SRCDIR = /usr/src/linux
# Name of the group the can read /dev/kmem.
KMEM = kmem
# How to install sgid-kmem programs.
KMEM_INSTALL = install -g $(KMEM) -m 2755
# Files that will be chgrped to kmem
KMEM_FILES = /dev/kmem /dev/swap*
# If you like hard links, take out the -s.
LN_S = ln -s
# How to install ordinary programs.
INSTALL_PROG = install -m 755
# How to install data files like man pages.
INSTALL_DATA = install -m 644

# Programs which normally go in /bin.
BIN_PROGS = ps
# Programs which normally go in /usr/bin.
USRBIN_PROGS = fstat free memmap tload top w
# Programs which normally go /usr/sbin.
USRSBIN_PROGS = clrprof kprof
# Manpages which normally go in /usr/man/man1.
MAN1_PAGES = ps.1
# Manpages which normally go in /usr/man/man8.
MAN8_PAGES = kprof.8

# Where the psdatabase goes.
ETC_DIR = /etc
# Where BIN_PROGS are installed.
BIN_DIR = /bin
# Where USRBIN_PROGS are installed.
USRBIN_DIR = /usr/bin
# Where USRSBIN_PROGS are installed.
USRSBIN_DIR = /usr/sbin
# Where MAN1_PAGES are installed.
MAN1_DIR = /usr/man/man1
# Where MAN8_PAGES are installed.
MAN8_DIR = /usr/man/man8

#### End of system configuration section. ####

# Doesn't work yet, don't use it.
#USE_MMAP = -DUSE_MMAP

PSDB = -DPSDATABASE=\"$(ETC_DIR)/psdatabase\"
DEFS = $(PSDB) $(USE_MMAP) $(VERSION_CHECK)
INCLUDES = -I$(KERNEL_SRCDIR)

ALL_PROGS = $(BIN_PROGS) $(USRBIN_PROGS) $(USRSBIN_PROGS)

PS_OBJ = ps.o ps_subr.o ps_mem.o psdata.o update_db.o cmdline.o devname.o pwcache.o
W_OBJ =	w.o attime.o no_update.o cmdline.o w_linux.o
TOP_OBJ = top.o ps_subr.o ps_mem.o no_update.o cmdline.o pwcache.o devname.o

COMPILE = $(CC) -c $(CPPFLAGS) $(DEFS) $(INCLUDES) $(CFLAGS) $(WARNFLAGS)
LINK = $(CC) $(LDFLAGS) -o $@

.c.o:
	$(COMPILE) $<

all: $(ALL_PROGS)

ps: $(PS_OBJ)
	$(LINK) $(PS_OBJ)

fstat: fstat.o no_update.o pwcache.o ps_mem.o strmode.o
	$(LINK) fstat.o no_update.o pwcache.o ps_mem.o strmode.o

kprof: kprof.o no_update.o
	$(LINK) kprof.o no_update.o

clrprof: clrprof.o no_update.o
	$(LINK) clrprof.o no_update.o

memmap: memmap.o no_update.o
	$(LINK) memmap.o no_update.o

free: free.o no_update.o ps_mem.o
	$(LINK) free.o no_update.o ps_mem.o

tload: tload.o no_update.o
	$(LINK) tload.o no_update.o

procw: procw.o attime.o
	$(LINK) procw.o attime.o

w: $(W_OBJ)
	$(LINK) $(W_OBJ)

top: $(TOP_OBJ)
	$(LINK) $(TOP_OBJ) $(LDLIBS)


no_update.o: psdata.c
	$(COMPILE) -DNO_UPDATE -c psdata.c -o no_update.o

man ps.0: ps.1
	groff -Tascii -man ps.1 >ps.0

install: $(ALL_PROGS)
	for file in $(KMEM_FILES); do \
		if [ -f $$file ]; then \
			chgrp $(KMEM) $$file; \
			chmod g+r $$file; \
		fi; \
	done
	$(KMEM_INSTALL) $(BIN_PROGS) $(BIN_DIR)
	$(KMEM_INSTALL) $(USRBIN_PROGS) $(USRBIN_DIR)
	$(INSTALL_PROG) $(USRSBIN_PROGS) $(USRSBIN_DIR)
	$(INSTALL_DATA) $(MAN1_PAGES) $(MAN1_DIR)
	$(INSTALL_DATA) $(MAN8_PAGES) $(MAN8_DIR)
	rm -f $(USRBIN_DIR)/uptime
	(cd $(USRBIN_DIR) && $(LN_S) w uptime)
	rm -f $(USRBIN_DIR)/fuser
	(cd $(USRBIN_DIR) && $(LN_S) fstat fuser)

ps.o: syscallent.h
fstat.o ps.o ps_mem.o psdata.o update_db.o: psdata.h
cmdline.o free.o fstat.o mmemap.o ps.o ps_mem.o ps_subr.o top.o: ps.h

clean:
	rm -f *.o *.a .depend core a.out $(ALL_PROGS)

dep .depend:
	$(CC) -M $(CFLAGS) *.c >.depend

.SUFFIXES: .i

.c.i:
	$(CC) -E $(CFLAGS) -o $@ $<

#
# include a dependency file if one exists
#
ifeq (.depend,$(wildcard .depend))
include .depend
endif

