Magellan Linux

Diff of /trunk/mage/usr/lib/mage/depwalker.sh

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

revision 2280 by niro, Wed Nov 20 12:20:12 2013 UTC revision 2827 by niro, Wed Sep 17 11:19:36 2014 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # $Id$  # $Id$
3  # dependeny walker  # dependency walker
4    
5  # default die function  # default die function
6  die()  die()
# Line 9  die() Line 9  die()
9   exit 1   exit 1
10  }  }
11    
12    decho()
13    {
14     if [[ ${DEBUG} = 1 ]]
15     then
16     echo "DEBUG: $@" >&2
17     fi
18    }
19    
20  # include all needed files  # include all needed files
21  [ -f /etc/mage.rc.global ] &&  \  [ -f /etc/mage.rc.global ] &&  \
22   source /etc/mage.rc.global || \   source /etc/mage.rc.global || \
# Line 21  die() Line 29  die()
29   source ${MLIBDIR}/mage4.functions.sh || \   source ${MLIBDIR}/mage4.functions.sh || \
30   die "mage functions missing"   die "mage functions missing"
31    
32    [ -f ${MLIBDIR}/smage2.functions.sh ] && \
33     source ${MLIBDIR}/smage2.functions.sh || \
34     die "smage functions missing"
35    
36  usage()  usage()
37  {  {
38   echo   echo
# Line 32  usage() Line 44  usage()
44   echo "  -v     --pver          version number of the package"   echo "  -v     --pver          version number of the package"
45   echo "  -b     --pbuild        build number of the package"   echo "  -b     --pbuild        build number of the package"
46   echo "  -m     --method        which calc method should be used:"   echo "  -m     --method        which calc method should be used:"
47   echo "                         install, srcinstall, depend, srcdepend"   echo "                         install, srcinstall, pretend, srcpretend"
48   echo "                         upgrade, srcupgrade,"   echo "                         upgrade, srcupgrade,"
49   echo "                         install-build-prerequisites,"   echo "                         install-build-prerequisites,"
50   echo "                         pretend-build-prerequisites"   echo "                         pretend-build-prerequisites"
51   echo "  -d     --debug         enable debug mode"   echo "  -d     --debug         enable debug mode"
52     echo "  -s     --smage         use a smage to calculate dependencies"
53   echo   echo
54   echo "method, category, name, version and build must be given !"   echo "method, category, name, version and build must be given !"
55   echo   echo
# Line 56  do Line 69  do
69   --pbuild|-b) shift; PBUILD="$1" ;;   --pbuild|-b) shift; PBUILD="$1" ;;
70   --method|-m) shift; METHOD="$1" ;;   --method|-m) shift; METHOD="$1" ;;
71   --debug|-d) shift; DEBUG=1 ;;   --debug|-d) shift; DEBUG=1 ;;
72     --smage|-s) shift; SMAGEFILE="$1"; SILENT=1; FVERBOSE=off ;;
73   --help|-h) usage ;;   --help|-h) usage ;;
74   esac   esac
75   shift   shift
76  done  done
77    
78  # sanity checks; abort if not given  # sanity checks; abort if not given
79  [ -z "${PCAT}" ] && usage  if [[ -z ${SMAGEFILE} ]]
80  [ -z "${PNAME}" ] && usage  then
81  [ -z "${PVER}" ] && usage   [ -z "${PCAT}" ] && usage
82  [ -z "${PBUILD}" ] && usage   [ -z "${PNAME}" ] && usage
83     [ -z "${PVER}" ] && usage
84     [ -z "${PBUILD}" ] && usage
85    fi
86  [ -z "${METHOD}" ] && usage  [ -z "${METHOD}" ] && usage
87    
88  # check needed global vars  # check needed global vars
# Line 75  done Line 92  done
92    
93  # other needed vars  # other needed vars
94  ALLDEPS=""  ALLDEPS=""
95    if [[ -n ${SMAGEFILE} ]]
96    then
97     if [[ -e ${SMAGEFILE} ]]
98     then
99     smagesource "${SMAGEFILE}"
100     else
101     die "Smage file '${SMAGEFILE}' does not exist!"
102     fi
103    fi
104  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"
105    
106  # much faster than fgrep  # much faster than fgrep
# Line 127  depwalking() Line 153  depwalking()
153    
154   DFILE="$1"   DFILE="$1"
155    
156     # debug info
157     decho "depwalking magefile '${DFILE}'"
158     decho
159    
160   source ${DFILE}   source ${DFILE}
161    
162   # forced nodeps   # forced nodeps
# Line 139  depwalking() Line 169  depwalking()
169   MY_DEPEND="${DEPEND}"   MY_DEPEND="${DEPEND}"
170    
171   # for srcinstall & srcdepend only; SDEPEND also needed   # for srcinstall & srcdepend only; SDEPEND also needed
172   if [[ ${METHOD} = srcinstall ]] || \   if [[ ${METHOD} = srcinstall ]] ||
173   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] ||
174   [[ ${METHOD} = srcupgrade ]] || \   [[ ${METHOD} = srcupgrade ]] ||
175   [[ ${METHOD} = srcuppretend ]]   [[ ${METHOD} = srcuppretend ]] ||
176     [[ ${METHOD} = install-build-prerequisites ]] ||
177     [[ ${METHOD} = pretend-build-prerequisites ]]
178   then   then
179   # only if SDEPEND is not zero   # only if SDEPEND is not zero
180   if [ -n "${SDEPEND}" ]   if [ -n "${SDEPEND}" ]
# Line 158  depwalking() Line 190  depwalking()
190   fi   fi
191   fi   fi
192    
  if [[ ${METHOD} = install-build-prerequisites ]] || \  
  [[ ${METHOD} = pretend-build-prerequisites ]]  
  then  
  # only one time  
  if [[ ${LOOP_COUNTER} -lt 1 ]]  
  then  
  # only if SDEPEND is not zero  
  if [ -n "${SDEPEND}" ]  
  then  
  # crlf is substantly needed !!  
  if [ -n "${MY_DEPEND}" ]  
  then  
  MY_DEPEND="${MY_DEPEND}  
  ${SDEPEND}"  
  else  
  MY_DEPEND="${SDEPEND}"  
  fi  
  fi  
  fi  
  LOOP_COUNTER=${LOOP_COUNTER}+1  
  fi  
   
