summaryrefslogtreecommitdiff
path: root/tests.build/bootstrap-mode.script
diff options
context:
space:
mode:
Diffstat (limited to 'tests.build/bootstrap-mode.script')
-rwxr-xr-xtests.build/bootstrap-mode.script127
1 files changed, 109 insertions, 18 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:^\./::'