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

## Build directory information
subdir = layout

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

## Target information

TARGET_STUBNAME=le

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

ifneq ($(ENABLE_SHARED),)
SO_TARGET = $(LIBICU)$(TARGET_STUBNAME)$(ICULIBSUFFIX).$(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)

CPPFLAGS += -I$(srcdir) -I$(top_builddir)/common -I$(srcdir)/unicode -I$(srcdir)/.. -I$(top_builddir)/common -I$(top_srcdir)/common $(LIBCPPFLAGS)
DEFS += -DU_LAYOUT_IMPLEMENTATION
LIBS = $(DEFAULT_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 \
CursiveAttachmentSubtables.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 \
ScriptAndLanguageTags.o \
SinglePositioningSubtables.o \
SingleSubstitutionSubtables.o \
SubstitutionLookups.o \
ValueRecords.o 

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

DEPS = $(OBJECTS:.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


