# Copyright (C) 2016 and later: Unicode, Inc. and others.
# License & terms of use: http://www.unicode.org/copyright.html
#
# Copyright (c) 2001-2004 IBM, Inc. and others
# conversion sample code


# Usage:
#  - configure and build ICU [see the docs] .. use "--prefix=" something
#     (I  used --prefix=/home/srl/III )
# 
#  - do 'make install' of icu 
#
#  - set the variable ICU_PREFIX to point at $(prefix)
#    (will look for $(prefix)/lib/icu/Makefile.inc )
# 
#  - set the variable ICU_LEGACY  (read the README)
#   ( Will look for ICU_LEGACY/include/unicode/ucol.h )
#  
#  - do 'make' in this directory

#ICU_PREFIX=/home/weiv/build/current
#ICU_LEGACY = /home/weiv/build/icu-1-8-1

LEGACY_INCLUDE = $(ICU_LEGACY)/include

ICU_INC=$(ICU_PREFIX)/lib/icu/Makefile.inc
ICUPATH=

-include $(ICU_INC)

# Name of your target
TARGET=legacy

# All object files (C or C++)
OBJECTS=legacy.o newcol.o oldcol.o

CLEANFILES=*~ $(TARGET).out

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

# turn on super warnings
#CPPFLAGS += -Wall

all: $(TARGET) $(ICU_INC)

.PHONY: all clean distclean check report

oldcol.o : oldcol.cpp $(LEGACY_INCLUDE)/unicode/ucol.h
	$(CXX) -I$(LEGACY_INCLUDE) $(DEFS) $(CPPFLAGS) $(CXXFLAGS) -c oldcol.cpp

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

# Can change this to LINK.c if it is a C only program
# Can add more libraries here. 
$(TARGET): $(OBJECTS)
	$(LINK.cc) -o $@ $^ $(ICULIBS) $(ICU_PREFIX)/lib/libicuuc.so.18 $(ICU_PREFIX)/lib/libicui18n.so.18 

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

# Make report: creates a 'report file' with both source and sample run
report: $(TARGET).report

$(TARGET).report: check $(TARGET).cpp
	more $(TARGET).cpp $(TARGET).out > $@

$(ICU_INC):
	@echo ICU_PREFIX variable is not set correctly
	@echo "Please read the directions at the top of this file (Makefile)"
	@echo "And the README"
	@echo "Can't open $(ICU_INC)"
	@false

$(LEGACY_INCLUDE)/unicode/ucol.h:
	@echo ICU_LEGACY variable is not set correctly.
	@echo "Please read the directions at the top of this file (Makefile)"
	@echo "And the README"
	@echo "Can't open $@"
	@false

ifneq ($(MAKECMDGOALS),distclean)
-include $(DEPS)
endif
