# © 2019 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#******************************************************************************
## Makefile.in for ICU - test/fuzzer

## Source directory information
srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = ../..

## All the flags and other definitions are included here.
include $(top_builddir)/icudefs.mk

## Build directory information
subdir = test/fuzzer

## Extra files to remove for 'make clean'
CLEANFILES = *~ $(DEPS) $(TESTXML)

## Target information
TARGET = all_fuzzers

BUILDDIR := $(CURR_SRCCODE_FULL_DIR)/../../
# Simplify the path for Unix
BUILDDIR := $(BUILDDIR:test/fuzzer/../../=)
# Simplify the path for Windows
BUILDDIR := $(BUILDDIR:test\\fuzzer/../../=)
# Simplify the path for Windows 98
BUILDDIR := $(BUILDDIR:TEST\\FUZZER/../../=)

CPPFLAGS += -I$(srcdir) -I$(top_srcdir)/common -I$(top_srcdir)/i18n -I$(top_srcdir)/tools/ctestfw -I$(top_srcdir)/io
DEFS += -D'U_TOPSRCDIR="$(top_srcdir)/"' -D'U_TOPBUILDDIR="$(BUILDDIR)"'
LIBS = $(LIBCTESTFW) $(LIBICUTOOLUTIL) $(LIBICUIO) $(LIBICUI18N) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)

FUZZER_TARGETS = \
		 ubidi_fuzzer \
		 break_iterator_fuzzer \
		 calendar_fuzzer collator_compare_fuzzer \
		 collator_rulebased_fuzzer \
		 converter_fuzzer date_format_fuzzer \
		 date_time_pattern_generator_fuzzer \
		 decimal_format_symbols_fuzzer \
		 dtfmtsym_fuzzer \
		 list_format_fuzzer locale_fuzzer \
		 locale_morph_fuzzer \
                 message_formatter_fuzzer \
		 normalizer2_fuzzer \
		 number_format_fuzzer \
		 number_formatter_fuzzer \
		 plurrule_fuzzer \
		 relative_date_time_formatter_fuzzer \
		 rule_based_break_iterator_fuzzer \
		 timezone_create_fuzzer \
		 time_zone_names_fuzzer \
		 ucasemap_fuzzer \
		 uloc_canonicalize_fuzzer \
		 uloc_for_language_tag_fuzzer \
		 uloc_get_name_fuzzer \
		 uloc_is_right_to_left_fuzzer \
		 uloc_open_keywords_fuzzer \
		 unicodeset_fuzzer \
		 unicode_string_codepage_create_fuzzer \
		 uprop_fuzzer \
		 uregex_open_fuzzer \
		 uregex_match_fuzzer \


OBJECTS = $(FUZZER_TARGETS:%=%.o)
OBJECTS += fuzzer_driver.o locale_util.o

DEPS = $(OBJECTS:.o=.d)

-include Makefile.local

## List of phony targets
.PHONY : all all-local install install-local clean clean-local	\
distclean distclean-local dist dist-local check check-local xcheck	\
check-exhaustive check-exhaustive-local all_fuzzers

## Clear suffix list
.SUFFIXES :

## List of standard targets
all: all-local
install: install-local
clean: clean-local
distclean : distclean-local
dist: dist-local
check: all check-local
xcheck: all xcheck-local

all-local: $(TARGET)

install-local:

dist-local:

clean-local:
	test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
	$(RMV) $(OBJECTS) $(TARGET) $(FUZZER_TARGETS)

distclean-local: clean-local
	$(RMV) Makefile

check-local: all-local
	# Create a dummy test case file with content "abc123"
	echo "abc123" > dummytestcase
	$(foreach trgt,$(FUZZER_TARGETS), echo $(trgt); $(INVOKE) ./$(trgt) dummytestcase -q \
            $(TEST_OUTPUT_OPTS) || exit \
            $(IOTEST_OPTS);)

xcheck-local: check-local

Makefile: $(srcdir)/Makefile.in  $(top_builddir)/config.status
	cd $(top_builddir) \
	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

all_fuzzers: $(FUZZER_TARGETS)

%_fuzzer: %_fuzzer.o fuzzer_driver.o locale_util.o
	$(LINK.cc) $(OUTOPT)$@ $^ $(LIBS)

ifeq (,$(MAKECMDGOALS))
-include $(DEPS)
else
ifneq ($(patsubst %clean,,$(MAKECMDGOALS)),)
ifneq ($(patsubst %install,,$(MAKECMDGOALS)),)
-include $(DEPS)
endif
endif
endif
