-# .texファイル
-TEXFILE = $(addsuffix .tex,$(BASE))
-
-# .auxファイル
-AUXFILE = $(addsuffix .aux,$(BASE))
-# .prev_auxファイル
-PREV_AUXFILE = $(addsuffix .prev_aux,$(BASE))
-
-# .dviファイル
-DVIFILE = $(addsuffix .dvi,$(BASE))
-
-# .dファイル
-DFILE = $(addsuffix .d,$(BASE))
-
-# .logファイル
-LOGFILE = $(addsuffix .log,$(BASE))
-
-# .tocファイル
-TOCFILE = $(addsuffix .toc,$(BASE))
-# .prev_tocファイル。.tocファイルのコピー
-PREV_TOCFILE = $(addsuffix .prev_toc,$(BASE))
-
-# .lofファイル
-LOFFILE = $(addsuffix .lof,$(BASE))
-# .prev_lofファイル。.lofファイルのコピー
-PREV_LOFFILE = $(addsuffix .prev_lof,$(BASE))
-
-# .lotファイル
-LOTFILE = $(addsuffix .lot,$(BASE))
-# .prev_lotファイル。.lotファイルのコピー
-PREV_LOTFILE = $(addsuffix .prev_lot,$(BASE))
-
-# .idxファイル
-IDXFILE = $(addsuffix .idx,$(BASE))
-# .prev_idxファイル。.idxファイルのコピー
-PREV_IDXFILE = $(addsuffix .prev_idx,$(BASE))
-
-# .indファイル
-INDFILE = $(addsuffix .ind,$(BASE))
-# .prev_indファイル。.indファイルのコピー
-PREV_INDFILE = $(addsuffix .prev_ind,$(BASE))
-
-# .ilgファイル
-ILGFILE = $(addsuffix .ilg,$(BASE))
-
-# .bblファイル
-BBLFILE = $(addsuffix .bbl,$(BASE))
-# .prev_bblファイル。.bblファイルのコピー
-PREV_BBLFILE = $(addsuffix .prev_bbl,$(BASE))
-
-# .bblファイル
-BLGFILE = $(addsuffix .blg,$(BASE))
-
-# .outファイル
-OUTFILE = $(addsuffix .out,$(BASE))
-# .prev_outファイル。.outファイルのコピー
-PREV_OUTFILE = $(addsuffix .prev_out,$(BASE))
-
-#LaTeXオプション
-LATEXFLAG ?=
-DVIPDFMXFLAG ?=
-EXTRACTBBFLAGS ?=
-BIBTEXFLAG ?=
-MENDEXFLAG ?=
+# .flsファイルから、INPUTファイルを取得。ただし、$TEXMFDISTのファイルを除く
+# 取得は、1回のmake実行につき1回だけ行われる
+INPUTFILES = $(INPUTFILESre)
+
+INPUTFILESre = $(eval INPUTFILES := \
+ $(sort $(filter-out $(BASE).tex $(BASE).aux, $(shell \
+ $(SED) -n -e 's/^INPUT \(.\{1,\}\)/\1/p' $(BASE).fls | \
+ $(GREP) -v `$(KPSEWHICH) -expand-var '$$TEXMFROOT'` \
+ ))))
+
+# .flsファイルから、OUTPUTファイルを取得。ただし、$TEXMFDISTのファイルを除く
+# 取得は、1回のmake実行につき1回だけ行われる
+OUTPUTFILES = $(OUTFILESre)
+
+OUTFILESre = $(eval OUTPUTFILES := \
+ $(sort $(filter-out $(BASE).aux $(BASE).dvi $(BASE).log,$(shell \
+ $(SED) -n -e 's/^OUTPUT \(.\{1,\}\)/\1/p' $(BASE).fls | \
+ $(GREP) -v `$(KPSEWHICH) -expand-var '$$TEXMFROOT'` \
+ ))))
+
+# $(BASE).texで読み込まれる中間ファイルを$(BASE).flsから取得する
+# .idxは、.indへ置換
+INTERFILES = \
+ $(sort $(subst .idx,.ind, \
+ $(filter $(addprefix $(BASE),$(TEX_INT) $(IND_INT) $(BIB_INT)),$(INPUTFILES) $(OUTPUTFILES)) \
+ ))
+
+INTERFILES_PREV = $(addsuffix _prev,$(INTERFILES))
+
+# TeXファイル - .tex
+TEXFILES = $(filter %.tex,$(INPUTFILES))
+
+# 対応する画像ファイルの拡張子
+GRAPHICSEXT := .pdf .eps .jpg .jpeg .png .bmp
+
+# $(BASE).texで読み込まれる画像ファイルを取得する
+GRAPHICFILES = $(GRAPHICFILESre)
+
+GRAPHICFILESre = $(eval GRAPHICFILES := \
+ $(sort \
+ $(shell \
+ $(SED) -e '/^\s*%/d' -e 's/\([^\]\)\s*%.*/\1/g' $(BASE).tex $(TEXFILES) | \
+ $(SED) -e '/\\begin{verbatim}/,/\\end{verbatim}/d' | \
+ $(SED) -n -e 's/\\includegraphics\(\[[^]]*\]\)\{0,1\}{[^}]*}/&\n/pg' | \
+ $(SED) -n -e 's/.*{\([^}]*\)}$$/\1/p' \
+ ) \
+ $(filter $(addprefix %,$(GRAPHICSEXT)),$(INPUTFILES)) \
+))
+
+# そのほかの読み込みファイル
+OTHERFILES = \
+ $(sort $(filter-out %.aux $(INTERFILES) $(TEXFILES) $(GRAPHICFILES),$(INPUTFILES)))
+
+# \bibliography命令で読み込まれる文献データベースファイルをTeXファイルから検索する
+BIBDB = $(BIBDBre)
+
+BIBDBre = $(eval BIBDB := \
+ $(addsuffix .bib,$(basename $(sort $(shell \
+ $(SED) -e '/^\s*%/d' -e 's/\([^\]\)\s*%.*/\1/g' $(BASE).tex $(TEXFILES) | \
+ $(SED) -e '/\\begin{verbatim}/,/\\end{verbatim}/d' | \
+ $(SED) -n -e 's/\\bibliography\(\[[^]]*\]\)\{0,1\}{[^}]*}/&\n/pg' | \
+ $(SED) -n -e 's/.*{\([^}]*\)}$$/\1/p' | \
+ $(SED) -e 's/,/ /g' \
+ )))))