# # spec file for package pkgconf # # Copyright (c) 2024 SUSE LLC # Copyright (c) 2020 Neal Gompa . # Copyright (c) 2024 Andreas Stieger # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed # upon. The license for this file, and modifications and additions to the # file, is the same license as for the pristine package itself (unless the # license for the pristine package is not an Open Source License, in which # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. # Please submit bugfixes or comments via https://bugs.opensuse.org/ # # Compatibility macros %{!?make_build: %global make_build %{__make} %{?_smp_mflags}} %{!?_rpmmacrodir: %global _rpmmacrodir %{_rpmconfigdir}/macros.d} # pkgconf acts as pkgconfig for Tumbleweed (post SUSE Linux 15) %if 0%{?suse_version} >= 1550 %bcond_without pkgconfig_compat %else %bcond_with pkgconfig_compat %endif %if %{with pkgconfig_compat} %global pkgconfig_ver 0.29.2 # For obsoleting pkgconfig, bump the ver to a number higher than latest version %global pkgconfig_obsver %{pkgconfig_ver}+1 %endif # pkgconfig platform %global pkgconf_target_platform %{_target_platform}%{?_gnu} # Search path for pc files for pkgconf %global pkgconf_libdirs %{_libdir}/pkgconfig:%{_datadir}/pkgconfig %global somajor 5 %global libname lib%{name}%{somajor} %global devname lib%{name}-devel Name: pkgconf Version: 2.2.0 Release: 1.2 Summary: Package compiler and linker metadata toolkit License: ISC Group: Development/Tools/Building URL: https://pkgconf.org/ Source0: https://distfiles.dereferenced.org/%{name}/%{name}-%{version}.tar.xz # Simple wrapper script to offer platform versions of pkgconfig from Fedora Source1: platform-pkg-config.in BuildRequires: gcc BuildRequires: make # pkgconf uses libpkgconf internally Requires: %{libname}%{?_isa} = %{version}-%{release} # This is defined within pkgconf code as a virtual pc (just like in pkgconfig) Provides: pkgconfig(pkgconf) = %{version} %description pkgconf is a program which helps to configure compiler and linker flags for development frameworks. It is similar to pkg-config from freedesktop.org and handles .pc files in a similar manner as pkg-config. %package -n %{libname} Summary: Backend library for %{name} License: ISC Group: System/Libraries %description -n %{libname} This package provides libraries for applications to use the functionality of %{name}. %package -n %{devname} Summary: Development files for lib%{name} License: ISC Group: Development/Libraries/C and C++ Requires: %{libname}%{?_isa} = %{version}-%{release} # Avoid dependency loop on itself by specifying the Provides directly Provides: pkgconfig(libpkgconf) = %{version} %description -n %{devname} This package provides files necessary for developing applications to use functionality provided by %{name}. %if %{with pkgconfig_compat} %package m4 Summary: m4 macros for pkgconf License: GPL-2.0-or-later WITH Autoconf-exception-2.0 Group: Development/Libraries/Other BuildArch: noarch # Ensure that it Conflicts and Obsoletes pkgconfig since it contains content formerly from it Conflicts: pkgconfig < %{pkgconfig_obsver} Obsoletes: pkgconfig < %{pkgconfig_obsver} %description m4 This package includes m4 macros used to support PKG_CHECK_MODULES when using pkgconf with autotools. %package pkg-config Summary: %{name} shim to provide /usr/bin/pkg-config # Ensure that it Conflicts with pkg-config and is considered "better" License: ISC Group: Development/Tools/Building Conflicts: pkg-config < %{pkgconfig_obsver} Obsoletes: pkg-config < %{pkgconfig_obsver} Provides: pkg-config = %{pkgconfig_obsver} Provides: pkg-config%{?_isa} = %{pkgconfig_obsver} # This is in the original pkgconfig package, set to match output from pkgconf Provides: pkgconfig(pkg-config) = %{version} # Fedora/Mageia pkgconfig Provides for those who might use alternate package name Provides: pkgconfig = %{pkgconfig_obsver} Provides: pkgconfig%{?_isa} = %{pkgconfig_obsver} Requires: %{name}%{?_isa} = %{version}-%{release} Requires: %{name}-m4 = %{version}-%{release} %description pkg-config This package provides the shim links for pkgconf to be automatically used in place of pkgconfig. This ensures that pkgconf is used as the system provider of pkg-config. %endif %prep %autosetup -p1 %build %configure --disable-static \ --with-pkg-config-dir=%{pkgconf_libdirs} \ --with-system-includedir=%{_includedir} \ --with-system-libdir=%{_libdir} %make_build %install %make_install find %{buildroot} -type f -name "*.la" -delete -print mkdir -p %{buildroot}%{_sysconfdir}/pkgconfig/personality.d mkdir -p %{buildroot}%{_datadir}/pkgconfig/personality.d # pkgconf rpm macros mkdir -p %{buildroot}%{_rpmmacrodir}/ cat > %{buildroot}%{_rpmmacrodir}/macros.pkgconf < %{buildroot}%{_mandir}/man1/pkg-config.1 mkdir -p %{buildroot}%{_libdir}/pkgconfig mkdir -p %{buildroot}%{_datadir}/pkgconfig %endif # If we're not providing pkgconfig override & compat # we should not provide the pkgconfig m4 macros %if ! %{with pkgconfig_compat} rm -rf %{buildroot}%{_datadir}/aclocal rm -rf %{buildroot}%{_mandir}/man7 %endif %ldconfig_scriptlets -n %{libname} %files %license COPYING %doc README.md AUTHORS NEWS %{_bindir}/%{name} %{_bindir}/bomtool %{_mandir}/man1/%{name}.1* %{_mandir}/man5/pc.5* %{_mandir}/man5/%{name}-personality.5* %{_rpmmacrodir}/macros.pkgconf %dir %{_sysconfdir}/pkgconfig %dir %{_sysconfdir}/pkgconfig/personality.d %dir %{_datadir}/pkgconfig/personality.d %files -n %{libname} %license COPYING %{_libdir}/lib%{name}*.so.%{somajor} %{_libdir}/lib%{name}*.so.%{somajor}.* %files -n %{devname} %license COPYING %{_libdir}/lib%{name}*.so %{_includedir}/%{name}/ %{_libdir}/pkgconfig/lib%{name}.pc %if %{with pkgconfig_compat} %files m4 %license COPYING %dir %{_datadir}/aclocal %{_datadir}/aclocal/pkg.m4 %{_mandir}/man7/pkg.m4.7%{?ext_man} %files pkg-config %license COPYING %{_bindir}/pkg-config %{_bindir}/%{pkgconf_target_platform}-pkg-config %{_mandir}/man1/pkg-config.1%{?ext_man} %endif %changelog * Sat May 25 2024 Andreas Stieger - update to 2.2.0: * Significant solver rework to flatten both requires and requires.private dependencies in a single pass. Improves performance slightly and ensures proper dependency order. * Improve --digraph output to reflect more of the solver's state in the rendered dependency graph. * Do not reference the graph root by name when presenting error messages about directly requested dependency nodes. * Mon Feb 12 2024 Andreas Stieger - update to 2.1.1: * Fix --modversion with constraints * Reintroduce an optimization to the dependency graph walker which avoids revisiting already visited nodes * Add a regression test to check that the dependency flattener is working as expected * Mon Dec 18 2023 Andreas Stieger - update to 2.1.0: * new solver for higher performance with complicated graphs * Add --license selector to the pkgconf CLI * Add flag --verbose and --solution to CLI * Changes and fixes to --modversion * bug fixes and developer visible changes - drop pkgconf-CVE-2023-24056.patch, now included * Sun Jan 29 2023 Cliff Zhao - Add pkgconf-CVE-2023-24056.patch: Backport commit 628b2b2baf from upstream, test for, and stop string processing, on truncation (bsc#1207394 CVE-2023-24056). * Mon Aug 23 2021 Callum Farmer - Update to version 1.8.0: + Fix a minor memory leak relating to cross-personalities + Fix some edge cases with --redefine-prefix + Do not prepend sysroot_dir if the .pc file does not exist in the sysroot + Do not perform path filtering on default system include and library path lists. * Wed Jun 30 2021 Callum Farmer - Update to 1.7.4 + Add PKG_CONFIG_DONT_DEFINE_PREFIX environment variable + Handle platforms where realpath(3) requires a pre-allocated buffer + Fix null-dereference crash when pulling a malformed 'uninstalled' .pc file into a dependency tree. * Wed Apr 7 2021 Dirk Müller - do not own directories provided by filesystem - small cleanups inspired by spec-cleaner * Mon Aug 10 2020 Neal Gompa - Add /usr/local paths to pkg-config(1) search path for non RPM builds (boo#1175039) * Mon Jun 15 2020 Callum Farmer - Update to 1.7.3 - Bug fixes: + Fix a possible out of boundary write when evaluating dependencies. Patch by Tobias Stöckmann. + Fix escaping logic on Windows. Patch by Vincent Torri. + Fix out of boundary reads and writes with a malformed fragment. Patches by Tobias Stöckmann. + Fix a possible out of boundary write when evaluating tuples. Patch by Tobias Stöckmann. + Fix a windows-specific crash relating to path fixups. + Fix a possible out of boundary access in the parser for the cross-compile database. Patch by Tobias Stöckmann. + Missing files for building with Meson are now included in the tarball. Patch by Neal Gompa. + Fix calculation of package atoms on Windows with paths that use both directory separator characters. + Fix a possible buffer overflow involving newline escaping. Patch by Tobias Stöckmann. + Fix an out of boundary access in the parser. Patch by Tobias Stöckmann. + Fix leakage of strcmp() result value in pkgconf_compare_version() responses. + Return the default personality if loading a cross-compile personality file failed. + Do not complain about newlines when validating package versions. + Properly detect strndup() on Windows when building with Meson. - Enhancements: + A new --shared option and WantDefaultStatic cross-compile configuration option have been added. This allows for toolchains to specify that static linking should be used by default. + Support for the PKG_CONFIG_MSVC_SYNTAX environment variable has been added. Patch by Dan Kegel. + Support for the PKGCONF_PKG_PKGF_DONT_MERGE_SPECIAL_FRAGMENTS client flag which disables emulation of freedesktop.org pkg-config fragment merging semantics has been added. Patch by Karen Arutyunov. * Mon Aug 12 2019 Neal Gompa - Update to 1.6.3 + Fixed a memory leak when deduplicating paths. + Fixed strndup-related build regression on Windows. + Added --modversion description to pkgconf(1) man page. + Properly tokenize versions. Versions cannot logically contain whitespace, as dependency-lists would not properly tokenize if they could. A diagnostic is generated for malformed version strings containing whitespace when --validate is used. * Fri Aug 9 2019 Neal Gompa - Co-own aclocal directory to avoid requiring autoconf-archive * Mon Aug 5 2019 Neal Gompa - Add missing -gnu ABI suffix to platform names in pkgconf-pkg-config (boo#1144318) * Mon Jul 15 2019 Neal Gompa - Fix license tag for pkgconf-m4 * Mon Jul 15 2019 Neal Gompa - Set pkgconf to provide pkgconfig on Tumbleweed (post SUSE Linux 15) * Wed May 1 2019 Neal Gompa - Update to 1.6.1 + Fixed an issue where a personality may not be properly selected due to argv[0] containing a full path. + Fixed a regression where having an empty PKG_CONFIG_LIBDIR environment variable would not eliminate the default search paths. + Use POSIX realpath(3) instead of readlink() for deduplicating the search path. Use _fullpath() on Windows for the same purpose. + The dequoting logic for tuples has been improved to ensure that quotes *inside* a value remain quoted when necessary. + Fixed issue where packages which referenced missing packages in Requires.private may have crashed due to memory corruption issues in some circumstances. + Fixed warnings reported by GCC 8 diagnostics. + Add LIBPKGCONF_VERSION and LIBPKGCONF_VERSION_STR macros for determining libpkgconf version. + Add pkgconf_fragment_copy_list() to copy a fragment list to another fragment list. + Fix edge cases for path canonicalization (especially on Windows) - Add personality.d directories for cross-targets - Add pkgconf rpm macros for pkgconf directories - Simplify platform-pkg-config wrapper to work with POSIX sh * Tue Aug 21 2018 Neal Gompa - Update to 1.5.3 + Fix edge cases involving dequoting zero-length tuples that can lead to a buffer overflow under the right circumstances. Thanks to A. Wilcox for reporting and supplying a patch. (boo#1105438 - CVE-2018-1000221) + Ensure environment variables override values learned from personality files or built-in defaults. + Add pkgconf-personality(5) manpage documenting the personality file format. - Drop BR pkgconfig and manually specified pkgconfig() Provides for devel subpackage to avoid dependency loops. * Wed Jun 20 2018 Karol Babioch - Update to version 1.5.1 - fixed a crash with some invalid multi-line .pc files - Update to version 1.5.0 - pkgconf now supports the proposed Requires.internal pkg-config extension, by merging it with the Requires.private list (there is no functional difference between the two in our resolver implementation) - Support for cross-compilation personalities have been added. To make use of this functionality, create a file in the new personality.d directory that sits inside the pkgconfig directory. The personality file format is described in pc-personality(5). - Support for Haiku has been added, including interpretation of BELIBRARIES and other toolchain specifics. - tuples are now appropriately dequoted when added by the parser - Applied spec-cleaner * Sun May 20 2018 Neal Gompa - Add BR pkgconfig to generate pkgconfig() deps * Sun May 20 2018 Neal Gompa - Update to 1.4.2 + Bug fixes - ensure pkgconf_dependency_t nodes have a solution marked when satisfied by an indirect provider (gh#pkgconf/pkgconf#172) - revert some quoting changes because they don't work well with certain GCC edge cases (gh#pkgconf/pkgconf#168) * Mon Feb 19 2018 Neal Gompa - Initial packaging based on Fedora and Mageia packaging