diff --git a/docker-builder-data/build/script/common/helpers.sh b/docker-builder-data/build/script/common/helpers.sh index ba6e17b..2a5a375 100644 --- a/docker-builder-data/build/script/common/helpers.sh +++ b/docker-builder-data/build/script/common/helpers.sh @@ -1,5 +1,59 @@ # helpers +allvars() { + for LOCAL_ALLVARS_VAR_PREFIX in _ {a..z} {A..Z}; do + eval echo -n $\{\!$LOCAL_ALLVARS_VAR_PREFIX*} | sed "s|LOCAL_ALLVARS_VAR_PREFIX||g" + echo -n " " + done +} + +vars_clear() { + # local PREFIX=$1 + [ ! -z "$1" ] || return 1 + for VAR in $(allvars); do + if [[ "$VAR" = $1* ]]; then + unset $VAR + fi + done +} + +vars_copy() { + # local PREFIX_FROM=$1 + # local PREFIX_TO=$2 + # local EXPORT=$3 + [ "$1" == "$2" ] && return 0 + for VAR in $(allvars); do + if [[ "$VAR" = $1* ]]; then + if [ "$3" = "export" ]; then + eval export ${2}${VAR#$1}='${!VAR}' + else + eval ${2}${VAR#$1}='${!VAR}' + if + fi + done +} + +vars_rename() { + # local PREFIX_FROM=$1 + # local PREFIX_TO=$2 + [ ! -z "$1" ] || return 1 + vars_copy "$1" "$2" + vars_clear "$1" +} + +vars_backup() { + # local PREFIX=$1 + [ ! -z "$1" ] || return 1 + vars_copy "" "$1" +} + +vars_restore() { + # local PREFIX=$1 + # local EXPORT=$2 + [ ! -z "$1" ] || return 1 + vars_copy "$1" "" "$2" +} + copy() { local SRC=$1 local DEST=$2 @@ -77,8 +131,8 @@ sha512dir() { local DIR="$1" local INFO="$2" - [ "$DIR" = ".git" ] || return 0 - [ "$DIR" = *.po ] || return 0 + [[ "$DIR" = ".git" ]] || return 0 + [[ "$DIR" = *.po ]] || return 0 if [ "$INFO" = "info" ]; then basename "$DIR" || return 1 diff --git a/docker-builder-data/build/script/common/manager.sh b/docker-builder-data/build/script/common/manager.sh index 03668c1..1d0b925 100755 --- a/docker-builder-data/build/script/common/manager.sh +++ b/docker-builder-data/build/script/common/manager.sh @@ -74,34 +74,6 @@ if [ ! -f "$TOOLCHAIN_SCRIPT" ]; then TOOLCHAIN_SCRIPT=$NATIVE_TOOLCHAIN_SCRIPT fi -# initial system vars - -INITIAL_HOST=$HOST -INITIAL_PATH=$PATH -INITIAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH -INITIAL_CC=$CC -INITIAL_CXX=$CXX -INITIAL_FORTRAN=$FORTRAN -INITIAL_LD=$LD -INITIAL_AR=$AR -INITIAL_RANLIB=$RANLIB -INITIAL_LDFLAGS=$LDFLAGS -INITIAL_CFLAGS=$CFLAGS -INITIAL_CPPFLAGS=$CPPFLAGS -INITIAL_CXXFLAGS=$CXXFLAGS -INITIAL_PKG_CONFIG_PATH=$PKG_CONFIG_PATH -INITIAL_PKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR -INITIAL_XDG_DATA_DIRS=$XDG_DATA_DIRS -INITIAL_ACLOCAL_PATH=$ACLOCAL_PATH -INITIAL_CMAKE_INCLUDE_PATH=$CMAKE_INCLUDE_PATH -INITIAL_CMAKE_LIBRARY_PATH=$CMAKE_LIBRARY_PATH - -if [ ! -z "$INITIAL_ACLOCAL_PATH" ]; then - INITIAL_ACLOCAL_PATH = "$INITIAL_ACLOCAL_PATH:" -fi -INITIAL_ACLOCAL_PATH="$INITIAL_ACLOCAL_PATH/usr/share/aclocal" - - # work vars IS_NATIVE= @@ -179,6 +151,12 @@ FUNC_DEPS_env_release="envdeps_release install_release" source "$COMMON_SCRIPT_DIR/helpers.sh" +# initial system vars + +unset VARS_TO_RESTORE +vars_clear "TC_" +vars_clear "INITIAL_" +vars_backup "INITIAL_" # internal functions @@ -273,6 +251,26 @@ prepare_install_release() { } set_environment_vars() { + # restore env + for VAR in $VARS_TO_RESTORE; do + VAR_FROM="INITIAL_$VAR" + if [ -z ${!VAR_FROM+x} ]; then + unset $VAR + else + eval $VAR='${!VAR_FROM}' + fi + done + + # set toolchain env + VARS_TO_RESTORE= + for VAR in $(allvars); do + if [[ "$VAR" = TC_* ]]; then + VARS_TO_RESTORE="$VARS_TO_RESTORE ${2}${VAR#$1}" + fi + done + vars_restore "TC_" "export" + + # set env export NAME=$1 export CURRENT_PACKET_DIR="$PACKET_DIR/$NAME" @@ -290,14 +288,12 @@ set_environment_vars() { export ENVDEPS_RELEASE_PACKET_DIR="$CURRENT_PACKET_DIR/envdeps_release" export ENV_RELEASE_PACKET_DIR="$CURRENT_PACKET_DIR/env_release" - export HOST=$TOOLCHAIN_HOST - export PATH="\ $ENVDEPS_NATIVE_PACKET_DIR/bin:\ $ENV_NATIVE_PACKET_DIR/bin:\ $ENVDEPS_PACKET_DIR/bin:\ $ENV_PACKET_DIR/bin:\ -$TOOLCHAIN_PATH" +$TC_PATH" export LD_LIBRARY_PATH="\ $ENVDEPS_NATIVE_PACKET_DIR/lib:\ @@ -308,46 +304,19 @@ $ENVDEPS_PACKET_DIR/lib:\ $ENVDEPS_PACKET_DIR/lib64:\ $ENV_PACKET_DIR/lib:\ $ENV_PACKET_DIR/lib64:\ -$TOOLCHAIN_LD_LIBRARY_PATH" - - export CC=$TOOLCHAIN_CC - export CXX=$TOOLCHAIN_CXX - export FORTRAN=$TOOLCHAIN_FORTRAN - export LD=$TOOLCHAIN_LD - export AR=$TOOLCHAIN_AR - export RANLIB=$TOOLCHAIN_RANLIB - - if [ -z "$CC" ]; then - export -n CC - fi - if [ -z "$CXX" ]; then - export -n CXX - fi - if [ -z "$FORTRAN" ]; then - export -n FORTRAN - fi - if [ -z "$LD" ]; then - export -n LD - fi - if [ -z "$AR" ]; then - export -n AR - fi - if [ -z "$RANLIB" ]; then - export -n RANLIB - fi - - - export LDFLAGS="-L$ENVDEPS_PACKET_DIR/lib -L$ENVDEPS_PACKET_DIR/lib64 $TOOLCHAIN_LDFLAGS" - export CFLAGS="-I$ENVDEPS_PACKET_DIR/include $TOOLCHAIN_CFLAGS" - export CPPFLAGS="-I$ENVDEPS_PACKET_DIR/include $TOOLCHAIN_CPPFLAGS" - export CXXFLAGS="-I$ENVDEPS_PACKET_DIR/include $TOOLCHAIN_CXXFLAGS" - export PKG_CONFIG_PATH="$ENVDEPS_PACKET_DIR/lib/pkgconfig:$ENVDEPS_PACKET_DIR/share/pkgconfig:$TOOLCHAIN_PKG_CONFIG_PATH" - export PKG_CONFIG_LIBDIR="$ENVDEPS_PACKET_DIR/lib:$TOOLCHAIN_PKG_CONFIG_LIBDIR" +$TC_LD_LIBRARY_PATH" + + export LDFLAGS="-L$ENVDEPS_PACKET_DIR/lib -L$ENVDEPS_PACKET_DIR/lib64 $TC_LDFLAGS" + export CFLAGS="-I$ENVDEPS_PACKET_DIR/include $TC_CFLAGS" + export CPPFLAGS="-I$ENVDEPS_PACKET_DIR/include $TC_CPPFLAGS" + export CXXFLAGS="-I$ENVDEPS_PACKET_DIR/include $TC_CXXFLAGS" + export PKG_CONFIG_PATH="$ENVDEPS_PACKET_DIR/lib/pkgconfig:$ENVDEPS_PACKET_DIR/share/pkgconfig:$TC_PKG_CONFIG_PATH" + export PKG_CONFIG_LIBDIR="$ENVDEPS_PACKET_DIR/lib:$TC_PKG_CONFIG_LIBDIR" export PKG_CONFIG_SYSROOT_DIR="/" - export XDG_DATA_DIRS="$ENVDEPS_PACKET_DIR/share:$TOOLCHAIN_XDG_DATA_DIRS" - export ACLOCAL_PATH="$ENVDEPS_PACKET_DIR/share/aclocal:$TOOLCHAIN_ACLOCAL_PATH" - export CMAKE_INCLUDE_PATH="$ENVDEPS_PACKET_DIR/include:$TOOLCHAIN_CMAKE_INCLUDE_PATH" - export CMAKE_LIBRARY_PATH="$ENVDEPS_PACKET_DIR/lib:$ENVDEPS_PACKET_DIR/lib64:$TOOLCHAIN_CMAKE_LIBRARY_PATH" + export XDG_DATA_DIRS="$ENVDEPS_PACKET_DIR/share:$TC_XDG_DATA_DIRS" + export ACLOCAL_PATH="$ENVDEPS_PACKET_DIR/share/aclocal:$TC_ACLOCAL_PATH" + export CMAKE_INCLUDE_PATH="$ENVDEPS_PACKET_DIR/include:$TC_CMAKE_INCLUDE_PATH" + export CMAKE_LIBRARY_PATH="$ENVDEPS_PACKET_DIR/lib:$ENVDEPS_PACKET_DIR/lib64:$TC_CMAKE_LIBRARY_PATH" } call_packet_function() { diff --git a/docker-builder-data/build/script/toolchain/none.sh b/docker-builder-data/build/script/toolchain/none.sh index 9ad8c23..562bd59 100755 --- a/docker-builder-data/build/script/toolchain/none.sh +++ b/docker-builder-data/build/script/toolchain/none.sh @@ -1,21 +1,28 @@ #!/bin/bash -export TOOLCHAIN_HOST=$INITIAL_HOST -export TOOLCHAIN_PATH=$INITIAL_PATH -export TOOLCHAIN_LD_LIBRARY_PATH=$INITIAL_LD_LIBRARY_PATH -export TOOLCHAIN_CC=$INITIAL_CC -export TOOLCHAIN_CXX=$INITIAL_CXX -export TOOLCHAIN_FORTRAN=$INITIAL_FORTRAN -export TOOLCHAIN_LD=$INITIAL_LD -export TOOLCHAIN_AR=$INITIAL_AR -export TOOLCHAIN_RANLIB=$INITIAL_RANLIB -export TOOLCHAIN_LDFLAGS=$INITIAL_LDFLAGS -export TOOLCHAIN_CFLAGS=$INITIAL_CFLAGS -export TOOLCHAIN_CPPFLAGS=$INITIAL_CPPFLAGS -export TOOLCHAIN_CXXFLAGS=$INITIAL_CXXFLAGS -export TOOLCHAIN_PKG_CONFIG_PATH="$INITIAL_PKG_CONFIG_PATH:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/i586-linux-gnu/pkgconfig:/usr/lib/i686-linux-gnu/pkgconfig" -export TOOLCHAIN_PKG_CONFIG_LIBDIR="$INITIAL_PKG_CONFIG_LIBDIR:/usr/lib:/usr/lib64:/usr/lib/x86_64-linux-gnu:/usr/lib/i686-linux-gnu" -export TOOLCHAIN_XDG_DATA_DIRS=$INITIAL_XDG_DATA_DIRS -export TOOLCHAIN_ACLOCAL_PATH=$INITIAL_ACLOCAL_PATH -export TOOLCHAIN_CMAKE_INCLUDE_PATH=$INITIAL_CMAKE_INCLUDE_PATH -export TOOLCHAIN_CMAKE_LIBRARY_PATH=$INITIAL_CMAKE_LIBRARY_PATH +vars_clear "TC_" + +# set vars which used explicitly in function manager.sh:set_environment_vars() + +export TC_PATH="$INITIAL_PATH" +export TC_LD_LIBRARY_PATH="$INITIAL_LD_LIBRARY_PATH" + +export TC_LDFLAGS="$INITIAL_LDFLAGS" +export TC_CFLAGS="$INITIAL_CFLAGS" +export TC_CPPFLAGS="$INITIAL_CPPFLAGS" +export TC_CXXFLAGS="$INITIAL_CXXFLAGS" + +export TC_PKG_CONFIG_PATH="$INITIAL_PKG_CONFIG_PATH:/usr/share/pkgconfig:/usr/lib/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/i586-linux-gnu/pkgconfig:/usr/lib/i686-linux-gnu/pkgconfig" +export TC_PKG_CONFIG_LIBDIR="$INITIAL_PKG_CONFIG_LIBDIR:/usr/lib:/usr/lib64:/usr/lib/x86_64-linux-gnu:/usr/lib/i686-linux-gnu" +export TC_XDG_DATA_DIRS="$INITIAL_XDG_DATA_DIRS" + +export TC_ACLOCAL_PATH="/usr/share/aclocal" +if [ ! -z "$INITIAL_ACLOCAL_PATH" ]; then + export TC_ACLOCAL_PATH="$INITIAL_ACLOCAL_PATH:$TC_ACLOCAL_PATH" +fi + +export TC_CMAKE_INCLUDE_PATH="$INITIAL_CMAKE_INCLUDE_PATH" +export TC_CMAKE_LIBRARY_PATH="$INITIAL_CMAKE_LIBRARY_PATH" + + + diff --git a/docker-builder-data/build/script/toolchain/win-32.sh b/docker-builder-data/build/script/toolchain/win-32.sh new file mode 100755 index 0000000..89e5ac2 --- /dev/null +++ b/docker-builder-data/build/script/toolchain/win-32.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +export TC_HOST="i686-w64-mingw32" +source "$TOOLCHAIN_SCRIPT_DIR/win-common.sh" \ No newline at end of file diff --git a/docker-builder-data/build/script/toolchain/win-64.sh b/docker-builder-data/build/script/toolchain/win-64.sh index b19c2a7..159ea48 100755 --- a/docker-builder-data/build/script/toolchain/win-64.sh +++ b/docker-builder-data/build/script/toolchain/win-64.sh @@ -1,21 +1,4 @@ #!/bin/bash -export TOOLCHAIN_HOST="x86_64-w64-mingw32" -export TOOLCHAIN_PATH="/usr/$TOOLCHAIN_HOST/bin:/usr/$TOOLCHAIN_HOST/sys-root/mingw/bin:$INITIAL_PATH" -export TOOLCHAIN_LD_LIBRARY_PATH="/usr/$TOOLCHAIN_HOST/sys-root/mingw/lib:$INITIAL_LD_LIBRARY_PATH" -export TOOLCHAIN_CC=/usr/bin/$TOOLCHAIN_HOST-gcc -export TOOLCHAIN_CXX=/usr/bin/$TOOLCHAIN_HOST-g++ -export TOOLCHAIN_FORTRAN=/usr/bin/$TOOLCHAIN_HOST-gfortran -export TOOLCHAIN_LD=/usr/bin/$TOOLCHAIN_HOST-ld -export TOOLCHAIN_AR=/usr/bin/$TOOLCHAIN_HOST-ar -export TOOLCHAIN_RANLIB=/usr/bin/$TOOLCHAIN_HOST-ranlib -export TOOLCHAIN_LDFLAGS=" -L/usr/$TOOLCHAIN_HOST/sys-root/mingw/lib $INITIAL_LDFLAGS" -export TOOLCHAIN_CFLAGS=" -I/usr/$TOOLCHAIN_HOST/sys-root/mingw/include $INITIAL_CFLAGS" -export TOOLCHAIN_CPPFLAGS=" -I/usr/$TOOLCHAIN_HOST/sys-root/mingw/include $INITIAL_CPPFLAGS" -export TOOLCHAIN_CXXFLAGS=" -I/usr/$TOOLCHAIN_HOST/sys-root/mingw/include $INITIAL_CXXFLAGS" -export TOOLCHAIN_PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/$TOOLCHAIN_HOST/sys-root/mingw/lib/pkgconfig" -export TOOLCHAIN_PKG_CONFIG_LIBDIR="/usr/$TOOLCHAIN_HOST/sys-root/mingw/lib" -export TOOLCHAIN_XDG_DATA_DIRS="$INITIAL_XDG_DATA_DIRS" -export TOOLCHAIN_ACLOCAL_PATH="$INITIAL_ACLOCAL_PATH" -export TOOLCHAIN_CMAKE_INCLUDE_PATH="/usr/$TOOLCHAIN_HOST/sys-root/mingw/include:$INITIAL_CMAKE_INCLUDE_PATH" -export TOOLCHAIN_CMAKE_LIBRARY_PATH="/usr/$TOOLCHAIN_HOST/sys-root/mingw/lib:$INITIAL_CMAKE_LIBRARY_PATH" +export TC_HOST="x86_64-w64-mingw32" +source "$TOOLCHAIN_SCRIPT_DIR/win-common.sh" \ No newline at end of file diff --git a/docker-builder-data/build/script/toolchain/win-common.sh b/docker-builder-data/build/script/toolchain/win-common.sh new file mode 100755 index 0000000..731c4ef --- /dev/null +++ b/docker-builder-data/build/script/toolchain/win-common.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# TC_HOST should be set before inclusion of this file +# +# Optional c/c++ flags from Fedora MinGW: +# -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 + +TC_EXTRA_CPP_OPTIONS="-pipe" + +export TC_PATH="/usr/$TC_HOST/bin:/usr/$TC_HOST/sys-root/mingw/bin:$INITIAL_PATH" +export TC_LD_LIBRARY_PATH="/usr/$TC_HOST/sys-root/mingw/lib:$INITIAL_LD_LIBRARY_PATH" + +export TC_ADDR2LINE=/usr/bin/$TC_HOST-addr2line +export TC_AS=/usr/bin/$TC_HOST-as +export TC_AR=/usr/bin/$TC_HOST-ar +export TC_CC=/usr/bin/$TC_HOST-gcc +export TC_CXXFILT=/usr/bin/$TC_HOST-c++filt +export TC_CXX=/usr/bin/$TC_HOST-c++ +export TC_CPP=/usr/bin/$TC_HOST-cpp +export TC_DLLTOOL=/usr/bin/$TC_HOST-dlltool +export TC_DLLWRAP=/usr/bin/$TC_HOST-dllwrap +export TC_ELFEDIT=/usr/bin/$TC_HOST-elfedit +export TC_FORTRAN=/usr/bin/$TC_HOST-gfortran +export TC_GXX=/usr/bin/$TC_HOST-g++ +export TC_GCC=/usr/bin/$TC_HOST-gcc +export TC_GCOV=/usr/bin/$TC_HOST-gcov +export TC_GCOV_TOOL=/usr/bin/$TC_HOST-gcov-tool +export TC_GFORTRAN=/usr/bin/$TC_HOST-gfortran +export TC_GPROF=/usr/bin/$TC_HOST-gprof +export TC_LD=/usr/bin/$TC_HOST-ld +export TC_LD_BFD=/usr/bin/$TC_HOST-ld.bfd +export TC_NM=/usr/bin/$TC_HOST-nm +export TC_OBJCOPY=/usr/bin/$TC_HOST-objcopy +export TC_OBJDUMP=/usr/bin/$TC_HOST-objdump +export TC_PKG_CONFIG=/usr/bin/$TC_HOST-pkg-config +export TC_RANLIB=/usr/bin/$TC_HOST-ranlib +export TC_READELF=/usr/bin/$TC_HOST-readelf +export TC_SIZE=/usr/bin/$TC_HOST-size +export TC_STRINGS=/usr/bin/$TC_HOST-strings +export TC_STRIP=/usr/bin/$TC_HOST-strip +export TC_WINDMC=/usr/bin/$TC_HOST-windmc +export TC_WINDRES=/usr/bin/$TC_HOST-windres + +export TC_LDFLAGS=" -L/usr/$TC_HOST/sys-root/mingw/lib $INITIAL_LDFLAGS" +export TC_CFLAGS=" $TC_EXTRA_CPP_OPTIONS -I/usr/$TC_HOST/sys-root/mingw/include $INITIAL_CFLAGS" +export TC_CPPFLAGS=" $TC_EXTRA_CPP_OPTIONS -I/usr/$TC_HOST/sys-root/mingw/include $INITIAL_CPPFLAGS" +export TC_CXXFLAGS=" $TC_EXTRA_CPP_OPTIONS -I/usr/$TC_HOST/sys-root/mingw/include $INITIAL_CXXFLAGS" +export TC_PKG_CONFIG_PATH="/usr/lib/pkgconfig:/usr/$TC_HOST/sys-root/mingw/lib/pkgconfig" +export TC_PKG_CONFIG_LIBDIR="/usr/$TC_HOST/sys-root/mingw/lib" +export TC_XDG_DATA_DIRS="$INITIAL_XDG_DATA_DIRS" +export TC_CMAKE_INCLUDE_PATH="/usr/$TC_HOST/sys-root/mingw/include:$INITIAL_CMAKE_INCLUDE_PATH" +export TC_CMAKE_LIBRARY_PATH="/usr/$TC_HOST/sys-root/mingw/lib:$INITIAL_CMAKE_LIBRARY_PATH" + +unset TC_EXTRA_CPP_OPTIONS