Skip to content

Commit faefeab

Browse files
committed
fbc-tests: unit-tests.mk, log-tests.mk
- combine search in to a single find | grep | sed, - use intermediate file for really long command line when linking - break up long command lines (otherwise will fail on cmd.exe shell) - force xargs to succeed even when no matches found (otherwise will abort prematurely) - explicity clean fbc-tests.o (it's not part of unit-tests.inc)
1 parent 58636f8 commit faefeab

File tree

2 files changed

+59
-44
lines changed

2 files changed

+59
-44
lines changed

tests/log-tests.mk

Lines changed: 40 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,10 @@ endif
7575
# ------------------------------------------------------------------------
7676

7777
LOG_TESTS_INC := log-tests-$(FB_LANG).inc
78+
LOG_TESTS_LOG_LST := log-tests-log-$(FB_LANG).lst
79+
LOG_TESTS_OBJ_LST := log-tests-obj-$(FB_LANG).lst
80+
81+
LOG_TESTS_RESULTS_LOG := log-tests-results-$(FB_LANG).log
7882
FAILED_LOG_TESTS_INC := failed-log-tests-$(FB_LANG).inc
7983
FAILED_LOG := failed-$(FB_LANG).log
8084

@@ -144,6 +148,12 @@ $(LOGLIST_MULTI_MODULE_OK) \
144148
$(LOGLIST_MULTI_MODULE_FAIL) \
145149
)
146150

151+
OBJLIST_ALL := $(strip \
152+
$(OBJLIST_COMPILE_ONLY_OK) \
153+
$(OBJLIST_COMPILE_ONLY_FAIL) \
154+
$(OBJLIST_COMPILE_AND_RUN_OK) \
155+
$(OBJLIST_COMPILE_AND_RUN_FAIL) \
156+
)
147157

148158
# set ABORT_CMD := false to abort on failed tests, true to continue anyway
149159
ABORT_CMD := true
@@ -337,21 +347,42 @@ $(LOG_TESTS_INC) :
337347
>> $(LOG_TESTS_INC)
338348
@$(ECHO) "#" >> $(LOG_TESTS_INC)
339349

350+
# hack: use the auto-generated list of tests to create a temporary file
351+
# containing a list of all the .o & .log files. The command line can be
352+
# very long and some shells (like cmd.exe) won't handle it.
353+
354+
@$(PRINTF) "."
355+
@$(GREP) $(LOG_TESTS_INC) -i -e ".*+=.*\.b.*" \
356+
| $(SED) 's/^.* += \(.*\)\(\.b.*\)/\1\.o/g' \
357+
> $(LOG_TESTS_OBJ_LST)
358+
359+
$(LOG_TESTS_LOG_LST) : $(LOG_TESTS_INC)
360+
@$(PRINTF) "."
361+
@$(GREP) $(LOG_TESTS_INC) -i -e "^.*+=.*\.b.*" \
362+
| $(SED) 's/^.* += \(.*\)\(\.b.*\)/\1\.log/g' \
363+
> $(LOG_TESTS_LOG_LST)
364+
340365
@$(ECHO) " Done"
341366

342367
# ------------------------------------------------------------------------
343368
# results
344369
#
370+
# use xargs to manage the number of maximum number of arguments passed to grep and store the
371+
# results in a single file
372+
#
373+
#
374+
$(LOG_TESTS_RESULTS_LOG): $(LOG_TESTS_LOG_LST) $(LOGLIST_ALL)
375+
@$(XARGS) -a $(LOG_TESTS_LOG_LST) $(GREP) -i -E '^.*[[:space:]]*:[[:space:]]*RESULT=FAILED' ; true > $@
345376

346-
results : $(LOGLIST_ALL)
377+
results : $(LOG_TESTS_RESULTS_LOG)
347378

348379
@$(PRINTF) "\n\nFAILED LOG - for log-tests -lang $(FB_LANG)\n" > $(FAILED_LOG)
349380

