+##
+## 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))
+