#
# Makefile.in:  template Makefile for Subversion
#
# ====================================================================
# Copyright (c) 2000-2003 CollabNet.  All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution.  The terms
# are also available at http://subversion.tigris.org/license-1.html.
# If newer versions of this license are posted there, you may use a
# newer version instead, at your option.
#
# This software consists of voluntary contributions made by many
# individuals.  For exact contribution history, see the revision
# history and logs, available at http://subversion.tigris.org/.
# ====================================================================
#

top_builddir = .
top_srcdir = @top_srcdir@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
VPATH = @top_srcdir@

SVN_RA_LIB_DEPS = @SVN_RA_LIB_DEPS@
SVN_RA_LIB_LINK = @SVN_RA_LIB_LINK@

DESIGN_DIR = doc/programmer/design
BOOK_TOP = doc/book
BOOK_DIR = ${BOOK_TOP}/book
MDOCS_DIR = ${BOOK_TOP}/misc-docs
DOC_DIRS = $(DESIGN_DIR) $(BOOK_DIR) $(MDOCS_DIR) 

SWIG_SRC_DIR = $(abs_srcdir)/subversion/bindings/swig
SWIG_BUILD_DIR = $(abs_builddir)/subversion/bindings/swig

EXTERNAL_PROJECT_DIRS = @SVN_SUBDIRS@

NEON_LIBS = @NEON_LIBS@
SVN_APR_LIBS = @SVN_APR_LIBS@
SVN_APRUTIL_LIBS = @SVN_APRUTIL_LIBS@
SVN_DB_LIBS =

LIBS = @LIBS@

prefix = @prefix@
exec_prefix = @exec_prefix@
libdir = @libdir@
base_libdir = @libdir@
dav_libdir = @libdir@
fs_libdir = @libdir@
bindir = @bindir@
fs_bindir = @bindir@
includedir = @includedir@
mandir = @mandir@
srcdir = @srcdir@
infodir = @infodir@
datadir = @datadir@
docdir = @docdir@

# where to install libsvn_swig_*
swig_py_libdir = @libdir@
swig_java_libdir = @libdir@
swig_pl_libdir = @libdir@

### these possibly need further discussion
swig_pydir = @libdir@/svn-python/libsvn
swig_pydir_extra = @libdir@/svn-python/svn
swig_javadir = @libdir@/svn-java
swig_pldir = @libdir@/svn-perl

### should search for these...
MAKEINFO = @MAKEINFO@
TEXI2DVI = texi2dvi
DVIPS = dvips
DVIPDF = dvipdf


CC = @CC@
EXEEXT = @EXEEXT@

SHELL = @SHELL@
LIBTOOL = @SVN_LIBTOOL@
LTFLAGS = --silent
LT_LDFLAGS = @LT_LDFLAGS@

INCLUDES = @SVN_EXTRA_INCLUDES@ @SVN_NEON_INCLUDES@                    \
           @SVN_APR_INCLUDES@ @SVN_APRUTIL_INCLUDES@

APACHE_INCLUDES = @APACHE_INCLUDES@
APACHE_TARGET = @APACHE_TARGET@
APACHE_LIBEXECDIR = $(DESTDIR)@APACHE_LIBEXECDIR@

SWIG = @SWIG@
SWIG_INCLUDES = -I$(SWIG_SRC_DIR) \
                -I$(abs_srcdir)/subversion/include \
                $(SVN_APR_INCLUDES)
SWIG_LDFLAGS = @SWIG_LDFLAGS@
SWIG_PY_INCLUDES = @SWIG_PY_INCLUDES@
SWIG_PY_COMPILE = @SWIG_PY_COMPILE@
SWIG_PY_LINK = @SWIG_PY_LINK@
SWIG_JAVA_INCLUDES = @SWIG_JAVA_INCLUDES@
SWIG_JAVA_COMPILE = @SWIG_JAVA_COMPILE@
SWIG_JAVA_LINK = @SWIG_JAVA_LINK@
SWIG_PL_INCLUDES = @SWIG_PL_INCLUDES@
SWIG_PL_COMPILE = @SWIG_PL_COMPILE@
SWIG_PL_LINK = @SWIG_PL_LINK@

