From e159c02a2a832ef49e0377b318b3b9f597c97458 Mon Sep 17 00:00:00 2001 From: Zach Loafman Date: Thu, 2 Apr 2015 06:51:20 -0700 Subject: [PATCH] Completely neutral commit that just factors each platform build out to a function (to make it kinder on reviewers for the next piece). --- hack/lib/golang.sh | 111 ++++++++++++++++++++++++--------------------- 1 file changed, 59 insertions(+), 52 deletions(-) diff --git a/hack/lib/golang.sh b/hack/lib/golang.sh index 111a6a0a5953f..a5a71d49216ba 100644 --- a/hack/lib/golang.sh +++ b/hack/lib/golang.sh @@ -263,6 +263,64 @@ kube::golang::exit_if_stdlib_not_installed() { exit 0; } +kube::golang::build_binaries_for_platform() { + local platform=$1 + local use_go_build=${2-} + + local -a statics=() + local -a nonstatics=() + for binary in "${binaries[@]}"; do + if kube::golang::is_statically_linked_library "${binary}"; then + kube::golang::exit_if_stdlib_not_installed; + statics+=($binary) + else + nonstatics+=($binary) + fi + done + + if [[ -n ${use_go_build:-} ]]; then + # Try and replicate the native binary placement of go install without + # calling go install. This means we have to iterate each binary. + local output_path="${KUBE_GOPATH}/bin" + if [[ $platform != $host_platform ]]; then + output_path="${output_path}/${platform//\//_}" + fi + + for binary in "${binaries[@]}"; do + local bin=$(basename "${binary}") + if [[ ${GOOS} == "windows" ]]; then + bin="${bin}.exe" + fi + + if kube::golang::is_statically_linked_library "${binary}"; then + kube::golang::exit_if_stdlib_not_installed; + CGO_ENABLED=0 go build -installsuffix cgo -o "${output_path}/${bin}" \ + "${goflags[@]:+${goflags[@]}}" \ + -ldflags "${version_ldflags}" \ + "${binary}" + else + go build -o "${output_path}/${bin}" \ + "${goflags[@]:+${goflags[@]}}" \ + -ldflags "${version_ldflags}" \ + "${binary}" + fi + done + else + # Use go install. + if [[ "${#nonstatics[@]}" != 0 ]]; then + go install "${goflags[@]:+${goflags[@]}}" \ + -ldflags "${version_ldflags}" \ + "${nonstatics[@]:+${nonstatics[@]}}" + fi + if [[ "${#statics[@]}" != 0 ]]; then + CGO_ENABLED=0 go install -installsuffix cgo "${goflags[@]:+${goflags[@]}}" \ + -ldflags "${version_ldflags}" \ + "${statics[@]:+${statics[@]}}" + fi + fi + +} + # Build binaries targets specified # # Input: @@ -318,58 +376,7 @@ kube::golang::build_binaries() { for platform in "${platforms[@]}"; do ( kube::golang::set_platform_envs "${platform}" kube::log::status "${platform}: Parallel go build started" - - local -a statics=() - local -a nonstatics=() - for binary in "${binaries[@]}"; do - if kube::golang::is_statically_linked_library "${binary}"; then - kube::golang::exit_if_stdlib_not_installed; - statics+=($binary) - else - nonstatics+=($binary) - fi - done - - if [[ -n ${use_go_build:-} ]]; then - # Try and replicate the native binary placement of go install without - # calling go install. This means we have to iterate each binary. - local output_path="${KUBE_GOPATH}/bin" - if [[ $platform != $host_platform ]]; then - output_path="${output_path}/${platform//\//_}" - fi - - for binary in "${binaries[@]}"; do - local bin=$(basename "${binary}") - if [[ ${GOOS} == "windows" ]]; then - bin="${bin}.exe" - fi - - if kube::golang::is_statically_linked_library "${binary}"; then - kube::golang::exit_if_stdlib_not_installed; - CGO_ENABLED=0 go build -installsuffix cgo -o "${output_path}/${bin}" \ - "${goflags[@]:+${goflags[@]}}" \ - -ldflags "${version_ldflags}" \ - "${binary}" - else - go build -o "${output_path}/${bin}" \ - "${goflags[@]:+${goflags[@]}}" \ - -ldflags "${version_ldflags}" \ - "${binary}" - fi - done - else - # Use go install. - if [[ "${#nonstatics[@]}" != 0 ]]; then - go install "${goflags[@]:+${goflags[@]}}" \ - -ldflags "${version_ldflags}" \ - "${nonstatics[@]:+${nonstatics[@]}}" - fi - if [[ "${#statics[@]}" != 0 ]]; then - CGO_ENABLED=0 go install -installsuffix cgo "${goflags[@]:+${goflags[@]}}" \ - -ldflags "${version_ldflags}" \ - "${statics[@]:+${statics[@]}}" - fi - fi + kube::golang::build_binaries_for_platform ${platform} ${use_go_build:-} kube::log::status "${platform}: Parallel go build finished" ) &> "/tmp//${platform//\//_}.build" & done