From e7a3adce53223b35b7a30b4ac587f9415b8b61f5 Mon Sep 17 00:00:00 2001 From: j8takagi Date: Thu, 24 Jan 2013 12:32:52 +0900 Subject: [PATCH] =?utf8?q?=E3=83=86=E3=82=B9=E3=83=88=EF=BC=88Autotest.mk?= =?utf8?q?=EF=BC=89=E5=AE=9F=E8=A1=8C=E6=96=B9=E6=B3=95=E3=81=AE=E5=A4=89?= =?utf8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- test/template/Define.mk | 56 +++++++++++++---------------------------- test/template/Group.mk | 39 +++++++++++++++------------- test/template/Makefile | 2 +- test/template/Test.mk | 20 +++++++-------- 4 files changed, 51 insertions(+), 66 deletions(-) diff --git a/test/template/Define.mk b/test/template/Define.mk index b3c73af..e736c50 100644 --- a/test/template/Define.mk +++ b/test/template/Define.mk @@ -7,9 +7,6 @@ DEFINE_INCLUDED = 1 # 現在の日時 DATE = $(shell date +"%F %T") -# 現在のディレクトリー -CURRDIR = $(shell pwd) - # Makefile MAKEFILE := Makefile @@ -17,39 +14,22 @@ MAKEFILE := Makefile # コマンド ###################################################################### -MV ?= mv - -CP ?= cp - -CAT ?= cat - -MKDIR ?= mkdir -p - -RM ?= rm -f - -ECHO ?= echo - -TIME ?= time - -DIFF ?= diff -c - -DEV_NULL ?= /dev/null - -CHMOD ?= chmod - -GREP ?= grep - -LINECOUNT ?= wc -l - -FIND ?= find - -TR ?= tr - -EXPR ?= expr - -LN ?= ln -s - -SED ?= sed +CAT := cat +CHMOD := chmod +CP := cp +DEV_NULL := /dev/null +DIFF := diff -c +ECHO := echo +EXPR := expr +FIND := find +GREP := grep +LINECOUNT := wc -l +LN := ln -s +MKDIR := mkdir -p +MV := mv +SED := sed +TIME := time +TR := tr ###################################################################### # テストグループとテストでの共通マクロ @@ -64,7 +44,7 @@ endef # chk_file_ext: 指定されたファイルが実在する場合、エラー # 用例: $(call chk_file_ext,file) define chk_file_ext - $(if $(wildcard $1),$(error $1 exists in $(CURRDIR))) + $(if $(wildcard $1),$(error $1 exists in $(CURDIR))) endef # 指定したディレクトリーを作成 @@ -116,7 +96,7 @@ TEST_MAKEFILE := Test.mk MAKEFILES := $(DEFINE_FILE) $(TEST_MAKEFILE) # すべてのMakefile群の絶対パス -MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURRDIR)/$(file)) +MAKEFILES_ABS := $(foreach file,$(MAKEFILES),$(CURDIR)/$(file)) ###################################################################### # テストのディレクトリー diff --git a/test/template/Group.mk b/test/template/Group.mk index 01d5a27..79bb68b 100644 --- a/test/template/Group.mk +++ b/test/template/Group.mk @@ -8,18 +8,20 @@ # make time : すべてのテストを実行し、実行時間をログファイルに出力 # make create : TESTNAMEで指定されたテストを新規に作成 # make clean : すべてのテストで、"make" で生成されたファイルをクリア -# make cleantime: すべてのテストで、実行時間のログファイルをクリア +# make time-clean: すべてのテストで、実行時間のログファイルをクリア SHELL = /bin/sh include Define.mk +verbose ?= 1 + ###################################################################### # テストグループのディレクトリー ###################################################################### # グループディレクトリー -GROUP_DIR := $(CURRDIR) +GROUP_DIR := $(CURDIR) # グループ名。ディレクトリ名から取得 GROUP := $(notdir $(GROUP_DIR)) @@ -50,16 +52,18 @@ TEST_LOG_FILES := $(foreach test,$(TESTS),$(test)/$(LOG_FILE)) # 引数は、テストのリスト、グループファイル、テストファイル # 用例: $(call group_log,files_test_log,file_group_log) define group_log + $(if $(filter 1,$(verbose)),$(ECHO) '$(CURDIR) - $(words $1) tests') $(foreach target,$1,$(call group_log_each,$(target),$2)) + $(if $(filter 1,$(verbose)),$(ECHO)) endef # テストのログファイルをグループログファイルに出力。引数は、テスト、グループログファイル # 用例: $(call group_log_each,file_test_log,file_group_log) define group_log_each + $(if $(filter 1,$(verbose)),$(ECHO) -n '.') $(ECHO) $(dir $1) >>$2; if test -s $1; then $(CAT) $1 >>$2; else $(ECHO) $(dir $1)": no log" >>$2; fi $(ECHO) >>$2; - endef # 成功したテストの数。テストグループログファイルから取得 @@ -78,29 +82,30 @@ TEST_TIME_FILES := $(foreach test,$(TESTS),$(test)/$(TIME_FILE)) # 引数は、グループ名、グループログファイル、グループレポートファイル # 用例: $(call group_report,name,file_log,file_report) define group_report - $(ECHO) "$1: $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in $(GROUP_DIR)/$2" >$3; + $(ECHO) '$1: $(SUCCESS_TEST) / $(ALL_TEST) tests passed. Details in $(GROUP_DIR)/$2' >$3 if test $(FAIL_TEST) -eq 0; then $(ECHO) "$1: All tests are succeded." >>$3; fi endef # リストで指定したディレクトリーでmakeを実行 -# 用例: $(call make_tests,list_dir,target) -define make_tests - $(foreach dir,$1,$(call make_test_each,$(dir),$2)) +# 用例: $(call make_targets,list_dir,target) +define make_targets + $(if $(filter 1,$(verbose)),$(ECHO) '$(CURDIR) - $2';) + $(foreach dir,$1,$(call make_target_each,$(dir),$2)) endef # 指定したディレクトリーでmakeを実行 -# 用例: $(call make_test_each,tests,target) -define make_test_each +# 用例: $(call make_target_each,tests,target) +define make_target_each $(MAKE) $2 -sC $1; - endef -.PHONY: check checkall time create clean cleantime +.PHONY: check checkall time create clean time-clean check checkall: clean $(GROUP_REPORT_FILE) @$(CAT) $(GROUP_REPORT_FILE) + @exit $(FAIL_TEST) -time: cleantime $(GROUP_TIME_FILE) +time: time-clean $(GROUP_TIME_FILE) @$(CAT) $(GROUP_TIME_FILE) create: @@ -108,12 +113,12 @@ create: @$(call create_makefile,$(TEST)/$(MAKEFILE),$(MAKEFILES)) clean: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_RES_FILES) + @$(call make_targets,$(TESTS),$@) + @$(RM) $(GROUP_RES_FILES); -cleantime: - @$(call make_tests,$(TESTS),$@) - @$(RM) $(GROUP_TIME_FILE) +time-clean: + @$(call make_targets,$(TESTS),$@) + @$(RM) $(GROUP_TIME_FILE); $(GROUP_REPORT_FILE): $(GROUP_LOG_FILE) @$(call group_report,$(GROUP),$^,$@) diff --git a/test/template/Makefile b/test/template/Makefile index d5acfb9..e88f17a 100644 --- a/test/template/Makefile +++ b/test/template/Makefile @@ -28,5 +28,5 @@ copymk: @$(CP) $(MAKEFILES) $(GROUPDIR)/ linkmk: - @$(LN) $(CURRDIR)/$(GROUP_MAKEFILE) $(GROUPDIR)/Makefile + @$(LN) $(CURDIR)/$(GROUP_MAKEFILE) $(GROUPDIR)/Makefile @$(LN) $(MAKEFILES_ABS) $(GROUPDIR)/ diff --git a/test/template/Test.mk b/test/template/Test.mk index 11b8cbf..e72ba6d 100644 --- a/test/template/Test.mk +++ b/test/template/Test.mk @@ -9,9 +9,9 @@ # make set : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は実行しない # make reset : CMDの標準出力をTEST0_FILEに保存。TEST0_FILEが存在する場合は上書き # make time : CMDの実行にかかった時間をTIME_FILEに保存し、出力 -# make cleantime: "make time" で作成されたファイルをクリア +# make time-clean: "make time" で作成されたファイルをクリア # make clean : "make" で作成されたファイルをクリア -# make cleanall: "make" と "make set" で作成されたファイルをクリア +# make all-clean: "make" と "make set" で作成されたファイルをクリア SHELL = /bin/bash ###################################################################### @@ -49,7 +49,7 @@ define exec_cmd if test ! -x $1; then $(CHMOD) u+x $1; fi ./$1 >>$2 2>$3 if test -s $3; then $(CAT) $3 >>$2; fi - $(MV) $2 $2.tmp && $(SED) -e "s%$(CURRDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp + $(MV) $2 $2.tmp && $(SED) -e "s%$(CURDIR)%\$$PWD%g" $2.tmp >$2 && $(RM) $2.tmp $(call rm_null,$3) endef @@ -67,7 +67,7 @@ endef define test_log $(call desc_log,$3) if test ! -s $2; then RES=Success; else RES=Failure; fi; $(ECHO) "$1: Test $$RES $(DATE)" >>$3 - $(ECHO) "Details in $(CURRDIR)/$(DETAIL_FILE)" >>$3 + $(ECHO) "Details in $(CURDIR)/$(DETAIL_FILE)" >>$3 endef # NODISPが設定されていない時は、ログファイルを表示 @@ -97,12 +97,12 @@ define echo_hr endef # テスト名。カレントディレクトリー名から取得 -TEST = $(notdir $(CURRDIR)) +TEST = $(notdir $(CURDIR)) # コマンドファイルのソース CMDSRC_FILE ?= $(CMD_FILE) -.PHONY: check set reset clean cleanall time cleantime +.PHONY: check set reset clean all-clean time time-clean check: clean $(DETAIL_FILE) @$(call disp_test_log,$(LOG_FILE)) @@ -116,20 +116,20 @@ set: $(CMD_FILE) @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) @$(CAT) $(TEST0_FILE) -reset: cleanall $(CMD_FILE) +reset: all-clean $(CMD_FILE) @-$(call exec_cmd,$(CMD_FILE),$(TEST0_FILE),$(ERR_FILE)) @$(CAT) $(TEST0_FILE) clean: @$(RM) $(TEST_RES_FILES) -cleanall: clean +all-clean: clean @$(RM) $(TEST0_FILE) -time: cleantime $(TIME_FILE) +time: time-clean $(TIME_FILE) @$(CAT) $(TIME_FILE) -cleantime: +time-clean: @$(RM) $(TIME_FILE) $(TEST1_FILE): $(CMD_FILE) -- 2.18.0