From 9773da65d85a7cc4cabc4d9247ebcfd1879547cc Mon Sep 17 00:00:00 2001
From: cypherpunks <cypherpunks@torproject.org>
Date: Tue, 17 Feb 2015 15:36:10 +0100
Subject: [PATCH 1/6] Use output variables instead of relative paths.

Fixes the following rules in out-of-tree builds;
- check-spaces
- check-docs
- check-logs
- Doxygen
- coverage-html

And cleans up additional directories;
- coverage_html
- doc/doxygen
---
 Doxyfile.in         |  6 +++---
 Makefile.am         | 36 +++++++++++++++++++-----------------
 doc/include.am      |  4 ++--
 src/or/include.am   |  9 +++++----
 src/test/include.am |  8 ++++----
 5 files changed, 33 insertions(+), 30 deletions(-)

diff --git a/Doxyfile.in b/Doxyfile.in
index 344ee27..a39348f 100644
--- a/Doxyfile.in
+++ b/Doxyfile.in
@@ -38,7 +38,7 @@ PROJECT_NUMBER         = @VERSION@
 # If a relative path is entered, it will be relative to the location 
 # where doxygen was started. If left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = ./doc/doxygen
+OUTPUT_DIRECTORY       = @top_builddir@/doc/doxygen
 
 # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
 # 4096 sub-directories (in 2 levels) under the output directory of each output 
@@ -534,8 +534,8 @@ WARN_LOGFILE           =
 # directories like "/usr/src/myproject". Separate the files or directories 
 # with spaces.
 
-INPUT                  = src/common \
-                         src/or
+INPUT                  = @top_srcdir@/src/common \
+                         @top_srcdir@/src/or
 
 # This tag can be used to specify the character encoding of the source files 
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
diff --git a/Makefile.am b/Makefile.am
index 03dff91..7e67b74 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -64,12 +64,12 @@ doxygen:
 	doxygen && cd doc/doxygen/latex && make
 
 test: all
-	./src/test/test
+	$(top_builddir)/src/test/test
 
 # Note that test-network requires a copy of Chutney in $CHUTNEY_PATH.
 # Chutney can be cloned from https://git.torproject.org/chutney.git .
 test-network: all
-	./src/test/test-network.sh
+	$(top_srcdir)/src/test/test-network.sh
 
 test-stem: $(TESTING_TOR_BINARY)
 	@if test -d "$$STEM_SOURCE_DIR"; then \
@@ -81,35 +81,35 @@ test-stem: $(TESTING_TOR_BINARY)
 
 
 reset-gcov:
-	rm -f src/*/*.gcda src/*/*/*.gcda
+	rm -f $(top_builddir)/src/*/*.gcda $(top_builddir)/src/*/*/*.gcda
 
-HTML_COVER_DIR=./coverage_html
+HTML_COVER_DIR=$(top_builddir)/coverage_html
 coverage-html: all
 	test -e "`which lcov`" || (echo "lcov must be installed. See <http://ltp.sourceforge.net/coverage/lcov.php>." && false)
-	test -d "$(HTML_COVER_DIR)" || mkdir -p "$(HTML_COVER_DIR)"
-	lcov --rc lcov_branch_coverage=1 --directory ./src --zerocounters
+	test -d "$(HTML_COVER_DIR)" || $(MKDIR_P) "$(HTML_COVER_DIR)"
+	lcov --rc lcov_branch_coverage=1 --directory $(top_builddir)/src --zerocounters
 	$(MAKE) reset-gcov
 	$(MAKE) check
-	lcov --capture --rc lcov_branch_coverage=1 --no-external --directory . --output-file "$(HTML_COVER_DIR)/lcov.tmp"
+	lcov --capture --rc lcov_branch_coverage=1 --no-external --directory $(top_builddir) --base-directory $(top_srcdir) --output-file "$(HTML_COVER_DIR)/lcov.tmp"
 	lcov --remove "$(HTML_COVER_DIR)/lcov.tmp" --rc lcov_branch_coverage=1 'test/*' 'ext/tinytest*' '/usr/*' --output-file "$(HTML_COVER_DIR)/lcov.info"
 	genhtml --branch-coverage -o "$(HTML_COVER_DIR)" "$(HTML_COVER_DIR)/lcov.info"
 
 # Avoid strlcpy.c, strlcat.c, aes.c, OpenBSD_malloc_Linux.c, sha256.c,
 # eventdns.[hc], tinytest*.[ch]
 check-spaces:
