diff --git a/macros.mingw64 b/macros.mingw64 index 768b895..318ccb1 100644 --- a/macros.mingw64 +++ b/macros.mingw64 @@ -61,8 +61,18 @@ %_mingw64_cache mingw64-config.cache +# setup rpmbuild hooks +# +# To provide project wide import library scanning add this to project config +# Macros: +# %_mingw64_find_requires_scan_implibs 1 +# :Macros +# for a single package add +# %global _mingw64_find_requires_scan_implibs 1 +# to the related spec file +# %_mingw64_findprovides /usr/lib/rpm/mingw64-find-provides.sh -%_mingw64_findrequires /usr/lib/rpm/mingw64-find-requires.sh +%_mingw64_findrequires /usr/lib/rpm/mingw64-find-requires.sh %{?_mingw64_find_requires_scan_implibs:--scan-implibs} %_mingw64_install_post /usr/lib/rpm/mingw64-install-post.sh %_mingw64_find_lang /usr/lib/rpm/mingw64-find-lang.sh %{buildroot} diff --git a/mingw64-filesystem.changes b/mingw64-filesystem.changes index f372395..6782656 100644 --- a/mingw64-filesystem.changes +++ b/mingw64-filesystem.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Mon May 23 13:58:15 UTC 2022 - Ralf Habacker + +- Update to 20220524 +- On finding provides and requirements do not generate temporary + files in the global temporary directory (boo#1182356) +- Add optional support to add runtime dependencies for import + libraries, see macros.mingw64 for details (boo#1194430) +- Fix warning 'file format not recognized' in mingw64-find-requires.sh + when parsing xxx-config files + ------------------------------------------------------------------- Thu Dec 2 14:04:48 UTC 2021 - Dominique Leuenberger diff --git a/mingw64-filesystem.spec b/mingw64-filesystem.spec index d5482eb..62448ec 100644 --- a/mingw64-filesystem.spec +++ b/mingw64-filesystem.spec @@ -1,7 +1,7 @@ # # spec file for package mingw64-filesystem # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -31,7 +31,7 @@ %define _rpmmacrodir %{_sysconfdir}/rpm %endif Name: mingw64-filesystem -Version: 20210914 +Version: 20220524 Release: 0 Summary: MinGW base filesystem and environment License: GPL-2.0-or-later diff --git a/mingw64-find-provides.sh b/mingw64-find-provides.sh index 2a49e2b..8e6462c 100644 --- a/mingw64-find-provides.sh +++ b/mingw64-find-provides.sh @@ -11,13 +11,12 @@ fi [ -z "$OBJDUMP" ] && OBJDUMP="$host-objdump" -filelist="/tmp/$target-find-provides.$$" -sed "s/['\"]/\\\&/g" >"$filelist" +filelist=`sed "s/['\"]/\\\&/g"` -dlls=$(grep '\.dll$' "$filelist") -pcs=$(grep '\.pc$' "$filelist") -libs=$(grep '\.a$' "$filelist") -cmakes=$(grep '[cC]onfig.cmake$' "$filelist") +dlls=$(echo "$filelist" | grep '\.dll$') +pcs=$(echo "$filelist" | grep '\.pc$') +libs=$(echo "$filelist" | grep '\.a$') +cmakes=$(echo "$filelist" | grep '[cC]onfig.cmake$') for f in $dlls; do [ ! -f "$f" ] && continue @@ -39,6 +38,4 @@ done for h in $cmakes; do [ ! -f "$h" ] && continue echo $h | /usr/lib/rpm/mingw64-cmake.prov -done - -rm "$filelist" +done \ No newline at end of file diff --git a/mingw64-find-requires.sh b/mingw64-find-requires.sh index 67d773d..2c0d7a2 100644 --- a/mingw64-find-requires.sh +++ b/mingw64-find-requires.sh @@ -5,6 +5,12 @@ target="mingw64" host="x86_64-w64-mingw32" +scan_implibs= +if [ "$1" = "--scan-implibs" ]; then + scan_implibs=1 + shift +fi + if [ -n "$1" ]; then package_name="$1" fi @@ -13,8 +19,7 @@ fi # Get the list of files. -filelist="/tmp/$target-find-requires.$$" -sed "s/['\"]/\\\&/g" >"$filelist" +filelist=`sed "s/['\"]/\\\&/g"` libs_to_exclude=" advapi32 @@ -82,9 +87,9 @@ for i in $libs_to_exclude; do done -dlls=$(cat "$filelist" | xargs file | grep executable | sed 's,:.*$,,g') -pcs=$(grep '\.pc$' "$filelist") -configs=$(grep 'config$' "$filelist") +dlls=$(echo "$filelist" | grep -v 'config$' | xargs file | grep executable | sed 's,:.*$,,g') +pcs=$(echo "$filelist" | grep '\.pc$') +configs=$(echo "$filelist" | grep 'config$') for f in $dlls; do [ ! -f "$f" ] && continue @@ -94,6 +99,17 @@ for f in $dlls; do sed 's/\(.*\)/'"$target"'(\1)/' done | sort -u +if [ -n "$scan_implibs" ]; then + implibs=$(echo "$filelist" | grep '\.dll.a$') + for f in $implibs; do + [ ! -f "$f" ] && continue + "$OBJDUMP" -r "$f" | grep '_iname' | sed 's,^.*lib,lib,g;s,_iname,,g;s,_dll,.dll,g;s,_,-,g' | + tr "[:upper:]" "[:lower:]" | + grep -Ev "$exclude_pattern" | + sed 's/\(.*\)/'"$target"'(\1)/' + done | sort -u +fi + ( for g in $pcs; do dirname="${g%/*}" @@ -113,5 +129,3 @@ for k in $configs; do done done ) | sort -u - -rm "$filelist"