2013-05-12 21:19:04 +04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
2013-05-12 21:22:11 +04:00
|
|
|
# build&upload script for linux & windows snapshot binaries
|
2013-11-30 23:42:09 +04:00
|
|
|
#
|
|
|
|
# Usage:
|
|
|
|
#
|
|
|
|
# Start with a clean directory. For example:
|
|
|
|
#
|
|
|
|
# mkdir builder
|
|
|
|
# cd builder
|
|
|
|
#
|
|
|
|
# Then run this script, or optionally the 'build only' or 'upload only' version
|
|
|
|
#
|
|
|
|
# /some/path/openscad/builder.sh # standard build & upload
|
|
|
|
# /some/path/openscad/builder.sh buildonly # only do build, dont upload
|
|
|
|
# /some/path/openscad/builder.sh uploadonly # only upload, dont build
|
2013-05-12 21:19:04 +04:00
|
|
|
|
2013-11-30 23:42:09 +04:00
|
|
|
# Notes:
|
|
|
|
#
|
|
|
|
# This script is designed to build a 'clean' version of openscad directly
|
|
|
|
# from the openscad github master source code. It will then optionally
|
|
|
|
# upload the build to the OpenSCAD official file repository, and modify
|
|
|
|
# the OpenSCAD website with links to the most recently built files.
|
|
|
|
#
|
|
|
|
#
|
|
|
|
# For the mingw- cross build for Windows(TM) this script does a massive
|
|
|
|
# 'from nothing' build, including downloading and building an MXE cross
|
|
|
|
# environment, and dependencies, into $HOME/openscad_deps. This can take
|
|
|
|
# many many many hours and use several gigabytes of disk space.
|
|
|
|
#
|
|
|
|
# This script itself is designed to call other scripts that do the heavy
|
|
|
|
# lifting. This script itself should be kept relatively simple.
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
2013-05-12 21:19:04 +04:00
|
|
|
# requirements -
|
|
|
|
# see http://mxe.cc for required tools (scons, perl, yasm, etc etc etc)
|
2013-11-30 23:42:09 +04:00
|
|
|
#
|
2013-05-12 21:19:04 +04:00
|
|
|
# todo - can we build 32 bit linux from within 64 bit linux?
|
|
|
|
#
|
|
|
|
# todo - make linux work
|
2013-05-15 08:45:40 +04:00
|
|
|
#
|
|
|
|
# todo - detect failure and stop
|
2013-06-17 09:59:14 +04:00
|
|
|
#
|
|
|
|
# todo - generalize to build release binaries as well
|
|
|
|
#
|
2013-05-12 21:19:04 +04:00
|
|
|
|
2013-05-18 00:32:23 +04:00
|
|
|
init_variables()
|
2013-05-12 21:19:04 +04:00
|
|
|
{
|
2013-05-15 08:45:40 +04:00
|
|
|
STARTPATH=$PWD
|
2013-05-18 00:32:23 +04:00
|
|
|
export STARTPATH
|
2013-11-30 23:42:09 +04:00
|
|
|
DOBUILD=1
|
|
|
|
DOUPLOAD=1
|
|
|
|
DRYRUN=
|
2014-02-25 04:24:39 +04:00
|
|
|
DOSNAPSHOT=1
|
|
|
|
if [ "`echo $* | grep release`" ]; then
|
|
|
|
echo "this script cannot yet build releases, only snapshots"
|
|
|
|
DOSNAPSHOT=0
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-05-18 23:37:04 +04:00
|
|
|
if [ "`echo $* | grep uploadonly`" ]; then
|
2013-11-30 23:42:09 +04:00
|
|
|
DOUPLOAD=1
|
|
|
|
DOBUILD=
|
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
|
|
|
fi
|
|
|
|
if [ "`echo $* | grep buildonly`" ]; then
|
|
|
|
DOUPLOAD=
|
|
|
|
DOBUILD=1
|
2013-05-18 23:37:04 +04:00
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
|
|
|
fi
|
|
|
|
if [ "`echo $* | grep dry`" ]; then
|
|
|
|
DRYRUN=1
|
|
|
|
fi
|
2013-11-30 23:42:09 +04:00
|
|
|
export DOBUILD
|
|
|
|
export DOUPLOAD
|
2013-05-18 23:37:04 +04:00
|
|
|
export DRYRUN
|
|
|
|
export DATECODE
|
2014-02-25 04:24:39 +04:00
|
|
|
export DOSNAPSHOT
|
2013-05-18 00:32:23 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
check_starting_path()
|
|
|
|
{
|
2013-05-12 21:19:04 +04:00
|
|
|
if [ -e openscad.pro ]; then
|
|
|
|
echo 'please start from a clean directory outside of openscad'
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2014-03-25 07:14:26 +04:00
|
|
|
check_nsis()
|
|
|
|
{
|
|
|
|
# 64 bit mingw-cross build MXE cannot build nsis.... for now, we can
|
|
|
|
# just ask the user to install their system's nsis package.
|
|
|
|
# (it might be possible to d/l & build nsis here, or use pre-existing
|
|
|
|
# 32-bit-mxe nsis)
|
|
|
|
if [ ! "`command -v makensis`" ]; then
|
|
|
|
echo the makensis command was not found.
|
|
|
|
echo please install nsis for your system. for example
|
|
|
|
echo on debian, sudo apt-get install nsis
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2013-11-30 23:42:09 +04:00
|
|
|
get_openscad_source_code()
|
2013-05-12 21:19:04 +04:00
|
|
|
{
|
|
|
|
git clone http://github.com/openscad/openscad.git
|
2013-11-30 23:42:09 +04:00
|
|
|
if [ "`echo $? | grep 0`" ]; then
|
|
|
|
echo clone of source code is ok
|
|
|
|
else
|
2014-02-17 23:19:42 +04:00
|
|
|
if [ $DOUPLOAD ]; then
|
|
|
|
if [ ! $DOBUILD ]; then
|
|
|
|
echo upload only - skipping openscad git clone
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo clone of openscad source code failed. exiting
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-11-30 23:42:09 +04:00
|
|
|
fi
|
2013-05-12 21:19:04 +04:00
|
|
|
cd openscad
|
|
|
|
git submodule update --init # MCAD
|
2013-05-19 00:40:01 +04:00
|
|
|
#git checkout branch ##debugging
|
2013-05-12 21:19:04 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
build_win32()
|
|
|
|
{
|
2013-05-17 07:59:58 +04:00
|
|
|
. ./scripts/setenv-mingw-xbuild.sh clean
|
2013-05-12 21:19:04 +04:00
|
|
|
. ./scripts/setenv-mingw-xbuild.sh
|
|
|
|
./scripts/mingw-x-build-dependencies.sh
|
2014-02-25 04:24:39 +04:00
|
|
|
if [ $DOSNAPSHOT ] ; then
|
|
|
|
./scripts/release-common.sh snapshot mingw32
|
|
|
|
else
|
|
|
|
echo "this script cant yet build releases, only snapshots"
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-12-31 02:41:50 +04:00
|
|
|
if [ "`echo $? | grep 0`" ]; then
|
|
|
|
echo build of win32 stage over
|
|
|
|
else
|
|
|
|
echo build of win32 failed. exiting
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-05-18 00:32:23 +04:00
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
|
|
|
export DATECODE
|
2013-05-12 21:19:04 +04:00
|
|
|
}
|
|
|
|
|
2013-05-17 07:59:58 +04:00
|
|
|
build_win64()
|
|
|
|
{
|
|
|
|
. ./scripts/setenv-mingw-xbuild.sh clean
|
|
|
|
. ./scripts/setenv-mingw-xbuild.sh 64
|
|
|
|
./scripts/mingw-x-build-dependencies.sh 64
|
2014-02-25 04:24:39 +04:00
|
|
|
if [ $DOSNAPSHOT ] ; then
|
|
|
|
./scripts/release-common.sh snapshot mingw64
|
|
|
|
else
|
|
|
|
echo "this script cant yet build releases, only snapshots"
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-12-31 02:41:50 +04:00
|
|
|
if [ "`echo $? | grep 0`" ]; then
|
|
|
|
echo build of win64 stage over
|
|
|
|
else
|
|
|
|
echo build of win64 failed. exiting
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-05-18 00:32:23 +04:00
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
|
|
|
export DATECODE
|
2013-05-17 07:59:58 +04:00
|
|
|
}
|
|
|
|
|
2013-05-12 21:19:04 +04:00
|
|
|
build_lin32()
|
|
|
|
{
|
2013-05-17 07:59:58 +04:00
|
|
|
. ./scripts/setenv-unibuild.sh
|
2013-05-12 21:19:04 +04:00
|
|
|
./scripts/uni-build-dependencies.sh
|
2014-02-25 04:24:39 +04:00
|
|
|
if [ $DOSNAPSHOT ] ; then
|
|
|
|
./scripts/release-common.sh snapshot
|
|
|
|
else
|
|
|
|
echo "this script cant yet build releases, only snapshots"
|
|
|
|
exit 1
|
|
|
|
fi
|
2013-05-18 00:32:23 +04:00
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
|
|
|
export DATECODE
|
2013-05-12 21:19:04 +04:00
|
|
|
}
|
|
|
|
|
2013-11-30 23:42:09 +04:00
|
|
|
upload_win_common()
|
2013-05-12 21:19:04 +04:00
|
|
|
{
|
2013-05-18 00:32:23 +04:00
|
|
|
summary="$1"
|
|
|
|
username=$2
|
|
|
|
filename=$3
|
|
|
|
if [ -f $filename ]; then
|
|
|
|
echo 'file "'$filename'" found'
|
2013-05-12 21:19:04 +04:00
|
|
|
else
|
2013-05-18 00:32:23 +04:00
|
|
|
echo 'file "'$filename'" not found'
|
2013-05-12 21:19:04 +04:00
|
|
|
fi
|
|
|
|
opts=
|
|
|
|
opts="$opts -p openscad"
|
2013-05-18 00:32:23 +04:00
|
|
|
opts="$opts -u $username"
|
|
|
|
opts="$opts $filename"
|
|
|
|
if [ $DRYRUN ]; then
|
2013-06-18 04:32:30 +04:00
|
|
|
echo dry run, not uploading to files.openscad.org
|
|
|
|
echo scp -v $filename openscad@files.openscad.org:www/
|
2013-05-18 00:32:23 +04:00
|
|
|
else
|
2013-06-18 04:32:30 +04:00
|
|
|
scp -v $filename openscad@files.openscad.org:www/
|
2013-05-16 02:04:46 +04:00
|
|
|
fi
|
2013-05-12 21:19:04 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
upload_win32()
|
|
|
|
{
|
2013-05-18 03:10:37 +04:00
|
|
|
SUMMARY1="Windows x86-32 Snapshot Installer"
|
|
|
|
SUMMARY2="Windows x86-32 Snapshot Zipfile"
|
2013-05-12 21:19:04 +04:00
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
2013-05-15 08:45:40 +04:00
|
|
|
BASEDIR=./mingw32/
|
2013-05-19 00:40:01 +04:00
|
|
|
WIN32_PACKAGEFILE1=OpenSCAD-$DATECODE-x86-32-Installer.exe
|
|
|
|
WIN32_PACKAGEFILE2=OpenSCAD-$DATECODE-x86-32.zip
|
2013-11-30 23:42:09 +04:00
|
|
|
upload_win_common "$SUMMARY1" $USERNAME $BASEDIR/$WIN32_PACKAGEFILE1
|
|
|
|
upload_win_common "$SUMMARY2" $USERNAME $BASEDIR/$WIN32_PACKAGEFILE2
|
2013-05-15 08:45:40 +04:00
|
|
|
export WIN32_PACKAGEFILE1
|
|
|
|
export WIN32_PACKAGEFILE2
|
|
|
|
WIN32_PACKAGEFILE1_SIZE=`ls -sh $BASEDIR/$WIN32_PACKAGEFILE1 | awk ' {print $1} ';`
|
|
|
|
WIN32_PACKAGEFILE2_SIZE=`ls -sh $BASEDIR/$WIN32_PACKAGEFILE2 | awk ' {print $1} ';`
|
2013-05-16 04:56:49 +04:00
|
|
|
WIN32_PACKAGEFILE1_SIZE=`echo "$WIN32_PACKAGEFILE1_SIZE""B"`
|
|
|
|
WIN32_PACKAGEFILE2_SIZE=`echo "$WIN32_PACKAGEFILE2_SIZE""B"`
|
2013-05-15 08:45:40 +04:00
|
|
|
export WIN32_PACKAGEFILE1_SIZE
|
|
|
|
export WIN32_PACKAGEFILE2_SIZE
|
2013-05-12 21:19:04 +04:00
|
|
|
}
|
|
|
|
|
2013-05-17 07:59:58 +04:00
|
|
|
upload_win64()
|
|
|
|
{
|
|
|
|
SUMMARY1="Windows x86-64 Snapshot Zipfile"
|
|
|
|
SUMMARY2="Windows x86-64 Snapshot Installer"
|
|
|
|
BASEDIR=./mingw64/
|
2013-05-19 00:40:01 +04:00
|
|
|
WIN64_PACKAGEFILE1=OpenSCAD-$DATECODE-x86-64-Installer.exe
|
|
|
|
WIN64_PACKAGEFILE2=OpenSCAD-$DATECODE-x86-64.zip
|
2013-11-30 23:42:09 +04:00
|
|
|
upload_win_common "$SUMMARY1" $USERNAME $BASEDIR/$WIN64_PACKAGEFILE1
|
|
|
|
upload_win_common "$SUMMARY2" $USERNAME $BASEDIR/$WIN64_PACKAGEFILE2
|
2013-05-17 07:59:58 +04:00
|
|
|
export WIN64_PACKAGEFILE1
|
|
|
|
export WIN64_PACKAGEFILE2
|
|
|
|
WIN64_PACKAGEFILE1_SIZE=`ls -sh $BASEDIR/$WIN64_PACKAGEFILE1 | awk ' {print $1} ';`
|
|
|
|
WIN64_PACKAGEFILE2_SIZE=`ls -sh $BASEDIR/$WIN64_PACKAGEFILE2 | awk ' {print $1} ';`
|
|
|
|
WIN64_PACKAGEFILE1_SIZE=`echo "$WIN64_PACKAGEFILE1_SIZE""B"`
|
|
|
|
WIN64_PACKAGEFILE2_SIZE=`echo "$WIN64_PACKAGEFILE2_SIZE""B"`
|
|
|
|
export WIN64_PACKAGEFILE1_SIZE
|
|
|
|
export WIN64_PACKAGEFILE2_SIZE
|
|
|
|
}
|
|
|
|
|
2013-05-12 21:19:04 +04:00
|
|
|
read_username_from_user()
|
|
|
|
{
|
2013-05-18 00:32:23 +04:00
|
|
|
if [ $DRYRUN ]; then USERNAME=none;export USERNAME; return; fi
|
2013-08-14 07:24:03 +04:00
|
|
|
echo 'Google code upload is deprecated'
|
|
|
|
USERNAME=$USER
|
|
|
|
echo 'username is ' $USERNAME
|
|
|
|
return
|
|
|
|
|
2013-05-12 21:19:04 +04:00
|
|
|
echo 'Please enter your username for https://code.google.com/hosting/settings'
|
|
|
|
echo -n 'Username:'
|
2013-05-13 15:57:19 +04:00
|
|
|
read USERNAME
|
2013-05-12 21:19:04 +04:00
|
|
|
echo 'username is ' $USERNAME
|
2013-08-14 07:24:03 +04:00
|
|
|
return
|
2013-05-12 21:19:04 +04:00
|
|
|
}
|
|
|
|
|
|
|
|
read_password_from_user()
|
|
|
|
{
|
2013-05-18 00:32:23 +04:00
|
|
|
if [ $DRYRUN ]; then return; fi
|
2013-08-14 07:24:03 +04:00
|
|
|
echo 'Google code upload is deprecated'
|
|
|
|
return
|
|
|
|
|
2013-05-12 21:19:04 +04:00
|
|
|
echo 'Please enter your password for https://code.google.com/hosting/settings'
|
|
|
|
echo -n 'Password:'
|
|
|
|
read -s PASSWORD1
|
|
|
|
echo
|
|
|
|
echo -n 'Verify :'
|
|
|
|
read -s PASSWORD2
|
|
|
|
echo
|
|
|
|
if [ ! $PASSWORD1 = $PASSWORD2 ]; then
|
|
|
|
echo 'error - passwords dont match'
|
|
|
|
exit
|
|
|
|
fi
|
|
|
|
OSUPL_PASSWORD=$PASSWORD1
|
|
|
|
export OSUPL_PASSWORD
|
|
|
|
}
|
|
|
|
|
2013-05-17 07:59:58 +04:00
|
|
|
update_win_www_download_links()
|
2013-05-15 08:45:40 +04:00
|
|
|
{
|
|
|
|
cd $STARTPATH
|
2013-05-16 04:33:55 +04:00
|
|
|
git clone git@github.com:openscad/openscad.github.com.git
|
2013-05-15 08:45:40 +04:00
|
|
|
cd openscad.github.com
|
|
|
|
cd inc
|
|
|
|
echo `pwd`
|
2013-08-14 07:00:48 +04:00
|
|
|
# BASEURL='https://openscad.googlecode.com/files/'
|
2013-08-14 07:24:03 +04:00
|
|
|
BASEURL='http://files.openscad.org/'
|
2013-05-15 08:45:40 +04:00
|
|
|
DATECODE=`date +"%Y.%m.%d"`
|
|
|
|
|
2013-11-30 23:42:09 +04:00
|
|
|
mv win_snapshot_links.js win_snapshot_links.js.backup
|
2013-05-15 08:45:40 +04:00
|
|
|
rm win_snapshot_links.js
|
2013-05-29 09:38:06 +04:00
|
|
|
echo "fileinfo['WIN64_SNAPSHOT1_URL'] = '$BASEURL$WIN64_PACKAGEFILE1'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN64_SNAPSHOT2_URL'] = '$BASEURL$WIN64_PACKAGEFILE2'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN64_SNAPSHOT1_NAME'] = 'OpenSCAD $DATECODE'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN64_SNAPSHOT2_NAME'] = 'OpenSCAD $DATECODE'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN64_SNAPSHOT1_SIZE'] = '$WIN64_PACKAGEFILE1_SIZE'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN64_SNAPSHOT2_SIZE'] = '$WIN64_PACKAGEFILE2_SIZE'" >> win_snapshot_links.js
|
|
|
|
|
|
|
|
echo "fileinfo['WIN32_SNAPSHOT1_URL'] = '$BASEURL$WIN32_PACKAGEFILE1'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN32_SNAPSHOT2_URL'] = '$BASEURL$WIN32_PACKAGEFILE2'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN32_SNAPSHOT1_NAME'] = 'OpenSCAD $DATECODE'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN32_SNAPSHOT2_NAME'] = 'OpenSCAD $DATECODE'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN32_SNAPSHOT1_SIZE'] = '$WIN32_PACKAGEFILE1_SIZE'" >> win_snapshot_links.js
|
|
|
|
echo "fileinfo['WIN32_SNAPSHOT2_SIZE'] = '$WIN32_PACKAGEFILE2_SIZE'" >> win_snapshot_links.js
|
2013-05-15 08:45:40 +04:00
|
|
|
echo 'modified win_snapshot_links.js'
|
|
|
|
|
2013-05-16 04:33:55 +04:00
|
|
|
PAGER=cat git diff
|
|
|
|
if [ ! $DRYRUN ]; then
|
2013-05-16 02:04:46 +04:00
|
|
|
git commit -a -m 'builder.sh - updated snapshot links'
|
2013-05-19 00:40:01 +04:00
|
|
|
git push origin master
|
2013-05-16 02:04:46 +04:00
|
|
|
else
|
|
|
|
echo dry run, not updating www links
|
|
|
|
fi
|
2013-05-15 08:45:40 +04:00
|
|
|
}
|
|
|
|
|
2013-06-17 09:59:14 +04:00
|
|
|
# FIXME: We might be running this locally and not need an ssh agent.
|
|
|
|
# Before checking $SSH_AUTH_SOCK, try 'ssh -T git@github.com' to verify that we
|
|
|
|
# can access github over ssh
|
2013-05-15 08:45:40 +04:00
|
|
|
check_ssh_agent()
|
|
|
|
{
|
2013-05-18 00:32:23 +04:00
|
|
|
if [ $DRYRUN ]; then echo 'skipping ssh, dry run'; return; fi
|
2014-03-24 06:53:38 +04:00
|
|
|
if [ $SSH_AUTH_SKIP ]; then
|
|
|
|
return
|
|
|
|
fi
|
2013-05-15 08:45:40 +04:00
|
|
|
if [ ! $SSH_AUTH_SOCK ]; then
|
|
|
|
echo 'please start an ssh-agent for github.com/openscad/openscad.github.com uploads'
|
2013-05-16 02:00:40 +04:00
|
|
|
echo 'for example:'
|
2013-05-15 08:45:40 +04:00
|
|
|
echo
|
|
|
|
echo ' ssh-agent > .tmp && source .tmp && ssh-add'
|
|
|
|
echo
|
2014-03-24 06:53:38 +04:00
|
|
|
echo 'to force a run anyway, set SSH_AUTH_SKIP environment variable to 1'
|
|
|
|
exit 1
|
2013-05-15 08:45:40 +04:00
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2013-05-18 23:37:04 +04:00
|
|
|
init_variables $*
|
2013-11-30 23:42:09 +04:00
|
|
|
if [ $DOUPLOAD ]; then
|
|
|
|
check_ssh_agent
|
|
|
|
fi
|
2013-05-12 21:19:04 +04:00
|
|
|
check_starting_path
|
2014-03-25 07:14:26 +04:00
|
|
|
check_nsis
|
2013-05-12 21:19:04 +04:00
|
|
|
read_username_from_user
|
|
|
|
read_password_from_user
|
2013-11-30 23:42:09 +04:00
|
|
|
get_openscad_source_code
|
|
|
|
if [ $DOBUILD ]; then
|
2013-05-18 23:37:04 +04:00
|
|
|
build_win32
|
|
|
|
build_win64
|
|
|
|
fi
|
2013-11-30 23:42:09 +04:00
|
|
|
if [ $DOUPLOAD ]; then
|
|
|
|
upload_win32
|
|
|
|
upload_win64
|
|
|
|
update_win_www_download_links
|
|
|
|
fi
|
2013-05-12 21:19:04 +04:00
|
|
|
|