summaryrefslogtreecommitdiff
path: root/tests.build
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2013-02-22 11:45:16 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2013-03-13 15:20:03 +0000
commita20a6bdf6ed75c6bd5c06a25961e0c6bec93bdd6 (patch)
tree4602606c5659ed54a79fc2f1e9e858fbf7b2516f /tests.build
parent18b162cd4556eb8c63767916cd376d87630db1b7 (diff)
downloadmorph-a20a6bdf6ed75c6bd5c06a25961e0c6bec93bdd6.tar.gz
Don't install bootstrapped chunks when building artifacts in other strata
When building a stratum artifact it's easy to only include chunks that were built in 'staging' mode. Constructing the staging area doesn't use that code path, though, so we need an extra hack to filter out those artifacts while building. It may be neater to express stratum build-depends as actual dependencies on the stratum artifact, rather than each of its constituent chunks as we do now.
Diffstat (limited to 'tests.build')
-rwxr-xr-xtests.build/bootstrap-mode.script127
-rw-r--r--tests.build/bootstrap-mode.stdout9
2 files changed, 116 insertions, 20 deletions
diff --git a/tests.build/bootstrap-mode.script b/tests.build/bootstrap-mode.script
index 02c74dfe..f4ff0a36 100755
--- a/tests.build/bootstrap-mode.script
+++ b/tests.build/bootstrap-mode.script
@@ -22,44 +22,135 @@
set -eu
-# Add a chunk in hello-stratum that is built in bootstrap mode
+# Create a fake 'compiler' chunk to go into build-essential stratum
+mkdir -p "$DATADIR/cc-repo"
+cd "$DATADIR/cc-repo"
+
+cat <<EOF > "morph-test-cc"
+#!/bin/sh
+echo "I'm a compiler!"
+EOF
+chmod +x morph-test-cc
+
+cat <<EOF > "stage1-cc.morph"
+{
+ "name": "stage1-cc",
+ "kind": "chunk",
+ "install-commands": [
+ "install -d \"\$DESTDIR\$PREFIX/bin\"",
+ "install -m 755 morph-test-cc \"\$DESTDIR\$PREFIX/bin/morph-test-cc\""
+ ]
+}
+EOF
+
+cat <<EOF > "cc.morph"
+{
+ "name": "cc",
+ "kind": "chunk",
+ "configure-commands": [
+ "[ -e ../tools/bin/morph-test-cc ]"
+ ],
+ "install-commands": [
+ "install -d \"\$DESTDIR\$PREFIX/bin\"",
+ "install -m 755 morph-test-cc \"\$DESTDIR\$PREFIX/bin/morph-test-cc\""
+ ]
+}
+EOF
+
+git init -q
+git add morph-test-cc cc.morph stage1-cc.morph
+git commit -q -m "Create compiler chunk"
+
+# Require 'cc' in hello-chunk. We should have the second version available
+# but *not* the first one.
+cd "$DATADIR/chunk-repo"
+git checkout -q farrokh
+cat <<EOF > "hello.morph"
+{
+ "name": "hello",
+ "kind": "chunk",
+ "configure-commands": [
+ "[ ! -e ../tools/bin/morph-test-cc ]",
+ "[ -e ../usr/bin/morph-test-cc ]"
+ ],
+ "build-commands": [
+ "../usr/bin/morph-test-cc > hello"
+ ],
+ "install-commands": [
+ "install -d \"\$DESTDIR\$PREFIX/bin\"",
+ "install hello \"\$DESTDIR\$PREFIX/bin/hello\""
+ ]
+}
+EOF
+git add hello.morph
+git commit -q -m "Make 'hello' require our mock compiler"
+
+# Add 'build-essential' stratum and make hello-stratum depend upon it. Only
+# the *second* 'cc' chunk should make it into the build-essential stratum
+# artifact, and neither should make it into the system.
cd "$DATADIR/morphs-repo"
-cat <<EOF > "hello-stratum.morph"
+cat <<EOF > "build-essential.morph"
{
- "name": "hello-stratum",
+ "name": "build-essential",
"kind": "stratum",
"chunks": [
{
- "name": "stage1-hello",
- "repo": "test:chunk-repo",
- "ref": "farrokh",
+ "name": "stage1-cc",
+ "repo": "test:cc-repo",
+ "ref": "master",
"build-depends": [],
- "build-mode": "bootstrap"
+ "build-mode": "bootstrap",
+ "prefix": "/tools"
},
{
+ "name": "cc",
+ "repo": "test:cc-repo",
+ "ref": "master",
+ "build-depends": [
+ "stage1-cc"
+ ],
+ "build-mode": "test"
+ }
+ ]
+}
+EOF
+
+cat <<EOF > "hello-stratum.morph"
+{
+ "name": "hello-stratum",
+ "kind": "stratum",
+ "build-depends": [
+ {
+ "morph": "build-essential",
+ "repo": "test:morphs-repo",
+ "ref": "master"
+ }
+ ],
+ "chunks": [
+ {
"name": "hello",
"repo": "test:chunk-repo",
"ref": "farrokh",
- "build-depends": [
- "stage1-hello"
- ],
+ "build-depends": [],
"build-mode": "test"
}
]
}
EOF
-git add hello-stratum.morph
-git commit -q -m "Add bootstrap chunk in hello-stratum"
-cd "$DATADIR/chunk-repo"
-git checkout -q farrokh
-sed -e "s/\"hello\"/\"stage1-hello\"/g" hello.morph > stage1-hello.morph
-git add stage1-hello.morph
-git commit -q -m "Add stage1-hello morphology for bootstrapping test"
+git add build-essential.morph hello-stratum.morph hello-system.morph
+git commit -q -m "Add fake build-essential stratum"
"$SRCDIR/scripts/test-morph" build-morphology \
test:morphs-repo master hello-system
-system=$(ls "$DATADIR/cache/artifacts/"*hello-system-rootfs)
+cd "$DATADIR/cache/artifacts"
+echo "build-essential stratum:"
+stratum=$(ls *.stratum.build-essential)
+cat $stratum | sed 's/[a-f0-9]\{64\}/xxxx/g'
+echo
+echo
+echo "hello-system:"
+system=$(ls *hello-system-rootfs)
tar tf "$system" | LC_ALL=C sort | sed '/^\.\/./s:^\./::'
diff --git a/tests.build/bootstrap-mode.stdout b/tests.build/bootstrap-mode.stdout
index 3d5201ee..329cdd78 100644
--- a/tests.build/bootstrap-mode.stdout
+++ b/tests.build/bootstrap-mode.stdout
@@ -1,10 +1,15 @@
+build-essential stratum:
+["xxxx.chunk.cc"]
+
+hello-system:
./
baserock/
baserock/hello-stratum.meta
baserock/hello-system-rootfs.meta
baserock/hello.meta
-bin/
-bin/hello
etc/
etc/fstab
etc/os-release
+usr/
+usr/bin/
+usr/bin/hello