193   unset DEPEND   unset DEPEND
194   unset SDEPEND   unset SDEPEND
195    
196   if [ -z "${MY_DEPEND}" ]   if [ -z "${MY_DEPEND}" ]
197   then   then
198     decho "MY_DEPEND is empty; deps of '${DFILE}' ignored"
199   return 1   return 1
200   fi   fi
201    
202   while read SYM DEPNAME   while read SYM DEPNAME
203   do   do
204   if [[ ${DEBUG} = 1 ]]   # debug info
205   then   decho "DEPNAME='${DEPNAME}'"
  echo "DEBUG: DEPNAME='${DEPNAME}'" >&2  
  fi  
206    
207   # exclude empty depnames   # exclude empty depnames
208   [[ -z ${DEPNAME} ]] && continue   [[ -z ${DEPNAME} ]] && continue
# Line 206  depwalking() Line 215  depwalking()
215    
216   # mark depfile as processed to prevent double runs -without version   # mark depfile as processed to prevent double runs -without version
217   # but do not add any virtuals to PROCESSEDDEPS or their resolved   # but do not add any virtuals to PROCESSEDDEPS or their resolved
218   # pkgnames will be ignored and they are missing on the dependecy-list   # pkgnames will be ignored and they are missing on the dependency-list
219   if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]   if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]
220   then   then
221   PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"   PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"
# Line 233  depwalking() Line 242  depwalking()
242   ### check if the dependency is already installed ###   ### check if the dependency is already installed ###
243   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
244   then   then
245     # but first get all deps of highest_depfile to catch all dependencies of it
246   depwalking ${HIGHEST_DEPFILE}   depwalking ${HIGHEST_DEPFILE}
247   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"
248     decho "added '${HIGHEST_DEPFILE}' to ALLDEPS"
249   fi   fi
250   fi   fi
251   done << EOF   done << EOF
# Line 265  then Line 276  then
276   # get the highest mage file from mage-db   # get the highest mage file from mage-db
277   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"
278    
279     # debug info
280     decho "dep='${dep}'"
281     decho "PCAT='${PCAT}'"
282     decho "PNAME='${PNAME}'"
283     decho "MAGEFILE='${MAGEFILE}'"
284    
285   # if no install candidate was found, record this   # if no install candidate was found, record this
286   # and process with the next one   # and process with the next one
287   if [[ -z ${MAGEFILE} ]]   if [[ -z ${MAGEFILE} ]]
288   then   then
289   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"
290     decho "added to NO_UPGRADE_CANDIDATE"
291   continue   continue
292   fi   fi
293    
# Line 277  then Line 295  then
295   PVER="$(magename2pver ${MAGEFILE})"   PVER="$(magename2pver ${MAGEFILE})"
296   PBUILD="$(magename2pbuild ${MAGEFILE})"   PBUILD="$(magename2pbuild ${MAGEFILE})"
297    
298     # debug info
299     decho "PVER='${PVER}'"
300     decho "PBUILD='${PBUILD}'"
301    
302   # do not walk files which are installed   # do not walk files which are installed
303   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
304   then   then
# Line 287  then Line 309  then
309   # (if not exists already)   # (if not exists already)
310   if checklist_alldeps "${MAGEFILE}"   if checklist_alldeps "${MAGEFILE}"
311   then   then
312     decho "added '${MAGEFILE}' to ALLDEPS"
313   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   ALLDEPS="${ALLDEPS} ${MAGEFILE}"
314   fi   fi
315     else
316     # debug info
317     decho "ignored package"
318     decho
319   fi   fi
320   done   done
321  else  else
  LOOP_COUNTER=0  
322   # get all dependencies of the package   # get all dependencies of the package
323   depwalking ${MAGEFILE}   if [[ -n ${SMAGEFILE} ]]
324     then
325     depwalking "${SMAGEFILE}"
326     else
327     depwalking "${MAGEFILE}"
328     fi
329  fi  fi
330    
331  if [[ ${METHOD} != install-build-prerequisites ]] &&  if [[ ${METHOD} != install-build-prerequisites ]] &&
# Line 308  then Line 339  then
339   # (if not exists already)   # (if not exists already)
340   if checklist_alldeps "${MAGEFILE}"   if checklist_alldeps "${MAGEFILE}"
341   then   then
342     decho "added '${MAGEFILE}' to ALLDEPS"
343   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   ALLDEPS="${ALLDEPS} ${MAGEFILE}"
344   fi   fi
345  fi  fi

Legend:
Removed from v.2280  
changed lines
  Added in v.2827