]> granicus.if.org Git - procps-ng/commitdiff
Recursive Make Considered Harmful
authoralbert <>
Thu, 10 Oct 2002 20:55:36 +0000 (20:55 +0000)
committeralbert <>
Thu, 10 Oct 2002 20:55:36 +0000 (20:55 +0000)
Makefile [new file with mode: 0644]

diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..c92d20c
--- /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