## Makefile.in for ICU - layout

SO_TARGET_VERSION = @LIB_VERSION@
SO_TARGET_VERSION_MAJOR = @LIB_VERSION_MAJOR@

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

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

## Target information

ENABLE_STATIC = @ENABLE_STATIC@
ENABLE_SHARED = @ENABLE_SHARED@

TARGET_STUBNAME=layout

ifneq ($(ENABLE_STATIC),)
TARGET = $(LIBICU)$(TARGET_STUBNAME).a
RANLIB = @RANLIB@
endif

ifneq ($(ENABLE_SHARED),)
SO_TARGET = $(LIBICU)$(TARGET_STUBNAME).$(SO)
ALL_SO_TARGETS = $(SO_TARGET) $(MIDDLE_SO_TARGET) $(FINAL_SO_TARGET)
endif

ALL_TARGETS = $(TARGET) $(ALL_SO_TARGETS)

DYNAMICCPPFLAGS = $(SHAREDLIBCPPFLAGS)
DYNAMICCFLAGS = $(SHAREDLIBCFLAGS)
DYNAMICCXXFLAGS = $(SHAREDLIBCXXFLAGS)

DEFS = @DEFS@
CPPFLAGS = @CPPFLAGS@ $(LIBCPPFLAGS) -I$(srcdir) -I$(top_builddir)/common -I$(srcdir)/unicode -I$(srcdir)/.. -I$(top_builddir)/common -I$(top_srcdir)/common
CFLAGS = @CFLAGS@
CXXFLAGS = @CXXFLAGS@
ENABLE_RPATH = @ENABLE_RPATH@
ifeq ($(ENABLE_RPATH),YES)
RPATHLDFLAGS = $(LD_RPATH)$(LD_RPATH_PRE)$(libdir)
endif
LDFLAGS = @LDFLAGS@ $(RPATHLDFLAGS)
#LIBS = $(LIBICUUC) @LIBS@
LIBS= @LIBS@


OBJECTS =  loengine.o \
OpenTypeLayoutEngine.o \
ThaiLayoutEngine.o \
ThaiShaping.o \
ThaiStateTables.o \
ArabicLayoutEngine.o \
GXLayoutEngine.o \
IndicLayoutEngine.o \
LayoutEngine.o \
ContextualGlyphSubstProc.o \
IndicRearrangementProcessor.o \
LigatureSubstProc.o \
LookupTables.o \
MorphTables.o \
NonContextualGlyphSubstProc.o \
SegmentArrayProcessor.o \
SegmentSingleProcessor.o \
SimpleArrayProcessor.o \
SingleTableProcessor.o \
StateTableProcessor.o \
SubtableProcessor.o \
TrimmedArrayProcessor.o \
AlternateSubstSubtables.o \
AnchorTables.o \
ArabicLigatureData.o \
ArabicShaping.o \
ClassDefinitionTables.o \
ContextualSubstSubtables.o \
CoverageTables.o \
DeviceTables.o \
Features.o \
GDEFMarkFilter.o \
GlyphDefinitionTables.o \
GlyphIterator.o \
GlyphPosnLookupProc.o \
GlyphPositioningTables.o \
GlyphSubstLookupProc.o \
GlyphSubstitutionTables.o \
HebrewLigatureData.o \
HebrewShaping.o \
IndicClassTables.o \
IndicReordering.o \
LigatureSubstSubtables.o \
LookupProcessor.o \
Lookups.o \
MarkArrays.o \
MarkToBasePosnSubtables.o \
MarkToLigaturePosnSubtables.o \
MarkToMarkPosnSubtables.o \
MultipleSubstSubtables.o \
OpenTypeUtilities.o \
PairPositioningSubtables.o \
ScriptAndLanguage.o \
SinglePositioningSubtables.o \
SingleSubstitutionSubtables.o \
SubstitutionLookups.o \
ValueRecords.o 

STATIC_OBJECTS = $(OBJECTS:.o=.$(STATIC_O))

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

## Header files to install
HEADERS= $(srcdir)/*LayoutEngine.h $(srcdir)/LE*.h
LOHEADERS= $(srcdir)/unicode/loengine.h

## List of phony targets
.PHONY : all all-local install install-local clean clean-local	\
distclean distclean-local install-library install-headers 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: $(ALL_TARGETS)

install-local: install-headers install-library 

install-library: all-local
	$(MKINSTALLDIRS) $(DESTDIR)$(libdir)
ifneq ($(ENABLE_STATIC),)
	$(INSTALL-L) $(TARGET) $(DESTDIR)$(libdir)/$(TARGET)
endif
ifneq ($(ENABLE_SHARED),)
	$(INSTALL-L) $(FINAL_SO_TARGET) $(DESTDIR)$(libdir)/$(FINAL_SO_TARGET)
ifneq ($(FINAL_SO_TARGET),$(SO_TARGET))
	cd $(DESTDIR)$(libdir) && $(RM) $(MIDDLE_SO_TARGET) && ln -s $(FINAL_SO_TARGET) $(MIDDLE_SO_TARGET)
	cd $(DESTDIR)$(libdir) && $(RM) $(SO_TARGET) && ln -s $(FINAL_SO_TARGET) $(SO_TARGET)
endif
endif

install-headers:
	$(MKINSTALLDIRS) $(DESTDIR)$(includedir)/layout
	@for file in $(HEADERS); do \
	 echo " $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout"; \
	 $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/layout || exit; \
	done
	@for file in $(LOHEADERS); do \
	 echo " $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode"; \
	 $(INSTALL_DATA) $$file $(DESTDIR)$(includedir)/unicode || exit; \
	done

dist-local:

clean-local:
	test -z "$(CLEANFILES)" || $(RMV) $(CLEANFILES)
	$(RMV) $(OBJECTS) $(ALL_TARGETS)
#	$(RMV) $(OBJECTS) $(STATIC_OBJECTS) $(ALL_TARGETS)

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

check-local:

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

ifneq ($(ENABLE_STATIC),)
$(TARGET): $(TARGET)($(STATIC_OBJECTS))
	$(RANLIB) $@
endif

ifneq ($(ENABLE_SHARED),)
$(FINAL_SO_TARGET): $(OBJECTS)
	$(SHLIB.cc) $(LD_SONAME) -o $@ $^ $(LIBS)
endif

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


