From 64b5e307d23894d06c2f37de9c2d2e6094d0e6f4 Mon Sep 17 00:00:00 2001 From: Dan Hirsch <thequux@upstandinghackers.com> Date: Tue, 29 Oct 2013 17:35:37 -0400 Subject: [PATCH] Added install target --- SConstruct | 32 +++++++++++++++++++++++++++++++- src/SConscript | 11 +++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/SConstruct b/SConstruct index 2032613c..2a119d9d 100644 --- a/SConstruct +++ b/SConstruct @@ -1,8 +1,36 @@ # -*- python -*- import os import os.path +import sys + env = Environment(ENV = {'PATH' : os.environ['PATH']}) +vars = Variables(None, ARGUMENTS) +vars.Add(PathVariable('DESTDIR', "Root directory to install in (useful for packaging scripts)", None, PathVariable.PathIsDirCreate)) +vars.Add(PathVariable('prefix', "Where to install in the FHS", "/usr/local", PathVariable.PathAccept)) + +env = Environment(variables=vars) + +def calcInstallPath(*elements): + path = os.path.abspath(os.path.join(*map(env.subst, elements))) + if 'DESTDIR' in env: + path = os.path.join(env['DESTDIR'], os.path.relpath(path, start="/")) + return path + +rel_prefix = not os.path.isabs(env['prefix']) +env['prefix'] = os.path.abspath(env['prefix']) +if 'DESTDIR' in env: + env['DESTDIR'] = os.path.abspath(env['DESTDIR']) + if rel_prefix: + print >>sys.stderr, "--!!-- You used a relative prefix with a DESTDIR. This is probably not what you" + print >>sys.stderr, "--!!-- you want; files will be installed in" + print >>sys.stderr, "--!!-- %s" % (calcInstallPath("$prefix"),) + + +env['libpath'] = calcInstallPath("$prefix", "lib") +env['incpath'] = calcInstallPath("$prefix", "include", "hammer") +# TODO: Add pkgconfig + env.MergeFlags("-std=gnu99 -Wall -Wextra -Werror -Wno-unused-parameter -Wno-attributes -lrt") AddOption("--variant", @@ -35,8 +63,10 @@ if os.getenv("CC") == "clang": Export('env') - env.SConscript(["src/SConscript"], variant_dir='build/$VARIANT/src') env.SConscript(["examples/SConscript"], variant_dir='build/$VARIANT/examples') env.Command('test', 'build/$VARIANT/src/test_suite', 'env LD_LIBRARY_PATH=build/$VARIANT/src $SOURCE') + +env.Alias("install", "$libpath") +env.Alias("install", "$incpath") diff --git a/src/SConscript b/src/SConscript index 86360198..9b5c868c 100644 --- a/src/SConscript +++ b/src/SConscript @@ -3,6 +3,12 @@ Import('env') bindings = [] +dist_headers = [ + "hammer.h", + "allocator.h", + "glue.h" +] + parsers = ['parsers/%s.c'%s for s in ['action', 'and', @@ -55,13 +61,14 @@ tests = ['t_benchmark.c', libhammer_shared = env.SharedLibrary('hammer', parsers + backends + misc_hammer_parts) libhammer_static = env.StaticLibrary('hammer', parsers + backends + misc_hammer_parts) - +env.Install("$libpath", [libhammer_static, libhammer_shared]) +env.Install("$incpath", dist_headers) testenv = env.Clone() testenv.ParseConfig('pkg-config --cflags --libs glib-2.0') testenv.Append(LIBS=['hammer'], LIBPATH=['.']) testenv.Program('test_suite', tests + ['test_suite.c']) - + Export("libhammer_static libhammer_shared") for b in bindings: -- GitLab