## pkgdataMakefile.in for ICU data
## Copyright (c) 2008-2009, International Business Machines Corporation and
## others. All Rights Reserved.

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

# So that you have $(top_builddir)/config.status
top_builddir = ..

## All the flags and other definitions are included here.
include $(top_builddir)/icudefs.mk

OUTPUTFILE=icupkg.inc
MIDDLE_SO_TARGET=

all : clean 
	@echo GENCCODE_ASSEMBLY_TYPE=$(GENCCODE_ASSEMBLY) >> $(OUTPUTFILE)
	@echo SO=$(SO) >> $(OUTPUTFILE)
	@echo SOBJ=$(SOBJ) >> $(OUTPUTFILE)
	@echo A=$(A) >> $(OUTPUTFILE)
	@echo LIBPREFIX=$(LIBPREFIX) >> $(OUTPUTFILE)
	@echo LIB_EXT_ORDER=$(FINAL_SO_TARGET) >> $(OUTPUTFILE)
	@echo COMPILE="$(COMPILE.c)" >> $(OUTPUTFILE)
	@echo LIBFLAGS="-I$(top_srcdir)/common -I$(top_builddir)/common $(SHAREDLIBCPPFLAGS) $(SHAREDLIBCFLAGS)" >> $(OUTPUTFILE)
	@echo GENLIB="$(SHLIB.c)" >> $(OUTPUTFILE)
	@echo LDICUDTFLAGS=$(LDFLAGSICUDT) >> $(OUTPUTFILE)
	@echo LD_SONAME=$(LD_SONAME) >> $(OUTPUTFILE)
	@echo RPATH_FLAGS=$(RPATH_FLAGS) >> $(OUTPUTFILE)
	@echo BIR_LDFLAGS=$(BIR_LDFLAGS) >> $(OUTPUTFILE)
	@echo AR=$(AR) >> $(OUTPUTFILE)
	@echo ARFLAGS=$(ARFLAGS) >> $(OUTPUTFILE)
	@echo RANLIB=$(RANLIB) >> $(OUTPUTFILE)
	@echo INSTALL_CMD=$(INSTALL_DATA) >> $(OUTPUTFILE)


clean : 
	$(RMV) $(OUTPUTFILE)