SVN_APR_INCLUDES = @SVN_APR_INCLUDES@
SVN_APR_PREFIX = @SVN_APR_PREFIX@

MKDIR = @MKDIR@

# the EXTRA_ exist so that extra flags can be passed at 'make' time
CFLAGS = @CFLAGS@ $(EXTRA_CFLAGS)
CPPFLAGS = @CPPFLAGS@ $(EXTRA_CPPFLAGS)
LDFLAGS = @LDFLAGS@ $(EXTRA_LDFLAGS)

COMPILE = $(CC) $(CPPFLAGS) $(CFLAGS) $(INCLUDES)
LT_COMPILE = $(LIBTOOL) $(LTFLAGS) --mode=compile $(COMPILE)

# special compilation for files destined for mod_dav_svn
COMPILE_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(APACHE_INCLUDES) $(INCLUDES) -o $@ -c

# special compilation for files destined for libsvn_swig_* (e.g. swigutil_*.c)
COMPILE_SWIG_PY = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) -DSWIGPYTHON $(CFLAGS) $(SWIG_PY_INCLUDES) $(INCLUDES) -o $@ -c
COMPILE_SWIG_JAVA = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(SWIG_JAVA_INCLUDES) $(INCLUDES) -o $@ -c
COMPILE_SWIG_PL = $(LIBTOOL) $(LTFLAGS) --mode=compile $(CC) $(CPPFLAGS) $(CFLAGS) $(SWIG_PL_INCLUDES) $(INCLUDES) -o $@ -c

LINK = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS) -rpath $(libdir)

# special link rule for mod_dav_svn
LINK_APACHE_MOD = $(LIBTOOL) $(LTFLAGS) --mode=link $(CC) $(LT_LDFLAGS) $(CFLAGS) $(LDFLAGS) -rpath $(APACHE_LIBEXECDIR) -avoid-version -module

# these commands run SWIG to generate wrapper source files (*.c)
### should we protect against swig not being available?
RUN_SWIG_PY = $(SWIG) -c -python $(SWIG_INCLUDES) $(SWIG_PY_INCLUDES) -o $@
RUN_SWIG_PL = $(SWIG) -c -perl $(SWIG_INCLUDES) $(SWIG_PL_INCLUDES) -o $@
RUN_SWIG_JAVA = cd ${SWIG_BUILD_DIR}/java/org/tigris/subversion/swig && $(SWIG) -c -java -package 'org.tigris.subversion.swig' $(SWIG_INCLUDES) -o ${abs_builddir}/$@

# Compilation of SWIG-generated C source code
COMPILE_PY_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=compile $(SWIG_PY_COMPILE) $(CPPFLAGS) $(SWIG_INCLUDES) $(SWIG_PY_INCLUDES) -prefer-pic -c -o $@
COMPILE_JAVA_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=compile $(SWIG_JAVA_COMPILE) -DSWIGJAVA $(SWIG_INCLUDES) $(SWIG_JAVA_INCLUDES) -prefer-pic -c -o $@
COMPILE_PL_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=compile $(SWIG_PL_COMPILE) $(CPPFLAGS) $(SWIG_INCLUDES) $(SWIG_PL_INCLUDES) -prefer-pic -c -o $@

# these commands link the wrapper objects into an extension library/module
LINK_PY_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=link $(SWIG_PY_LINK) $(SWIG_LDFLAGS) -rpath $(swig_pydir) -avoid-version -module
LINK_JAVA_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=link $(SWIG_JAVA_LINK) $(SWIG_LDFLAGS) -rpath $(swig_javadir) -avoid-version -module
LINK_PL_WRAPPER = $(LIBTOOL) $(LTFLAGS) --mode=link $(SWIG_PL_LINK) $(SWIG_LDFLAGS) -rpath $(swig_pldir) -avoid-version -module


