Splint fiddles.
[platform/upstream/rpm.git] / installplatform
index 8b0e303..c619fdb 100755 (executable)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/env bash
 
 DESTDIR="${DESTDIR:-/}"
 pkglibdir="${pkglibdir:-/usr/lib/rpm}"
@@ -21,24 +21,22 @@ E_O_F
 
 RPM="./rpm --rcfile $TEMPRC"
 
-arch="`$RPM --eval '%{_arch}'`"
+canonarch_sed='s_i.86_i386_;s_athlon_i386_;s_sparc[^-]*_sparc_;s_alpha[^-]*_alpha_;s_\(powerpc\|ppc\)[^-]*_ppc_'
+arch="`$RPM --eval '%{_arch}'|sed -e "$canonarch_sed"`"
 VENDOR="`$RPM --eval '%{_vendor}'`"
 OS="`$RPM --eval '%{_os}'`"
-target_platform="`$RPM --eval '%{_target_platform}'`"
-target="`$RPM --eval '%{_target}'`"
-
-rm -f ${DESTDIR}/${pkglibdir}/noarch-${VENDOR}-${OS}
-ln -s ${arch}-${VENDOR}-${OS} ${DESTDIR}/${pkglibdir}/noarch-${VENDOR}-${OS}
-rm -f ${DESTDIR}/${pkglibdir}/noarch-${OS}
-ln -s ${arch}-${VENDOR}-${OS} ${DESTDIR}/${pkglibdir}/noarch-${OS}
+RPMRC_GNU="`$RPM --eval '%{_gnu}'`"
+target_platform="`$RPM --eval '%{?_gnu:%undefine _gnu}%{_target_platform}'|sed -e "$canonarch_sed"`"
+target="`$RPM --eval '%{_target}'|sed -e "$canonarch_sed"`"
 
 case "$arch" in
-  i[3456]86) SUBSTS='s_i386_i386_ s_i386_i486_ s_i386_i586_ s_i386_i686_' ;;
+  i[3456]86|athlon) SUBSTS='s_i386_i386_ s_i386_i486_ s_i386_i586_ s_i386_i686_ s_i386_athlon_' ;;
   alpha*) SUBSTS='s_alpha_alpha_ s_alpha_alphaev5_ s_alpha_alphaev56_ s_alpha_alphapca56_ s_alpha_alphaev6_ s_alpha_alphaev67_' ;;
   sparc*) SUBSTS='s_sparc\(64\|v9\)_sparc_ s_sparc64_sparcv9_;s_sparc\([^v]\|$\)_sparcv9\1_ s_sparcv9_sparc64_;s_sparc\([^6]\|$\)_sparc64\1_' ;;
+  powerpc*|ppc*) SUBSTS='s_ppc64_ppc_ s_ppc\([^6]\|$\)_ppc64\1_' ;;
+  s390*) SUBSTS='s_s390x_s390_ s_s390\([^x]\|$\)_s390x\1_' ;;
   *) SUBSTS=y___ ;;
 esac
-base_arch=`echo $arch | sed -e 's_i?86_i386_;s_sparc.*_sparc_;s_alpha.*_alpha_'`
 
 for SUBST in $SUBSTS ; do
   ARCH=`echo $arch | sed -e $SUBST`
@@ -46,13 +44,16 @@ for SUBST in $SUBSTS ; do
   TARGET=`echo $target | sed -e $SUBST`
   LIB=lib
 
-  PPD="${DESTDIR}/${pkglibdir}/${ARCH}-${VENDOR}-${OS}"
+  PPD="${DESTDIR}/${pkglibdir}/${ARCH}-${OS}"
 
   [ -d $PPD ] || mkdir $PPD
 
-#  RPMRC_OPTFLAGS="`$RPM --target $TARGET --eval '%{optflags}'`"
   RPMRC_OPTFLAGS="`sed -n 's/^optflags: '$ARCH' //p' $RPMRC`"
   RPMRC_OPTFLAGS="`echo $RPMRC_OPTFLAGS | sed -e 's, ,\ ,g'`"
+  case $RPMRC_OPTFLAGS in
+  *-g*) ;;
+  *) RPMRC_OPTFLAGS="$RPMRC_OPTFLAGS -g" ;;
+  esac
 
   ARCH_INSTALL_POST='%{nil}'
   MULTILIBNO=
@@ -60,6 +61,12 @@ for SUBST in $SUBSTS ; do
     sparc-linux) MULTILIBNO=1 ;;
     sparcv9-linux) MULTILIBNO=1 ;;
     sparc64-linux) ARCH_INSTALL_POST=${pkglibdir}/brp-sparc64-linux; LIB=lib64; MULTILIBNO=2 ;;
