]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/test/Makefile.in
ICU-64260.0.1.tar.gz
[apple/icu.git] / icuSources / test / Makefile.in
index 3821e6fba98a1b655d3c730b99c02b7a46baf751..7bb5b222829e9c29485e5232ca7034ec76a004c3 100644 (file)
@@ -1,5 +1,7 @@
 ## Makefile.in for ICU tests
-## Copyright (c) 1999-2010, International Business Machines Corporation and
+## Copyright (C) 2016 and later: Unicode, Inc. and others.
+## License & terms of use: http://www.unicode.org/copyright.html
+## Copyright (c) 1999-2014, International Business Machines Corporation and
 ## others. All Rights Reserved.
 
 ## Source directory information
@@ -15,16 +17,29 @@ subdir = test
 
 @ICUIO_TRUE@IOTEST = iotest
 
+# the letest directory depends on layoutex.
+# If you have layoutex but not layout, you will be using
+# harfbuzz.
+@LAYOUTEX_TRUE@LETEST = letest
+
+# no testdata without tools..
+@TOOLS_TRUE@TESTDATA = testdata
+
+# status dir
+STATUS_TMP = tmp
+STATUS_FULL = $(shell pwd)/$(STATUS_TMP)
+
 ## Files to remove for 'make clean'
-CLEANFILES = *~
+CLEANFILES = *~ $(STATUS_TMP)
 
-SUBDIRS = testdata intltest $(IOTEST) cintltst
+SUBDIRS = $(TESTDATA) intltest $(IOTEST) cintltst $(LETEST)
 
 ## List of phony targets
 .PHONY : everything all all-local all-recursive install install-local          \
 install-recursive clean clean-local clean-recursive distclean          \
 distclean-local distclean-recursive dist dist-recursive dist-local     \
-check check-recursive check-local xcheck xcheck-recursive xcheck-local
+check check-recursive check-local xcheck xcheck-recursive xcheck-local \
+check-exhaustive check-exhaustive-recursive
 
 ## Clear suffix list
 .SUFFIXES :
@@ -41,6 +56,7 @@ clean: clean-recursive clean-local
 distclean : distclean-recursive distclean-local
        $(RMV) hdrtst/Makefile
        $(RMV) perf/convperf/Makefile
+       $(RMV) $(STATUS_TMP)
 
 dist: dist-recursive dist-local
 check: everything check-recursive check-local
@@ -48,6 +64,7 @@ check-recursive: all-recursive
 # the xcheck targets create a ../test-*.xml file in JUnit format.
 xcheck: everything xcheck-recursive xcheck-local
 xcheck-recursive: all-recursive
+check-exhaustive: everything check-exhaustive-recursive check-local
 
 ## Recursive targets
 all-recursive install-recursive clean-recursive distclean-recursive dist-recursive:
@@ -67,19 +84,31 @@ all-recursive install-recursive clean-recursive distclean-recursive dist-recursi
          $(MAKE) "$$target-local" || exit; \
        fi
 
-xcheck-recursive check-recursive:
-       @goods=; \
+xcheck-recursive check-recursive check-exhaustive-recursive:
+       @$(MKINSTALLDIRS) $(STATUS_TMP)
+       @mystatus=$(STATUS_FULL)/status.$$$$.deleteme ; \
+       $(RMV) "$$mystatus".* ; \
+       goods=; \
        bads=; \
        target=`echo $@ | sed s/-recursive//`; \
        list='$(SUBDIRS)'; for subdir in $$list; do \
          echo "$(MAKE)[$(MAKELEVEL)]: Making \`$$target' in \`$$subdir'"; \
          local_target="$$target"; \
-         if (cd $$subdir && $(MAKE) $$local_target); then \
+         if (cd $$subdir && $(MAKE) $$local_target TEST_STATUS_FILE="$$mystatus.$$subdir" ); then \
            goods="$$goods $$subdir"; \
           else \
             bads="$$bads $$subdir"; \
           fi; \
        done; \
+       for subdir in $$list; do \
+         if [ -f "$$mystatus.$$subdir" ]; then \
+           echo "-------------" ; \
+           echo "| ***     FAILING TEST SUMMARY FOR:              $$subdir  " ; \
+           cat "$$mystatus.$$subdir" ; \
+           echo "| *** END FAILING TEST SUMMARY FOR:              $$subdir" ; \
+           $(RMV) "$$mystatus.$$subdir" ; \
+         fi; \
+       done; \
        echo "---------------"; \
        echo "ALL TESTS SUMMARY:"; \
         if test ! "x$$bads" = "x"; then \
@@ -89,6 +118,59 @@ xcheck-recursive check-recursive:
          echo "All tests OK: $$goods"; \
        fi
 
+# pcheck = parallel check. We don't care about the output interleaving,
+# just run it as fast as possible.
+# todo would be to merge this code into the above non-parallel check.
+STATUS_NUM:=$(shell echo $$$$)
+MYSTATUS_R=$(STATUS_FULL)/status.$(STATUS_NUM).deleteme
+STATUS_FILES=$(SUBDIRS:%=$(MYSTATUS_R).%)
+
+pcheck_setup: testdata
+       @$(MKINSTALLDIRS) $(STATUS_TMP)
+       $(RMV) "$(MYSTATUS_R)".*
+       @echo Beginning parallel make. Output may be interleaved!
+
+$(STATUS_FULL)/status.$(STATUS_NUM).deleteme.%: pcheck_setup
+       -@$(MAKE) -C $* TEST_STATUS_FILE=$@ check || ( echo "FAILED: $* (other tests may still be running..)" ; touch $@ ; cp $@ $@.FAIL ; false )
+       -@[ ! -f $@.FAIL ] && touch $@.PASS && echo "PASSED: $* (other tests may still be running..)"
+       -@touch $@
+
+# print out status
+pcheck: $(STATUS_FILES)
+       @goods=; \
+       bads=; \
+       echo "----------------------------------------"; \
+       for subdir in $(SUBDIRS); do \
+         if [ -s "$(MYSTATUS_R).$$subdir" ]; then \
+           echo "-------------" ; \
+           echo "| ***     FAILING TEST SUMMARY FOR:              $$subdir  " ; \
+           cat "$(MYSTATUS_R).$$subdir" ; \
+           echo "| *** END FAILING TEST SUMMARY FOR:              $$subdir" ; \
+           $(RMV) "$(MYSTATUS_R).$$subdir" ; \
+         fi; \
+       done; \
+       for subdir in $(SUBDIRS); do \
+               if [ -f "$(MYSTATUS_R).$$subdir.FAIL" ]; \
+               then \
+                       bads="$$bads $$subdir" ; \
+               elif [ -f "$(MYSTATUS_R).$$subdir.PASS" ]; \
+               then \
+                       goods="$$goods $$subdir" ; \
+               else \
+                       echo "*** subtest did not complete - $$subdir" ; \
+                       bads="$$bads $$subdir" ; \
+               fi ; \
+       done ; \
+       echo "ALL TESTS SUMMARY:"; \
+        if test ! "x$$bads" = "x"; then \
+         echo "(to get non-interleaved err output, use \"$(MAKE) check\" instead.)" ; \
+         echo "ok: $$goods"; \
+         echo "===== ERRS: $$bads"; exit 1; \
+       else \
+         echo "All tests OK: $$goods"; \
+       fi
+       -@$(RMV) "$(MYSTATUS_R)".*
+
 all-local:
 
 install-local: