## @file
##
## $Id$
##
## $Date$
## $Author$
##
## @copy © Marc Wäckerlin
## @license LGPL, see file <a href="license.html">COPYING</a>
##

AM_CPPFLAGS += -I$(top_srcdir)

if HAVE_STACKTRACE
  AM_CPPFLAGS += -DHAVE_STACKTRACE
endif

CLEANFILES = doxygen.errors functiontrace_test.log \
             mrwautofunctiontracelog4cxx_test.log \
	     mrwautofunctiontracelog4cxx_test-mt.log \
	     $(VALTESTS) valgrind.log
examplesdir = $(pkgdatadir)/examples
dist_examples_DATA = $(top_srcdir)/mrw/examples/*
htmldir = $(pkgdatadir)/doc/html
pdfdir =  $(pkgdatadir)/doc/pdf
if HAVE_DOXYGEN
html_DATA = $(top_builddir)/doc/html/index.html
dist_pdf_DATA = $(top_builddir)/doc/latex/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf
endif

lib_LTLIBRARIES = libmrw.la
if HAVE_BOOST_THREAD
  lib_LTLIBRARIES += libmrw-mt.la
endif
if HAVE_STACKTRACE
 lib_LTLIBRARIES += libmrwexcstderr.la
if HAVE_THREADS
if HAVE_BOOST_THREAD
    lib_LTLIBRARIES += libmrwexcstderr-mt.la
endif
endif
if AUTOFNTRACE
    lib_LTLIBRARIES += libmrwautofunctiontracestdlog.la
if HAVE_THREADS
if HAVE_BOOST_THREAD
      lib_LTLIBRARIES += libmrwautofunctiontracestdlog-mt.la
endif
endif
endif
if HAVE_LOG4CXX
    lib_LTLIBRARIES += libmrwexclog4cxx.la
if HAVE_BOOST_THREAD
    lib_LTLIBRARIES += libmrwexclog4cxx-mt.la
endif
if AUTOFNTRACE
    lib_LTLIBRARIES += libmrwautofunctiontracelog4cxx.la
if HAVE_THREADS
if HAVE_BOOST_THREAD
      lib_LTLIBRARIES += libmrwautofunctiontracelog4cxx-mt.la
endif
endif
endif
endif
endif
if HAVE_LOG4CXX
    lib_LTLIBRARIES += libmrwlog4cxxconfiguration.la
if HAVE_THREADS
    lib_LTLIBRARIES += libmrwlog4cxxconfiguration-mt.la
endif
endif

libmrw_la_SOURCES = \
                    mrw.hpp version.cpp \
                    arg.cpp arg.hpp auto.hpp deque.hpp \
                    exception.cpp exception.hpp \
                    list.hpp \
                    map.hpp multimap.hpp multiset.hpp \
                    set.hpp \
                    smartpointer.hpp stdext.cpp stdext.hpp \
                    string.hpp unistd.hpp vector.hpp \
		    tokenizer.hpp \
		    errno.hpp errno.cpp
if HAVE_DIR
  libmrw_la_SOURCES += file.hpp configfile.hpp configfile.cpp
endif
if HAVE_REGEXP
  libmrw_la_SOURCES += regexp.hpp regexp.cpp
endif
if HAVE_EXEC
  libmrw_la_SOURCES += exec.cpp exec.hpp
endif
if HAVE_LTDL
  libmrw_la_SOURCES += dynamiclibrary.hpp
endif
if HAVE_LOG4CXX
  libmrw_la_SOURCES += functiontrace.cpp functiontrace.hpp
endif
if HAVE_STACKTRACE
libmrw_la_SOURCES += \
                     stacktrace.hpp stacktrace.cpp
endif
libmrw_la_LDFLAGS = -version-info @LIB_VERSION@
libmrw_la_LIBADD = 
if HAVE_STACKTRACE
libmrw_la_LIBADD += -lltdl
endif

if HAVE_THREADS
if HAVE_BOOST_THREAD
  libmrw_mt_la_SOURCES = $(libmrw_la_SOURCES)
  libmrw_mt_la_CXXFLAGS = @THREADS@
  libmrw_mt_la_LDFLAGS = $(libmrw_la_LDFLAGS) -version-info @LIB_VERSION@ \
                         @THREADS@
  libmrw_mt_la_LIBADD  = $(libmrw_la_LIBADD) @BOOST_THREAD_LIB@
endif
endif

if HAVE_STACKTRACE
  libmrwexcstderr_la_SOURCES = autostacktracestderr.cpp version.cpp
  libmrwexcstderr_la_LDFLAGS = -version-info @LIB_VERSION@
  libmrwexcstderr_la_LIBADD = $(top_builddir)/mrw/libmrw.la
if HAVE_THREADS
if HAVE_BOOST_THREAD
    libmrwexcstderr_mt_la_SOURCES = autostacktracestderr.cpp version.cpp
    libmrwexcstderr_mt_la_CXXFLAGS = @THREADS@
    libmrwexcstderr_mt_la_LDFLAGS = -version-info @LIB_VERSION@ @THREADS@
    libmrwexcstderr_mt_la_LIBADD = $(top_builddir)/mrw/libmrw-mt.la
endif
endif
if AUTOFNTRACE
    libmrwautofunctiontracestdlog_la_SOURCES = autofunctiontracestdlog.cpp \
                                               version.cpp
    libmrwautofunctiontracestdlog_la_CXXFLAGS = -w
    libmrwautofunctiontracestdlog_la_LDFLAGS = -version-info @LIB_VERSION@
    libmrwautofunctiontracestdlog_la_LIBADD  = $(top_builddir)/mrw/libmrw.la
if HAVE_THREADS
if HAVE_BOOST_THREAD
      libmrwautofunctiontracestdlog_mt_la_SOURCES = \
        autofunctiontracelog4cxx.cpp  version.cpp
      libmrwautofunctiontracestdlog_mt_la_CXXFLAGS = @THREADS@ -w
      libmrwautofunctiontracestdlog_mt_la_LDFLAGS = \
        -version-info @LIB_VERSION@ @THREADS@
      libmrwautofunctiontracestdlog_mt_la_LIBADD  = \
        $(top_builddir)/mrw/libmrw-mt.la
endif
endif
endif
if HAVE_LOG4CXX
    libmrwexclog4cxx_la_SOURCES = autostacktracelog4cxx.cpp version.cpp
    libmrwexclog4cxx_la_LDFLAGS = -version-info @LIB_VERSION@
    libmrwexclog4cxx_la_LIBADD = $(top_builddir)/mrw/libmrw.la -llog4cxx
if HAVE_THREADS
if HAVE_BOOST_THREAD
      libmrwexclog4cxx_mt_la_SOURCES = autostacktracelog4cxx.cpp version.cpp
      libmrwexclog4cxx_mt_la_CXXFLAGS = @THREADS@
      libmrwexclog4cxx_mt_la_LDFLAGS = -version-info @LIB_VERSION@ @THREADS@
      libmrwexclog4cxx_mt_la_LIBADD = $(top_builddir)/mrw/libmrw-mt.la -llog4cxx
endif
endif
if AUTOFNTRACE
    libmrwautofunctiontracelog4cxx_la_SOURCES = autofunctiontracelog4cxx.cpp \
                                                version.cpp
    libmrwautofunctiontracelog4cxx_la_CXXFLAGS = -w
    libmrwautofunctiontracelog4cxx_la_LDFLAGS = -version-info @LIB_VERSION@
    libmrwautofunctiontracelog4cxx_la_LIBADD  = $(top_builddir)/mrw/libmrw.la -llog4cxx
if HAVE_THREADS
if HAVE_BOOST_THREAD
      libmrwautofunctiontracelog4cxx_mt_la_SOURCES = \
        autofunctiontracelog4cxx.cpp  version.cpp
      libmrwautofunctiontracelog4cxx_mt_la_CXXFLAGS = @THREADS@ -w
      libmrwautofunctiontracelog4cxx_mt_la_LDFLAGS = \
        -version-info @LIB_VERSION@ @THREADS@
      libmrwautofunctiontracelog4cxx_mt_la_LIBADD  = \
        $(top_builddir)/mrw/libmrw-mt.la -llog4cxx
endif
endif
endif
endif
endif
if HAVE_LOG4CXX
  libmrwlog4cxxconfiguration_la_SOURCES = log4cxxconfiguration.cpp version.cpp
  libmrwlog4cxxconfiguration_la_LDFLAGS = -version-info @LIB_VERSION@
  libmrwlog4cxxconfiguration_la_LIBADD = -llog4cxx
if HAVE_THREADS
    libmrwlog4cxxconfiguration_mt_la_SOURCES = log4cxxconfiguration.cpp \
                                               version.cpp
    libmrwlog4cxxconfiguration_mt_la_CXXFLAGS = @THREADS@
    libmrwlog4cxxconfiguration_mt_la_LDFLAGS = -version-info @LIB_VERSION@ \
                                               @THREADS@
    libmrwlog4cxxconfiguration_mt_la_LIBADD = -llog4cxx
endif
endif

VALGRIND_CHECKS = auto_test smartpointer_test stdext_test \
                 tokenizer_test string_test
NO_VALGRIND_CHECKS = 
if HAVE_DIR
  VALGRIND_CHECKS += configfile_test
  dist_check_SCRIPTS = configfile_check.sh
endif
if HAVE_REGEXP
  VALGRIND_CHECKS += regexp_test
endif
if HAVE_EXEC
  VALGRIND_CHECKS += exec_test
endif
if HAVE_LTDL
  VALGRIND_CHECKS += dynamiclibrary_test
endif
if HAVE_LOG4CXX
  VALGRIND_CHECKS += functiontrace_test
endif
if HAVE_STACKTRACE
  NO_VALGRIND_CHECKS += stacktrace_test
  VALGRIND_CHECKS += mrwexcstderr_test
if HAVE_LOG4CXX
    VALGRIND_CHECKS += mrwexclog4cxx_test
if AUTOFNTRACE
      NO_VALGRIND_CHECKS += mrwautofunctiontracelog4cxx_test
if HAVE_THREADS
if HAVE_BOOST_THREAD
        NO_VALGRIND_CHECKS += mrwautofunctiontracelog4cxx_test-mt
endif
endif
endif
endif
endif

auto_test_SOURCES = auto_test.cpp version.cpp
auto_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
auto_test_CXXFLAGS = -g3 -O0
auto_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
auto_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
  auto_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
smartpointer_test_SOURCES = smartpointer_test.cpp version.cpp
smartpointer_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
smartpointer_test_CXXFLAGS = -g3 -O0
smartpointer_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
smartpointer_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
  smartpointer_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
if HAVE_EXEC
exec_test_SOURCES = exec_test.cpp version.cpp
exec_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
exec_test_CXXFLAGS = -g3 -O0
exec_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
exec_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
  exec_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
endif
stdext_test_SOURCES = stdext_test.cpp version.cpp
stdext_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
stdext_test_CXXFLAGS = -g3 -O0
stdext_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
stdext_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
  stdext_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
string_test_SOURCES = string_test.cpp version.cpp
string_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
string_test_CXXFLAGS = -g3 -O0
string_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
string_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
  string_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
if HAVE_REGEXP
  regexp_test_SOURCES = regexp_test.cpp version.cpp
  regexp_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
  regexp_test_CXXFLAGS = -g3 -O0
  regexp_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
  regexp_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
    regexp_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
endif
tokenizer_test_SOURCES = tokenizer_test.cpp version.cpp
tokenizer_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
tokenizer_test_CXXFLAGS = -g3 -O0
tokenizer_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
tokenizer_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
  tokenizer_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
if HAVE_DIR
  configfile_test_SOURCES = configfile_test.cpp version.cpp
  configfile_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
  configfile_test_CXXFLAGS = -g3 -O0
  configfile_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
  configfile_test_LDADD = $(top_builddir)/mrw/libmrw.la
if HAVE_STACKTRACE
    configfile_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
endif
if HAVE_LTDL
  check_LTLIBRARIES = libdynamiclibrary_testlib.la
  libdynamiclibrary_testlib_la_SOURCES = dynamiclibrary_testlib.cpp
  libdynamiclibrary_testlib_la_LDFLAGS = -module -rpath /bullshit
  dynamiclibrary_test_SOURCES = dynamiclibrary_test.cpp version.cpp
  dynamiclibrary_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
  dynamiclibrary_test_CXXFLAGS = -g3 -O0
  dynamiclibrary_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
  dynamiclibrary_test_LDADD = $(top_builddir)/mrw/libmrw.la -lltdl
endif
if HAVE_LOG4CXX
  functiontrace_test_SOURCES = functiontrace_test.cpp version.cpp
  functiontrace_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
  functiontrace_test_CXXFLAGS = -g3 -O0
  functiontrace_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
  functiontrace_test_LDADD = $(top_builddir)/mrw/libmrw.la -llog4cxx
if HAVE_STACKTRACE
  functiontrace_test_LDADD += $(top_builddir)/mrw/libmrwexcstderr.la
endif
endif
if HAVE_STACKTRACE
  stacktrace_test_SOURCES = stacktrace_test.cpp version.cpp
  stacktrace_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
  stacktrace_test_CXXFLAGS = -g3 -O0
  stacktrace_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
  stacktrace_test_LDADD = $(top_builddir)/mrw/libmrw.la $(top_builddir)/mrw/libmrwexcstderr.la
  mrwexcstderr_test_SOURCES = mrwexcstderr_test.cpp version.cpp
  mrwexcstderr_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
  mrwexcstderr_test_CXXFLAGS = -g3 -O0
  mrwexcstderr_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
  mrwexcstderr_test_LDADD = $(top_builddir)/mrw/libmrwexcstderr.la
if HAVE_LOG4CXX
    mrwexclog4cxx_test_SOURCES = mrwexclog4cxx_test.cpp version.cpp
    mrwexclog4cxx_test_CPPFLAGS = -I$(top_srcdir) @CPPUNIT_CFLAGS@ -g3 -O0
    mrwexclog4cxx_test_CXXFLAGS = -g3 -O0
    mrwexclog4cxx_test_LDFLAGS = @CPPUNIT_LIBS@ -L.libs
    mrwexclog4cxx_test_LDADD = $(top_builddir)/mrw/libmrwexclog4cxx.la -llog4cxx
if AUTOFNTRACE
      mrwautofunctiontracelog4cxx_test_SOURCES = \
        mrwautofunctiontracelog4cxx_test.cpp version.cpp
      mrwautofunctiontracelog4cxx_test_CPPFLAGS = \
        -I$(top_srcdir) @CPPUNIT_CFLAGS@ -finstrument-functions -g3 -O0
      mrwautofunctiontracelog4cxx_test_CXXFLAGS = -g3 -O0 -finstrument-functions
      mrwautofunctiontracelog4cxx_test_LDFLAGS = \
        @CPPUNIT_LIBS@ -L.libs -finstrument-functions
      mrwautofunctiontracelog4cxx_test_LDADD = \
        -llog4cxx $(top_builddir)/mrw/libmrwautofunctiontracelog4cxx.la
if HAVE_THREADS
if HAVE_BOOST_THREAD
        mrwautofunctiontracelog4cxx_test_mt_SOURCES = \
          mrwautofunctiontracelog4cxx_test.cpp version.cpp
        mrwautofunctiontracelog4cxx_test_mt_CPPFLAGS = \
          -I$(top_srcdir) @CPPUNIT_CFLAGS@ -finstrument-functions -g3 -O0
        mrwautofunctiontracelog4cxx_test_mt_CXXFLAGS = -g3 -O0 \
	  -finstrument-functions @THREADS@
        mrwautofunctiontracelog4cxx_test_mt_LDFLAGS = \
          @CPPUNIT_LIBS@ -L.libs @THREADS@ -finstrument-functions
        mrwautofunctiontracelog4cxx_test_mt_LDADD = \
          -llog4cxx $(top_builddir)/mrw/libmrwautofunctiontracelog4cxx-mt.la @BOOST_THREAD_LIB@
endif
endif
endif
endif
endif

dist_check_DATA = test.dat configfile.ini configfile.ini.result
EXTRA_DIST = head.html foot.html style.css hintergrund.png
if HAVE_VALGRIND
VALTESTS=$(VALGRIND_CHECKS:%=valcheck_%)
TESTS = $(VALTESTS) $(NO_VALGRIND_CHECKS) $(dist_check_SCRIPTS)
valcheck_%: %
	echo "LD_LIBRARY_PATH=.libs $(top_srcdir)/valcheck.sh .libs/$<" > $@
	chmod ugo+x $@
else
TESTS = $(check_PROGRAMS) $(dist_check_SCRIPTS)
endif
check_PROGRAMS = $(VALGRIND_CHECKS) $(NO_VALGRIND_CHECKS)

.PHONY: doc clean-local distclean-local dist-hook install-data-hook \
        uninstall-hook

deps = $(top_srcdir)/COPYING $(top_srcdir)/README $(top_srcdir)/INSTALL $(top_srcdir)/NEWS $(top_srcdir)/ChangeLog

doc: $(top_builddir)/doc/html/index.html $(top_builddir)/doc/latex/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf

$(html_DATA): doxyfile *.[ch]pp $(deps) style.css head.html foot.html
	test -d $(top_builddir)/doc/latex || mkdir -p $(top_builddir)/doc/latex
	test -d $(top_builddir)/doc/html || mkdir -p $(top_builddir)/doc/html
	@test -f $(top_builddir)/doc/html/hintergrund.png || \
	  cp $(srcdir)/hintergrund.png \
	  $(top_builddir)/doc/html && \
	  chmod u+w $(top_builddir)/doc/html/hintergrund.png
	doxygen doxyfile || \
	  ( echo "**** ERROR in Doxygen ****" && cat doxygen.errors && false )
if PEDANTIC
	test \! -s doxygen.errors
endif

$(top_builddir)/doc/latex/@PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf: doxyfile *.[ch]pp $(deps) $(html_DATA)
	cd $(top_builddir)/doc/latex && make && \
	  mv refman.pdf @PACKAGENAME@-@MAJOR@.@MINOR@.@LEAST@.pdf || \
	  ( echo "**** ERROR in Doxygen-PDF ****" && \
	    cat refman.log && false )

clean-local:
	- rm doxygen.err libmrw.doxytag

distclean-local:
	- rm -r $(top_builddir)/doc/html/* $(top_builddir)/doc/latex/*
	- rm makefile makefile.in doxygen.err libmrw.doxytag

dist-hook:
	test -d $(distdir)/doc/html || \
	  mkdir -p $(distdir)/doc/html
	cp $(top_builddir)/doc/html/* $(distdir)/doc/html/.

if HAVE_DOXYGEN
install-data-hook:
	env | grep -i tmp
	test -d "$(DESTDIR)$(pkgdatadir)/doc" || \
	  mkdir -p "$(DESTDIR)$(pkgdatadir)/doc"
	chmod -R u+w "$(DESTDIR)$(pkgdatadir)/doc"
	cp -rf $(top_builddir)/doc/html "$(DESTDIR)$(pkgdatadir)/doc/"

uninstall-hook:
	chmod -R u+w "$(DESTDIR)$(pkgdatadir)/doc"
	rm -rf "$(DESTDIR)$(pkgdatadir)/doc/html"
endif