Added support for using noarch packages.

--HG--
extra : convert_revision : a96166ddecb6efe65d35283f25e06a944cc4a038
This commit is contained in:
Juan RP 2009-02-16 00:39:41 +01:00
parent 4f6364a2bd
commit 6b6162bb44
10 changed files with 107 additions and 36 deletions

View file

@ -175,7 +175,7 @@ main(int argc, char **argv)
exit(EXIT_FAILURE);
/* Temp buffer to verify pkgindex file. */
plist = xbps_append_full_path(false, dpkgidx, XBPS_PKGINDEX);
plist = xbps_get_pkg_index_plist(dpkgidx);
if (plist == NULL)
exit(EXIT_FAILURE);

View file

@ -1,5 +1,5 @@
/*-
* Copyright (c) 2008 Juan Romero Pardines.
* Copyright (c) 2008-2009 Juan Romero Pardines.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -133,7 +133,7 @@ search_string_in_pkgs(prop_object_t obj, void *arg, bool *loop_done)
repofile = prop_string_cstring_nocopy(obj);
assert(repofile != NULL);
plist = xbps_append_full_path(false, repofile, XBPS_PKGINDEX);
plist = xbps_get_pkg_index_plist(repofile);
if (plist == NULL)
return EINVAL;
@ -165,8 +165,7 @@ show_pkg_info_from_repolist(prop_object_t obj, void *arg, bool *loop_done)
/* Get the location */
repofile = prop_string_cstring_nocopy(obj);
/* Get string for pkg-index.plist with full path. */
plist = xbps_append_full_path(false, repofile, XBPS_PKGINDEX);
plist = xbps_get_pkg_index_plist(repofile);
if (plist == NULL)
return EINVAL;

View file

@ -8,8 +8,6 @@ xbps-src:
* Add support to run the prepost-* scripts, so that the same actions are
performed in source/bin packages. Use current postinstall_helpers to
automatically add triggers, shared by src/bin pkgs. [IN PROGRESS]
* Build non-arch pkgs with the suffix 'noarch' and create the binpkgs
into another subdirectory inside of $XBPS_PACKAGESDIR.
xbps-cmpver:
* It fails in some cases: foo-2.0 vs foo-1.99 and foo-2a vs foo-2b.

View file

@ -30,8 +30,9 @@
char * xbps_append_full_path(bool, const char *, const char *);
int xbps_check_is_installed_pkg(const char *);
bool xbps_check_is_installed_pkgname(const char *);
const char * xbps_get_pkg_version(const char *);
char * xbps_get_pkg_index_plist(const char *);
char * xbps_get_pkg_name(const char *);
const char * xbps_get_pkg_version(const char *);
bool xbps_pkg_has_rundeps(prop_dictionary_t);
void xbps_set_rootdir(const char *);

View file

