summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2013-01-28 14:57:39 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2013-03-13 15:20:02 +0000
commitb7f69986034afef8a792839fac601caa0f20d55a (patch)
tree1ff1f9b9b02ee0e68f54ab91dbf6203cc31ebd8c
parent79a6f05bbf70a4fa10b1b426ef9f223d5cbaf3ee (diff)
downloadmorph-b7f69986034afef8a792839fac601caa0f20d55a.tar.gz
Remove features used by old bootstrap method
That means that bootstrapping Baserock is currently not possible with this branch of Morph, but there's no reason it cannot be bootstrapped using an older version of Morph instead.
-rwxr-xr-xmorphlib/app.py56
-rw-r--r--morphlib/buildcommand.py26
-rw-r--r--morphlib/buildenvironment.py14
-rw-r--r--morphlib/buildenvironment_tests.py32
-rw-r--r--morphlib/builder2.py3
-rw-r--r--morphlib/source.py2
-rwxr-xr-xtests.as-root/setup1
-rwxr-xr-xtests.branching/setup3
-rwxr-xr-xtests.deploy/setup1
-rwxr-xr-xtests.merging/setup3
-rwxr-xr-xtests/setup3
11 files changed, 53 insertions, 91 deletions
diff --git a/morphlib/app.py b/morphlib/app.py
index 87710ee5..c8b9b911 100755
--- a/morphlib/app.py
+++ b/morphlib/app.py
@@ -105,16 +105,7 @@ class Morph(cliapp.Application):
default=None,
group=group_advanced)
- # Build Options
group_build = 'Build Options'
- self.settings.boolean(['bootstrap'],
- 'build stuff in bootstrap mode; this is '
- 'DANGEROUS and will install stuff on your '
- 'system',
- group=group_build)
- self.settings.boolean(['keep-path'],
- 'do not touch the PATH environment variable',
- group=group_build)
self.settings.integer(['max-jobs'],
'run at most N parallel jobs with make (default '
'is to a value based on the number of CPUs '
@@ -135,20 +126,6 @@ class Morph(cliapp.Application):
'always push temporary build branches to the '
'remote repository',
group=group_build)
- self.settings.boolean(['staging-chroot'],
- 'build things in an isolated chroot '
- '(default: true)',
- group=group_build)
- self.settings.string_list(['staging-filler'],
- 'use FILE as contents of build chroot',
- metavar='FILE',
- group=group_build)
- self.settings.string(['target-cflags'],
- 'inject additional CFLAGS into the environment '
- 'that is used to build chunks',
- metavar='CFLAGS',
- default='',
- group=group_build)
self.settings.string(['tempdir'],
'temporary directory to use for builds '
'(this is separate from just setting $TMPDIR '
@@ -159,13 +136,36 @@ class Morph(cliapp.Application):
metavar='DIR',
default=os.environ.get('TMPDIR'),
group=group_build)
+
+ # Would be better to have a separate tool to cross-bootstrap
+ # because it's completely outside normal Morph usage
+ group_bootstrap = 'Bootstrap Options'
+ self.settings.string(['target-cflags'],
+ 'inject additional CFLAGS into the environment '
+ 'that is used to build chunks',
+ metavar='CFLAGS',
+ default='',
+ group=group_bootstrap)
self.settings.string(['toolchain-target'],
'set the TOOLCHAIN_TARGET variable which is used '
'in some chunks to determine which architecture '
'to build tools for',
metavar='TOOLCHAIN_TARGET',
default=defaults['toolchain-target'],
- group=group_build)
+ group=group_bootstrap)
+
+ # These cannot be removed just yet because existing morph.conf files
+ # would fail to parse.
+ group_obsolete = 'Obsolete Options'
+ self.settings.boolean(['staging-chroot'],
+ 'build things in an isolated chroot '
+ '(default: true)',
+ default=True,
+ group=group_obsolete)
+ self.settings.string_list(['staging-filler'],
+ 'use FILE as contents of build chroot',
+ metavar='FILE',
+ group=group_obsolete)
def check_time(self):
# Check that the current time is not far in the past.
@@ -179,6 +179,14 @@ class Morph(cliapp.Application):
def process_args(self, args):
self.check_time()
+ # Handle obsolete options
+ if self.settings['staging-chroot'] is not True:
+ raise cliapp.AppException(
+ 'The "staging-chroot" option has been set to False. This '
+ 'option is obsolete and should be left as the default (True).')
+ if self.settings['staging-filler'] is not None:
+ logging.warning('Use of a staging filler is deprecated.')
+
# Combine the aliases into repo-alias before passing on to normal
# command processing. This means everything from here on down can
# treat settings['repo-alias'] as the sole source of prefixes for git
diff --git a/morphlib/buildcommand.py b/morphlib/buildcommand.py
index dfacd760..4200dc0e 100644
--- a/morphlib/buildcommand.py
+++ b/morphlib/buildcommand.py
@@ -219,18 +219,14 @@ class BuildCommand(object):
deps = self.get_recursive_deps(artifact)
self.cache_artifacts_locally(deps)
staging_area = self.create_staging_area(artifact)
- if self.app.settings['staging-chroot']:
- if artifact.source.morphology.needs_staging_area:
- self.install_fillers(staging_area)
- self.install_chunk_artifacts(staging_area,
- deps, artifact)
- morphlib.builder2.ldconfig(self.app.runcmd,
- staging_area.tempdir)
+ if artifact.source.morphology.needs_staging_area:
+ self.install_fillers(staging_area)
+ self.install_chunk_artifacts(staging_area,
+ deps, artifact)
+ morphlib.builder2.ldconfig(self.app.runcmd,
+ staging_area.tempdir)
self.build_and_cache(staging_area, artifact)
- if self.app.settings['bootstrap']:
- self.install_chunk_artifacts(staging_area,
- (artifact,))
self.remove_staging_area(staging_area)
self.app.status(msg='%(kind)s %(name)s is cached at %(cachepath)s',
kind=artifact.source.morphology['kind'],
@@ -319,12 +315,8 @@ class BuildCommand(object):
def create_staging_area(self, artifact):
'''Create the staging area for building a single artifact.'''
- if self.app.settings['staging-chroot']:
- staging_root = tempfile.mkdtemp(dir=self.app.settings['tempdir'])
- staging_temp = staging_root
- else:
- staging_root = '/'
- staging_temp = tempfile.mkdtemp(dir=self.app.settings['tempdir'])
+ staging_root = tempfile.mkdtemp(dir=self.app.settings['tempdir'])
+ staging_temp = staging_root
self.app.status(msg='Creating staging area')
staging_area = morphlib.stagingarea.StagingArea(self.app,
@@ -387,5 +379,5 @@ class BuildCommand(object):
setup_mounts = self.app.settings['staging-chroot']
builder = morphlib.builder2.Builder(
self.app, staging_area, self.lac, self.rac, self.lrc,
- self.build_env, self.app.settings['max-jobs'], setup_mounts)
+ self.build_env, self.app.settings['max-jobs'], True)
return builder.build_and_cache(artifact)
diff --git a/morphlib/buildenvironment.py b/morphlib/buildenvironment.py
index d9e3210f..57270414 100644
--- a/morphlib/buildenvironment.py
+++ b/morphlib/buildenvironment.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -44,7 +44,6 @@ class BuildEnvironment():
# copy a set of white-listed variables from the original env
copied_vars = dict.fromkeys([
- 'BOOTSTRAP_TOOLS',
'DISTCC_HOSTS',
'LD_PRELOAD',
'LD_LIBRARY_PATH',
@@ -62,10 +61,6 @@ class BuildEnvironment():
if copied_vars[name] is not None:
env[name] = copied_vars[name]
- if settings['bootstrap'] or not settings['staging-chroot']:
- if 'TMPDIR' in self._osenv:
- env['TMPDIR'] = self._osenv['TMPDIR']
-
env['TERM'] = self._override_term
env['SHELL'] = self._override_shell
env['USER'] = \
@@ -74,15 +69,12 @@ class BuildEnvironment():
env['LC_ALL'] = self._override_locale
env['HOME'] = self._override_home
- if settings['keep-path'] or settings['bootstrap']:
- env['PATH'] = path
- else:
- env['PATH'] = self._default_path
+ env['PATH'] = self._default_path
env['TOOLCHAIN_TARGET'] = settings['toolchain-target']
env['CFLAGS'] = settings['target-cflags']
env['PREFIX'] = settings['prefix']
- env['BOOTSTRAP'] = 'true' if settings['bootstrap'] else 'false'
+ env['BOOTSTRAP'] = 'false'
if not settings['no-ccache']:
env['PATH'] = ('%s:%s' % (self._ccache_path, env['PATH']))
# FIXME: we should set CCACHE_BASEDIR so any objects that refer to their
diff --git a/morphlib/buildenvironment_tests.py b/morphlib/buildenvironment_tests.py
index 61844c19..a55cd5ac 100644
--- a/morphlib/buildenvironment_tests.py
+++ b/morphlib/buildenvironment_tests.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -24,14 +24,11 @@ class BuildEnvironmentTests(unittest.TestCase):
def setUp(self):
self.settings = {
- 'keep-path': False,
- 'bootstrap': False,
'toolchain-target': '%s-baserock-linux-gnu' % morphlib.util.arch(),
'target-cflags': '',
'prefix': '/usr',
'no-ccache': True,
- 'no-distcc': True,
- 'staging-chroot': False,
+ 'no-distcc': True
}
self.fake_env = {
'PATH': '/fake_bin',
@@ -48,39 +45,16 @@ class BuildEnvironmentTests(unittest.TestCase):
self.assertEqual(buildenv.arch, 'noarch')
def test_sets_default_path(self):
- self.settings['keep-path'] = False
- self.settings['bootstrap'] = False
olddefaultpath = buildenvironment.BuildEnvironment._default_path
buildenvironment.BuildEnvironment._default_path = self.default_path
buildenv = buildenvironment.BuildEnvironment(self.settings)
buildenvironment.BuildEnvironment._default_path = olddefaultpath
self.assertTrue(self.default_path in buildenv.env['PATH'])
- def test_uses_env_path_with_keep_path(self):
- self.settings['keep-path'] = True
-
- old_osenv = buildenvironment.BuildEnvironment._osenv
- buildenvironment.BuildEnvironment._osenv = self.fake_env
- buildenv = buildenvironment.BuildEnvironment(self.settings)
- buildenvironment.BuildEnvironment._osenv = old_osenv
-
- self.assertEqual(buildenv.env['PATH'], self.fake_env['PATH'])
-
- def test_uses_env_path_with_bootstrap(self):
- self.settings['bootstrap'] = True
-
- old_osenv = buildenvironment.BuildEnvironment._osenv
- buildenvironment.BuildEnvironment._osenv = self.fake_env
- buildenv = buildenvironment.BuildEnvironment(self.settings)
- buildenvironment.BuildEnvironment._osenv = old_osenv
-
- self.assertEqual(buildenv.env['PATH'], self.fake_env['PATH'])
-
def test_copies_whitelist_vars(self):
env = self.fake_env
safe = {
'DISTCC_HOSTS': 'example.com:example.co.uk',
- 'TMPDIR': '/buildenv/tmp/dir',
'LD_PRELOAD': '/buildenv/lib/libbuildenv.so',
'LD_LIBRARY_PATH': '/buildenv/lib:/buildenv/lib64',
'FAKEROOTKEY': 'b011de73',
@@ -120,8 +94,6 @@ class BuildEnvironmentTests(unittest.TestCase):
self.settings['target-cflags'])
self.assertEqual(buildenv.env['PREFIX'],
self.settings['prefix'])
- self.assertEqual(buildenv.env['BOOTSTRAP'],
- 'true' if self.settings['bootstrap'] else 'false')
def test_ccache_vars_set(self):
self.settings['no-ccache'] = False
diff --git a/morphlib/builder2.py b/morphlib/builder2.py
index 73745d66..6f7836e3 100644
--- a/morphlib/builder2.py
+++ b/morphlib/builder2.py
@@ -54,6 +54,9 @@ def ldconfig(runcmd, rootdir): # pragma: no cover
'''
+ # FIXME: use the version in ROOTDIR, since even in
+ # bootstrap it will now always exist due to being part of build-essential
+
conf = os.path.join(rootdir, 'etc', 'ld.so.conf')
if os.path.exists(conf):
logging.debug('Running ldconfig for %s' % rootdir)
diff --git a/morphlib/source.py b/morphlib/source.py
index b536cbdf..99b0a993 100644
--- a/morphlib/source.py
+++ b/morphlib/source.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
diff --git a/tests.as-root/setup b/tests.as-root/setup
index 03a438e0..a85507e0 100755
--- a/tests.as-root/setup
+++ b/tests.as-root/setup
@@ -200,7 +200,6 @@ cat <<EOF > "$DATADIR/morph.conf"
repo-alias = test=file://$DATADIR/#file://$DATADIR/
cachedir = $DATADIR/cache
log = $DATADIR/morph.log
-keep-path = true
no-distcc = true
quiet = true
log = /tmp/morph.log
diff --git a/tests.branching/setup b/tests.branching/setup
index c0dfd969..1fa5b8e3 100755
--- a/tests.branching/setup
+++ b/tests.branching/setup
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -32,7 +32,6 @@ cat <<EOF > "$DATADIR/morph.conf"
repo-alias = test=file://$DATADIR/%s#file://$DATADIR/%s
cachedir = $DATADIR/workspace/.morph/cache
log = $DATADIR/morph.log
-keep-path = true
no-distcc = true
quiet = true
EOF
diff --git a/tests.deploy/setup b/tests.deploy/setup
index 1065849d..b0054fa5 100755
--- a/tests.deploy/setup
+++ b/tests.deploy/setup
@@ -196,7 +196,6 @@ cat <<EOF > "$DATADIR/morph.conf"
repo-alias = test=file://$DATADIR/#file://$DATADIR/
cachedir = $DATADIR/cache
log = $DATADIR/morph.log
-keep-path = true
no-distcc = true
quiet = true
log = /tmp/morph.log
diff --git a/tests.merging/setup b/tests.merging/setup
index c0dfd969..1fa5b8e3 100755
--- a/tests.merging/setup
+++ b/tests.merging/setup
@@ -1,5 +1,5 @@
#!/bin/bash
-# Copyright (C) 2012 Codethink Limited
+# Copyright (C) 2012-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -32,7 +32,6 @@ cat <<EOF > "$DATADIR/morph.conf"
repo-alias = test=file://$DATADIR/%s#file://$DATADIR/%s
cachedir = $DATADIR/workspace/.morph/cache
log = $DATADIR/morph.log
-keep-path = true
no-distcc = true
quiet = true
EOF
diff --git a/tests/setup b/tests/setup
index 25472dc7..50fd5bd4 100755
--- a/tests/setup
+++ b/tests/setup
@@ -10,7 +10,7 @@
# The stratum repository contains a single branch, "master", with a
# stratum and a system morphology that include the chunk above.
#
-# Copyright (C) 2011, 2012 Codethink Limited
+# Copyright (C) 2011-2013 Codethink Limited
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -128,7 +128,6 @@ cat <<EOF > "$DATADIR/morph.conf"
repo-alias = test=file://$DATADIR/%s#file://$DATADIR/%s
cachedir = $DATADIR/cache
log = $DATADIR/morph.log
-keep-path = true
no-distcc = true
quiet = true
EOF