.dファイル作成時に遅延変数が正しく評価されない問題を修正
authorj8takagi <j8takagi@nifty.com>
Thu, 5 Dec 2013 02:49:02 +0000 (11:49 +0900)
committerj8takagi <j8takagi@nifty.com>
Thu, 5 Dec 2013 02:49:50 +0000 (11:49 +0900)
latex_mk/latex.mk

index f157113..b8c069a 100644 (file)
@@ -80,10 +80,10 @@ LATEXINTEXT := .bbl .glo .idx .ind .lof .lot .out .toc
 #   .blg: BiBTeXログ
 LOGEXT := .log .ilg .blg
 
-ALLINTERFILES = $(addprefix *,.aux $(LATEXINTEXT) $(LOGEXT) .fls .d .*_prev)
+ALLINTEXT := .aux .dvi $(LATEXINTEXT) $(LOGEXT) .fls .d .*_prev
 
 # make完了後、中間ファイルを残す
-.SECONDARY: $(wildcard ALLINTERFILES)
+.SECONDARY: $(foreach t,$(TEXTARGETS),$(addprefix $(basename $t),$(ALLINTEXT)))
 
 # ファイル名から拡張子を除いた部分
 BASE = $(basename $<)
@@ -110,14 +110,14 @@ OUTFILESre = $(eval OUTPUTFILES := \
 
 # $(BASE).texで読み込まれる中間ファイルを$(BASE).flsから取得する
 # .idxは、.indへ置換
-LATEXINTERFILES = \
+LATEXINTFILES = \
   $(sort $(subst .idx,.ind, \
     $(filter $(addprefix $(BASE),$(LATEXINTEXT)),$(INPUTFILES) $(OUTPUTFILES)) \
   ))
 
-LATEXINTERFILES_PREV = $(addsuffix _prev,$(LATEXINTERFILES))
+LATEXINTFILES_PREV = $(addsuffix _prev,$(LATEXINTFILES))
 
-# TeXファイル - .tex
+# 分割され、\includeや\inputで読み込まれるTeXファイル - .tex
 TEXFILES = $(filter %.tex,$(INPUTFILES))
 
 # 対応する画像ファイルの拡張子
@@ -139,8 +139,7 @@ GRAPHICFILESre = $(eval GRAPHICFILES := \
   ))
 
 # そのほかの読み込みファイル
-OTHERFILES = \
-  $(sort $(filter-out %.aux $(LATEXINTERFILES) $(TEXFILES) $(GRAPHICFILES),$(INPUTFILES)))
+OTHERFILES = $(sort $(filter-out %.aux $(LATEXINTFILES) $(TEXFILES) $(GRAPHICFILES),$(INPUTFILES)))
 
 # \bibliography命令で読み込まれる文献データベースファイルをTeXファイルから検索する
 BIBDB = $(BIBDBre)
@@ -182,7 +181,7 @@ COMPILE.dvi = \
   ($(SED) -n -e '/^Output written on toc_hyperref.dvi/,$$p' $(BASE).log; exit 1)
 
 # ターゲットファイルと必須ファイルを比較し、内容が異なる場合はターゲットファイルの内容を必須ファイルに置き換える
-CMPPREV = $(CMP) $@ $< || $(CP) -p -v $< $@
+CMPPREV = $(CMP) $@ $< && $(ECHO) '$@ is up to date.' || $(CP) -p -v $< $@
 
 ######################################################################
 # .dファイルの生成と読み込み
@@ -205,20 +204,26 @@ GENERETE.fls = \
 
 # 依存関係を.dファイルに書き出す
 %.d: %.fls
+    # 変数の展開
+       @$(ECHO) "extract LATEXINTFILES:$(LATEXINTFILES) TEXFILES:$(TEXFILES) GRAPHICFILES:$(GRAPHICFILES) BIBDB:$(BIBDB)"
     # .dファイルの依存関係
        @$(ECHO) '$(BASE).d: $(BASE).tex $(BASE).fls' >$@
+    # 中間ファイルの依存関係
+       $(if $(sort $(LATEXINTFILES) $(BIBDB)),@( \
+      $(ECHO); \
+      $(ECHO) '# LaTeX Intermediate Files'; \
+      $(ECHO) '$(BASE).dvi:: $(sort $(LATEXINTFILES_PREV) $(if $(BIBDB),$(BASE).bbl_prev))'; \
+      $(ECHO) '        @$$(COMPILE.tex)'; \
+      $(ECHO); \
+      $(ECHO) '$(BASE).dvi:: $(BASE).aux'; \
+      $(ECHO) '        @$$(COMPILES.tex)'; \
+    ) >>$@)
     # \includeまたは\input命令で読み込まれるTeXファイルの依存関係
        $(if $(TEXFILES),@( \
       $(ECHO); \
       $(ECHO) '# Files called from \include or \input - .tex'; \
       $(ECHO) '$(BASE).aux: $(TEXFILES)'; \
     ) >>$@)
-    # そのほかのファイル(TEXMFROOT以外にあるスタイルファイルなど)の依存関係
-       $(if $(OTHERFILES),@( \
-      $(ECHO); \
-      $(ECHO) '# Other files'; \
-      $(ECHO) '$(BASE).aux: $(OTHERFILES)'; \
-    ) >>$@)
     # 画像ファイルの依存関係
        $(if $(GRAPHICFILES),@( \
       $(ECHO); \
@@ -236,15 +241,11 @@ GENERETE.fls = \
         $(ECHO) '# Bibliography files: .aux, BIBDB -> .bbl -> .div'; \
         $(ECHO) '$(BASE).bbl: $(BIBDB) $(BASE).tex'; \
       ) >>$@)
-    # 中間ファイルの依存関係
-       $(if $(sort $(LATEXINTERFILES) $(BIBDB)),@( \
-      $(ECHO); \
-      $(ECHO) '# LaTeX Intermediate Files'; \
-      $(ECHO) '$(BASE).dvi:: $(sort $(LATEXINTERFILES_PREV) $(if $(BIBDB),$(BASE).bbl_prev))'; \
-      $(ECHO) '        @$$(COMPILE.tex)'; \
+    # そのほかのファイル(TEXMFROOT以外にあるスタイルファイルなど)の依存関係
+       $(if $(OTHERFILES),@( \
       $(ECHO); \
-      $(ECHO) '$(BASE).dvi:: $(BASE).aux'; \
-      $(ECHO) '        @$$(COMPILES.tex)'; \
+      $(ECHO) '# Other files'; \
+      $(ECHO) '$(BASE).aux: $(OTHERFILES)'; \
     ) >>$@)
        @$(ECHO) '$@ is generated by scanning $(BASE).tex and $(BASE).fls.'
 
@@ -387,7 +388,7 @@ tex-xbb:
 
 # 中間ファイルの削除
 tex-clean:
-       $(RM) $(ALLINTERFILES)
+       $(RM) $(addprefix *,$(ALLINTEXT))
        $(RM) -r $(FLSDIR)
 ifeq (,$(filter %.dvi,$(TEXTARGETS)))
        $(RM) *.dvi