New pacman

This commit is contained in:
Mike Staszel 2010-07-09 18:32:36 -07:00
parent 773c365ba8
commit 603d7de082
6 changed files with 71 additions and 273 deletions

BIN
core/pacman/.DS_Store vendored

Binary file not shown.

View file

@ -0,0 +1,32 @@
From dc817a2061699cd1f33ca93f0d93a1fbc2f33ea1 Mon Sep 17 00:00:00 2001
From: Allan McRae <allan@archlinux.org>
Date: Thu, 17 Jun 2010 14:32:08 +1000
Subject: [PATCH] makepkg: fallback to sane defaults for library stripping
If the library stripping variables are not defined in makepkg.conf,
libraries will be fully stripped and become broken. Fallback to a
sane default stripping level.
Signed-off-by: Allan McRae <allan@archlinux.org>
Signed-off-by: Dan McGee <dan@archlinux.org>
---
scripts/makepkg.sh.in | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
index d986701..e64b564 100644
--- a/scripts/makepkg.sh.in
+++ b/scripts/makepkg.sh.in
@@ -864,6 +864,9 @@ tidy_install() {
if [[ $(check_option strip) = y && -n ${STRIP_DIRS[*]} ]]; then
msg2 "$(gettext "Stripping unneeded symbols from binaries and libraries...")"
+ # make sure library stripping variables are defined to prevent excess stripping
+ [[ -z ${STRIP_SHARED+x} ]] && STRIP_SHARED="-S"
+ [[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S"
local binary
find ${STRIP_DIRS[@]} -type f -perm -u+w 2>/dev/null | while read binary ; do
case "$(file -bi "$binary")" in
--
1.7.1

53
core/pacman/PKGBUILD Normal file → Executable file
View file

@ -1,40 +1,44 @@
# Maintainer: Mike Staszel <mikestaszel@plugboxlinux.org>
# Maintainer: Aaron Griffin <aaron@archlinux.org>
# Maintainer: Dan McGee <dan@archlinux.org>
# Plugbox changes:
# - pacman.conf
# - makepkg.conf with ARM stuff
pkgname=pacman
pkgver=3.3.3
pkgrel=5
pkgver=3.4.0
pkgrel=2
pkgdesc="A library-based package manager with dependency support"
arch=('arm')
url="http://www.archlinux.org/pacman/"
license=('GPL')
groups=('base')
depends=('bash' 'libarchive>=2.7.1' 'libfetch>=2.25' 'pacman-mirrorlist')
optdepends=('fakeroot: for makepkg usage as normal user'
'python: for rankmirrors script usage')
optdepends=('fakeroot: for makepkg usage as normal user')
backup=(etc/pacman.conf etc/makepkg.conf)
install=pacman.install
options=(!libtool)
source=(ftp://ftp.archlinux.org/other/pacman/$pkgname-$pkgver.tar.gz
pacman.conf
makepkg.conf
vercmp.patch
completion.patch)
md5sums=('a8cef73d68e2a4c3a46fb46c33210719'
0001-makepkg-fallback-to-sane-defaults-for-library-stripp.patch)
md5sums=('50ad71be1faaad84842c576e239d1bb5'
'8a1eea46c9af940a8812dfb4bbbd159d'
'ce00f190714c02ef26117ecfdf5fa296'
'84129116c61c8a7cad03a5ae5d80aee5'
'7eddda58bf55809e6bde14b446e41a15')
'f8c4a3cc7702a7a70d177659441495c5')
sha256sums=('cd80e206ee653ce337555c73b7064088e672e9341245317fe09dc52d06bff3c3'
'97fb68536c1179a7de52dfb8a107c6e9bf3a71eaa6a98d6ae74dc224d4ca5838'
'3a60e1f895c90c8e74f5ca389fa05fb3328745e9873c5452b8cd1b2e68bee418'
'99f1d108f930b134cfb4c1ca8c86cd282fe9efb69de39cd747218f3d448dda44')
# keep an upgrade path for older installations
PKGEXT='.pkg.tar.gz'
build() {
cd $srcdir/$pkgname-$pkgver
# avoid linking vercmp against libalpm as this might be broken during a transaction
patch -p0 -i $srcdir/vercmp.patch || return 1
# fix completion for .pkg.tar.xz pacakges (included in next upstream release)
patch -p1 -i $srcdir/completion.patch || return 1
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
patch -Np1 < $srcdir/0001-makepkg-fallback-to-sane-defaults-for-library-stripp.patch
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --enable-doc
make || return 1
}
@ -47,6 +51,27 @@ package() {
install -m644 $srcdir/pacman.conf $pkgdir/etc/
install -m644 $srcdir/makepkg.conf $pkgdir/etc/
# Plugbox wants to be old-fashioned and just use their
# files instead of letting sed modify them, so skip the part below
# # set things correctly in the default conf file
# case "$CARCH" in
# i686)
# mycarch="i686"
# mychost="i686-pc-linux-gnu"
# myflags="-march=i686 "
# ;;
# x86_64)
# mycarch="x86_64"
# mychost="x86_64-unknown-linux-gnu"
# myflags="-march=x86-64 "
# ;;
# esac
# sed -i $pkgdir/etc/makepkg.conf \
# -e "s|@CARCH[@]|$mycarch|g" \
# -e "s|@CHOST[@]|$mychost|g" \
# -e "s|@CARCHFLAGS[@]|$myflags|g"
# install completion files
mkdir -p $pkgdir/etc/bash_completion.d/
install -m644 contrib/bash_completion $pkgdir/etc/bash_completion.d/pacman

View file

@ -1,68 +0,0 @@
From d85421ec62cdcd0b4b1f162b9908dc3eb0b704b4 Mon Sep 17 00:00:00 2001
From: Pierre Schmitz <pierre@archlinux.de>
Date: Thu, 18 Feb 2010 04:18:10 +0000
Subject: contrib/*_completion: match *.pkg.tar.*
Signed-off-by: Pierre Schmitz <pierre@archlinux.de>
Signed-off-by: Dan McGee <dan@archlinux.org>
---
diff --git a/contrib/bash_completion b/contrib/bash_completion
index 62e5bc9..a231eb6 100644
--- a/contrib/bash_completion
+++ b/contrib/bash_completion
@@ -321,7 +321,7 @@ _pacman ()
case "${op}" in
U)
COMPREPLY=( $( compgen -d -- "$cur" ) \
- $( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
+ $( compgen -f -X '!*.pkg.tar.*' -- "$cur" ) )
return 0
;;
h|V)
@@ -336,7 +336,7 @@ _pacman ()
$( compgen -f -- "$cur" ) )
elif _instring $mod p; then
COMPREPLY=( $( compgen -d -- "$cur" ) \
- $( compgen -f -X '!*.pkg.tar.gz' -- "$cur" ) )
+ $( compgen -f -X '!*.pkg.tar.*' -- "$cur" ) )
elif _instring $mod u; then
COMPREPLY=''
return 0
diff --git a/contrib/zsh_completion b/contrib/zsh_completion
index 2f43d9b..01b3c44 100644
--- a/contrib/zsh_completion
+++ b/contrib/zsh_completion
@@ -32,7 +32,7 @@ _pacman_opts_common=(
_pacman_opts_pkgfile=(
'-d[Skip dependency checks]'
'-f[Overwrite conflicting files]'
- '*:package file:_files -g "*.pkg.tar.gz(.)"'
+ '*:package file:_files -g "*.pkg.tar.*(.)"'
)
# options for passing to _arguments: subactions for --query command
@@ -120,7 +120,7 @@ _pacman_action_query() {
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \
- '*:package file:_files -g "*.pkg.tar.gz"'
+ '*:package file:_files -g "*.pkg.tar.*"'
;;
query_group)
_arguments -s : \
@@ -295,11 +295,11 @@ _pacman() {
"$_pacman_opts_query_modifiers[@]" \
'*:package file:_files'
;;
- -Q*p*) # file *.pkg.tar.gz
+ -Q*p*) # file *.pkg.tar.*
_arguments -s : \
"$_pacman_opts_common[@]" \
"$_pacman_opts_query_modifiers[@]" \
- '*:package file:_files -g "*.pkg.tar.gz"'
+ '*:package file:_files -g "*.pkg.tar.*"'
;;
-Q*) _pacman_action_query ;;
-R*) _pacman_action_remove ;;
--
cgit v0.8.3.1-3-ga650

0
core/pacman/pacman.install Normal file → Executable file
View file

View file

@ -1,191 +0,0 @@
--- src/util/vercmp.c 2009-09-30 03:38:22.000000000 +0200
+++ src/util/vercmp.c 2010-04-07 18:49:13.659173306 +0200
@@ -18,17 +18,184 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "config.h"
-
#include <stdio.h> /* printf */
+#include <stdlib.h> /* malloc/free */
#include <string.h> /* strncpy */
-#include <alpm.h>
-
#define BASENAME "vercmp"
#define MAX_LEN 255
+/** Compare two version strings and determine which one is 'newer'.
+ * Returns a value comparable to the way strcmp works. Returns 1
+ * if a is newer than b, 0 if a and b are the same version, or -1
+ * if b is newer than a.
+ *
+ * This function has been adopted from the rpmvercmp function located
+ * at lib/rpmvercmp.c, and was most recently updated against rpm
+ * version 4.4.2.3. Small modifications have been made to make it more
+ * consistent with the libalpm coding style.
+ *
+ * Keep in mind that the pkgrel is only compared if it is available
+ * on both versions handed to this function. For example, comparing
+ * 1.5-1 and 1.5 will yield 0; comparing 1.5-1 and 1.5-2 will yield
+ * -1 as expected. This is mainly for supporting versioned dependencies
+ * that do not include the pkgrel.
+ */
+static int alpm_pkg_vercmp(const char *a, const char *b)
+{
+ char oldch1, oldch2;
+ char *str1, *str2;
+ char *ptr1, *ptr2;
+ char *one, *two;
+ int rc;
+ int isnum;
+ int ret = 0;
+
+ /* libalpm added code. ensure our strings are not null */
+ if(!a) {
+ if(!b) return(0);
+ return(-1);
+ }
+ if(!b) return(1);
+
+ /* easy comparison to see if versions are identical */
+ if(strcmp(a, b) == 0) return(0);
+
+ str1 = strdup(a);
+ str2 = strdup(b);
+
+ one = str1;
+ two = str2;
+
+ /* loop through each version segment of str1 and str2 and compare them */
+ while(*one && *two) {
+ while(*one && !isalnum((int)*one)) one++;
+ while(*two && !isalnum((int)*two)) two++;
+
+ /* If we ran to the end of either, we are finished with the loop */
+ if(!(*one && *two)) break;
+
+ ptr1 = one;
+ ptr2 = two;
+
+ /* grab first completely alpha or completely numeric segment */
+ /* leave one and two pointing to the start of the alpha or numeric */
+ /* segment and walk ptr1 and ptr2 to end of segment */
+ if(isdigit((int)*ptr1)) {
+ while(*ptr1 && isdigit((int)*ptr1)) ptr1++;
+ while(*ptr2 && isdigit((int)*ptr2)) ptr2++;
+ isnum = 1;
+ } else {
+ while(*ptr1 && isalpha((int)*ptr1)) ptr1++;
+ while(*ptr2 && isalpha((int)*ptr2)) ptr2++;
+ isnum = 0;
+ }
+
+ /* save character at the end of the alpha or numeric segment */
+ /* so that they can be restored after the comparison */
+ oldch1 = *ptr1;
+ *ptr1 = '\0';
+ oldch2 = *ptr2;
+ *ptr2 = '\0';
+
+ /* this cannot happen, as we previously tested to make sure that */
+ /* the first string has a non-null segment */
+ if (one == ptr1) {
+ ret = -1; /* arbitrary */
+ goto cleanup;
+ }
+
+ /* take care of the case where the two version segments are */
+ /* different types: one numeric, the other alpha (i.e. empty) */
+ /* numeric segments are always newer than alpha segments */
+ /* XXX See patch #60884 (and details) from bugzilla #50977. */
+ if (two == ptr2) {
+ ret = isnum ? 1 : -1;
+ goto cleanup;
+ }
+
+ if (isnum) {
+ /* this used to be done by converting the digit segments */
+ /* to ints using atoi() - it's changed because long */
+ /* digit segments can overflow an int - this should fix that. */
+
+ /* throw away any leading zeros - it's a number, right? */
+ while (*one == '0') one++;
+ while (*two == '0') two++;
+
+ /* whichever number has more digits wins */
+ if (strlen(one) > strlen(two)) {
+ ret = 1;
+ goto cleanup;
+ }
+ if (strlen(two) > strlen(one)) {
+ ret = -1;
+ goto cleanup;
+ }
+ }
+
+ /* strcmp will return which one is greater - even if the two */
+ /* segments are alpha or if they are numeric. don't return */
+ /* if they are equal because there might be more segments to */
+ /* compare */
+ rc = strcmp(one, two);
+ if (rc) {
+ ret = rc < 1 ? -1 : 1;
+ goto cleanup;
+ }
+
+ /* restore character that was replaced by null above */
+ *ptr1 = oldch1;
+ one = ptr1;
+ *ptr2 = oldch2;
+ two = ptr2;
+
+ /* libalpm added code. check if version strings have hit the pkgrel
+ * portion. depending on which strings have hit, take correct action.
+ * this is all based on the premise that we only have one dash in
+ * the version string, and it separates pkgver from pkgrel. */
+ if(*ptr1 == '-' && *ptr2 == '-') {
+ /* no-op, continue comparing since we are equivalent throughout */
+ } else if(*ptr1 == '-') {
+ /* ptr1 has hit the pkgrel and ptr2 has not. continue version
+ * comparison after stripping the pkgrel from ptr1. */
+ *ptr1 = '\0';
+ } else if(*ptr2 == '-') {
+ /* ptr2 has hit the pkgrel and ptr1 has not. continue version
+ * comparison after stripping the pkgrel from ptr2. */
+ *ptr2 = '\0';
+ }
+ }
+
+ /* this catches the case where all numeric and alpha segments have */
+ /* compared identically but the segment separating characters were */
+ /* different */
+ if ((!*one) && (!*two)) {
+ ret = 0;
+ goto cleanup;
+ }
+
+ /* the final showdown. we never want a remaining alpha string to
+ * beat an empty string. the logic is a bit weird, but:
+ * - if one is empty and two is not an alpha, two is newer.
+ * - if one is an alpha, two is newer.
+ * - otherwise one is newer.
+ * */
+ if ( ( !*one && !isalpha((int)*two) )
+ || isalpha((int)*one) ) {
+ ret = -1;
+ } else {
+ ret = 1;
+ }
+
+cleanup:
+ free(str1);
+ free(str2);
+ return(ret);
+}
+
+
static void usage()
{
fprintf(stderr, "usage: %s <ver1> <ver2>\n\n", BASENAME);