@@ -915,6 +915,8 @@ REFTABLE_LIB = reftable/libreftable.a
915915GENERATED_H += command-list.h
916916GENERATED_H += config-list.h
917917GENERATED_H += hook-list.h
918+ GENERATED_H += $(UNIT_TEST_DIR ) /clar-decls.h
919+ GENERATED_H += $(UNIT_TEST_DIR ) /clar.suite
918920
919921.PHONY : generated-hdrs
920922generated-hdrs : $(GENERATED_H )
@@ -1332,8 +1334,16 @@ THIRD_PARTY_SOURCES += compat/poll/%
13321334THIRD_PARTY_SOURCES += compat/regex/%
13331335THIRD_PARTY_SOURCES += sha1collisiondetection/%
13341336THIRD_PARTY_SOURCES += sha1dc/%
1337+ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR ) /clar/%
1338+ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR ) /clar/clar/%
1339+
1340+ CLAR_TEST_SUITES += ctype
1341+ CLAR_TEST_SUITES += strvec
1342+ CLAR_TEST_PROG = $(UNIT_TEST_BIN ) /unit-tests$(X )
1343+ CLAR_TEST_OBJS = $(patsubst % ,$(UNIT_TEST_DIR ) /% .o,$(CLAR_TEST_SUITES ) )
1344+ CLAR_TEST_OBJS += $(UNIT_TEST_DIR ) /clar/clar.o
1345+ CLAR_TEST_OBJS += $(UNIT_TEST_DIR ) /unit-test.o
13351346
1336- UNIT_TEST_PROGRAMS += t-ctype
13371347UNIT_TEST_PROGRAMS += t-example-decorate
13381348UNIT_TEST_PROGRAMS += t-hash
13391349UNIT_TEST_PROGRAMS += t-hashmap
@@ -1352,7 +1362,6 @@ UNIT_TEST_PROGRAMS += t-reftable-stack
13521362UNIT_TEST_PROGRAMS += t-reftable-tree
13531363UNIT_TEST_PROGRAMS += t-strbuf
13541364UNIT_TEST_PROGRAMS += t-strcmp-offset
1355- UNIT_TEST_PROGRAMS += t-strvec
13561365UNIT_TEST_PROGRAMS += t-trailer
13571366UNIT_TEST_PROGRAMS += t-urlmatch-normalization
13581367UNIT_TEST_PROGS = $(patsubst % ,$(UNIT_TEST_BIN ) /% $X,$(UNIT_TEST_PROGRAMS ) )
@@ -2715,6 +2724,7 @@ OBJECTS += $(XDIFF_OBJS)
27152724OBJECTS += $(FUZZ_OBJS )
27162725OBJECTS += $(REFTABLE_OBJS ) $(REFTABLE_TEST_OBJS )
27172726OBJECTS += $(UNIT_TEST_OBJS )
2727+ OBJECTS += $(CLAR_TEST_OBJS )
27182728
27192729ifndef NO_CURL
27202730 OBJECTS += http.o http-walker.o remote-curl.o
@@ -3214,7 +3224,7 @@ endif
32143224
32153225test_bindir_programs := $(patsubst % ,bin-wrappers/% ,$(BINDIR_PROGRAMS_NEED_X ) $(BINDIR_PROGRAMS_NO_X ) $(TEST_PROGRAMS_NEED_X ) )
32163226
3217- all :: $(TEST_PROGRAMS ) $(test_bindir_programs ) $(UNIT_TEST_PROGS )
3227+ all :: $(TEST_PROGRAMS ) $(test_bindir_programs ) $(UNIT_TEST_PROGS ) $( CLAR_TEST_PROG )
32183228
32193229bin-wrappers/% : wrap-for-bin.sh
32203230 $(call mkdir_p_parent_template)
@@ -3250,9 +3260,10 @@ t/helper/test-%$X: t/helper/test-%.o GIT-LDFLAGS $(GITLIBS)
32503260check-sha1 :: t/helper/test-tool$X
32513261 t/helper/test-sha1.sh
32523262
3253- SP_OBJ = $(patsubst % .o,% .sp,$(OBJECTS ) )
3263+ SP_SRC = $(filter-out $(THIRD_PARTY_SOURCES ) ,$(patsubst % .o,% .c,$(OBJECTS ) ) )
3264+ SP_OBJ = $(patsubst % .c,% .sp,$(SP_SRC ) )
32543265
3255- $(SP_OBJ ) : % .sp: % .c % .o
3266+ $(SP_OBJ ) : % .sp: % .c % .o $( GENERATED_H )
32563267 $(QUIET_SP ) cgcc -no-compile $(ALL_CFLAGS ) $(EXTRA_CPPFLAGS ) \
32573268 -Wsparse-error \
32583269 $(SPARSE_FLAGS ) $(SP_EXTRA_FLAGS ) $< && \
@@ -3261,7 +3272,7 @@ $(SP_OBJ): %.sp: %.c %.o
32613272.PHONY : sparse
32623273sparse : $(SP_OBJ )
32633274
3264- EXCEPT_HDRS := $(GENERATED_H ) unicode-width.h compat/% xdiff/%
3275+ EXCEPT_HDRS := $(GENERATED_H ) unicode-width.h compat/% xdiff/% $( UNIT_TEST_DIR ) /clar/% $( UNIT_TEST_DIR ) /clar/clar/%
32653276ifndef OPENSSL_SHA1
32663277 EXCEPT_HDRS += sha1/openssl.h
32673278endif
@@ -3282,7 +3293,7 @@ HCC = $(HCO:hco=hcc)
32823293 @echo ' #include "git-compat-util.h"' > $@
32833294 @echo ' #include "$<"' >> $@
32843295
3285- $(HCO ) : % .hco: % .hcc FORCE
3296+ $(HCO ) : % .hco: % .hcc $( GENERATED_H ) FORCE
32863297 $(QUIET_HDR )$(CC ) $(ALL_CFLAGS ) -o /dev/null -c -xc $<
32873298
32883299.PHONY : hdr-check $(HCO )
@@ -3293,7 +3304,7 @@ style:
32933304 git clang-format --style file --diff --extensions c,h
32943305
32953306.PHONY : check
3296- check : $( GENERATED_H )
3307+ check :
32973308 @if sparse; \
32983309 then \
32993310 echo >&2 " Use 'make sparse' instead" ; \
@@ -3645,7 +3656,7 @@ endif
36453656
36463657artifacts-tar :: $(ALL_COMMANDS_TO_INSTALL ) $(SCRIPT_LIB ) $(OTHER_PROGRAMS ) \
36473658 GIT-BUILD-OPTIONS $(TEST_PROGRAMS ) $(test_bindir_programs ) \
3648- $(UNIT_TEST_PROGS ) $(MOFILES )
3659+ $(UNIT_TEST_PROGS ) $(CLAR_TEST_PROG ) $( MOFILES )
36493660 $(QUIET_SUBDIR0 ) templates $(QUIET_SUBDIR1 ) \
36503661 SHELL_PATH=' $(SHELL_PATH_SQ)' PERL_PATH=' $(PERL_PATH_SQ)'
36513662 test -n " $( ARTIFACTS_DIRECTORY) "
@@ -3701,6 +3712,7 @@ cocciclean:
37013712
37023713clean : profile-clean coverage-clean cocciclean
37033714 $(RM ) -r .build $(UNIT_TEST_BIN )
3715+ $(RM ) GIT-TEST-SUITES
37043716 $(RM ) po/git.pot po/git-core.pot
37053717 $(RM ) git.res
37063718 $(RM ) $(OBJECTS )
@@ -3860,7 +3872,26 @@ $(UNIT_TEST_PROGS): $(UNIT_TEST_BIN)/%$X: $(UNIT_TEST_DIR)/%.o \
38603872 $(QUIET_LINK )$(CC ) $(ALL_CFLAGS ) -o $@ $(ALL_LDFLAGS ) \
38613873 $(filter % .o,$^ ) $(filter % .a,$^ ) $(LIBS )
38623874
3875+ GIT-TEST-SUITES : FORCE
3876+ @FLAGS=' $(CLAR_TEST_SUITES)' ; \
3877+ if test x" $$ FLAGS" ! = x" ` cat GIT-TEST-SUITES 2> /dev/null` " ; then \
3878+ echo >&2 " * new test suites" ; \
3879+ echo " $$ FLAGS" > GIT-TEST-SUITES; \
3880+ fi
3881+
3882+ $(UNIT_TEST_DIR ) /clar-decls.h : $(patsubst % ,$(UNIT_TEST_DIR ) /% .c,$(CLAR_TEST_SUITES ) ) GIT-TEST-SUITES
3883+ $(QUIET_GEN ) for suite in $(CLAR_TEST_SUITES ) ; do \
3884+ sed -ne " s/^\(void test_$$ {suite}__[a-zA-Z_0-9][a-zA-Z_0-9]*(void)$$ \)/extern \1;/p" $(UNIT_TEST_DIR ) /$$ suite.c; \
3885+ done > $@
3886+ $(UNIT_TEST_DIR ) /clar.suite : $(UNIT_TEST_DIR ) /clar-decls.h
3887+ $(QUIET_GEN ) awk -f $(UNIT_TEST_DIR ) /clar-generate.awk $< > $(UNIT_TEST_DIR ) /clar.suite
3888+ $(CLAR_TEST_OBJS ) : $(UNIT_TEST_DIR ) /clar-decls.h
3889+ $(CLAR_TEST_OBJS ) : EXTRA_CPPFLAGS = -I$(UNIT_TEST_DIR )
3890+ $(CLAR_TEST_PROG ) : $(UNIT_TEST_DIR ) /clar.suite $(CLAR_TEST_OBJS ) $(GITLIBS ) GIT-LDFLAGS
3891+ $(call mkdir_p_parent_template)
3892+ $(QUIET_LINK )$(CC ) $(ALL_CFLAGS ) -o $@ $(ALL_LDFLAGS ) $(filter % .o,$^ ) $(LIBS )
3893+
38633894.PHONY : build-unit-tests unit-tests
3864- build-unit-tests : $(UNIT_TEST_PROGS )
3865- unit-tests : $(UNIT_TEST_PROGS ) t/helper/test-tool$X
3895+ build-unit-tests : $(UNIT_TEST_PROGS ) $( CLAR_TEST_PROG )
3896+ unit-tests : $(UNIT_TEST_PROGS ) $( CLAR_TEST_PROG ) t/helper/test-tool$X
38663897 $(MAKE ) -C t/ unit-tests
0 commit comments