mirror of https://github.com/BOINC/boinc.git
Merge pull request #1819 from BOINC/travis_linux_build2
Build: restructure dependency builds for Linux
This commit is contained in:
commit
38b0106074
|
@ -105,6 +105,11 @@ drupal/sites/default/project
|
|||
## translation system
|
||||
locale/*/*.flag
|
||||
|
||||
## dependency builds and CI cache directories
|
||||
3rdParty/linux/
|
||||
3rdParty/mac/
|
||||
3rdParty/buildCache/
|
||||
|
||||
.libs/
|
||||
svn_version.h
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ sudo: false
|
|||
cache:
|
||||
apt: true
|
||||
directories:
|
||||
- build/wxWidgets-3.0.2
|
||||
- 3rdParty/buildCache
|
||||
|
||||
addons:
|
||||
coverity_scan:
|
||||
|
@ -81,6 +81,6 @@ script:
|
|||
- if [[ "${BOINC_TYPE}" == "server" ]]; then ( ./configure --disable-client --disable-manager && make ) fi
|
||||
- if [[ "${BOINC_TYPE}" == "client" ]]; then ( ./configure --disable-server --disable-manager && make ) fi
|
||||
- if [[ "${BOINC_TYPE}" == "apps" ]]; then ( ./configure --enable-apps --disable-server --disable-client --disable-manager && make ) fi
|
||||
- if [[ "${BOINC_TYPE}" == "manager" ]]; then ( ./build/getWxWidgets.sh && ./configure --disable-server --disable-client --with-wxdir=./build/wxWidgets-3.0.2/buildgtk && make ) fi
|
||||
- if [[ "${BOINC_TYPE}" == "manager" ]]; then ( ./3rdParty/buildLinuxDependencies.sh && ./configure --disable-server --disable-client --with-wx-prefix=${TRAVIS_BUILD_DIR}/3rdParty/buildCache/linux && make ) fi
|
||||
- if [[ "${BOINC_TYPE}" == "libs-mingw" ]]; then ( cd lib && MINGW=x86_64-w64-mingw32 make -f Makefile.mingw ) fi
|
||||
- if [[ "${BOINC_TYPE}" == "apps-mingw" ]]; then ( cd lib && MINGW=x86_64-w64-mingw32 make -f Makefile.mingw wrapper ) fi
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
# Purpose of 3rdParty
|
||||
|
||||
This directory is used to download and build dependencies for BOINC components.
|
||||
Archives should be downloaded into a platform specific subdirectory (e.g linux, mac, ...)
|
||||
to allow cross compilation of several platforms on a single host.
|
||||
|
||||
Build products of dependencies should be installed into a corresponding subdirectory of
|
||||
3rdParty/buildCache to allow CI systems to cache this data between BOINC builds.
|
||||
|
||||
See the existing [buildLinuxDependencies.sh](buildLinuxDependencies.sh) and
|
||||
[buildMacDependencies.sh](buildMacDependencies.sh) scripts for how this is done
|
||||
on Linux and Mac currently.
|
|
@ -0,0 +1,137 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This file is part of BOINC.
|
||||
# http://boinc.berkeley.edu
|
||||
# Copyright (C) 2017 University of California
|
||||
#
|
||||
# BOINC is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License
|
||||
# as published by the Free Software Foundation,
|
||||
# either version 3 of the License, or (at your option) any later version.
|
||||
#
|
||||
# BOINC is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
## support script to build a specific wxWidgets version for linux
|
||||
## This script checks if a cached version is available and builts one if not.
|
||||
## The build is done in 3rdParty/linux and usable files are installed to 3rdParty/buildCache/linux
|
||||
## in order to keep the cache as small as possible
|
||||
## The 3rdParty/buildCache directory can be cached by CI systems for all subsequent builds
|
||||
|
||||
# checks if a given path is canonical (absolute and does not contain relative links)
|
||||
# from http://unix.stackexchange.com/a/256437
|
||||
isPathCanonical() {
|
||||
case "x$1" in
|
||||
(x*/..|x*/../*|x../*|x*/.|x*/./*|x./*)
|
||||
rc=1
|
||||
;;
|
||||
(x/*)
|
||||
rc=0
|
||||
;;
|
||||
(*)
|
||||
rc=1
|
||||
;;
|
||||
esac
|
||||
return $rc
|
||||
}
|
||||
|
||||
# check working directory because the script needs to be called like: ./3rdParty/buildLinuxDependencies.sh
|
||||
if [ ! -d "3rdParty" ]; then
|
||||
echo "start this script in the source root directory"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ROOTDIR=$(pwd)
|
||||
cache_dir=""
|
||||
doclean=""
|
||||
wxoption=""
|
||||
build_config="Release"
|
||||
while [[ $# -gt 0 ]]; do
|
||||
key="$1"
|
||||
case $key in
|
||||
--cache_dir)
|
||||
cache_dir="$2"
|
||||
shift
|
||||
;;
|
||||
--clean)
|
||||
doclean="yes"
|
||||
;;
|
||||
--debug)
|
||||
wxoption="--debug"
|
||||
build_config="Debug"
|
||||
;;
|
||||
*)
|
||||
echo "unrecognized option $key"
|
||||
;;
|
||||
esac
|
||||
shift # past argument or value
|
||||
done
|
||||
|
||||
if [ "x$cache_dir" != "x" ]; then
|
||||
if isPathCanonical "$cache_dir" && [ "$cache_dir" != "/" ]; then
|
||||
PREFIX="$cache_dir"
|
||||
else
|
||||
echo "cache_dir must be an absolute path without ./ or ../ in it"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
PREFIX="$(pwd)/3rdParty/buildCache/linux"
|
||||
fi
|
||||
|
||||
if [ -f "${PREFIX}/build-config" ]; then
|
||||
cur_config=$(<${PREFIX}/build-config)
|
||||
if [ "${cur_config}" != "${build_config}" ]; then
|
||||
doclean="yes"
|
||||
wxoption="${wxoption} --clean"
|
||||
fi
|
||||
else
|
||||
doclean="yes"
|
||||
wxoption="${wxoption} --clean"
|
||||
fi
|
||||
|
||||
download_and_build() {
|
||||
cd "${ROOTDIR}/3rdParty/linux" || exit 1
|
||||
DIRNAME="${1}"
|
||||
FILENAME="${2}"
|
||||
DLURL="${3}"
|
||||
BUILDSCRIPT="${4}"
|
||||
FLAGFILE="${PREFIX}/${DIRNAME}_done"
|
||||
if [ -e "${FLAGFILE}" ]; then
|
||||
echo "${DIRNAME} seems already to be present in ${PREFIX}"
|
||||
return 0
|
||||
fi
|
||||
if [ ! -d ${DIRNAME} ]; then
|
||||
if [ ! -e ${FILENAME} ]; then
|
||||
wget ${DLURL}
|
||||
fi
|
||||
tar -xf ${FILENAME}
|
||||
fi
|
||||
cd ${DIRNAME} || exit 1
|
||||
source ${BUILDSCRIPT} --prefix ${PREFIX}
|
||||
if [ $? -ne 0 ]; then exit 1; fi
|
||||
cd ../.. || exit 1
|
||||
touch ${FLAGFILE}
|
||||
}
|
||||
|
||||
mkdir -p 3rdParty/linux
|
||||
mkdir -p ${PREFIX}
|
||||
cd "${ROOTDIR}/3rdParty/linux" || exit 1
|
||||
|
||||
if [ "${doclean}" = "yes" ]; then
|
||||
echo "cleaning cache"
|
||||
rm -rf ${PREFIX}
|
||||
mkdir -p ${PREFIX}
|
||||
echo ${build_config} >${PREFIX}/build-config
|
||||
fi
|
||||
|
||||
#download_and_build $DIRNAME $FILENAME $DOWNLOADURL $BUILDSCRIPT
|
||||
download_and_build "wxWidgets-3.0.2" "wxWidgets-3.0.2.tar.bz2" "https://sourceforge.net/projects/wxwindows/files/3.0.2/wxWidgets-3.0.2.tar.bz2" "${ROOTDIR}/3rdParty/buildWxLinux.sh ${wxoption}"
|
||||
|
||||
# change back to root directory
|
||||
cd ${ROOTDIR} || exit 1
|
|
@ -0,0 +1,101 @@
|
|||
#!/bin/bash
|
||||
|
||||
# This file is part of BOINC.
|
||||
# http://boinc.berkeley.edu
|
||||
# Copyright (C) 2017 University of California
|
||||
#
|
||||
# BOINC is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License
|
||||
# as published by the Free Software Foundation,
|
||||
# either version 3 of the License, or (at your option) any later version.
|
||||
#
|
||||
# BOINC is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# Script to build a wxWidgets GTK version for BOINC
|
||||
|
||||
# Usage:
|
||||
# cd [path]/wxWidgets-3.0.2/
|
||||
# source path_to_this_script [--clean] [--debug] [--prefix PATH]
|
||||
#
|
||||
# the --clean argument will force a full rebuild.
|
||||
# the --debug argument will build the debug version of the library
|
||||
# if --prefix is given as absolute path the library is installed into there
|
||||
|
||||
# Patch wxwidgets to work with GCC6
|
||||
# from https://github.com/wxWidgets/wxWidgets/commit/73e9e18ea09ffffcaac50237def0d9728a213c02
|
||||
if [ ! -f src/stc/scintilla/src/Editor.cxx.orig ]; then
|
||||
cat >> /tmp/Editor.cxx.patch << ENDOFFILE
|
||||
--- Editor.cxx 2014-10-06 23:33:44.000000000 +0200
|
||||
+++ Editor_patched.cxx 2017-03-20 10:24:14.776685161 +0100
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <ctype.h>
|
||||
#include <assert.h>
|
||||
|
||||
+#include <cmath>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <map>
|
||||
@@ -5841,9 +5842,9 @@
|
||||
}
|
||||
|
||||
static bool Close(Point pt1, Point pt2) {
|
||||
- if (abs(pt1.x - pt2.x) > 3)
|
||||
+ if (std::abs(pt1.x - pt2.x) > 3)
|
||||
return false;
|
||||
- if (abs(pt1.y - pt2.y) > 3)
|
||||
+ if (std::abs(pt1.y - pt2.y) > 3)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
ENDOFFILE
|
||||
patch -blfu src/stc/scintilla/src/Editor.cxx /tmp/Editor.cxx.patch
|
||||
rm -f /tmp/Editor.cxx.patch
|
||||
else
|
||||
echo "src/stc/scintilla/src/Editor.cxx already patched"
|
||||
fi
|
||||
|
||||
doclean=""
|
||||
debug_flag="--disable-debug_flag"
|
||||
lprefix=""
|
||||
cmdline_prefix=""
|
||||
while [[ $# -gt 0 ]]; do
|
||||
key="$1"
|
||||
case $key in
|
||||
-clean|--clean)
|
||||
doclean="yes"
|
||||
;;
|
||||
-debug|--debug)
|
||||
debug_flag="--enable-debug"
|
||||
;;
|
||||
-prefix|--prefix)
|
||||
lprefix="$2"
|
||||
cmdline_prefix="--prefix=${lprefix}"
|
||||
shift
|
||||
;;
|
||||
esac
|
||||
shift # past argument or value
|
||||
done
|
||||
|
||||
if [ -d buildgtk ] && [ "${doclean}" = "yes" ]; then
|
||||
rm -rf buildgtk
|
||||
fi
|
||||
mkdir -p buildgtk
|
||||
cd buildgtk || return 1
|
||||
|
||||
../configure "${cmdline_prefix}" --with-gtk --disable-shared --enable-webview --disable-gtktest --disable-sdltest ${debug_flag}
|
||||
if [ $? -ne 0 ]; then cd ..; return 1; fi
|
||||
make 1>/dev/null # the wxWidgets build is very noisy so tune it down to warnings and errors only
|
||||
if [ $? -ne 0 ]; then cd ..; return 1; fi
|
||||
if [ "x${lprefix}" != "x" ]; then
|
||||
make install
|
||||
if [ $? -ne 0 ]; then cd ..; return 1; fi
|
||||
fi
|
||||
|
||||
cd ..
|
||||
return 0
|
|
@ -1,26 +0,0 @@
|
|||
#!/bin/bash
|
||||
set -x
|
||||
|
||||
## Travis-CI support script to built a specific wxWidgets version
|
||||
## This script checks if a cached version is available and builts one if not.
|
||||
## The directory is cached by Travis-CI for all subsequent runs of the VM
|
||||
|
||||
# change to correct working directory because the script is called like: ./build/getWxWidgets.sh
|
||||
cd ./build
|
||||
|
||||
# if the versioning changes try to delete the old directory and change .travis.yml to cache the new directory
|
||||
if [ ! -e "wxWidgets-3.0.2/build_complete" ]; then
|
||||
wget https://sourceforge.net/projects/wxwindows/files/3.0.2/wxWidgets-3.0.2.tar.bz2
|
||||
tar -xf wxWidgets-3.0.2.tar.bz2
|
||||
cd wxWidgets-3.0.2
|
||||
mkdir buildgtk
|
||||
cd buildgtk
|
||||
../configure --with-gtk --disable-shared --enable-webview --disable-gtktest --disable-sdltest
|
||||
make
|
||||
cd ..
|
||||
touch build_complete
|
||||
cd ..
|
||||
fi
|
||||
|
||||
# change back to root directory
|
||||
cd ..
|
Loading…
Reference in New Issue