| #!/usr/bin/env bash |
| |
| # Copyright 2021 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| # This script updates the list of external dependencies in imports.go, which |
| # allows `go mod` to operate in that directory to update and vendor those |
| # dependencies. |
| |
| set -euo pipefail |
| |
| cd "$(dirname "$0")" |
| |
| source ../../tools/devshell/lib/vars.sh |
| |
| UPDATE=0 |
| while getopts "u" flag |
| do |
| case "${flag}" in |
| u) |
| UPDATE=1 |
| ;; |
| *) |
| echo "Invalid option: $flag" |
| exit 1 |
| ;; |
| esac |
| done |
| |
| # Create various symlinks needed for the `go list` call below. |
| fx-command-run setup-go |
| |
| function cleanup() { |
| rm "$COBALT_DST" |
| find "$TMP" -maxdepth 1 -mindepth 1 -exec mv {} . \; |
| } |
| trap cleanup EXIT |
| |
| # Escape third_party/go.mod. |
| readonly COBALT_DST=$FUCHSIA_DIR/cobalt |
| ln -s "$FUCHSIA_DIR"/third_party/cobalt "$COBALT_DST" |
| |
| # Move jiri-managed repositories out of the module. |
| TMP=$(mktemp -d) |
| if ignored=$(git check-ignore ./*); then |
| echo "$ignored" | xargs --no-run-if-empty -I % mv % "$TMP"/% |
| fi |
| |
| GOROOTBIN=$(fx-command-run go env GOROOT)/bin |
| GO=$GOROOTBIN/go |
| GOFMT=$GOROOTBIN/gofmt |
| |
| IMPORTS=() |
| for dir in $FUCHSIA_DIR $FUCHSIA_DIR/cobalt $FUCHSIA_DIR/third_party/syzkaller/sys/syz-sysgen; do |
| while IFS='' read -r line; do IMPORTS+=("$line"); done < <(cd "$dir" && git ls-files -- \ |
| '*.go' ':!third_party/golibs/vendor' | |
| xargs dirname | |
| sort | uniq | |
| sed 's|^|./|' | |
| xargs "$GO" list -tags deadlock_detection -mod=readonly -e -f \ |
| '{{join .Imports "\n"}}{{"\n"}}{{join .TestImports "\n"}}{{"\n"}}{{join .XTestImports "\n"}}' | |
| grep -vF go.fuchsia.dev/fuchsia/ | |
| # Apparently we generate these normally checked-in files? |
| grep -vF 'go.chromium.org/luci' | |
| grep -F . | |
| sort | uniq | |
| xargs "$GO" list -mod=readonly -e -f \ |
| '{{if not .Goroot}}_ "{{.ImportPath}}"{{end}}' | |
| grep -vF github.com/google/syzkaller/ | |
| sort | uniq) |
| done |
| |
| IMPORTS_STR=$( |
| IFS=$'\n' |
| echo "${IMPORTS[*]}" |
| ) |
| |
| THIS_SCRIPT=$(realpath --relative-to="$FUCHSIA_DIR" "$(basename "$0")") |
| printf '// Copyright 2021 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // Code generated by %s; DO NOT EDIT. |
| |
| package imports |
| |
| import (\n%s\n)' "//$THIS_SCRIPT" "$IMPORTS_STR" | $GOFMT -s >imports.go |
| |
| if [ $UPDATE -eq 1 ]; then |
| # The following two lines used to be in the opposite order, which incorrectly |
| # caused `go get -u` to fetch gvisor from the default branch instead of the |
| # go branch. |
| $GO get -u gvisor.dev/gvisor@go |
| $GO get -u |
| else |
| $GO get |
| fi |
| |
| $GO mod tidy |
| $GO mod vendor |
| |
| "${PREBUILT_PYTHON3_DIR}/bin/python3.8" update_sources.py \ |
| --build-file='BUILD.gn' \ |
| --golibs-dir='.' > "${TMP}/BUILD.gn" |
| mv "${TMP}/BUILD.gn" 'BUILD.gn' |
| "${PREBUILT_GN}" format 'BUILD.gn' |