ソースコードの推敲
[YACASL2.git] / test / Template / Define.mk
1 # autotest.mk > test_template > Define.mk
2 # 自動テスト用の変数、マクロ定義
3
4 ifndef DEFINE_INCLUDED
5 DEFINE_INCLUDED = 1
6
7 # シェルコマンドをデバッグするときは、DEBUGSH変数を設定してmakeを実行する
8 # 例: DEBUGSH=1 make
9 ifdef DEBUGSH
10   SHELL := /bin/sh -x
11 endif
12
13 # 現在の日時
14 DATE = $(shell date +"%F %T")
15
16 # Makefile
17 MAKEFILE := Makefile
18
19 ######################################################################
20 # コマンド
21 ######################################################################
22
23 CAT := cat
24 CHMOD := chmod
25 CP := cp
26 DEV_NULL := /dev/null
27 DIFF := diff -c
28 ECHO := echo
29 EXPR := expr
30 FILE := file -b -e ascii
31 FIND := find
32 GREP := grep
33 LINECOUNT := wc -l
34 LN := ln -s
35 MKDIR := mkdir -p
36 MV := mv
37 PRINTF := printf
38 REALPATH := realpath
39 SED := sed
40 TEST := test
41 TIME := time
42 TR := tr
43 VALGRIND := valgrind
44 VALGRIND_LOGFILE := _valgrind.log
45 VALGRINDFLAG :=  -q --leak-check=full --show-leak-kinds=all --log-file=$(VALGRIND_LOGFILE)
46 VALGRIND_CMDLOGFILE := valgrind.log
47
48 ######################################################################
49 # テストグループとテストでの共通マクロ
50 ######################################################################
51
52 # chk_var_null: 引数がNULLの場合、エラー
53 # 用例: $(call chk_var_null,var)
54 define chk_var_null
55     $(if $1,,$(error NULL argument))
56 endef
57
58 # chk_file_ext: 指定されたファイルが実在する場合、エラー
59 # 用例: $(call chk_file_ext,file)
60 define chk_file_ext
61     $(if $(wildcard $1),$(error $1 exists in $(CURDIR)))
62 endef
63
64 # 指定したディレクトリーを作成
65 # 引数は、ディレクトリー名
66 # 用例: $(call create_dir,name)
67 define create_dir
68     $(call chk_var_null,$1)
69     $(call chk_file_ext,$1)
70     $(MKDIR) $1
71 endef
72
73
74 # ファイル1からファイル2への相対パス
75 # 引数は、ファイル名1、ファイル名2
76 # 用例: $(call rel_to,file1,file2)
77 define rel_to
78     $(strip $(shell $(REALPATH) --relative-to=$1 $2))
79 endef
80
81 # テストディレクトリーのMakefileを作成
82 # 引数は、Makefile名、依存ファイル群
83 # 用例: $(call create_makefile,file,list_include_file)
84 define create_makefile
85     $(RM) $1
86     $(foreach infile,$2,$(ECHO) "include ../$(infile)" >>$1; )
87     $(if $(filter $(SRC),c),$(call puts_cmd_c,$1))
88 endef
89
90 # C言語の関数をテストするための設定を、指定されたファイルに出力
91 # 引数は、ファイル名
92 # 用例: $(call puts_cmd_c,file)
93 define puts_cmd_c
94     $(ECHO) >>$1
95     $(ECHO) "CC := gcc" >>$1
96     $(ECHO) "CFLAGS := -Wall" >>$1
97     $(ECHO) >>$1
98     $(ECHO) ".INTERMEDIATE:" "$$""(CMD_FILE)" >>$1
99     $(ECHO) >>$1
100     $(ECHO) "CMDSRC_FILE := cmd.c" >>$1
101     $(ECHO) "TESTTARGET_FILES :=       # Set test target files" >>$1
102     $(ECHO) >>$1
103     $(ECHO) "$$""(CMD_FILE):" "$$""(CMDSRC_FILE)" "$$""(TESTTARGET_FILES)" >>$1
104     $(ECHO) "   ""$$""(CC)" "$$""(CFLAGS)" "-o" "$$""@" "$$""^" >>$1
105 endef
106
107 ######################################################################
108 # テストグループのディレクトリー
109 ######################################################################
110
111 # テストグループとテストの変数を定義したMakefile
112 DEFINE_FILE := Define.mk
113
114 # テストのターゲットを定義したMakefile
115 TEST_MAKEFILE := Test.mk
116
117 # テストグループのMakefileとしてコピーされるファイル
118 GROUP_MAKEFILE := Group.mk
119
120 # DEFINE_FILEの相対パス
121 DEFINE_FILE_REL = $(call rel_to,$(GROUPDIR),$(DEFINE_FILE))
122
123 # TEST_MAKEFILEの相対パス
124 TEST_MAKEFILE_REL = $(call rel_to,$(GROUPDIR),$(TEST_MAKEFILE))
125
126 # GROUP_MAKEFILEの相対パス
127 GROUP_MAKEFILE_REL = $(call rel_to,$(GROUPDIR),$(GROUP_MAKEFILE))
128
129 ######################################################################
130 # テストのディレクトリー
131 ######################################################################
132
133 # テストコマンドファイル
134 CMD_FILE := cmd
135
136 # valgrindテストコマンドファイル
137 VALGRIND_CMD_FILE := cmd_valgrind
138
139 # テスト説明ファイル
140 DESC_FILE := desc.txt
141
142 # テスト想定ファイル
143 TEST0_FILE := 0.txt
144
145 # テスト結果ファイル
146 TEST1_FILE := 1.txt
147
148 # テストの、想定結果と結果の差分ファイル
149 DIFF_FILE := diff.log
150
151 # テストエラーファイル
152 ERR_FILE := err.log
153
154 # テストログファイル
155 LOG_FILE := summary.log
156
157 # 実行時間ファイル
158 TIME_FILE := time.log
159
160 # valgrindによるメモリーチェックファイル
161 VALGRIND_FILE := valgrind.log
162
163 # テスト詳細レポートファイル
164 DETAIL_FILE := detail.log
165
166 # テストの結果として作成されるファイル群
167 TEST_RES_FILES := $(TEST1_FILE) $(DIFF_FILE) $(ERR_FILE) $(LOG_FILE) $(DETAIL_FILE) $(TIME_FILE)
168
169 endif