diff options
author | Andras Timar <andras.timar@collabora.com> | 2022-02-03 21:36:42 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2022-02-03 21:36:42 +0100 |
commit | 24478f0cd53b53bd9d6bca0c0c187e154de33585 (patch) | |
tree | bdd90a0e1bebf2476632ccf2f288084ff800c1c6 | |
parent | 336e6d9de46e65f6442c8cf80e8c077f1c50d01d (diff) |
Revert "[cp] create debuginfo packages in one round"
This reverts commit 9bf6834fa685b7b33883dfbf93d3e68ed74f1c96.
I do not understand why the debuginfo packages were not generated on
build host, while there was not problem on my local PC. Reverting now
just for this Collabora Office 21.06.15 release.
-rwxr-xr-x | bin/pack-debug | 152 | ||||
-rw-r--r-- | config_host.mk.in | 2 | ||||
-rw-r--r-- | configure.ac | 8 | ||||
-rw-r--r-- | solenv/bin/modules/installer.pm | 53 | ||||
-rw-r--r-- | solenv/bin/modules/installer/epmfile.pm | 20 | ||||
-rw-r--r-- | solenv/bin/modules/installer/splitdbg.pm | 121 |
6 files changed, 154 insertions, 202 deletions
diff --git a/bin/pack-debug b/bin/pack-debug index 70e3f80c7ed4..3e9b3fd2a6c0 100755 --- a/bin/pack-debug +++ b/bin/pack-debug @@ -107,9 +107,78 @@ cat $DEBUGSRC | awk ' rpmbuild -bb --define "_unpackaged_files_terminate_build 0" --define "_binary_payload w1T.xzdio" ${DEBUGSRC}-debugsource --target $build_cpu --buildroot=$buildroot +################################################################### +echo create rpm debug info packages by processing logged spec files +################################################################### + +for i in $BUILD_PATH/workdir/installation/CollaboraOffice/rpm/logging/*/*.spec.log +do + + # repackage only rpm packages with non-stripped so files + + if grep -q '^%attr.*[.]\(so\|bin\)\([.].*\)\?\"' $i + then + echo ================ $i ================ + pack=$(cat $i | awk '/^Name/{print$2}') + buildroot=$(cat $i | awk '/^BuildRoot/{print$2}') + topdir=$(dirname $(dirname $buildroot)) + rpmdir=$(echo $topdir | sed 's/_inprogress$//') + + # create empty buildroot directory + + rm -rf $buildroot + mkdir -p $buildroot $topdir/RPMS/BUILD $topdir/RPMS/RPMS + cd $buildroot + + echo REBUILD: $rpmdir/RPMS/${pack}-[0-9]*.rpm + + # extract rpm package + + rpm2cpio $rpmdir/RPMS/${pack}-[0-9]*.rpm | cpio -idmv + + # create stripped libraries and linked debug info files + + for j in $(cat $i | awk '/^%attr.*libpython.*[.]so.*-gdb[.]py.*?"$/{next} /^%attr.*[.](so|bin)([.].*)?"$/{print$2}') + do + so=$(echo $j | tr -d '"') + cd ./$(dirname $so) + so=$(basename $so) + objcopy --only-keep-debug $so $so.dbg + objcopy --strip-debug $so + objcopy --add-gnu-debuglink=$so.dbg $so + cd $buildroot + done + + # copy files for double package generation (using hard links) + + cp -rl $buildroot $buildroot.copy + + # stripped package + + rpmbuild -bb --define "_unpackaged_files_terminate_build 0" --define "_binary_payload w1T.xzdio" $i --target $build_cpu --buildroot=$buildroot + rm -rf $buildroot + mv $buildroot.copy $buildroot + mkdir -p $topdir/RPMS/BUILD $topdir/RPMS/RPMS + + # create spec file for the debug info package + + cat $i | awk ' + /^Name:/ { print "Summary: Debug information for package "$2; print $0"-debuginfo";next } + /^Group:/ { print $1" Development/Debug";next } + /^%attr.*libpython.*[.]so.*-gdb[.]py.*?"$/ { next } + /^%attr.*[.](so|bin)([.].*)?"$/ { print substr($0, 1, length($0) - 1)".dbg\""; next } + /^%attr/ || /^Summary:/ { next } + {print} + ' > ${i}-debuginfo + + # create debug info package + + rpmbuild -bb --define "_unpackaged_files_terminate_build 0" --define "_binary_payload w1T.xzdio" ${i}-debuginfo --target $build_cpu --buildroot=$buildroot + fi +done echo Update RPM download tar.gz -rpmdir=$(echo $topdir | sed 's/_inprogress$//') + mv $topdir/RPMS/RPMS/*/*.rpm $rpmdir/RPMS/ cd $rpmdir/.. TARGET_RPM=$(ls *_download/*.tar.gz) @@ -169,6 +238,87 @@ cat $DEBUGSRC | awk ' $BUILD_PATH/workdir/UnpackedTarball/epm/epm -f deb -g ${INSTALLDIRNAME}-debugsource ${DEBUGSRC}-debugsource --output-dir DEBS -v +###################################################################### +echo create DEB debug info packages by processing logged EPM lst files +###################################################################### + +for i in $BUILD_PATH/workdir/installation/CollaboraOffice/deb/listfile/en-US/*.lst +do + + # repackage only deb packages with non-stripped so files + + if grep -q '^f .*[.]\(so\|bin\)\([.].*\)\?$' $i + then + echo ================ $i ================ + TARGET_NAME=$INSTALLDIRNAME"$(echo $(basename $i) | awk ' + /epm_gid_Module_Optional_Firebird.lst/{print"basis-firebird"} + /epm_gid_Module_Optional_Gnome.lst/{print"basis-gnome-integration"} + /epm_gid_Module_Optional_Grfflt.lst/{print"basis-graphicfilter"} + /epm_gid_Module_Optional_Kde.lst/{print"basis-kde-integration"} + /epm_gid_Module_Optional_OGLTrans.lst/{print"basis-ogltrans"} + /epm_gid_Module_Optional_PostgresqlSdbc.lst/{print"basis-postgresql-sdbc"} + /epm_gid_Module_Pdfimport.lst/{print"basis-extension-pdf-import"} + /epm_gid_Module_Prg_Base_Bin.lst/{print"basis-base"} + /epm_gid_Module_Prg_Calc_Bin.lst/{print"basis-calc"} + /epm_gid_Module_Prg_Impress_Bin.lst/{print"basis-impress"} + /epm_gid_Module_Prg_Math_Bin.lst/{print"basis-math"} + /epm_gid_Module_Prg_Wrt_Bin.lst/{print"basis-writer"} + /epm_gid_Module_Pyuno.lst/{print"basis-pyuno"} + /epm_gid_Module_Reportbuilder.lst/{print"basis-extension-report-builder"} + /epm_gid_Module_Root_Brand.lst/{print""} + /epm_gid_Module_Root.lst/{print"basis-core"} + /epm_gid_Module_Root_Ure_Hidden.lst/{print"-ure"} + ')" + echo TARGET NAME: $TARGET_NAME + + # create stripped libraries and linked debug info files + + for j in $(cat $i | awk '/^f .*libpython.*[.]so.*-gdb[.]py.*$/{next} /^f .*[.](so|bin)([.].*)?$/{print$6}') + do + cd $(dirname $j) + so=$(basename $j) + # remove old temporary files + rm -f $so.copy $so.dbg + # keep original file + cp $so $so.copy + objcopy --only-keep-debug $so $so.dbg + objcopy --strip-debug $so + objcopy --add-gnu-debuglink=$so.dbg $so + cd $BUILD_PATH + done + + # create stripped package + + $BUILD_PATH/workdir/UnpackedTarball/epm/epm -f deb -g $TARGET_NAME $i --output-dir DEBS -v + + # create spec file for the debug info package + + cat $i | awk ' + /^%product/ { print gensub("%product", "%product Debug info package of", "", $0);next } + /^%description/ { print gensub("%description", "%description Debug info package of", "", $0);next } + /^f .*libpython.*[.]so.*-gdb[.]py.*$/ { next } + /^f .*[.](so|bin)([.].*)?$/ { print $1,$2,$3,$4,$5".dbg",$6".dbg"; next } + /^[cf] / { next } + {print} + ' > ${i}-debuginfo + + # create debug info package + $BUILD_PATH/workdir/UnpackedTarball/epm/epm -f deb -g ${TARGET_NAME}-debuginfo $i-debuginfo --output-dir DEBS -v + + # restore original non stripped library files + + for j in $(cat $i | awk '/^f .*libpython.*[.]so.*-gdb[.]py.*$/{next} /^f .*[.](so|bin)([.].*)?$/{print$6}') + do + cd $(dirname $j) + so=$(basename $j) + rm $so.dbg + # restore original file + mv -f $so.copy $so + cd $BUILD_PATH + done + fi +done + echo Update DEB download tar.gz debdir=$(ls -d $BUILD_PATH/workdir/installation/CollaboraOffice/deb/install/*_deb) diff --git a/config_host.mk.in b/config_host.mk.in index 04f950592f32..d00f868e2757 100644 --- a/config_host.mk.in +++ b/config_host.mk.in @@ -127,7 +127,6 @@ export DISABLE_CVE_TESTS=@DISABLE_CVE_TESTS@ export DISABLE_DYNLOADING=@DISABLE_DYNLOADING@ export DISABLE_OPENSSL=@DISABLE_OPENSSL@ export DISABLE_PYTHON=@DISABLE_PYTHON@ -export DISABLE_STRIP=@DISABLE_STRIP@ export DLOPEN_LIBS=@DLOPEN_LIBS@ export DLLTOOL=@DLLTOOL@ export DOCDIR=@DOCDIR@ @@ -204,7 +203,6 @@ export ENABLE_SDREMOTE_BLUETOOTH=@ENABLE_SDREMOTE_BLUETOOTH@ export ENABLE_SILENT_MSI=@ENABLE_SILENT_MSI@ export ENABLE_SKIA=@ENABLE_SKIA@ export ENABLE_SKIA_DEBUG=@ENABLE_SKIA_DEBUG@ -export ENABLE_STRIP=@ENABLE_STRIP@ export ENABLE_SYMBOLS_FOR=@ENABLE_SYMBOLS_FOR@ export ENABLE_VALGRIND=@ENABLE_VALGRIND@ export ENABLE_VLC=@ENABLE_VLC@ diff --git a/configure.ac b/configure.ac index ab51404d13ab..a0f2c857ad8d 100644 --- a/configure.ac +++ b/configure.ac @@ -4612,24 +4612,16 @@ if test -z "$enable_symbols"; then fi if test "$enable_symbols" = yes; then ENABLE_SYMBOLS_FOR=all - ENABLE_STRIP= - DISABLE_STRIP=1 AC_MSG_RESULT([yes]) elif test "$enable_symbols" = no; then ENABLE_SYMBOLS_FOR= - ENABLE_STRIP=1 - DISABLE_STRIP= AC_MSG_RESULT([no]) else # Selective debuginfo. ENABLE_SYMBOLS_FOR="$enable_symbols" - ENABLE_STRIP= - DISABLE_STRIP=1 AC_MSG_RESULT([for "$enable_symbols"]) fi AC_SUBST(ENABLE_SYMBOLS_FOR) -AC_SUBST(ENABLE_STRIP) -AC_SUBST(DISABLE_STRIP) if test -n "$with_android_ndk" -a \( -n "$ENABLE_SYMBOLS" -o -n "$ENABLE_DEBUG" -o -n "$ENABLE_DBGUTIL" \) -a "$ENABLE_DEBUGINFO_FOR" = "all"; then # Building on Android with full symbols: without enough memory the linker never finishes currently. diff --git a/solenv/bin/modules/installer.pm b/solenv/bin/modules/installer.pm index fc4996d3caf4..a4075fec5126 100644 --- a/solenv/bin/modules/installer.pm +++ b/solenv/bin/modules/installer.pm @@ -45,7 +45,6 @@ use installer::scpzipfiles; use installer::scriptitems; use installer::setupscript; use installer::simplepackage; -use installer::splitdbg qw(splitdbg_libraries); use installer::strip qw(strip_libraries); use installer::systemactions; use installer::windows::assembly; @@ -1043,7 +1042,6 @@ sub run { strip_libraries($filesinpackage, $languagestringref); } - if ( $installer::globals::simple ) { installer::worker::install_simple($onepackagename, $$languagestringref, $dirsinpackage, $filesinpackage, $linksinpackage, $unixlinksinpackage); } @@ -1055,37 +1053,16 @@ sub run { # Example for a link: l 000 root sys /usr/bin/linkname filename # The source field specifies the file to link to - # check if we have to create a debug info package - my $dbg = 0; - my $debugfilelist; - if ( !($installer::globals::strip) ) - { - $debugfilelist = splitdbg_libraries($filesinpackage, $languagestringref); - if ( $#{$debugfilelist} > -1 ) - { - $dbg = 1; - } - } - my $epmfilename = "epm_" . $onepackagename . ".lst"; - my $dbgepmfilename = "epm_" . $onepackagename . ".debug.lst"; installer::logger::print_message( "... creating epm list file $epmfilename ... \n" ); - if ($dbg) - { - installer::logger::print_message( "... creating epm list file $dbgepmfilename ... \n" ); - } my $completeepmfilename = $listfiledir . $installer::globals::separator . $epmfilename; - my $completedbgepmfilename = $listfiledir . $installer::globals::separator . $dbgepmfilename; - my @epmfile = (); - my @dbgepmfile = (); my $epmheaderref = installer::epmfile::create_epm_header($allvariableshashref, $filesinproductlanguageresolvedarrayref, $languagesarrayref, $onepackage); installer::epmfile::adding_header_to_epm_file(\@epmfile, $epmheaderref); - my $dbgepmheaderref; # adding directories, files and links into epm file @@ -1114,17 +1091,6 @@ sub run { installer::epmfile::resolve_path_in_epm_list_before_packaging(\@epmfile, $completeepmfilename, "UREPACKAGEPREFIX", $allvariableshashref->{'UREPACKAGEPREFIX'}); installer::files::save_file($completeepmfilename ,\@epmfile); - if ($dbg) - { - $onepackage->{'packagename'} .= "-debuginfo"; - $onepackage->{'description'} .= " (debug info)"; - $dbgepmheaderref = installer::epmfile::create_epm_header($allvariableshashref, $filesinproductlanguageresolvedarrayref, $languagesarrayref, $onepackage); - installer::epmfile::adding_header_to_epm_file(\@dbgepmfile, $dbgepmheaderref); - installer::epmfile::put_directories_into_epmfile($dirsinpackage, \@dbgepmfile, $allvariableshashref, $packagerootpath); - installer::epmfile::put_files_into_dbgepmfile($debugfilelist, \@dbgepmfile ); - installer::files::save_file($completedbgepmfilename ,\@dbgepmfile); - } - { # changing into the "install" directory to create installation sets @@ -1167,18 +1133,9 @@ sub run { # Install: rpm -i --prefix=/opt/special --nodeps so8m35.rpm installer::epmfile::create_new_directory_structure($newepmdir); - - # package the debug info if required - - if ($dbg) - { - installer::epmfile::call_epm($epmexecutable, $completedbgepmfilename, $packagename . "-debuginfo", $includepatharrayref); - my $newdbgepmdir = installer::epmfile::prepare_packages($loggingdir, $packagename . "-debuginfo", $staticpath, $relocatablepath, $onepackage, $allvariableshashref, $debugfilelist, $languagestringref); - installer::epmfile::create_packages_without_epm($newdbgepmdir, $packagename . "-debuginfo", $includepatharrayref, $allvariableshashref, $languagestringref); - installer::epmfile::remove_temporary_epm_files($newdbgepmdir, $loggingdir, $packagename . "-debuginfo"); - installer::epmfile::create_new_directory_structure($newdbgepmdir); - } $installer::globals::postprocess_specialepm = 1; + + # solaris patch not needed anymore } } @@ -1200,11 +1157,7 @@ sub run { installer::logger::print_message( "... starting unpatched epm ... \n" ); } - installer::epmfile::call_epm($epmexecutable, $completeepmfilename, $packagename, $includepatharrayref); - if ($dbg) - { - installer::epmfile::call_epm($epmexecutable, $completedbgepmfilename, $packagename . "-debuginfo", $includepatharrayref); - } + if ( $installer::globals::call_epm ) { installer::epmfile::call_epm($epmexecutable, $completeepmfilename, $packagename, $includepatharrayref); } if (($installer::globals::isrpmbuild) || ($installer::globals::issolarispkgbuild) || ($installer::globals::debian)) { diff --git a/solenv/bin/modules/installer/epmfile.pm b/solenv/bin/modules/installer/epmfile.pm index fc8374aa8c21..7b5a5da77198 100644 --- a/solenv/bin/modules/installer/epmfile.pm +++ b/solenv/bin/modules/installer/epmfile.pm @@ -196,26 +196,6 @@ sub put_files_into_epmfile } } -sub put_files_into_dbgepmfile -{ - my ($filesinproductarrayref, $epmfileref) = @_; - - for ( my $i = 0; $i <= $#{$filesinproductarrayref}; $i++ ) - { - my $onefile = ${$filesinproductarrayref}[$i]; - - my $unixrights = $onefile->{'UnixRights'}; - my $destination = $onefile->{'destination'} . ".dbg"; - my $sourcepath = $onefile->{'sourcepath'} . ".dbg"; - my $filetype = "f"; - my $group = "root"; - - my $line = "$filetype $unixrights root $group $destination $sourcepath\n"; - - push(@{$epmfileref}, $line); - } -} - sub put_links_into_epmfile { my ($linksinproductarrayref, $epmfileref) = @_; diff --git a/solenv/bin/modules/installer/splitdbg.pm b/solenv/bin/modules/installer/splitdbg.pm deleted file mode 100644 index cab93ee6386b..000000000000 --- a/solenv/bin/modules/installer/splitdbg.pm +++ /dev/null @@ -1,121 +0,0 @@ -# -# This file is part of the LibreOffice project. -# -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. -# - -package installer::splitdbg; - -use strict; -use warnings; - -use base 'Exporter'; - -use installer::globals; -use installer::logger; -use installer::pathanalyzer; -use installer::systemactions; - -our @EXPORT_OK = qw(splitdbg_libraries); - -sub _need_to_splitdbg -{ - my ( $filename ) = @_; - - my $splitdbg = 0; - - # Check using the "file" command - - $filename =~ s/'/'\\''/g; - open (FILE, "file '$filename' |"); - my $fileoutput = <FILE>; - close (FILE); - - if (( $fileoutput =~ /with debug_info/i ) && ( $fileoutput =~ /\bELF\b/ )) { $splitdbg = 1; } - - return $splitdbg; -} - -sub _do_splitdbg -{ - my ( $filename ) = @_; - - my $systemcall = "objcopy --only-keep-debug $filename $filename.dbg && "; - $systemcall .= "objcopy --strip-debug $filename && "; - $systemcall .= "objcopy --add-gnu-debuglink=$filename.dbg $filename"; - - my $returnvalue = system($systemcall); - - my $infoline = "Systemcall: $systemcall\n"; - push( @installer::globals::logfileinfo, $infoline); - - if ($returnvalue) - { - $infoline = "ERROR: Could not split debug info of $filename!\n"; - push( @installer::globals::logfileinfo, $infoline); - } - else - { - $infoline = "SUCCESS: Split debug info of $filename!\n"; - push( @installer::globals::logfileinfo, $infoline); - } -} - -sub splitdbg_libraries -{ - my ( $filelist, $languagestringref ) = @_; - - my @debugfilelist = (); - - installer::logger::include_header_into_logfile("Splitting debuginfo from files:"); - - my $splitdbgdirbase = installer::systemactions::create_directories("splitdbg", $languagestringref); - - if (! grep {$_ eq $splitdbgdirbase} @installer::globals::removedirs) - { - push(@installer::globals::removedirs, $splitdbgdirbase); - } - - for ( my $i = 0; $i <= $#{$filelist}; $i++ ) - { - my $sourcefilename = ${$filelist}[$i]->{'sourcepath'}; - - if ( _need_to_splitdbg($sourcefilename) ) - { - my $shortfilename = $sourcefilename; - installer::pathanalyzer::make_absolute_filename_to_relative_filename(\$shortfilename); - - my $infoline = "Split debuginfo: $shortfilename\n"; - push(@installer::globals::logfileinfo, $infoline); - - # copy file into directory for split debuginfo libraries - - my $onelanguage = ${$filelist}[$i]->{'specificlanguage'}; - - # files without language into directory "00" - - if ($onelanguage eq "") { $onelanguage = "00"; } - - my $splitdbgdir = $splitdbgdirbase . $installer::globals::separator . $onelanguage; - installer::systemactions::create_directory($splitdbgdir); # creating language specific subdirectories - - my $destfilename = $splitdbgdir . $installer::globals::separator . $shortfilename; - installer::systemactions::copy_one_file($sourcefilename, $destfilename); - - # change sourcepath in files collector - - ${$filelist}[$i]->{'sourcepath'} = $destfilename; - - # split debuginfo from file - - _do_splitdbg($destfilename); - - push(@debugfilelist, ${$filelist}[$i]); - } - } - return \@debugfilelist; -} - -1; |