Skip to content

Commit 72b4917

Browse files
authored
Build support + address sanitizer check (#117)
* fix building with exiv2 >= 0.28.0 * add nix-shell build environments * add function to print out available sdl rendering drivers * add error checking when creating sdl window * cleanup * fix memory leak in resource::LoadIcon * update exiv2 to 0.28.1 * update nfde to 1.1.1 * fix clang tidy * update catch2 to 3.5.0 * use cmake find_package config mode everywhere for consistency
1 parent b25edd0 commit 72b4917

20 files changed

+167
-80
lines changed

.github/workflows/clang-tidy-check.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ permissions:
1717

1818
env:
1919
BUILD_TYPE: Release
20-
CATCH_VERSION: "v3.4.0"
21-
EXIV2_VERSION: "v0.28.0"
20+
CATCH_VERSION: "v3.5.0"
21+
EXIV2_VERSION: "v0.28.1"
2222

2323
jobs:
2424
clang-tidy-check:
@@ -74,8 +74,8 @@ jobs:
7474
-DCMAKE_INSTALL_PREFIX=install \
7575
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
7676
-DBUILD_TESTING=ON \
77-
-DCatch2_DIR=../catch/install/lib/cmake/Catch2 \
78-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2
77+
-DCatch2_ROOT=`pwd`/catch/install \
78+
-Dexiv2_ROOT=`pwd`/exiv2/install
7979
8080
- name: Run clang-tidy
8181
run: |

.github/workflows/test.yml

+16-16
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ env:
1414
BUILD_TYPE: Release
1515
SDL_VERSION: "release-2.28.5"
1616
OPENCV_VERSION: "4.8.1"
17-
CATCH_VERSION: "v3.4.0"
17+
CATCH_VERSION: "v3.5.0"
1818
SPDLOG_VERSION: "v1.12.0"
19-
EXIV2_VERSION: "v0.28.0"
19+
EXIV2_VERSION: "v0.28.1"
2020
GENERATOR: "Ninja Multi-Config"
2121

2222
jobs:
@@ -150,12 +150,12 @@ jobs:
150150
-DXPANO_STATIC_VCRT=ON `
151151
-DCMAKE_INSTALL_PREFIX=install `
152152
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
153-
-DSDL2_DIR="${cwd}/sdl/install/cmake" `
153+
-DSDL2_ROOT="${cwd}/sdl/install" `
154154
-DOpenCV_STATIC=ON `
155-
-DOpenCV_DIR="${cwd}/opencv/install" `
156-
-Dspdlog_DIR="${cwd}/spdlog/build/install/lib/cmake/spdlog" `
157-
-DCatch2_DIR="${cwd}/catch/install/lib/cmake/Catch2" `
158-
-Dexiv2_DIR="${cwd}/exiv2/install/lib/cmake/exiv2"
155+
-DOpenCV_ROOT="${cwd}/opencv/install" `
156+
-Dspdlog_ROOT="${cwd}/spdlog/build/install" `
157+
-DCatch2_ROOT="${cwd}/catch/install" `
158+
-Dexiv2_ROOT="${cwd}/exiv2/install"
159159
160160
- name: Build
161161
run: cmake --build build --config $env:BUILD_TYPE --target install
@@ -220,8 +220,8 @@ jobs:
220220
-DCMAKE_INSTALL_PREFIX=install \
221221
-DBUILD_TESTING=ON \
222222
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
223-
-DCatch2_DIR=../catch/install/lib/cmake/Catch2 \
224-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2
223+
-DCatch2_ROOT=`pwd`/catch/install \
224+
-Dexiv2_ROOT=`pwd`/exiv2/install
225225
226226
- name: Build
227227
run: cmake --build build -j $(nproc) --target install
@@ -361,11 +361,11 @@ jobs:
361361
-DCMAKE_INSTALL_PREFIX=install \
362362
-DBUILD_TESTING=ON \
363363
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
364-
-DCatch2_DIR=../catch/install/lib/cmake/Catch2 \
365-
-DOpenCV_DIR=opencv/install/lib/cmake/opencv4 \
366-
-DSDL2_DIR=SDL/install/lib/cmake/SDL2 \
367-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2 \
368-
-Dspdlog_DIR=`pwd`/spdlog/build/install/lib/cmake/spdlog
364+
-DCatch2_ROOT=`pwd`/catch/install \
365+
-DOpenCV_ROOT=`pwd`/opencv/install \
366+
-DSDL2_ROOT=`pwd`/SDL/install \
367+
-Dexiv2_ROOT=`pwd`/exiv2/install \
368+
-Dspdlog_ROOT=`pwd`/spdlog/build/install
369369
370370
- name: Build
371371
run: cmake --build build -j $(nproc) --target install
@@ -433,8 +433,8 @@ jobs:
433433
-DCMAKE_INSTALL_PREFIX=install \
434434
-DBUILD_TESTING=ON \
435435
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
436-
-DOpenCV_DIR=opencv/install/lib/cmake/opencv4 \
437-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2
436+
-DOpenCV_ROOT=opencv/install \
437+
-Dexiv2_ROOT=exiv2/install
438438
439439
- name: Build
440440
run: cmake --build build -j $(nproc) --target install

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,4 @@ CMakeSettings.json
1616
_site
1717
exiv2/
1818
Xpano.app
19+
.cache

CMakeLists.txt

+15-7
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,20 @@ if (WIN32)
8383
list(APPEND XPANO_SOURCES "xpano/cli/windows_console.cc")
8484
endif()
8585

86-
find_package(SDL2 REQUIRED)
87-
find_package(OpenCV REQUIRED COMPONENTS calib3d core features2d flann imgcodecs imgproc photo stitching)
88-
find_package(spdlog REQUIRED)
89-
find_package(exiv2 0.28.0 QUIET)
86+
find_package(SDL2 REQUIRED CONFIG)
87+
find_package(OpenCV REQUIRED COMPONENTS calib3d core features2d flann imgcodecs imgproc photo stitching CONFIG)
88+
find_package(spdlog REQUIRED CONFIG)
89+
find_package(exiv2 CONFIG)
9090

9191
if (exiv2_FOUND)
92+
if (exiv2_VERSION VERSION_GREATER_EQUAL "0.28.1")
93+
set(exiv-library Exiv2::exiv2lib)
94+
elseif(exiv2_VERSION VERSION_GREATER_EQUAL "0.28.0")
95+
set(exiv-library exiv2lib)
96+
endif()
97+
endif()
98+
99+
if (exiv-library)
92100
message(STATUS "Building with exiv2 version ${exiv2_VERSION}")
93101
else()
94102
message(STATUS "Building without exiv2 support")
@@ -136,9 +144,9 @@ target_link_libraries(Xpano
136144
spdlog::spdlog
137145
)
138146

139-
if(exiv2_FOUND)
147+
if (exiv-library)
140148
target_compile_definitions(Xpano PRIVATE XPANO_WITH_EXIV2)
141-
target_link_libraries(Xpano exiv2lib)
149+
target_link_libraries(Xpano ${exiv-library})
142150
endif()
143151

144152
if(XPANO_WITH_MULTIBLEND)
@@ -245,7 +253,7 @@ install(FILES
245253
RENAME "opencv-license.txt"
246254
OPTIONAL
247255
)
248-
if (exiv2_FOUND)
256+
if (exiv-library)
249257
install(FILES
250258
"misc/build/exiv2-notice.txt"
251259
DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses"

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ The project can be built by running a single script from the `misc/build` direct
5353
Run the build script from the root of the repository:
5454

5555
```
56+
nix-shell misc/build/nix/default.nix
5657
./misc/build/build-nixos.sh
5758
```
5859

misc/build/build-bullseye.sh

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
export BUILD_TYPE='Release'
22
export SDL_VERSION='release-2.28.5'
33
# export OPENCV_VERSION='4.8.1'
4-
export CATCH_VERSION='v3.4.0'
4+
export CATCH_VERSION='v3.5.0'
55
export SPDLOG_VERSION='v1.12.0'
6-
export EXIV2_VERSION='v0.28.0'
6+
export EXIV2_VERSION='v0.28.1'
77
# export GENERATOR='Ninja Multi-Config'
88

99
git submodule update --init
@@ -50,10 +50,10 @@ cmake -B build \
5050
-DCMAKE_INSTALL_PREFIX=install \
5151
-DBUILD_TESTING=ON \
5252
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
53-
-DCatch2_DIR=../catch/install/lib/cmake/Catch2 \
54-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2 \
55-
-Dspdlog_DIR=`pwd`/spdlog/build/install/lib/cmake/spdlog \
56-
-DSDL2_DIR=SDL/install/lib/cmake/SDL2
53+
-DCatch2_ROOT=`pwd`/catch/install \
54+
-Dexiv2_ROOT=`pwd`/exiv2/install \
55+
-Dspdlog_ROOT=`pwd`/spdlog/build/install \
56+
-DSDL2_ROOT=`pwd`/SDL/install
5757

5858
cmake --build build -j $(nproc) --target install
5959
cd build

misc/build/build-macos-12.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
export BUILD_TYPE='Release'
44
export SDL_VERSION='release-2.28.5'
55
export OPENCV_VERSION='4.8.1'
6-
export CATCH_VERSION='v3.4.0'
6+
export CATCH_VERSION='v3.5.0'
77
export SPDLOG_VERSION='v1.12.0'
8-
export EXIV2_VERSION='v0.28.0'
8+
export EXIV2_VERSION='v0.28.1'
99
export GENERATOR='Ninja Multi-Config'
1010

1111
git submodule update --init
@@ -35,8 +35,8 @@ cmake -B build \
3535
-DCMAKE_INSTALL_PREFIX=install \
3636
-DBUILD_TESTING=ON \
3737
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
38-
-DOpenCV_DIR=opencv/install/lib/cmake/opencv4 \
39-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2
38+
-DOpenCV_ROOT=opencv/install \
39+
-Dexiv2_ROOT=exiv2/install
4040

4141
cmake --build build -j $(nproc) --target install
4242
cd build

misc/build/build-nixos.sh

+2-14
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,15 @@
1-
#!/usr/bin/env nix-shell
2-
#! nix-shell -i bash
3-
#! nix-shell -p git cmake ninja pkg-config gcc13 opencv SDL2 gtk3 catch2_3 spdlog
1+
#!/usr/bin/env bash
42

53
git submodule update --init
64

75
export BUILD_TYPE='Release'
8-
export EXIV2_VERSION='v0.28.0'
9-
10-
git clone https://github.com/Exiv2/exiv2.git --depth 1 --branch $EXIV2_VERSION
11-
cd exiv2
12-
cmake -B build -G Ninja \
13-
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
14-
-DCMAKE_INSTALL_PREFIX=install \
15-
`cat ../misc/build/exiv2-minimal-flags.txt`
16-
cmake --build build --target install
17-
cd ..
186

197
cmake -B build -G Ninja \
208
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
219
-DCMAKE_INSTALL_PREFIX=install \
2210
-DBUILD_TESTING=ON \
2311
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
24-
-Dexiv2_DIR=exiv2/install/lib64/cmake/exiv2
12+
-DNFD_PORTAL=ON
2513

2614
cmake --build build --target install
2715

misc/build/build-ubuntu-20.sh

+7-7
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
export BUILD_TYPE='Release'
44
export SDL_VERSION='release-2.28.5'
55
export OPENCV_VERSION='4.8.1'
6-
export CATCH_VERSION='v3.4.0'
6+
export CATCH_VERSION='v3.5.0'
77
export SPDLOG_VERSION='v1.12.0'
8-
export EXIV2_VERSION='v0.28.0'
8+
export EXIV2_VERSION='v0.28.1'
99
export GENERATOR='Ninja Multi-Config'
1010

1111
git submodule update --init
@@ -76,11 +76,11 @@ cmake -B build \
7676
-DCMAKE_INSTALL_PREFIX=install \
7777
-DBUILD_TESTING=ON \
7878
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
79-
-DCatch2_DIR=../catch/install/lib/cmake/Catch2 \
80-
-DOpenCV_DIR=opencv/install/lib/cmake/opencv4 \
81-
-DSDL2_DIR=SDL/install/lib/cmake/SDL2 \
82-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2 \
83-
-Dspdlog_DIR=`pwd`/spdlog/build/install/lib/cmake/spdlog
79+
-DCatch2_ROOT=`pwd`/catch/install \
80+
-DOpenCV_ROOT=`pwd`/opencv/install \
81+
-DSDL2_ROOT=`pwd`/SDL/install \
82+
-Dexiv2_ROOT=`pwd`/exiv2/install \
83+
-Dspdlog_ROOT=`pwd`/spdlog/build/install
8484

8585
cmake --build build -j $(nproc) --target install
8686
cd build

misc/build/build-ubuntu-22.sh

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
export BUILD_TYPE='Release'
44
export SDL_VERSION='release-2.28.5'
55
export OPENCV_VERSION='4.8.1'
6-
export CATCH_VERSION='v3.4.0'
6+
export CATCH_VERSION='v3.5.0'
77
export SPDLOG_VERSION='v1.12.0'
8-
export EXIV2_VERSION='v0.28.0'
8+
export EXIV2_VERSION='v0.28.1'
99
export GENERATOR='Ninja Multi-Config'
1010

1111
git submodule update --init
@@ -33,8 +33,8 @@ cmake -B build \
3333
-DCMAKE_INSTALL_PREFIX=install \
3434
-DBUILD_TESTING=ON \
3535
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
36-
-DCatch2_DIR=../catch/install/lib/cmake/Catch2 \
37-
-Dexiv2_DIR=exiv2/install/lib/cmake/exiv2
36+
-DCatch2_ROOT=`pwd`/catch/install \
37+
-Dexiv2_ROOT=`pwd`/exiv2/install
3838

3939
cmake --build build -j $(nproc) --target install
4040
cd build

misc/build/build-windows-latest.ps1

+7-7
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
$env:BUILD_TYPE = 'Release'
44
$env:SDL_VERSION = 'release-2.28.5'
55
$env:OPENCV_VERSION = '4.8.1'
6-
$env:CATCH_VERSION = 'v3.4.0'
6+
$env:CATCH_VERSION = 'v3.5.0'
77
$env:SPDLOG_VERSION = 'v1.12.0'
8-
$env:EXIV2_VERSION = 'v0.28.0'
8+
$env:EXIV2_VERSION = 'v0.28.1'
99
$env:GENERATOR = 'Ninja Multi-Config'
1010

1111
git submodule update --init
@@ -74,12 +74,12 @@ cmake -B build -G "$env:GENERATOR" `
7474
-DXPANO_STATIC_VCRT=ON `
7575
-DCMAKE_INSTALL_PREFIX=install `
7676
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON `
77-
-DSDL2_DIR="${cwd}/sdl/install/cmake" `
77+
-DSDL2_ROOT="${cwd}/sdl/install" `
7878
-DOpenCV_STATIC=ON `
79-
-DOpenCV_DIR="${cwd}/opencv/install" `
80-
-Dspdlog_DIR="${cwd}/spdlog/build/install/lib/cmake/spdlog" `
81-
-DCatch2_DIR="${cwd}/catch/install/lib/cmake/Catch2" `
82-
-Dexiv2_DIR="${cwd}/exiv2/install/lib/cmake/exiv2"
79+
-DOpenCV_ROOT="${cwd}/opencv/install" `
80+
-Dspdlog_ROOT="${cwd}/spdlog/build/install" `
81+
-DCatch2_ROOT="${cwd}/catch/install" `
82+
-Dexiv2_ROOT="${cwd}/exiv2/install"
8383

8484
cmake --build build --config $env:BUILD_TYPE --target install
8585
cd build

misc/build/nix/asan.nix

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{ pkgs ? import
2+
(builtins.fetchTarball {
3+
name = "nixos-tapir-2023-12-29";
4+
url = "https://github.com/nixos/nixpkgs/archive/d02d818f22c777aa4e854efc3242ec451e5d462a.tar.gz";
5+
sha256 = "1r6ma7lmi4x5pcxi84fbils1xgnpmmkzi7dd75zhqvg1sds3z47z";
6+
})
7+
{ }
8+
}:
9+
10+
let
11+
asanEnv = pkgs.withCFlags [
12+
"-g"
13+
"-fsanitize=address"
14+
"-fno-omit-frame-pointer"
15+
"-Wno-error=maybe-uninitialized"
16+
]
17+
pkgs.gcc12Stdenv;
18+
addAsanEnv = pkg: pkg.override { stdenv = asanEnv; };
19+
in
20+
21+
asanEnv.mkDerivation {
22+
name = "asan-environment-xpano";
23+
24+
buildInputs = with pkgs; ([
25+
cmake
26+
ninja
27+
pkg-config
28+
(python3.withPackages (pkgs: with pkgs; [ pyyaml ]))
29+
] ++ (map addAsanEnv [
30+
opencv
31+
SDL2
32+
catch2_3
33+
spdlog
34+
exiv2
35+
dbus
36+
]));
37+
}

misc/build/nix/default.nix

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{ pkgs ? import <nixpkgs> { }
2+
}:
3+
4+
pkgs.mkShell {
5+
buildInputs = with pkgs; [
6+
cmake
7+
ninja
8+
pkg-config
9+
opencv
10+
SDL2
11+
catch2_3
12+
spdlog
13+
exiv2
14+
dbus
15+
(python3.withPackages (pkgs: with pkgs; [ pyyaml ]))
16+
];
17+
}

tests/CMakeLists.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
cmake_minimum_required(VERSION 3.15)
1+
cmake_minimum_required(VERSION 3.21)
22

3-
find_package(Catch2 REQUIRED)
3+
find_package(Catch2 REQUIRED CONFIG)
44
include(Catch)
55
include("${CMAKE_SOURCE_DIR}/misc/cmake/utils.cmake")
66

@@ -40,9 +40,9 @@ target_link_libraries(StitcherTest
4040
spdlog::spdlog
4141
)
4242

43-
if(exiv2_FOUND)
43+
if (exiv-library)
4444
target_compile_definitions(StitcherTest PRIVATE XPANO_WITH_EXIV2)
45-
target_link_libraries(StitcherTest exiv2lib)
45+
target_link_libraries(StitcherTest ${exiv-library})
4646
endif()
4747

4848
if(XPANO_WITH_MULTIBLEND)

0 commit comments

Comments
 (0)