From b959138fd98188b528b49f550a43c26d2462e147 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Tue, 25 Aug 2009 14:14:17 +0200
Subject: [PATCH] Add script to run build commands in temporary directory

Python always compiles imported modules. By running these targets
in a temporary directory we don't pollute the source tree.

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 Makefile.am              | 29 ++++++++---------------------
 autotools/run-in-tempdir | 11 +++++++++++
 2 files changed, 19 insertions(+), 21 deletions(-)
 create mode 100755 autotools/run-in-tempdir

diff --git a/Makefile.am b/Makefile.am
index 7be1d5b57..86f946522 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -12,6 +12,7 @@ abs_top_srcdir = @abs_top_srcdir@
 ACLOCAL_AMFLAGS = -I autotools
 DOCBOOK_WRAPPER = $(top_srcdir)/autotools/docbook-wrapper
 BUILD_BASH_COMPLETION = $(top_srcdir)/autotools/build-bash-completion
+RUN_IN_TEMPDIR = $(top_srcdir)/autotools/run-in-tempdir
 REPLACE_VARS_SED = autotools/replace_vars.sed
 
 hypervisordir = $(pkgpythondir)/hypervisor
@@ -183,6 +184,7 @@ EXTRA_DIST = \
 	DEVNOTES \
 	pylintrc \
 	autotools/docbook-wrapper \
+	autotools/run-in-tempdir \
 	devel/upload.in \
 	$(docdot) \
 	$(docrst) \
@@ -274,17 +276,9 @@ doc/examples/%: doc/examples/%.in stamp-directories \
 		$(REPLACE_VARS_SED)
 	sed -f $(REPLACE_VARS_SED) < $< > $@
 
-doc/examples/bash_completion: $(BUILD_BASH_COMPLETION) \
+doc/examples/bash_completion: $(BUILD_BASH_COMPLETION) $(RUN_IN_TEMPDIR) \
 	lib/cli.py $(gnt_scripts) tools/burnin
-	TMPDIR=`mktemp -d ./buildtmpXXXXXX` && \
-	cp -r scripts lib tools $$TMPDIR && \
-	( \
-		CDIR=`pwd` && \
-		cd $$TMPDIR && \
-		mv lib ganeti && \
-		PYTHONPATH=. $$CDIR/$(BUILD_BASH_COMPLETION) > $$CDIR/$@; \
-	); \
-	rm -rf $$TMPDIR
+	PYTHONPATH=. $(RUN_IN_TEMPDIR) $(CURDIR)/$(BUILD_BASH_COMPLETION) > $@
 
 doc/%.png: doc/%.dot
 	@test -n "$(DOT)" || { echo 'dot' not found during configure; exit 1; }
@@ -388,18 +382,11 @@ stamp-directories: Makefile
 	touch $@
 
 .PHONY: apidoc
-apidoc:
+apidoc: epydoc.conf $(RUN_IN_TEMPDIR)
 	test -e doc/api || mkdir doc/api
-	TMPDIR=`mktemp -d ` && { \
-		cp -r scripts daemons lib $$TMPDIR && \
-		( \
-			CDIR=`pwd` && \
-			cd $$TMPDIR && \
-			mv lib ganeti && \
-			epydoc -v --conf $$CDIR/epydoc.conf -o $$CDIR/doc/api \
-		) ; \
-		rm -rf $$TMPDIR ; \
-	}
+	$(RUN_IN_TEMPDIR) epydoc -v \
+		--conf $(CURDIR)/epydoc.conf \
+		--output $(CURDIR)/doc/api
 
 .PHONY: TAGS
 TAGS:
diff --git a/autotools/run-in-tempdir b/autotools/run-in-tempdir
new file mode 100755
index 000000000..4c87dfc63
--- /dev/null
+++ b/autotools/run-in-tempdir
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -e
+
+tmpdir=$(mktemp -d -t gntbuild.XXXXXXXX)
+trap "rm -rf $tmpdir" EXIT
+
+cp -r scripts lib tools test $tmpdir
+mv $tmpdir/lib $tmpdir/ganeti
+
+cd $tmpdir && "$@"
-- 
GitLab