From 93ba2f186e7c5ddc21559c69db51b60d49ddda8f Mon Sep 17 00:00:00 2001 From: Felix Barz Date: Mon, 19 Jun 2017 18:32:53 +0200 Subject: [PATCH] Qt module project structure (#124) Refactor the project structure to make it build as a "Qt module". It's a first step to get this tool closer to Qt. The main advantage here is: Simply running: ``` qmake make make install ``` will compile and install the tool into your Qt installation, and make it a part of your Qt just like any other tool (qmake, etc.) --- .qmake.conf | 5 +++++ BUILDING.md | 8 +++++++- linuxdeployqt.pro | 3 +-- linuxdeployqt/linuxdeployqt.pro | 2 -- src/src.pro | 1 + sync.profile | 5 +++++ tests/tests-ci.sh | 4 ++-- tests/tests.pro | 11 +++++++++++ tools/linuxdeployqt/linuxdeployqt.pro | 17 +++++++++++++++++ {linuxdeployqt => tools/linuxdeployqt}/main.cpp | 6 +++--- {shared => tools/linuxdeployqt}/shared.cpp | 0 {shared => tools/linuxdeployqt}/shared.h | 0 tools/tools.pro | 4 ++++ 13 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 .qmake.conf delete mode 100644 linuxdeployqt/linuxdeployqt.pro create mode 100644 src/src.pro create mode 100644 sync.profile create mode 100644 tests/tests.pro create mode 100644 tools/linuxdeployqt/linuxdeployqt.pro rename {linuxdeployqt => tools/linuxdeployqt}/main.cpp (99%) rename {shared => tools/linuxdeployqt}/shared.cpp (100%) rename {shared => tools/linuxdeployqt}/shared.h (100%) create mode 100644 tools/tools.pro diff --git a/.qmake.conf b/.qmake.conf new file mode 100644 index 0000000..ae52f0b --- /dev/null +++ b/.qmake.conf @@ -0,0 +1,5 @@ +load(qt_build_config) + +CONFIG += warning_clean exceptions + +MODULE_VERSION = 0.5.0 diff --git a/BUILDING.md b/BUILDING.md index b66838c..23e2a1c 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -12,10 +12,16 @@ git clone https://github.com/probonopd/linuxdeployqt.git # Then build in Qt Creator, or use export PATH=$(readlink -f /tmp/.mount_QtCreator-*-x86_64/*/gcc_64/bin/):$PATH cd linuxdeployqt -qmake linuxdeployqt.pro +qmake make ``` +* Optional if you want to install `linuxdeployqt` into your Qt installation, and make it a part of your Qt just like any other tool (qmake, etc.) + +``` +sudo make install +``` + * Build and install [patchelf](https://nixos.org/patchelf.html) (a small utility to modify the dynamic linker and RPATH of ELF executables; similar to `install_name_tool` on macOS). To learn more about this, see http://blog.qt.io/blog/2011/10/28/rpath-and-runpath/ ``` diff --git a/linuxdeployqt.pro b/linuxdeployqt.pro index 1e2f2d5..58c33f2 100644 --- a/linuxdeployqt.pro +++ b/linuxdeployqt.pro @@ -1,2 +1 @@ -TEMPLATE = subdirs -SUBDIRS = linuxdeployqt +load(qt_parts) diff --git a/linuxdeployqt/linuxdeployqt.pro b/linuxdeployqt/linuxdeployqt.pro deleted file mode 100644 index b9e628a..0000000 --- a/linuxdeployqt/linuxdeployqt.pro +++ /dev/null @@ -1,2 +0,0 @@ -QT = core -SOURCES += main.cpp ../shared/shared.cpp diff --git a/src/src.pro b/src/src.pro new file mode 100644 index 0000000..86290fc --- /dev/null +++ b/src/src.pro @@ -0,0 +1 @@ +TEMPLATE = aux diff --git a/sync.profile b/sync.profile new file mode 100644 index 0000000..58dbecb --- /dev/null +++ b/sync.profile @@ -0,0 +1,5 @@ +%modules = ( +); + +%moduleheaders = ( +); diff --git a/tests/tests-ci.sh b/tests/tests-ci.sh index 901ac43..a704606 100755 --- a/tests/tests-ci.sh +++ b/tests/tests-ci.sh @@ -10,8 +10,8 @@ mkdir -p linuxdeployqt.AppDir/usr/bin/ cp /usr/bin/patchelf /usr/local/bin/{appimagetool,mksquashfs,zsyncmake} linuxdeployqt.AppDir/usr/bin/ find linuxdeployqt.AppDir/ export VERSION=continuous -cp ./linuxdeployqt/linuxdeployqt linuxdeployqt.AppDir/usr/bin/ -./linuxdeployqt/linuxdeployqt linuxdeployqt.AppDir/linuxdeployqt.desktop -verbose=3 -appimage +cp ./bin/linuxdeployqt linuxdeployqt.AppDir/usr/bin/ +./bin/linuxdeployqt linuxdeployqt.AppDir/linuxdeployqt.desktop -verbose=3 -appimage ls -lh find *.AppDir xpra start :99 diff --git a/tests/tests.pro b/tests/tests.pro new file mode 100644 index 0000000..089e590 --- /dev/null +++ b/tests/tests.pro @@ -0,0 +1,11 @@ +TEMPLATE = subdirs + +SUBDIRS += \ + QtQuickControls2Application \ + QtWebEngineApplication \ + QtWidgetsApplication + +DISTFILES += \ + tests-ci.sh \ + tests-environment.sh \ + tests.sh diff --git a/tools/linuxdeployqt/linuxdeployqt.pro b/tools/linuxdeployqt/linuxdeployqt.pro new file mode 100644 index 0000000..26f115e --- /dev/null +++ b/tools/linuxdeployqt/linuxdeployqt.pro @@ -0,0 +1,17 @@ +option(host_build) + +QT = core +CONFIG += console + +TARGET = linuxdeployqt +VERSION = $$MODULE_VERSION + +DEFINES += BUILD_LINUXDEPLOYQT + +load(qt_tool) + +HEADERS += shared.h +SOURCES += main.cpp \ + shared.cpp + +DEFINES -= QT_USE_QSTRINGBUILDER #leads to compile errors if not disabled diff --git a/linuxdeployqt/main.cpp b/tools/linuxdeployqt/main.cpp similarity index 99% rename from linuxdeployqt/main.cpp rename to tools/linuxdeployqt/main.cpp index 0bde0c2..67baecc 100644 --- a/linuxdeployqt/main.cpp +++ b/tools/linuxdeployqt/main.cpp @@ -28,7 +28,7 @@ #include #include #include -#include "../shared/shared.h" +#include "shared.h" #include #include #include @@ -146,7 +146,7 @@ int main(int argc, char **argv) // Allow binaries next to linuxdeployqt to be found; this is useful for bundling // this application itself together with helper binaries such as patchelf QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); - QString oldPath = env.value("PATH"); + QString oldPath = env.value("PATH"); QString newPath = QCoreApplication::applicationDirPath() + ":" + oldPath; LogDebug() << newPath; setenv("PATH",newPath.toUtf8().constData(),1); @@ -306,7 +306,7 @@ int main(int argc, char **argv) qDebug() << "preExistingToplevelIcon:" << preExistingToplevelIcon; } else { qDebug() << "iconToBeUsed:" << iconToBeUsed; - QString targetIconPath = appDirPath + "/" + QFileInfo(iconToBeUsed).fileName(); + QString targetIconPath = appDirPath + "/" + QFileInfo(iconToBeUsed).fileName(); if (QFile::copy(iconToBeUsed, targetIconPath)){ qDebug() << "Copied" << iconToBeUsed << "to" << targetIconPath; QFile::copy(targetIconPath, appDirPath + "/.DirIcon"); diff --git a/shared/shared.cpp b/tools/linuxdeployqt/shared.cpp similarity index 100% rename from shared/shared.cpp rename to tools/linuxdeployqt/shared.cpp diff --git a/shared/shared.h b/tools/linuxdeployqt/shared.h similarity index 100% rename from shared/shared.h rename to tools/linuxdeployqt/shared.h diff --git a/tools/tools.pro b/tools/tools.pro new file mode 100644 index 0000000..91ee914 --- /dev/null +++ b/tools/tools.pro @@ -0,0 +1,4 @@ +TEMPLATE = subdirs +CONFIG += ordered + +SUBDIRS += linuxdeployqt