valgrindを、cmdがシェルスクリプトでもC実行ファイルでも可能なように
authorj8takagi <j8takagi@nifty.com>
Sat, 16 Feb 2019 02:29:28 +0000 (11:29 +0900)
committerj8takagi <j8takagi@nifty.com>
Sat, 16 Feb 2019 02:29:28 +0000 (11:29 +0900)
template/Define.mk
template/Test.mk

index d4c3b94..f8e6dd9 100644 (file)
@@ -27,18 +27,21 @@ DEV_NULL := /dev/null
 DIFF := diff -c
 ECHO := echo
 EXPR := expr
+FILE := file -b -e ascii
 FIND := find
 GREP := grep
 LINECOUNT := wc -l
 LN := ln -s
 MKDIR := mkdir -p
 MV := mv
+PRINTF := printf
+REALPATH := realpath
 SED := sed
 TEST := test
 TIME := time
 TR := tr
 VALGRIND := valgrind
-VALGRINDFLAG :=  -q --leak-check=full --log-file=valgrind.log
+VALGRINDFLAG :=  -q --leak-check=full --show-leak-kinds=all --log-file=valgrind.log
 
 ######################################################################
 # テストグループとテストでの共通マクロ
index 13178f6..def57eb 100644 (file)
@@ -39,11 +39,13 @@ define time_cmd
     ($(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によるメモリーチェック結果を、指定されたファイルに出力して表示
 # 引数は、テスト名、コマンドファイル、出力ファイル
 # 用例: $(call valgrind_cmd,file_cmd,file_out)
 define valgrind_cmd
-    -$(VALGRIND) $(VALGRINDFLAG) $(strip $(shell tail -1 $(CMD_FILE))) 1>/dev/null 2>&1
+    -$(VALGRIND) $(VALGRINDFLAG) $(CMD_VALGRIND) 1>/dev/null 2>&1
 endef
 
 # テスト実行コマンド。
@@ -127,7 +129,7 @@ reset: all-clean $(CMD_FILE)
        @$(CAT) $(TEST0_FILE)
 
 clean:
-       @$(RM) $(TEST_RES_FILES) $(TIME_FILE) $(VALGRIND_FILE)
+       @$(RM) $(TEST_RES_FILES) $(TIME_FILE) $(VALGRIND_FILE) core
 
 all-clean: clean
        @$(RM) $(TEST0_FILE)