and support the _HEADERS variables as well
[apps/madtty.git] / am / footer.mk
index 5b935b7..0acffb8 100644 (file)
@@ -3,10 +3,6 @@
 AUTO_DEPENDS += filter_c
 filter_c = $(addprefix $2/,$(patsubst %.c,%.o,$(filter %.c,$1)))
 
-# this is some ad-hoc last resort dependency method
-%.a: FORCE
-       @$(MAKE) -q -rC $(dir $(@D)) $(_cobjs)/$(@F) || $(MAKE) -rC $(dir $(@D)) $(_cobjs)/$(@F)
-
 # this implicit rule is used to force directory existence, without depending
 # on the directory itself, since its mtime changes too often.
 %/.exists: Makefile $(CONFDIR)/$(wildcard *.mk)
@@ -31,34 +27,91 @@ endef
 
 deps_create = $(foreach f,$(AUTO_DEPENDS),$(call $f,$1,$2))
 
+##
+##  rules for *_PROGRAMS
+##
+
+install-PROGRAMS/%::
+       $(if $($*dir),$(INSTALL_DIR) $(DESTDIR)$($*dir))
+       $(if $($*dir),$(INSTALL_PROGRAMS) $($*_PROGRAMS:=.so*) $(DESTDIR)$($*dir))
+
+define CLASS_PROGRAMS_tpl
+  all:: $1
+  install-PROGRAMS/$2:: $1
+  install:: install-PROGRAMS/$2
+
+  $1: $$(call deps_create,$$($1_SOURCES),$(_cobjs)/$1)
+       $(CC) $$(CFLAGS) $$($1_CPPFLAGS) -o $$@ $$(filter %.o,$$^) \
+               $$(LDFLAGS) $$($1_LDFLAGS) $$($1_LIBADD)
+
+  $$(eval $$(call RULE_C_tpl,$1,))
+
+  clean::
+           $(RM) $1
+endef
+$(foreach v,$(filter %_PROGRAMS,$(.VARIABLES)), \
+            $(foreach x,$($v),$(eval $(call CLASS_PROGRAMS_tpl,$x,$(v:_PROGRAMS=)))))
+
+##
+##  rules for *_LIBRARIES
+##
+
+install-LIBRARIES/%::
+       $(if $($*dir),$(INSTALL_DIR) $(DESTDIR)$($*dir))
+       $(if $($*dir),$(INSTALL_DATA) $($*_LIBRARIES:=.so*) $(DESTDIR)$($*dir))
+
 define CLASS_LIBRARIES_tpl
-all:: $1.so
+  all:: $1.so$3
+  install-LIBRARIES/$2:: $1.so$3
 
-$1.so: $(_cobjs)/$1/.exists $$(call deps_create,$$($1_SOURCES),$(_cobjs)/$1)
-       $(CC) $$(CFLAGS) $$($1_CPPFLAGS) -fPIC -shared -o $$@ \
-           $$(filter %.o,$$^) $$(LDFLAGS) $$($1_LDFLAGS) $$($1_LIBADD)
+  install:: install-LIBRARIES/$2
 
-$$(eval $$(call RULE_C_tpl,$1,-fPIC $2))
+  $1.so$3: $$(call deps_create,$$($1_SOURCES),$(_cobjs)/$1)
+       $(CC) $$(CFLAGS) $$($1_CPPFLAGS) -fPIC -shared -o $$@ $$(filter %.o,$$^) \
+               $$(LDFLAGS) $$($1_LDFLAGS) $$($1_LIBADD)
+       $$(if $$(word 2,$$(subst ., ,$3)),ln -sf $$@ $1.so.$$(word 1,$$(subst ., ,$3)))
+       $$(if $$($1_VERSION), ln -sf $$@ $1.so)
 
-clean::
-       $(RM) $1.so
+  $$(eval $$(call RULE_C_tpl,$1,-fPIC))
+
+  clean::
+           $(RM) $1.so*
 endef
-$(foreach l, \
-    $(foreach l,$(filter %_LIBRARIES,$(.VARIABLES)),$($l)), \
-    $(eval $(call CLASS_LIBRARIES_tpl,$l,)))
-
-#define CLASS_EXE_tpl
-#all:: $1
-#$1: $(_cobjs)/$1/.exists $$(call deps_create,$$($1_SOURCES),$(_cobjs)/$1)
-#      $(CC) -o $$@ $$(CFLAGS) $$($1_CPPFLAGS) $$(filter %.o,$$^) \
-#               $$(LDFLAGS) $$($1_LDFLAGS) $$(filter %.a,$$^)
-#
-#$$(eval $$(call RULE_C_tpl,$1,$2))
-#
-#clean::
-#      $(RM) $1
-#endef
-#$(foreach x,$(__EXE__),$(eval $(call CLASS_EXE_tpl,$x,)))
+$(foreach v,$(filter %_LIBRARIES,$(.VARIABLES)), \
+            $(foreach x,$($v),$(eval $(call CLASS_LIBRARIES_tpl,$x,$(v:_LIBRARIES=),$(...\
+           ...)$(if $($x_VERSION),.$($x_VERSION))))))
+
+
+##
+##  rules for *_DATA
+##
+
+install-DATA/%::
+       $(if $($*dir), $(INSTALL_DIR) $(DESTDIR)$($*dir))
+       $(if $($*dir), $(INSTALL_DATA) $($*_DATA) $(DESTDIR)$($*dir))
+
+install:: $(foreach v,$(filter %_DATA,$(.VARIABLES)),$(patsubst %_DATA,install-DATA/%,$v))
+
+##
+##  rules for *_SCRIPTS
+##
+
+install-SCRIPTS/%::
+       $(if $($*dir), $(INSTALL_DIR) $(DESTDIR)$($*dir))
+       $(if $($*dir), $(INSTALL_PROGRAMS) $($*_SCRIPTS) $(DESTDIR)$($*dir))
+
+install:: $(foreach v,$(filter %_SCRIPTS,$(.VARIABLES)),$(patsubst %_SCRIPTS,install-SCRIPTS/%,$v))
+
+##
+##  rules for *_HEADERS
+##
+
+install-HEADERS/%::
+       $(if $($*dir), $(INSTALL_DIR) $(DESTDIR)$($*dir))
+       $(if $($*dir), $(INSTALL_DATA) $($*_HEADERS) $(DESTDIR)$($*dir))
+
+install:: $(foreach v,$(filter %_HEADERS,$(.VARIABLES)),$(patsubst %_HEADERS,install-HEADERS/%,$v))
+
 
 ########################################################################}}}#
 #[ Candy ]##############################################################{{{#
@@ -84,16 +137,21 @@ endif
 
 ########################################################################}}}#
 
-all check clobber distclean::
+all check clobber distclean install::
        @set -e $(patsubst %,; $(MAKE) -rC % $@,$(SUBDIRS))
 
 CLEAN_RECURSE=1
 clean::
-       $(RM) -r $(_cobjs)
+       $(RM) -r $(_cobjs) $(CLEANFILES)
        @$(if $(CLEAN_RECURSE),$(patsubst %,$(MAKE) -rC % $@;,$(SUBDIRS)))
 
 clobber distclean:: CLEAN_RECURSE=
 clobber distclean:: clean
-       $(RM) -r .objs*
+       $(RM) -r .objs* $(DISTCLEANFILES)
+
+ifeq (".","$(DEPTH)")
+clobber distclean::
+       $(RM) $(patsubst %.in,%,$(wildcard $(CONFDIR)/*.in))
+endif
 
-.PHONY: all check clean clobber distclean FORCE
+.PHONY: all check clean clobber distclean install FORCE