Magellan Linux

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

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

revision 1549 by niro, Tue Dec 27 10:43:40 2011 UTC revision 1675 by niro, Mon Feb 6 09:45:23 2012 UTC
# Line 66  mchecksum() Line 66  mchecksum()
66   case ${method} in   case ${method} in
67   md5) cmd="md5sum" ;;   md5) cmd="md5sum" ;;
68   sha256) cmd="sha256sum" ;;   sha256) cmd="sha256sum" ;;
69   *) die "mchecksum(): unkown method '${method}'" ;;   *) die "mchecksum(): unknown method '${method}'" ;;
70   esac   esac
71    
72   if [[ -d ${rundir} ]]   if [[ -d ${rundir} ]]
73   then   then
74   pushd ${rundir} &> /dev/null   pushd ${rundir} &> /dev/null
75   ${cmd} -c ${file} &> /dev/null   # be verbose here
76     ${cmd} -c ${file} #&> /dev/null
77   retval="$?"   retval="$?"
78   popd &> /dev/null   popd &> /dev/null
79   else   else
# Line 82  mchecksum() Line 83  mchecksum()
83   return "${retval}"   return "${retval}"
84  }  }
85    
86    mcheckemptydir()
87    {
88     local dir="$1"
89     local retval=1
90    
91     if [[ ! -d ${dir} ]]
92     then
93     echo "mcheckemptydir(): '${dir}' is not a directory!"
94     retval=3
95     else
96     shopt -s nullglob dotglob
97     files=( ${dir}/* )
98     (( ${#files[*]} )) || retval=0
99     shopt -u nullglob dotglob
100     fi
101    
102     return ${retval}
103    }
104    
105  unpack_packages()  unpack_packages()
106  {  {
107   local list="$@"   local list="$@"
# Line 206  install_directories() Line 226  install_directories()
226   while read pathto posix user group   while read pathto posix user group
227   do   do
228   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
229   [[ ${VERBOSE} = on ]] && echo -e "\t>>> DIR:  ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t>>> DIR:  ${MROOT}${pathto}"
230    
231   # monitors /etc/env.d -> env-rebuild   # monitors /etc/env.d -> env-rebuild
232   [[ ${pathto} = /etc/env.d ]] && export MAGE_ENV_REBUILD=true   [[ ${pathto} = /etc/env.d ]] && export MAGE_ENV_REBUILD=true
# Line 282  install_files() Line 302  install_files()
302   case ${retval} in   case ${retval} in
303   # file is not protected - (over)write it   # file is not protected - (over)write it
304   0|3)   0|3)
305   [[ ${VERBOSE} = on ]] && echo -e "\t>>> FILE: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t>>> FILE: ${MROOT}${pathto}"
306   install -m "${posix}" -o "${user}" -g "${group}" \   install -m "${posix}" -o "${user}" -g "${group}" \
307   ${BUILDDIR}/${pkgname}/binfiles/"${pathto}" \   ${BUILDDIR}/${pkgname}/binfiles/"${pathto}" \
308   "${MROOT}${pathto}"   "${MROOT}${pathto}"
# Line 300  install_files() Line 320  install_files()
320    
321   # file is protected, write backup file   # file is protected, write backup file
322   2)   2)
323   if [[ ${VERBOSE} = on ]]   if mqueryfeature "verbose"
324   then   then
325   echo -en "${COLRED}"   echo -en "${COLRED}"
326   echo -n "! prot "   echo -n "! prot "
# Line 331  install_files() Line 351  install_files()
351    
352   # file is protected but ignored, delete the update/do nothing   # file is protected but ignored, delete the update/do nothing
353   4)   4)
354   if [[ ${VERBOSE} = on ]]   if mqueryfeature "verbose"
355   then   then
356   echo -en "${COLRED}"   echo -en "${COLRED}"
357   echo -n "! ignr "   echo -n "! ignr "
# Line 390  install_symlinks() Line 410  install_symlinks()
410   while read pathto posix link mtime   while read pathto posix link mtime
411   do   do
412   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
413   [[ ${VERBOSE} = on ]] && echo -e "\t>>> LINK: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t>>> LINK: ${MROOT}${pathto}"
414    
415   ln -snf "${link}" "${MROOT}${pathto}"   ln -snf "${link}" "${MROOT}${pathto}"
416    
# Line 440  install_blockdevices() Line 460  install_blockdevices()
460   while read pathto posix major minor user group   while read pathto posix major minor user group
461   do   do
462   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
463   [[ ${VERBOSE} = on ]] && echo -e "\t>>> PIPE: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t>>> PIPE: ${MROOT}${pathto}"
464    
465   mknod -m "${posix}" "${MROOT}${pathto}"   mknod -m "${posix}" "${MROOT}${pathto}"
466   # make it optional atm !!   # make it optional atm !!
# Line 484  install_characterdevices() Line 504  install_characterdevices()
504   while read pathto posix major minor user group   while read pathto posix major minor user group
505   do   do
506   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
507   [[ ${VERBOSE} = on ]] && echo -e "\t>>> CHAR: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t>>> CHAR: ${MROOT}${pathto}"
508    
509   mknod -m ${posix} "${MROOT}${pathto}" b "${major}" "${minor}"   mknod -m ${posix} "${MROOT}${pathto}" b "${major}" "${minor}"
510    
# Line 528  install_fifos() Line 548  install_fifos()
548   while read pathto posix user group   while read pathto posix user group
549   do   do
550   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
551   [[ ${VERBOSE} = on ]] && echo -e "\t>>> FIFO: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t>>> FIFO: ${MROOT}${pathto}"
552    
553   mkfifo -m "${posix}" "${MROOT}${pathto}"   mkfifo -m "${posix}" "${MROOT}${pathto}"
554   chown "${user}:${group}" "${MROOT}${pathto}"   chown "${user}:${group}" "${MROOT}${pathto}"
# Line 862  remove_symlinks() Line 882  remove_symlinks()
882   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
883   if [ ! -L "${MROOT}${pathto}" ]   if [ ! -L "${MROOT}${pathto}" ]
884   then   then
885   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
886   echo -e "${COLRED}! exist${COLDEFAULT} === LINK: ${MROOT}${pathto}"   echo -e "${COLRED}! exist${COLDEFAULT} === LINK: ${MROOT}${pathto}"
887   continue   continue
888   fi   fi
# Line 874  remove_symlinks() Line 894  remove_symlinks()
894   # 1=keep me   #   # 1=keep me   #
895   case ${retval} in   case ${retval} in
896   0)   0)
897   [[ ${VERBOSE} = on ]] && echo -e "\t<<< LINK: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t<<< LINK: ${MROOT}${pathto}"
898   rm "${MROOT}${pathto}"   rm "${MROOT}${pathto}"
899   ;;   ;;
900    
901   1)   1)
902   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
903   echo -e "${COLRED}! mtime${COLDEFAULT} === LINK: ${MROOT}${pathto}"   echo -e "${COLRED}! mtime${COLDEFAULT} === LINK: ${MROOT}${pathto}"
904   ;;   ;;
905   esac   esac
# Line 946  remove_files() Line 966  remove_files()
966    
967   if [ ! -e "${MROOT}${pathto}" ]   if [ ! -e "${MROOT}${pathto}" ]
968   then   then
969   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
970   echo -e "${COLRED}! exist${COLDEFAULT} === FILE: ${MROOT}${pathto}"   echo -e "${COLRED}! exist${COLDEFAULT} === FILE: ${MROOT}${pathto}"
971   continue   continue
972   fi   fi
# Line 972  remove_files() Line 992  remove_files()
992   case ${retval} in   case ${retval} in
993   # file is not protected - delete it   # file is not protected - delete it
994   0|3)   0|3)
995   [[ ${VERBOSE} = on ]] && echo -e "\t<<< FILE: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t<<< FILE: ${MROOT}${pathto}"
996   rm "${MROOT}${pathto}"   rm "${MROOT}${pathto}"
997   ;;   ;;
998    
999   # file is protected, do not delete   # file is protected, do not delete
1000   2)   2)
1001   if [[ ${VERBOSE} = on ]]   if mqueryfeature "verbose"
1002   then   then
1003   echo -en "${COLRED}"   echo -en "${COLRED}"
1004   echo -n "! prot "   echo -n "! prot "
# Line 989  remove_files() Line 1009  remove_files()
1009    
1010   # file is protected but ignored, delete the update/do nothing   # file is protected but ignored, delete the update/do nothing
1011   4)   4)
1012   if [[ ${VERBOSE} = on ]]   if mqueryfeature "verbose"
1013   then   then
1014   echo -en "${COLRED}"   echo -en "${COLRED}"
1015   echo -n "! ignr "   echo -n "! ignr "
# Line 1001  remove_files() Line 1021  remove_files()
1021   esac   esac
1022   ;;   ;;
1023   1)   1)
1024   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
1025   echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: ${MROOT}${pathto}"   echo -e "${COLRED}! mtime${COLDEFAULT} === FILE: ${MROOT}${pathto}"
1026   ;;   ;;
1027   esac   esac
# Line 1063  remove_blockdevices() Line 1083  remove_blockdevices()
1083   do   do
1084   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
1085    
1086   [[ ${VERBOSE} = on ]] && echo -e "\t<<< PIPE: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t<<< PIPE: ${MROOT}${pathto}"
1087   rm "${MROOT}${pathto}"   rm "${MROOT}${pathto}"
1088   done < ${MROOT}${INSTALLDB}/${pfull}/.pipes   done < ${MROOT}${INSTALLDB}/${pfull}/.pipes
1089    
# Line 1123  remove_characterdevices() Line 1143  remove_characterdevices()
1143   do   do
1144   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
1145    
1146   [[ ${VERBOSE} = on ]] && echo -e "\t<<< CHAR: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t<<< CHAR: ${MROOT}${pathto}"
1147   rm "${MROOT}${pathto}"   rm "${MROOT}${pathto}"
1148   done < ${MROOT}${INSTALLDB}/${pfull}/.char   done < ${MROOT}${INSTALLDB}/${pfull}/.char
1149    
# Line 1185  remove_fifos() Line 1205  remove_fifos()
1205   do   do
1206   [ -z "${pathto}" ] && continue   [ -z "${pathto}" ] && continue
1207    
1208   [[ ${VERBOSE} = on ]] && echo -e "\t<<< FIFO: ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t<<< FIFO: ${MROOT}${pathto}"
1209   rm "${MROOT}${pathto}"   rm "${MROOT}${pathto}"
1210   done < ${MROOT}${INSTALLDB}/${pfull}/.fifo   done < ${MROOT}${INSTALLDB}/${pfull}/.fifo
1211    
# Line 1246  remove_directories() Line 1266  remove_directories()
1266    
1267   if [ ! -d "${MROOT}${pathto}" ]   if [ ! -d "${MROOT}${pathto}" ]
1268   then   then
1269   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
1270   echo -e "${COLRED}! exist${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! exist${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1271   continue   continue
1272   fi   fi
# Line 1254  remove_directories() Line 1274  remove_directories()
1274   # exclude .keep directories   # exclude .keep directories
1275   if [ -f "${MROOT}${pathto}/.keep" ]   if [ -f "${MROOT}${pathto}/.keep" ]
1276   then   then
1277   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
1278   echo -e "${COLRED}! .keep${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! .keep${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1279   continue   continue
1280   fi   fi
# Line 1267  remove_directories() Line 1287  remove_directories()
1287    
1288   if rmdir "${MROOT}${pathto}" &> /dev/null   if rmdir "${MROOT}${pathto}" &> /dev/null
1289   then   then
1290   [[ ${VERBOSE} = on ]] && echo -e "\t<<< DIR:  ${MROOT}${pathto}"   mqueryfeature "verbose" && echo -e "\t<<< DIR:  ${MROOT}${pathto}"
1291   else   else
1292   [[ ${VERBOSE} = on ]] && \   mqueryfeature "verbose" && \
1293   echo -e "${COLRED}! empty${COLDEFAULT} === DIR:  ${MROOT}${pathto}"   echo -e "${COLRED}! empty${COLDEFAULT} === DIR:  ${MROOT}${pathto}"
1294   fi   fi
1295   done   done
# Line 1401  mdownload() Line 1421  mdownload()
1421   real_uris="$(convertmirrors ${uri})"   real_uris="$(convertmirrors ${uri})"
1422    
1423   # verbose or not   # verbose or not
1424   [[ ${VERBOSE} = off ]] && wget_opts="--quiet"   mqueryfeature "!verbose" && wget_opts+=" --quiet"
1425    
1426   # filter wget options if busybox was found   # filter wget options if busybox was found
1427   wget_opts="$(busybox_filter_wget_options ${WGET_FETCH_OPTIONS})"   wget_opts+=" $(busybox_filter_wget_options ${WGET_FETCH_OPTIONS})"
1428    
1429   # create outputdir   # create outputdir
1430   [[ ! -d ${outputdir} ]] && install -d "${outputdir}"   [[ ! -d ${outputdir} ]] && install -d "${outputdir}"
# Line 1488  fetch_packages() Line 1508  fetch_packages()
1508   echo -ne " ${COLBLUE}***${COLDEFAULT}"   echo -ne " ${COLBLUE}***${COLDEFAULT}"
1509   echo -e " fetching (${count_current}/${count_total}): ${pkg} ... "   echo -e " fetching (${count_current}/${count_total}): ${pkg} ... "
1510   mdownload --uri "package://${pkg}" --dir "${PKGDIR}" || die "Could not download ${pkg}"   mdownload --uri "package://${pkg}" --dir "${PKGDIR}" || die "Could not download ${pkg}"
   
1511   if [ ! -f ${PKGDIR}/${pkg} ]   if [ ! -f ${PKGDIR}/${pkg} ]
1512   then   then
1513   die "Package '${pkg}' after download not found in '${PKGDIR}'"   die "Package '${pkg}' after download not found in '${PKGDIR}'"
# Line 1546  syncmage_tarball() Line 1565  syncmage_tarball()
1565    
1566   for mirr in ${MIRRORS}   for mirr in ${MIRRORS}
1567   do   do
1568   # path without distribution   # path without distribution
1569   mymirr="${mirr%/*}"   # (only for stable|testing|unstable and not DISTROTAG)
1570     case ${mirr##*/} in
1571     stable|testing|unstable) mymirr="${mirr%/*}";;
1572     *) mymirr="${mirr}";;
1573     esac
1574    
1575   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1576   echo "fetching latest md5 from ${mymirr} ..."   echo "fetching latest md5 from ${mymirr} ..."
1577   [[ ${VERBOSE} = off ]] && opt="--quiet"   mqueryfeature "!verbose" && opt="--quiet"
1578   wget \   wget \
1579   ${wget_opts} \   ${wget_opts} \
1580   --directory-prefix=${temp} \   --directory-prefix=${temp} \
# Line 1580  syncmage_tarball() Line 1603  syncmage_tarball()
1603   else   else
1604   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1605   echo -n "checking md5sum... "   echo -n "checking md5sum... "
1606   ( cd ${temp}; md5sum -c ${latest_md5} ) || die "md5 for ${latest_tarball} failed"   mchecksum --rundir "${temp}" --file "${latest_md5}" --method md5 || die "md5 for ${latest_tarball} failed"
1607   fi   fi
1608    
1609   if [[ -d ${MAGEDIR} ]]   if [[ -d ${MAGEDIR} ]]
1610   then   then
1611   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
1612   echo "cleaning old mage-tree ${MAGEDIR}..."   echo "cleaning old mage-tree ${MAGEDIR}..."
1613   rm -rf ${MAGEDIR}   # honor mountpoints and empty dirs
1614     if mountpoint -q ${MAGEDIR}
1615     then
1616     if ! mcheckemptydir ${MAGEDIR}
1617     then
1618     find ${MAGEDIR} -mindepth 1 -maxdepth 1 | xarg --no-run-if-empty rm -r
1619     fi
1620     else
1621     rm -rf ${MAGEDIR}
1622     fi
1623   fi   fi
1624    
1625   if need_busybox_support tar   if need_busybox_support tar
# Line 1646  xtitleclean() Line 1678  xtitleclean()
1678  }  }
1679    
1680    
1681  # cuts full pathnames or versionized names down to basename  # unused?
1682  choppkgname()  #
1683  {  # # cuts full pathnames or versionized names down to basename
1684   #we want this only if full name was used  # choppkgname()
1685   if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]  # {
1686   then  # #we want this only if full name was used
1687   #cuts ARCH and PBUILD  # if [ -n "$(echo ${MAGENAME}|fgrep .mage)" ]
1688   #ARCH comes from ${MAGERC}  # then
1689   MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}-r*.::g")  # #cuts ARCH and PBUILD
1690    # #ARCH comes from ${MAGERC}
1691    # MAGENAME=$(echo ${MAGENAME} |sed -e "s:-${ARCH}$(print_distrotag)-r*.::g")
1692    #
1693    # #cuts version number
1694    # MAGENAME=$(basename ${MAGENAME%-*} .mage)
1695    # fi
1696    # }
1697    
  #cuts version number  
  MAGENAME=$(basename ${MAGENAME%-*} .mage)  
  fi  
 }  
