## Makefile.in for ICU - tools/makeconv
## Stephen F. Booth

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

top_builddir = ../..

include $(top_builddir)/icudefs.mk

## Platform-specific setup
include @platform_make_fragment@

##

SECTION = 8

MANX_FILES = $(TARGET).$(SECTION)

GENERATED_MAN_FILES = $(TARGET).$(SECTION)

ALL_MAN_FILES = $(MANX_FILES)

## List of converter tables to build
include $(srcdir)/ucmfiles.mk
-include $(srcdir)/ucmlocal.mk

## Build directory information
subdir = tools/makeconv

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

## Target information
TARGET = makeconv

ENABLE_STATIC = @ENABLE_STATIC@

ifneq ($(ENABLE_STATIC),)
LINK = $(LINK.cc)
else
LINK = $(LINK.c)
endif

DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
ENABLE_RPATH = @ENABLE_RPATH@
ifeq ($(ENABLE_RPATH),YES)
RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir)
endif
LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS)
INVOKE = $(LDLIBRARYPATH_ENVVAR)=$(top_builddir)/common:$(top_builddir)/tools/toolutil:$$$(LDLIBRARYPATH_ENVVAR)
LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) @LIBS@ @LIB_M@

OBJECTS = makeconv.o ucnvstat.o genmbcs.o newconv.o

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

ALL_UCM = $(UCM_SOURCE) $(UCM_SOURCE_LOCAL)
UCM_FILES = $(ALL_UCM:%=$(top_srcdir)/../data/%)
CNV_FILES = $(ALL_UCM:%.ucm=$(top_builddir)/data/%.cnv)

TEST_UCM_SOURCE= test1.ucm test3.ucm test4.ucm
TEST_UCM_FILES=$(TEST_UCM_SOURCE:%=$(top_srcdir)/test/testdata/%)
TEST_CNV_FILES=$(TEST_UCM_SOURCE:%.ucm=$(top_builddir)/data/%.cnv)

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

## 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

all-local: $(TARGET) $(CNV_FILES) $(TEST_CNV_FILES) $(ALL_MAN_FILES)

install-local: all-local install-man
	$(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
	$(INSTALL) $(TARGET) $(DESTDIR)$(sbindir)/$(TARGET)
#	$(MKINSTALLDIRS) $(DESTDIR)$(pkglibdir)/$(VERSION)
#	@list='$(notdir $(CNV_FILES)) convrtrs.txt'; for file in $$list; do \
#		echo $(INSTALL_DATA) $(top_builddir)/data/$$file $(DESTDIR)$(pkglibdir)/$(VERSION)/$$file; \
#		$(INSTALL_DATA) $(top_builddir)/data/$$file $(DESTDIR)$(pkglibdir)/$(VERSION)/$$file; \
#	done

dist-local:

rebuild: $(TARGET)
	-$(RMV) $(CNV_FILES) $(TEST_CNV_FILES)
	$(MAKE) all-local

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

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

check-local: all-local

invokation:
	$(INVOKE) $(COMMAND)

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

$(TARGET): $(OBJECTS)
	$(LINK) -o $@ $^ $(LIBS)

install-man: install-manx
install-manx: $(MANX_FILES)
	$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man$(SECTION)
	$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man$(SECTION)

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

# Rule to build a compiled cnv file
$(top_builddir)/data/test%.cnv : $(top_srcdir)/test/testdata/test%.ucm $(TARGET)
	@echo $(ECHO_N) "$< -> $(ECHO_C)"
	@$(INVOKE) ./$(TARGET) -d $(top_builddir)/data $<

$(top_builddir)/data/%.cnv : $(top_srcdir)/../data/%.ucm $(TARGET)
	@echo $(ECHO_N) "$< -> $(ECHO_C)"
	@$(INVOKE) ./$(TARGET) -d $(top_builddir)/data $<

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