## Process this file with automake to produce Makefile.in
## Copyright (C) 2000-2004 Roger Leigh
##
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2, or (at your option)
## any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program.  If not, see <https://www.gnu.org/licenses/>.

## Process this file with automake to produce Makefile.in.

@SET_MAKE@

ACLOCAL_AMFLAGS = -I m4 -I m4local

include $(top_srcdir)/scripts/global.mk


## Variables

BUILT_SOURCES = src/xml/xmli18n-tmp.h
SUBDIRS = include src samples test po man doc scripts
DISTDIRS = m4 m4extra
CONFIGSUMMARYDIR=$(pkglibdir)/@GUTENPRINT_MAJOR_VERSION@.@GUTENPRINT_MINOR_VERSION@

docdir = $(datadir)/$(PACKAGE)/doc

src/xml/xmli18n-tmp.h:
	$(MAKE) -C src/xml

## Rules

# Libtool dependency
libtool: $(LIBTOOL_DEPS)
	cd $(srcdir); \
	$(SHELL) ./config.status --recheck

# Don't list ChangeLog as a dependency here because it forces network
# access, and because it usually runs as superuser rather than the user
# who normally builds Gutenprint.
# Don't list config.summary either because it's generated by configure.
install-data-local: NEWS AUTHORS COPYING README
	$(MKDIR_P) $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(srcdir)/NEWS $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(srcdir)/ChangeLog $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(srcdir)/AUTHORS $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(srcdir)/COPYING $(DESTDIR)$(docdir)
	$(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(docdir)
	$(MKDIR_P) $(DESTDIR)$(CONFIGSUMMARYDIR)
	$(INSTALL_DATA) config.summary $(DESTDIR)$(CONFIGSUMMARYDIR)

# git log is local, so it's fast enough that we don't need to
# engage in any subterfuge like we did with CVS.  It's really fast
# when we use a static file from the pre-Git era (since there are no
# live branches from that time) to save a lot of diffs.

# This isn't really the right spot for these checks.
# It's perfectly legal to update the change log even if NEWS
# or configure is out of date.  But it greatly reduces build spew
# to do it here, and manually updating the changelog is not a
# normal thing to do.
ChangeLog: dist-time-check dist-news-check
	if [ -d .git -a -f ChangeLog.pre-5.2.11 ] ; then \
	  $(MAKE) -C scripts mkgitlog; \
	  scripts/mkgitlog -i ChangeLog.pre-5.2.11 -r gutenprint-5_2_11 > ChangeLog; \
	fi

dist: src/xml/xmli18n-tmp.h

dist-time-check:
	@if [ "$(top_srcdir)/configure" -ot "$(top_srcdir)/configure.ac" ] ; then \
	  echo 1>&2; \
	  echo "****************************************************************" 1>&2; \
	  echo "*** configure is out of date (older than configure.ac) -- rerun ./autogen.sh first!" 1>&2; \
	  echo "****************************************************************" 1>&2; \
	  echo 1>&2; \
	  exit 1; \
	fi

# This would normally be done by AM_INIT_AUTOMAKE.  However,
# we don't want to do this if we're building a snapshot, because
# we don't want to update the NEWS file for each snapshot and
# there's no convenient way I've found to conditionalize the
# automake options.
dist-news-check:
	@if [ "$$STP_BUILD_SNAPSHOT" = "" ] ; then \
	  case "`sed 15q $(srcdir)/NEWS`" in \
	    *$(VERSION)*) : ;; \
	    *) \
	      echo 1>&2; \
	      echo "****************************************************************" 1>&2; \
	      echo "*** NEWS not updated to $(VERSION); not releasing" 1>&2; \
	      echo "****************************************************************" 1>&2; \
	      echo 1>&2; \
	      exit 1; \
	  esac ; \
	fi

git-version-stamp:
	if [ -d .git ] ; then scripts/gversion > /dev/null; fi

