make valgrindで、CMD_VALGRINDファイルがあればそのコマンドを実行
authorj8takagi <j8takagi@nifty.com>
Thu, 21 Feb 2019 15:22:25 +0000 (00:22 +0900)
committerj8takagi <j8takagi@nifty.com>
Thu, 21 Feb 2019 15:22:25 +0000 (00:22 +0900)
test/Template/Define.mk
test/Template/Test.mk

index 0a6f106..74f4c33 100644 (file)
@@ -41,7 +41,9 @@ TEST := test
 TIME := time
 TR := tr
 VALGRIND := valgrind
 TIME := time
 TR := tr
 VALGRIND := valgrind
-VALGRINDFLAG :=  -q --leak-check=full --show-leak-kinds=all --log-file=valgrind.log
+VALGRIND_LOGFILE := _valgrind.log
+VALGRINDFLAG :=  -q --leak-check=full --show-leak-kinds=all --log-file=$(VALGRIND_LOGFILE)
+VALGRIND_CMDLOGFILE := valgrind.log
 
 ######################################################################
 # テストグループとテストでの共通マクロ
 
 ######################################################################
 # テストグループとテストでの共通マクロ
@@ -131,6 +133,9 @@ GROUP_MAKEFILE_REL = $(call rel_to,$(GROUPDIR),$(GROUP_MAKEFILE))
 # テストコマンドファイル
 CMD_FILE := cmd
 
 # テストコマンドファイル
 CMD_FILE := cmd
 
+# valgrindテストコマンドファイル
+VALGRIND_CMD_FILE := cmd_valgrind
+
 # テスト説明ファイル
 DESC_FILE := desc.txt
 
 # テスト説明ファイル
 DESC_FILE := desc.txt
 
index def57eb..e8a3135 100644 (file)
@@ -39,16 +39,16 @@ define time_cmd
     ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2
 endef
 
     ($(TIME) ./$1 1>$(DEV_NULL) 2>$(DEV_NULL)) 2>&1 | $(GREP) '^real' >$2
 endef
 
-CMD_VALGRIND = $(strip $(shell if test "`$(FILE) $(CMD_FILE)`" = "data"; then cat $(CMD_FILE); else $(PRINTF) "./$(CMD_FILE)"; fi))
+VALGRIND_CMD = $(strip $(shell if test -s $(VALGRIND_CMD_FILE); then $(CAT) $(VALGRIND_CMD_FILE); elif test "`$(FILE) $(CMD_FILE)`" = "data"; then $(CAT) $(CMD_FILE); else $(PRINTF) "./$(CMD_FILE)"; fi))
 
 # valgrindによるメモリーチェック結果を、指定されたファイルに出力して表示
 # 引数は、テスト名、コマンドファイル、出力ファイル
 # 用例: $(call valgrind_cmd,file_cmd,file_out)
 define valgrind_cmd
 
 # valgrindによるメモリーチェック結果を、指定されたファイルに出力して表示
 # 引数は、テスト名、コマンドファイル、出力ファイル
 # 用例: $(call valgrind_cmd,file_cmd,file_out)
 define valgrind_cmd
-    -$(VALGRIND) $(VALGRINDFLAG) $(CMD_VALGRIND) 1>/dev/null 2>&1
+    -$(VALGRIND) $(VALGRINDFLAG) $(VALGRIND_CMD) 1>/dev/null 2>&1
 endef
 
 endef
 
-# テスト実行コマンド
+# テスト実行コマンド
 # コマンドファイルを実行し、標準出力を指定されたファイルに保存。
 # エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。
 # 引数は、コマンドファイル、出力ファイル、エラーファイル
 # コマンドファイルを実行し、標準出力を指定されたファイルに保存。
 # エラー発生時は、エラー出力を出力ファイルとエラーファイルに保存。
 # 引数は、コマンドファイル、出力ファイル、エラーファイル
@@ -129,7 +129,7 @@ reset: all-clean $(CMD_FILE)
        @$(CAT) $(TEST0_FILE)
 
 clean:
        @$(CAT) $(TEST0_FILE)
 
 clean:
-       @$(RM) $(TEST_RES_FILES) $(TIME_FILE) $(VALGRIND_FILE) core
+       @$(RM) $(TEST_RES_FILES) $(TIME_FILE) $(VALGRIND_LOGFILE) $(VALGRIND_CMDLOGFILE) core
 
 all-clean: clean
        @$(RM) $(TEST0_FILE)
 
 all-clean: clean
        @$(RM) $(TEST0_FILE)
@@ -140,11 +140,14 @@ time: time-clean $(TIME_FILE)
 time-clean:
        @$(RM) $(TIME_FILE)
 
 time-clean:
        @$(RM) $(TIME_FILE)
 
-valgrind: valgrind-clean $(VALGRIND_FILE)
-       if test -s $(VALGRIND_FILE); then $(ECHO) $(CURDIR) && $(CAT) $(VALGRIND_FILE); else $(RM) $(VALGRIND_FILE); fi
+valgrind: valgrind-clean $(VALGRIND_LOGFILE) $(VALGRIND_CMDLOGFILE)
+       if test -s $(VALGRIND_LOGFILE); then $(ECHO) $(CURDIR) && $(CAT) $(VALGRIND_LOGFILE); else $(RM) $(VALGRIND_LOGFILE); fi
+
+$(VALGRIND_CMDLOGFILE): $(VALGRIND_LOGFILE)
+       @$(PRINTF) "$(VALGRIND) $(VALGRINDFLAG) $(VALGRIND_CMD)\n" | $(CAT) - $(VALGRIND_LOGFILE) >$(VALGRIND_CMDLOGFILE)
 
 valgrind-clean:
 
 valgrind-clean:
-       @$(RM) $(VALGRIND_FILE)
+       @$(RM) $(VALGRIND_LOGFILE)
 
 $(TEST1_FILE): $(CMD_FILE)
        @-$(call exec_cmd,$^,$@,$(ERR_FILE))
 
 $(TEST1_FILE): $(CMD_FILE)
        @-$(call exec_cmd,$^,$@,$(ERR_FILE))
@@ -161,5 +164,5 @@ $(DETAIL_FILE): $(LOG_FILE)
 $(TIME_FILE): $(CMD_FILE)
        @$(call time_cmd,$^,$@)
 
 $(TIME_FILE): $(CMD_FILE)
        @$(call time_cmd,$^,$@)
 
-$(VALGRIND_FILE): $(CMD_FILE)
+$(VALGRIND_LOGFILE): $(CMD_FILE)
        $(call valgrind_cmd,$^,$@)
        $(call valgrind_cmd,$^,$@)