Added support for using noarch packages.
--HG-- extra : convert_revision : a96166ddecb6efe65d35283f25e06a944cc4a038
This commit is contained in:
parent
4f6364a2bd
commit
6b6162bb44
10 changed files with 107 additions and 36 deletions
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
2
doc/TODO
2
doc/TODO
|
@ -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.
|
||||||
|
|
|
@ -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 *);
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
19
lib/unpack.c
19
lib/unpack.c
|
@ -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
|
||||||
|
|
26
lib/util.c
26
lib/util.c
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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.
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue