summaryrefslogtreecommitdiffstats
path: root/development/google-go-lang/google-go-lang.SlackBuild
diff options
context:
space:
mode:
Diffstat (limited to 'development/google-go-lang/google-go-lang.SlackBuild')
-rw-r--r--development/google-go-lang/google-go-lang.SlackBuild213
1 files changed, 198 insertions, 15 deletions
diff --git a/development/google-go-lang/google-go-lang.SlackBuild b/development/google-go-lang/google-go-lang.SlackBuild
index 3b6a1de28a..9c9cf6a5d9 100644
--- a/development/google-go-lang/google-go-lang.SlackBuild
+++ b/development/google-go-lang/google-go-lang.SlackBuild
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
# Slackware build script for google-go-lang
@@ -26,10 +26,15 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
+cd $(dirname $0) ; CWD=$(pwd)
+
PRGNAM=google-go-lang
-VERSION=${VERSION:-1.13.7}
+VERSION=${VERSION:-1.22.1}
+BOOTSTRAP_VERSION=${BOOTSTRAP_VERSION:-1.19.13}
+BOOTSTRAP_VERSION2=${BOOTSTRAP_VERSION2:-1.21.8}
BUILD=${BUILD:-1}
TAG=${TAG:-_SBo}
+PKGTYPE=${PKGTYPE:-tgz}
RELEASE=${RELEASE:-linux}
@@ -52,13 +57,20 @@ elif [ "$ARCH" = "x86_64" ]; then
elif [ "$ARCH" = "arm" ]; then
LIBDIRSUFFIX=""
GOARCH="arm"
- export GOARM="6" # can be '5' as well, to use soft float instead of hardware
+ export GOARM="7" # can be '5' as well, to use soft float instead of hard float
+elif [ "$ARCH" = "aarch64" ]; then
+ LIBDIRSUFFIX="64"
+ GOARCH="arm64"
else
LIBDIRSUFFIX=""
GOARCH=386
fi
-CWD=$(pwd)
+if [ ! -z "${PRINT_PACKAGE_NAME}" ]; then
+ echo "$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE"
+ exit 0
+fi
+
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}
@@ -66,7 +78,138 @@ OUTPUT=${OUTPUT:-/tmp}
set -e
rm -rf $PKG
-mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} $OUTPUT
+
+CGO_MINOR_VERSION="$(/usr/bin/go version | awk '{ print $3 }' | sed 's/go//' | awk -F. '{ print $2 }')"
+if [[ $CGO_MINOR_VERSION -lt 18 ]] ; then
+ mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION} $OUTPUT
+ cd $PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION}
+ tar xvf $CWD/go${BOOTSTRAP_VERSION}.src.tar.gz
+ cd go
+ chown -R root:root .
+ find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+ # as of >= go1.5, the cross-compiler does not need to be bootstrap, so the
+ # compiler need only be compiled for the host OS, which it detects
+ unset GOBIN GOPATH GOOS GOARCH
+
+ # Not sure why, but this causes run.bash to fail --rworkman
+ unset BASH_ENV
+
+ # gcc 5+ is go1.4 API, so we'll bootstrap with it
+ export GOROOT_BOOTSTRAP="/usr"
+
+ # Default GOROOT is the parent directory of all.bash,
+ # which is the current directory we're in.
+ # Defining it here means we can use it below when building
+ # shared libraries
+ GOROOT="$(pwd)"
+ export GOROOT
+
+ # The value of GOROOT once the package is installed
+ export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION}/go"
+
+ case "$ARCH" in
+ arm|i?86) export GOMAXPROCS=1 ;;
+ esac
+
+ cd src
+
+ if [[ "${RUN_TEST}" = "true" ]] ; then
+ LC_ALL=C \
+ ./all.bash
+ else
+ LC_ALL=C \
+ ./make.bash
+ fi
+
+ # As of go1.5, golang supports shared libraries, so generate them for use.
+ $GOROOT/bin/go install -buildmode=shared std
+
+ cd ..
+
+ # remove Go build cache
+ rm -rf pkg/obj/go-build/*
+
+ # remove the doc Makefile
+ rm -f doc/Makefile
+
+ mkdir -p $PKG$GOROOT_FINAL
+fi
+
+if [[ $CGO_MINOR_VERSION -lt 20 ]] ; then
+ mkdir -p $TMP $PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION2} $OUTPUT
+ cd $PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION2}
+ tar xvf $CWD/go${BOOTSTRAP_VERSION2}.src.tar.gz
+ cd go
+ chown -R root:root .
+ find -L . \
+ \( -perm 777 -o -perm 775 -o -perm 750 -o -perm 711 -o -perm 555 \
+ -o -perm 511 \) -exec chmod 755 {} \; -o \
+ \( -perm 666 -o -perm 664 -o -perm 640 -o -perm 600 -o -perm 444 \
+ -o -perm 440 -o -perm 400 \) -exec chmod 644 {} \;
+
+ # as of >= go1.5, the cross-compiler does not need to be bootstrap, so the
+ # compiler need only be compiled for the host OS, which it detects
+ unset GOBIN GOPATH GOOS GOARCH
+
+ # Not sure why, but this causes run.bash to fail --rworkman
+ unset BASH_ENV
+
+ # gcc 5+ is go1.4 API, so we'll bootstrap with it
+ if [[ $CGO_MINOR_VERSION -lt 18 ]] ; then
+ export GOROOT_BOOTSTRAP="$PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION}/go"
+ else
+ export GOROOT_BOOTSTRAP="/usr"
+ fi
+
+ # Default GOROOT is the parent directory of all.bash,
+ # which is the current directory we're in.
+ # Defining it here means we can use it below when building
+ # shared libraries
+ GOROOT="$(pwd)"
+ export GOROOT
+
+ # The value of GOROOT once the package is installed
+ export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION2}/go"
+
+ case "$ARCH" in
+ arm|i?86) export GOMAXPROCS=1 ;;
+ esac
+
+ cd src
+
+ if [[ "${RUN_TEST}" = "true" ]] ; then
+ LC_ALL=C \
+ ./all.bash
+ else
+ LC_ALL=C \
+ ./make.bash
+ fi
+
+ # As of go1.5, golang supports shared libraries, so generate them for use.
+ $GOROOT/bin/go install -buildmode=shared std
+
+ cd ..
+
+ # remove Go build cache
+ rm -rf pkg/obj/go-build/*
+
+ # remove the doc Makefile
+ rm -f doc/Makefile
+
+ mkdir -p $PKG$GOROOT_FINAL
+fi
+
+# remove bootstrap
+if [[ $CGO_MINOR_VERSION -lt 18 ]] ; then
+ rm -rf $PKG/usr/lib$LIBDIRSUFFIX/go$BOOTSTRAP_VERSION
+fi
+
+mkdir -p $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION} $OUTPUT
cd $PKG/usr/lib${LIBDIRSUFFIX}/go${VERSION}
tar xvf $CWD/go${VERSION}.src.tar.gz
cd go
@@ -80,27 +223,67 @@ find -L . \
# as of >= go1.5, the cross-compiler does not need to be bootstrap, so the
# compiler need only be compiled for the host OS, which it detects
unset GOBIN GOPATH GOOS GOARCH
-unset BASH_ENV # Not sure why, but this causes run.bash to fail --rworkman
-export GOROOT_BOOTSTRAP="/usr" # gcc 5+ is go1.4 API, so we'll bootstrap with it
-export GOROOT="$(pwd)"
+# Not sure why, but this causes run.bash to fail --rworkman
+unset BASH_ENV
+
+# gcc 5+ is go1.4 API, so we'll bootstrap with it
+if [[ $CGO_MINOR_VERSION -lt 20 ]] ; then
+ export GOROOT_BOOTSTRAP="$PKG/usr/lib${LIBDIRSUFFIX}/go${BOOTSTRAP_VERSION2}/go"
+else
+ export GOROOT_BOOTSTRAP="/usr"
+fi
+
+# Default GOROOT is the parent directory of all.bash,
+# which is the current directory we're in.
+# Defining it here means we can use it below when building
+# shared libraries
+GOROOT="$(pwd)"
+export GOROOT
+
+# The value of GOROOT once the package is installed
export GOROOT_FINAL="/usr/lib${LIBDIRSUFFIX}/go${VERSION}/go"
+case "$ARCH" in
+ arm|i?86) export GOMAXPROCS=1 ;;
+esac
+
cd src
-if [ "x${RUN_TEST}" = "xtrue" ] ; then
- LC_ALL=C \
- ./all.bash
+if [[ "${RUN_TEST}" = "true" ]] ; then
+ LC_ALL=C \
+ ./all.bash
else
- LC_ALL=C \
- ./make.bash
+ LC_ALL=C \
+ ./make.bash
fi
# As of go1.5, golang supports shared libraries, so generate them for use.
$GOROOT/bin/go install -buildmode=shared std
+find $PKG/$GOROOT_FINAL -print0 | xargs -0 file | grep -e "executable" -e "shared object" | grep ELF \
+ | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null || true
+find $PKG/$GOROOT_FINAL -type f -name "*.so" -exec chmod +x {} \; 2> /dev/null || true
+
cd ..
+# remove Go build cache
+rm -rf pkg/obj/go-build/*
+
+# remove the doc Makefile
+rm -f doc/Makefile
+
+# remove tests, nothing needs these at runtime
+find $PKG/$GOROOT_FINAL/src -type d -name "testdata" -exec rm -rf {} +
+find $PKG/$GOROOT_FINAL/src -type f -name "*_test.go" -exec rm -rf {} +
+
+mkdir -p $PKG$GOROOT_FINAL
+
+# remove bootstrap
+if [[ $CGO_MINOR_VERSION -lt 20 ]] ; then
+ rm -rf $PKG/usr/lib$LIBDIRSUFFIX/go$BOOTSTRAP_VERSION2
+fi
+
# Put the profile scripts for setting PATH and env variables
mkdir -p $PKG/etc/profile.d
cat > $PKG/etc/profile.d/go.csh << EOF
@@ -119,7 +302,7 @@ chmod 0755 $PKG/etc/profile.d/go.sh
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a \
- AUTHORS CONTRIBUTING.md CONTRIBUTORS LICENSE PATENTS README.md VERSION \
+ CONTRIBUTING.md LICENSE PATENTS README.md SECURITY.md VERSION \
$PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
@@ -127,4 +310,4 @@ mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cd $PKG
-/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
+/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.$PKGTYPE