X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-util.git;a=blobdiff_plain;f=cross-compile%2Fappimage%2Fcontrib%2Ffunctions.sh;fp=cross-compile%2Fappimage%2Fcontrib%2Ffunctions.sh;h=d8f93381bf9a31ec2ef7761e82b84e8b9f1e3933;hp=a266cd97983cb099bdaf3c635b2eae3488662a12;hb=ca369dfa9d2872b8b642b32cbc0c2fecacc8ed2e;hpb=ef311ddb9282ea0cb1ff1a0365f8368c270f742c diff --git a/cross-compile/appimage/contrib/functions.sh b/cross-compile/appimage/contrib/functions.sh index a266cd9..d8f9338 100644 --- a/cross-compile/appimage/contrib/functions.sh +++ b/cross-compile/appimage/contrib/functions.sh @@ -1,11 +1,18 @@ # This file is supposed to be sourced by each Recipe # that wants to use the functions contained herein # like so: -# wget -q https://github.com/AppImage/AppImages/raw/master/functions.sh -O ./functions.sh +# wget -q https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/functions.sh -O ./functions.sh # . ./functions.sh # RECIPE=$(realpath "$0") +# Specify a certain commit if you do not want to use master +# by using: +# export PKG2AICOMMIT= +if [ -z "$PKG2AICOMMIT" ] ; then + PKG2AICOMMIT=master +fi + # Options for apt-get to use local files rather than the system ones OPTIONS="-o Debug::NoLocking=1 -o APT::Cache-Limit=125829120 @@ -34,7 +41,7 @@ case "$(uname -i)" in # arm*) # echo "ARM system architecture" # SYSTEM_ARCH="";; - unknown) + unknown|AuthenticAMD|GenuineIntel) # uname -i not answer on debian, then: case "$(uname -m)" in x86_64|amd64) @@ -108,7 +115,7 @@ move_lib() # Delete blacklisted files delete_blacklisted() { - BLACKLISTED_FILES=$(cat_file_from_url https://github.com/AppImage/AppImages/raw/master/excludelist | sed 's|#.*||g') + BLACKLISTED_FILES=$(cat_file_from_url https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/excludelist | sed 's|#.*||g') echo $BLACKLISTED_FILES for FILE in $BLACKLISTED_FILES ; do FILES="$(find . -name "${FILE}" -not -path "./usr/optional/*")" @@ -127,7 +134,8 @@ delete_blacklisted() # Echo highest glibc version needed by the executable files in the current directory glibc_needed() { - find . -name *.so -or -name *.so.* -or -type f -executable -exec readelf -s '{}' 2>/dev/null \; | sed -n 's/.*@GLIBC_//p'| awk '{print $1}' | sort --version-sort | tail -n 1 + find . -name *.so -or -name *.so.* -or -type f -executable -exec strings {} \; | grep ^GLIBC_2 | sed s/GLIBC_//g | sort --version-sort | uniq | tail -n 1 + # find . -name *.so -or -name *.so.* -or -type f -executable -exec readelf -s '{}' 2>/dev/null \; | sed -n 's/.*@GLIBC_//p'| awk '{print $1}' | sort --version-sort | tail -n 1 } # Add desktop integration # Usage: get_desktopintegration name_of_desktop_file_and_exectuable @@ -176,11 +184,15 @@ generate_appimage() mkdir -p ../out || true rm ../out/$APP"-"$VERSION".glibc"$GLIBC_NEEDED"-"$ARCH".AppImage" 2>/dev/null || true - GLIBC_NEEDED=${GLIBC_NEEDED:=$(glibc_needed)} + GLIBC_NEEDED=$(glibc_needed) ./AppImageAssistant ./$APP.AppDir/ ../out/$APP"-"$VERSION".glibc"$GLIBC_NEEDED"-"$ARCH".AppImage" } # Generate AppImage type 2 +# Additional parameters given to this routine will be passed on to appimagetool +# +# If the environment variable NO_GLIBC_VERSION is set, the required glibc version +# will not be added to the AppImage filename generate_type2_appimage() { # Get the ID of the last successful build on Travis CI @@ -194,18 +206,39 @@ generate_type2_appimage() URL="https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${SYSTEM_ARCH}.AppImage" wget -c "$URL" -O appimagetool chmod a+x ./appimagetool + appimagetool=$(readlink -f appimagetool) + + if [ "$DOCKER_BUILD" ]; then + appimagetool_tempdir=$(mktemp -d) + mv appimagetool "$appimagetool_tempdir" + pushd "$appimagetool_tempdir" &>/dev/null + ls -al + ./appimagetool --appimage-extract + rm appimagetool + appimagetool=$(readlink -f squashfs-root/AppRun) + popd &>/dev/null + _appimagetool_cleanup() { [ -d "$appimagetool_tempdir" ] && rm -r "$appimagetool_tempdir"; } + trap _appimagetool_cleanup EXIT + fi + + if [ -z ${NO_GLIBC_VERSION+true} ]; then + GLIBC_NEEDED=$(glibc_needed) + VERSION_EXPANDED=$VERSION.glibc$GLIBC_NEEDED + else + VERSION_EXPANDED=$VERSION + fi + set +x + GLIBC_NEEDED=$(glibc_needed) if ( [ ! -z "$KEY" ] ) && ( ! -z "$TRAVIS" ) ; then wget https://github.com/AppImage/AppImageKit/files/584665/data.zip -O data.tar.gz.gpg ( set +x ; echo $KEY | gpg2 --batch --passphrase-fd 0 --no-tty --skip-verify --output data.tar.gz --decrypt data.tar.gz.gpg ) tar xf data.tar.gz sudo chown -R $USER .gnu* mv $HOME/.gnu* $HOME/.gnu_old ; mv .gnu* $HOME/ - GLIBC_NEEDED=${GLIBC_NEEDED:=$(glibc_needed)} - VERSION=$VERSION.glibc$GLIBC_NEEDED ./appimagetool -n -s --bintray-user $BINTRAY_USER --bintray-repo $BINTRAY_REPO -v ./$APP.AppDir/ + VERSION=$VERSION_EXPANDED "$appimagetool" $@ -n -s --bintray-user $BINTRAY_USER --bintray-repo $BINTRAY_REPO -v ./$APP.AppDir/ else - GLIBC_NEEDED=${GLIBC_NEEDED:=$(glibc_needed)} - VERSION=$VERSION.glibc$GLIBC_NEEDED ./appimagetool -n --bintray-user $BINTRAY_USER --bintray-repo $BINTRAY_REPO -v ./$APP.AppDir/ + VERSION=$VERSION_EXPANDED "$appimagetool" $@ -n --bintray-user $BINTRAY_USER --bintray-repo $BINTRAY_REPO -v ./$APP.AppDir/ fi set -x mkdir -p ../out/ || true @@ -220,7 +253,7 @@ generate_status() mkdir -p ./tmp/archives/ mkdir -p ./tmp/lists/partial touch tmp/pkgcache.bin tmp/srcpkgcache.bin - wget -q -c "https://github.com/AppImage/AppImages/raw/master/excludedeblist" + wget -q -c "https://github.com/AppImage/AppImages/raw/${PKG2AICOMMIT}/excludedeblist" rm status 2>/dev/null || true for PACKAGE in $(cat excludedeblist | cut -d "#" -f 1) ; do printf "Package: $PACKAGE\nStatus: install ok installed\nArchitecture: all\nVersion: 9:999.999.999\n\n" >> status @@ -258,7 +291,7 @@ get_version() if [ -z "$THEDEB" ] ; then echo "Version could not be determined from the .deb; you need to determine it manually" fi - VERSION=$(echo $THEDEB | cut -d "~" -f 1 | cut -d "_" -f 2 | cut -d "-" -f 1 | sed -e 's|1%3a||g' | sed -e 's|+dfsg||g' ) + VERSION=$(echo $THEDEB | cut -d "~" -f 1 | cut -d "_" -f 2 | cut -d "-" -f 1 | sed -e 's|1%3a||g' | sed -e 's|.dfsg||g' ) echo $VERSION }