Recursive Make Considered Harmful
This commit is contained in:
parent
a22831332b
commit
ab9a738c7c
149
Makefile
Normal file
149
Makefile
Normal file
@ -0,0 +1,149 @@
|
||||
# procps Makefile
|
||||
# Albert Cahalan, 2002
|
||||
#
|
||||
# Recursive make is considered harmful:
|
||||
# http://google.com/search?q=%22recursive+make+considered+harmful%22
|
||||
#
|
||||
# For now this Makefile uses explicit dependencies. The project
|
||||
# hasn't grown big enough to need something complicated, and the
|
||||
# dependency tracking files are an ugly annoyance.
|
||||
#
|
||||
# This file includes */module.mk files which add on to variables:
|
||||
# FOO += bar/baz
|
||||
|
||||
VERSION := 3
|
||||
SUBVERSION := 0
|
||||
MINORVERSION := 1
|
||||
LIBVERSION := 3.0.1
|
||||
|
||||
############ vars
|
||||
|
||||
# so you can disable them or choose alternates
|
||||
ldconfig := ldconfig
|
||||
ln-f := ln -f
|
||||
ln-sf := ln -sf
|
||||
install := install --owner 0 --group 0
|
||||
|
||||
usr/bin := $(DESTDIR)/usr/bin/
|
||||
bin := $(DESTDIR)/bin/
|
||||
sbin := $(DESTDIR)/sbin/
|
||||
usr/proc/bin := $(DESTDIR)/usr/bin/
|
||||
man1 := $(DESTDIR)/usr/share/man/man1/
|
||||
man5 := $(DESTDIR)/usr/share/man/man5/
|
||||
man8 := $(DESTDIR)/usr/share/man/man8/
|
||||
etc/X11/applnk/Utilities := $(DESTDIR)/etc/X11/applnk/Utilities/
|
||||
usr/X11R6/bin := $(DESTDIR)/usr/X11R6/bin/
|
||||
lib := $(DESTDIR)/lib/
|
||||
usr/lib := $(DESTDIR)/usr/lib/
|
||||
usr/include := $(DESTDIR)/usr/include/
|
||||
|
||||
BINFILES := $(usr/bin)uptime $(usr/bin)tload $(usr/bin)free $(usr/bin)w \
|
||||
$(usr/bin)top $(usr/bin)vmstat $(usr/bin)watch $(usr/bin)skill \
|
||||
$(usr/bin)snice $(bin)kill $(sbin)sysctl \
|
||||
$(usr/proc/bin)pgrep $(usr/proc/bin)pkill
|
||||
|
||||
SCRFILES := $(etc/X11/applnk/Utilities)top.desktop $(usr/X11R6/bin)XConsole
|
||||
|
||||
MANFILES := $(man1)uptime.1 $(man1)tload.1 $(man1)free.1 $(man1)w.1 \
|
||||
$(man1)top.1 $(man1)watch.1 $(man1)skill.1 $(man1)kill.1 \
|
||||
$(man1)snice.1 $(man1)pgrep.1 $(man1)pkill.1 \
|
||||
$(man5)sysctl.conf.5 $(man8)vmstat.8 $(man8)sysctl.8
|
||||
|
||||
CURSES := -I/usr/include/ncurses -lncurses
|
||||
|
||||
LDFLAGS := -Wl,-warn-common
|
||||
|
||||
CFLAGS := -D_GNU_SOURCE -O2 -g3 -fno-common -ffast-math -I proc \
|
||||
-Wcast-align -Wconversion -Wredundant-decls \
|
||||
-Wbad-function-cast -Wcast-qual -Wwrite-strings -Waggregate-return \
|
||||
# -Wpadded -Wunreachable-code -Wdisabled-optimization \
|
||||
-W -Wall -Wstrict-prototypes -Wshadow -Wmissing-prototypes
|
||||
|
||||
############ misc.
|
||||
|
||||
# free.c pmap.c sysctl.c uptime.c vmstat.c watch.c pgrep.c skill.c tload.c top.c w.c
|
||||
# utmp.c oldtop.c tmp-junk.c minimal.c
|
||||
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .a .o .c .s .h
|
||||
|
||||
.PHONY: all clean do_all install # ps
|
||||
|
||||
ALL := $(notdir $(BINFILES))
|
||||
|
||||
CLEAN := $(notdir $(BINFILES))
|
||||
|
||||
DIRS :=
|
||||
|
||||
INSTALL := $(BINFILES) $(MANFILES) $(SCRFILES)
|
||||
|
||||
# want this rule first, use := on ALL, and ALL not filled in yet
|
||||
all: do_all
|
||||
|
||||
-include */module.mk
|
||||
|
||||
do_all: $(ALL)
|
||||
|
||||
junk := DEADJOE *~ *.o core gmon.out
|
||||
|
||||
# Remove $(junk) from all $(DIRS)
|
||||
CLEAN += $(junk) $(foreach dir,$(DIRS),$(addprefix $(dir), $(junk)))
|
||||
|
||||
# Unfortunately the program and directory name are the same.
|
||||
# So ps is a .PHONY that depends on ps/ps.
|
||||
#ps: ps/ps
|
||||
# @echo MAKEFILE WANTS TO MAKE PS
|
||||
#
|
||||
#SRC :=
|
||||
#OBJ := $(patsubst %.c,%.o, $(filter %.c,$(SRC)))
|
||||
#
|
||||
#ifneq ($(MAKECMDGOALS),clean)
|
||||
#-include $(OBJ:.o=.d)
|
||||
#endif
|
||||
#
|
||||
#%.d: %.c
|
||||
# depend.sh $(CFLAGS) $< > $@
|
||||
|
||||
clean:
|
||||
rm -f $(CLEAN)
|
||||
|
||||
###### install
|
||||
|
||||
$(BINFILES) : $(@F)
|
||||
$(install) --mode a=rx --strip $< $@
|
||||
|
||||
$(SCRFILES) : $(@F)
|
||||
$(install) --mode a=rx $< $@
|
||||
|
||||
$(MANFILES) : $(@F)
|
||||
$(install) --mode a=r $< $@
|
||||
|
||||
install: $(INSTALL)
|
||||
cd $(usr/bin) && ($(ln-f) skill snice; $(ln-f) skill kill; $(ln-f) pgrep pkill)
|
||||
|
||||
############ prog.c --> prog.o
|
||||
|
||||
%.o : %.c
|
||||
$(CC) $(CFLAGS) -c -o $@ $^
|
||||
|
||||
w.o: w.c
|
||||
$(CC) $(CFLAGS) $(W_SHOWFROM) -c $<
|
||||
|
||||
############ prog.o --> prog
|
||||
|
||||
w uptime tload free vmstat utmp pgrep skill: % : %.o $(LIBPROC)
|
||||
$(CC) $(LDFLAGS) -o $@ $^
|
||||
|
||||
top: % : %.o $(LIBPROC)
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(CURSES)
|
||||
|
||||
watch: % : %.o
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(CURSES)
|
||||
|
||||
############ progX --> progY
|
||||
|
||||
snice kill: skill
|
||||
$(ln-f) skill $@
|
||||
|
||||
pkill: pgrep
|
||||
$(ln-f) pgrep pkill
|
Loading…
Reference in New Issue
Block a user