From 785eb131907c4a3e326598643fc9b72b96911278 Mon Sep 17 00:00:00 2001 From: Steve Reinhardt Date: Fri, 16 Nov 2007 20:10:33 -0800 Subject: [PATCH] Make EXTRAS work for relative directories. Also print a little feedback when processing EXTRAS. --HG-- extra : convert_revision : 9cb324b0d5bc60a3c98af6495f16415b529e4af2 --- SConstruct | 15 +++++++++++---- src/SConscript | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/SConstruct b/SConstruct index c87ac50f5..38fbe8d4c 100644 --- a/SConstruct +++ b/SConstruct @@ -68,6 +68,8 @@ import os from os.path import isdir, join as joinpath +import SCons + # Check for recent-enough Python and SCons versions. If your system's # default installation of Python is not recent enough, you can use a # non-default installation of the Python interpreter by either (1) @@ -472,14 +474,19 @@ all_isa_list.sort() all_cpu_list.sort() default_cpus.sort() -def ExtraPathValidator(key, val, env): +def PathListMakeAbsolute(val): + if not val: + return val + f = lambda p: os.path.abspath(os.path.expanduser(p)) + return ':'.join(map(f, val.split(':'))) + +def PathListAllExist(key, val, env): if not val: return paths = val.split(':') for path in paths: - path = os.path.expanduser(path) if not isdir(path): - raise AttributeError, "Invalid path: '%s'" % path + raise SCons.Errors.UserError("Path does not exist: '%s'" % path) sticky_opts.AddOptions( EnumOption('TARGET_ISA', 'Target ISA', 'alpha', all_isa_list), @@ -509,7 +516,7 @@ sticky_opts.AddOptions( 'Override the default PYTHONHOME for this system (use with caution)', '%s:%s' % (sys.prefix, sys.exec_prefix)), ('EXTRAS', 'Add Extra directories to the compilation', '', - ExtraPathValidator) + PathListAllExist, PathListMakeAbsolute) ) nonsticky_opts.AddOptions( diff --git a/src/SConscript b/src/SConscript index e66a725d3..8e6e1b45e 100644 --- a/src/SConscript +++ b/src/SConscript @@ -198,12 +198,12 @@ for root, dirs, files in os.walk(srcdir, topdown=True): extra_string = env['EXTRAS'] if extra_string and extra_string != '' and not extra_string.isspace(): for extra in extra_string.split(':'): - extra = os.path.expanduser(extra) - extra = os.path.normpath(extra) + print 'Adding', extra, 'to source directory list' env.Append(CPPPATH=[Dir(extra)]) for root, dirs, files in os.walk(extra, topdown=True): if 'SConscript' in files: subdir = root[len(os.path.dirname(extra))+1:] + print ' Found SConscript in', subdir build_dir = joinpath(env['BUILDDIR'], subdir) SConscript(joinpath(root, 'SConscript'), build_dir=build_dir)