67 Commits

Author SHA1 Message Date
Luke Street 01311f1ce3 More updates 2022-07-11 18:22:31 -04:00
Luke Street 87e377cb3c Add aarch64 build 2022-07-11 18:08:53 -04:00
Luke Street a56aac5ecf Support for armhf/aarch64 2022-07-11 18:06:54 -04:00
TheAssassin 56760df190 Fix patchelf unexpectedly overwriting symlinked libraries 2022-05-18 23:33:02 +02:00
TheAssassin 23dcaa5cda Log which boost version is used for build 2022-05-18 18:12:41 +02:00
TheAssassin 097212aa1e Merge pull request #200 from solemnwarning/exclude-library
Add --exclude-library option.
2022-05-03 19:09:03 +02:00
Daniel Collins 37b640fa86 Add --exclude-library option. 2022-05-01 21:49:22 +01:00
TheAssassin ed42a40a87 Rebuild at least once a month 2022-03-03 18:35:27 +01:00
TheAssassin 4c5b9c5daf Merge pull request #188 from smarttowel/fix_149
Possible fix for #149
2022-01-12 10:51:49 +01:00
TheAssassin 0f5361b457 Code style fixes 2022-01-11 19:24:08 +01:00
Pavel Mikhadzionak fc27076843 Codestyle update
Co-authored-by: TheAssassin <theassassin@assassinate-you.net>
2022-01-11 17:47:05 +03:00
smarttowel f59f8f9512 Add const modifier to rpath var 2022-01-11 17:33:27 +03:00
smarttowel ae8699854a Append $ORIGIN to rpath if missed 2022-01-11 17:18:15 +03:00
smarttowel fa3e51c7db Possible fix for #149 2022-01-11 16:24:37 +03:00
TheAssassin d2e9567029 Add FetchContent fallback for CImg 2021-12-03 18:28:41 +01:00
TheAssassin fb5cd4d32d Require static boost libs only if necessary
Some distros don't ship static libraries by default, therefore requiring
them by default breaks on those. Also, it makes no sense, really.

Fixes one build issue on openSUSE Leap.
2021-12-03 14:45:35 +01:00
TheAssassin 5fb5ca5a8b Remove duplicate inclusion of CTest 2021-12-03 14:44:18 +01:00
TheAssassin ae714d69ff Support system-provided CImg only from now on 2021-12-01 05:00:34 +01:00
TheAssassin 01331697d0 Support only system-provided boost from now on 2021-12-01 05:00:33 +01:00
TheAssassin d903364ffc Update linuxdeploy-desktopfile 2021-12-01 03:50:05 +01:00
TheAssassin d77cff2adc Update cmake-scripts 2021-12-01 03:49:32 +01:00
TheAssassin 5685bc575e Test invalid headers and missing files in ELF library
CC #185.
2021-11-30 00:08:52 +01:00
TheAssassin d621d3949d Refactor and simplify tests config in CMake 2021-11-30 00:05:15 +01:00
TheAssassin 0c49714228 Use cmake-scripts to manage gtest dependency 2021-11-30 00:01:54 +01:00
TheAssassin 9aa59f3e75 Improve detection of excluded test targets, mk. 2 2021-11-20 01:58:28 +01:00
TheAssassin bcd9d5337e Improve detection of excluded test targets 2021-11-20 01:56:42 +01:00
TheAssassin 39ab9909cf Fix test executable discovery 2021-11-20 01:35:16 +01:00
TheAssassin 03d8cb3234 Install missing dependencies for coverage builds 2021-10-16 03:52:18 +02:00
TheAssassin 2dfccf760b Fix coverage builds 2021-10-16 03:47:36 +02:00
TheAssassin 789222bae6 Test that deployment actually works 2021-10-16 03:40:43 +02:00
TheAssassin 7e3beb4336 Add new test to check minimum permissions 2021-10-16 03:37:22 +02:00
TheAssassin 63d2fa5437 Add minimum permissions to copied files
Fixes #181.
2021-10-16 03:22:02 +02:00
TheAssassin 49f4f23776 Remove accidentally committed debug code 2021-05-29 01:30:28 +02:00
TheAssassin 1d534d2b32 Do not set rpath in statically linked or debug symbols ELF files 2021-05-29 01:25:21 +02:00
TheAssassin 3c6096433d Detect dynamically linked and debug symbols only ELF files
TODO: extract ELF stuff into new small C++ wrapper library that can be used in various places (e.g., AppImageLauncher, the AppImage runtime, ...)
2021-05-29 01:19:42 +02:00
TheAssassin 86c99ccfb4 Fix header name collision 2021-05-29 01:09:48 +02:00
TheAssassin d5c4124a0b Make sure to compare canonical paths
Absolute paths do not have to be canonical. For instance, .../a/../AppDir may be equivalent to .../AppDir, however the current implementation would not match them.
2021-05-25 23:17:41 +02:00
TheAssassin a73dbf68f4 Fix linuxdeploy accidentally exiting on warning 2021-05-25 22:50:24 +02:00
TheAssassin a7a255f9f1 Fix escaping in auto-generated script, mk. 2 2021-05-25 17:38:09 +02:00
TheAssassin 679904ce7b Add $LINUXDEPLOY_PLUGIN_MODE
This enables a special mode used for plugins that intend to call linuxdeploy via $LINUXDEPLOY. It skips the finishing steps to make sure they are not run prematurely.

