Magellan Linux

Diff of /trunk/mage/usr/lib/mage/mage4.functions.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 226 by niro, Fri Sep 9 16:35:46 2005 UTC revision 449 by niro, Tue Mar 27 16:35:57 2007 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # Magellan Linux Installer Functions (mage.functions.sh)  # Magellan Linux Installer Functions (mage.functions.sh)
3  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.1 2005-09-09 16:35:38 niro Exp $  # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh,v 1.29 2007-03-27 16:35:57 niro Exp $
4    
5  mage_setup()  mage_setup()
6  {  {
# Line 361  install_characterdevices() Line 361  install_characterdevices()
361   local pkgname="$1"   local pkgname="$1"
362   local pathto   local pathto
363   local posix   local posix
364     local major
365     local minor
366   local IFS   local IFS
367    
368   # sanity checks; abort if not given   # sanity checks; abort if not given
# Line 374  install_characterdevices() Line 376  install_characterdevices()
376   # sets fieldseperator to "§" instead of " "   # sets fieldseperator to "§" instead of " "
377   IFS=§   IFS=§
378    
379   while read pathto posix   while read pathto posix major minor
380   do   do
381   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
382   [[ ${VERBOSE} = on ]] && echo -e "\t>>> CHAR: ${MROOT}${pathto}"   [[ ${VERBOSE} = on ]] && echo -e "\t>>> CHAR: ${MROOT}${pathto}"
383    
384   mknode -m ${posix} -c "${MROOT}${pathto}"   mknod -m ${posix} "${MROOT}${pathto}" c ${major} ${minor}
385   done < ${BUILDDIR}/${pkgname}/.char   done < ${BUILDDIR}/${pkgname}/.char
386    
387   # very important: unsetting the '§' fieldseperator   # very important: unsetting the '§' fieldseperator
# Line 432  install_database_entry() Line 434  install_database_entry()
434   local magefile   local magefile
435   local dbrecorddir   local dbrecorddir
436   local provide   local provide
437     local i
438    
439   # very basic getops   # very basic getops
440   for i in $*   for i in $*
# Line 473  install_database_entry() Line 476  install_database_entry()
476    
477   # create fake file descriptors   # create fake file descriptors
478   # used by virtual and source packages   # used by virtual and source packages
  local i  
479   for i in .dirs .symlinks .files .pipes .char   for i in .dirs .symlinks .files .pipes .char
480   do   do
481   touch ${dbrecorddir}/${i}   touch ${dbrecorddir}/${i}
# Line 504  install_database_entry() Line 506  install_database_entry()
506   provide="$(get_value_from_magefile PROVIDE ${magefile})"   provide="$(get_value_from_magefile PROVIDE ${magefile})"
507   if [ -n "${provide}" ]   if [ -n "${provide}" ]
508   then   then
509   virtuals_add "${provide}" "${pcat}/${pname}"   for i in ${provide}
510     do
511     virtuals_add "${i}" "${pcat}/${pname}"
512     done
513   fi   fi
514  }  }
515    
# Line 523  remove_database_entry() Line 528  remove_database_entry()
528   local magefile   local magefile
529   local dbrecorddir   local dbrecorddir
530   local provide   local provide
531     local i
532    
533   # very basic getops   # very basic getops
534   for i in $*   for i in $*
# Line 552  remove_database_entry() Line 558  remove_database_entry()
558   # abort if mage file not exists   # abort if mage file not exists
559   [ ! -f ${magefile} ] && die "remove_database_entry() ${magefile} not exist."   [ ! -f ${magefile} ] && die "remove_database_entry() ${magefile} not exist."
560    
561   # first unregister virtuals   # remove virtuals only if no other exist
562   provide="$(get_value_from_magefile PROVIDE ${magefile})"   if [[ $(count_installed_pkgs --pcat ${pcat} --pname ${pname}) -le 1 ]]
  if [ -n "${provide}" ]  
