Skip to content

Commit b536aa1

Browse files
committed
Merge branch 'distrib-cpack' into qt6
# Conflicts: # CMakeLists.txt # qldd.cpp
2 parents 76b0ab9 + be48040 commit b536aa1

18 files changed

+391
-44
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ qrc_*.cpp
1111
/.idea/
1212
/cmake-build-debug/
1313
/cmake-build-release/
14+
/.DS_Store
15+
/CMakeLists.txt.user

CMakeLists.txt

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
cmake_minimum_required(VERSION 3.5)
22

3-
project(Qldd LANGUAGES CXX)
3+
project(Qldd
4+
LANGUAGES CXX
5+
VERSION 1.0.0)
46

57
set(CMAKE_INCLUDE_CURRENT_DIR ON)
68

@@ -19,9 +21,8 @@ if (NOT Qt5_FOUND)
1921
endif ()
2022

2123
if (APPLE)
22-
set(MACOSX_BUNDLE_BUNDLE_NAME Qldd)
23-
set(BUNDLE_VAL MACOSX_BUNDLE)
24-
add_executable(Qldd MACOSX_BUNDLE)
24+
set(APP_ICNS "${CMAKE_SOURCE_DIR}/resources/icon.icns")
25+
add_executable(Qldd MACOSX_BUNDLE ${APP_ICNS})
2526
else ()
2627
add_executable(Qldd)
2728
endif ()
@@ -51,3 +52,49 @@ install(TARGETS Qldd
5152
install(FILES ${CMAKE_SOURCE_DIR}/nemo/actions/dependency-viewer.nemo_action
5253
DESTINATION share/nemo/actions
5354
COMPONENT nemo-integration)
55+
56+
if(APPLE)
57+
set(CMAKE_MACOSX_BUNDLE ON)
58+
set(CMAKE_MACOSX_RPATH ON)
59+
install(TARGETS Qldd
60+
BUNDLE DESTINATION .
61+
RUNTIME DESTINATION .)
62+
set_source_files_properties("${CMAKE_SOURCE_DIR}/resources/icon.icns" PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
63+
64+
set_target_properties(Qldd
65+
PROPERTIES
66+
MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}"
67+
MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME} Copyright (c) 2020 bas524@yandex.ru"
68+
MACOSX_BUNDLE_ICON_FILE icon.icns
69+
MACOSX_BUNDLE_GUI_IDENTIFIER "${PROJECT_NAME}"
70+
MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_VERSION}"
71+
MACOSX_BUNDLE_SHORT_VERSION_STRING "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}"
72+
MACOSX_BUNDLE_BUNDLE_VERSION "${PROJECT_VERSION}"
73+
MACOSX_BUNDLE_COPYRIGHT "Copyright (c) 2020 bas524@yandex.ru"
74+
)
75+
add_custom_command(TARGET Qldd
76+
POST_BUILD
77+
COMMAND plutil -replace NSHighResolutionCapable -bool true Qldd.app/Contents/Info.plist
78+
)
79+
endif()
80+
81+
set(desktop.path applications)
82+
set(desktop.files resources/example.desktop)
83+
set(icon.path icons/hicolor/64x64/apps)
84+
set(icon.files resources/icon64.png)
85+
set(iconsvg.path icons/hicolor/scalable/apps)
86+
set(iconsvg.files resources/icon.svg)
87+
foreach(items IN ITEMS desktop icon iconsvg)
88+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${${items}.files}
89+
DESTINATION share/${${items}.path}
90+
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ)
91+
endforeach()
92+
# Components:
93+
if(CMAKE_BUILD_TYPE_UPPER MATCHES "^(DEBUG|RELWITHDEBINFO)$")
94+
set(CPACK_STRIP_FILES FALSE)
95+
else()
96+
set(CPACK_STRIP_FILES TRUE)
97+
endif()
98+
99+
include(${CMAKE_CURRENT_LIST_DIR}/Packaging.cmake)
100+