1698    
1699  # get_categorie $PNAME, returns CATEGORIE  # get_categorie $PNAME, returns CATEGORIE
1700  # $1=pname  # $1=pname
# Line 1738  get_highest_magefile() Line 1773  get_highest_magefile()
1773   then   then
1774   HIGHEST_MAGEFILE=${magefile}   HIGHEST_MAGEFILE=${magefile}
1775   #for debug only   #for debug only
1776   [[ ${MAGEDEBUG} = on ]] && echo "HIGHEST_MAGEFILE=${HIGHEST_MAGEFILE}"   mqueryfeature "debug" && echo "HIGHEST_MAGEFILE=${HIGHEST_MAGEFILE}"
1777   fi   fi
1778   done   done
1779    
# Line 2146  minclude() Line 2181  minclude()
2181   then   then
2182   for i in $*   for i in $*
2183   do   do
2184   [[ ${MAGEDEBUG} = on ]] && \   mqueryfeature "debug" && \
2185   echo "--- Including ${MAGEDIR}/include/${i}.minc"   echo "--- Including ${MAGEDIR}/include/${i}.minc"
2186   source ${MAGEDIR}/include/${i}.minc   source ${MAGEDIR}/include/${i}.minc
2187   done   done
2188   [[ ${MAGEDEBUG} = on ]] && echo   mqueryfeature "debug" && echo
2189   fi   fi
2190  }  }
2191    
# Line 2760  md5sum_packages() Line 2795  md5sum_packages()
2795   then   then
2796   echo -ne "${COLBLUE} *** ${COLDEFAULT}"   echo -ne "${COLBLUE} *** ${COLDEFAULT}"
2797   echo -ne "checking md5sum (${count_current}/${count_total}): "   echo -ne "checking md5sum (${count_current}/${count_total}): "
2798   ( cd ${PKGDIR}; md5sum -c ${md5file}) || die "md5 for ${pkgfile} failed"   mchecksum --rundir "${PKGDIR}" --file "${md5file}" --method md5 || die "md5 for ${pkgfile} failed"
2799   else   else
2800   echo -ne "${COLBLUE} --- ${COLDEFAULT}"   echo -ne "${COLBLUE} --- ${COLDEFAULT}"
2801   echo -e "!! no md5sum file found for ${pkgfile} :("   echo -e "!! no md5sum file found for ${pkgfile} :("
# Line 3000  pkgsearch() Line 3035  pkgsearch()
3035   local state   local state
3036   local descriptiom   local descriptiom
3037   local homepage   local homepage
3038     local license
3039   local i   local i
3040   local all_installed   local all_installed
3041   local ipver   local ipver
# Line 3036  pkgsearch() Line 3072  pkgsearch()
3072   state="$(get_value_from_magefile STATE ${magefile})"   state="$(get_value_from_magefile STATE ${magefile})"
3073   description="$(get_value_from_magefile DESCRIPTION ${magefile})"   description="$(get_value_from_magefile DESCRIPTION ${magefile})"
3074   homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"   homepage="$(get_value_from_magefile HOMEPAGE ${magefile})"
3075     license="$(get_value_from_magefile LICENSE ${magefile})"
3076    
3077   # all installed   # all installed
3078   for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})   for i in $(get_uninstall_candidates --pname ${pname} --pcat ${pcat})
3079   do   do
3080   ipver="$(magename2pver ${i})"   ipver="$(magename2pver ${i})"
3081   ipbuild="$(magename2pbuild ${i})"   ipbuild="$(magename2pbuild ${i})"
3082    
3083   if [[ -z ${all_installed} ]]   if [[ -z ${all_installed} ]]
3084   then   then
3085   all_installed="${ipver}-${ipbuild}"   all_installed="${ipver}-${ipbuild}"
# Line 3051  pkgsearch() Line 3088  pkgsearch()
3088   fi   fi
3089   done   done
3090   [[ -z ${all_installed} ]] && all_installed="none"   [[ -z ${all_installed} ]] && all_installed="none"
3091    
3092   case ${state} in   case ${state} in
3093   stable) state=${COLGREEN}"[s] ";;   stable) state=${COLGREEN}"[s] ";;
3094   testing) state=${COLYELLOW}"[t] ";;   testing) state=${COLYELLOW}"[t] ";;
# Line 3096  EOF Line 3133  EOF
3133   echo "      Installed versions: ${all_installed}"   echo "      Installed versions: ${all_installed}"
3134   echo "      Description: ${description}"   echo "      Description: ${description}"
3135   echo "      Homepage: ${homepage}"   echo "      Homepage: ${homepage}"
3136     if [[ ! -z ${license} ]]
3137     then
3138     echo "      License:  ${license}"
3139     fi
3140   echo "      Depends: ${deps}"   echo "      Depends: ${deps}"
3141   echo "      SDepends: ${sdeps}"   echo "      SDepends: ${sdeps}"
3142   echo   echo
# Line 3136  export_inherits() Line 3177  export_inherits()
3177   eval "${functions}() { ${include}_${functions} ; }"   eval "${functions}() { ${include}_${functions} ; }"
3178    
3179   # debug   # debug
3180   [[ ${MAGEDEBUG} = on ]] && typeset -f "${functions}"   mqueryfeature "debug" && typeset -f "${functions}"
3181    
3182   shift   shift
3183   done   done
# Line 3274  have_root_privileges() Line 3315  have_root_privileges()
3315    
3316   return ${retval}   return ${retval}
3317  }  }
3318    
3319    known_mage_feature()
3320    {
3321     local feature="$1"
3322     local retval
3323    
3324     case "${feature}" in
3325     autosvc|!autosvc) retval=0 ;;
3326     buildlog|!buildlog) retval=0 ;;
3327     ccache|!ccache) retval=0 ;;
3328     check|!check) retval=0 ;;
3329     compressdoc|!compressdoc) retval=0 ;;
3330     debug|!debug) retval=0 ;;
3331     distcc|!distcc) retval=0 ;;
3332     kernelsrcunpack|!kernelsrcunpack) retval=0 ;;
3333     libtool|!libtool) retval=0 ;;
3334     linuxsymlink|!linuxsymlink) retval=0 ;;
3335     pkgbuild|!pkgbuild) retval=0 ;;
3336     pkgdistrotag|!pkgdistrotag) retval=0 ;;
3337     purge|!purge) retval=0 ;;
3338     qalint|!qalint) retval=0 ;;
3339     regentree|!regentree) retval=0 ;;
3340     resume|!resume) retval=0 ;;
3341     srcpkgbuild|!srcpkgbuild) retval=0 ;;
3342     srcpkgtarball|!srcpkgtarball) retval=0 ;;
3343     static|!static) retval=0 ;;
3344     stepbystep|!stepbystep) retval=0 ;;
3345     strip|!strip) retval=0 ;;
3346     verbose|!verbose) retval=0 ;;
3347     *) retval=1 ;;
3348     esac
3349    
3350     return "${retval}"
3351    }
3352    
3353    load_mage_features()
3354    {
3355     for i in ${MAGE_FEATURES_GLOBAL[*]} ${MAGE_FEATURES[*]}
3356     do
3357     FVERBOSE=off msetfeature ${i}
3358     done
3359    }
3360    
3361    msetfeature()
3362    {
3363     local feature
3364     local count
3365     local i
3366     local found
3367    
3368     for feature in $@
3369     do
3370     found=0
3371     count="${#MAGE_FEATURES_CURRENT[*]}"
3372    
3373     if ! known_mage_feature "${feature}"
3374     then
3375     [[ ${FVERBOSE} = off ]] || echo -e "${COLRED}Unknown feature '${feature}', ignoring it${COLDEFAULT}"
3376     return 3
3377     fi
3378    
3379     for ((i=0; i<count; i++))
3380     do
3381     if [[ ${MAGE_FEATURES_CURRENT[${i}]} = ${feature} ]]
3382     then
3383     [[ ${FVERBOSE} = off ]] || echo -e "${COLBLUE}---${COLGREEN} Feature '${feature}' already enabled${COLDEFAULT}"
3384     MAGE_FEATURES_CURRENT[${i}]="${feature}"
3385     found=1
3386     elif [[ ${MAGE_FEATURES_CURRENT[${i}]} = !${feature} ]]
3387     then
3388     [[ ${FVERBOSE} = off ]] || echo -e "${COLBLUE}---${COLGREEN} Feature '${feature}' currently disabled, enabling it!${COLDEFAULT}"
3389     MAGE_FEATURES_CURRENT[${i}]="${feature}"
3390     found=1
3391     elif [[ ${MAGE_FEATURES_CURRENT[${i}]} = ${feature//!} ]]
3392     then
3393     [[ ${FVERBOSE} = off ]] || echo -e "${COLBLUE}---${COLGREEN} Feature '${feature//!}' currently enabled, disabling it!${COLDEFAULT}"
3394     MAGE_FEATURES_CURRENT[${i}]="${feature}"
3395     found=1
3396     fi
3397     done
3398    
3399     # if the feature was not found after proccessing the whole array
3400     # it was not declared. in this case enable it
3401     if [[ ${found} = 0 ]]
3402     then
3403     [[ ${FVERBOSE} = off ]] || echo -e "${COLBLUE}---${COLGREEN} Feature '${feature}' was not declared, enabling it!${COLDEFAULT}"
3404     MAGE_FEATURES_CURRENT=( ${MAGE_FEATURES_CURRENT[*]} "${feature}" )
3405     fi
3406    
3407     export MAGE_FEATURE_CURRENT
3408     done
3409    }
3410    
3411    mqueryfeature()
3412    {
3413     local feature="$1"
3414     local retval=1
3415     local i
3416    
3417     if known_mage_feature "${feature}"
3418     then
3419     for i in ${MAGE_FEATURES_CURRENT[*]}
3420     do
3421     if [[ ${i} = ${feature} ]]
3422     then
3423     retval=0
3424     break # found break here
3425     fi
3426     done
3427     else
3428     [[ ${FVERBOSE} = off ]] || echo -e "${COLRED}Unknown feature '${feature}', ignoring it${COLDEFAULT}"
3429     retval=3
3430     fi
3431    
3432     return ${retval}
3433    }
3434    
3435    mprintfeatures()
3436    {
3437     echo "Global features:  ${MAGE_FEATURES_GLOBAL[*]}"
3438     echo "Local features:   ${MAGE_FEATURES[*]}"
3439     echo "Current features: ${MAGE_FEATURES_CURRENT[*]}"
3440    }

Legend:
Removed from v.1549  
changed lines
  Added in v.1675