Bug #289967 - Update installsources rsync code for >=debugedit-4.4.6-r2.
authorZac Medico <zmedico@gentoo.org>
Sat, 24 Oct 2009 07:05:33 +0000 (07:05 -0000)
committerZac Medico <zmedico@gentoo.org>
Sat, 24 Oct 2009 07:05:33 +0000 (07:05 -0000)
Thanks to Peter Alfredsen <loki_val@g.o> for this patch. (trunk r14706)

svn path=/main/branches/2.1.7/; revision=14715

bin/ebuild-helpers/prepstrip

index 98308ae9065b58143e5abb80b40bfe08118b59fb..0f97ca05a64e02063cb1112c2e26b41b5f3532f6 100755 (executable)
@@ -24,6 +24,7 @@ type -P -- ${OBJCOPY} > /dev/null || OBJCOPY=objcopy
 # of the section when it has the ALLOC flag set on it ...
 export SAFE_STRIP_FLAGS="--strip-unneeded"
 export PORTAGE_STRIP_FLAGS=${PORTAGE_STRIP_FLAGS-${SAFE_STRIP_FLAGS} -R .comment}
+prepstrip_sources_dir=/usr/src/debug/${CATEGORY}/${PF}
 
 if hasq installsources ${FEATURES} && ! type -P debugedit >/dev/null ; then
        ewarn "FEATURES=installsources is enabled but the debugedit binary could not"
@@ -48,17 +49,10 @@ save_elf_sources() {
        local x=$1
        local inode=$(inode_var_name "$x")
        [[ -n ${!inode} ]] && return 0
-       local sources_dir=/usr/src/debug/${CATEGORY}/${PF}
-       debugedit -b "${WORKDIR}" -d "${sources_dir}" \
+       debugedit -b "${WORKDIR}" -d "${prepstrip_sources_dir}" \
                -l "${T}"/debug.sources "${x}"
-       if [[ -s ${T}/debug.sources ]] ; then 
-               [[ -d ${D}${sources_dir} ]] || mkdir -p "${D}${sources_dir}"
-               grep -zv '/<built-in>$' "${T}"/debug.sources | \
-                       (cd "${WORKDIR}"; LANG=C sort -z -u | \
-                       rsync -rtL0 --files-from=- "${WORKDIR}/" "${D}${sources_dir}/" )
-       fi
 }
+
 save_elf_debug() {
        hasq splitdebug ${FEATURES} || return 0
 
@@ -178,3 +172,23 @@ do
                fi
        fi
 done
+
+if [[ -s ${T}/debug.sources ]] && \
+        hasq installsources ${FEATURES} && \
+        ! hasq installsources ${RESTRICT} && \
+        type -P debugedit >/dev/null
+then
+       vecho "installsources: rsyncing source files"
+       [[ -d ${D}${prepstrip_sources_dir} ]] || mkdir -p "${D}${prepstrip_sources_dir}"
+       grep -zv '/<[^/>]*>$' "${T}"/debug.sources | \
+               (cd "${WORKDIR}"; LANG=C sort -z -u | \
+               rsync -tL0 --files-from=- "${WORKDIR}/" "${D}${prepstrip_sources_dir}/" )
+
+       # Preserve directory structure.
+       # Needed after running save_elf_sources.
+       # https://bugzilla.redhat.com/show_bug.cgi?id=444310
+       while read -r emptydir
+       do
+               touch "$emptydir"/.keepdir
+       done < <(find "${D}${prepstrip_sources_dir}/" -type d -empty)
+fi