-	./scripts/maint/checkSpace.pl -C              \
-		src/common/*.[ch]		      \
-		src/or/*.[ch]			      \
-		src/test/*.[ch]			      \
-		src/tools/*.[ch]		      \
-		src/tools/tor-fw-helper/*.[ch]
+	$(top_srcdir)/scripts/maint/checkSpace.pl -C \
+		$(top_srcdir)/src/common/*.[ch] \
+		$(top_srcdir)/src/or/*.[ch] \
+		$(top_srcdir)/src/test/*.[ch] \
+		$(top_srcdir)/src/tools/*.[ch] \
+		$(top_srcdir)/src/tools/tor-fw-helper/*.[ch]
 
 check-docs:
-	./scripts/maint/checkOptionDocs.pl
+	$(top_srcdir)/scripts/maint/checkOptionDocs.pl
 
 check-logs:
-	./scripts/maint/checkLogs.pl                  \
-		src/*/*.[ch] | sort -n
+	$(top_srcdir)/scripts/maint/checkLogs.pl \
+		$(top_srcdir)/src/*/*.[ch] | sort -n
 
 .PHONY: check-changes
 check-changes:
@@ -125,4 +125,6 @@ version:
 	fi
 
 mostlyclean-local:
-	rm -f src/*/*.gc{da,no} src/*/*/*.gc{da,no}
+	rm -f $(top_builddir)/src/*/*.gc{da,no} $(top_builddir)/src/*/*/*.gc{da,no}
+	rm -rf $(HTML_COVER_DIR)
+	rm -rf $(top_builddir)/doc/doxygen
diff --git a/doc/include.am b/doc/include.am
index 30d3e20..783aa95 100644
--- a/doc/include.am
+++ b/doc/include.am
@@ -64,14 +64,14 @@ doc/tor-gencert.html.in: doc/tor-gencert.1.txt
 doc/tor-resolve.html.in: doc/tor-resolve.1.txt
 doc/tor-fw-helper.html.in: doc/tor-fw-helper.1.txt
 
-# use ../config.status to swap all machine-specific magic strings
+# use config.status to swap all machine-specific magic strings
 # in the asciidoc with their replacements.
 $(asciidoc_product) :
 	$(AM_V_GEN)$(MKDIR_P) $(@D)
 	$(AM_V_at)if test -e $(top_srcdir)/$@.in && ! test -e $@.in ; then \
 		cp $(top_srcdir)/$@.in $@; \
 	fi
-	$(AM_V_at)./config.status -q --file=$@;
+	$(AM_V_at)$(top_builddir)/config.status -q --file=$@;
 
 doc/tor.html: doc/tor.html.in
 doc/tor-gencert.html: doc/tor-gencert.html.in
diff --git a/src/or/include.am b/src/or/include.am
index b44e109..47746e2 100644
--- a/src/or/include.am
+++ b/src/or/include.am
@@ -85,8 +85,9 @@ LIBTOR_A_SOURCES = \
 src_or_libtor_a_SOURCES = $(LIBTOR_A_SOURCES)
 src_or_libtor_testing_a_SOURCES = $(LIBTOR_A_SOURCES)
 
-#libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \
-#	../common/libor-event.a
+#libtor_a_LIBADD = $(top_builddir)/common/libor.a \
+#    $(top_builddir)/common/libor-crypto.a \
+#    $(top_builddir)/common/libor-event.a
 
 
 src_or_tor_SOURCES = src/or/tor_main.c
@@ -123,9 +124,9 @@ src_or_tor_cov_LDADD = src/or/libtor-testing.a src/common/libor-testing.a \
 	src/common/libor-event-testing.a \
 	@TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
 	@TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@ @TOR_SYSTEMD_LIBS@
-TESTING_TOR_BINARY = ./src/or/tor-cov
+TESTING_TOR_BINARY = $(top_builddir)/src/or/tor-cov
 else
-TESTING_TOR_BINARY = ./src/or/tor
+TESTING_TOR_BINARY = $(top_builddir)/src/or/tor
 endif
 
 ORHEADERS = \
diff --git a/src/test/include.am b/src/test/include.am
index 369bc1a..968135a 100644
--- a/src/test/include.am
+++ b/src/test/include.am
@@ -140,9 +140,9 @@ src_test_test_ntor_cl_AM_CPPFLAGS =	       \
 NTOR_TEST_DEPS=src/test/test-ntor-cl
 
 if COVERAGE_ENABLED
-CMDLINE_TEST_TOR = ./src/or/tor-cov
+CMDLINE_TEST_TOR = $(top_builddir)/src/or/tor-cov
 else
-CMDLINE_TEST_TOR = ./src/or/tor
+CMDLINE_TEST_TOR = $(top_builddir)/src/or/tor
 endif
 
 noinst_PROGRAMS += src/test/test-bt-cl
@@ -158,8 +158,8 @@ check-local: $(NTOR_TEST_DEPS) $(CMDLINE_TEST_TOR)
 if USEPYTHON
 	$(PYTHON) $(top_srcdir)/src/test/ntor_ref.py test-tor
 	$(PYTHON) $(top_srcdir)/src/test/ntor_ref.py self-test
-	./src/test/test-bt-cl assert | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
-	./src/test/test-bt-cl crash | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
+	$(top_builddir)/src/test/test-bt-cl assert | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
+	$(top_builddir)/src/test/test-bt-cl crash | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
 endif
 	$(top_srcdir)/src/test/zero_length_keys.sh
 