INSTALL = @INSTALL@
INSTALL_LIB = $(LIBTOOL) --mode=install $(INSTALL)
INSTALL_BASE_LIB = $(INSTALL_LIB)
INSTALL_FS_LIB = $(INSTALL_LIB)
INSTALL_DAV_LIB = $(INSTALL_LIB)
INSTALL_BIN = $(LIBTOOL) --mode=install $(INSTALL)
INSTALL_FS_BIN = $(INSTALL_BIN)
INSTALL_INCLUDE = $(INSTALL) -m 644
INSTALL_MOD_SHARED = @APXS@ -i -S LIBEXECDIR="$(APACHE_LIBEXECDIR)" @MOD_ACTIVATION@
INSTALL_MOD_STATIC = $(INSTALL) -m 644
INSTALL_DATA = $(INSTALL) -m 644

### this isn't correct yet
INSTALL_SWIG_PY = $(INSTALL_LIB)
INSTALL_SWIG_PY_LIB = $(INSTALL_LIB)
INSTALL_SWIG_JAVA = $(INSTALL_LIB)
INSTALL_SWIG_JAVA_LIB = $(INSTALL_LIB)
INSTALL_SWIG_PL = $(INSTALL_LIB)
INSTALL_SWIG_PL_LIB = $(INSTALL_LIB)

# additional installation rules for the SWIG wrappers
INSTALL_EXTRA_SWIG_PY=\
   $(top_srcdir)/build/copy-swig-py.sh "$(PYTHON)" "$(INSTALL_DATA)" "${SWIG_SRC_DIR}/python" "$(DESTDIR)$(swig_pydir)" ; \
   $(top_srcdir)/build/copy-swig-py.sh "$(PYTHON)" "$(INSTALL_DATA)" "${SWIG_SRC_DIR}/python/svn" "$(DESTDIR)$(swig_pydir_extra)"; \
   if test $(abs_srcdir) != $(abs_builddir); then \
       $(top_srcdir)/build/copy-swig-py.sh "$(PYTHON)" "$(INSTALL_DATA)" "${SWIG_BUILD_DIR}/python" "$(DESTDIR)$(swig_pydir)" ; \
   fi

