# Copyright (C) 2001-2009 Joe Orton <joe@manyfish.co.uk>
# Copyright (C) 1994, 1995-8, 1999, 2000 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

# libtool bits mostly stolen from libxml and libtool/demo

SHELL = @SHELL@

prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
mandir = @mandir@
man1dir = $(mandir)/man1
man3dir = $(mandir)/man3
datarootdir = @datarootdir@
datadir = @datadir@
docdir = $(datadir)/doc/neon-@NEON_VERSION@
includedir = @includedir@
neonincludes = $(includedir)/neon
pkgconfigdir = $(libdir)/pkgconfig
localedir = $(datadir)/locale

top_srcdir = @top_srcdir@
top_builddir = .
srcdir = @srcdir@
VPATH = @srcdir@

@SET_MAKE@

LDFLAGS = -L. @LDFLAGS@
LIBS = @LIBS@
CC = @CC@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL = @INSTALL@
transform = @program_transform_name@

LIBTOOL = @LIBTOOL@
XMLTO = xmlto
GCOV = gcov
XGETTEXT_OPTS = --keyword=_ --keyword=N_ --msgid-bugs-address=https://github.com/notroj/neon \
		--default-domain=neon --flag ne_print_request_header:3:c-format \
		--flag ne_snprintf:3:c-format --flag ne_vsnprintf:3:c-format \
		--flag ne_set_error:2:c-format
POTFILE = $(top_srcdir)/po/neon.pot
XGETTEXT = xgettext
MSGFMT = msgfmt
MSGMERGE = msgmerge

LINGUAS = @ALL_LINGUAS@

# The headers to distribute - making up the public interface of neon
DIST_HEADERS = ne_request.h ne_session.h ne_utils.h ne_uri.h ne_socket.h  \
	ne_basic.h ne_207.h ne_props.h ne_xml.h ne_dates.h ne_string.h	  \
	ne_defs.h ne_locks.h ne_alloc.h ne_md5.h ne_i18n.h ne_redirect.h  \
	ne_auth.h ne_compress.h ne_acl.h ne_ssl.h ne_xmlreq.h ne_pkcs11.h \
	ne_acl3744.h

all: subdirs

check: subdirs
	@cd test && $(MAKE) check

