make misc/factor.sh install gcc, make, and answer yes to apt-get

db4
Doug Coleman 2008-01-29 20:01:57 -06:00
parent 91db162a56
commit e2f81c50c6
1 changed files with 186 additions and 184 deletions

View File

@ -13,289 +13,291 @@ WORD=
NO_UI= NO_UI=
ensure_program_installed() { ensure_program_installed() {
echo -n "Checking for $1..." echo -n "Checking for $1..."
result=`type -p $1` result=`type -p $1`
if ! [[ -n $result ]] ; then if ! [[ -n $result ]] ; then
echo "not found!" echo "not found!"
echo "Install $1 and try again." echo "Install $1 and try again."
exit 1 exit 1
fi fi
echo "found!" echo "found!"
} }
check_ret() { check_ret() {
RET=$? RET=$?
if [[ $RET -ne 0 ]] ; then if [[ $RET -ne 0 ]] ; then
echo $1 failed echo $1 failed
exit 2 exit 2
fi fi
} }
check_gcc_version() { check_gcc_version() {
echo -n "Checking gcc version..." echo -n "Checking gcc version..."
GCC_VERSION=`gcc --version` GCC_VERSION=`gcc --version`
check_ret gcc check_ret gcc
if [[ $GCC_VERSION == *3.3.* ]] ; then if [[ $GCC_VERSION == *3.3.* ]] ; then
echo "bad!" echo "bad!"
echo "You have a known buggy version of gcc (3.3)" echo "You have a known buggy version of gcc (3.3)"
echo "Install gcc 3.4 or higher and try again." echo "Install gcc 3.4 or higher and try again."
exit 3 exit 3
fi fi
echo "ok." echo "ok."
} }
check_installed_programs() { check_installed_programs() {
ensure_program_installed chmod ensure_program_installed sudo
ensure_program_installed uname ensure_program_installed chmod
ensure_program_installed git ensure_program_installed uname
ensure_program_installed wget ensure_program_installed git
ensure_program_installed gcc ensure_program_installed wget
ensure_program_installed make ensure_program_installed gcc
check_gcc_version ensure_program_installed make
check_gcc_version
} }
check_library_exists() { check_library_exists() {
GCC_TEST=factor-library-test.c GCC_TEST=factor-library-test.c
GCC_OUT=factor-library-test.out GCC_OUT=factor-library-test.out
echo -n "Checking for library $1..." echo -n "Checking for library $1..."
echo "int main(){return 0;}" > $GCC_TEST echo "int main(){return 0;}" > $GCC_TEST
gcc $GCC_TEST -o $GCC_OUT -l $1 gcc $GCC_TEST -o $GCC_OUT -l $1
if [[ $? -ne 0 ]] ; then if [[ $? -ne 0 ]] ; then
echo "not found!" echo "not found!"
echo "Warning: library $1 not found." echo "Warning: library $1 not found."
echo "***Factor will compile NO_UI=1" echo "***Factor will compile NO_UI=1"
NO_UI=1 NO_UI=1
fi fi
rm -f $GCC_TEST rm -f $GCC_TEST
check_ret rm check_ret rm
rm -f $GCC_OUT rm -f $GCC_OUT
check_ret rm check_ret rm
echo "found." echo "found."
} }
check_X11_libraries() { check_X11_libraries() {
check_library_exists freetype check_library_exists freetype
check_library_exists GLU check_library_exists GLU
check_library_exists GL check_library_exists GL
check_library_exists X11 check_library_exists X11
} }
check_libraries() { check_libraries() {
case $OS in case $OS in
linux) check_X11_libraries;; linux) check_X11_libraries;;
esac esac
} }
check_factor_exists() { check_factor_exists() {
if [[ -d "factor" ]] ; then if [[ -d "factor" ]] ; then
echo "A directory called 'factor' already exists." echo "A directory called 'factor' already exists."
echo "Rename or delete it and try again." echo "Rename or delete it and try again."
exit 4 exit 4
fi fi
} }
find_os() { find_os() {
echo "Finding OS..." echo "Finding OS..."
uname_s=`uname -s` uname_s=`uname -s`
check_ret uname check_ret uname
case $uname_s in case $uname_s in
CYGWIN_NT-5.2-WOW64) OS=windows-nt;; CYGWIN_NT-5.2-WOW64) OS=windows-nt;;
*CYGWIN_NT*) OS=windows-nt;; *CYGWIN_NT*) OS=windows-nt;;
*CYGWIN*) OS=windows-nt;; *CYGWIN*) OS=windows-nt;;
*darwin*) OS=macosx;; *darwin*) OS=macosx;;
*Darwin*) OS=macosx;; *Darwin*) OS=macosx;;
*linux*) OS=linux;; *linux*) OS=linux;;
*Linux*) OS=linux;; *Linux*) OS=linux;;
esac esac
} }
find_architecture() { find_architecture() {
echo "Finding ARCH..." echo "Finding ARCH..."
uname_m=`uname -m` uname_m=`uname -m`
check_ret uname check_ret uname
case $uname_m in case $uname_m in
i386) ARCH=x86;; i386) ARCH=x86;;
i686) ARCH=x86;; i686) ARCH=x86;;
*86) ARCH=x86;; *86) ARCH=x86;;
*86_64) ARCH=x86;; *86_64) ARCH=x86;;
"Power Macintosh") ARCH=ppc;; "Power Macintosh") ARCH=ppc;;
esac esac
} }
write_test_program() { write_test_program() {
echo "#include <stdio.h>" > $C_WORD.c echo "#include <stdio.h>" > $C_WORD.c
echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c echo "int main(){printf(\"%d\", 8*sizeof(void*)); return 0; }" >> $C_WORD.c
} }
find_word_size() { find_word_size() {
echo "Finding WORD..." echo "Finding WORD..."
C_WORD=factor-word-size C_WORD=factor-word-size
write_test_program write_test_program
gcc -o $C_WORD $C_WORD.c gcc -o $C_WORD $C_WORD.c
WORD=$(./$C_WORD) WORD=$(./$C_WORD)
check_ret $C_WORD check_ret $C_WORD
rm -f $C_WORD* rm -f $C_WORD*
} }
set_factor_binary() { set_factor_binary() {
case $OS in case $OS in
windows-nt) FACTOR_BINARY=factor-nt;; windows-nt) FACTOR_BINARY=factor-nt;;
macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;; macosx) FACTOR_BINARY=./Factor.app/Contents/MacOS/factor;;
*) FACTOR_BINARY=factor;; *) FACTOR_BINARY=factor;;
esac esac
} }
echo_build_info() { echo_build_info() {
echo OS=$OS echo OS=$OS
echo ARCH=$ARCH echo ARCH=$ARCH
echo WORD=$WORD echo WORD=$WORD
echo FACTOR_BINARY=$FACTOR_BINARY echo FACTOR_BINARY=$FACTOR_BINARY
echo MAKE_TARGET=$MAKE_TARGET echo MAKE_TARGET=$MAKE_TARGET
echo BOOT_IMAGE=$BOOT_IMAGE echo BOOT_IMAGE=$BOOT_IMAGE
echo MAKE_IMAGE_TARGET=$MAKE_IMAGE_TARGET echo MAKE_IMAGE_TARGET=$MAKE_IMAGE_TARGET
} }
set_build_info() { set_build_info() {
if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then if ! [[ -n $OS && -n $ARCH && -n $WORD ]] ; then
echo "OS: $OS" echo "OS: $OS"
echo "ARCH: $ARCH" echo "ARCH: $ARCH"
echo "WORD: $WORD" echo "WORD: $WORD"
echo "OS, ARCH, or WORD is empty. Please report this" echo "OS, ARCH, or WORD is empty. Please report this"
exit 5 exit 5
fi fi
MAKE_TARGET=$OS-$ARCH-$WORD MAKE_TARGET=$OS-$ARCH-$WORD
MAKE_IMAGE_TARGET=$ARCH.$WORD MAKE_IMAGE_TARGET=$ARCH.$WORD
BOOT_IMAGE=boot.$ARCH.$WORD.image BOOT_IMAGE=boot.$ARCH.$WORD.image
if [[ $OS == macosx && $ARCH == ppc ]] ; then if [[ $OS == macosx && $ARCH == ppc ]] ; then
MAKE_IMAGE_TARGET=$OS-$ARCH MAKE_IMAGE_TARGET=$OS-$ARCH
MAKE_TARGET=$OS-$ARCH MAKE_TARGET=$OS-$ARCH
BOOT_IMAGE=boot.macosx-ppc.image BOOT_IMAGE=boot.macosx-ppc.image
fi fi
if [[ $OS == linux && $ARCH == ppc ]] ; then if [[ $OS == linux && $ARCH == ppc ]] ; then
MAKE_IMAGE_TARGET=$OS-$ARCH MAKE_IMAGE_TARGET=$OS-$ARCH
MAKE_TARGET=$OS-$ARCH MAKE_TARGET=$OS-$ARCH
BOOT_IMAGE=boot.linux-ppc.image BOOT_IMAGE=boot.linux-ppc.image
fi fi
} }
find_build_info() { find_build_info() {
find_os find_os
find_architecture find_architecture
find_word_size find_word_size
set_factor_binary set_factor_binary
set_build_info set_build_info
echo_build_info echo_build_info
} }
git_clone() { git_clone() {
echo "Downloading the git repository from factorcode.org..." echo "Downloading the git repository from factorcode.org..."
git clone git://factorcode.org/git/factor.git git clone git://factorcode.org/git/factor.git
check_ret git check_ret git
} }
git_pull_factorcode() { git_pull_factorcode() {
echo "Updating the git repository from factorcode.org..." echo "Updating the git repository from factorcode.org..."
git pull git://factorcode.org/git/factor.git git pull git://factorcode.org/git/factor.git
check_ret git check_ret git
} }
cd_factor() { cd_factor() {
cd factor cd factor
check_ret cd check_ret cd
} }
make_clean() { make_clean() {
make clean make clean
check_ret make check_ret make
} }
make_factor() { make_factor() {
make NO_UI=$NO_UI $MAKE_TARGET -j5 make NO_UI=$NO_UI $MAKE_TARGET -j5
check_ret make check_ret make
} }
delete_boot_images() { delete_boot_images() {
echo "Deleting old images..." echo "Deleting old images..."
rm $BOOT_IMAGE > /dev/null 2>&1 rm $BOOT_IMAGE > /dev/null 2>&1
rm $BOOT_IMAGE.* > /dev/null 2>&1 rm $BOOT_IMAGE.* > /dev/null 2>&1
} }
get_boot_image() { get_boot_image() {
wget http://factorcode.org/images/latest/$BOOT_IMAGE wget http://factorcode.org/images/latest/$BOOT_IMAGE
check_ret wget check_ret wget
} }
maybe_download_dlls() { maybe_download_dlls() {
if [[ $OS == windows-nt ]] ; then if [[ $OS == windows-nt ]] ; then
wget http://factorcode.org/dlls/freetype6.dll wget http://factorcode.org/dlls/freetype6.dll
check_ret wget check_ret wget
wget http://factorcode.org/dlls/zlib1.dll wget http://factorcode.org/dlls/zlib1.dll
check_ret wget check_ret wget
chmod 777 *.dll chmod 777 *.dll
check_ret chmod check_ret chmod
fi fi
} }
get_config_info() { get_config_info() {
check_installed_programs check_installed_programs
find_build_info find_build_info
check_libraries check_libraries
} }
bootstrap() { bootstrap() {
./$FACTOR_BINARY -i=$BOOT_IMAGE ./$FACTOR_BINARY -i=$BOOT_IMAGE
} }
install() { install() {
check_factor_exists check_factor_exists
get_config_info get_config_info
git_clone git_clone
cd_factor cd_factor
make_factor make_factor
get_boot_image get_boot_image
maybe_download_dlls maybe_download_dlls
bootstrap bootstrap
} }
update() { update() {
get_config_info get_config_info
git_pull_factorcode git_pull_factorcode
make_clean make_clean
make_factor make_factor
} }
update_bootstrap() { update_bootstrap() {
delete_boot_images delete_boot_images
get_boot_image get_boot_image
bootstrap bootstrap
} }
refresh_image() { refresh_image() {
./$FACTOR_BINARY -script -e="refresh-all save 0 USE: system exit" ./$FACTOR_BINARY -script -e="refresh-all save 0 USE: system exit"
check_ret factor check_ret factor
} }
make_boot_image() { make_boot_image() {
./$FACTOR_BINARY -script -e="\"$MAKE_IMAGE_TARGET\" USE: bootstrap.image make-image save 0 USE: system exit" ./$FACTOR_BINARY -script -e="\"$MAKE_IMAGE_TARGET\" USE: bootstrap.image make-image save 0 USE: system exit"
check_ret factor check_ret factor
} }
install_libraries() { install_libraries() {
sudo apt-get install libc6-dev libfreetype6-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap yes | sudo apt-get install sudo libc6-dev libfreetype6-dev libx11-dev xorg-dev glutg3-dev wget git-core git-doc rlwrap gcc make
check_ret sudo
} }
usage() { usage() {
echo "usage: $0 install|install-x11|self-update|quick-update|update|bootstrap" echo "usage: $0 install|install-x11|self-update|quick-update|update|bootstrap"
} }
case "$1" in case "$1" in
install) install ;; install) install ;;
install-x11) install_libraries; install ;; install-x11) install_libraries; install ;;
self-update) update; make_boot_image; bootstrap;; self-update) update; make_boot_image; bootstrap;;
quick-update) update; refresh_image ;; quick-update) update; refresh_image ;;
update) update; update_bootstrap ;; update) update; update_bootstrap ;;
bootstrap) get_config_info; bootstrap ;; bootstrap) get_config_info; bootstrap ;;
*) usage ;; *) usage ;;
esac esac