52bf5a6b0f
This fixes an issue reported by users on Ubuntu 18.04 LTS. They got the following error message when starting dash-qt: xkbcommon: ERROR: failed to add default include path auto Qt: Failed to create XKB context! Use QT_XKB_CONFIG_ROOT environmental variable to provide an additional search path, add ':' as separator to provide several search paths and/or make sure that XKB configuration data directory contains recent enough contents, to update please see http://cgit.freedesktop.org/xkeyboard-config/ . Dash-qt starts then, but does not accept any input from the keyboard. The reason is that qt tries to find the xkb config root in the configure phase, but fails to find it. To make this detection work, libxkbcommon has to be installed on the host system, even though it is then never used.
219 lines
7.5 KiB
YAML
Executable File
219 lines
7.5 KiB
YAML
Executable File
---
|
|
name: "dash-linux-0.13"
|
|
enable_cache: true
|
|
suites:
|
|
- "bionic"
|
|
architectures:
|
|
- "amd64"
|
|
packages:
|
|
- "curl"
|
|
- "g++-aarch64-linux-gnu"
|
|
- "g++-7-aarch64-linux-gnu"
|
|
- "gcc-7-aarch64-linux-gnu"
|
|
- "binutils-aarch64-linux-gnu"
|
|
- "g++-arm-linux-gnueabihf"
|
|
- "g++-7-arm-linux-gnueabihf"
|
|
- "gcc-7-arm-linux-gnueabihf"
|
|
- "binutils-arm-linux-gnueabihf"
|
|
- "g++-7-multilib"
|
|
- "gcc-7-multilib"
|
|
- "binutils-gold"
|
|
- "git"
|
|
- "pkg-config"
|
|
- "autoconf"
|
|
- "libtool"
|
|
- "automake"
|
|
- "cmake"
|
|
- "faketime"
|
|
- "bsdmainutils"
|
|
- "ca-certificates"
|
|
- "python"
|
|
- "python3"
|
|
- "libxkbcommon0"
|
|
remotes:
|
|
- "url": "https://github.com/dashpay/dash.git"
|
|
"dir": "dash"
|
|
files: []
|
|
script: |
|
|
|
|
WRAP_DIR=$HOME/wrapped
|
|
HOSTS="i686-pc-linux-gnu x86_64-linux-gnu arm-linux-gnueabihf aarch64-linux-gnu"
|
|
CONFIGFLAGS="--enable-glibc-back-compat --enable-reduce-exports --disable-bench --disable-gui-tests"
|
|
FAKETIME_HOST_PROGS=""
|
|
FAKETIME_PROGS="date ar ranlib nm"
|
|
HOST_CFLAGS="-O2 -g"
|
|
HOST_CXXFLAGS="-O2 -g"
|
|
HOST_LDFLAGS=-static-libstdc++
|
|
|
|
export QT_RCC_TEST=1
|
|
export GZIP="-9n"
|
|
export TAR_OPTIONS="--mtime="$REFERENCE_DATE\\\ $REFERENCE_TIME""
|
|
export TZ="UTC"
|
|
export BUILD_DIR=`pwd`
|
|
mkdir -p ${WRAP_DIR}
|
|
if test -n "$GBUILD_CACHE_ENABLED"; then
|
|
export SOURCES_PATH=${GBUILD_COMMON_CACHE}
|
|
export BASE_CACHE=${GBUILD_PACKAGE_CACHE}/depends
|
|
mkdir -p ${BASE_CACHE} ${SOURCES_PATH}
|
|
|
|
# Setup ccache to use correct cache directories and fix the compiler check of ccache
|
|
CONFIGFLAGS="${CONFIGFLAGS} --enable-ccache"
|
|
export CCACHE_DIR=${GBUILD_PACKAGE_CACHE}/ccache
|
|
# As we later wrap the gcc binaries, this is fast
|
|
export CCACHE_COMPILERCHECK="content"
|
|
if [ -f ${GBUILD_PACKAGE_CACHE}/ccache.tar.gz ]; then
|
|
pushd ${GBUILD_PACKAGE_CACHE}
|
|
tar xzf ccache.tar.gz
|
|
rm ccache.tar.gz
|
|
popd
|
|
fi
|
|
else
|
|
CONFIGFLAGS="${CONFIGFLAGS} --disable-ccache"
|
|
fi
|
|
|
|
# We include the GCC version in all wrappers so that ccache can detect compiler upgrades when hashing the wrappers
|
|
GCCVERSION=`gcc --version | head -1`
|
|
|
|
function create_global_faketime_wrappers {
|
|
for prog in ${FAKETIME_PROGS}; do
|
|
echo '#!/bin/bash' > ${WRAP_DIR}/${prog}
|
|
echo "# GCCVERSION=${GCCVERSION}" >> ${WRAP_DIR}/${prog}
|
|
echo "REAL=\`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1\`" >> ${WRAP_DIR}/${prog}
|
|
echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${prog}
|
|
echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${prog}
|
|
echo "\$REAL \$@" >> $WRAP_DIR/${prog}
|
|
chmod +x ${WRAP_DIR}/${prog}
|
|
touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${prog}
|
|
done
|
|
}
|
|
|
|
function create_per-host_faketime_wrappers {
|
|
for i in $HOSTS; do
|
|
for prog in ${FAKETIME_HOST_PROGS}; do
|
|
echo '#!/bin/bash' > ${WRAP_DIR}/${i}-${prog}
|
|
echo "# GCCVERSION=${GCCVERSION}" >> ${WRAP_DIR}/${i}-${prog}
|
|
echo "REAL=\`which -a ${i}-${prog} | grep -v ${WRAP_DIR}/${i}-${prog} | head -1\`" >> ${WRAP_DIR}/${i}-${prog}
|
|
echo 'export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/faketime/libfaketime.so.1' >> ${WRAP_DIR}/${i}-${prog}
|
|
echo "export FAKETIME=\"$1\"" >> ${WRAP_DIR}/${i}-${prog}
|
|
echo "\$REAL \$@" >> $WRAP_DIR/${i}-${prog}
|
|
chmod +x ${WRAP_DIR}/${i}-${prog}
|
|
touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${i}-${prog}
|
|
done
|
|
done
|
|
}
|
|
|
|
# Faketime for depends so intermediate results are comparable
|
|
export PATH_orig=${PATH}
|
|
create_global_faketime_wrappers "2000-01-01 12:00:00"
|
|
create_per-host_faketime_wrappers "2000-01-01 12:00:00"
|
|
export PATH=${WRAP_DIR}:${PATH}
|
|
|
|
EXTRA_INCLUDES_BASE=$WRAP_DIR/extra_includes
|
|
mkdir -p $EXTRA_INCLUDES_BASE
|
|
|
|
# x86 needs /usr/include/i386-linux-gnu/asm pointed to /usr/include/x86_64-linux-gnu/asm,
|
|
# but we can't write there. Instead, create a link here and force it to be included in the
|
|
# search paths by wrapping gcc/g++.
|
|
|
|
mkdir -p $EXTRA_INCLUDES_BASE/i686-pc-linux-gnu
|
|
rm -f $WRAP_DIR/extra_includes/i686-pc-linux-gnu/asm
|
|
ln -s /usr/include/x86_64-linux-gnu/asm $EXTRA_INCLUDES_BASE/i686-pc-linux-gnu/asm
|
|
|
|
for prog in gcc g++; do
|
|
rm -f ${WRAP_DIR}/${prog}
|
|
cat << EOF > ${WRAP_DIR}/${prog}
|
|
#!/bin/bash
|
|
# GCCVERSION=${GCCVERSION}
|
|
REAL="`which -a ${prog} | grep -v ${WRAP_DIR}/${prog} | head -1`"
|
|
for var in "\$@"
|
|
do
|
|
if [ "\$var" = "-m32" ]; then
|
|
export C_INCLUDE_PATH="$EXTRA_INCLUDES_BASE/i686-pc-linux-gnu"
|
|
export CPLUS_INCLUDE_PATH="$EXTRA_INCLUDES_BASE/i686-pc-linux-gnu"
|
|
break
|
|
fi
|
|
done
|
|
\$REAL \$@
|
|
EOF
|
|
chmod +x ${WRAP_DIR}/${prog}
|
|
touch -d "${REFERENCE_DATETIME}" ${WRAP_DIR}/${prog}
|
|
done
|
|
|
|
cd dash
|
|
BASEPREFIX=`pwd`/depends
|
|
# Build dependencies for each host
|
|
for i in $HOSTS; do
|
|
EXTRA_INCLUDES="$EXTRA_INCLUDES_BASE/$i"
|
|
if [ -d "$EXTRA_INCLUDES" ]; then
|
|
export HOST_ID_SALT="$EXTRA_INCLUDES"
|
|
fi
|
|
make ${MAKEOPTS} -C ${BASEPREFIX} HOST="${i}"
|
|
unset HOST_ID_SALT
|
|
done
|
|
|
|
# Faketime for binaries
|
|
export PATH=${PATH_orig}
|
|
create_global_faketime_wrappers "${REFERENCE_DATETIME}"
|
|
create_per-host_faketime_wrappers "${REFERENCE_DATETIME}"
|
|
export PATH=${WRAP_DIR}:${PATH}
|
|
|
|
# Create the release tarball using (arbitrarily) the first host
|
|
./autogen.sh
|
|
CONFIG_SITE=${BASEPREFIX}/`echo "${HOSTS}" | awk '{print $1;}'`/share/config.site ./configure --prefix=/
|
|
make dist
|
|
SOURCEDIST=`echo dashcore-*.tar.gz`
|
|
DISTNAME=`echo ${SOURCEDIST} | sed 's/.tar.*//'`
|
|
# Correct tar file order
|
|
mkdir -p temp
|
|
pushd temp
|
|
tar xf ../$SOURCEDIST
|
|
find dashcore-* | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ../$SOURCEDIST
|
|
popd
|
|
|
|
ORIGPATH="$PATH"
|
|
# Extract the release tarball into a dir for each host and build
|
|
for i in ${HOSTS}; do
|
|
export PATH=${BASEPREFIX}/${i}/native/bin:${ORIGPATH}
|
|
mkdir -p distsrc-${i}
|
|
cd distsrc-${i}
|
|
INSTALLPATH=`pwd`/installed/${DISTNAME}
|
|
mkdir -p ${INSTALLPATH}
|
|
tar --strip-components=1 -xf ../$SOURCEDIST
|
|
|
|
CONFIG_SITE=${BASEPREFIX}/${i}/share/config.site ./configure --prefix=/ --disable-maintainer-mode --disable-dependency-tracking ${CONFIGFLAGS} CFLAGS="${HOST_CFLAGS}" CXXFLAGS="${HOST_CXXFLAGS}" LDFLAGS="${HOST_LDFLAGS}"
|
|
make ${MAKEOPTS}
|
|
make ${MAKEOPTS} -C src check-security
|
|
|
|
#TODO: This is a quick hack that disables symbol checking for arm.
|
|
# Instead, we should investigate why these are popping up.
|
|
# For aarch64, we'll need to bump up the min GLIBC version, as the abi
|
|
# support wasn't introduced until 2.17.
|
|
case $i in
|
|
aarch64-*) : ;;
|
|
arm-*) : ;;
|
|
*) make ${MAKEOPTS} -C src check-symbols ;;
|
|
esac
|
|
|
|
make install DESTDIR=${INSTALLPATH}
|
|
cd installed
|
|
find . -name "lib*.la" -delete
|
|
find . -name "lib*.a" -delete
|
|
rm -rf ${DISTNAME}/lib/pkgconfig
|
|
find ${DISTNAME}/bin -type f -executable -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \;
|
|
find ${DISTNAME}/lib -type f -exec ../contrib/devtools/split-debug.sh {} {} {}.dbg \;
|
|
find ${DISTNAME} -not -name "*.dbg" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}.tar.gz
|
|
find ${DISTNAME} -name "*.dbg" | sort | tar --no-recursion --mode='u+rw,go+r-w,a+X' --owner=0 --group=0 -c -T - | gzip -9n > ${OUTDIR}/${DISTNAME}-${i}-debug.tar.gz
|
|
cd ../../
|
|
rm -rf distsrc-${i}
|
|
done
|
|
mkdir -p $OUTDIR/src
|
|
mv $SOURCEDIST $OUTDIR/src
|
|
|
|
# Compress ccache (otherwise the assert file will get too huge)
|
|
if [ "$CCACHE_DIR" != "" ]; then
|
|
pushd ${GBUILD_PACKAGE_CACHE}
|
|
tar czf ccache.tar.gz ccache
|
|
rm -rf ccache
|
|
popd
|
|
fi
|