changeset 20344:822bc711359a

use GNU Make features to eliminate redundancy in scripts/Makefile.am * scripts/Makefile.am: Use template and $(call ...) to generate repetitive rules. * scripts/plot/util/module.mk: Fix directory name.
author John W. Eaton <jwe@octave.org>
date Tue, 07 Jul 2015 11:51:45 -0400
parents bacaec9b5535
children c7f9fcff42f2
files scripts/Makefile.am scripts/plot/util/module.mk
diffstat 2 files changed, 18 insertions(+), 318 deletions(-) [+]
line wrap: on
line diff
--- a/scripts/Makefile.am	Tue Jul 07 10:40:38 2015 -0400
+++ b/scripts/Makefile.am	Tue Jul 07 11:51:45 2015 -0400
@@ -90,322 +90,25 @@
 
 octave_dirstamp = $(am__leading_dot)dirstamp
 
-@ftp/PKG_ADD: $(@ftp_FCN_FILES) $(@ftp_GEN_FCN_FILES) @ftp/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(@ftp_FCN_FILES) -- $(@ftp_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-audio/PKG_ADD: $(audio_FCN_FILES) $(audio_GEN_FCN_FILES) audio/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(audio_FCN_FILES) -- $(audio_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-deprecated/PKG_ADD: $(deprecated_FCN_FILES) $(deprecated_GEN_FCN_FILES) deprecated/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(deprecated_FCN_FILES) -- $(deprecated_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-elfun/PKG_ADD: $(elfun_FCN_FILES) $(elfun_GEN_FCN_FILES) elfun/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(elfun_FCN_FILES) -- $(elfun_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-general/PKG_ADD: $(general_FCN_FILES) $(general_GEN_FCN_FILES) general/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(general_FCN_FILES) -- $(general_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-geometry/PKG_ADD: $(geometry_FCN_FILES) $(geometry_GEN_FCN_FILES) geometry/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(geometry_FCN_FILES) -- $(geometry_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-gui/PKG_ADD: $(gui_FCN_FILES) $(gui_GEN_FCN_FILES) gui/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(gui_FCN_FILES) -- $(gui_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-help/PKG_ADD: $(help_FCN_FILES) $(help_GEN_FCN_FILES) help/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(help_FCN_FILES) -- $(help_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-image/PKG_ADD: $(image_FCN_FILES) $(image_GEN_FCN_FILES) image/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(image_FCN_FILES) -- $(image_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-io/PKG_ADD: $(io_FCN_FILES) $(io_GEN_FCN_FILES) io/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(io_FCN_FILES) -- $(io_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-java/PKG_ADD: $(java_FCN_FILES) $(java_GEN_FCN_FILES) java/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(java_FCN_FILES) -- $(java_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-linear-algebra/PKG_ADD: $(linear_algebra_FCN_FILES) $(linear_algebra_GEN_FCN_FILES) linear-algebra/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(linear_algebra_FCN_FILES) -- $(linear_algebra_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-miscellaneous/PKG_ADD: $(miscellaneous_FCN_FILES) $(miscellaneous_GEN_FCN_FILES) miscellaneous/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(miscellaneous_FCN_FILES) -- $(miscellaneous_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-optimization/PKG_ADD: $(optimization_FCN_FILES) $(optimization_GEN_FCN_FILES) optimization/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add "$(srcdir)" $(optimization_FCN_FILES) -- $(optimization_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-path/PKG_ADD: $(path_FCN_FILES) $(path_GEN_FCN_FILES) path/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(path_FCN_FILES) -- $(path_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-pkg/PKG_ADD: $(pkg_FCN_FILES) $(pkg_GEN_FCN_FILES) pkg/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(pkg_FCN_FILES) -- $(pkg_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-plot/appearance/PKG_ADD: $(plot_appearance_FCN_FILES) $(plot_appearance_GEN_FCN_FILES) plot/appearance/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(plot_appearance_FCN_FILES) -- $(plot_appearance_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-plot/draw/PKG_ADD: $(plot_draw_FCN_FILES) $(plot_draw_GEN_FCN_FILES) plot/draw/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(plot_draw_FCN_FILES) -- $(plot_draw_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-plot/util/PKG_ADD: $(plot_util_FCN_FILES) $(plot_util_GEN_FCN_FILES) plot/util/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(plot_util_FCN_FILES) -- $(plot_util_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-polynomial/PKG_ADD: $(polynomial_FCN_FILES) $(polynomial_GEN_FCN_FILES) polynomial/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(polynomial_FCN_FILES) -- $(polynomial_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-prefs/PKG_ADD: $(prefs_FCN_FILES) $(prefs_GEN_FCN_FILES) prefs/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(prefs_FCN_FILES) -- $(prefs_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-set/PKG_ADD: $(set_FCN_FILES) $(set_GEN_FCN_FILES) set/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(set_FCN_FILES) -- $(set_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-signal/PKG_ADD: $(signal_FCN_FILES) $(signal_GEN_FCN_FILES) signal/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(signal_FCN_FILES) -- $(signal_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-sparse/PKG_ADD: $(sparse_FCN_FILES) $(sparse_GEN_FCN_FILES) sparse/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(sparse_FCN_FILES) -- $(sparse_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-specfun/PKG_ADD: $(specfun_FCN_FILES) $(specfun_GEN_FCN_FILES) specfun/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(specfun_FCN_FILES) -- $(specfun_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-special-matrix/PKG_ADD: $(special_matrix_FCN_FILES) $(special_matrix_GEN_FCN_FILES) special-matrix/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(special_matrix_FCN_FILES) -- $(special_matrix_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-startup/PKG_ADD: $(startup_FCN_FILES) $(startup_GEN_FCN_FILES) startup/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(startup_FCN_FILES) -- $(startup_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-statistics/base/PKG_ADD: $(statistics_base_FCN_FILES) $(statistics_base_GEN_FCN_FILES) statistics/base/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(statistics_base_FCN_FILES) -- $(statistics_base_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-statistics/distributions/PKG_ADD: $(statistics_distributions_FCN_FILES) $(statistics_distributions_GEN_FCN_FILES) statistics/distributions/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(statistics_distributions_FCN_FILES) -- $(statistics_distributions_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-statistics/models/PKG_ADD: $(statistics_models_FCN_FILES) $(statistics_models_GEN_FCN_FILES) statistics/models/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(statistics_models_FCN_FILES) -- $(statistics_models_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-statistics/tests/PKG_ADD: $(statistics_tests_FCN_FILES) $(statistics_tests_GEN_FCN_FILES) statistics/tests/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(statistics_tests_FCN_FILES) -- $(statistics_tests_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
+$(DIRSTAMP_FILES):
+	$(AM_V_GEN)$(MKDIR_P) $(@D) && \
+	: > $@
 
-strings/PKG_ADD: $(strings_FCN_FILES) $(strings_GEN_FCN_FILES) strings/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(strings_FCN_FILES) -- $(strings_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-testfun/PKG_ADD: $(testfun_FCN_FILES) $(testfun_GEN_FCN_FILES) testfun/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(testfun_FCN_FILES) -- $(testfun_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-time/PKG_ADD: $(time_FCN_FILES) $(time_GEN_FCN_FILES) time/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(time_FCN_FILES) -- $(time_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-ui/PKG_ADD: $(ui_FCN_FILES) $(ui_GEN_FCN_FILES) ui/$(octave_dirstamp) mk-pkg-add
-	$(AM_V_GEN)rm -f $@-t $@ && \
-	$(srcdir)/mk-pkg-add $(srcdir) $(ui_FCN_FILES) -- $(ui_GEN_FCN_FILES) > $@-t && \
-	mv $@-t $@
-
-$(@ftp_GEN_FCN_FILES): @ftp/$(octave_dirstamp)
-$(audio_GEN_FCN_FILES): audio/$(octave_dirstamp)
-$(deprecated_GEN_FCN_FILES): deprecated/$(octave_dirstamp)
-$(elfun_GEN_FCN_FILES): elfun/$(octave_dirstamp)
-$(general_GEN_FCN_FILES): general/$(octave_dirstamp)
-$(geometry_GEN_FCN_FILES): geometry/$(octave_dirstamp)
-$(gui_GEN_FCN_FILES): gui/$(octave_dirstamp)
-$(help_GEN_FCN_FILES): help/$(octave_dirstamp)
-$(image_GEN_FCN_FILES): image/$(octave_dirstamp)
-$(io_GEN_FCN_FILES): io/$(octave_dirstamp)
-$(java_GEN_FCN_FILES): java/$(octave_dirstamp)
-$(linear_algebra_GEN_FCN_FILES): linear-algebra/$(octave_dirstamp)
-$(miscellaneous_GEN_FCN_FILES): miscellaneous/$(octave_dirstamp)
-$(optimization_GEN_FCN_FILES): optimization/$(octave_dirstamp)
-$(path_GEN_FCN_FILES): path/$(octave_dirstamp)
-$(pkg_GEN_FCN_FILES): pkg/$(octave_dirstamp)
-$(plot_appearance_GEN_FCN_FILES): plot/appearance/$(octave_dirstamp)
-$(plot_draw_GEN_FCN_FILES): plot/draw/$(octave_dirstamp)
-$(plot_util_GEN_FCN_FILES): plot/util/$(octave_dirstamp)
-$(polynomial_GEN_FCN_FILES): polynomial/$(octave_dirstamp)
-$(prefs_GEN_FCN_FILES): prefs/$(octave_dirstamp)
-$(set_GEN_FCN_FILES): set/$(octave_dirstamp)
-$(signal_GEN_FCN_FILES): signal/$(octave_dirstamp)
-$(sparse_GEN_FCN_FILES): sparse/$(octave_dirstamp)
-$(specfun_GEN_FCN_FILES): specfun/$(octave_dirstamp)
-$(special_matrix_GEN_FCN_FILES): special-matrix/$(octave_dirstamp)
-$(startup_GEN_FCN_FILES): startup/$(octave_dirstamp)
-$(statistics_base_GEN_FCN_FILES): statistics/base/$(octave_dirstamp)
-$(statistics_distributions_GEN_FCN_FILES): statistics/distributions/$(octave_dirstamp)
-$(statistics_models_GEN_FCN_FILES): statistics/models/$(octave_dirstamp)
-$(statistics_tests_GEN_FCN_FILES): statistics/tests/$(octave_dirstamp)
-$(strings_GEN_FCN_FILES): strings/$(octave_dirstamp)
-$(testfun_GEN_FCN_FILES): testfun/$(octave_dirstamp)
-$(time_GEN_FCN_FILES): time/$(octave_dirstamp)
-$(ui_GEN_FCN_FILES): ui/$(octave_dirstamp)
+define PKG_ADD_FILE_TEMPLATE
+$(1)/PKG_ADD: $$($(subst /,_,$(1))_FCN_FILES) $$($(subst /,_,$(1))_GEN_FCN_FILES) $(1)/$(octave_dirstamp) mk-pkg-add
+	$$(AM_V_GEN)rm -f $$@-t $$@ && \
+	$$(srcdir)/mk-pkg-add $(srcdir) $$($$(@D)_FCN_FILES) -- $$($$(@D)_GEN_FCN_FILES) > $$@-t && \
+	mv $$@-t $$@
+endef
 
-@ftp/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) @ftp && \
-	: > @ftp/$(octave_dirstamp)
-audio/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) audio && \
-	: > audio/$(octave_dirstamp)
-deprecated/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) deprecated && \
-	: > deprecated/$(octave_dirstamp)
-elfun/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) elfun && \
-	: > elfun/$(octave_dirstamp)
-general/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) general && \
-	: > general/$(octave_dirstamp)
-geometry/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) geometry && \
-	: > geometry/$(octave_dirstamp)
-gui/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) gui && \
-	: > gui/$(octave_dirstamp)
-help/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) help && \
-	: > help/$(octave_dirstamp)
-image/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) image && \
-	: > image/$(octave_dirstamp)
-io/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) io && \
-	: > io/$(octave_dirstamp)
-java/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) java && \
-	: > java/$(octave_dirstamp)
-linear-algebra/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) linear-algebra && \
-	: > linear-algebra/$(octave_dirstamp)
-miscellaneous/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) miscellaneous && \
-	: > miscellaneous/$(octave_dirstamp)
-optimization/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) optimization && \
-	: > optimization/$(octave_dirstamp)
-path/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) path && \
-	: > path/$(octave_dirstamp)
-pkg/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) pkg && \
-	: > pkg/$(octave_dirstamp)
-plot/appearance/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) plot/appearance && \
-	: > plot/appearance/$(octave_dirstamp)
-plot/draw/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) plot/draw && \
-	: > plot/draw/$(octave_dirstamp)
-plot/util/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) plot/util && \
-	: > plot/util/$(octave_dirstamp)
-polynomial/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) polynomial && \
-	: > polynomial/$(octave_dirstamp)
-prefs/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) prefs && \
-	: > prefs/$(octave_dirstamp)
-set/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) set && \
-	: > set/$(octave_dirstamp)
-signal/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) signal && \
-	: > signal/$(octave_dirstamp)
-sparse/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) sparse && \
-	: > sparse/$(octave_dirstamp)
-specfun/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) specfun && \
-	: > specfun/$(octave_dirstamp)
-special-matrix/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) special-matrix && \
-	: > special-matrix/$(octave_dirstamp)
-startup/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) startup && \
-	: > startup/$(octave_dirstamp)
-statistics/base/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) statistics/base && \
-	: > statistics/base/$(octave_dirstamp)
-statistics/distributions/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) statistics/distributions && \
-	: > statistics/distributions/$(octave_dirstamp)
-statistics/models/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) statistics/models && \
-	: > statistics/models/$(octave_dirstamp)
-statistics/tests/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) statistics/tests && \
-	: > statistics/tests/$(octave_dirstamp)
-strings/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) strings && \
-	: > strings/$(octave_dirstamp)
-testfun/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) testfun && \
-	: > testfun/$(octave_dirstamp)
-time/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) time && \
-	: > time/$(octave_dirstamp)
-ui/$(octave_dirstamp):
-	$(AM_V_GEN)$(MKDIR_P) ui && \
-	: > ui/$(octave_dirstamp)
+$(foreach d, $(FCN_FILE_DIRS), $(eval $(call PKG_ADD_FILE_TEMPLATE, $(d))))
+
+define GEN_FCN_FILES_TEMPLATE
+$(1): $(1:.m=.in) Makefile $(dir $(1))$(octave_dirstamp)
+	$$(AM_V_GEN)$$(do_subst_config_vals)
+endef
+
+$(foreach f, $(GEN_FCN_FILES), $(eval $(call GEN_FCN_FILES_TEMPLATE, $(f))))
 
 if AMCOND_BUILD_DOCS
 
@@ -422,9 +125,6 @@
 
 endif
 
-$(GEN_FCN_FILES) : %.m : %.in Makefile
-	$(AM_V_GEN)$(do_subst_config_vals)
-
 check-m-sources:
 	@echo "checking whether files in source tree are listed in module.mk files..."; \
 	for f in $$(find $(srcdir) -name '*.m'); do \
--- a/scripts/plot/util/module.mk	Tue Jul 07 10:40:38 2015 -0400
+++ b/scripts/plot/util/module.mk	Tue Jul 07 11:51:45 2015 -0400
@@ -1,4 +1,4 @@
-FCN_FILE_DIRS += plot
+FCN_FILE_DIRS += plot/util
 
 plot_util_GEN_FCN_FILES = \
   plot/util/gnuplot_binary.m