dist-hook: dist-time-check dist-news-check git-version-stamp
	for dir in $(DISTDIRS) ; do \
	  if test -d $(srcdir)/$$dir ; then \
	    mkdir $(distdir)/$$dir; \
	    for dirfile in $(srcdir)/$$dir/*; do \
	      if test -f $$dirfile ; then \
	        cp -p $$dirfile $(distdir)/$$dir; \
	      fi \
	    done \
	  fi \
	done
# Remove any backup files found in distdir
	$(FIND) $(distdir) -name '.*' -print | xargs $(RM) -rf
	$(FIND) $(distdir) -name '#*' -print | xargs $(RM) -rf
	$(FIND) $(distdir) -name '*~' -print | xargs $(RM) -rf

snapshot: scripts/gversion git-version-stamp
	$(MAKE) dist distdir=$(PACKAGE)-$(VERSION)-`date +"%Y%m%d%H%M%S"`

#################################################################
#			       TESTING				#
#################################################################

CPUS=`scripts/count-cpus`

# STP_PROFILE=full
MAKECHECK=STP_TEST_SUITE=1 /usr/bin/time $(MAKE) -k -s -j$(CPUS) DISTCHECK_CONFIGURE_FLAGS=NO_PKGCONFIG_PATHS=1 check
MAKEDISTCHECK=STP_TEST_SUITE=1 STP_TEST_DIST=1 /usr/bin/time $(MAKE) -k -s -j$(CPUS) DISTCHECK_CONFIGURE_FLAGS=NO_PKGCONFIG_PATHS=1 distcheck
MAKECHECK_PARALLEL=STP_PARALLEL=$(CPUS) $(MAKECHECK)
MAKEDISTCHECK_PARALLEL=STP_PARALLEL=$(CPUS) $(MAKEDISTCHECK)

# ...but we can't do
# AM_TESTS_ENVIRONMENT=STP_PARALLEL=$(shell scripts/count-cpus)
# because $(shell...) is (still only) a GNU extension, which we
# want to avoid.  And we can't do
# AM_TESTS_ENVIRONMENT=STP_PARALLEL=`scripts/count-cpus`
# because all expansions are lazy, so anything not in the root directory
# won't find the script.  And we can't even do
# AM_TESTS_ENVIRONMENT=STP_PARALLEL=`(at)TOP_BUILDDIR(at)scripts/count-cpus`
# because TOP_BUILDDIR itself is a relative path.  And, just to make it
# even more fun, we won't be able to do
# AM_TESTS_ENVIRONMENT!=
# syntax even if POSIX approves it because it's only present in GNU make 4,
# but Apple doesn't use that.

# check-%: is a GNU make extension, so we have to explicitly list the targets
# of interest.  Bah humbug.

CHECK_TARGETS=check-parallel check-minimal check-fast check-full
CHECK_VALGRIND_TARGETS=check-valgrind check-valgrind-minimal check-valgrind-fast

$(CHECK_TARGETS) $(CHECK_VALGRIND_TARGETS):
	STP_TEST_PROFILE=`echo $@ |sed -e s/check-// -e s/-/_/g -e s/parallel//` $(MAKECHECK_PARALLEL)


DISTCHECK_TARGETS=distcheck-parallel distcheck-minimal distcheck-fast distcheck-full
DISTCHECK_VALGRIND_TARGETS=distcheck-valgrind distcheck-valgrind-minimal distcheck-valgrind-fast

$(DISTCHECK_TARGETS) $(DISTCHECK_VALGRIND_TARGETS):
	STP_TEST_PROFILE=`echo $@ |sed -e s/distcheck-// -e s/-/_/g -e s/parallel//` $(MAKEDISTCHECK_PARALLEL)


checksums: scripts/count-cpus
	STP_PARALLEL=$(CPUS) $(MAKE) -j$(CPUS) -C src/testpattern checksums-release

build-release: scripts/build-release scripts/count-cpus
	STP_PARALLEL=$(CPUS) /usr/bin/time scripts/build-release

sanity: scripts/build-release scripts/count-cpus
	STP_PARALLEL=$(CPUS) /usr/bin/time scripts/build-release preflight check_git check_git_builds

## Clean

CLEANMFOUR = \
	m4/*

CLEANPO = \
	po/ChangeLog \
	po/gutenprint.pot \
	po/Makefile.in.in \
	po/boldquot.sed \
	po/en@boldquot.header \
	po/en@quot.header \
	po/insert-header.sin \
	po/Makevars.template \
	po/quot.sed \
	po/remove-potcdate.sin \
	po/Rules-quot \
	po/*~

CLEANFILES = .noupdate

MAINTAINERCLEANFILES = \
	ABOUT-NLS \
	ChangeLog \
	INSTALL \
	aclocal.m4 \
	config.h.in \
	config.h.in~ \
	config.rpath \
	configure \
	git-version-stamp \
	Makefile.in \
	stamp-h.in \
	stamp-h1.in \
	stamp-h2.in \
	stamp-h3.in \
	stamp-h4.in \
	$(CLEANMFOUR) \
	$(CLEANPO)

distclean-local:
	-rm -f config.summary

uninstall-local:
	-rm -f $(DESTDIR)$(CONFIGSUMMARYDIR)/config.summary

EXTRA_DIST = autogen.sh README.package git-version-stamp

.PHONY: deb html install-cups install-gimp snapshot ChangeLog Phony dist-time-check git-version-stamp
