cri-o/hack/find-godeps.sh
Dan Williams 95846211c9 build: find dependencies for Go executables
To ensure that changing a dependency source file actually triggers
a rebuild of the core binaries when you type 'make', find their
dependencies and add them to the makefile's target dependencies.

Signed-off-by: Dan Williams <dcbw@redhat.com>
2017-03-31 20:45:21 -05:00

41 lines
1.2 KiB
Bash
Executable file

#!/bin/bash
#
# $1 - base path of the source tree
# $2 - subpath under $1 to find *.go dependencies for
# $3 - package name (eg, github.com/organization/project)
set -o errexit
set -o nounset
set -o pipefail
# might be called from makefile before basepath is set up; just return
# empty deps. The make target will then ensure that GOPATH is set up
# correctly, and go build will build everything the first time around
# anyway. Next time we get here everything will be fine.
if [ ! -d "$1/$2" ]; then
exit 0
fi
function find-deps() {
local basepath=$1
local srcdir=$2
local pkgname=$3
local deps=
# gather imports from cri-o
pkgs=$(cd ${basepath}/${srcdir} && go list -f "{{.Imports}}" . | tr ' ' '\n' | grep -v "/vendor/" | grep ${pkgname} | sed -e "s|${pkgname}/||g")
# add each Go import's sources to the deps list,
# and recursively get that imports's imports too
for dep in ${pkgs}; do
deps+="$(ls ${basepath}/${dep}/*.go | sed -e "s|${basepath}/||g") "
# add deps of this package too
deps+="$(find-deps ${basepath} ${dep} ${pkgname}) "
done
echo "${deps}" | sort | uniq
}
# add Go sources from the current package at the end
echo "$(find-deps "$1" "$2" "$3" | xargs) $(cd $1 && ls $2/*.go | xargs)"