350381
ifeq ($(LOGLIST_ALL),)
351382
@$(PRINTF) "None Found\n\n" >> $(FAILED_LOG)
352383
else
353384
@if \
354-
$(GREP) -i -E '^.*[[:space:]]*:[[:space:]]*RESULT=FAILED' $(LOGLIST_ALL) \
385+
$(GREP) -i -E '^.*[[:space:]]*:[[:space:]]*RESULT=FAILED' $(LOG_TESTS_RESULTS_LOG) \
355386
; then \
356387
$(PRINTF) " \n" && \
357388
true \
@@ -374,53 +405,29 @@ mostlyclean : clean_tests
374405
.PHONY: clean_tests
375406
clean_tests :
376407
@$(ECHO) Cleaning log-tests for -lang $(FB_LANG) ...
377-
ifneq ($(OBJLIST_COMPILE_ONLY_OK),)
378-
@$(RM) $(OBJLIST_COMPILE_ONLY_OK)
379-
endif
380-
ifneq ($(LOGLIST_COMPILE_ONLY_OK),)
381-
@$(RM) $(LOGLIST_COMPILE_ONLY_OK)
382-
endif
383-
ifneq ($(OBJLIST_COMPILE_ONLY_FAIL),)
384-
@$(RM) $(OBJLIST_COMPILE_ONLY_FAIL)
385-
endif
386-
ifneq ($(LOGLIST_COMPILE_ONLY_FAIL),)
387-
@$(RM) $(LOGLIST_COMPILE_ONLY_FAIL)
408+
$(RM) $(LOG_TESTS_RESULTS_LOG)
409+
ifneq ($(LOGLIST_ALL),)
410+
@if [ -f $(LOG_TESTS_LOG_LST) ]; then $(XARGS) -r -a $(LOG_TESTS_LOG_LST) $(RM) ; fi
411+
@if [ -f $(LOG_TESTS_OBJ_LST) ]; then $(XARGS) -r -a $(LOG_TESTS_OBJ_LST) $(RM) ; fi
388412
endif
413+
389414
ifneq ($(APPLIST_COMPILE_AND_RUN_OK),)
390415
@$(RM) $(APPLIST_COMPILE_AND_RUN_OK)
391416
endif
392-
ifneq ($(OBJLIST_COMPILE_AND_RUN_OK),)
393-
@$(RM) $(OBJLIST_COMPILE_AND_RUN_OK)
394-
endif
395-
ifneq ($(LOGLIST_COMPILE_AND_RUN_OK),)
396-
@$(RM) $(LOGLIST_COMPILE_AND_RUN_OK)
397-
endif
398-
ifneq ($(OBJLIST_COMPILE_AND_RUN_FAIL),)
399-
@$(RM) $(OBJLIST_COMPILE_AND_RUN_FAIL)
400-
endif
401417
ifneq ($(APPLIST_COMPILE_AND_RUN_FAIL),)
402418
@$(RM) $(APPLIST_COMPILE_AND_RUN_FAIL)
403419
endif
404-
ifneq ($(LOGLIST_COMPILE_AND_RUN_FAIL),)
405-
@$(RM) $(LOGLIST_COMPILE_AND_RUN_FAIL)
406-
endif
407420
ifneq ($(SRCLIST_MULTI_MODULE_OK),)
408421
@for s in $(SRCLIST_MULTI_MODULE_OK) ; do $(MAKE) -f bmk-make.mk clean BMK=$$s TEST_MODE=MULTI_MODULE_OK ; done
409422
endif
410-
ifneq ($(LOGLIST_MULTI_MODULE_OK),)
411-
@$(RM) $(LOGLIST_MULTI_MODULE_OK)
412-
endif
413423
ifneq ($(SRCLIST_MULTI_MODULE_FAIL),)
414424
@for s in $(SRCLIST_MULTI_MODULE_FAIL) ; do $(MAKE) -f bmk-make.mk clean BMK=$$s TEST_MODE=MULTI_MODULE_FAIL ; done
415425
endif
416-
ifneq ($(LOGLIST_MULTI_MODULE_FAIL),)
417-
@$(RM) $(LOGLIST_MULTI_MODULE_FAIL)
418-
endif
419426

420427
.PHONY: clean_include
421428
clean_include :
422-
$(RM) $(LOG_TESTS_INC)
423-
@$(RM) $(FAILED_LOG)
429+
$(RM) $(LOG_TESTS_INC) $(LOG_TESTS_LOG_LST) $(LOG_TESTS_OBJ_LST)
430+
@$(RM) $(FAILED_LOG)
424431

425432
.PHONY: clean_failed_include
426433
clean_failed_include :

tests/unit-tests.mk

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ endif
4949
# ------------------------------------------------------------------------
5050

5151
UNIT_TESTS_INC := unit-tests.inc
52+
UNIT_TESTS_OBJ_LST := unit-tests-obj.lst
5253

