#! /usr/bin/env bash # Stage or queue build2 packages and distributions. # # -b # Packages baseutils/mingw. # -q # Put packages into the queue instead of staging. # -p # Regenerate build2-toolchain into queue's 0/ and update the checksums file # but don't do anything else. # usage="usage: etc/stage" rsync_ops="--progress" owd=`pwd` trap "{ cd $owd; exit 1; }" ERR set -o errtrace # Trap in functions. function info () { echo "$*" 1>&2; } function error () { info "$*"; exit 1; } v="$(sed -n -re 's/^version: ([^.]+\.[^.]+\.[^-]+(-[ab]\.[^.+]+)?).*$/\1/p' build2-toolchain/manifest)" vf="$(echo $v | sed -re 's/^([^.]*)\.([^.]*)\.([^-]*).*$/\1.\2.\3/')" # Final. if [ -z "$v" -o -z "$vf" ]; then error "unable to extract version from build2-toolchain/version" fi mode= base= dist_src=staging/0 dist_dst=stage.build2.org:/var/www/stage.build2.org/public/0 while [ $# -gt 0 ]; do case $1 in -b) base=true shift ;; -q) mode=-q dist_src=cppget.org/0 dist_dst=build2.org:/var/www/download.build2.org/public/queue shift ;; -p) mode=-p dist_src=cppget.org/0 dist_dst=example.org/not-used shift ;; *) error "unexpected $1" ;; esac done mkdir -p "$dist_src/$v" # Generate baseutils if requested. # if [ -n "$base" ]; then cd private/baseutils echo "$v" >version ./pkdist -n baseutils -d "$vf" -p "$vf/list-i686" \ -c control -s ./pkpost \ -z "/tmp/build2-baseutils-$v-i686-windows" ./pkdist -n baseutils -d "$vf" -p "$vf/list-x86_64" \ -c control -s ./pkpost \ -z "/tmp/build2-baseutils-$v-x86_64-windows" ./pkdist -n mingw -d "mingw-$vf" -p "mingw-$vf/list-i686" \ -c ./control-mingw-i686 -s ./pkpost-mingw -u http://repo.msys2.org/mingw \ -x "/tmp/build2-mingw-$v-i686-windows" ./pkdist -n mingw -d "mingw-$vf" -p "mingw-$vf/list-x86_64" \ -c ./control-mingw-x86_64 -s ./pkpost-mingw -u http://repo.msys2.org/mingw \ -x "/tmp/build2-mingw-$v-x86_64-windows" cd ../.. mv "/tmp/build2-baseutils-$v-i686-windows.zip" "$dist_src/$v/" mv "/tmp/build2-baseutils-$v-i686-windows.zip.sha256" "$dist_src/$v/" mv "/tmp/build2-baseutils-$v-x86_64-windows.zip" "$dist_src/$v/" mv "/tmp/build2-baseutils-$v-x86_64-windows.zip.sha256" "$dist_src/$v/" mv "/tmp/build2-mingw-$v-i686-windows.tar.xz" "$dist_src/$v/" mv "/tmp/build2-mingw-$v-i686-windows.tar.xz.sha256" "$dist_src/$v/" mv "/tmp/build2-mingw-$v-x86_64-windows.tar.xz" "$dist_src/$v/" mv "/tmp/build2-mingw-$v-x86_64-windows.tar.xz.sha256" "$dist_src/$v/" fi mkdir -p /tmp/dist # Dist build2-toolchain. # # @@ .sha256 sums: make sure they don't contain full paths! # Cleanup old stuff. # rm -f "$owd/$dist_src/$v"/build2-toolchain-* b "dist(build2-toolchain-default/)" \ "config.dist.archives=$owd/$dist_src/$v/tar.xz $owd/$dist_src/$v/tar.gz" cd "$owd/$dist_src/$v/" tv="$(echo build2-toolchain-*.tar.gz | sed -re 's/build2-toolchain-(.+).tar.gz/\1/')" sha256sum -b "build2-toolchain-$tv.tar.gz" >"build2-toolchain-$tv.tar.gz.sha256" sha256sum -b "build2-toolchain-$tv.tar.xz" >"build2-toolchain-$tv.tar.xz.sha256" cd "$owd" # Prepare the toolchain.sha256 checksums file. # function checksum_line () # { local s s="$(sed -n -re 's/^([^ ]+) .+$/\1/p' "$dist_src/$v/$1.sha256")" echo "$s *$v/$1" >>"$dist_src/toolchain.sha256" } echo "# $tv" >"$dist_src/toolchain.sha256" checksum_line "build2-toolchain-$tv.tar.xz" # Must be first. checksum_line "build2-baseutils-$v-x86_64-windows.zip" checksum_line "build2-mingw-$v-x86_64-windows.tar.xz" #checksum_line "build2-baseutils-$v-i686-windows.zip" #checksum_line "build2-mingw-$v-i686-windows.tar.xz" if [ "$mode" = "-p" ]; then exit 0 fi # Sync the distribution. # # Note that we do the distribution first so that the toolchain changes are # visible before package changes. This is relied upon by the Build OS monitor. # info "Press Enter to start distribution upload" read rsync -v -rlpt -c --copy-unsafe-links --prune-empty-dirs --delete-after \ $rsync_ops "$dist_src/" "$dist_dst/" # Distribute packages, regenerate and sync the repository. # etc/stage-pkg -c $mode -d apr packaging/apr/libapr1 etc/stage-pkg -c $mode -d postgresql packaging/postgresql/libpq etc/stage-pkg -c $mode -d sqlite \ packaging/sqlite/libsqlite3 \ packaging/sqlite/sqlite3 etc/stage-pkg -c $mode -d studxml ../studxml/libstudxml etc/stage-pkg -c $mode -d odb \ ../odb/builds/default/libodb \ ../odb/builds/default/libodb-sqlite \ ../odb/builds/default/libodb-pgsql etc/stage-pkg -c $mode build2 \ libbutl \ build2 \ libbpkg \ bpkg \ libbbot \ brep \ bbot \ libstd-modules