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); exit(EXIT_FAILURE);
/* Temp buffer to verify pkgindex file. */ /* 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) if (plist == NULL)
exit(EXIT_FAILURE); 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. * All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * 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); repofile = prop_string_cstring_nocopy(obj);
assert(repofile != NULL); assert(repofile != NULL);
plist = xbps_append_full_path(false, repofile, XBPS_PKGINDEX); plist = xbps_get_pkg_index_plist(repofile);
if (plist == NULL) if (plist == NULL)
return EINVAL; return EINVAL;
@ -165,8 +165,7 @@ show_pkg_info_from_repolist(prop_object_t obj, void *arg, bool *loop_done)
/* Get the location */ /* Get the location */
repofile = prop_string_cstring_nocopy(obj); repofile = prop_string_cstring_nocopy(obj);
/* Get string for pkg-index.plist with full path. */ plist = xbps_get_pkg_index_plist(repofile);
plist = xbps_append_full_path(false, repofile, XBPS_PKGINDEX);
if (plist == NULL) if (plist == NULL)
return EINVAL; return EINVAL;

View file

@ -8,8 +8,6 @@ xbps-src:
* Add support to run the prepost-* scripts, so that the same actions are * Add support to run the prepost-* scripts, so that the same actions are
performed in source/bin packages. Use current postinstall_helpers to performed in source/bin packages. Use current postinstall_helpers to
automatically add triggers, shared by src/bin pkgs. [IN PROGRESS] 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: xbps-cmpver:
* It fails in some cases: foo-2.0 vs foo-1.99 and foo-2a vs foo-2b. * 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 *); char * xbps_append_full_path(bool, const char *, const char *);
int xbps_check_is_installed_pkg(const char *); int xbps_check_is_installed_pkg(const char *);
bool xbps_check_is_installed_pkgname(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 *); char * xbps_get_pkg_name(const char *);
const char * xbps_get_pkg_version(const char *);
bool xbps_pkg_has_rundeps(prop_dictionary_t); bool xbps_pkg_has_rundeps(prop_dictionary_t);
void xbps_set_rootdir(const char *); 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; prop_string_t reqbystr;
uint32_t prio = 0; uint32_t prio = 0;
size_t len = 0, dirdepscnt = 0, indirdepscnt = 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; const char *repoloc, *binfile, *originpkg, *short_desc;
char *reqby, *pkgnver; char *reqby, *pkgnver;
int rv = 0; 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, "version", &version);
prop_dictionary_get_cstring_nocopy(depd, "filename", &binfile); prop_dictionary_get_cstring_nocopy(depd, "filename", &binfile);
prop_dictionary_get_cstring_nocopy(depd, "short_desc", &short_desc); 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_uint32(depd, "priority", &prio);
prop_dictionary_get_cstring_nocopy(origind, "pkgname", &reqbyname); prop_dictionary_get_cstring_nocopy(origind, "pkgname", &reqbyname);
prop_dictionary_get_cstring_nocopy(origind, "version", &reqbyver); 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_uint32(dict, "priority", prio);
prop_dictionary_set_cstring(dict, "short_desc", short_desc); prop_dictionary_set_cstring(dict, "short_desc", short_desc);
prop_dictionary_set_bool(dict, "indirect_dep", indirectdep); prop_dictionary_set_bool(dict, "indirect_dep", indirectdep);
prop_dictionary_set_cstring(dict, "architecture", arch);
/* /*
* Add the dictionary into the array. * Add the dictionary into the array.
@ -335,8 +337,8 @@ xbps_find_deps_in_pkg(prop_dictionary_t pkg)
* all available binary packages. * all available binary packages.
*/ */
while ((obj = prop_object_iterator_next(iter)) != NULL) { while ((obj = prop_object_iterator_next(iter)) != NULL) {
plist = xbps_append_full_path(false, plist =
prop_string_cstring_nocopy(obj), XBPS_PKGINDEX); xbps_get_pkg_index_plist(prop_string_cstring_nocopy(obj));
if (plist == NULL) { if (plist == NULL) {
rv = EINVAL; rv = EINVAL;
goto out; goto out;
@ -377,8 +379,8 @@ xbps_find_deps_in_pkg(prop_dictionary_t pkg)
*/ */
prop_object_iterator_reset(iter); prop_object_iterator_reset(iter);
while ((obj = prop_object_iterator_next(iter)) != NULL) { while ((obj = prop_object_iterator_next(iter)) != NULL) {
plist = xbps_append_full_path(false, plist =
prop_string_cstring_nocopy(obj), XBPS_PKGINDEX); xbps_get_pkg_index_plist(prop_string_cstring_nocopy(obj));
if (plist == NULL) { if (plist == NULL) {
rv = EINVAL; rv = EINVAL;
goto out; goto out;

View file

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

View file

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

View file

@ -29,6 +29,7 @@
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <limits.h> #include <limits.h>
#include <sys/utsname.h>
#include <xbps_api.h> #include <xbps_api.h>
@ -141,6 +142,31 @@ xbps_get_pkg_name(const char *pkg)
return pkgname; 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 bool
xbps_pkg_has_rundeps(prop_dictionary_t pkg) xbps_pkg_has_rundeps(prop_dictionary_t pkg)
{ {

View file

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

View file

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