# These are for the SWIG generated bindings
SWIG_JAVA_DIR = $(abs_builddir)/subversion/bindings/swig/java
# These are the 'extra' classes which complement SWIG's generated bindings
SWIG_EXTRA_JAVA_DIR = $(abs_srcdir)/subversion/bindings/java
SWIG_EXTRA_SWIG_DIR = $(abs_srcdir)/subversion/bindings/swig/java
SWIG_JAVA_SOURCES = $(SWIG_EXTRA_JAVA_DIR)/org/tigris/subversion/*.java \
                    $(SWIG_EXTRA_JAVA_DIR)/org/tigris/subversion/auth/*.java \
                    $(SWIG_EXTRA_JAVA_DIR)/org/tigris/subversion/client/*.java \
                    $(SWIG_EXTRA_JAVA_DIR)/org/tigris/subversion/opt/*.java \
                    $(SWIG_EXTRA_JAVA_DIR)/org/tigris/subversion/wc/*.java \
                    $(SWIG_EXTRA_SWIG_DIR)/org/tigris/subversion/util/*.java \
                    $(SWIG_EXTRA_SWIG_DIR)/org/tigris/subversion/client/*.java \
                    $(SWIG_JAVA_DIR)/org/tigris/subversion/swig/*.java

# Have to work around different versions of SWIG that output the java files
# in different directories.
INSTALL_EXTRA_SWIG_JAVA=\
	if [ ! -d $(SWIG_JAVA_DIR)/build ]; then mkdir $(SWIG_JAVA_DIR)/build; fi; \
	if [ ! -f $(SWIG_JAVA_DIR)/org/tigris/subversion/swig/clientJNI.java ]; then mv $(SWIG_JAVA_DIR)/*.java $(SWIG_JAVA_DIR)/org/tigris/subversion/swig; fi; \
	$(JAVAC) -g -d $(SWIG_JAVA_DIR)/build $(SWIG_JAVA_SOURCES); \
	$(JAR) cf $(SWIG_JAVA_DIR)/build/svn-api.jar -C $(SWIG_JAVA_DIR)/build org; \
	$(INSTALL_DATA) $(SWIG_JAVA_DIR)/build/svn-api.jar $(DESTDIR)$(swig_javadir);

APXS = @APXS@ 

PYTHON = @PYTHON@

JDK = @JDK@
JAVAC = @JAVAC@
JAR = @JAR@

ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@

TESTS = $(TEST_PROGRAMS) @FS_TEST_PROGRAMS@

all: external-all local-all
clean: external-clean local-clean
distclean: external-distclean local-distclean
extraclean: external-extraclean local-extraclean
install: external-install local-install revision-install

@INCLUDE_OUTPUTS@

local-all: @BUILD_RULES@ @SWIG_BUILD_RULES@

# clean everything but the bulky test output, returning the system back
# to before 'make' was run.
fast-clean: doc-clean
	@list='$(BUILD_DIRS)'; for i in $$list; do                   \
            echo "Cleaning $$i ..." ;                                \
            (cd $$i && rm -f *.o *.lo *.la *.la-a && rm -rf .libs) ; \
        done
	rm -f $(CLEAN_FILES)

# clean all but bulky test output, returning to before './configure' was run.
fast-distclean: fast-clean
	rm -f Makefile config.cache config.log config.status libtool \
              svn_private_config.h svn-config

# clean everything out, returning to before './autogen.sh' was run.
local-extraclean: local-distclean
	rm -f build-outputs.mk svn_private_config.h.in configure \
              ac-helpers/config.guess ac-helpers/config.sub      \
              ac-helpers/libtool.m4 ac-helpers/ltconfig          \
              ac-helpers/ltmain.sh

# clean everything, including test output.
local-clean: fast-clean check-clean

# clean everything, including test output.
local-distclean: fast-distclean check-clean

local-install: @INSTALL_RULES@ @SWIG_INSTALL_RULES@

### HACK!! Find a better way to do this
revision-install:
	subversion/svnversion/svnversion $(top_srcdir) /repos/svn/trunk > $(DESTDIR)$(includedir)/subversion-1/svn-revision.txt

install-static: @INSTALL_STATIC_RULES@

# "make check CLEANUP=true" will clean up directories for successful tests.
# "make check TESTS=subversion/tests/clients/cmdline/basic_tests.py"
#  will perform only basic tests (likewise for other tests).
check: $(TEST_DEPS) @FS_TEST_DEPS@
	@$(PYTHON) $(top_srcdir)/build/pycheck.py;                         \
	flags="--verbose";                                                 \
	if test "$(CLEANUP)" != ""; then                                   \
	  flags="--cleanup $$flags";                                       \
	fi;                                                                \
	if test "$(BASE_URL)" != ""; then                                  \
	  flags="--url $(BASE_URL) $$flags";                               \
	fi;                                                                \
	$(PYTHON) $(top_srcdir)/build/run_tests.py $$flags                 \
		  '$(abs_srcdir)' '$(abs_builddir)' '$(PYTHON)' '$(SHELL)' \
		  $(TESTS)

# First, set up Apache as documented in
# subversion/tests/clients/cmdline/README.
davcheck: 
	@$(MAKE) check BASE_URL=http://localhost

# Automatically configure and run Apache httpd on a random port, and then
# run make check.
davautocheck: 
	@sh $(top_srcdir)/subversion/tests/clients/cmdline/davautocheck.sh

# First, run:
#   subversion/svnserve/svnserve -d -r `pwd`/subversion/tests/clients/cmdline
svncheck: 
	@$(MAKE) check BASE_URL=svn://localhost

# First make sure you can ssh to localhost and that "svnserve" is in
# the path of the resulting shell.
svnsshcheck:
	@$(MAKE) check \
	  BASE_URL=svn+ssh://localhost`pwd`/subversion/tests/clients/cmdline

check-clean:
	rm -rf subversion/tests/clients/cmdline/repositories   \
               subversion/tests/clients/cmdline/working_copies \
               subversion/tests/clients/cmdline/local_tmp      \
               subversion/tests/libsvn_fs/test-repo-*          \
               subversion/tests/libsvn_repos/test-repo-*       \
               subversion/tests/libsvn_subr/z                  \
               tests.log

mkdir-init:
	@list='$(BUILD_DIRS) $(DOC_DIRS)';                  \
        for i in $$list doc; do                         \
            if [ ! -d $$i ]; then                       \
                echo "mkdir $$i" ;                      \
                $(MKDIR) $$i ;                          \
            fi;                                         \
        done

# recursive targets to handle external projects (e.g. APR, Neon)
external-all external-install:
	@target=`echo $@ | sed s/external-//`;          \
        list='$(EXTERNAL_PROJECT_DIRS)';                \
        for i in $$list; do                             \
            echo "------ making $$target in $$i";       \
            (cd $$i && $(MAKE) $$target) || exit 1;     \
            echo "------ completed $$target in $$i";    \
        done;

### apr-util relies on generated files in apr, so reverse the
### list so that it is cleaned before apr.
external-clean external-distclean:
	@target=`echo $@ | sed s/external-//`;          \
        list='$(EXTERNAL_PROJECT_DIRS)';                \
        for i in $$list; do                             \
            revlist="$$i $$revlist";                    \
        done;                                           \
        for i in $$revlist; do                          \
            echo "------ making $$target in $$i";       \
            (cd $$i && $(MAKE) $$target) || exit 1;     \
            echo "------ completed $$target in $$i";    \
        done;

### temporary hack. Neon does not have an "extraclean" and neither does db
### If we don't have extraclean -- do the next best thing.
external-extraclean:
	@list='$(EXTERNAL_PROJECT_DIRS)';                                \
        for i in $$list; do                                              \
            revlist="$$i $$revlist";                                     \
        done;                                                            \
        for i in $$revlist; do                                           \
            if test "$$i" = "neon" || test "$$i" = "db/dist"; then       \
                echo "------ making distclean(no extraclean) in $$i";    \
                (cd $$i && $(MAKE) distclean) || exit 1;                 \
                echo "------ completed distclean(no extraclean) in $$i"; \
            else                                                         \
                echo "------ making extraclean in $$i";                  \
                (cd $$i && $(MAKE) extraclean) || exit 1;                \
                echo "------ completed extraclean in $$i";               \
            fi;                                                          \
        done;


# DOCUMENTATION RULES

# Every single document in every format.
doc: doc-design doc-book doc-misc-docs

# Build all types of a certain doc.
doc-book: doc-book-html doc-book-pdf doc-book-ps
doc-misc-docs: doc-misc-docs-html doc-misc-docs-pdf doc-misc-docs-ps
doc-design: doc-design-info doc-design-html doc-design-txt

# Build all docs of a certain type.
doc-all-html: doc-design-html doc-book-html doc-misc-docs-html
doc-all-pdf: doc-design-pdf doc-book-pdf dock-misc-docs-pdf
doc-all-ps: doc-design-ps doc-book-ps dock-misc-docs-ps
doc-all-info: doc-design-info

# Different outputs for the 'design' document, written in texinfo.
# Assumes you have {makeinfo, texi2dvi, dvips, dvipdf} installed.
doc-design-info: doc/programmer/design/svn-design.info
doc-design-html: doc/programmer/design/svn-design.html
doc-design-txt: doc/programmer/design/svn-design.txt
doc-design-dvi: doc/programmer/design/svn-design.dvi
doc-design-ps: doc/programmer/design/svn-design.ps
doc-design-pdf: doc/programmer/design/svn-design.pdf

# Different outputs for the main Subversion 'book', written in docbook.
# Assumes you have {xsltproc, fop, stylesheets} installed.
doc-book-html:
	cd ${BOOK_TOP} && $(MAKE) book-html
doc-book-pdf:
	cd ${BOOK_TOP} && $(MAKE) book-pdf
doc-book-ps:
	cd ${BOOK_TOP} && $(MAKE) book-ps

# Different outputs for the misc docs.
# Assumes you have {xsltproc, fop, stylesheets} installed.
doc-misc-docs-html:
	cd ${BOOK_TOP} && $(MAKE) misc-docs-html
doc-misc-docs-pdf:
	cd ${BOOK_TOP} && $(MAKE) misc-docs-pdf
doc-misc-docs-ps:
	cd ${BOOK_TOP} && $(MAKE) misc-docs-ps


doc-clean:
	for d in $(DOC_DIRS);                               \
        do                                                  \
            (cd $$d;                                        \
             rm -f *.info *.info-[1-9]                      \
                   *.aux *.cp *.fn *.ky *.log *.pg *.toc    \
                   *.tp *.vr                                \
                   *.dvi *.txt *.html *.ps *.pdf *.fo);     \
        done

#
# Implicit rules for creating outputs from input files
#
.SUFFIXES:
.SUFFIXES: .c .lo .o .la-a .la .texi .info .dvi .txt .html .ps .pdf

.c.o:
	$(COMPILE) -o $@ -c $<

.c.lo:
	$(LT_COMPILE) -o $@ -c $<

.la.la-a:
	sed "/library_names/s/'.*'/''/" $< > $@


.texi.info:
	$(MAKEINFO) -I `dirname $<` -o $@ $< 

.texi.dvi:
	wd=`pwd` ; cd `dirname $@` ; $(TEXI2DVI) $$wd/$<

.texi.txt:
	$(MAKEINFO) -I `dirname $<` --no-headers -o $@ $<

.texi.html:
	$(MAKEINFO) -I `dirname $<` --no-split --html -o $@ $<

.dvi.ps:
	$(DVIPS) $< -o $@

.dvi.pdf:
	$(DVIPDF) $< $@

install-docs: install-man @INSTALL_INFO@

manroot = $(mandir)/man
install-man:
	@list='$(MANPAGES)';                                               \
        for i in $$list; do                                                \
          if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i;               \
          else file=$$i; fi;                                               \
          ext=`echo $$i | sed -e 's/^.*\\.//'`;                            \
          $(MKDIR) $(DESTDIR)$(manroot)$$ext;                              \
          inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`;                   \
          inst=`echo $$inst | sed -e 's/^.*\///'`;                         \
          inst=`echo $$inst`.$$ext;                                        \
          echo "$(INSTALL_DATA) $$file $(DESTDIR)$(manroot)$$ext/$$inst";  \
          $(INSTALL_DATA) $$file $(DESTDIR)$(manroot)$$ext/$$inst;         \
        done

install-info: doc-all-info
	$(MKDIR) $(DESTDIR)$(infodir)
	@list='$(INFOPAGES)';                                         \
        for i in $$list; do                                           \
          if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i;          \
          else file=$$i; fi;                                          \
          inst=`echo $$file | sed -e 's/^.*\///'`;                    \
          echo "$(INSTALL_DATA) $$file $(DESTDIR)$(infodir)/$$inst";  \
          $(INSTALL_DATA) $$file $(DESTDIR)$(infodir)/$$inst;         \
        done
