build: Fix various issues for upstream Fedora compatibility (#642)

* cmake: use GNUInstallDirs to find install dirs on Linux

* install plugins to lib/imhex/plugins

* fix included files in imhex.spec

* fix the release CI + do not upload x86_64 folder for Fedora

* change rpm names

* added IMHEX_STRIP_RELEASE option to optionally strip releases files (was done all the time before)

* Customize our imhex.spec file (use online building for our Fedora package)

* added IMHEX_PLUGINS_IN_SHARE option for AppImage

* test
This commit is contained in:
iTrooz_ 2022-08-04 20:37:57 +02:00 committed by GitHub
parent e2d75ad6bf
commit e816b67472
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 57 additions and 24 deletions

View File

@ -262,6 +262,19 @@ jobs:
mv build/AppDir.deb imhex-${{env.IMHEX_VERSION}}.deb
rm -rf build/AppDir/DEBIAN
- name: 🛠️ Reconfigure build for AppImage
run: |
# Reconfigure CMake to include a flag needed for AppImage
# Other flags are kept from old configuration
cd build
cmake \
-DIMHEX_PLUGINS_IN_SHARE=ON \
..
rm -rf AppDir
make -j 4 install DESTDIR=AppDir
- name: 📦 Bundle AppImage
run: |
cd build
@ -445,10 +458,11 @@ jobs:
- name: 📦 Build RPM
run: |
rpmbuild -ba --define "_version ${{env.IMHEX_VERSION}}" --define "_src_path $GITHUB_WORKSPACE" --define "_build_type $BUILD_TYPE" $GITHUB_WORKSPACE/dist/rpm/imhex.spec
mv ~/rpmbuild/RPMS/x86_64/*.rpm imhex-${{env.IMHEX_VERSION}}-Fedora-${{matrix.release}}.rpm
- name: ⬆️ Upload RPM
uses: actions/upload-artifact@v3
with:
name: Fedora ${{ matrix.release }} RPM
path: |
~/rpmbuild/RPMS/*/*.rpm
imhex-${{env.IMHEX_VERSION}}-Fedora-${{matrix.release}}.rpm

View File

@ -63,9 +63,7 @@ jobs:
- name: ⬆️ Upload everything to release
uses: softprops/action-gh-release@v1
with:
files: |
'*'
'*/*.rpm'
files: '*'
- name: ✒️ Prepare PKGBUILD
run: |

View File

@ -1,6 +1,8 @@
cmake_minimum_required(VERSION 3.16)
# Options
option(IMHEX_PLUGINS_IN_SHARE "Put the plugins in share/imhex/plugins instead of lib[..]/imhex/plugins" OFF)
option(IMHEX_STRIP_RELEASE "Strip the release builds" ON)
option(IMHEX_OFFLINE_BUILD "Enable offline build" OFF)
option(IMHEX_IGNORE_BAD_CLONE "Disabled the bad clone prevention checks" OFF)
option(IMHEX_PATTERNS_PULL_MASTER "Download latest files from master branch of the ImHex-Patterns repo" OFF)

View File

@ -1,10 +1,12 @@
include(FetchContent)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
if(IMHEX_STRIP_RELEASE)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(CPACK_STRIP_FILES TRUE)
if(CMAKE_BUILD_TYPE STREQUAL "Release")
set(CPACK_STRIP_FILES TRUE)
endif()
endif()
macro(addVersionDefines)
@ -90,9 +92,16 @@ macro(detectOS)
enable_language(OBJCXX)
elseif (UNIX AND NOT APPLE)
add_compile_definitions(OS_LINUX)
set(CMAKE_INSTALL_BINDIR "bin")
set(CMAKE_INSTALL_LIBDIR "lib")
set(PLUGINS_INSTALL_LOCATION "share/imhex/plugins")
include(GNUInstallDirs)
if(IMHEX_PLUGINS_IN_SHARE)
set(PLUGINS_INSTALL_LOCATION "share/imhex/plugins")
else()
set(PLUGINS_INSTALL_LOCATION "${CMAKE_INSTALL_LIBDIR}/imhex/plugins")
# Warning : Do not work with portable versions such as appimage (because the path is hardcoded)
add_compile_definitions(SYSTEM_PLUGINS_LOCATION="${CMAKE_INSTALL_FULL_LIBDIR}/imhex") # "plugins" will be appended from the app
endif()
else ()
message(FATAL_ERROR "Unknown / unsupported system!")
endif()

5
dist/Arch/PKGBUILD vendored
View File

@ -28,11 +28,12 @@ package() {
install -DT $srcdir/usr/bin/imhex $pkgdir/usr/bin/imhex
install -DT $srcdir/usr/lib/libimhex.so.$pkgver $pkgdir/usr/lib/libimhex.so.$pkgver
for plugin in $srcdir/usr/share/imhex/plugins/*.hexplug;
for plugin in $srcdir/usr/lib/imhex/plugins/*.hexplug;
do
install -DT $plugin $pkgdir/usr/share/imhex/plugins/`basename $plugin`
install -DT $plugin $pkgdir/usr/lib/imhex/plugins/`basename $plugin`
done
mkdir -p $pkgdir/usr/share/imhex
cp -r $srcdir/usr/share/imhex/{constants,encodings,includes,magic,patterns} $pkgdir/usr/share/imhex
cp -r $srcdir/usr/share/{applications,licenses} $pkgdir/usr/share
install -d $pkgdir/usr/share

7
dist/rpm/imhex.spec vendored
View File

@ -48,13 +48,13 @@ cp -r %{_src_path}/* %{_builddir}/
%build
%cmake \
-DCMAKE_BUILD_TYPE=%{_build_type} \
-D IMHEX_OFFLINE_BUILD=ON \
-D USE_SYSTEM_NLOHMANN_JSON=ON \
-D USE_SYSTEM_FMT=ON \
-D USE_SYSTEM_CURL=ON \
-D USE_SYSTEM_LLVM=ON \
-DCMAKE_C_COMPILER_LAUNCHER=ccache \
-DCMAKE_CXX_COMPILER_LAUNCHER=ccache \
-D IMHEX_PATTERNS_PULL_MASTER=ON \
%if 0%{?fedora} >= 37
-D USE_SYSTEM_YARA=ON \
# if fedora <= 36 get updated to yara 4.2.x then they should \
@ -78,10 +78,11 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/imhex.desktop
%license %{_datadir}/licenses/imhex/LICENSE
%doc README.md
%{_bindir}/imhex
%{_datadir}/pixmaps/imhex.png
%dir %{_datadir}/imhex
%{_datadir}/imhex/*
%{_datadir}/pixmaps/imhex.png
%{_datadir}/applications/imhex.desktop
%{_prefix}/lib/libimhex.so.%{_version}
%{_prefix}/lib64/libimhex.so.%{_version}
%{_prefix}/lib64/imhex/plugins/*
%changelog

View File

@ -179,17 +179,25 @@ namespace hex::fs {
#endif
}
constexpr std::vector<std::fs::path> appendPath(std::vector<std::fs::path> paths, const std::fs::path &folder) {
for (auto &path : paths)
path = path / folder;
return paths;
};
std::vector<std::fs::path> getPluginPaths() {
std::vector<std::fs::path> paths = getDataPaths();
#if defined(OS_LINUX) && defined(SYSTEM_PLUGINS_LOCATION)
paths.push_back(SYSTEM_PLUGINS_LOCATION);
#endif
return paths;
}
std::vector<std::fs::path> getDefaultPaths(ImHexPath path, bool listNonExisting) {
std::vector<std::fs::path> result;
constexpr auto appendPath = [](std::vector<std::fs::path> paths, const std::fs::path &folder) {
for (auto &path : paths)
path = path / folder;
return paths;
};
switch (path) {
case ImHexPath::Constants:
result = appendPath(getDataPaths(), "constants");
@ -204,7 +212,7 @@ namespace hex::fs {
result = appendPath(getConfigPaths(), "logs");
break;
case ImHexPath::Plugins:
result = appendPath(getDataPaths(), "plugins");
result = appendPath(getPluginPaths(), "plugins");
break;
case ImHexPath::Resources:
result = appendPath(getDataPaths(), "resources");