## Process this file with automake to produce Makefile.in
include $(top_srcdir)/glib.mk

# http://people.gnome.org/~walters/docs/build-api.txt
.buildapi-allow-builddir:

ACLOCAL_AMFLAGS = -I m4macros ${ACLOCAL_FLAGS}

SUBDIRS = . m4macros glib gmodule gthread gobject gio po docs tests subprojects
DIST_SUBDIRS = $(SUBDIRS) build

bin_SCRIPTS = glib-gettextize

if OS_LINUX
TESTS += check-abis.sh
endif

AM_CPPFLAGS = 					\
	-DG_LOG_DOMAIN=g_log_domain_glib 	\
	@GLIB_DEBUG_FLAGS@ 			\
	-DG_DISABLE_DEPRECATED 			\
	-DGLIB_COMPILATION

EXTRA_DIST += 			\
	NEWS.pre-1-3		\
	acglib.m4		\
	sanity_check		\
	CONTRIBUTING.md		\
	README.md		\
	README.rationale	\
	INSTALL.in		\
	README.win32		\
	HACKING			\
	autogen.sh		\
	glib.mk			\
	glib-tap.mk		\
	tap-driver.sh		\
	tap-test		\
	msvc_recommended_pragmas.h \
        po/po2tbl.sed.in        \
	glib-2.0.pc.in 		\
	gobject-2.0.pc.in 	\
	gmodule-2.0.pc.in	\
	gmodule-export-2.0.pc.in	\
	gmodule-no-export-2.0.pc.in	\
	gthread-2.0.pc.in	\
	gio-2.0.pc.in		\
	gio-unix-2.0.pc.in	\
	gio-windows-2.0.pc.in	\
	check-abis.sh		\
	gtk-doc.make		\
	$(NULL)

meson_build_files = \
	meson_options.txt \
	meson.build \
	docs/reference/gio/meson.build \
	docs/reference/gio/xml/gtkdocentities.ent.in \
	docs/reference/gio/xml/meson.build \
	docs/reference/glib/meson.build \
	docs/reference/glib/xml/gtkdocentities.ent.in \
	docs/reference/glib/xml/meson.build \
	docs/reference/gobject/meson.build \
	docs/reference/gobject/xml/gtkdocentities.ent.in \
	docs/reference/gobject/xml/meson.build \
	gio/data-to-c.py \
	gio/fam/gfamfilemonitor.map \
	gio/fam/meson.build \
	gio/gdbus-2.0/codegen/meson.build \
	gio/gio-querymodules-wrapper.py \
	gio/inotify/meson.build \
	gio/kqueue/meson.build \
	gio/meson.build \
	gio/tests/meson.build \
	gio/tests/gengiotypefuncs.py \
	gio/tests/modules/meson.build \
	gio/tests/gdbus-object-manager-example/meson.build \
	gio/tests/de/LC_MESSAGES/meson.build \
	gio/win32/meson.build \
	gio/xdgmime/meson.build \
	glib/glibconfig.h.in \
	glib/gnulib/meson.build \
	glib/libcharset/meson.build \
	glib/meson.build \
	glib/pcre/meson.build \
	glib/tests/meson.build \
	gmodule/meson.build \
	gobject/meson.build \
	gobject/tests/meson.build \
	gthread/meson.build \
	po/meson.build \
	tests/refcount/meson.build \
	tests/meson.build \
	tests/gobject/meson.build \
	$()

EXTRA_DIST += $(meson_build_files)

# These may be in the builddir too
BUILT_EXTRA_DIST += 		\
	INSTALL			\
	$(NULL)

CONFIGURE_DEPENDENCIES = acglib.m4

pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = glib-2.0.pc gobject-2.0.pc gmodule-2.0.pc gmodule-export-2.0.pc gmodule-no-export-2.0.pc gthread-2.0.pc gio-2.0.pc

if OS_UNIX
pkgconfig_DATA += gio-unix-2.0.pc
endif

if OS_WIN32
pkgconfig_DATA += gio-windows-2.0.pc
endif

$(pkgconfig_DATA): config.status

# Install Valgrind suppression file
valgrinddir = $(datadir)/glib-2.0/valgrind
dist_valgrind_DATA = glib.supp

# build documentation when doing distcheck
AM_DISTCHECK_CONFIGURE_FLAGS = --enable-debug --enable-gtk-doc --enable-man --disable-maintainer-mode

DISTCLEANFILES += config.lt

distclean-local: lcov-clean
	if test $(srcdir) = .; then :; else \
	    rm -f $(BUILT_EXTRA_DIST); \
	fi

.PHONY: files release sanity snapshot

files:
	@files=`ls $(DISTFILES) 2> /dev/null `; for p in $$files; do \
	  echo $$p; \
	done

release:
	rm -rf .deps */.deps
	cd docs && make glib.html
	$(MAKE) distcheck

sanity:
	./sanity_check $(VERSION)

snapshot:
	$(MAKE) dist distdir=$(PACKAGE)-snap`date +"%Y%m%d"`

snapcheck:
	$(MAKE) distcheck distdir=$(PACKAGE)-snap`date +"%Y%m%d"`

dist-hook: $(BUILT_EXTRA_DIST)
	files='$(BUILT_EXTRA_DIST)'; \
	for f in $$files; do \
	  if test -f $$f; then d=.; else d=$(srcdir); fi; \
	  rm -f $(distdir)/$$f && cp $$d/$$f $(distdir) || exit 1; done