5354
SRCLIST :=
5455
ifeq ($(MAKECMDGOALS),mostlyclean)
@@ -135,7 +136,7 @@ OBJLIST := $(SRCLIST:%.bas=%.o)
135136
#
136137

137138
.PHONY: all
138-
all : make_fbcunit $(UNIT_TESTS_INC) build_tests run_tests
139+
all : make_fbcunit $(UNIT_TESTS_OBJ_LST) build_tests run_tests
139140

140141
.PHONY: make_fbcunit
141142
make_fbcunit : $(FBCU_BIN)
@@ -154,20 +155,27 @@ $(UNIT_TESTS_INC) : $(DIRLIST_INC)
154155
@$(ECHO) "# This file automatically generated - DO NOT EDIT" > $(UNIT_TESTS_INC)
155156
@$(ECHO) "#" >> $(UNIT_TESTS_INC)
156157
@$(FIND) $(DIRLIST) -type f -name '*.bas' -or -name '*.bmk' \
157-
| $(XARGS) $(GREP) -l -i -E '#[[:space:]]*include[[:space:]](once)*[[:space:]]*\"fbcu(nit)?\.bi\"' \
158-
| $(SED) -e 's/\(^.*\)/\SRCLIST \+\= \.\/\1/g' \
159-
>> $(UNIT_TESTS_INC)
160-
@$(FIND) $(DIRLIST) -type f -name '*.bas' -or -name '*.bmk' \
161-
| $(XARGS) $(GREP) -l -i -E '[[:space:]]*.[[:space:]]*TEST_MODE[[:space:]]*\:[[:space:]]*FBCUNIT_COMPATIBLE' \
158+
| $(XARGS) $(GREP) -l -i -E \
159+
'(#[[:space:]]*include[[:space:]](once)*[[:space:]]*\"fbcu(nit)?\.bi\")|([[:space:]]*.[[:space:]]*TEST_MODE[[:space:]]*\:[[:space:]]*FBCUNIT_COMPATIBLE)' \
162160
| $(SED) -e 's/\(^.*\)/\SRCLIST \+\= \.\/\1/g' \
163161
>> $(UNIT_TESTS_INC)
164162
@$(ECHO) "Done"
165163

164+
# hack: generate the file UNIT_TESTS_OBJ_LST from UNIT_TESTS_INC
165+
# Use the auto-generated list of tests to create a temporary file
166+
# containing a list of all the object files. The command line can be
167+
# very long and some shells (like cmd.exe) won't handle it.
168+
169+
$(UNIT_TESTS_OBJ_LST) : $(UNIT_TESTS_INC)
170+
@$(GREP) $(UNIT_TESTS_INC) -i -e 'SRCLIST +=' \
171+
| $(SED) 's/^SRCLIST += \(.*\)\(\.b.*\)/\1\.o/g' \
172+
> $(UNIT_TESTS_OBJ_LST)
173+
166174
# ------------------------------------------------------------------------
167175

168176
.PHONY: build_tests
169-
build_tests : $(OBJLIST) $(UNIT_TESTS_INC)
170-
$(FBC) $(FBC_LFLAGS) $(OBJLIST)
177+
build_tests : ./$(MAINBAS).o $(OBJLIST) $(UNIT_TESTS_OBJ_LST)
178+
$(FBC) $(FBC_LFLAGS) @$(UNIT_TESTS_OBJ_LST) ./$(MAINBAS).o
171179

172180
.PHONY: run_tests
173181
run_tests : build_tests
@@ -186,13 +194,13 @@ clean_main_exe :
186194
.PHONY: clean_tests
187195
clean_tests :
188196
@$(ECHO) Cleaning unit-tests files ...
189-
@$(RM) $(OBJLIST)
197+
@$(RM) ./$(MAINBAS).o
198+
@if [ -f $(UNIT_TESTS_OBJ_LST) ]; then $(XARGS) -r -a $(UNIT_TESTS_OBJ_LST) $(RM) ; fi
190199

191200
.PHONY: clean_fbcu
192201
clean_fbcu :
193202
cd $(FBCU_DIR) && make clean
194203

195204
.PHONY: clean_include
196205
clean_include :
197-
$(RM) $(UNIT_TESTS_INC)
198-
206+
$(RM) $(UNIT_TESTS_INC) $(UNIT_TESTS_OBJ_LST)

0 commit comments

Comments
 (0)