Makefile: Generate and include dependency information for headers.
[preload-hacks] / Makefile
index 5cd1144..4f07525 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -26,6 +26,8 @@
 PACKAGE                         = preload-hacks
 VERSION                        := $(shell ./auto-version)
 
+.SECONDEXPANSION: #sorry
+
 ###--------------------------------------------------------------------------
 ### Configuration.
 
@@ -76,7 +78,7 @@ INST_BIN               = $(INSTALL) -c -m755
 MKDIRS                  = $(INSTALL) -d -m755
 
 ## Probably best if you leave these alone.
-REAL_CFLAGS             = $(CFLAGS) -fPIC
+REAL_CFLAGS             = $(CFLAGS) -fPIC -MD
 REAL_LDFLAGS            = $(LDFLAGS) -shared
 
 ###--------------------------------------------------------------------------
@@ -84,13 +86,15 @@ REAL_LDFLAGS                 = $(LDFLAGS) -shared
 
 ## noip
 HACKS                  += noip
-NOIP_SOURCES            = noip.c
-DISTFILES              += $(NOIP_SOURCES)
+noip_SOURCES            = noip.c
 
 ## uopen
 HACKS                  += uopen
-UOPEN_SOURCES           = uopen.c
-DISTFILES              += $(UOPEN_SOURCES)
+uopen_SOURCES           = uopen.c
+
+## Sources.
+ALL_SOURCES             = $(foreach h,$(HACKS),$($h_SOURCES))
+DISTFILES              += $(ALL_SOURCES)
 
 ## Libraries.
 LIBS                   += $(addsuffix .so, $(HACKS))
@@ -134,11 +138,13 @@ DISTFILES         += $(patsubst %, debian/%.lintian-overrides, \
 ###--------------------------------------------------------------------------
 ### Building.
 
-all: $(TARGETS)
+all:: $(TARGETS)
 .PHONY: ALL
 
-clean:
-       rm -f *.o $(TARGETS)
+CLEAN                  += $(TARGETS)
+CLEAN                  += *.o *.d
+clean::
+       rm -f $(CLEAN)
 .PHONY: clean
 
 ## Building sources.
@@ -146,9 +152,7 @@ clean:
        $(V_CC) -c $(REAL_CFLAGS) $< -o $@
 
 ## Constructing preload hacks.
-noip.so: $(patsubst %.c, %.o, $(NOIP_SOURCES))
-       $(V_LD) $(REAL_LDFLAGS) $< $(LDLIBS) -o $@
-uopen.so: $(patsubst %.c, %.o, $(UOPEN_SOURCES))
+$(addsuffix .so,$(HACKS)): %.so: $$(patsubst %.c,%.o,$$($$*_SOURCES))
        $(V_LD) $(REAL_LDFLAGS) $< $(LDLIBS) -o $@
 
 ## Constructing the scripts.
@@ -156,6 +160,8 @@ $(SCRIPTS): %: withlib.in
        $(V_GEN)sed "s/@lib@/$@/" withlib.in >$@.new && \
                chmod +x $@.new && mv $@.new $@
 
+-include $(patsubst %.c,%d,$(ALL_SOURCES))
+
 ###--------------------------------------------------------------------------
 ### Installation.