1
0
mirror of https://github.com/golang/go synced 2024-09-25 13:20:13 -06:00
go/src/make.bash
Adam Langley 2643f742a5 make.bash: detect and warn about SELinux policy that crashes us.
The default SELinux policy on Fedora 12 (at least) disallows stack
pages to be +x. This causes all binaries written by 6g/6l to segfault
immedately. The 'true' way to fix this issue is to mark binaries with
the correct type. However, that assumes that 6l is going to detect
SELinux, figure out the correct type for the current distribution and
set the type (without libselinux).

For now we'll warn users and point them towards the way to enable
execstack for the whole system.

http://code.google.com/p/go/issues/detail?id=47

R=rsc
CC=golang-dev
http://codereview.prom.corp.google.com/1026041
2009-11-11 15:02:15 -08:00

98 lines
2.2 KiB
Bash
Executable File

#!/bin/bash
# Copyright 2009 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
set -e
GOBIN="${GOBIN:-$HOME/bin}"
export MAKEFLAGS=-j4
if ! test -f $GOROOT/include/u.h
then
echo '$GOROOT is not set correctly or not exported' 1>&2
exit 1
fi
if ! test -d $GOBIN
then
echo '$GOBIN is not a directory or does not exist' 1>&2
echo 'create it or set $GOBIN differently' 1>&2
exit 1
fi
case "$GOARCH" in
amd64 | 386 | arm)
;;
*)
echo '$GOARCH is set to <'$GOARCH'>, must be amd64, 386, or arm' 1>&2
exit 1
esac
case "$GOOS" in
darwin | linux | nacl)
;;
*)
echo '$GOOS is set to <'$GOOS'>, must be darwin, linux, or nacl' 1>&2
exit 1
esac
rm -f $GOBIN/quietgcc
CC=${CC:-gcc}
sed -e "s|@CC@|$CC|" < quietgcc.bash > $GOBIN/quietgcc
chmod +x $GOBIN/quietgcc
if ! (cd lib9 && which quietgcc) >/dev/null 2>&1; then
echo "installed quietgcc as $GOBIN/quietgcc but 'which quietgcc' fails" 1>&2
echo "double-check that $GOBIN is in your "'$PATH' 1>&2
exit 1
fi
if [ -d /selinux -a -f /selinux/booleans/allow_execstack ] ; then
if ! cat /selinux/booleans/allow_execstack | grep -c '^1 1$' >> /dev/null ; then
echo "WARNING: the default SELinux policy on, at least, Fedora 12 breaks "
echo "Go. You can enable the features that Go needs via the following "
echo "command (as root):"
echo " # setsebool -P allow_execstack 1"
echo
echo "Note that this affects your system globally! "
echo
echo "The build will continue in five seconds in case we "
echo "misdiagnosed the issue..."
sleep 5
fi
fi
bash clean.bash
for i in lib9 libbio libmach cmd pkg libcgo cmd/cgo cmd/ebnflint cmd/godoc cmd/gofmt cmd/goyacc cmd/hgpatch
do
case "$i-$GOOS" in
libcgo-nacl)
;;
*)
# The ( ) here are to preserve the current directory
# for the next round despite the cd $i below.
# set -e does not apply to ( ) so we must explicitly
# test the exit status.
(
echo; echo; echo %%%% making $i %%%%; echo
cd $i
case $i in
cmd)
bash make.bash
;;
*)
make install
esac
) || exit 1
esac
done
case "`uname`" in
Darwin)
echo;
echo %%% run sudo.bash to install debuggers
echo
esac