| #!/usr/bin/env bash | |
| # Copyright 2020 The Bazel Authors. All rights reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # Packages the builtins bzl files as a zip, while preserving their directory | |
| # structure and expanding any symlinks. | |
| # | |
| # Usage: | |
| # zip_builtins.sh zip output builtins_root files... | |
| set -euo pipefail | |
| origdir="$(pwd)" | |
| # the "zip" command to use; system "zip" if empty | |
| if [ -z "$1" ]; then | |
| zip="zip" | |
| else | |
| zip=$origdir/$1; | |
| fi; shift | |
| output=$origdir/$1; shift # zip file to write | |
| builtins_root=$1; shift # root-relative path to builtins_bzl source dir | |
| # "$@" contains the paths of the files to archive. They must all be under the | |
| # source root (no generated files as inputs). | |
| TMPDIR="$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXXXX")" | |
| trap "rm -rf $TMPDIR" EXIT | |
| # Do the cp in origdir so $@ resolves. We'd like to use cp --parents, but macOS | |
| # doesn't have that flag, so break it out into a loop. | |
| mkdir -p "$TMPDIR/staging" | |
| for src in "$@"; do | |
| dst="$TMPDIR/staging/$src" | |
| mkdir -p $(dirname "$dst") | |
| # Make certain to expand any symlinked files (-L). | |
| cp -L "$src" "$dst" | |
| done | |
| cd "$TMPDIR" | |
| # Strip the dir prefix leading up to the builtins root. | |
| mv "staging/$builtins_root" builtins_bzl | |
| # The zip step must take place while cwd is tmpdir, so the paths in the zipfile | |
| # are relative to tmpdir. | |
| # | |
| # For determinism, sort the files and zero out their timestamps before zipping. | |
| find builtins_bzl -type f -print0 | xargs -0 touch -t 198001010000.00 | |
| find builtins_bzl -type f | sort | "$zip" -qDX0r@ "$output" builtins_bzl |