# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2000-2012 IBM, Inc. and others
# udata sample code
# Usage:
#  - configure, build, install ICU
#  - ensure that 'icu-config' is in the PATH (PREFIX/bin/icu-config) 
#  - if ICU is not built relative to this directory,
#      set the variable ICU_PATH to the 'icu' directory
#       (i.e.  /foo/icu  )
#  - do 'make' in this directory


# Include ICU standard definitions
include ../defs.mk

# look for the ICU_PATH variable, guess if not there
ICU_DEFAULT_PATH=../../..

ifeq ($(strip $(ICU_PATH)),)
  ICU_PATH=$(ICU_DEFAULT_PATH)
endif

# Name of your target
TARGET1=reader
TARGET2=writer

# All object files (C or C++)
OBJECTS1=reader.o
OBJECTS2=writer.o
OBJECTS=$(OBJECTS1) $(OBJECTS2)

CLEANFILES=*~ $(TARGET).out $(TARGET1).out $(TARGET2).out

all: $(TARGET1) $(TARGET2)

# The following lines are to make sure ICU_PATH is set properly.
writer.o: $(ICU_PATH)/source/tools/toolutil/uoptions.h

$(ICU_PATH)/source/tools/toolutil/uoptions.h:
	@echo
	@echo "*** Please read the directions at the top of this file (Makefile)"
	@echo "*** Can't open $@ - check ICU_PATH"
	@echo
	@false

# Only the writer needs these, actually.
CPPFLAGS += -I$(ICU_PATH)/source/tools/toolutil
LDFLAGS += -L$(ICU_PATH)/source/tools/toolutil $(shell icu-config --ldflags-toolutil)


.PHONY: all clean distclean check report

distclean clean:
	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
	-$(RMV) $(OBJECTS) $(TARGET1) $(TARGET2)

# Can change this to LINK.c if it is a C only program
# Can add more libraries here. 
$(TARGET1): $(OBJECTS1)
	$(CXX) -o $@ $(LDFLAGS)

$(TARGET2): $(OBJECTS2)
	$(CXX) -o $@ $(LDFLAGS) -licui18n -licuuc

# Make check: simply runs the sample, logged to a file
check: $(TARGET1) $(TARGET2)
	$(INVOKE) ./$(TARGET2) | tee $(TARGET2).out
	$(INVOKE) ./$(TARGET1) | tee $(TARGET1).out