CPackLinuxDeployQt.cmake.in

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
execute_process(COMMAND ${CMAKE_MAKE_PROGRAM} DESTDIR=${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage install
2+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
3+
execute_process(COMMAND "${LINUXDEPLOYQT_EXECUTABLE}" ${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage${CMAKE_INSTALL_PREFIX}/share/applications/example.desktop -bundle-non-qt-libs -qmake=${_qmake_executable}
4+
# hot fix for a known issue for libnss3 and libnssutils3.
5+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${NSS3_PLUGIN_PATH} ${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage${CMAKE_INSTALL_PREFIX}/lib/
6+
COMMAND "${LINUXDEPLOYQT_EXECUTABLE}" ${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/External/AppImage${CMAKE_INSTALL_PREFIX}/share/applications/example.desktop -appimage -qmake=${_qmake_executable}
7+
WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}
8+
)

CPackMacDeployQt.cmake.in

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
execute_process(COMMAND "${MACDEPLOYQT_EXECUTABLE}" ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.app -dmg
2+
WORKING_DIRECTORY ${CPACK_PACKAGE_DIRECTORY}
3+
)

Packaging.cmake

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
2+
find_package(Qt5Core REQUIRED)
3+
get_target_property(_qmake_executable Qt5::qmake IMPORTED_LOCATION)
4+
get_filename_component(_qt_bin_dir "${_qmake_executable}" DIRECTORY)
5+
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
6+
find_program(LINUXDEPLOYQT_EXECUTABLE linuxdeployqt linuxdeployqt-continuous-x86_64.AppImage HINTS "${_qt_bin_dir}")
7+
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}")
8+
find_program(MACDEPLOYQTFIX_EXECUTABLE macdeployqtfix.py HINTS "${_qt_bin_dir}")
9+
find_package(Python)
10+
11+
set(CPACK_IFW_ROOT $ENV{HOME}/Qt/QtIFW-3.0.6/ CACHE PATH "Qt Installer Framework installation base path")
12+
find_program(BINARYCREATOR_EXECUTABLE binarycreator HINTS "${_qt_bin_dir}" ${CPACK_IFW_ROOT}/bin)
13+
14+
mark_as_advanced(WINDEPLOYQT_EXECUTABLE LINUXDEPLOYQT_EXECUTABLE MACDEPLOYQT_EXECUTABLE)
15+
16+
function(linuxdeployqt destdir desktopfile)
17+
# creating AppDir
18+
add_custom_command(TARGET bundle PRE_BUILD
19+
COMMAND "${CMAKE_MAKE_PROGRAM}" DESTDIR=${destdir} install
20+
COMMAND "${LINUXDEPLOYQT_EXECUTABLE}" ${destdir}/${CMAKE_INSTALL_PREFIX}/${desktopfile} -bundle-non-qt-libs
21+
-qmake=${_qmake_executable}
22+
# hot fix for a known issue for libnss3 and libnssutils3.
23+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${NSS3_PLUGIN_PATH}
24+
${destdir}/${CMAKE_INSTALL_PREFIX}/lib/
25+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
26+
# packaging AppImage
27+
add_custom_command(TARGET bundle POST_BUILD
28+
COMMAND "${LINUXDEPLOYQT_EXECUTABLE}" ${destdir}/${CMAKE_INSTALL_PREFIX}/${desktopfile}
29+
-appimage -qmake=${_qmake_executable}
30+
WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
31+
endfunction()
32+
33+
function(windeployqt target)
34+
35+
# Bundle Library Files
36+
if(CMAKE_BUILD_TYPE_UPPER STREQUAL "DEBUG")
37+
set(WINDEPLOYQT_ARGS --debug)
38+
else()
39+
set(WINDEPLOYQT_ARGS --release)
40+
endif()
41+
42+
add_custom_command(TARGET ${target} POST_BUILD
43+
COMMAND "${CMAKE_COMMAND}" -E remove_directory "${CMAKE_CURRENT_BINARY_DIR}/winqt/"
44+
COMMAND "${CMAKE_COMMAND}" -E
45+
env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}"
46+
${WINDEPLOYQT_ARGS}
47+
--verbose 0
48+
--no-compiler-runtime
49+
--no-angle
50+
--no-opengl-sw
51+
--dir "${CMAKE_CURRENT_BINARY_DIR}/winqt/"
52+
$<TARGET_FILE:${target}>
53+
COMMENT "Deploying Qt..."
54+
)
55+
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/winqt/" DESTINATION bin)
56+
set(CMAKE_INSTALL_UCRT_LIBRARIES TRUE)
57+
include(InstallRequiredSystemLibraries)
58+
endfunction()
59+
60+
function(macdeployqt bundle targetdir _PACKAGER)
61+
file(GENERATE OUTPUT ${CMAKE_BINARY_DIR}/CPackMacDeployQt-${_PACKAGER}.cmake
62+
CONTENT "execute_process(COMMAND \"${MACDEPLOYQT_EXECUTABLE}\" \"${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Darwin/${_PACKAGER}/${targetdir}/${bundle}\" -always-overwrite)")
63+
install(SCRIPT ${CMAKE_BINARY_DIR}/CPackMacDeployQt-${_PACKAGER}.cmake COMPONENT Runtime)
64+
include(InstallRequiredSystemLibraries)
65+
endfunction()
66+
67+
set(CPACK_PACKAGE_VENDOR "Example_vendor")
68+
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}")
69+
set(CPACK_PACKAGE_CONTACT "Alexander Bychuk <bas524@yandex.ru>")
70+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_DESCRIPTION}")
71+
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
72+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
73+
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
74+
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
75+
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
76+
77+
set(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}")
78+
set(CPACK_PACKAGE_DIRECTORY "${CMAKE_BINARY_DIR}")
79+
80+
# set human names to exetuables
81+
set(CPACK_PACKAGE_EXECUTABLES "${PROJECT_NAME}" "DependencyViewer")
82+
set(CPACK_CREATE_DESKTOP_LINKS "${PROJECT_NAME}")
83+
set(CPACK_STRIP_FILES TRUE)
84+
85+
#------------------------------------------------------------------------------
86+
# include CPack, so we get target for packages
87+
set(CPACK_OUTPUT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BundleConfig.cmake")
88+
89+
add_custom_target(bundle
90+
COMMAND ${CMAKE_CPACK_COMMAND} "--config" "${CMAKE_BINARY_DIR}/BundleConfig.cmake"
91+
COMMENT "Running CPACK. Please wait..."
92+
DEPENDS ${PROJECT_NAME})
93+
set(CPACK_GENERATOR)
94+
95+
# Qt IFW packaging framework
96+
if(BINARYCREATOR_EXECUTABLE)
97+
list(APPEND CPACK_GENERATOR IFW)
98+
message(STATUS " + Qt Installer Framework YES ")
99+
else()
100+
message(STATUS " + Qt Installer Framework NO ")
101+
endif()
102+
103+
if(WIN32 AND NOT UNIX)
104+
#--------------------------------------------------------------------------
105+
# Windows specific
106+
list(APPEND CPACK_GENERATOR ZIP)
107+
message(STATUS "Package generation - Windows")
108+
message(STATUS " + ZIP YES ")
109+
110+
set(PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/icon.ico")
111+
112+
# NSIS windows installer
113+
find_program(NSIS_PATH nsis PATH_SUFFIXES nsis)
114+
if(NSIS_PATH)
115+
list(APPEND CPACK_GENERATOR NSIS)
116+
message(STATUS " + NSIS YES ")
117+
118+
set(CPACK_NSIS_DISPLAY_NAME ${CPACK_PACKAGE_NAME})
119+
# Icon of the installer
120+
file(TO_NATIVE_PATH "${PACKAGE_ICON}" CPACK_NSIS_MUI_ICON)
121+
file(TO_NATIVE_PATH "${PACKAGE_ICON}" CPACK_NSIS_MUI_HEADERIMAGE_BITMAP)
122+
set(CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}")
123+
set(CPACK_NSIS_MODIFY_PATH ON)
124+
else()
125+
message(STATUS " + NSIS NO ")
126+
endif()
127+
128+
# NuGet package
129+
find_program(NUGET_EXECUTABLE nuget)
130+
if(NUGET_EXECUTABLE)
131+
list(APPEND CPACK_GENERATOR NuGET)
132+
message(STATUS " + NuGET YES ")
133+
set(CPACK_NUGET_PACKAGE_NAME "${PROJECT_NAME}")
134+
else()
135+
message(STATUS " + NuGET NO ")
136+
endif()
137+
138+
windeployqt(${PROJECT_NAME})
139+
140+
elseif(APPLE)
141+
#--------------------------------------------------------------------------
142+
# Apple specific
143+
message(STATUS "Package generation - Mac OS X")
144+
message(STATUS " + TBZ2 YES ")
145+
146+
list(APPEND CPACK_GENERATOR TBZ2)
147+
set(CPACK_PACKAGE_ICON ${CMAKE_SOURCE_DIR}/resources/icon.icns)
148+
set(CMAKE_INSTALL_RPATH "@executable_path/../Frameworks")
149+
macdeployqt("${PROJECT_NAME}.app" "${PROJECT_NAME}-${PROJECT_VERSION}-Darwin" "TBZ2")
150+
151+
# XXX: not working settings for bundle and dragndrop generator
152+
set(CPACK_BUNDLE_NAME "${PROJECT_NAME}" )
153+
set(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/Info.plist")
154+
set(CPACK_BUNDLE_ICON ${CMAKE_PACKAGE_ICON})
155+
set(CPACK_DMG_VOLUME_NAME "${PROJECT_NAME}")
156+
set(CPACK_DMG_FORMAT "UDBZ")
157+
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_SOURCE_DIR}/resources/icon64.png")
158+
159+
if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.13)
160+
set(CPACK_GENERATOR "External;${CPACK_GENERATOR}")
161+
message(STATUS " + macdeployqt -dmg YES ")
162+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CPackMacDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
163+
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
164+
endif()
165+
166+
else()
167+
#-----------------------------------------------------------------------------
168+
# Linux specific
169+
list(APPEND CPACK_GENERATOR TBZ2 TXZ)
170+
message(STATUS "Package generation - UNIX")
171+
message(STATUS " + TBZ2 YES ")
172+
message(STATUS " + TXZ YES ")
173+
174+
find_program(RPMBUILD_PATH rpmbuild)
175+
if(RPMBUILD_PATH)
176+
message(STATUS " + RPM YES ")
177+
set(CPACK_GENERATOR "${CPACK_GENERATOR};RPM")
178+
set(CPACK_RPM_PACKAGE_LICENSE "MIT")
179+
else()
180+
message(STATUS " + RPM NO ")
181+
endif()
182+
183+
list(APPEND CPACK_GENERATOR DEB)
184+
message(STATUS " + DEB YES ")
185+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
186+
set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION TRUE)
187+
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "${PROJECT_URL}")
188+
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
189+
190+
if(LINUXDEPLOYQT_EXECUTABLE)
191+
message(STATUS " + AppImage YES ")
192+
find_path(NSS3_PLUGIN_PATH NAMES libsoftokn3.so PATHS /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} /usr/lib /usr/local/lib
193+
PATH_SUFFIXES nss NO_DEFAULT_PATH)
194+
if(CMAKE_VERSION VERSION_LESS 3.13)
195+
linuxdeployqt("${CPACK_PACKAGE_DIRECTORY}/_CPack_Packages/Linux/AppImage" "share/applications/example.desktop")
196+
else()
197+
set(CPACK_GENERATOR "External;${CPACK_GENERATOR}")
198+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CPackLinuxDeployQt.cmake.in "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
199+
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${CMAKE_BINARY_DIR}/CPackExternal.cmake")
200+
endif()
201+
else()
202+
message(STATUS " + AppImage NO ")
203+
endif()
204+
205+
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/resources/icon64.png")
206+
endif()
207+
208+
include(CPack)