@ -96,7 +96,7 @@ store_dependency(prop_dictionary_t origind, prop_dictionary_t depd,
prop_string_t reqbystr;
uint32_t prio = 0;
size_t len = 0, dirdepscnt = 0, indirdepscnt = 0;
const char *pkgname, *version, *reqbyname, *reqbyver;
const char *pkgname, *version, *reqbyname, *reqbyver, *arch;
const char *repoloc, *binfile, *originpkg, *short_desc;
char *reqby, *pkgnver;
int rv = 0;
@ -113,6 +113,7 @@ store_dependency(prop_dictionary_t origind, prop_dictionary_t depd,
prop_dictionary_get_cstring_nocopy(depd, "version", &version);
prop_dictionary_get_cstring_nocopy(depd, "filename", &binfile);
prop_dictionary_get_cstring_nocopy(depd, "short_desc", &short_desc);
prop_dictionary_get_cstring_nocopy(depd, "architecture", &arch);
prop_dictionary_get_uint32(depd, "priority", &prio);
prop_dictionary_get_cstring_nocopy(origind, "pkgname", &reqbyname);
prop_dictionary_get_cstring_nocopy(origind, "version", &reqbyver);
@ -203,6 +204,7 @@ store_dependency(prop_dictionary_t origind, prop_dictionary_t depd,
prop_dictionary_set_uint32(dict, "priority", prio);
prop_dictionary_set_cstring(dict, "short_desc", short_desc);
prop_dictionary_set_bool(dict, "indirect_dep", indirectdep);
prop_dictionary_set_cstring(dict, "architecture", arch);
/*
* Add the dictionary into the array.
@ -335,8 +337,8 @@ xbps_find_deps_in_pkg(prop_dictionary_t pkg)
* all available binary packages.
*/
while ((obj = prop_object_iterator_next(iter)) != NULL) {
plist = xbps_append_full_path(false,
prop_string_cstring_nocopy(obj), XBPS_PKGINDEX);
plist =
xbps_get_pkg_index_plist(prop_string_cstring_nocopy(obj));
if (plist == NULL) {
rv = EINVAL;
goto out;
@ -377,8 +379,8 @@ xbps_find_deps_in_pkg(prop_dictionary_t pkg)
*/
prop_object_iterator_reset(iter);
while ((obj = prop_object_iterator_next(iter)) != NULL) {
plist = xbps_append_full_path(false,
prop_string_cstring_nocopy(obj), XBPS_PKGINDEX);
plist =
xbps_get_pkg_index_plist(prop_string_cstring_nocopy(obj));
if (plist == NULL) {
rv = EINVAL;
goto out;

View file

@ -107,8 +107,7 @@ install_binpkg_repo_cb(prop_object_t obj, void *arg, bool *cbloop_done)
char *plist;
int rv = 0;
plist = xbps_append_full_path(false,
prop_string_cstring_nocopy(obj), XBPS_PKGINDEX);
plist = xbps_get_pkg_index_plist(prop_string_cstring_nocopy(obj));
if (plist == NULL)
return EINVAL;

View file

@ -56,25 +56,34 @@ xbps_unpack_binary_pkg(prop_dictionary_t repo, prop_dictionary_t pkg,
const char *destdir,
void (*cb_print)(prop_dictionary_t))
{
prop_string_t filename, repoloc;
char *binfile;
prop_string_t filename, repoloc, arch;
char *binfile, *path;
int rv = 0;
assert(pkg != NULL);
/* Append filename to the full path for binary pkg */
filename = prop_dictionary_get(pkg, "filename");
arch = prop_dictionary_get(pkg, "architecture");
if (repo)
repoloc = prop_dictionary_get(repo, "location-local");
else
repoloc = prop_dictionary_get(pkg, "repository");
binfile = xbps_append_full_path(false,
path = xbps_append_full_path(false,
prop_string_cstring_nocopy(repoloc),
prop_string_cstring_nocopy(filename));
if (binfile == NULL)
prop_string_cstring_nocopy(arch));
if (path == NULL)
return EINVAL;
binfile = xbps_append_full_path(false, path,
prop_string_cstring_nocopy(filename));
if (binfile == NULL) {
free(path);
return EINVAL;
}
free(path);
if (!cb_print)
unpack_defcb_print(pkg);
else

View file

@ -29,6 +29,7 @@
#include <string.h>
#include <errno.h>
#include <limits.h>
#include <sys/utsname.h>
#include <xbps_api.h>
@ -141,6 +142,31 @@ xbps_get_pkg_name(const char *pkg)
return pkgname;
}
char *
xbps_get_pkg_index_plist(const char *path)
{
struct utsname un;
char *plist, *p;
assert(path != NULL);
if (uname(&un) == -1)
return NULL;
p = xbps_append_full_path(false, path, un.machine);
if (p == NULL)
return NULL;
plist = xbps_append_full_path(false, p, XBPS_PKGINDEX);
if (plist == NULL) {
free(p);
return NULL;
}
free(p);
return plist;
}
bool
xbps_pkg_has_rundeps(prop_dictionary_t pkg)
{

View file

@ -43,23 +43,23 @@ write_repo_pkgindex()
[ -z "$repodir" ] && repodir=$XBPS_PACKAGESDIR
[ ! -d $repodir ] && exit 1
found="$(echo $repodir/*)"
found="$(echo $repodir/$xbps_machine/*)"
if $(echo $found|grep -vq .xbps); then
msg_error "couldn't find binary packages on $repodir."
fi
pkgindexf=$(mktemp -t pkgidx.XXXXXXXXXX) || exit 1
tmppkgdir=$(mktemp -d -t pkgdir.XXXXXXXX) || exit 1
pkgindexf=$(mktemp -t xbps-pkgidx.XXXXXXXXXX) || exit 1
tmppkgdir=$(mktemp -d -t xbps-pkgdir.XXXXXXXX) || exit 1
# Write the header.
msg_normal "Creating package index for $repodir..."
write_repo_pkgindex_header $pkgindexf $repodir
#
# Write pkg dictionaries from all packages currently available at
# XBPS_PACKAGESDIR.
# Write pkg dictionaries for all packages currently available at
# XBPS_PACKAGESDIR, both for your cpu arch and non arch dependent.
#
for i in $(echo $repodir/*.xbps); do
for i in $(find $repodir/$xbps_machine -type f -name \*.xbps); do
pkgname="$(basename ${i%%-[0-9]*.*.$xbps_machine.xbps})"
propsf="./var/db/xbps/metadata/$pkgname/props.plist"
cd $tmppkgdir && tar xfjp $i $propsf
@ -67,7 +67,26 @@ write_repo_pkgindex()
msg_warn "Couldn't extract $(basename $i) metadata!"
continue
fi
write_repo_pkgindex_dict $propsf $pkgindexf $(basename $i)
write_repo_pkgindex_dict $propsf $pkgindexf $(basename $i) \
$xbps_machine
if [ $? -ne 0 ]; then
msg_warn "Couldn't write $i metadata to index file!"
continue
fi
echo "$(basename $i) added."
pkgsum=$(($pkgsum + 1))
done
for i in $(find $repodir/noarch -type f -name \*.xbps); do
pkgname="$(basename ${i%%-[0-9]*.*.noarch.xbps})"
propsf="./var/db/xbps/metadata/$pkgname/props.plist"
cd $tmppkgdir && tar xfjp $i $propsf
if [ $? -ne 0 ]; then
msg_warn "Couldn't extract $(basename $i) metadata!"
continue
fi
write_repo_pkgindex_dict $propsf $pkgindexf $(basename $i) \
noarch
if [ $? -ne 0 ]; then
msg_warn "Couldn't write $i metadata to index file!"
continue
@ -85,7 +104,7 @@ write_repo_pkgindex()
exit 1
fi
msg_normal "Package index created (total pkgs: $pkgsum)."
cp -f $pkgindexf $repodir/pkg-index.plist
cp -f $pkgindexf $repodir/$xbps_machine/pkg-index.plist
fi
rm -f $pkgindexf
rm -rf $tmppkgdir
@ -140,14 +159,15 @@ write_repo_pkgindex_dict()
local pkgf="$1"
local indexf="$2"
local binpkgf="$3"
local arch="$4"
local first_dict=
local tmpdictf=
local binpkg="$XBPS_PACKAGESDIR/$binpkgf"
local getsize=$(du $binpkg|awk '{print $1}')
local binpkg="$XBPS_PACKAGESDIR/$arch/$binpkgf"
local getsize=$(du -b $binpkg|awk '{print $1}')
[ -z "$pkgf" -o -z "$indexf" -o -z "$binpkgf" ] && return 1
tmpdictf=$(mktemp -t pkgdict.XXXXXXXXXX) || exit 1
tmpdictf=$(mktemp -t xbps-pkgdict.XXXXXXXXXX) || exit 1
cat $pkgf | while read line; do
# Find the first dictionary.

View file

@ -32,6 +32,7 @@ xbps_write_metadata_pkg()
local destdir=$XBPS_DESTDIR/$pkgname-$version
local metadir=$destdir/var/db/xbps/metadata/$pkgname
local prioinst=
local arch=
if [ ! -d "$destdir" ]; then
echo "ERROR: $pkgname not installed into destdir."
@ -44,6 +45,12 @@ xbps_write_metadata_pkg()
prioinst=0
fi
if [ -n "$noarch" ]; then
arch=noarch
else
arch=$xbps_machine
fi
# Write the files list.
local TMPFLIST=$(mktemp -t flist.XXXXXXXXXX) || exit 1
# First add the regular files.
@ -66,7 +73,7 @@ xbps_write_metadata_pkg()
<key>version</key>
<string>$version</string>
<key>architecture</key>
<string>$xbps_machine</string>
<string>$arch</string>
<key>priority</key>
<integer>$prioinst</integer>
<key>installed_size</key>
@ -144,14 +151,24 @@ _EOF
xbps_make_binpkg()
{
local destdir=$XBPS_DESTDIR/$pkgname-$version
local binpkg=$pkgname-$version.$xbps_machine.xbps
local binpkg=
local pkgdir=
local arch=
cd $destdir || exit 1
if [ -n "$noarch" ]; then
arch=noarch
else
arch=$xbps_machine
fi
binpkg=$pkgname-$version.$arch.xbps
pkgdir=$XBPS_PACKAGESDIR/$arch
run_rootcmd tar cfjp $XBPS_DESTDIR/$binpkg .
if [ $? -eq 0 ]; then
[ ! -d $XBPS_PACKAGESDIR ] && mkdir -p $XBPS_PACKAGESDIR
mv -f $XBPS_DESTDIR/$binpkg $XBPS_PACKAGESDIR
[ ! -d $pkgdir ] && mkdir -p $pkgdir
mv -f $XBPS_DESTDIR/$binpkg $pkgdir
echo "=> Built package: $binpkg"
fi