From: albert <> Date: Thu, 10 Oct 2002 20:55:36 +0000 (+0000) Subject: Recursive Make Considered Harmful X-Git-Tag: v3.3.0~447 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ab9a738c7c2f9ca261f7ac764316a9dbefabdc4b;p=procps-ng Recursive Make Considered Harmful --- diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..c92d20c2 --- /dev/null +++ b/Makefile @@ -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