[packages/FreeImage] - switched to maintained fork, updated to 3.19.15, use system libs (thus fixing maaaany CVEs)
qboosh
qboosh at pld-linux.org
Sun Sep 20 17:01:55 CEST 2026
commit 19176408a2df45084bf68250b794ebff1abd43ec
Author: Jakub Bogusz <qboosh at pld-linux.org>
Date: Sun Sep 20 17:02:06 2026 +0200
- switched to maintained fork, updated to 3.19.15, use system libs (thus fixing maaaany CVEs)
FreeImage-cmake-with-plus.patch | 80 +++++++++++++++++++++
FreeImage-openjp2.patch | 11 +++
FreeImage.spec | 152 ++++++++++++++++++++++++++++------------
3 files changed, 198 insertions(+), 45 deletions(-)
---
diff --git a/FreeImage.spec b/FreeImage.spec
index cd77499..c0c2af6 100644
--- a/FreeImage.spec
+++ b/FreeImage.spec
@@ -1,29 +1,60 @@
-# TODO: use system libraries (if possible):
-# libjpeg 9c
-# libpng 1.6.35
-# libtiff 4.0.9+git
-# libraw 0.19
-# openjpeg 2.1.0+svn
-# zlib 1.2.11
-# libwebp 1.0.0+git
-# LibJXR 1.1+git
-# OpenEXR 2.2.1
-%define fver %(echo %{version} | tr -d .)
+#
+# Conditional build:
+%bcond_without static_libs # static library
+
+# require at least bundled versions (except for libjpeg v9d, where we use libjpeg-turbo, which provides v8)
+%define imath_ver 3.1.12
+%define openexr_ver 3.3.13
+%define jxrlib_ver 1.1-0.2019.10.9.2
+%define libdeflate_ver 1.18
+%define libjpeg_ver 8
+%define libpng_ver 2:1.6.39
+%define libtiff_ver 4.6.0
+%define libwebp_ver 1.6.0
+%define libraw_ver 0.21.1
+%define openjp2_ver 2.5.4
+%define zlib_ver 1.3.2
+
Summary: Library for handling different graphics files formats
Summary(pl.UTF-8): Biblioteka do manipulacji różnymi formatami plików graficznych
Name: FreeImage
-Version: 3.18.0
-Release: 2
+Version: 3.19.15
+Release: 1
License: GPL and FIPL v1.0 (see the license-fi.txt)
Group: Libraries
-Source0: http://downloads.sourceforge.net/freeimage/%{name}%{fver}.zip
-# Source0-md5: f8ba138a3be233a3eed9c456e42e2578
-Source1: http://downloads.sourceforge.net/freeimage/%{name}%{fver}.pdf
+#Source0Download: https://github.com/danoli3/FreeImage/releases
+Source0: https://github.com/danoli3/FreeImage/archive/%{version}/%{name}-%{version}.tar.gz
+# Source0-md5: 00748dfb77cf611f1cf92deb9ca83b3b
+Source1: https://downloads.sourceforge.net/freeimage/%{name}3180.pdf
# Source1-md5: 01d2b93728273caec87f19949fcc4981
-URL: http://freeimage.sourceforge.net/index.html
-BuildRequires: libstdc++-devel
+Patch0: %{name}-openjp2.patch
+Patch1: %{name}-cmake-with-plus.patch
+# original project at https://freeimage.sourceforge.io/ (stopped at 3.18.0), here is maintained fork
+URL: https://github.com/danoli3/FreeImage/releases
+BuildRequires: Imath-devel >= %{imath_ver}
+BuildRequires: OpenEXR-devel >= %{openexr_ver}
+BuildRequires: jxrlib-devel >= %{jxrlib_ver}
+BuildRequires: libdeflate-devel >= %{libdeflate_ver}
+BuildRequires: libjpeg-devel >= %{libjpeg_ver}
+BuildRequires: libpng-devel >= %{libpng_ver}
+BuildRequires: libstdc++-devel >= 6:7
+BuildRequires: libtiff-devel >= %{libtiff_ver}
+BuildRequires: libwebp-devel >= %{libwebp_ver}
+BuildRequires: libraw-devel >= %{libraw_ver}
+BuildRequires: openjpeg2-devel >= %{openjp2_ver}
+BuildRequires: pkgconfig
BuildRequires: rpmbuild(macros) >= 1.752
-BuildRequires: unzip
+BuildRequires: zlib-devel >= %{zlib_ver}
+Requires: Imath >= %{imath_ver}
+Requires: OpenEXR >= %{openexr_ver}
+Requires: jxrlib >= %{jxrlib_ver}
+Requires: libdeflate >= %{libdeflate_ver}
+Requires: libjpeg >= %{libjpeg_ver}
+Requires: libpng >= %{libpng_ver}
+Requires: libtiff >= %{libtiff_ver}
+Requires: libwebp >= %{libwebp_ver}
+Requires: openjpeg2 >= %{openjp2_ver}
+Requires: zlib >= %{zlib_ver}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
%description
@@ -43,7 +74,16 @@ Summary: Header files for FreeImage library
Summary(pl.UTF-8): Pliki nagłówkowe biblioteki FreeImage
Group: Development/Libraries
Requires: %{name} = %{version}-%{release}
-Requires: libstdc++-devel
+Requires: Imath-devel >= %{imath_ver}
+Requires: OpenEXR-devel >= %{openexr_ver}
+Requires: jxrlib-devel >= %{jxrlib_ver}
+Requires: libjpeg-devel >= %{libjpeg_ver}
+Requires: libpng-devel >= %{libpng_ver}
+Requires: libstdc++-devel >= 6:7
+Requires: libtiff-devel >= %{libtiff_ver}
+Requires: libwebp-devel >= %{libwebp_ver}
+Requires: openjpeg2-devel >= %{openjp2_ver}
+Requires: zlib-devel >= %{zlib_ver}
%description devel
Header files for FreeImage library.
@@ -76,37 +116,56 @@ Documentation for FreeImage library.
Dokumentacja do biblioteki FreeImage.
%prep
-%setup -q -n %{name}
+%setup -q
+%patch -P0 -p1
+%patch -P1 -p1
%build
-CFLAGS="%{rpmcflags} -fPIC -fvisibility=hidden" \
-CXXFLAGS="%{rpmcxxflags} -fPIC -fvisibility=hidden -Wno-ctor-dtor-privacy" \
-%{__make} \
- CC="%{__cc}" \
- CXX="%{__cxx}"
-
+%if %{with static_libs}
+%cmake -B build-static \
+ -DBUILD_JXR=ON \
+ -DCMAKE_CXX_STANDARD=17 \
+ -DFREEIMAGE_STATIC=ON \
+ -DFREEIMAGE_USE_SYSTEM_LIBS=ON \
+ -DFREEIMAGE_VERSION="%{version}"
+
+%{__make} -C build-static
+%endif
+
+%cmake -B build \
+ -DBUILD_JXR=ON \
+ -DCMAKE_CXX_STANDARD=17 \
+ -DFREEIMAGE_USE_SYSTEM_LIBS=ON \
+ -DFREEIMAGE_VERSION="%{version}"
+
+%{__make} -C build
+
+%if 0
CFLAGS="%{rpmcflags} -fPIC -fvisibility=hidden" \
CXXFLAGS="%{rpmcxxflags} -fPIC -fvisibility=hidden -Wno-ctor-dtor-privacy" \
%{__make} -f Makefile.fip \
CC="%{__cc}" \
CXX="%{__cxx}"
+%endif
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT{%{_libdir},%{_includedir}}
-install -d $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
+#install -d $RPM_BUILD_ROOT{%{_libdir},%{_includedir}}
+install -d $RPM_BUILD_ROOT%{_examplesdir}
+
+#install Dist/libfreeimage* $RPM_BUILD_ROOT%{_libdir}
+#install Dist/*.h $RPM_BUILD_ROOT%{_includedir}
-install Dist/libfreeimage* $RPM_BUILD_ROOT%{_libdir}
-install Dist/*.h $RPM_BUILD_ROOT%{_includedir}
+%if %{with static_libs}
+%{__make} -C build-static install \
+ DESTDIR=$RPM_BUILD_ROOT
+%endif
-cp -rf Examples $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
-cp -f %{SOURCE1} .
+%{__make} -C build install \
+ DESTDIR=$RPM_BUILD_ROOT
-/sbin/ldconfig -n $RPM_BUILD_ROOT%{_libdir}
-ln -sf libfreeimage-%{version}.so \
- $RPM_BUILD_ROOT%{_libdir}/libfreeimage.so
-ln -sf libfreeimageplus-%{version}.so \
- $RPM_BUILD_ROOT%{_libdir}/libfreeimageplus.so
+cp -pr Examples $RPM_BUILD_ROOT%{_examplesdir}/%{name}-%{version}
+cp -p %{SOURCE1} .
%clean
rm -rf $RPM_BUILD_ROOT
@@ -117,24 +176,27 @@ rm -rf $RPM_BUILD_ROOT
%files
%defattr(644,root,root,755)
%doc README.linux README.md Whatsnew.txt license-fi.txt
-%attr(755,root,root) %{_libdir}/libfreeimage-%{version}.so
-%attr(755,root,root) %ghost %{_libdir}/libfreeimage.so.3
-%attr(755,root,root) %{_libdir}/libfreeimageplus-%{version}.so
-%attr(755,root,root) %ghost %{_libdir}/libfreeimageplus.so.3
+%{_libdir}/libfreeimage.so.*.*.*
+%ghost %{_libdir}/libfreeimage.so.3
+%{_libdir}/libfreeimageplus.so.*.*.*
+%ghost %{_libdir}/libfreeimageplus.so.3
%files devel
%defattr(644,root,root,755)
-%attr(755,root,root) %{_libdir}/libfreeimage.so
-%attr(755,root,root) %{_libdir}/libfreeimageplus.so
+%{_libdir}/libfreeimage.so
+%{_libdir}/libfreeimageplus.so
%{_includedir}/FreeImage.h
%{_includedir}/FreeImagePlus.h
+%{_libdir}/cmake/FreeImage
%{_examplesdir}/%{name}-%{version}
+%if %{with static_libs}
%files static
%defattr(644,root,root,755)
%{_libdir}/libfreeimage.a
%{_libdir}/libfreeimageplus.a
+%endif
%files apidocs
%defattr(644,root,root,755)
-%doc FreeImage%{fver}.pdf
+%doc FreeImage3180.pdf
diff --git a/FreeImage-cmake-with-plus.patch b/FreeImage-cmake-with-plus.patch
new file mode 100644
index 0000000..8f0c5c0
--- /dev/null
+++ b/FreeImage-cmake-with-plus.patch
@@ -0,0 +1,80 @@
+--- FreeImage-3.19.15/CMakeLists.txt.orig 2026-09-20 15:58:32.111396863 +0200
++++ FreeImage-3.19.15/CMakeLists.txt 2026-09-20 16:09:14.051252510 +0200
+@@ -1042,16 +1042,31 @@ if(WIN32)
+ list(APPEND FreeImage_SOURCES "${CMAKE_CURRENT_BINARY_DIR}/FreeImage.rc")
+ endif()
+
++set(FreeImagePlus_SOURCES
++ Wrapper/FreeImagePlus/src/fipImage.cpp
++ Wrapper/FreeImagePlus/src/fipMemoryIO.cpp
++ Wrapper/FreeImagePlus/src/fipMetadataFind.cpp
++ Wrapper/FreeImagePlus/src/fipMultiPage.cpp
++ Wrapper/FreeImagePlus/src/fipTag.cpp
++ Wrapper/FreeImagePlus/src/fipWinImage.cpp
++ Wrapper/FreeImagePlus/src/FreeImagePlus.cpp
++)
++
+ if(FREEIMAGE_STATIC)
+ # Define the FreeImage library
+ add_library(${PROJECT_NAME} STATIC
+ ${FreeImage_SOURCES}
+ )
++ add_library(FreeImagePlus STATIC ${FreeImagePlus_SOURCES})
+ else()
+ add_library(${PROJECT_NAME} SHARED
+ ${FreeImage_SOURCES}
+ )
++ add_library(FreeImagePlus SHARED ${FreeImagePlus_SOURCES})
+ endif()
++set_target_properties(${PROJECT_NAME} PROPERTIES VERSION ${FREEIMAGE_VERSION} SOVERSION 3 OUTPUT_NAME freeimage)
++set_target_properties(FreeImagePlus PROPERTIES VERSION ${FREEIMAGE_VERSION} SOVERSION 3 OUTPUT_NAME freeimageplus)
++target_link_libraries(FreeImagePlus ${PROJECT_NAME})
+
+ if (DEFINED FreeImage_LIBS)
+ target_link_libraries(${PROJECT_NAME} ${FreeImage_LIBS})
+@@ -1093,17 +1108,26 @@ endif ()
+ install(TARGETS ${PROJECT_NAME}
+ EXPORT ${PROJECT_NAME}Targets
+ RUNTIME DESTINATION bin
+- LIBRARY DESTINATION lib
+- ARCHIVE DESTINATION lib
++ LIBRARY DESTINATION lib${LIB_SUFFIX}
++ ARCHIVE DESTINATION lib${LIB_SUFFIX}
++ INCLUDES DESTINATION include
++)
++install(TARGETS FreeImagePlus
++ EXPORT FreeImagePlusTargets
++ RUNTIME DESTINATION bin
++ LIBRARY DESTINATION lib${LIB_SUFFIX}
++ ARCHIVE DESTINATION lib${LIB_SUFFIX}
+ INCLUDES DESTINATION include
+ )
++
+ install(FILES Source/FreeImage.h DESTINATION include)
++install(FILES Wrapper/FreeImagePlus/FreeImagePlus.h DESTINATION include)
+
+ # Install the CMake Targets
+ install(EXPORT ${PROJECT_NAME}Targets
+ FILE ${PROJECT_NAME}Targets.cmake
+ NAMESPACE ${PROJECT_NAME}::
+- DESTINATION lib/cmake/${PROJECT_NAME}
++ DESTINATION lib${LIB_SUFFIX}/cmake/${PROJECT_NAME}
+ )
+
+ # Install the CMake config
+@@ -1111,7 +1135,7 @@ include(CMakePackageConfigHelpers)
+ configure_package_config_file(
+ ${PROJECT_SOURCE_DIR}/cmake/${PROJECT_NAME}Config.cmake.in
+ ${PROJECT_NAME}Config.cmake
+- INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
++ INSTALL_DESTINATION lib${LIB_SUFFIX}/cmake/${PROJECT_NAME}
+ )
+ write_basic_package_version_file(
+ ${PROJECT_NAME}ConfigVersion.cmake
+@@ -1121,5 +1145,5 @@ write_basic_package_version_file(
+ install(FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
+- DESTINATION lib/cmake/${PROJECT_NAME}
++ DESTINATION lib${LIB_SUFFIX}/cmake/${PROJECT_NAME}
+ )
diff --git a/FreeImage-openjp2.patch b/FreeImage-openjp2.patch
new file mode 100644
index 0000000..5e0487b
--- /dev/null
+++ b/FreeImage-openjp2.patch
@@ -0,0 +1,11 @@
+Drop OPJ_STATIC which breaks linking with system openjp2
+--- FreeImage-3.19.15/CMakeLists.txt.orig 2026-09-14 09:13:38.000000000 +0200
++++ FreeImage-3.19.15/CMakeLists.txt 2026-09-20 13:26:34.037460378 +0200
+@@ -1060,7 +1060,6 @@ endif()
+ # Preprocessor definitions
+ target_compile_definitions(${PROJECT_NAME} PUBLIC
+ DISABLE_PERF_MEASUREMENT
+- OPJ_STATIC
+ NO_LCMS
+ NO_WINDOWS
+ )
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/FreeImage.git/commitdiff/19176408a2df45084bf68250b794ebff1abd43ec
More information about the pld-cvs-commit
mailing list