diff options
Diffstat (limited to 'tests.build/bootstrap-mode.script')
-rwxr-xr-x | tests.build/bootstrap-mode.script | 127 |
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:^\./::' |