finfdialog.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@ FinfDialog::~FinfDialog() { delete ui; }
1717
void FinfDialog::on_findButton_clicked() {
1818
if (!ui->findLineEdit->text().isEmpty()) {
1919
MainWindow *mw = dynamic_cast<MainWindow *>(parentWidget());
20-
mw->fillExportTable(ui->findLineEdit->text());
20+
if (mw) {
21+
mw->fillExportTable(ui->findLineEdit->text());
22+
}
2123
close();
2224
}
2325
}

main.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ int main(int argc, char *argv[]) {
77
QApplication app(argc, argv);
88

99
QApplication::setApplicationName("Qldd");
10-
QApplication::setApplicationVersion("1.0");
10+
QApplication::setApplicationVersion("1.0.0");
1111

1212
QCommandLineParser parser;
1313
parser.setApplicationDescription("Qldd gui over ldd utility");

mainwindow.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,17 @@ MainWindow::MainWindow(const QString &fileName, QWidget *parent)
3636

3737
shortcutFind = new QShortcut(QKeySequence(Qt::CTRL | Qt::Key_F), this);
3838
connect(shortcutFind, SIGNAL(activated()), this, SLOT(find()));
39+
ui->filterButton->setIcon(ui->filterButton->style()->standardIcon(QStyle::SP_FileDialogListView));
40+
ui->resetButton->setIcon(ui->resetButton->style()->standardIcon(QStyle::SP_DialogCancelButton));
3941

4042
createActions();
4143
createMenus();
4244

4345
if (!fileName.isEmpty()) {
4446
reset(fileName);
47+
} else {
48+
QTreeWidgetItem *header = ui->treeWidget->headerItem();
49+
header->setText(0, "Dependency");
4550
}
4651
ui->tabWidget->setCurrentIndex(0);
4752
}
@@ -168,3 +173,7 @@ void MainWindow::on_checkBoxOtherRead_clicked(bool checked) { ui->checkBoxOtherR
168173
void MainWindow::on_checkBoxOtherWrite_clicked(bool checked) { ui->checkBoxOtherWrite->setChecked(!checked); }
169174

170175
void MainWindow::on_checkBoxOtherExec_clicked(bool checked) { ui->checkBoxOtherExec->setChecked(!checked); }
176+
177+
void MainWindow::on_filterButton_clicked() { find(); }
178+
179+
void MainWindow::on_resetButton_clicked() { myClose(); }

mainwindow.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ class MainWindow : public QMainWindow {
4141

4242
void on_checkBoxOtherExec_clicked(bool checked);
4343

44+
void on_filterButton_clicked();
45+
46+
void on_resetButton_clicked();
47+
4448
private:
4549
void createActions();
4650
void createMenus();

0 commit comments

Comments
 (0)