563   then   then
564   virtuals_del "${provide}" "${pcat}/${pname}"   # first unregister virtuals
565     provide="$(get_value_from_magefile PROVIDE ${magefile})"
566     if [ -n "${provide}" ]
567     then
568     for i in ${provide}
569     do
570     virtuals_del "${i}" "${pcat}/${pname}"
571     done
572     fi
573   fi   fi
574    
575   # removes database entry   # removes database entry
# Line 566  remove_database_entry() Line 579  remove_database_entry()
579   fi   fi
580  }  }
581    
582    # get the number of installed packages
583    count_installed_pkgs()
584    {
585     local pcat
586     local pname
587     local pkg
588     local i
589    
590     # very basic getops
591     for i in $*
592     do
593     case $1 in
594     --pcat|-c) shift; pcat="$1" ;;
595     --pname|-n) shift; pname="$1" ;;
596     esac
597     shift
598     done
599    
600     # sanity checks; abort if not given
601     [ -z "${pcat}" ] && die "pkg_count() \$pcat not given."
602     [ -z "${pname}" ] && die "pkg_count() \$pname not given."
603    
604     declare -i i=0
605     for pkg in $(get_uninstall_candidates --pcat ${pcat} --pname ${pname})
606     do
607     (( i++ ))
608     #echo "$i ${pkg}"
609     done
610    
611     # return the value
612     echo "${i}"
613    }
614    
615    
616  ###################################################  ###################################################
617  # function compare_mtime                          #  # function compare_mtime                          #
# Line 744  remove_files() Line 790  remove_files()
790   do   do
791   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
792    
793   if [ -e "${MROOT}${pathto}" ]   if [ ! -e "${MROOT}${pathto}" ]
794   then   then
795   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
796   echo -e "${COLRED}! exist${COLDEFAULT} === FILE: ${MROOT}${pathto}"   echo -e "${COLRED}! exist${COLDEFAULT} === FILE: ${MROOT}${pathto}"
# Line 758  remove_files() Line 804  remove_files()
804   # 1=keep me   #   # 1=keep me   #
805   case ${retval} in   case ${retval} in
806   0)   0)
807   [[ ${VERBOSE} = on ]] && echo -e "\t<<< FILE: ${MROOT}${pathto}"   # check if the file is config_protected
808   rm "${MROOT}${pathto}"   # ${MROOT} will automatically added if set !!
809   ;;   is_config_protected "${pathto}"
810     retval="$?"
811    
812     # 0 - not protected        #
813     # 1 - error                #
814     # 2 - protected            #
815     # 3 - protected but masked #
816    
817     case ${retval} in
818     # file is not protected - delete it
819     0|3)
820     [[ ${VERBOSE} = on ]] && echo -e "\t<<< FILE: ${MROOT}${pathto}"
821     rm "${MROOT}${pathto}"
822     ;;
823    
824     # file is protected, do not delete
825     2)
826     if [[ ${VERBOSE} = on ]]
827     then
828     echo -en "${COLRED}"
829     echo -n "! prot "
830     echo -en "${COLDEFAULT}"
831     echo " === FILE: ${MROOT}${pathto}"
832     fi
833     ;;
834     esac
835     ;;
836   1)   1)
837   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
838   echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: ${MROOT}${pathto}"   echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: ${MROOT}${pathto}"
# Line 932  remove_directories() Line 1003  remove_directories()
1003    
1004   [ ! -f ${MROOT}${INSTALLDB}/${pfull}/.char ] && die "remove_directories() .dirs not found"   [ ! -f ${MROOT}${INSTALLDB}/${pfull}/.char ] && die "remove_directories() .dirs not found"
1005    
  # uninstall of dirs ## added small hack to fix dirs  
  # must be reverse -> smage2 doesn't sort them  
  # -> using tac  
   
