summaryrefslogtreecommitdiff
path: root/morphlib/builder.py
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-02-10 17:27:32 +0000
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-02-11 13:46:26 +0000
commite0fb97f08156af97ec2341ec8061fe514ae358e5 (patch)
tree50957b235a7dcdcc71e230bd43ab58eefcab3cae /morphlib/builder.py
parent63cab3e0e2f550a0bfe470d018063a8b91a759bd (diff)
downloadmorph-e0fb97f08156af97ec2341ec8061fe514ae358e5.tar.gz
Set environment variables needed to build in a different prefix.
This only includes PKG_CONFIG_PATH and LD_LIBRARY_PATH at the moment.
Diffstat (limited to 'morphlib/builder.py')
-rw-r--r--morphlib/builder.py40
1 files changed, 21 insertions, 19 deletions
diff --git a/morphlib/builder.py b/morphlib/builder.py
index 3de5b67e..1fe36fc7 100644
--- a/morphlib/builder.py
+++ b/morphlib/builder.py
@@ -64,6 +64,7 @@ class BlobBuilder(object):
self.destdir = None
self.prefixdir = None
self.staging = None
+ self.stagingprefix = None
self.settings = None
self.real_msg = None
self.cache_prefix = None
@@ -157,9 +158,10 @@ class BlobBuilder(object):
for key, value in kwargs.iteritems():
meta[key] = value
- filename = os.path.join(self.prefixdir, '%s.meta' % blob_name)
- if not os.path.exists(self.prefixdir):
- os.mkdir(self.prefixdir)
+ dirname = os.path.join(self.destdir, 'baserock')
+ filename = os.path.join(dirname, '%s.meta' % blob_name)
+ if not os.path.exists(dirname):
+ os.mkdir(dirname)
with open(filename, 'w') as f:
json.dump(meta, f, indent=4)
@@ -261,6 +263,19 @@ class ChunkBuilder(BlobBuilder):
if copied_vars[name] is not None:
self.ex.env[name] = copied_vars[name]
+ # set and extend certain variables to support arbitrary
+ # install prefixes such as /usr/local
+ self.ex.env['PREFIX'] = self.settings['prefix']
+ extended_paths = {
+ 'PKG_CONFIG_PATH':
+ os.path.join(self.stagingprefix, 'lib', 'pkgconfig'),
+ 'LD_LIBRARY_PATH':
+ os.path.join(self.stagingprefix, 'lib'),
+ }
+ for varname, pathname in extended_paths.iteritems():
+ value = self.ex.env.get(varname, '')
+ self.ex.env[varname] = '%s:%s' % (pathname, value)
+
self.ex.env['TERM'] = 'dumb'
self.ex.env['SHELL'] = '/bin/sh'
self.ex.env['USER'] = \
@@ -277,14 +292,6 @@ class ChunkBuilder(BlobBuilder):
for x in bindirs)
self.ex.env['PATH'] = path
- self.ex.env['PREFIX'] = self.settings['prefix']
- self.ex.env['PKG_CONFIG_PATH'] = ('%s:%s' %
- (os.path.join(self.prefixdir, 'lib', 'pkgconfig'),
- self.ex.env['PKG_CONFIG_PATH']))
- self.ex.env['LD_LIBRARY_PATH'] = ('%s:%s' %
- (os.path.join(self.prefixdir, 'lib'),
- self.ex.env['LD_LIBRARY_PATH']))
-
self.ex.env['WORKAREA'] = self.tempdir.dirname
self.ex.env['DESTDIR'] = self.destdir + '/'
self.ex.env['TOOLCHAIN_TARGET'] = \
@@ -650,15 +657,10 @@ class Builder(object):
builder.builddir = self.tempdir.join('%s.build' % blob.morph.name)
builder.destdir = self.tempdir.join('%s.inst' % blob.morph.name)
- if self.settings['prefix'] != '/usr':
- relative_prefix = self.settings['prefix']
- if relative_prefix.startswith('/'):
- relative_prefix = relative_prefix[1:]
- builder.prefixdir = os.path.join(
- builder.destdir, relative_prefix, 'baserock')
- else:
- builder.prefixdir = os.path.join(builder.destdir, 'baserock')
+ builder.prefixdir = self.settings['prefix']
builder.staging = self.tempdir.join('staging')
+ builder.stagingprefix = os.path.join(
+ builder.staging, os.path.relpath(builder.prefixdir, '/'))
builder.settings = self.settings
builder.real_msg = self.msg
builder.cache_prefix = self.cachedir.name(cache_id)