Add relnotes facility

The auto_rel function fills out a template and installs it in the stagedir
Add access function to support extraction of VENDOR field value from a
pkginfo file
Small hack in check_unpackaged to sort out relnotes since we've not added
that information in any metadata yet.
This commit is contained in:
Tom G. Christensen 2008-04-12 13:43:47 +00:00
parent 846fd7d60a
commit b14f4dfac2

View File

@ -20,7 +20,7 @@ strip_elf_args="" # GNU default is -g
strip_shared_args="" # GNU default is --strip-unneeded strip_shared_args="" # GNU default is --strip-unneeded
strip_static_args="" # GNU default is -g strip_static_args="" # GNU default is -g
META_CLEAN="prototype prototype.in pkginfo files.tmp depend.*.auto depend.*.all" META_CLEAN="prototype prototype.in pkginfo files.tmp depend.*.auto depend.*.all sums"
# Define defaults # Define defaults
# pkginfo information. # pkginfo information.
@ -67,6 +67,9 @@ ignore_deps=""
# Solaris doesn't know how to handle any kind of compressed manpages # Solaris doesn't know how to handle any kind of compressed manpages
gzman=0 gzman=0
# If not using gcc then please set this to 1
suncc=0
# Default configure args # Default configure args
configure_args='--prefix=$prefix --mandir=${prefix}/${_mandir} --infodir=${prefix}/${_infodir}' configure_args='--prefix=$prefix --mandir=${prefix}/${_mandir} --infodir=${prefix}/${_infodir}'
@ -316,6 +319,103 @@ add_dir()
echo "$dir" >> $metadir/files.tmp echo "$dir" >> $metadir/files.tmp
} }
# auto_rel(): Fix up and add releasenotes to stagedir
# params: none
# This will make some substitutions on a release note template
# and then copy the result to $stagedir/${metainstalldir}relnotes/$topdir-$version-$pkgver.txt
auto_rel()
{
local i
local rn
for i in relnotes relnotes.${_os}
do
[ -r ${metadir}/${i} ] && rn=$i
done
if [ -r ${metadir}/${rn} ]; then
local relmetadir=${stagedir}${metainstalldir}relnotes/$topdir-$version-$pkgver
### compute configure info for relnotes
local cf="$(_upls $configure_args)"
[ -n "$ac_overrides" ] && local aco="$(for ar in $ac_overrides; do echo $ar; done | $AWK '{ printf "%s \\\\ \\n",$0 }')"
local temp_fullcf="$(echo "$__configure $cf" | $AWK '{ printf "%s\\n",$0 }')"
temp_fullcf="$(echo "${aco}${temp_fullcf}")"
# Remove trailing whitespace and \n
local fullcf="${temp_fullcf%\\*}"
###
### compute compiler info for relnotes
if [ $suncc -eq 0 ]; then
#local compiler_temp="$(gcc --version 2>&1 | $SED -n '1,1p')"
#local compiler="gcc ${compiler_temp##* }"
local compiler="$(gcc -v 2>&1 | $SED -n '/^gcc/ s/ version//p')"
else # not gcc
local compiler="$(cc -version 2>&1)"
if [ "$CXX" = "g++" ]; then
# SUN cc with gnu g++
local compiler_temp="$(g++ --version 2>&1 | $SED -n '1,1p')"
local compiler="$((echo $compiler; echo g++ ${compiler_temp##* }) | $AWK '{ printf "%s\\n",$0 }')"
local compiler="${compiler%\\*}"
fi
fi
###
local pkgnam=$(get_pkgname $relnotes_secname)
local vendor=$(get_pkgvendor $relnotes_secname)
local packager="${pkgedby} <${email}>"
### Compute SHA1 sums for all source entries
local s
local path
local file
local source_sha1sum
local temp_source_sha1sum=""
# older bash 2.x doesn't like C-style for loops (observed on Solaris 2.x)
#for ((s=0; $s < ${#source[@]}; s++))
local s=0
while [ $s -lt ${#source[@]} ]
do
# A little snip from buildpkg.functions:unpack
if [ "${source[$s]:0:1}" != "/" ]; then # We have a relative pathname
# expand to absolute
[ -r "$srcdir/${source[$s]}" ] && source[$s]="$srcdir/${source[$s]}"
[ -r "$srcfiles/${source[$s]}" ] && source[$s]="$srcfiles/${source[$s]}"
fi # We are now sure that ${source[$s]} contains file with absolute path
# To avoid recording an absolute path in the sha1sum output that gets inserted
# into relnotes we cd first then run sha1sum
path="${source[$s]%/*}" # Extract path part
file="${source[$s]##*/}" # Extract filename part
(cd "$path"; $SHA1SUM "$file") >> $metadir/sums
let s=s+1
done
[ -r "$metadir/sums" ] && temp_source_sha1sum="$(cat $metadir/sums | $AWK '{ printf "%s\\n",$0 }')"
source_sha1sum="${temp_source_sha1sum%\\*}"
### End of SHA1 sum computing
### Extract environtment variables
local temp_extracted_env="$($SED -e 's/export /echo ENV /g' ${buildpkgbase}/${pkgdir}/build.sh >> /tmp/env.sh; bash /tmp/env.sh|$GREP ^ENV|$SED -e 's/ENV //g'|$AWK '{ printf "%s\\n",$0 }' && $RM -f /tmp/env.sh)"
# Remove trailing \n
local extracted_env="${temp_extracted_env%\\*}"
###
### Add dependencies
local temp_deps="$($CAT $metadir/depend.*.all | $GREP -v 'REV=' | $SORT -u | $AWK '{ printf "%s\\n",$0 }')"
local deps="${temp_deps%\\*}"
###
$MKDIR -p $relmetadir
$GSED -e "s;%%PKGNAME%%;${pkgnam};g" \
-e "s;%%SOURCE_AND_VER%%;${topdir}-${version};g" \
-e "s;%%CONFIGURE%%;${fullcf};g" \
-e "s;%%COMPILER%%;${compiler};g" \
-e "s;%%VENDOR%%;${vendor};g" \
-e "s;%%PKGEDBY%%;${packager};g" \
-e "s;%%SOURCE_SHA1SUM%%;${source_sha1sum};g" \
-e "s;%%ENVIRONMENT%%;${extracted_env};g" \
-e "s;%%DEPENDENCIES%%;${deps};g" \
${metadir}/${rn} > "$relmetadir/${topdir}.txt"
### Add the relnotes to the prototype file
#add_dir $defaultperms $defaultuid $defaultgid "relnotes/$topdir-$version-$pkgver" $relnotes_secname # Add dir entry
add_proto $defaultperms $defaultuid $defaultgid "relnotes" $relnotes_secname
else
echo "auto_rel: No release notes found!"
fi
}
# dep_pkg_name: Given a filename it will look it up and find the PKGNAME # dep_pkg_name: Given a filename it will look it up and find the PKGNAME
# Params: A list of filenames # Params: A list of filenames
# For each file we use pkgchk -l -p to find the package containing it # For each file we use pkgchk -l -p to find the package containing it
@ -501,6 +601,8 @@ parse_def()
legalend=0 legalend=0
# Set default value for maxinst for the new section # Set default value for maxinst for the new section
maxinst=1 maxinst=1
# By default relnotes will end up in the first package section found
[ -z "$relnotes_secname" ] && relnotes_secname=$secname
fi fi
;; ;;
'') '')
@ -591,7 +693,7 @@ check_unpackaged()
$FIND . -type d -print|$SED -e 's/\.\///g'|$GREP -v '^\.' >> $tmpdir/files.tmp $FIND . -type d -print|$SED -e 's/\.\///g'|$GREP -v '^\.' >> $tmpdir/files.tmp
$SORT $metadir/files.tmp|$UNIQ > $tmpdir/f1 $SORT $metadir/files.tmp|$UNIQ > $tmpdir/f1
$SORT $tmpdir/files.tmp > $tmpdir/f2 $SORT $tmpdir/files.tmp > $tmpdir/f2
upf="$($CAT $tmpdir/f1 $tmpdir/f2 | $SORT | $UNIQ -u)" upf="$($CAT $tmpdir/f1 $tmpdir/f2 | $SORT | $SED -e '/^relnotes/d' | $UNIQ -u)"
if [ ! -z "$upf" ]; then if [ ! -z "$upf" ]; then
echo "There are unpackaged files in the stagedir:" echo "There are unpackaged files in the stagedir:"
for i in $upf for i in $upf
@ -654,6 +756,18 @@ get_pkgdesc()
fi fi
} }
# get_pkgvendor(): Extract upstram vendor information from a pkginfo file
# params: $1 = metafile suffix
get_pkgvendor()
{
local secname=$1
if [ -r $metadir/pkginfo.$secname ]; then
local pv=$($SED -n 's/VENDOR=\(.*\) - .*/\1/p' $metadir/pkginfo.$secname | $TR -d '"')
echo $(_upls $pv)
fi
}
# do_strip_bin(): Strip binaries # do_strip_bin(): Strip binaries
# params: none # params: none
do_strip_bin() do_strip_bin()
@ -717,7 +831,10 @@ generic_pack()
setdir ${stagedir}${topinstalldir}${dir_prefix}/${_infodir} setdir ${stagedir}${topinstalldir}${dir_prefix}/${_infodir}
[ "$gzinfo" -eq 1 ] && compress_info [ "$gzinfo" -eq 1 ] && compress_info
fi fi
#setdir "${stagedir}${prefix}" # We need to add slash to the end of metainstalldir but *only* if
# metainstalldir is not /. We do this to avoid creating an absolute path
# which could happen with metainstalldir=/ if we unconditionally add /.
[ ! "$metainstalldir" = "/" ] && metainstalldir="${metainstalldir}/"
# pkgdef should list files relative to topinstalldir # pkgdef should list files relative to topinstalldir
setdir "${stagedir}${topinstalldir}" setdir "${stagedir}${topinstalldir}"
parse_def parse_def
@ -727,6 +844,9 @@ generic_pack()
do do
auto_deps $i auto_deps $i
add_scripts $i add_scripts $i
# auto_rel should only run once, when relnotes_secname comes up
# however it depends on depend.*.all generated above so must be inside the loop
[ "$i" = "$relnotes_secname" ] && auto_rel
make_pkg $i make_pkg $i
done done
} }