1006   # sets fieldseperator to "§" instead of " "   # sets fieldseperator to "§" instead of " "
1007   IFS=§   IFS=§
1008    
1009   while read pathto posix   # reversed order is mandatory !
1010     tac ${MROOT}${INSTALLDB}/${pfull}/.dirs | while read pathto posix
1011   do   do
1012   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
1013    
# Line 954  remove_directories() Line 1022  remove_directories()
1022   if [ -f "${MROOT}${pathto}/.keep" ]   if [ -f "${MROOT}${pathto}/.keep" ]
1023   then   then
1024   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
1025   echo -e "${COLRED}  .keep${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! .keep${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1026   continue   continue
1027   fi   fi
1028    
# Line 971  remove_directories() Line 1039  remove_directories()
1039   [[ ${VERBOSE} = on ]] && \   [[ ${VERBOSE} = on ]] && \
1040   echo -e "${COLRED}! empty${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! empty${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1041   fi   fi
1042   done < ${MROOT}${INSTALLDB}/${pfull}/.dirs   done
1043    
1044   # very important: unsetting the '§' fieldseperator   # very important: unsetting the '§' fieldseperator
1045   IFS=$'\n'   IFS=$'\n'
# Line 1038  fetch_packages() Line 1106  fetch_packages()
1106   local count_current   local count_current
1107   local count_total   local count_total
1108    
1109   [ -z "${MIRRORS}" ] && die "You have no mirrors defined. Please edit your /etc/mage.rc."   [ -z "${MIRRORS}" ] && die "You have no mirrors defined. Please edit your ${MAGERC}."
1110    
1111   # get count of total packages   # get count of total packages
1112   declare -i count_current=0   declare -i count_current=0
# Line 1090  fetch_packages() Line 1158  fetch_packages()
1158   --continue \   --continue \
1159   --progress bar \   --progress bar \
1160   --directory-prefix=${PKGDIR} \   --directory-prefix=${PKGDIR} \
1161   ${opt} ${mirr}/packages/${pkg}   ${opt} ${mirr}/${PACKAGES_SERVER_PATH}/${pkg}
1162   if [[ $? = 0 ]]   if [[ $? = 0 ]]
1163   then   then
1164   break   break
# Line 1113  syncmage() Line 1181  syncmage()
1181  {  {
1182   if [ -z "${RSYNC}" ]   if [ -z "${RSYNC}" ]
1183   then   then
1184   die "You have no rsync-mirrors defined. Please edit your /etc/mage.rc."   die "You have no rsync-mirrors defined. Please edit your ${MAGERC}."
1185   fi   fi
1186    
1187   local i   local i
1188   for i in ${RSYNC}   for i in ${RSYNC}
1189   do   do
1190   rsync \   rsync ${RSYNC_FETCH_OPTIONS} ${i} ${MAGEDIR}
  --recursive \  
  --links \  
  --perms \  
  --times \  
  --devices \  
  --timeout=600 \  
  --verbose \  
  --compress \  
  --progress \  
  --stats \  
  --delete \  
  --delete-after \  
  ${i} ${MAGEDIR}  
1191   if [[ $? = 0 ]]   if [[ $? = 0 ]]
1192   then   then
1193   break   break
# Line 1185  choppkgname() Line 1240  choppkgname()
1240   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]
1241   then   then
1242   #cuts ARCH and PBUILD   #cuts ARCH and PBUILD
1243   #ARCH comes from /etc/mage.rc   #ARCH comes from ${MAGERC}
1244   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")
1245    
1246   #cuts version number   #cuts version number
# Line 1218  pname2pcat() Line 1273  pname2pcat()
1273  # returns 0=stable 1=unstable  # returns 0=stable 1=unstable
1274  check_stable_package()  check_stable_package()
1275  {  {
1276     # first check if this magefile is not blacklisted
1277     blacklisted "$1" || return 1
1278    
1279   local STATE   local STATE
1280   STATE="$(get_value_from_magefile STATE "$1")"   STATE="$(get_value_from_magefile STATE "$1")"
1281    
1282   # state testing   # state testing
1283   if [[ ${USE_TESTING} = true ]]   if [[ ${USE_TESTING} = true ]] || [[ ${MAGE_DISTRIBUTION} = testing ]]
1284   then   then
1285   case ${STATE} in   case ${STATE} in
1286   testing|stable) return 0 ;;   testing|stable) return 0 ;;
# Line 1231  check_stable_package() Line 1289  check_stable_package()
1289   fi   fi
1290    
1291   # state unstable   # state unstable
1292   if [[ ${USE_UNSTABLE} = true ]]   if [[ ${USE_UNSTABLE} = true ]] || [[ ${MAGE_DISTRIBUTION} = unstable ]]
1293   then   then
1294   case ${STATE} in   case ${STATE} in
1295   unstable|testing|stable) return 0 ;;   unstable|testing|stable) return 0 ;;
# Line 1269  get_highest_magefile() Line 1327  get_highest_magefile()
1327   fi   fi
1328   done   done
1329    
1330   # stop here if HIGHEST_MAGEFILE is zero  # do not so anything
1331   # this package must be unstable or old  # # stop here if HIGHEST_MAGEFILE is zero
1332   if [ -z "${HIGHEST_MAGEFILE}" ]  # # this package must be unstable or old
1333   then  # if [ -z "${HIGHEST_MAGEFILE}" ]
1334   echo  # then
1335   echo -n "All packages named "  # echo
1336   echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}  # echo -n "All packages named "
1337   echo -n " are marked "  # echo -en ${COLRED}\""${PKGNAME%-*-*-*}\""${COLDEFAULT}
1338   echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}  # echo -n " are marked "
1339   echo "."  # echo -en ${COLRED}"*UNSTABLE*"${COLDEFAULT}
1340   echo "You need to declare USE_UNSTABLE=true to install this."  # echo "."
1341   echo  # echo "You need to declare USE_UNSTABLE=true to install this."
1342   echo "Example:"  # echo
1343   echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"  # echo "Example:"
1344   echo  # echo "         USE_UNSTABLE=true mage install ${PKGNAME%-*-*-*}"
1345   echo "Be warned that these packages are not stable and may cause serious problems."  # echo
1346   echo "You should know what you are doing, so don't complain about any damage."  # echo "Be warned that these packages are not stable and may cause serious problems."
1347   echo  # echo "You should know what you are doing, so don't complain about any damage."
1348   return 1  # echo
1349   fi  # return 1
1350    # fi
1351    
1352   echo "${HIGHEST_MAGEFILE}"   echo "${HIGHEST_MAGEFILE}"
1353   return 0   return 0
# Line 1388  get_uninstall_candidates() Line 1447  get_uninstall_candidates()
1447   local list   local list
1448   local pcatdir   local pcatdir
1449   local protected   local protected
1450     local i
1451    
1452   # very basic getops   # very basic getops
1453   for i in $*   for i in $*
# Line 1400  get_uninstall_candidates() Line 1460  get_uninstall_candidates()
1460   shift   shift
1461   done   done
1462    
1463   # sanity checks; abort if not given  # it's not good to complain here about empty pnames; better to continue later anyway
1464   [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."  # # sanity checks; abort if not given
1465    # [ -z "${search_pname}" ] && die "get_uninstall_candidates() \$search_pname not given."
1466    
1467    
1468   # check needed global vars   # check needed global vars
1469   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."   [ -z "${INSTALLDB}" ] && die "get_uninstall_candidates() \$INSTALLDB not set."
1470    
1471   # set pcatdir to '*' if empty   # set pcatdir to '*' if empty
1472   [ -z "${pcatdir}" ] && pcatdir=*   [ -z "${pcatdir}" ] && pcatdir='*'
1473    
1474   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*   for pkg in ${MROOT}${INSTALLDB}/${pcatdir}/*
1475   do   do
# Line 1493  virtuals_add() Line 1554  virtuals_add()
1554   local oldline   local oldline
1555   local line i   local line i
1556   local installed_file   local installed_file
1557     local OLDIFS
1558    
1559   if virtuals_read ${virtualname}   if virtuals_read ${virtualname}
1560   then   then
1561   # make shure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already   # make sure ${PKG_NAME} is *not* in ${VIRTUAL_NAME} already
1562   for i in $(virtuals_read ${virtualname} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1563   do   do
1564   if [[ ${i} = ${pkgname} ]]   if [[ ${i} = ${pkgname} ]]
# Line 1515  virtuals_add() Line 1577  virtuals_add()
1577   # make a backup   # make a backup
1578   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old   mv ${MROOT}${VIRTUALDB_FILE} ${MROOT}${VIRTUALDB_FILE}.old
1579    
1580     OLDIFS="${IFS}"
1581   IFS=$'\n'   IFS=$'\n'
1582   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)   for line in $(< ${MROOT}${VIRTUALDB_FILE}.old)
1583   do   do
# Line 1526  virtuals_add() Line 1589  virtuals_add()
1589   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${line}" >> ${MROOT}${VIRTUALDB_FILE}
1590   fi   fi
1591   done   done
1592     # unset IFS
1593   #unset IFS   IFS="${OLDIFS}"
1594   else   else
1595   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} >>> ${COLDEFAULT}"
1596   echo "register ${pkgname} as ${virtualname} ..."   echo "register ${pkgname} as ${virtualname} ..."
1597   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}   echo "${virtualname} ${pkgname}" >> ${MROOT}${VIRTUALDB_FILE}
1598   fi   fi
# Line 1541  virtuals_add() Line 1604  virtuals_add()
1604  #$1 virtualname; $2 pkgname  #$1 virtualname; $2 pkgname
1605  virtuals_del() {  virtuals_del() {
1606    
1607   local VIRTUAL_NAME PKG_NAME OLD_LINE METHOD line i x PKG_INSTALLED   local virtualname="$1"
1608     local pkgname="$2"
1609   VIRTUAL_NAME=$1   local oldline
1610   PKG_NAME=$2   local method
1611     local line i x
1612   #first check if exists   local pkg_installed
1613   if virtuals_read ${VIRTUAL_NAME}   local OLDIFS
1614    
1615     # first check if exists
1616     if virtuals_read ${virtualname}
1617   then   then
1618   #get method -> delall or update and check if ${PKG_NAME} exists in ${VIRTUAL_NAME}   # get method -> delall or update and check if ${PKG_NAME} exists in ${VIRTUAL_NAME}
1619   declare -i x=0   declare -i x=0
1620   for i in $(virtuals_read ${VIRTUAL_NAME} showpkgs)   for i in $(virtuals_read ${virtualname} showpkgs)
1621   do   do
1622   if [ "${i}" == "${PKG_NAME}" ]   if [[ ${i} = ${pkgname} ]]
1623   then   then
1624   PKG_INSTALLED=true   pkg_installed=true
1625   fi   fi
1626   ((x++))   ((x++))
1627   done   done
1628    
1629   #abort if not installed   # abort if not installed
1630   if [ "${PKG_INSTALLED}" != "true" ]   if [[ ${pkg_installed} != true ]]
1631   then   then
1632   echo "!!!! ${PKG_NAME} does not exists in ${VIRTUAL_NAME}."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1633     echo "${pkgname} does not exists in ${virtualname}."
1634   return 0   return 0
1635   fi   fi
1636    
1637   if [ ${x} -ge 2 ]   if [ ${x} -ge 2 ]
1638   then   then
1639   METHOD=update   method=update
1640   else   else
1641   METHOD=delall   method=delall
1642   fi   fi
1643    
1644   #get the complete line   # get the complete line
1645   OLD_LINE="$(virtuals_read ${VIRTUAL_NAME} showline)"   oldline="$(virtuals_read ${virtualname} showline)"
1646    
1647   #make a backup   # make a backup of the db
1648   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old   mv ${VIRTUALDB_FILE} ${VIRTUALDB_FILE}.old
1649    
1650   #parse virtualdb   # parse virtualdb
1651     OLDIFS="${IFS}"
1652   IFS=$'\n'   IFS=$'\n'
1653   for line in $(< ${VIRTUALDB_FILE}.old)   for line in $(< ${VIRTUALDB_FILE}.old)
1654   do   do
1655   if [ "${line}" == "${OLD_LINE}" ]   if [[ ${line} = ${oldline} ]]
1656   then   then
1657   #delall or update?   #delall or update?
1658   case ${METHOD} in   case ${method} in
1659   update)   update)
1660   echo "<<<< Unlinking ${PKG_NAME} from ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
1661   #del PKG_NAME from line   echo "Unlinking ${pkgname} from ${virtualname} in virtual database ..."
1662   echo "${line/ ${PKG_NAME}/}" >> ${VIRTUALDB_FILE}   # del PKG_NAME from line
1663     echo "${line/ ${pkgname}/}" >> ${VIRTUALDB_FILE}
1664   ;;   ;;
1665   delall)   delall)
1666   echo "<<<< Deleting ${VIRTUAL_NAME} in virtual database ..."   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
1667   #continue; do not write anything   echo "Deleting ${virtualname} in virtual database ..."
1668     # continue; do not write anything
1669   continue   continue
1670   ;;   ;;
1671   esac   esac
# Line 1603  virtuals_del() { Line 1673  virtuals_del() {
1673   echo "${line}" >> ${VIRTUALDB_FILE}   echo "${line}" >> ${VIRTUALDB_FILE}
1674   fi   fi
1675   done   done
1676   unset IFS   # unset IFS
1677     IFS="${OLDIFS}"
1678   else   else
1679   echo "!!!! ${VIRTUAL_NAME} does not exists in virtual database."   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1680     echo "${virtualname} does not exists in virtual database."
1681   fi   fi
1682  }  }
1683    
# Line 1637  minclude() Line 1709  minclude()
1709  {  {
1710   local i   local i
1711    
1712   if [ -n "$@" ]   if [[ -n $* ]]
1713   then   then
1714   for i in $@   for i in $*
1715   do   do
1716   [[ ${MAGEDEBUG} = on ]] && \   [[ ${MAGEDEBUG} = on ]] && \
1717   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
# Line 1653  sminclude() Line 1725  sminclude()
1725  {  {
1726   local i   local i
1727    
1728   if [ -n "$@" ]   if [[ -n $* ]]
1729   then   then
1730   for i in $@   for i in $*
1731   do   do
1732   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"   echo "--- Including ${SMAGESCRIPTSDIR}/include/${i}.sminc"
1733   source ${SMAGESCRIPTSDIR}/include/${i}.sminc   source ${SMAGESCRIPTSDIR}/include/${i}.sminc
# Line 1670  is_newer_mage_version_available() Line 1742  is_newer_mage_version_available()
1742   local newest_mage   local newest_mage
1743   local installed_mage   local installed_mage
1744    
1745   newest_mage="$( CATEGORIE=app-mage MAGENAME=mage get_highest_magefile;echo $(basename ${MAGEFILE} .mage) )"   newest_mage="$(basename $(get_highest_magefile app-mage mage) .mage)"
1746   installed_mage="$(magequery -n mage | cut -d' ' -f5)"   installed_mage="$(magequery -n mage | cut -d' ' -f5)"
1747    
1748   if [[ ${newest_mage} > ${installed_mage} ]]   if [[ ${newest_mage} > ${installed_mage} ]]
# Line 1679  is_newer_mage_version_available() Line 1751  is_newer_mage_version_available()
1751   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}   echo -en ${COLRED}"An update for your packetmanager is available. "${COLDEFAULT}
1752   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}   echo -e ${COLBLUE}"[ ${newest_mage} ]"${COLDEFAULT}
1753   echo "It is recommened to install this newer version"   echo "It is recommened to install this newer version"
1754   echo "or your current system installation may brake."   echo "or your current system installation may break."
1755   echo   echo
1756   echo -en "Please update mage by running "   echo -en "Please update mage by running "
1757   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}   echo -e ${COLGREEN}"'mage install mage'"${COLDEFAULT}
# Line 1951  get_value_from_magefile() Line 2023  get_value_from_magefile()
2023   local magefile="$2"   local magefile="$2"
2024   local value   local value
2025    
2026     [[ -z ${var} ]] && return 1
2027     [[ -z ${magefile} ]] && return 1
2028    
2029   # local all possible vars of a mage file   # local all possible vars of a mage file
2030   # to prevent bad issues   # to prevent bad issues
2031   local PKGNAME   local PKGNAME
# Line 1963  get_value_from_magefile() Line 2038  get_value_from_magefile()
2038   local PKGTYPE   local PKGTYPE
2039   local preinstall   local preinstall
2040   local postinstall   local postinstall
2041     local preremove
2042     local postremove
2043    
2044   # sanity checks   # sanity checks
2045   [ -f ${magefile} ] && source ${magefile} || \   [ -f ${magefile} ] && source ${magefile} || \
# Line 1972  get_value_from_magefile() Line 2049  get_value_from_magefile()
2049   source ${magefile}   source ${magefile}
2050   eval value=\$$(echo ${var})   eval value=\$$(echo ${var})
2051   echo "${value}"   echo "${value}"
2052    
2053     # unset these functions
2054     unset -f preinstall
2055     unset -f postinstall
2056     unset -f preremove
2057     unset -f postremove
2058  }  }
2059    
2060  mage_install()  mage_install()
# Line 1988  mage_install() Line 2071  mage_install()
2071   local PKGTYPE   local PKGTYPE
2072   local preinstall   local preinstall
2073   local postinstall   local postinstall
2074     local preremove
2075     local postremove
2076    
2077   local pcat   local pcat
2078   local pname   local pname
# Line 2073  mage_install() Line 2158  mage_install()
2158   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2   smage2file=${SMAGESCRIPTSDIR}/${pname}/${pname}-${pver}-${pbuild}.smage2
2159   if [ -f "${smage2file}" ]   if [ -f "${smage2file}" ]
2160   then   then
2161     echo -e " ${COLBLUE}***${COLDEFAULT} building package from source ... "
2162   smage2 ${smage2file} || die "compile failed"   smage2 ${smage2file} || die "compile failed"
2163   else   else
2164   echo   echo
# Line 2086  mage_install() Line 2172  mage_install()
2172   if [[ ${PKGTYPE} != virtual ]] && \   if [[ ${PKGTYPE} != virtual ]] && \
2173   [[ ${PKGTYPE} != sources ]]   [[ ${PKGTYPE} != sources ]]
2174   then   then
2175   # show a verbose message on src-install   echo -e " ${COLBLUE}***${COLDEFAULT} merging files into system ... "
  if [[ ${src_install} = true ]]  
  then  
  echo -ne "${COLBLUE} *** ${COLDEFAULT}"  
  echo -ne "merging files: "  
  echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  
  echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"  
  fi  
2176   build_doinstall ${PKGNAME}   build_doinstall ${PKGNAME}
2177   fi   fi
2178    
# Line 2149  mage_install() Line 2228  mage_install()
2228  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2229  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2230   echo "successfully installed."   echo "successfully installed."
2231    
2232     # unset these functions
2233     unset -f preinstall
2234     unset -f postinstall
2235     unset -f preremove
2236     unset -f postremove
2237  }  }
2238    
2239  md5sum_packages()  md5sum_packages()
# Line 2253  uninstall_packages() Line 2338  uninstall_packages()
2338   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2339   echo "following candidate(s) will be removed:"   echo "following candidate(s) will be removed:"
2340   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2341   echo -ne "\033[1m${can_pcat}/${can_pname}:${COLDEFAULT}"   echo -ne "${COLBOLD}${can_pcat}/${can_pname}:${COLDEFAULT}"
2342   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"   echo -e "${COLRED} ${can_ver_list} ${COLDEFAULT}"
2343   echo   echo
2344   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   if [ ${MAGE_UNINSTALL_TIMEOUT} -gt 0 ]
2345   echo "( Press [CTRL+C] to abort )"   then
2346   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2347   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."   echo "( Press [CTRL+C] to abort )"
2348   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2349   do   echo -n "Waiting ${MAGE_UNINSTALL_TIMEOUT} seconds ..."
2350   echo -ne "${COLRED} ${i}${COLDEFAULT}"   for ((i=MAGE_UNINSTALL_TIMEOUT; i >= 0; i--))
2351   sleep 1   do
2352   done   echo -ne "${COLRED} ${i}${COLDEFAULT}"
2353   echo   sleep 1
2354   echo   done
2355     echo
2356     echo
2357     fi
2358    
2359   for pkg in ${list}   for pkg in ${list}
2360   do   do
# Line 2304  mage_uninstall() Line 2392  mage_uninstall()
2392   local PKGTYPE   local PKGTYPE
2393   local preinstall   local preinstall
2394   local postinstall   local postinstall
2395     local preremove
2396     local postremove
2397    
2398   local pcat   local pcat
2399   local pname   local pname
# Line 2339  mage_uninstall() Line 2429  mage_uninstall()
2429   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"   echo -ne "${COLBLUE} <<< ${COLDEFAULT}"
2430   echo -n "removing: "   echo -n "removing: "
2431   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"   echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2432   echo -e "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT}"   echo -e "${COLRED}${pname}-${pver}-${pbuild}${COLDEFAULT}"
2433    
2434   magefile="${MAGEDIR}/${pcat}/${pname}/${pname}-${pver}-${pbuild}.mage"   magefile="${INSTALLDB}/${pcat}/${pname}-${pver}-${pbuild}/${pname}-${pver}-${pbuild}.mage"
2435   source ${magefile}   source ${magefile}
2436    
2437   ## preremove scripts   ## preremove scripts
# Line 2401  mage_uninstall() Line 2491  mage_uninstall()
2491  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"  # echo -ne "${COLBLUE}${pcat}/${COLDEFAULT}"
2492  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "  # echo -ne "${COLGREEN}${pname}-${pver}-${pbuild}${COLDEFAULT} "
2493   echo "successfully removed."   echo "successfully removed."
2494    
2495     # unset these functions
2496     unset -f preinstall
2497     unset -f postinstall
2498     unset -f preremove
2499     unset -f postremove
2500  }  }
2501    
2502  show_etc_update_mesg() {  show_etc_update_mesg() {
# Line 2415  show_etc_update_mesg() { Line 2511  show_etc_update_mesg() {
2511   echo "Please run 'etc-update' to update your configuration files."   echo "Please run 'etc-update' to update your configuration files."
2512   echo   echo
2513  }  }
2514    
2515    pkgsearch()
2516    {
2517     local string="$1"
2518     local result
2519     local pkg
2520     local pcat
2521     local pname
2522     local magefile
2523     local pver
2524     local pbuild
2525     local state
2526     local descriptiom
2527     local homepage
2528     local i
2529     local all_installed
2530     local ipver
2531     local ipbuild
2532     local latest_available
2533    
2534     # only names no versions
2535     result="$(find ${MAGEDIR} -mindepth 2 -maxdepth 2 -type d -name '*'${string}'*'| sed '/profiles/d' | sed '/includes/d')"
2536     #result="$(find ${MAGEDIR} -type f -name '*'${string}'*'.mage | sort)"
2537    
2538     # nothing found
2539     [[ -z ${result} ]] && die "No package found containing '${string}' in the name."
2540    
2541     for pkg in ${result}
2542     do
2543     # dirty, but does the job
2544     pcat="$(magename2pcat ${pkg}/foo)"
2545     pname="$(magename2pname ${pkg}-foo-foo)"
2546    
2547     # get highest version available
2548     magefile=$(get_highest_magefile ${pcat} ${pname})
2549    
2550     if [[ ! -z ${magefile} ]]
2551     then
2552     # now get all needed infos to print a nice output
2553     pver="$(magename2pver ${magefile})"
2554     pbuild="$(magename2pbuild ${magefile})"
2555     state="$(get_value_from_magefile STATE ${magefile})"
2556     description="$(get_value_from_magefile DESCRIPTION ${magefile})"
2557     homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
2558    
2559     # all installed
2560     for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
2561     do
2562     ipver="$(magename2pver ${i})"
2563     ipbuild="$(magename2pbuild ${i})"
2564    
2565     if [[ -z ${all_installed} ]]
2566     then
2567     all_installed="${ipver}-${ipbuild}"
2568     else
2569     all_installed="${all_installed} ${ipver}-${ipbuild}"
2570     fi
2571     done
2572     [[ -z ${all_installed} ]] && all_installed="none"
2573    
2574     case ${state} in
2575     stable) state=${COLGREEN}"[s] ";;
2576     testing) state=${COLYELLOW}"[t] ";;
2577     unstable) state=${COLRED}"[u] ";;
2578     old) state=${COLGRAY}"[o] ";;
2579     esac
2580    
2581     latest_available="${pver}-${pbuild}"
2582     else
2583     # package is masked
2584     state="${COLRED}[m] "
2585     latest_available="${COLRED}masked for this distribution.${COLDEFAULT}"
2586     fi
2587    
2588     echo -e "${state}${pcat}/${pname}"${COLDEFAULT}
2589     echo -e "      Latest available:   ${latest_available}"
2590     echo "      Installed versions: ${all_installed}"
2591     echo "      Description: ${description}"
2592     echo "      Homepage: ${homepage}"
2593     echo
2594    
2595     unset pcat
2596     unset pname
2597     unset magefile
2598     unset pver
2599     unset pbuild
2600     unset state
2601     unset descriptiom
2602     unset homepage
2603     unset all_installed
2604     unset ipver
2605     unset ipbuild
2606     done
2607    }
2608    
2609    export_inherits()
2610    {
2611     local include="$1"
2612     shift
2613    
2614     while [ "$1" ]
2615     do
2616     local functions="$1"
2617    
2618     # sanity checks
2619     [ -z "${include}" ] && die "export_inherits(): \$include not given."
2620     [ -z "${functions}" ] && die "export_inherits(): \$functions not given."
2621    
2622     eval "${functions}() { ${include}_${functions} ; }"
2623    
2624     # debug
2625     [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"
2626    
2627     shift
2628     done
2629    }
2630    
2631    mlibdir()
2632    {
2633     local libdir=lib
2634     [[ ${ARCH} = x86_64 ]] && libdir=lib64
2635    
2636     echo "${libdir}"
2637    }
2638    
2639    ## blacklisted ${magefile}
2640    blacklisted()
2641    {
2642     [[ -z ${MAGE_DISTRIBUTION} ]] && local MAGE_DISTRIBUTION=stable
2643    
2644     # compat
2645     [[ ${USE_UNSTABLE} = true ]] && local MAGE_DISTRIBUTION=unstable
2646     [[ ${USE_TESTING} = true ]] && local MAGE_DISTRIBUTION=testing
2647    
2648     local EXCLUDED="${MROOT}/etc/mage-profile/package.blacklist-${ARCH}-${MAGE_DISTRIBUTION}"
2649    
2650     # return 0 if the list not exist; nothin is masked
2651     [[ ! -f ${EXCLUDED} ]] && return 0
2652    
2653     local MAGEFILE="$1"
2654    
2655     local PCAT="$(magename2pcat ${MAGEFILE})"
2656     local PNAME="$(magename2pname ${MAGEFILE})"
2657     local PVER="$(magename2pver ${MAGEFILE})"
2658     local PBUILD="$(magename2pbuild ${MAGEFILE})"
2659    
2660     local EXPCAT EXPNAME EXPVER EXPBUILD
2661     while read EXPCAT EXPNAME EXPVER EXPBUILD
2662     do
2663     # ignore spaces and comments
2664             case "${EXPCAT}" in
2665                     \#*|"") continue ;;
2666             esac
2667    
2668     # exclude full pver
2669     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2670     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2671     [[ -n ${PVER} ]] && [[ -n ${PBUILD} ]] &&
2672     [[ -n ${EXPVER} ]] && [[ -n ${EXPBUILD} ]]
2673     then
2674     [[ ${EXPCAT}/${EXPNAME}-${EXPVER}-${EXPBUILD} = ${PCAT}/${PNAME}-${PVER}-${PBUILD} ]] && return 1
2675     fi
2676    
2677     # exclude pcat/pname only
2678     if [[ -n ${PCAT} ]] && [[ -n ${PNAME} ]] &&
2679     [[ -n ${EXPCAT} ]] && [[ -n ${EXPNAME} ]] &&
2680     [[ -z ${EXPVER} ]] && [[ -z ${EXPBUILD} ]]
2681     then
2682     [[ ${EXPCAT}/${EXPNAME} = ${PCAT}/${PNAME} ]] && return 1
2683     fi
2684     done << EOF
2685    $( cat ${EXCLUDED}; echo)
2686    EOF
2687    
2688     return 0
2689    }
2690    

Legend:
Removed from v.226  
changed lines
  Added in v.449