diff --git a/README.md b/README.md index 2e5edc5..8e8e54b 100644 --- a/README.md +++ b/README.md @@ -43,12 +43,43 @@ the application uses. #### Simplest example -Given that a desktop file should be provided with an AppImage, `linuxdeployqt` can use that to determine the parameters of the build. +You'll need to provide the basic structure of an `AppDir` which should look something like this: +``` +└── usr + ├── bin + │   └── your_app + ├── lib + └── share + ├── applications + │   └── your_app.desktop + └── icons + └── + └── + └── your_app.png +``` +Replace `` and `` with (for example) `hicolor` and `256x256` respectively; see [icon theme spec](https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html) for more details. + + +Using the desktop file `linuxdeployqt` can determine the parameters of the build. + +Where your desktop file would look something like: +``` +[Desktop Entry] +Version=1.0 +Type=Application +Name=Amazing Qt App +Comment=The best Qt Application Ever. +Exec=your_app +Icon=your_app +Categories=Office; +``` + +* Notice that both `Exec` and `Icon` only have file names. +* Also Notice that the `Icon` entry does not include an extension. -`linuxdeployqt path/to/appdir/usr/share/application_name.desktop` +Read more about desktop files in the [freedesktop specification here](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html). -Where the _desktop_ file specifies the executable to be run (with `EXEC=`), the name of the applications and an icon. -See [desktop file specification](https://specifications.freedesktop.org/desktop-entry-spec/desktop-entry-spec-latest.html). +Now you can say: `linuxdeployqt-continuous-x86_64.AppImage path/to/AppDir/usr/share/applications/your_app.desktop` For a more detailed example, see "Using linuxdeployqt with Travis CI" below. diff --git a/tools/excludelist.sh b/tools/excludelist.sh new file mode 100755 index 0000000..dce1a11 --- /dev/null +++ b/tools/excludelist.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +# 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]}'\\"' diff --git a/tools/linuxdeployqt/linuxdeployqt.pro b/tools/linuxdeployqt/linuxdeployqt.pro index 1d9e3f5..85488ea 100644 --- a/tools/linuxdeployqt/linuxdeployqt.pro +++ b/tools/linuxdeployqt/linuxdeployqt.pro @@ -35,3 +35,4 @@ isEmpty(_BUILD_NUMBER) { } DEFINES += LINUXDEPLOYQT_VERSION="'\"$(shell git describe --tags $(shell git rev-list --tags --skip=1 --max-count=1) --abbrev=0)\"'" +DEFINES += EXCLUDELIST=\""$$system($$_PRO_FILE_PWD_/../excludelist.sh)"\" \ No newline at end of file diff --git a/tools/linuxdeployqt/main.cpp b/tools/linuxdeployqt/main.cpp index 9c65400..af56672 100644 --- a/tools/linuxdeployqt/main.cpp +++ b/tools/linuxdeployqt/main.cpp @@ -423,11 +423,11 @@ int main(int argc, char **argv) LogDebug() << "Argument found:" << argument; int index = argument.indexOf("="); excludeLibs = QString(argument.mid(index + 1)).split(","); - } else if (argument.startsWith("-")) { - LogError() << "Error: arguments must not start with --, only -" << "\n"; + } else if (argument.startsWith("--")) { + LogError() << "Error: arguments must not start with --, only -:" << argument << "\n"; return 1; } else { - LogError() << "Unknown argument" << argument << "\n"; + LogError() << "Unknown argument:" << argument << "\n"; return 1; } } diff --git a/tools/linuxdeployqt/shared.cpp b/tools/linuxdeployqt/shared.cpp index 6c85a87..c864085 100644 --- a/tools/linuxdeployqt/shared.cpp +++ b/tools/linuxdeployqt/shared.cpp @@ -474,8 +474,13 @@ LibraryInfo parseLddLibraryLine(const QString &line, const QString &appDirPath, */ QStringList excludelist; + #ifndef EXCLUDELIST + excludelist << "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"; + #else + excludelist << EXCLUDELIST; + #endif excludelist += excludeLibs; - excludelist << "libasound.so.2" << "libcom_err.so.2" << "libcrypt.so.1" << "libc.so.6" << "libdl.so.2" << "libdrm.so.2" << "libexpat.so.1" << "libfontconfig.so.1" << "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" << "libICE.so.6" << "libkeyutils.so.1" << "libm.so.6" << "libnsl.so.1" << "libnss3.so" << "libnssutil3.so" << "libp11-kit.so.0" << "libpangoft2-1.0.so.0" << "libpangocairo-1.0.so.0" << "libpango-1.0.so.0" << "libpthread.so.0" << "libresolv.so.2" << "librt.so.1" << "libSM.so.6" << "libstdc++.so.6" << "libusb-1.0.so.0" << "libuuid.so.1" << "libX11.so.6" << "libxcb.so.1" << "libz.so.1"; + LogDebug() << "excludelist:" << excludelist; if (! trimmed.contains("libicu")) { if (containsHowOften(excludelist, QFileInfo(trimmed).completeBaseName())) {