+    s390-linux) MULTILIBNO=1 ;;
+    s390x-linux) LIB=lib64; MULTILIBNO=2 ;;
+    ppc-linux) MULTILIBNO=1 ;;
+    ppc64-linux) LIB=lib64; MULTILIBNO=2 ;;
+    i?86-linux|athlon-linux) MULTILIBNO=1 ;;
+    x86_64-linux) LIB=lib64; MULTILIBNO=2 ;;
   esac
 
   if [ -n "$MULTILIBNO" ]; then
@@ -68,27 +75,54 @@ for SUBST in $SUBSTS ; do
     MULTILIBSED='-e /^@MULTILIBSTART@/,/^@MULTILIBEND@/d'
   fi
 
-  cat $PLATFORM | \
-    sed -e "s,@RPMRC_OPTFLAGS@,$RPMRC_OPTFLAGS," \
-       -e "s,@RPMRC_ARCH@,$base_arch," \
+  case $VENDOR in
+  yellowdog)
+    VENDORSED='-e s,^@yellowdog@,,'
+    ;;
+  pld)
+    VENDORSED='-e s,^@pld@,,'
+    RPMRC_OPTFLAGS="`echo $RPMRC_OPTFLAGS | sed -e "s/ -g/ /"`"
+    ;;
+  mandrake)
+    VENDORSED='-e s,^@mandrake@,,'
+    RPMRC_OPTFLAGS="`echo $RPMRC_OPTFLAGS | sed -e s/i386/i686/`"
+    ;;
+  conectiva)
+    VENDORSED='-e s,^@conectiva@,,'
+    ;;
+  redhat)
+    VENDORSED='-e s,^@redhat@,,'
+    ;;
+  esac
+
+  cat $PLATFORM \
+  | sed -e "s,@RPMRC_OPTFLAGS@,$RPMRC_OPTFLAGS," \
+       -e "s,@RPMRC_ARCH@,$ARCH," \
+       -e "s,@RPMRC_GNU@,$RPMRC_GNU," \
        -e "s,@LIB@,$LIB," \
        -e "s,@ARCH_INSTALL_POST@,$ARCH_INSTALL_POST," \
        -e "s,@DEFAULTDOCDIR@,$DEFAULTDOCDIR," \
-       -e 's,\${,%{_,' \
+       -e '/\${\w*:-/!s,\${,%{_,' \
        $MULTILIBSED \
+       $VENDORSED \
+  | grep -v '^@' \
   > ${PPD}/macros
 
-  #
-  # Better try to create these too until the smoke clears. Yuck.
-  [ "${ARCH}-${VENDOR}-${OS}" = "${TARGET}" ] || {
-    rm -f ${DESTDIR}/${pkglibdir}/${TARGET}
-    ln -s ${ARCH}-${VENDOR}-${OS} ${DESTDIR}/${pkglibdir}/${TARGET}
-  }
-  [ "${ARCH}-${VENDOR}-${OS}" = "${TARGET_PLATFORM}" ] || {
-    rm -f ${DESTDIR}/${pkglibdir}/${TARGET_PLATFORM}
-    ln -s ${ARCH}-${VENDOR}-${OS} ${DESTDIR}/${pkglibdir}/${TARGET_PLATFORM}
-  }
-
 done
 
+{ cd ${DESTDIR}/${pkglibdir}
+  [ -L noarch-${OS} ] && rm -f noarch-${OS} 2>/dev/null
+  mkdir -p noarch-${OS}
+  sed -e "/^%_arch/s,${arch},noarch," ${arch}-${OS}/macros | grep -v '^%optflags' > noarch-${OS}/macros
+#  [ -d ${VENDOR} ] || mkdir ${VENDOR}
+#  for i in brp-* find-lang.sh find-provides find-requires perl.prov perl.req
+#  do
+#    sed -e "s,/usr/lib/rpm,/usr/lib/rpm/${VENDOR},g" < $i > ${VENDOR}/$i
+#    chmod +x ${VENDOR}/$i
+#  done
+##  chmod -x ${VENDOR}/perl.req
+#  echo "macrofiles:     /usr/lib/rpm/macros:/usr/lib/rpm/${VENDOR}/macros:/etc/rpm/macros.specspo:/etc/rpm/macros.cdb" > ${VENDOR}/rpmrc
+#  sed -e "s,/usr/lib/rpm,/usr/lib/rpm/${VENDOR},g" < ${arch}-${OS}/macros | grep -v '^%(_arch|optflags)' > ${VENDOR}/macros
+}
+
 rm $TEMPRC