Skip to content

Commit 505dece

Browse files
committed
switch from custom stringFormat to fmtlib
The latter helps to avoid wrong format errors and is simpler to use. Will be replaced by std::format once C++20 becomes mandatory. Signed-off-by: Rosen Penev <rosenp@gmail.com>
1 parent d86cb01 commit 505dece

25 files changed

+135
-110
lines changed

.github/workflows/codeql-analysis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ jobs:
3737
steps:
3838
- name: Checkout repository
3939
uses: actions/checkout@v4
40-
40+
4141
- name: Install dependencies
4242
run: |
43-
sudo eatmydata apt-get -y install libexpat1-dev zlib1g-dev libbrotli-dev libinih-dev
43+
sudo eatmydata apt-get -y install libfmt-dev libexpat1-dev zlib1g-dev libbrotli-dev libinih-dev
4444
4545
# Initializes the CodeQL tools for scanning.
4646
- name: Initialize CodeQL

.github/workflows/on_PR_mac_matrix.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525

2626
- name: Install dependencies
2727
run: |
28-
brew install ninja inih googletest
28+
brew install ninja fmt inih googletest
2929
3030
- name: Build
3131
run: |

.github/workflows/on_PR_mac_special_builds.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020

2121
- name: Install dependencies
2222
run: |
23-
brew install ninja inih googletest
23+
brew install ninja fmt inih googletest
2424
2525
- name: Build
2626
run: |

.github/workflows/on_PR_meson.yaml

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ jobs:
115115
cc:p
116116
cmake:p
117117
curl:p
118+
fmt:p
118119
gtest:p
119120
libinih:p
120121
meson:p
@@ -126,6 +127,27 @@ jobs:
126127
meson setup "${{github.workspace}}/build" -Dauto_features=${{matrix.deps}} -Dwarning_level=3 -Dcpp_std=c++20
127128
meson compile -C "${{github.workspace}}/build" --verbose
128129
meson test -C "${{github.workspace}}/build" --verbose
130+
MSYS:
131+
runs-on: windows-latest
132+
defaults:
133+
run:
134+
shell: msys2 {0}
135+
steps:
136+
- uses: actions/checkout@v4
137+
- uses: msys2/setup-msys2@v2
138+
with:
139+
msystem: 'MSYS'
140+
install: >-
141+
cmake
142+
gcc
143+
meson
144+
ninja
145+
pkgconf
146+
- name: Compile and Test
147+
run: |
148+
meson setup build -Dwarning_level=3 -Dcpp_std=gnu++20
149+
meson compile -C build --verbose
150+
meson test -C build --verbose
129151
MacOS:
130152
runs-on: macos-latest
131153
name: macOS-deps=${{matrix.deps}}
@@ -141,7 +163,7 @@ jobs:
141163
142164
- name: Compile and Test
143165
run: |
144-
meson setup "${{github.workspace}}/build" -Dauto_features=${{matrix.deps}} -Dwarning_level=3 -Dnls=disabled -Db_sanitize=address,undefined
166+
meson setup "${{github.workspace}}/build" -Dauto_features=${{matrix.deps}} -Dwarning_level=3 -Dcpp_std=c++20 -Dnls=disabled -Db_sanitize=address,undefined
145167
meson compile -C "${{github.workspace}}/build" --verbose
146168
meson test -C "${{github.workspace}}/build" --verbose
147169
FreeBSD:
@@ -151,7 +173,7 @@ jobs:
151173
- uses: vmactions/freebsd-vm@v1
152174
with:
153175
prepare: |
154-
pkg install -y cmake curl ninja meson gettext pkgconf googletest expat inih brotli
176+
pkg install -y cmake curl ninja meson gettext pkgconf googletest expat inih brotli libfmt
155177
run: |
156178
meson setup "${{github.workspace}}/build" -Dwarning_level=3 -Dcpp_std=c++20
157179
meson compile -C "${{github.workspace}}/build" --verbose

.github/workflows/on_PR_windows_matrix.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ jobs:
115115
libiconv:p
116116
libinih:p
117117
zlib:p
118+
fmt:p
118119
119120
- name: Build
120121
run: |
@@ -179,6 +180,7 @@ jobs:
179180
cmake --preset base_windows \
180181
-DCMAKE_BUILD_TYPE=${{matrix.build_type}} \
181182
-DBUILD_SHARED_LIBS=${{matrix.shared_libraries}} \
183+
-DCMAKE_CXX_STANDARD=20 \
182184
-DCONAN_AUTO_INSTALL=OFF \
183185
-DEXIV2_BUILD_SAMPLES=OFF \
184186
-DEXIV2_BUILD_UNIT_TESTS=OFF \

.github/workflows/on_push_BasicWinLinMac.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ jobs:
9494

9595
- name: Install dependencies
9696
run: |
97-
brew install ninja inih googletest
97+
brew install ninja fmt inih googletest
9898
9999
- name: Build
100100
run: |

CMakeLists.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ endif()
9292

9393
include_directories(${CMAKE_BINARY_DIR}) # Make the exv_conf.h file visible for the full project
9494

95+
check_cxx_symbol_exists(__cpp_lib_format "format" HAVE_STD_FORMAT)
96+
if(NOT HAVE_STD_FORMAT)
97+
find_package(fmt REQUIRED)
98+
endif()
99+
95100
if(EXIV2_ENABLE_XMP)
96101
add_subdirectory(xmpsdk)
97102
endif()

