## 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
DIST_SUBDIRS = $(SUBDIRS) build win32

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 += 			\
	ChangeLog.pre-2-20	\
	ChangeLog.pre-2-18	\
	ChangeLog.pre-2-16	\
	ChangeLog.pre-2-14	\
	ChangeLog.pre-2-12	\
	ChangeLog.pre-2-10	\
	ChangeLog.pre-2-8	\
	ChangeLog.pre-2-6	\
	ChangeLog.pre-2-4	\
	ChangeLog.pre-2-2	\
	ChangeLog.pre-2-0	\
	ChangeLog.pre-1-2	\
	glib-zip.in		\
	NEWS.pre-1-3		\
	acglib.m4		\
	sanity_check		\
	README.commits		\
	README.in		\
	README.rationale	\
	INSTALL.in		\
	README.win32		\
	HACKING			\
	autogen.sh		\
	glib.mk			\
	glib-tap.mk		\
	tap-driver.sh		\
	tap-test		\
	msvc_recommended_pragmas.h \
	config.h.win32.in	\
        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 = \
	config.h.meson \
	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/gdbus-2.0/codegen/meson.build \
	gio/inotify/meson.build \
	gio/kqueue/meson.build \
	gio/meson.build \
	gio/tests/meson.build \
	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 += 		\
	README			\
	INSTALL			\
	ChangeLog		\
	config.h.win32		\
	$(NULL)

CONFIGURE_DEPENDENCIES = acglib.m4

ChangeLog:
	$(AM_V_GEN) if test -d "$(srcdir)/.git"; then \
	  (GIT_DIR=$(top_srcdir)/.git ./missing --run git log GLIB_2_20_0^^.. --stat) | fmt --split-only > $@.tmp \
	  && mv -f $@.tmp $@ \
	  || ($(RM) $@.tmp; \
	      echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
	      (test -f $@ || echo git-log is required to generate this file >> $@)); \
	else \
	  test -f $@ || \
	  (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
	  echo A git checkout and git-log is required to generate this file >> $@); \
	fi

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

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
