iauto_deps v2.

Defer auto_deps and add_scripts until all pkgdef entries have been
parsed
Add support for filtering out intrapackage deps
Add support for adding manual deps including intrapackage deps
Add support for ignoring specific deps via a filter
Make deps on non buildvendor packages optional
Make versioned deps optional (off, buildvendor, all)
Add access functions to support extraction of VERSION and NAME field
values from pkginfo files
This commit is contained in:
Tom G. Christensen 2008-04-05 19:55:58 +00:00
parent bb2413eda9
commit 0952290956

View File

@ -56,6 +56,12 @@ usescripts=1 # default to add pre/post scripts if available
usespace=1 # default to looking for a space file in $metadir
ignore_unpackaged_files=0 # default to check for unpackaged files in the stage area
deps_resolve_symlinks=0 # Set to 1 to resolve symlinks before computing deps (requires GNU readlink)
create_versioned_deps=1 # Set to 1 to create versioned dependencies
version_all_deps=0 # Set to 1 to add version on *all* deps, even SUNW (if enabled)
include_all_deps=1 # Set to 1 to create deps on packages regardless of vendor
# To exclude a dependency, add its name to this variable
ignore_deps=""
# Solaris doesn't know how to handle any kind of compressed manpages
gzman=0
@ -387,15 +393,81 @@ auto_deps()
{
local j
local deps
local i
local ignore
local secname=$1
local pkgname=$1
local pkgname=$(get_pkgname $secname)
local temp
deps="$(extract_deps $secname | $SORT -u | $GREP -v $pkgname)"
deps="$(extract_deps $secname | $SORT -u)"
# We need to sort out any packages created from the same build
# Internal deps *must* be recorded in a depend file instead
for j in $(list_pkgs)
do
temp=$(get_pkgname $j)
deps=$(echo $deps | sed -e "/$temp/d")
done
# Parse any speciel depends
# We don't do ignore_deps processing for these deps
if [ -r $metadir/depend ]; then
local extra_pkgname # Package that should have the depend
local extra_dep_pkgname # The name of depend (either a pkgname or a secname)
local extra_dep_version # version of the depend (or auto keyword)
$SED -n "/^$pkgname/p" $metadir/depend |
while read extra_pkgname extra_dep_pkgname extra_dep_version
do
local internal_dep=0
for i in $(list_pkgs)
do
[ "$extra_dep_pkgname" = "$i" ] && internal_dep=1
done
if [ $internal_dep -eq 1 ]; then
echo "P $(get_pkgname $extra_dep_pkgname) $(get_pkgdesc $extra_dep_pkgname)"
else
echo "P $extra_dep_pkgname $(pkgparam $extra_dep_pkgname NAME)"
fi
if [ $create_versioned_deps -eq 1 ]; then
# create versioned_deps
if [ "$extra_dep_version" = "auto" ]; then
if [ $internal_dep -eq 1 ]; then
extra_dep_version="$(get_pkgversion $extra_dep_pkgname)"
extra_dep_pkgname=$(get_pkgname $extra_dep_pkgname) # For later use we can now resolve this permanently
else
extra_dep_version="$(pkgparam $extra_dep_pkgname VERSION)"
fi
fi
# Only for deps with $pkgprefix?
if [ $version_all_deps -eq 0 ]; then
[ -n "$(echo $extra_dep_pkgname | $GREP $pkgprefix)" ] && echo -e "\t($arch) $extra_dep_version"
else
echo -e "\t($arch) $extra_dep_version"
fi
fi
done > $metadir/depend.$secname.auto
fi
if [ $include_all_deps -eq 0 ]; then
deps=$(echo $deps | sed -n "/$pkgprefix/p")
fi
for j in $deps
do
echo "P $j $(pkgparam $j NAME)"
echo -e "\t($arch) $(pkgparam $j VERSION)\n"
done | $SED -n "/$pkgprefix/{p;n;p;}" > $metadir/depend.$secname.auto
ignore=0
for i in $ignore_deps
do
# if there's a match then set ignore flag and break the loop
[ "$i" = "$j" ] && ignore=1 && break
done
[ $ignore -eq 0 ] && echo "P $j $(pkgparam $j NAME)"
if [ $ignore -eq 0 -a $create_versioned_deps -eq 1 ]; then
# create versioned_deps
# Only for deps with $pkgprefix?
if [ $version_all_deps -eq 0 ]; then
[ -n "$(echo $j | $GREP $pkgprefix)" ] && echo -e "\t($arch) $(pkgparam $j VERSION)\n"
else
echo -e "\t($arch) $(pkgparam $j VERSION)\n"
fi
fi
done >> $metadir/depend.$secname.auto
}
# parse_pkgdef(): Read in $metadir/pkgdef
@ -435,9 +507,6 @@ parse_def()
foundfiles=0 #
legalend=1 # We encountered a syntacticly correct section end
hasaddedpkginfo=0
# Add scripts if requested
auto_deps $secname $pkgname
add_scripts $secname
fi
;;
*)
@ -501,9 +570,6 @@ parse_def()
else
section=0 # Finished this section
foundfiles=0 #
# Add scripts if requested
auto_deps $secname $pkgname
add_scripts $secname
fi
fi
}
@ -560,6 +626,30 @@ get_pkgrev()
echo $secver
}
# get_pkgversion(): Extract pkgversion (VERSION field) from pkginfo file
# params: $1 = metafile suffix
get_pkgversion()
{
local secname=$1
local verfield="$($GREP VERSION $metadir/pkginfo.$secname|$SED -e 's/"//g')"
local secver=$(_upls ${verfield##VERSION=})
echo $secver
}
# get_pkgdesc(): Extract pkgdesc from a pkginfo file
# params: $1 = metafile suffix
get_pkgdesc()
{
local secname=$1
if [ -r $metadir/pkginfo.$secname ]; then
local pd=$($GREP NAME $metadir/pkginfo.$secname)
local pdesc=$(_upls ${pd##NAME=})
echo $pdesc
fi
}
# do_strip_bin(): Strip binaries
# params: none
do_strip_bin()
@ -631,6 +721,8 @@ generic_pack()
# Create a list of all the packages that we are going to build
for i in $(list_pkgs)
do
auto_deps $i
add_scripts $i
make_pkg $i
done
}