mingw64-filesystem/mingw64-find-debuginfo.sh

103 lines
2.5 KiB
Bash
Raw Normal View History

#!/bin/sh
#mingw64-find-debuginfo.sh - automagically generate debug info and file list
#for inclusion in an rpm spec file for mingw64-* packages.
#
# $PWD package dir below $BUILDDIR
target="mingw64"
host="x86_64-w64-mingw32"
# speed up running objdump, see bug https://bugzilla.opensuse.org/show_bug.cgi?id=1202431
export MALLOC_CHECK_=0
export MALLOC_PERTURB_=0
BUILDDIR=.
if [ -n "$1" ]; then
BUILDDIR="$1"
fi
# generate separate debuginfo and debugsource or single debug package combining both
if [ -n "$2" ]; then
SINGLE_DEBUG_PACKAGE=1
else
SINGLE_DEBUG_PACKAGE=0
fi
SOURCEFILE="$BUILDDIR/$target-debugsources.list"
> "$SOURCEFILE"
> $SOURCEFILE.tmp
srcdir=`realpath $PWD`
ROOT_DIR="/usr/$host/sys-root/mingw"
SOURCE_DIR="${ROOT_DIR}/src"
DEBUGSOURCE_DIR="${SOURCE_DIR}/debug"
for f in `find $RPM_BUILD_ROOT -type f -name "*.exe" -or -name "*.dll" | sort`
do
case $("$host-objdump" -h "$f" 2>/dev/null | egrep -o '(debug[\.a-z_]*|gnu.version)') in
*debuglink*) continue ;;
*debug*) ;;
*gnu.version*)
echo "WARNING: "`echo $f | sed -e "s,^$RPM_BUILD_ROOT/*,/,"`" is already stripped!"
continue
;;
*) continue ;;
esac
echo extracting debug info from $f
Accepting request 993386 from home:rhabacker:branches:windows:mingw:win64:debuginfofix - Update to 20220805 - Fix for generating the source file list for the debug package (boo#1201107). * Added the script 'mingw-objdump-srcfiles' to determine the source files used by the package in question. * The gawk script is based on a perl script from jengelh, which was not adopted due to an additional runtime dependency. * With this change, *.sym files are no longer included in generated debug packages. * The now obsolete runtime dependency to mingw64-cross-breakpad-tools has been removed - Exclude 'mlang.dll' from automatic runtime library detection required for win_iconv package - Fix spelling in *.changes - Add 'arch-independent-package-contains-binary-or-object' filter also for static libraries (boo#1201173) - When scanning libraries exclude non real dll file names e.g. '%s.dll' - Add missing runtime dependencies (boo#1188144) - Use newer $host-pkgconf - Fix using undefined STRINGS env variable - Update to 20220801 - Fetch real used shared library name from import libraries to avoid file name generation errors, for example with mingw64-glib2 - Scan all archives for shared library names as packages may not use the default import library extension - Fix finding qm files for KDE Frameworks >= 5.76 (taken from rpm-4.14.1) - Update to 20220620 - Add more provides required by libqt5 related packages - Add optional support for excluding runtime DLL dependencies to avoid rebuilding the whole project, see macro %_mingw64_find_requires_exclude in macros.mingw64 for details - 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 - Change all version comparisons for Tumbleweed to >= 1550 (instead of == 1550). Anything in Tumbleweed counts for current Tumbleweed plus future CODE branches. Additionally, the Tumbleweed suse_version code is not chiseled in stone. - Fix install path and file format for global rpmlint config file on openSUSE_Tumbleweed (bug boo#1190304, boo#1190438) - Use rpmlint-mini also on Leap 15.x to fix the conflict breakage - Be more verbose when version in generated xxxConfigVersion.cmake files is empty (see https://build.opensuse.org/request/show/915515) - Sync with mingw32 variant - Force rpmlint use and avoid using of rpmlint-mini - Add provides for bcrypt.dll required by mingw64-gdb 10.2 - Add provides for ncrypt.dll required by mingw64-gnutls clients - Move RPM macros to %_rpmmacrodir (boo#1185671) - Move profile.d entries to %_distconfdir - Use %_fileattrsdir macro - Update to 20201105 - Add macro _mingw64_create_macro_links - Add macro _mingw64_gdb and command line wrapper /usr/bin/mingw64-gdb - In mingw64-scripts support rpm macro processing to https://rpm.org/user_doc/macros.htm - Add macro _mingw64_gdb and command line wrapper /usr/bin/mingw64-gdb - Update to 20201017 - Fix bug not keeping quotes in bash arguments provided to mingw64-scripts.sh which is for example required to specify a different cmake generator - Fix architecture in generating cmake provides - Update to 20200825 - Fix * W: non-etc-or-var-file-marked-as-conffile /usr/libexec/rpm/fileattrs/mingw64-cmake.attr * W: non-etc-or-var-file-marked-as-conffile /usr/libexec/rpm/mingw64-cmake.prov * W: script-without-shebang /usr/libexec/rpm/fileattrs/mingw64-cmake.attr * W: non-standard-group Development/Libraries * installing mingw64-scripts on Tumbleweed * not using present rpmlint config for building this package - Add missing Fortran case into macros.mingw64* (boo#1173990) - Fix warning about non standard group (boo#1173189) - Make cmake package support to be more in sync with native package * Add mingw64-cmake.prov and mingw64-cmake.attr ported from native cmake package to support generating mingw64(cmake:xxx) dependencies required by newer KDE Frameworks 5 and other packages. * Move out cmake related macros from macros.mingw64 into macros.mingw64-cmake * Define macro _mingw64_cmake_build * Fix deprecated call to %make_jobs CMake support may be better located in a package named mingw64-cross-cmake but need to be used here until the deprecated dependency generator provided by this package is converted to sets of *.attr/*.prov files. - Add additional man languages 'id' and 'uk' used by KDE Frameworks5 packages - Process debuginfo in a reproducible way (boo#1041090) - Revert -lssp - Add -lssp to the link flags, otherwise building of some packages (like mingw64-cairo) will be aborted with the error 'undefined reference to `__memcpy_chk`'. This library seems not be added by gcc 9.2 automatically. - add macro _mingw64_ldflags_bootstrap for bootstrap packages - Add -fstack-protector to LDFLAGS - disable default debug package only if the mingw debug macro is used - inital package for Factory submission OBS-URL: https://build.opensuse.org/request/show/993386 OBS-URL: https://build.opensuse.org/package/show/windows:mingw:win64/mingw64-filesystem?expand=0&rev=143
2022-08-06 11:04:47 +00:00
# grep all listed source files belonging to this package into temporary source file list.
"$host-objdump" -Wi "$f" | "$host-objdump-srcfiles" | grep $srcdir >>"$SOURCEFILE.tmp"
"$host-objcopy" --only-keep-debug "$f" "$f.debug" || :
pushd `dirname $f`
"$host-objcopy" --add-gnu-debuglink=`basename "$f.debug"` --strip-unneeded `basename "$f"` || :
popd
done
if [ ! -e "$BUILDDIR" ]; then
mkdir -p "$BUILDDIR"
fi
find $RPM_BUILD_ROOT -type f \
-name "*.exe.debug" \
-or -name "*.dll.debug" \
-or -name "*.exe.mdb" \
-or -name "*.dll.mdb" \
| sort \
| sed -n -e "s#^$RPM_BUILD_ROOT##p" > $BUILDDIR/$target-debugfiles.list
echo creating debugsource file structure
destdir=${RPM_BUILD_ROOT}${DEBUGSOURCE_DIR}
if [ ! -e "$destdir" ]; then
install -d "$destdir"
fi
for f in `cat $SOURCEFILE.tmp | sort | uniq`
do
if ! test -f "$f"; then
echo "excluded not present file '$f"
continue
fi
o=`echo $f | sed "s,$BUILDDIR,$destdir,g"`
p=`dirname $o`
if [ ! -e "$p" ]; then
install -d "$p"
fi
echo copying $f to $o
install -m 644 $f $o
done
rm $SOURCEFILE.tmp
# add package source directory to list of files
if [ -e "$RPM_BUILD_ROOT/$DEBUGSOURCE_DIR" ]; then
echo "%dir $SOURCE_DIR" >> $SOURCEFILE
echo "$DEBUGSOURCE_DIR" >> $SOURCEFILE
fi
if test "$SINGLE_DEBUG_PACKAGE" -eq 1; then
cat $SOURCEFILE >> $BUILDDIR/$target-debugfiles.list
rm $SOURCEFILE*
fi