# Useful for doing coverage analysis; use e.g.:
#   make TESTS=string-tests MODULE=ne_string.c cover
cover: subdirs
	@rm -f src/*.*da test/common/*.*da test/*.*da
	@cd test && $(MAKE) check
	@cd src && $(GCOV) -cb $(MODULE)

# as per 'cover' target; prints list of functions without 100% coverage
uncover: subdirs
	@rm -f src/*.*da test/common/*.*da test/*.*da
	@cd test && $(MAKE) check
	@cd src && $(GCOV) -cb $(MODULE)
	@grep ^function src/$(MODULE).gcov | grep -v 'executed 100' | sort -nr -k 9,9

subdirs:
	@cd src && $(MAKE)

# Regenerating the docs requires xmlto to be installed, this target is
# executed when release tarballs are generated.
docs: docs-man docs-html

docs-man:
	rm -rf doc/man; mkdir -p doc/man
	$(XMLTO) -o `pwd`/doc/man -x $(srcdir)/doc/man.xsl man $(srcdir)/doc/manual.xml

docs-pdf:
	$(XMLTO) -o `pwd`/doc pdf $(srcdir)/doc/manual.xml

docs-ps:
	$(XMLTO) -o `pwd`/doc ps $(srcdir)/doc/manual.xml

docs-html:
	test -d doc/html && rm -rf doc/html || true
	mkdir -p doc/html
	$(XMLTO) -o `pwd`/doc/html -x $(srcdir)/doc/html.xsl html $(srcdir)/doc/manual.xml

# Validate the manual source
docs-valid:
	xmllint --noout --valid $(srcdir)/doc/manual.xml

clean:
	@cd src && $(MAKE) clean
	@cd test && $(MAKE) clean

distclean: clean
	rm -rf Makefile config.h neon.pc config.status src/Makefile libtool config.log config.cache neon-config autom4te*.cache test/Makefile

again: clean

Makefile: $(srcdir)/Makefile.in
	@./config.status Makefile

neon-config: $(srcdir)/neon-config.in
	@./config.status neon-config

install-docs: install-man install-html

install-html:
	$(INSTALL) -d $(DESTDIR)$(docdir)/html
	for d in doc/html/*.html; do \
		$(INSTALL_DATA) $$d $(DESTDIR)$(docdir)/html; \
	done

install-man:
	$(INSTALL) -d $(DESTDIR)$(man3dir)
	$(INSTALL) -d $(DESTDIR)$(man1dir)
	for m in doc/man/*.3; do \
	 $(INSTALL_DATA) $$m $(DESTDIR)$(man3dir); done
	for m in doc/man/*.1; do \
	 $(INSTALL_DATA) $$m $(DESTDIR)$(man1dir); done

install: install-@ALLOW_INSTALL@

install-memleak:
	@echo "ERROR: The neon internal memory leak checking code is for testing"
	@echo "ERROR: purposes only; this copy of neon must not be installed."
	@false

install-yes: install-lib install-headers install-config install-docs install-nls

# libtool does all the necessary magic here
install-lib: subdirs
	$(INSTALL) -d $(DESTDIR)$(libdir)
	$(LIBTOOL) --mode=install $(INSTALL) src/libneon.la \
		$(DESTDIR)$(libdir)/libneon.la

install-headers:
	$(INSTALL) -d $(DESTDIR)$(neonincludes)
	@for h in $(DIST_HEADERS); do \
		echo Installing $$h into $(DESTDIR)$(neonincludes); \
		$(INSTALL_DATA) $(srcdir)/src/$$h $(DESTDIR)$(neonincludes)/$$h \
			|| exit 1; \
	done

install-config: neon-config neon.pc
	$(INSTALL) -d $(DESTDIR)$(bindir)
	@echo Installing neon-config into $(DESTDIR)$(bindir)
	@$(INSTALL_SCRIPT) neon-config \
		$(DESTDIR)$(bindir)/`echo neon-config|sed '$(transform)'`
	$(INSTALL) -d $(DESTDIR)$(pkgconfigdir)
	$(INSTALL_DATA) neon.pc $(DESTDIR)$(pkgconfigdir)/neon.pc

install-tests: install-lib
	@cd test && make install

install-nls: install-nls-@NE_FLAG_I18N@

install-nls-no:
	@echo NLS not enabled.

install-nls-yes:
	@for f in $(LINGUAS); do \
	 $(INSTALL) -d $(DESTDIR)$(localedir)/$$f/LC_MESSAGES; \
	 $(INSTALL_DATA) $(srcdir)/po/$$f.gmo $(DESTDIR)$(localedir)/$$f/LC_MESSAGES/neon.mo; \
	done

ChangeLog:
	svn log > $@

update-po:
	@xgettext $(XGETTEXT_OPTS) $(top_srcdir)/src/ne*.c -o $(POTFILE)
	@for f in $(LINGUAS); do \
	 echo "> Updating \"$$f\" catalog:"; \
	 $(MSGMERGE) --update $(top_srcdir)/po/$$f.po $(POTFILE); \
	 $(MSGFMT) --output /dev/null --check-format $(top_srcdir)/po/$$f.po || exit 1; \
	done

compile-gmo:
	@for f in $(LINGUAS); do \
	 echo "> Compiling \"$$f\" catalog:"; \
	 $(MSGFMT) --statistics -c -o po/$$f.gmo $(top_srcdir)/po/$$f.po; \
	done

update-copyright: Makefile
	@mv README.md README.orig
	@(sed -n '/^Copyright/q;p' < README.orig; \
	 grep -h Copyright src/*.[ch] po/*.po macros/*.m4 | \
	 sed -r 's/\(C\) [12].+[0-9],? /(C) /;s/^\#*//;s/^dnl//;s/<.*>//g;s/ @ .*//;s/[ ]*//;s/ *$$//;/Orton/d' | \
	 sort -u; echo '~~~') > README.md
	@diff -u README.orig README.md
	@rm -f README.orig

doc-status:
	@echo -n "Missing docs for:"
	@for f in `nm src/.libs/libneon.so | grep ' T ' | colrm 1 11`; do \
	   test -f doc/man/$$f.3 || echo -n " $$f"; \
	done; echo
