# unit test pseudo target NotFile unittests ; rule UnitTestDependency { Depends unittests : $(1) ; } rule UnitTestLib { # UnitTestLib : : ; # local lib = $(1) ; local sources = $(2) ; local libraries = $(3) ; # if TEST_DEBUG is defined, we turn on debugging if $(TEST_DEBUG) { DEBUG on $(lib) [ FGristFiles $(sources:S=$(SUFOBJ)) ] ?= 1 ; } # define TEST_R5/TEST_HAIKU depending on the platform we build for if $(TARGET_PLATFORM) = libbe_test { ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ; # make the target depend on the installed libbe libraries Depends $(lib) : libbe_test.so ; } else { ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ; } UseCppUnitObjectHeaders $(sources) ; MakeLocate $(lib) : $(TARGET_UNIT_TEST_LIB_DIR) ; SharedLibrary $(lib) : $(sources) : $(libraries) libcppunit.so ; UnitTestDependency $(lib) ; UNIT_TEST_LIBRARIES on unittests += $(lib) ; } rule UnitTestResource { # UnitTestResource : : ; # # supported values: isExec local target = $(1:G=tests!unittests!resources) ; local source = $(2) ; local flags = $(3) ; MakeLocate $(target) : [ FDirName $(TARGET_UNIT_TEST_DIR) resources ] ; File $(target) : $(source) ; if isExec in $(flags) { MODE on $(target) = $(EXEMODE) ; } MimeSet $(target) ; UnitTestDependency $(target) ; UNIT_TEST_RESOURCES on unittests += $(target) ; } rule UnitTestResources { # UnitTestResources : : ; # # supports same values as UnitTestResource local files = $(1) ; local sourceDir = $(2) ; local flags = $(3) ; for file in $(files) { LOCATE on $(file) = $(sourceDir) ; UnitTestResource $(file:G=tests!unittests!resources) : $(file) : $(flags) ; } } rule UnitTest { # UnitTest : : : ; # local target = $(1) ; local sources = $(2) ; local libraries = $(3) ; local resources = $(4) ; # define TEST_R5/TEST_HAIKU depending on the platform we build for if $(TARGET_PLATFORM) = libbe_test { ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ; # make the target depend on the installed libbe libraries Depends $(target) : libbe_test.so ; } else { ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ; } UseCppUnitObjectHeaders $(sources) ; MakeLocate $(target) : $(TARGET_UNIT_TEST_DIR) ; SimpleTest $(target) : $(sources) : $(libraries) libcppunit.so : $(resources) ; UnitTestDependency $(target) ; UNIT_TEST_EXECUTABLES on unittests += $(target) ; } rule TestObjects { # TestObjects ; # local sources = $(1) ; # define TEST_R5/TEST_HAIKU depending on the platform we build for if $(TARGET_PLATFORM) = libbe_test { ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ; } else { ObjectDefines $(2) : TEST_HAIKU TEST_OBOS ; } UseCppUnitObjectHeaders $(sources) ; Objects $(sources) ; } rule SimpleTest { # SimpleTest : : [ ] : [ ] ; # if TEST_DEBUG is defined, we turn on debugging if $(TEST_DEBUG) { DEBUG on $(1) [ FGristFiles $(2:S=$(SUFOBJ)) ] ?= 1 ; } Application $(1) : $(2) : $(3) : $(4) ; } rule BuildPlatformTest { # Usage BuildPlatformTest : ; local target = $(1) ; local sources = $(2) ; local relPath ; if [ FIsPrefix src tests : $(SUBDIR_TOKENS) ] { relPath = $(SUBDIR_TOKENS[3-]) ; } else { relPath = $(SUBDIR_TOKENS[2-]) ; } MakeLocate $(target) : [ FDirName $(HAIKU_TEST_DIR) $(relPath) ] ; BuildPlatformMain $(target) : $(sources) ; }