Browse Source

Merge pull request #278 from probonopd/TheAssassin/fix-274

Improve excludelist generation (fixes #274)
master
TheAssassin 7 years ago
committed by GitHub
parent
commit
63e768b825
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      tools/excludelist.sh
  2. 42
      tools/generate-excludelist.sh
  3. 8
      tools/linuxdeployqt/CMakeLists.txt
  4. 69
      tools/linuxdeployqt/excludelist.h
  5. 12
      tools/linuxdeployqt/linuxdeployqt.pro
  6. 8
      tools/linuxdeployqt/main.cpp
  7. 18
      tools/linuxdeployqt/shared.cpp

12
tools/excludelist.sh

@ -1,12 +0,0 @@
#!/bin/bash
set -e
# Download excludelist
blacklisted=($(wget --quiet https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist -O - | sort | uniq | grep -v "^#.*" | grep "[^-\s]"))
# Create array
for item in ${blacklisted[@]:0:${#blacklisted[@]}-1}; do
echo -ne '\\"'$item'\\" << '
done
echo -ne '\\"'${blacklisted[-1]}'\\"'

42
tools/generate-excludelist.sh

@ -0,0 +1,42 @@
#!/bin/bash
set -e
# download excludelist
blacklisted=($(wget --quiet https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist -O - | sort | uniq | grep -v "^#.*" | grep "[^-\s]"))
# sanity check
if [ "$blacklisted" == "" ]; then
exit 1;
fi
filename=$(readlink -f $(dirname "$0"))/linuxdeployqt/excludelist.h
# overwrite existing source file
cat > "$filename" <<EOF
/*
* List of libraries to exclude for different reasons.
*
* Automatically generated from
* https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist
*
* This file shall be committed by the developers occassionally,
* otherwise systems without access to the internet won't be able to build
* fully working versions of linuxdeployqt.
*
* See https://github.com/probonopd/linuxdeployqt/issues/274 for more
* information.
*/
#include <QStringList>
static const QStringList generatedExcludelist = {
EOF
# Create array
for item in ${blacklisted[@]:0:${#blacklisted[@]}-1}; do
echo -e ' "'"$item"'",' >> "$filename"
done
echo -e ' "'"${blacklisted[-1]}"'"' >> "$filename"
echo "};" >> "$filename"

8
tools/linuxdeployqt/CMakeLists.txt

@ -1,5 +1,8 @@
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# expose version data as compiler definition # expose version data as compiler definition
add_definitions("-DLINUXDEPLOYQT_VERSION=\"${GIT_TAG_NAME}\"") add_definitions("-DLINUXDEPLOYQT_VERSION=\"${GIT_TAG_NAME}\"")
add_definitions("-DLINUXDEPLOYQT_GIT_COMMIT=\"${GIT_COMMIT}\"") add_definitions("-DLINUXDEPLOYQT_GIT_COMMIT=\"${GIT_COMMIT}\"")
@ -9,14 +12,15 @@ add_definitions("-DBUILD_NUMBER=\"${BUILD_NUMBER}\"")
find_package(Qt5 REQUIRED COMPONENTS Core) find_package(Qt5 REQUIRED COMPONENTS Core)
# update excludelist # update excludelist
message(STATUS "Updating excludelist...")
execute_process( execute_process(
COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/../excludelist.sh COMMAND bash ${CMAKE_CURRENT_SOURCE_DIR}/../generate-excludelist.sh
OUTPUT_VARIABLE EXCLUDELIST OUTPUT_VARIABLE EXCLUDELIST
TIMEOUT 10 TIMEOUT 10
RESULT_VARIABLE EXCLUDELIST_RESULT RESULT_VARIABLE EXCLUDELIST_RESULT
) )
if(NOT EXCLUDELIST_RESULT EQUAL 0) if(NOT EXCLUDELIST_RESULT EQUAL 0)
message(FATAL_ERROR "Failed to fetch and generate excludelist") message(WARNING "Updating excludelist failed, using outdated copy")
endif() endif()
mark_as_advanced(EXCLUDELIST EXCLUDELIST_RESULT) mark_as_advanced(EXCLUDELIST EXCLUDELIST_RESULT)

69
tools/linuxdeployqt/excludelist.h

@ -0,0 +1,69 @@
/*
* List of libraries to exclude for different reasons.
*
* Automatically generated from
* https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist
*
* This file shall be committed by the developers occassionally,
* otherwise systems without access to the internet won't be able to build
* fully working versions of linuxdeployqt.
*
* See https://github.com/probonopd/linuxdeployqt/issues/274 for more
* information.
*/
#include <QStringList>
static const QStringList generatedExcludelist = {
"ld-linux.so.2",
"ld-linux-x86-64.so.2",
"libanl.so.1",
"libasound.so.2",
"libBrokenLocale.so.1",
"libcidn.so.1",
"libcom_err.so.2",
"libcrypt.so.1",
"libc.so.6",
"libdl.so.2",
"libdrm.so.2",
"libexpat.so.1",
"libfontconfig.so.1",
"libfreetype.so.6",
"libgcc_s.so.1",
"libgdk_pixbuf-2.0.so.0",
"libgio-2.0.so.0",
"libglib-2.0.so.0",
"libGL.so.1",
"libgobject-2.0.so.0",
"libgpg-error.so.0",
"libharfbuzz.so.0",
"libICE.so.6",
"libjack.so.0",
"libkeyutils.so.1",
"libm.so.6",
"libmvec.so.1",
"libnsl.so.1",
"libnss_compat.so.2",
"libnss_db.so.2",
"libnss_dns.so.2",
"libnss_files.so.2",
"libnss_hesiod.so.2",
"libnss_nisplus.so.2",
"libnss_nis.so.2",
"libp11-kit.so.0",
"libpango-1.0.so.0",
"libpangocairo-1.0.so.0",
"libpangoft2-1.0.so.0",
"libpthread.so.0",
"libresolv.so.2",
"librt.so.1",
"libSM.so.6",
"libstdc++.so.6",
"libthread_db.so.1",
"libusb-1.0.so.0",
"libutil.so.1",
"libuuid.so.1",
"libX11.so.6",
"libxcb.so.1",
"libz.so.1"
};

12
tools/linuxdeployqt/linuxdeployqt.pro

@ -38,18 +38,12 @@ DEFINES += LINUXDEPLOYQT_VERSION="'\"$(shell cd $$PWD && git describe --tags $(s
contains(DEFINES, EXCLUDELIST.*) { contains(DEFINES, EXCLUDELIST.*) {
message("EXCLUDELIST specified, to use the most recent exclude list, please run qmake without EXCLUDELIST definition and with internet.") message("EXCLUDELIST specified, to use the most recent exclude list, please run qmake without EXCLUDELIST definition and with internet.")
} else { } else {
message("Creating exclude list.") message("Updating exclude list...")
# check whether command _would_ run successfully # check whether command _would_ run successfully
EXCLUDELIST_GENERATION_WORKS = FALSE EXCLUDELIST_GENERATION_WORKS = FALSE
system($$_PRO_FILE_PWD_/../excludelist.sh): EXCLUDELIST_GENERATION_WORKS = TRUE system($$_PRO_FILE_PWD_/../generate-excludelist.sh): EXCLUDELIST_GENERATION_WORKS = TRUE
isEqual(EXCLUDELIST_GENERATION_WORKS, FALSE) { isEqual(EXCLUDELIST_GENERATION_WORKS, FALSE) {
error("Generating excludelist failed") warning("Updating excludelist failed, using outdated copy")
} }
EXCLUDELIST = $$system($$_PRO_FILE_PWD_/../excludelist.sh)
isEmpty(EXCLUDELIST) {
error("Generated excludelist is empty")
}
DEFINES += EXCLUDELIST=\""$$EXCLUDELIST"\"
} }

8
tools/linuxdeployqt/main.cpp

@ -34,6 +34,7 @@
#include <QSettings> #include <QSettings>
#include <QDirIterator> #include <QDirIterator>
#include <sstream> #include <sstream>
#include "excludelist.h"
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
@ -60,6 +61,10 @@ int main(int argc, char **argv)
// can just exit normally, version has been printed above // can just exit normally, version has been printed above
return 0; return 0;
} }
if (argument == QByteArray("-show-exclude-libs")) {
qInfo() << generatedExcludelist;
return 0;
}
} }
if (argc < 2 || (firstArgument.startsWith("-"))) { if (argc < 2 || (firstArgument.startsWith("-"))) {
@ -426,9 +431,6 @@ int main(int argc, char **argv)
LogDebug() << "Argument found:" << argument; LogDebug() << "Argument found:" << argument;
int index = argument.indexOf("="); int index = argument.indexOf("=");
excludeLibs = QString(argument.mid(index + 1)).split(","); excludeLibs = QString(argument.mid(index + 1)).split(",");
} else if (argument == QByteArray("-show-exclude-libs")) {
qInfo() << EXCLUDELIST;
return 0;
} else if (argument.startsWith("--")) { } else if (argument.startsWith("--")) {
LogError() << "Error: arguments must not start with --, only -:" << argument << "\n"; LogError() << "Error: arguments must not start with --, only -:" << argument << "\n";
return 1; return 1;

18
tools/linuxdeployqt/shared.cpp

@ -44,6 +44,7 @@
#include <QRegularExpression> #include <QRegularExpression>
#include <QStandardPaths> #include <QStandardPaths>
#include "shared.h" #include "shared.h"
#include "excludelist.h"
QString appBinaryPath; QString appBinaryPath;
bool runStripEnabled = true; bool runStripEnabled = true;
@ -465,20 +466,13 @@ LibraryInfo parseLddLibraryLine(const QString &line, const QString &appDirPath,
This is more suitable for bundling in a way that is portable between different distributions and target systems. This is more suitable for bundling in a way that is portable between different distributions and target systems.
Along the way, this also takes care of non-Qt libraries. Along the way, this also takes care of non-Qt libraries.
The excludelist can be updated by running The excludelist can be updated by running the bundled script generate-excludelist.sh
#/bin/bash
blacklisted=$(wget https://raw.githubusercontent.com/probonopd/AppImages/master/excludelist -O - | sort | uniq | grep -v "^#.*" | grep "[^-\s]")
for item in $blacklisted; do
echo -ne '"'$item'" << '
done
*/ */
QStringList excludelist; // copy generated excludelist
#ifndef EXCLUDELIST QStringList excludelist = generatedExcludelist;
#error "EXCLUDELIST not defined! Please have your build system download run excludelist.sh and add -DEXCLUDE_LIST=<result>"
#else // append exclude libs
excludelist << EXCLUDELIST;
#endif
excludelist += excludeLibs; excludelist += excludeLibs;
LogDebug() << "excludelist:" << excludelist; LogDebug() << "excludelist:" << excludelist;

Loading…
Cancel
Save