ci/install_dependencies.sh

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,46 +41,46 @@ distro_id=$(grep '^ID=' /etc/os-release|awk -F = '{print $2}'|sed 's/\"//g')
4141

4242
case "$distro_id" in
4343
'fedora')
44-
dnf -y --refresh install gcc-c++ clang cmake ninja-build expat-devel zlib-devel brotli-devel libssh-devel libcurl-devel gmock-devel glibc-langpack-en inih-devel
44+
dnf -y --refresh install gcc-c++ clang cmake ninja-build expat-devel zlib-devel brotli-devel libssh-devel libcurl-devel gmock-devel glibc-langpack-en inih-devel fmt-devel
4545
;;
4646

4747
'debian')
4848
apt-get update
49-
apt-get install -y cmake ninja-build g++ clang libexpat1-dev zlib1g-dev libbrotli-dev libssh-dev libcurl4-openssl-dev libgmock-dev libxml2-utils libinih-dev
49+
apt-get install -y cmake ninja-build g++ clang libexpat1-dev zlib1g-dev libbrotli-dev libssh-dev libcurl4-openssl-dev libgmock-dev libxml2-utils libinih-dev libfmt-dev
5050
# debian_build_gtest
5151
;;
5252

5353
'arch')
5454
pacman --noconfirm -Syu
55-
pacman --noconfirm --needed -S gcc clang cmake ninja expat zlib brotli libssh curl gtest libinih
55+
pacman --noconfirm --needed -S gcc clang cmake ninja expat zlib brotli libssh curl gtest libinih fmt
5656
;;
5757

5858
'ubuntu')
5959
apt-get update
60-
apt-get install -y cmake ninja-build g++ clang libexpat1-dev zlib1g-dev libbrotli-dev libssh-dev libcurl4-openssl-dev libgmock-dev libxml2-utils libinih-dev
60+
apt-get install -y cmake ninja-build g++ clang libexpat1-dev zlib1g-dev libbrotli-dev libssh-dev libcurl4-openssl-dev libgmock-dev libxml2-utils libinih-dev libfmt-dev
6161
# debian_build_gtest
6262
;;
6363

6464
'alpine')
6565
apk update
66-
apk add gcc g++ clang cmake samurai expat-dev zlib-dev brotli-dev libssh-dev curl-dev gtest gtest-dev gmock libintl gettext-dev libxml2-utils inih-dev inih-inireader-dev
66+
apk add gcc g++ clang cmake samurai expat-dev zlib-dev brotli-dev libssh-dev curl-dev gtest gtest-dev gmock libintl gettext-dev libxml2-utils inih-dev inih-inireader-dev fmt-dev
6767
;;
6868

6969
'rhel')
7070
dnf clean all
71-
dnf -y install gcc-c++ clang cmake ninja-build expat-devel zlib-devel brotli-devel libssh-devel libcurl-devel inih-devel
71+
dnf -y install gcc-c++ clang cmake ninja-build expat-devel zlib-devel brotli-devel libssh-devel libcurl-devel inih-devel fmt-devel
7272
;;
7373

7474
'centos')
7575
dnf clean all
76-
dnf -y install gcc-c++ clang cmake expat-devel zlib-devel brotli-devel libssh-devel libcurl-devel git
76+
dnf -y install gcc-c++ clang cmake expat-devel zlib-devel brotli-devel libssh-devel libcurl-devel git fmt-devel
7777
dnf -y --enablerepo=crb install ninja-build meson
7878
centos_build_inih
7979
;;
8080

8181
'opensuse-tumbleweed')
8282
zypper --non-interactive refresh
83-
zypper --non-interactive install gcc-c++ clang cmake ninja libexpat-devel zlib-devel libbrotli-devel libssh-devel libcurl-devel gmock libxml2-tools libinih-devel
83+
zypper --non-interactive install gcc-c++ clang cmake ninja libexpat-devel zlib-devel libbrotli-devel libssh-devel libcurl-devel gmock libxml2-tools libinih-devel libfmt-devel
8484
;;
8585
*)
8686
echo "Sorry, no predefined dependencies for your distribution $distro_id exist yet"

cmake/FindFilesystem.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,9 @@ cmake_push_check_state()
126126
set(CMAKE_REQUIRED_QUIET ${Filesystem_FIND_QUIETLY})
127127

128128
# All of our tests required C++17 or later
129-
set(CMAKE_CXX_STANDARD 17)
129+
if (NOT CMAKE_CXX_STANDARD)
130+
set(CMAKE_CXX_STANDARD 17)
131+
endif()
130132

131133
# Normalize and check the component list we were given
132134
set(want_components ${Filesystem_FIND_COMPONENTS})

cmake/compilerFlags.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
# These flags applies to exiv2lib, the applications, and to the xmp code
22
include(CheckCXXCompilerFlag)
33

4-
set(CMAKE_CXX_STANDARD 17)
4+
if (NOT CMAKE_CXX_STANDARD)
5+
set(CMAKE_CXX_STANDARD 17)
6+
endif()
57
set(CMAKE_CXX_STANDARD_REQUIRED ON)
68
set(CMAKE_CXX_EXTENSIONS ON)
79

0 commit comments

Comments
 (0)