## Makefile.in for ICU - tools/gencnval
## Copyright (c) 1999-2000, International Business Machines Corporation and
## others. All Rights Reserved.
## Steven R. Loomi

## Install directory information
srcdir = @srcdir@
top_srcdir = @top_srcdir@

top_builddir = ../..

include $(top_builddir)/icudefs.mk

## Platform-specific setup
include @platform_make_fragment@

## Build directory information
subdir = tools/gencnval

##

SECTION = 8

MANX_FILES = $(TARGET).$(SECTION)
MAN5_FILES = convrtrs.txt.5 $(srcdir)/cnvalias.dat.5

GENERATED_MAN_FILES = $(TARGET).$(SECTION) convrtrs.txt.5

ALL_MAN_FILES = $(MANX_FILES) $(MAN5_FILES)

ICUDATADIR=$(top_builddir)/data/
CONVRTRSFILE=$(top_srcdir)/../data/convrtrs.txt

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

## Target information
TARGET = gencnval

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)
LIBS = $(LIBICUTOOLUTIL) $(LIBICUUC) @LIBS@ @LIB_M@

OBJECTS = gencnval.o

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


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

## 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) build-data

install-local: all-local build-data install-man
	$(MKINSTALLDIRS) $(DESTDIR)$(sbindir)
	$(INSTALL) $(TARGET) $(DESTDIR)$(sbindir)/$(TARGET)


dist-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) -o $@ $^ $(LIBS) 

# man page
install-man: install-man5 install-manx
install-man5: $(MAN5_FILES)
	$(MKINSTALLDIRS) $(DESTDIR)$(mandir)/man5
	$(INSTALL_DATA) $? $(DESTDIR)$(mandir)/man5
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
%.5: $(srcdir)/%.5.in
	cd $(top_builddir) \
	 && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status

# only on linux probably ?
$(TARGET).ps: $(TARGET).$(SECTION)
	groff -man < $< > $@

$(TARGET).pdf: $(TARGET).ps
	ps2pdf $< $@

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

