noinst_LTLIBRARIES = libgoo.la

if ENABLE_XPDF_HEADERS

poppler_goo_includedir = $(includedir)/poppler/goo
poppler_goo_include_HEADERS =			\
	GooHash.h				\
	GooList.h				\
	GooTimer.h				\
	GooMutex.h				\
	GooString.h				\
	gtypes.h				\
	gmem.h					\
	gfile.h					\
	FixedPoint.h				\
	PNGWriter.h				\
	JpegWriter.h				\
	TiffWriter.h				\
	ImgWriter.h				\
	GooLikely.h				\
	gstrtod.h

endif

if BUILD_LIBJPEG
libjpeg_includes = $(LIBJPEG_CFLAGS)
endif

if BUILD_LIBTIFF
libtiff_includes = $(LIBTIFF_CFLAGS)
endif

if BUILD_LIBOPENJPEG
libjpeg2000_includes = $(LIBOPENJPEG_CFLAGS)
endif

if BUILD_LIBPNG
libpng_includes = $(LIBPNG_CFLAGS)
endif

INCLUDES =					\
	-I$(top_srcdir)				\
	$(libjpeg_includes)                     \
	$(libtiff_includes)                     \
	$(libjpeg2000_includes)                 \
	$(libpng_includes)

libgoo_la_SOURCES =				\
	gfile.cc				\
	gmempp.cc				\
	GooHash.cc				\
	GooList.cc				\
	GooTimer.cc				\
	GooString.cc				\
	gmem.cc					\
	FixedPoint.cc				\
	PNGWriter.cc				\
	JpegWriter.cc				\
	TiffWriter.cc				\
	ImgWriter.cc				\
	gtypes_p.h				\
	gstrtod.cc
