From 7b7f603278d1f64b18457e7537a83fc3c38f8ebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Mon, 9 Apr 2018 20:49:58 -0300 Subject: [PATCH 1/6] excludelist: Return empty string if something goes wrong MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Patrick José Pereira --- tools/excludelist.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/excludelist.sh b/tools/excludelist.sh index dce1a11..bd2ecb2 100755 --- a/tools/excludelist.sh +++ b/tools/excludelist.sh @@ -2,6 +2,12 @@ # Download excludelist blacklisted=($(wget --quiet https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist -O - | sort | uniq | grep -v "^#.*" | grep "[^-\s]")) +if [ -z $blacklisted ]; then + # Return nothing if no output from command + echo "" + exit +fi + # Create array for item in ${blacklisted[@]:0:${#blacklisted[@]}-1}; do echo -ne '\\"'$item'\\" << ' From cfb75a2f79b1d4c20bf63514c492bd5d2a8a78ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Jos=C3=A9=20Pereira?= Date: Mon, 9 Apr 2018 20:50:54 -0300 Subject: [PATCH 2/6] linuxdeployqt: Check if EXCLUDELIST is empty or specified MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fix #273 Signed-off-by: Patrick José Pereira --- tools/linuxdeployqt/linuxdeployqt.pro | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/tools/linuxdeployqt/linuxdeployqt.pro b/tools/linuxdeployqt/linuxdeployqt.pro index 999a5f2..bf3fe72 100644 --- a/tools/linuxdeployqt/linuxdeployqt.pro +++ b/tools/linuxdeployqt/linuxdeployqt.pro @@ -35,4 +35,13 @@ isEmpty(_BUILD_NUMBER) { } DEFINES += LINUXDEPLOYQT_VERSION="'\"$(shell cd $$PWD && git describe --tags $(shell cd $$PWD && git rev-list --tags --skip=1 --max-count=1) --abbrev=0)\"'" -DEFINES += EXCLUDELIST=\""$$system($$_PRO_FILE_PWD_/../excludelist.sh)"\" +contains(DEFINES, EXCLUDELIST.*) { + message("EXCLUDELIST specified, to use the most recent exclude list, please run qmake without EXCLUDELIST definition and with internet.") +} else { + message("Creating exclude list.") + EXCLUDELIST = $$system($$_PRO_FILE_PWD_/../excludelist.sh) + isEmpty(EXCLUDELIST) { + error("You must have internet to update EXCLUDELIST or define it in qmake.") + } + DEFINES += EXCLUDELIST=\""$$EXCLUDELIST"\" +} From 413f52a4113794f4ba016f29923d620d90ad6e0e Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Thu, 12 Apr 2018 02:00:05 +0200 Subject: [PATCH 3/6] Check exit codes of git commands in CMake Also introduces find_command to find the path to the git executable. --- CMakeLists.txt | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e1f593..526a08d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,38 +5,53 @@ cmake_minimum_required(VERSION 3.2) project(linuxdeployqt) -# read Git revision ID -execute_process( - COMMAND git rev-parse --short HEAD - WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} - OUTPUT_VARIABLE GIT_COMMIT - OUTPUT_STRIP_TRAILING_WHITESPACE -) +find_program(GIT git) # make sure Git revision ID and latest tag is not stored in the CMake cache # otherwise, one would have to reset the CMake cache on every new commit to make sure the Git commit ID is up to date unset(GIT_COMMIT CACHE) unset(GIT_LATEST_TAG CACHE) +if("${GIT}" STREQUAL "GIT-NOTFOUND") + message(FATAL_ERROR "Could not find git") +endif() + # read Git revision ID and latest tag number execute_process( - COMMAND git rev-parse --short HEAD + COMMAND "${GIT}" rev-parse --short HEAD WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_COMMIT_RESULT ) +if(NOT GIT_COMMIT_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to determine git commit ID") +endif() +mark_as_advanced(GIT_COMMIT GIT_COMMIT_RESULT) + execute_process( - COMMAND git rev-list --tags --skip=1 --max-count=1 + COMMAND "${GIT}" rev-list --tags --skip=1 --max-count=1 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_TAG_ID OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_TAG_ID_RESULT ) +if(NOT GIT_TAG_ID_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to determine git tag ID") +endif() +mark_as_advanced(GIT_TAG_ID GIT_TAG_ID_RESULT) + execute_process( - COMMAND git describe --tags ${GIT_TAG_ID} --abbrev=0 + COMMAND "${GIT}" describe --tags ${GIT_TAG_ID} --abbrev=0 WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} OUTPUT_VARIABLE GIT_TAG_NAME OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE GIT_TAG_NAME_RESULT ) +if(NOT GIT_TAG_NAME_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to determine git tag name") +endif() +mark_as_advanced(GIT_TAG_NAME GIT_TAG_NAME_RESULT) # set version and build number set(VERSION 1-alpha) @@ -51,6 +66,11 @@ execute_process( COMMAND env LC_ALL=C date -u "+%Y-%m-%d %H:%M:%S %Z" OUTPUT_VARIABLE DATE OUTPUT_STRIP_TRAILING_WHITESPACE + RESULT_VARIABLE DATE_RESULT ) +if(NOT DATE_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to determine date string") +endif() +mark_as_advanced(DATE DATE_RESULT) add_subdirectory(tools/linuxdeployqt) From 4c615555bfa15bfaf7f6e0a3316a908f7809a81c Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Thu, 12 Apr 2018 02:08:12 +0200 Subject: [PATCH 4/6] Check exit code of excludelist command in CMake --- tools/linuxdeployqt/CMakeLists.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/linuxdeployqt/CMakeLists.txt b/tools/linuxdeployqt/CMakeLists.txt index 1770f64..01c658d 100644 --- a/tools/linuxdeployqt/CMakeLists.txt +++ b/tools/linuxdeployqt/CMakeLists.txt @@ -13,7 +13,12 @@ execute_process( COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/../excludelist.sh OUTPUT_VARIABLE EXCLUDELIST TIMEOUT 10 + RESULT_VARIABLE EXCLUDELIST_RESULT ) +if(NOT EXCLUDELIST_RESULT EQUAL 0) + message(FATAL_ERROR "Failed to fetch and generate excludelist") +endif() +mark_as_advanced(EXCLUDELIST EXCLUDELIST_RESULT) add_executable(linuxdeployqt main.cpp shared.cpp) target_include_directories(linuxdeployqt PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) From ba3495b85585eac6ecb79c3334ab894c9630f078 Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Thu, 12 Apr 2018 02:54:08 +0200 Subject: [PATCH 5/6] Fix exit code ot excludelist.sh --- tools/excludelist.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/tools/excludelist.sh b/tools/excludelist.sh index bd2ecb2..373b0ad 100755 --- a/tools/excludelist.sh +++ b/tools/excludelist.sh @@ -1,12 +1,9 @@ #!/bin/bash +set -e + # Download excludelist blacklisted=($(wget --quiet https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist -O - | sort | uniq | grep -v "^#.*" | grep "[^-\s]")) -if [ -z $blacklisted ]; then - # Return nothing if no output from command - echo "" - exit -fi # Create array for item in ${blacklisted[@]:0:${#blacklisted[@]}-1}; do From 65ceffeffd9b17cb5e6d96dc8beb2fdae6f8730c Mon Sep 17 00:00:00 2001 From: TheAssassin Date: Thu, 12 Apr 2018 02:55:14 +0200 Subject: [PATCH 6/6] Properly check exit code of excludelist.sh in qmake qmake is really making this overly complicated. We should rather try to use this syntax, which is only available in Qt 5.6 and higher, apparently: https://doc.qt.io/qt-5/qmake-function-reference.html#system-replace --- tools/linuxdeployqt/linuxdeployqt.pro | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/tools/linuxdeployqt/linuxdeployqt.pro b/tools/linuxdeployqt/linuxdeployqt.pro index bf3fe72..823568e 100644 --- a/tools/linuxdeployqt/linuxdeployqt.pro +++ b/tools/linuxdeployqt/linuxdeployqt.pro @@ -39,9 +39,17 @@ contains(DEFINES, EXCLUDELIST.*) { message("EXCLUDELIST specified, to use the most recent exclude list, please run qmake without EXCLUDELIST definition and with internet.") } else { message("Creating exclude list.") + + # check whether command _would_ run successfully + EXCLUDELIST_GENERATION_WORKS = FALSE + system($$_PRO_FILE_PWD_/../excludelist.sh): EXCLUDELIST_GENERATION_WORKS = TRUE + isEqual(EXCLUDELIST_GENERATION_WORKS, FALSE) { + error("Generating excludelist failed") + } + EXCLUDELIST = $$system($$_PRO_FILE_PWD_/../excludelist.sh) isEmpty(EXCLUDELIST) { - error("You must have internet to update EXCLUDELIST or define it in qmake.") + error("Generated excludelist is empty") } DEFINES += EXCLUDELIST=\""$$EXCLUDELIST"\" }