## Makefile.in for ICU - tools/makeconv
## Copyright (c) 1999-2003, International Business Machines Corporation and
## others. All Rights Reserved.
## Stephen F. Booth

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

top_builddir = ../..

include $(top_builddir)/icudefs.mk

##

SECTION = 1

MANX_FILES = $(TARGET:$(EXEEXT)=).$(SECTION)

GENERATED_MAN_FILES = $(TARGET:$(EXEEXT)=).$(SECTION)

ALL_MAN_FILES = $(MANX_FILES)


## 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$(EXEEXT)

CPPFLAGS += -I$(top_builddir)/common -I$(top_srcdir)/common -I$(srcdir)/../toolutil
LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) $(DEFAULT_LIBS) $(LIB_M)

OBJECTS = makeconv.o ucnvstat.o genmbcs.o

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


## 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) $(ALL_MAN_FILES)

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

dist-local:

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

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

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

check-local: all-local


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

$(TARGET): $(OBJECTS)
	$(LINK.cc) $(OUTOPT)$@ $^ $(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


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