Consider this a workaround to a bug in the AppDir root dir deployment.
2021-05-25 17:22:26 +02:00
TheAssassin 6b96159f88 Fix escaping in auto-generated script 2021-05-25 16:49:19 +02:00
TheAssassin ab49cecf09 Make sure custom AppRun files are executable 2021-05-25 16:49:00 +02:00
TheAssassin 49c3a57226 Embed GitHub run number 2021-05-25 10:51:05 +02:00
TheAssassin 39b03f630d Update linuxdeploy-desktopfile 2021-05-15 17:18:20 +02:00
TheAssassin 0a6a1c59b7 Fix test execution in CI build script 2021-05-14 08:38:45 +02:00
TheAssassin 7b1c858ff5 Fix macro like in linuxdeploy-desktopfile 2021-05-14 08:33:28 +02:00
TheAssassin 0c23a481fe Update linuxdeploy-desktopfile 2021-05-13 15:06:18 +02:00
TheAssassin b7c9785626 Fix source archive hash
For some reason, the SHA256 hash of the libjpeg source archive was
changed by the upstream. The archive seems to be okay, so changing the
hash should be fine.
2021-04-22 09:38:18 +02:00
TheAssassin 9fb2ac35d2 Use matrix to simplify workflow, mk. 3 2021-01-03 15:24:44 +01:00
TheAssassin f83a0e99eb Use matrix to simplify workflow, mk. 2 2021-01-03 15:23:32 +01:00
TheAssassin 8c848e6b26 Use matrix to simplify workflow 2021-01-03 15:21:44 +01:00
TheAssassin 58f8b6a6fd Fix FUSE issues on i386... in the right job 2020-12-11 12:09:43 +01:00
TheAssassin c1bd11028c Fix FUSE issues on i386 2020-12-11 11:54:46 +01:00
TheAssassin da1bae216a Install 32-bit dependencies, mk. 2 2020-12-11 11:17:59 +01:00
TheAssassin b42420e731 Install 32-bit dependencies 2020-12-11 11:13:42 +01:00
TheAssassin 8f86082322 Fix bug in actions workflow 2020-12-11 09:53:36 +01:00
TheAssassin fb80d6a4f4 Update ignore patterns 2020-12-10 22:32:37 +01:00
TheAssassin 575dde281d Switch to GitHub actions 2020-12-10 22:24:35 +01:00
TheAssassin 3e05627373 Merge pull request #156 from patrickelectric/fix_include_std_runtime_error
subprocess: Add missing include for std::runtime_error
2020-11-18 18:19:48 +01:00
Patrick José Pereira 73f3126a59 subprocess: Add missing include for std::runtime_error
Signed-off-by: Patrick José Pereira <patrickelectric@gmail.com>
2020-11-18 11:58:15 -03:00
TheAssassin b6a1ba290e Close file descriptors when process has exited 2020-10-07 04:37:50 +02:00
TheAssassin 3c21d86574 Improve file descriptor connection
Instead of passing the fd array for no real reason, the actual fd is passed from now on. The lambda now also logs error message received via errno.
2020-10-07 04:25:14 +02:00
TheAssassin 2554b35403 Check return code of ::close
It appears to be pretty common not to check the return code, but it's a serious programming flaw.
2020-10-07 03:37:00 +02:00
TheAssassin bfcde878e2 Log error when pipe creation fails 2020-10-05 22:35:15 +02:00
TheAssassin 04d5321a5f Merge pull request #148 from JokerQyou/master
Read ldd error message from both stdout and stderr
2020-09-25 14:18:42 +02:00
Joker_ 76f1d8fee5 Read ldd error message from both stdout and stderr 2020-09-23 11:49:24 +08:00
TheAssassin e4fff0a5b7 Merge pull request #146 from linuxdeploy/fix-145
Read subprocesses' pipes until they're empty
2020-09-22 13:46:31 +02:00
57 changed files with 760 additions and 458 deletions
+107
View File
@@ -0,0 +1,107 @@
name: CI
on:
push:
pull_request:
workflow_dispatch:
schedule:
# build at least once a month
- cron: '0 0 1 * *'
jobs:
build-and-test:
strategy:
matrix:
ARCH: [x86_64, i386, aarch64]
BUILD_TYPE: [appimage, coverage]
fail-fast: false
name: ${{ matrix.BUILD_TYPE }} ${{ matrix.ARCH }}
runs-on: ubuntu-latest
env:
ARCH: ${{ matrix.ARCH }}
BUILD_TYPE: ${{ matrix.BUILD_TYPE }}
steps:
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Install dependencies (x86_64)
if: matrix.ARCH == 'x86_64'
run: |
sudo apt-get update
sudo apt-get install -y gcovr libmagic-dev libjpeg-dev libpng-dev libboost-filesystem-dev libboost-regex-dev cimg-dev
- name: Install dependencies (i386)
if: matrix.ARCH == 'i386'
run: |
sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install -y gcovr libmagic-dev:i386 libjpeg-dev:i386 libpng-dev:i386 libboost-filesystem-dev:i386 libboost-regex-dev:i386 cimg-dev gcc-multilib g++-multilib libfuse2:i386
- name: Test coverage (native)
run: bash -ex ci/test-coverage.sh
if: matrix.ARCH != 'aarch64' && matrix.BUILD_TYPE == 'coverage'
- name: Test coverage (VM)
if: matrix.ARCH != 'x86_64' && matrix.ARCH != 'i386' && matrix.BUILD_TYPE == 'coverage'
uses: uraimo/run-on-arch-action@v2.2.0
with:
arch: ${{ matrix.ARCH }}
distro: ubuntu20.04
githubToken: ${{ github.token }}
dockerRunArgs: |
--volume "${PWD}:/build"
install: |
apt-get update
apt-get install -y build-essential wget git pkg-config autoconf libmagic-dev libjpeg-dev libpng-dev cimg-dev libboost-filesystem-dev libboost-regex-dev gcovr
run: |
cd /build
ARCH=$(uname -m) ci/test-coverage.sh
- name: Build, test and build AppImage (native)
if: matrix.ARCH != 'aarch64' && matrix.BUILD_TYPE != 'coverage'
run: bash -ex ci/build.sh
- name: Build, test and build AppImage (VM)
if: matrix.ARCH != 'x86_64' && matrix.ARCH != 'i386' && matrix.BUILD_TYPE != 'coverage'
uses: uraimo/run-on-arch-action@v2.2.0
with:
arch: ${{ matrix.ARCH }}
distro: ubuntu20.04
githubToken: ${{ github.token }}
dockerRunArgs: |
--volume "${PWD}:/build"
install: |
apt-get update
apt-get install -y build-essential wget git pkg-config autoconf libmagic-dev libjpeg-dev libpng-dev cimg-dev libboost-filesystem-dev libboost-regex-dev gcovr
run: |
cd /build
ARCH=$(uname -m) ci/build.sh
- name: Archive artifacts
uses: actions/upload-artifact@v2
if: matrix.BUILD_TYPE != 'coverage'
with:
name: AppImage
path: linuxdeploy*.AppImage*
upload:
name: Create release and upload artifacts
needs:
- build-and-test
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v2
- name: Inspect directory after downloading artifacts
run: ls -alFR
- name: Create release and upload artifacts
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
wget -q https://github.com/TheAssassin/pyuploadtool/releases/download/continuous/pyuploadtool-x86_64.AppImage
chmod +x pyuploadtool-x86_64.AppImage
./pyuploadtool-x86_64.AppImage **/linuxdeploy*.AppImage*
+1
View File
@@ -3,3 +3,4 @@ cmake-build-*/
.idea/
squashfs-root/
*.AppImage
*.swp
+3 -72
View File
@@ -1,81 +1,12 @@
[submodule "lib/args"]
path = lib/args
url = https://github.com/Taywee/args.git
[submodule "lib/boost-filesystem"]
path = lib/boost-filesystem
url = https://github.com/boostorg/filesystem.git
[submodule "lib/boost-regex"]
path = lib/boost-regex
url = https://github.com/boostorg/regex.git
[submodule "lib/boost-system"]
path = lib/boost-system
url = https://github.com/boostorg/system.git
[submodule "lib/boost-config"]
path = lib/boost-config
url = https://github.com/boostorg/config.git
[submodule "lib/boost-utility"]
path = lib/boost-utility
url = https://github.com/boostorg/utility.git
[submodule "lib/boost-predef"]
path = lib/boost-predef
url = https://github.com/boostorg/predef.git
[submodule "lib/boost-assert"]
path = lib/boost-assert
url = https://github.com/boostorg/assert.git
[submodule "lib/boost-core"]
path = lib/boost-core
url = https://github.com/boostorg/core.git
[submodule "lib/boost-type_traits"]
path = lib/boost-type_traits
url = https://github.com/boostorg/type_traits.git
[submodule "lib/boost-iterator"]
path = lib/boost-iterator
url = https://github.com/boostorg/iterator.git
[submodule "lib/boost-mpl"]
path = lib/boost-mpl
url = https://github.com/boostorg/mpl.git
[submodule "lib/boost-preprocessor"]
path = lib/boost-preprocessor
url = https://github.com/boostorg/preprocessor.git
[submodule "lib/boost-static_assert"]
path = lib/boost-static_assert
url = https://github.com/boostorg/static_assert.git
[submodule "lib/boost-detail"]
path = lib/boost-detail
url = https://github.com/boostorg/detail.git
[submodule "lib/boost-smart_ptr"]
path = lib/boost-smart_ptr
url = https://github.com/boostorg/smart_ptr.git
[submodule "lib/boost-exception"]
path = lib/boost-exception
url = https://github.com/boostorg/exception.git
[submodule "lib/boost-throw_exception"]
path = lib/boost-throw_exception
url = https://github.com/boostorg/throw_exception.git
[submodule "lib/boost-io"]
path = lib/boost-io
url = https://github.com/boostorg/io.git
[submodule "lib/boost-functional"]
path = lib/boost-functional
url = https://github.com/boostorg/functional.git
[submodule "lib/boost-container_hash"]
path = lib/boost-container_hash
url = https://github.com/boostorg/container_hash.git
[submodule "lib/boost-range"]
path = lib/boost-range
url = https://github.com/boostorg/range.git
[submodule "lib/boost-integer"]
path = lib/boost-integer
url = https://github.com/boostorg/integer.git
[submodule "lib/CImg"]
path = lib/CImg
url = https://github.com/dtschump/CImg.git
[submodule "lib/googletest"]
path = lib/googletest
url = https://github.com/google/googletest
[submodule "lib/boost-container"]
path = lib/boost-container
url = https://github.com/boostorg/container
[submodule "lib/linuxdeploy-desktopfile"]
path = lib/linuxdeploy-desktopfile
url = https://github.com/linuxdeploy/linuxdeploy-desktopfile
[submodule "lib/cmake-scripts"]
path = lib/cmake-scripts
url = https://github.com/linuxdeploy/cmake-scripts.git
-80
View File
@@ -1,80 +0,0 @@
language: cpp
matrix:
include:
- name: Ubuntu bionic x86_64 release build
env: ARCH=x86_64
dist: bionic
addons:
apt:
update: true
packages:
- libmagic-dev
- libjpeg-dev
- libpng-dev
- cimg-dev
script: travis/build.sh
after_success:
- if [ "$TRAVIS_BRANCH" != "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" != "master" ]; then export TRAVIS_EVENT_TYPE=pull_request; fi
- wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
- bash upload.sh linuxdeploy-"$ARCH".AppImage*
- name: Ubuntu bionic i386 build
env: ARCH=i386
dist: bionic
addons:
apt:
update: true
packages:
- libmagic-dev:i386
- libjpeg-dev:i386
- libpng-dev:i386
- gcc-multilib
- g++-multilib
- libfuse2:i386
- libcairo2:i386
script: travis/build.sh
after_success:
- if [ "$TRAVIS_BRANCH" != "$TRAVIS_TAG" ] && [ "$TRAVIS_BRANCH" != "master" ]; then export TRAVIS_EVENT_TYPE=pull_request; fi
- wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh
- bash upload.sh linuxdeploy-"$ARCH".AppImage*
- name: Ubuntu xenial x86_64 coverage build (no binaries uploaded)
env: ARCH=x86_64 BUILD_TYPE=coverage
dist: xenial
addons:
apt:
update: true
packages:
- libmagic-dev
- libjpeg-dev
- libpng-dev
- cimg-dev
before_script:
- sudo pip install gcovr
script: travis/test-coverage.sh
after_success: true # also, we don't intend to upload release binaries
- name: Ubuntu xenial i386 coverage build (no binaries uploaded)
env: ARCH=i386 BUILD_TYPE=coverage
dist: xenial
addons:
apt:
update: true
packages:
- libmagic-dev:i386
- libjpeg-dev:i386
- libpng-dev:i386
- gcc-multilib
- g++-multilib
- libfuse2:i386
- libcairo2:i386
before_script:
- sudo pip install gcovr
script: travis/test-coverage.sh
after_success: true # also, we don't intend to upload release binaries
branches:
except:
- # Do not build tags that we create when we upload to GitHub Releases
- /^(?i:continuous)$/
+8 -4
View File
@@ -7,9 +7,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake/Modules/")
set(USE_SYSTEM_BOOST OFF CACHE BOOL "Set to ON to use system boost libraries instead of building up to date boost libraries from source")
set(USE_SYSTEM_CIMG ON CACHE BOOL "Set to OFF to use CImg library bundled in lib directory")
# support for ccache
# call CMake with -DUSE_CCACHE=ON to make use of it
set(USE_CCACHE ON CACHE BOOL "")
@@ -43,11 +40,18 @@ if(ENABLE_COVERAGE)
setup_target_for_coverage_gcovr_text(NAME coverage_text EXECUTABLE "${command}")
endif()
include(CTest)
if(BUILD_TESTING)
# including this before including lib/ makes sure that the top level project's gtest is used everywhere
include(${PROJECT_SOURCE_DIR}/lib/cmake-scripts/include-or-build-gtest.cmake)
endif()
add_subdirectory(lib)
add_subdirectory(src)
include(CTest)
if(BUILD_TESTING)
enable_testing()
add_subdirectory(tests)
endif()
@@ -12,7 +12,7 @@ fi
# support cross-compilation for 32-bit ISAs
case "$ARCH" in
"x86_64"|"amd64")
"x86_64"|"amd64"|"armhf"|"aarch64")
;;
"i386"|"i586"|"i686")
export CFLAGS="-m32"
@@ -44,7 +44,7 @@ BUILD_DIR=$(mktemp -d -p "$TEMP_BASE" linuxdeploy-build-XXXXXX)
pushd "$BUILD_DIR"
# fetch source code
wget https://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz -O- | tar xJ --strip-components=1
wget http://mirrors.kernel.org/gnu/binutils/binutils-2.35.tar.xz -O- | tar xJ --strip-components=1
# configure static build
# inspired by https://github.com/andrew-d/static-binaries/blob/master/binutils/build.sh
@@ -12,7 +12,7 @@ fi
# support cross-compilation for 32-bit ISAs
case "$ARCH" in
"x86_64"|"amd64")
"x86_64"|"amd64"|"armhf"|"aarch64")
;;
"i386"|"i586"|"i686")
export CFLAGS="-m32"
+9 -5
View File
@@ -30,6 +30,10 @@ if [ "$ARCH" == "x86_64" ]; then
EXTRA_CMAKE_ARGS=()
elif [ "$ARCH" == "i386" ]; then
EXTRA_CMAKE_ARGS=("-DCMAKE_TOOLCHAIN_FILE=$REPO_ROOT/cmake/toolchains/i386-linux-gnu.cmake" "-DUSE_SYSTEM_CIMG=OFF")
elif [ "$ARCH" == "armhf" ]; then
EXTRA_CMAKE_ARGS=()
elif [ "$ARCH" == "aarch64" ]; then
EXTRA_CMAKE_ARGS=()
else
echo "Architecture not supported: $ARCH" 1>&2
exit 1
@@ -37,24 +41,24 @@ fi
# fetch up-to-date CMake
mkdir cmake-prefix
wget -O- https://github.com/Kitware/CMake/releases/download/v3.18.1/cmake-3.18.1-Linux-x86_64.tar.gz | tar -xz -C cmake-prefix --strip-components=1
wget -O- https://github.com/Kitware/CMake/releases/download/v3.19.6/cmake-3.19.6-Linux-$(uname -m).tar.gz | tar -xz -C cmake-prefix --strip-components=1
export PATH="$(readlink -f cmake-prefix/bin):$PATH"
cmake --version
# configure build for AppImage release
cmake "$REPO_ROOT" -DSTATIC_BUILD=On -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=RelWithDebInfo "${EXTRA_CMAKE_ARGS[@]}"
make -j"$(nproc)" linuxdeploy
make -j"$(nproc)"
## Run Unit Tests
ctest -V
# build patchelf
"$REPO_ROOT"/travis/build-static-patchelf.sh "$(readlink -f out/)"
"$REPO_ROOT"/ci/build-static-patchelf.sh "$(readlink -f out/)"
patchelf_path="$(readlink -f out/usr/bin/patchelf)"
# build custom strip
"$REPO_ROOT"/travis/build-static-binutils.sh "$(readlink -f out/)"
"$REPO_ROOT"/ci/build-static-binutils.sh "$(readlink -f out/)"
strip_path="$(readlink -f out/usr/bin/strip)"
# use tools we just built for linuxdeploy run
@@ -69,7 +73,7 @@ bin/linuxdeploy "${LINUXDEPLOY_ARGS[@]}"
# bundle AppImage plugin
mkdir -p AppDir/plugins
wget https://github.com/TheAssassin/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-"$ARCH".AppImage
wget https://github.com/encounter/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-"$ARCH".AppImage
chmod +x linuxdeploy-plugin-appimage-"$ARCH".AppImage
./linuxdeploy-plugin-appimage-"$ARCH".AppImage --appimage-extract
mv squashfs-root/ AppDir/plugins/linuxdeploy-plugin-appimage
@@ -30,6 +30,10 @@ if [ "$ARCH" == "x86_64" ]; then
EXTRA_CMAKE_ARGS=()
elif [ "$ARCH" == "i386" ]; then
EXTRA_CMAKE_ARGS=("-DCMAKE_TOOLCHAIN_FILE=$REPO_ROOT/cmake/toolchains/i386-linux-gnu.cmake" "-DUSE_SYSTEM_CIMG=OFF")
elif [ "$ARCH" == "armhf" ]; then
EXTRA_CMAKE_ARGS=()
elif [ "$ARCH" == "aarch64" ]; then
EXTRA_CMAKE_ARGS=()
else
echo "Architecture not supported: $ARCH" 1>&2
exit 1
+86 -53
View File
@@ -1,64 +1,97 @@
# required for PNG imported target
cmake_minimum_required(VERSION 3.6)
#[=======================================================================[.rst:
FindCImg
-------
find_package(PkgConfig)
pkg_check_modules(libpng REQUIRED IMPORTED_TARGET libpng)
Finds the CImg library.
# build custom static version of libjpeg for static builds
if(STATIC_BUILD)
include(ExternalProject)
Imported Targets
^^^^^^^^^^^^^^^^
if($ENV{ARCH} MATCHES "i[356]86")
set(configure_command_prefix env CFLAGS=-m32 CXXFLAGS=-m32)
This module provides the following imported targets, if found:
``CImg``
The CImg library
Result Variables
^^^^^^^^^^^^^^^^
This will define the following variables:
``CImg_FOUND``
True if the system has the CImg library.
``CImg_VERSION``
The version of the CImg library which was found.
``CImg_INCLUDE_DIRS``
Include directories needed to use CImg.
``CImg_LIBRARIES``
Libraries needed to link to CImg.
Cache Variables
^^^^^^^^^^^^^^^
The following cache variables may also be set:
``CImg_INCLUDE_DIR``
The directory containing ``CImg.h``.
#]=======================================================================]
# 3.6 required for PNG imported target
# 3.9 required for CMAKE_MATCH_<n>
cmake_minimum_required(VERSION 3.9)
find_path(CIMG_H_DIR
NAMES CImg.h
HINTS ${CMAKE_INSTALL_PREFIX} ${CIMG_DIR}
PATH_SUFFIXES include include/linux
)
if(NOT CIMG_H_DIR)
set(CImg_FOUND FALSE)
else()
set(CImg_FOUND TRUE)
find_package(PkgConfig)
pkg_check_modules(libpng REQUIRED libpng)
pkg_check_modules(libjpeg REQUIRED libjpeg)
set(PNG_INCLUDE_DIR ${libpng_INCLUDE_DIRS})
set(JPEG_INCLUDE_DIR ${libjpeg_INCLUDE_DIRS})
if(STATIC_BUILD)
set(PNG_LIBRARY ${libpng_STATIC_LIBRARIES})
set(JPEG_LIBRARIES ${libjpeg_STATIC_LIBRARIES})
else()
set(PNG_LIBRARY ${libpng_LIBRARIES})
set(JPEG_LIBRARIES ${libjpeg_LIBRARIES})
endif()
ExternalProject_Add(libjpeg_static_extproj
URL https://www.ijg.org/files/jpegsrc.v9d.tar.gz
URL_HASH SHA256=99cb50e48a4556bc571dadd27931955ff458aae32f68c4d9c39d624693f69c32
BUILD_IN_SOURCE ON
EXCLUDE_FROM_ALL ON
CONFIGURE_COMMAND ${configure_command_prefix} ./configure --prefix=/usr
INSTALL_COMMAND ""
)
set(CImg_INCLUDE_DIR ${CIMG_H_DIR} CACHE STRING "")
set(CImg_INCLUDE_DIRS ${CImg_INCLUDE_DIR})
set(CImg_LIBRARIES "${PNG_LIBRARY};${JPEG_LIBRARIES}")
set(CImg_DEFINITIONS "cimg_display=0;cimg_use_png=1;cimg_use_jpeg=1")
ExternalProject_Get_property(libjpeg_static_extproj SOURCE_DIR)
add_library(libjpeg_static INTERFACE IMPORTED)
set_property(TARGET libjpeg_static PROPERTY INTERFACE_LINK_LIBRARIES ${SOURCE_DIR}/.libs/libjpeg.a)
add_dependencies(libjpeg_static libjpeg_static_extproj)
file(READ "${CIMG_H_DIR}/CImg.h" header)
string(REGEX MATCH "#define cimg_version ([0-9a-zA-Z\.]+)" _ "${header}")
set(CImg_VERSION "${CMAKE_MATCH_1}")
set(JPEG_LIBRARIES libjpeg_static)
else()
find_package(JPEG REQUIRED)
endif()
# CImg_VERSION
if(NOT USE_SYSTEM_CIMG)
message(STATUS "Using bundled CImg library")
set(CIMG_H_DIR "${PROJECT_SOURCE_DIR}/lib/CImg/")
else()
message(STATUS "Searching for CImg")
find_path(CIMG_H_DIR
NAMES CImg.h
HINTS ${CMAKE_INSTALL_PREFIX}
PATH_SUFFIXES include include/linux
)
if(NOT CIMG_H_DIR)
message(FATAL_ERROR "CImg.h not found")
if(NOT TARGET CImg)
add_library(CImg INTERFACE)
set_property(TARGET CImg PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CIMG_H_DIR};${PNG_INCLUDE_DIR};${JPEG_INCLUDE_DIR}")
set_property(TARGET CImg PROPERTY INTERFACE_LINK_LIBRARIES "${CImg_LIBRARIES}")
set_property(TARGET CImg PROPERTY INTERFACE_COMPILE_DEFINITIONS "${CImg_DEFINITIONS}")
endif()
endif()
set(PNG_INCLUDE_DIR ${libpng_INCLUDE_DIRS})
if(NOT STATIC_BUILD)
set(PNG_LIBRARY ${libpng_LIBRARIES})
else()
set(PNG_LIBRARY ${libpng_STATIC_LIBRARIES})
endif()
#message(FATAL_ERROR "${PNG_LIBRARY}")
add_library(CImg INTERFACE)
set_property(TARGET CImg PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${CIMG_H_DIR};${PNG_INCLUDE_DIR};${JPEG_INCLUDE_DIR}")
set_property(TARGET CImg PROPERTY INTERFACE_LINK_LIBRARIES "${PNG_LIBRARY};${JPEG_LIBRARIES}")
set_property(TARGET CImg PROPERTY INTERFACE_COMPILE_DEFINITIONS "cimg_display=0;cimg_use_png=1;cimg_use_jpeg=1")
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(CImg
FOUND_VAR CImg_FOUND
REQUIRED_VARS
CImg_INCLUDE_DIRS
CImg_LIBRARIES
CImg_DEFINITIONS
VERSION_VAR CImg_VERSION
)
+3
View File
@@ -38,6 +38,9 @@ namespace linuxdeploy {
// shortcut for using a normal string instead of a path
explicit AppDir(const std::string& path);
// Set additional shared library name patterns to be excluded from deployment.
void setExcludeLibraryPatterns(const std::vector<std::string> &excludeLibraryPatterns);
// creates basic directory structure of an AppDir in "FHS" mode
bool createBasicStructure() const;
@@ -11,7 +11,7 @@
namespace linuxdeploy {
namespace core {
namespace elf {
namespace elf_file {
// thrown by constructor if file is not an ELF file
class ElfFileParseError : public std::runtime_error {
public:
@@ -64,6 +64,12 @@ namespace linuxdeploy {
// return OS ABI
uint8_t getElfABI();
// check if this file is a debug symbols file
bool isDebugSymbolsFile();
// check whether the file contains a dynsym section
bool isDynamicallyLinked();
};
}
}
+2
View File
@@ -31,6 +31,8 @@ namespace linuxdeploy {
static int check_waitpid_status_(int status);
static void close_pipe_fd_(int fd);
public:
/**
* Create a child process.
+12
View File
@@ -56,6 +56,18 @@ namespace linuxdeploy {
return split(s, '\n');
}
static std::string join(const std::vector<std::string> &strings, const std::string &delimiter) {
std::string result;
for (size_t i = 0; i < strings.size(); i++) {
result += strings[i];
if (i != strings.size() - 1) {
result += delimiter;
}
}
return result;
}
static inline std::string strLower(std::string s) {
std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c) { return std::tolower(c); });
return s;
Submodule lib/CImg deleted from 631cb96120
+1 -53
View File
@@ -1,57 +1,5 @@
include(CTest)
add_library(args INTERFACE)
target_sources(args INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/args/args.hxx)
target_include_directories(args INTERFACE args)
add_subdirectory(linuxdeploy-desktopfile)
function(ld_add_boost_headeronly_lib)
set(options "")
set(oneValueArgs TARGET_NAME ROOT_DIR)
set(multiValueArgs LINK_LIBRARIES)
cmake_parse_arguments(A "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
# message(STATUS "Adding boost header-only library ${A_TARGET_NAME} in directory ${A_ROOT_DIR} with dependencies to ${A_LINK_LIBRARIES}")
add_library(${A_TARGET_NAME} INTERFACE)
set_property(TARGET ${A_TARGET_NAME} PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<BUILD_INTERFACE:${A_ROOT_DIR}/include>")
set_property(TARGET ${A_TARGET_NAME} PROPERTY INTERFACE_LINK_LIBRARIES ${A_LINK_LIBRARIES})
endfunction()
if(NOT USE_SYSTEM_BOOST)
ld_add_boost_headeronly_lib(TARGET_NAME boost_config ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost-config)
ld_add_boost_headeronly_lib(TARGET_NAME boost_throw_exception ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost-throw_exception LINK_LIBRARIES boost_throw_exception)
foreach(boost_lib_name utility predef assert core type_traits iterator mpl preprocessor static_assert detail smart_ptr exception io container_hash range integer)
ld_add_boost_headeronly_lib(TARGET_NAME boost_${boost_lib_name} ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost-${boost_lib_name} LINK_LIBRARIES boost_config;boost_throw_exception)
endforeach()
ld_add_boost_headeronly_lib(TARGET_NAME boost_functional ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/boost-utility LINK_LIBRARIES boost_config;boost_container_hash)
file(GLOB boost_system_srcs ${CMAKE_CURRENT_SOURCE_DIR}/boost-system/src/*.cpp)
add_library(boost_system STATIC ${boost_system_srcs})
target_include_directories(boost_system PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/boost-system/include)
target_link_libraries(boost_system PUBLIC
boost_config boost_predef boost_assert boost_core boost_type_traits boost_iterator boost_mpl boost_preprocessor
boost_static_assert boost_detail boost_smart_ptr boost_throw_exception boost_io boost_functional boost_range
)
file(GLOB boost_filesystem_srcs ${CMAKE_CURRENT_SOURCE_DIR}/boost-filesystem/src/*.cpp)
add_library(boost_filesystem STATIC ${boost_filesystem_srcs})
target_include_directories(boost_filesystem PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/boost-filesystem/include)
target_link_libraries(boost_filesystem PUBLIC boost_config boost_utility boost_system boost_throw_exception)
file(GLOB boost_regex_srcs ${CMAKE_CURRENT_SOURCE_DIR}/boost-regex/src/*.cpp)
add_library(boost_regex STATIC ${boost_regex_srcs})
target_include_directories(boost_regex PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/boost-regex/include)
target_link_libraries(boost_regex PUBLIC
boost_config boost_predef boost_assert boost_throw_exception boost_smart_ptr boost_core boost_mpl
boost_type_traits boost_static_assert boost_integer boost_preprocessor boost_functional boost_detail
)
endif()
if(BUILD_TESTING AND NOT TARGET gtest)
add_subdirectory(googletest)
endif()
add_subdirectory(linuxdeploy-desktopfile EXCLUDE_FROM_ALL)

Some files were not shown because too many files have changed in this diff Show More