update-alternatives-cworth: use latest installed alternative
authorMartin Jansa <martin.jansa@gmail.com>
Wed, 18 Nov 2009 03:53:23 +0000 (03:53 +0000)
committerMartin Jansa <Martin.Jansa@gmail.com>
Thu, 7 Jan 2010 11:58:16 +0000 (12:58 +0100)
* if there is more alternatives with higest priority, use the one last
  in alternatives file (latest installed)
* if target exists and its directory, remove link, otherwise new
  alternative link is created inside that direstory

Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
recipes/update-alternatives/update-alternatives-cworth-native_0.99.154.bb
recipes/update-alternatives/update-alternatives-cworth.inc
recipes/update-alternatives/update-alternatives-cworth/update-alternatives.use.last.patch [new file with mode: 0644]
recipes/update-alternatives/update-alternatives-cworth_0.99.154.bb

index 40534b4..455831c 100644 (file)
@@ -3,6 +3,8 @@ inherit native
 
 PROVIDES += "virtual/update-alternatives-native"
 
+PR = "${INC_PR}.0"
+
 do_stage () {
     install -d ${sbindir} \
                ${libdir}/opkg/alternatives
index f23bfe8..2d8fd42 100644 (file)
@@ -1,7 +1,8 @@
 LICENSE = "GPL"
 SECTION = "base"
-SRC_URI = "${HANDHELDS_CVS};module=familiar/dist/ipkg;tag=${@'V' + bb.data.getVar('PV',d,1).replace('.', '-')}"
+SRC_URI = "${HANDHELDS_CVS};module=familiar/dist/ipkg;tag=${@'V' + bb.data.getVar('PV',d,1).replace('.', '-')} \
+           file://update-alternatives.use.last.patch;patch=1"
 S = "${WORKDIR}/ipkg/C"
 PACKAGE_ARCH = "all"
 
-PR = "r1"
+INC_PR = "r3"
diff --git a/recipes/update-alternatives/update-alternatives-cworth/update-alternatives.use.last.patch b/recipes/update-alternatives/update-alternatives-cworth/update-alternatives.use.last.patch
new file mode 100644 (file)
index 0000000..7bd5bd2
--- /dev/null
@@ -0,0 +1,34 @@
+diff -uNr C.orig/update-alternatives C/update-alternatives
+--- C.orig/update-alternatives 2003-03-28 17:39:45.000000000 +0100
++++ C/update-alternatives      2009-09-17 16:46:59.000000000 +0200
+@@ -97,8 +97,8 @@
+ ##    path=`sed -ne "1!p" $ad/$name | sort -nr -k2 | head -1 | sed 's/ .*//'`
+ ## busybox safe:
+-      path=`sed -ne "1!p" $ad/$name | sed -e "s/\(.*\) \(.*\)/\2 \1/g" | sort -nr | head -n 1 | sed 's/[^ ]* //'`
+-      if [ -z "$path" ]; then
++      prio=`sed -ne "1!p" $ad/$name | sed -e "s/\(.*\) \(.*\)/\2 \1/g" | sort -nr | head -n 1 | sed 's/ [^ ]*$//'`
++      if [ -z "$prio" ]; then
+               echo "update-alternatives: removing $link as no more alternatives exist for it"
+               rm $ad/$name
+               if [ -L $link ]; then
+@@ -107,11 +107,19 @@
+               return 0
+       fi
++      ## find last line with highest priority
++      path=`grep "${prio}$" $ad/$name | tail -n 1 | sed 's/ [^ ]*$//'`
++
+       if [ ! -e $link -o -L $link ]; then
+               local link_dir=`dirname $link`
+               if [ ! -d $link_dir ]; then
+                       mkdir -p $link_dir
+               fi
++              if [ -h $link -a -d $link ]; then
++                      # if $link exists and the target is directory, than ln -sf $path $link, doesn't replace link to that directory, but creates new link inside
++                      echo "update-alternatives: Removing $link"
++                      rm -f $link
++              fi
+               ln -sf $path $link
+               echo "update-alternatives: Linking $link to $path"
+       else
index 6cab1e5..b95d6d5 100644 (file)
@@ -2,6 +2,8 @@ require update-alternatives-cworth.inc
 
 RPROVIDES_${PN} = "update-alternatives"
 
+PR="${INC_PR}.0"
+
 do_install () {
     install -d ${D}${sbindir} \
                ${D}${sysconfdir}/alternatives \