From 2cead893fc6dd31416cfd18f8755b71acaf477c4 Mon Sep 17 00:00:00 2001
From: Dan Hirsch <thequux@upstandinghackers.com>
Date: Fri, 22 Nov 2013 19:44:30 -0600
Subject: [PATCH] Allow in-place build via scons --in-place

---
 .gitignore |  1 +
 SConstruct | 19 +++++++++++++++----
 2 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/.gitignore b/.gitignore
index 16fdda1..721dcf9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -21,4 +21,5 @@ Session.vim
 cscope.out
 build/
 .sconsign.dblite
+*.os
 *.pyc
diff --git a/SConstruct b/SConstruct
index c46c090..551f89e 100644
--- a/SConstruct
+++ b/SConstruct
@@ -53,7 +53,12 @@ AddOption("--coverage",
           action="store_true",
           help="Build with coverage instrumentation")
 
-env['BUILDDIR'] = 'build/$VARIANT'
+AddOption("--in-place",
+          dest="in_place",
+          default=False,
+          action="store_true",
+          help="Build in-place, rather than in the build/<variant> tree")
+
 
 dbg = env.Clone(VARIANT='debug')
 dbg.Append(CCFLAGS=['-g'])
@@ -86,10 +91,16 @@ env["ENV"].update(x for x in os.environ.items() if x[0].startswith("CCC_"))
 
 Export('env')
 
-env.SConscript(["src/SConscript"], variant_dir='build/$VARIANT/src')
-env.SConscript(["examples/SConscript"], variant_dir='build/$VARIANT/examples')
+if not GetOption("in_place"):
+    env['BUILD_BASE'] = 'build/$VARIANT'
+    env.SConscript(["src/SConscript"], variant_dir='$BUILD_BASE/src')
+    env.SConscript(["examples/SConscript"], variant_dir='$BUILD_BASE/examples')
+else:
+    env['BUILD_BASE'] = '.'
+    env.SConscript(["src/SConscript"])
+    env.SConscript(["examples/SConscript"])
 
-env.Command('test', 'build/$VARIANT/src/test_suite', 'env LD_LIBRARY_PATH=build/$VARIANT/src $SOURCE')
+env.Command('test', '$BUILD_BASE/src/test_suite', 'env LD_LIBRARY_PATH=$BUILD_BASE/src $SOURCE')
 
 env.Alias("install", "$libpath")
 env.Alias("install", "$incpath")
-- 
GitLab