.PHONY: R-clean R-distclean
-CAT = cat
-ECHO = echo
-EPSTOPDF = epstopdf
-R = R
+CAT := cat
+ECHO := echo
+EPSTOPDF := epstopdf
+R := R
+SED := sed
RFLAG = --slave --vanilla
+# read.table文で読み込まれるtableファイル
+tablefiles = $(strip $(shell $(SED) -n -e 's/.*read\.table."\(.*\)".*;/\1/gp' $<))
+
+# source文で読み込まれるtableファイル
+sourcefiles = $(strip $(shell $(SED) -n -e 's/.*source."\(.*\)".*;/\1/gp' $<))
+
# used by R postscript device.
# For details, type '?postscriptFonts' in R.
psfamily ?= Japan1
+# 依存関係を自動生成し、dファイルに格納
+%.d: %.R
+ @$(ECHO) '$@ is created by scanning $^.'
+ # 画像ファイルとRファイルの依存関係
+ @($(ECHO) '$(subst .R,.eps,$<) $(subst .R,.png,$<) $(subst .R,.jpeg,$<): $<' >$@)
+ # テーブルファイルの依存関係
+ $(if $(tablefiles),@( \
+ $(ECHO); \
+ $(ECHO) '# Table Files'; \
+ $(ECHO) '$(subst .R,.eps,$<) $(subst .R,.png,$<) $(subst .R,.jpeg,$<): $(tablefiles)') >>$@)
+ # ソースファイルの依存関係
+ $(if $(sourcefiles),@( \
+ $(ECHO); \
+ $(ECHO) '# Source Files'; \
+ $(ECHO) '$(subst .R,.eps,$<) $(subst .R,.png,$<) $(subst .R,.jpeg,$<): $(sourcefiles)') >>$@)
+
+# 変数TARGETSで指定されたターゲットファイルに対応するdファイルをインクルード
+# .dファイルからヘッダファイルの依存関係を取得する
+# ターゲットに clean が含まれている場合は除く
+ifeq (,$(filter %clean,$(MAKECMDGOALS)))
+ -include $(addsuffix .d,$(basename $(TARGETS)))
+endif
+
%.eps.R: %.R
@$(ECHO) 'postscript(file="$(subst .R,.eps,$<)",family="$(psfamily)", onefile=F, horizontal=F)' >$@
@$(CAT) $< >>$@
$(R) $(RFLAG) <$<
R-clean:
- $(RM) *.pdf.R *.png.R *.jpeg.R *.svg.R *.eps.R
+ $(RM) *.pdf.R *.png.R *.jpeg.R *.svg.R *.eps.R *.d
R-distclean: R-clean
$(RM) $(subst .R,.pdf,$(wildcard *.R)) $(subst .R,.png,$(wildcard *.R)) $(subst .R,.jpeg,$(wildcard *.R)) $(subst .R,.svg,$(wildcard *.R)) $(subst .R,.eps,$(wildcard *.R))