Magellan Linux

Diff of /branches/mage-next/src/depwalker.in

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

trunk/mage/usr/lib/mage/depwalker.sh revision 1561 by niro, Wed Dec 28 09:57:31 2011 UTC branches/mage-next/src/depwalker.in revision 2832 by niro, Fri Sep 19 11:19:35 2014 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2  # $Id$  # $Id$
3  # dependeny walker  # dependency walker
4    
5  # default die function  # set default variables
6  die()  : ${MAGERC="@@SYSCONFDIR@@/mage.rc"}
7    : ${MLIBDIR="@@MAGELIBDIR@@"}
8    
9    # first of all include common functions
10    source ${MLIBDIR}/common.functions.sh || exit 1
11    source @@SYSCONFDIR@@/mage.rc.global || die "@@SYSCONFDIR@@/mage.rc.global missing"
12    source ${MAGERC} || die "Your ${MAGERC} is missing. Aborting."
13    source ${MLIBDIR}/mage4.functions.sh || die "mage functions missing"
14    source ${MLIBDIR}/smage2.functions.sh || die "smage functions missing"
15    
16    decho()
17  {  {
18   echo ${COLRED}"$@"${COLDEFAULT}   if [[ ${DEBUG} = 1 ]]
19   exit 1   then
20     echo "DEBUG: $@" >&2
21     fi
22  }  }
23    
 # include all needed files  
 [ -f /etc/mage.rc.global ] &&  \  
  source /etc/mage.rc.global || \  
  die "/etc/mage.rc.global missing"  
   
 [ -f ${MAGERC} ] && source ${MAGERC} || \  
  die "Your ${MAGERC} is missing. Aborting."  
   
 [ -f ${MLIBDIR}/mage4.functions.sh ] && \  
  source ${MLIBDIR}/mage4.functions.sh || \  
  die "mage functions missing"  
   
24  usage()  usage()
25  {  {
26   echo   echo
27   echo "Usage: $(basename $0) [command] [arg] ..."   echo "Usage: $(basename $0) [command] [arg] ..."
28   echo   echo
29   echo "  -h     --help          shows this help"   echo "  -h     --help          shows this help"
30   echo "  -c     --pcat          categorie of the package"   echo "  -c     --pcat          category of the package"
31   echo "  -n     --pname         name of the package"   echo "  -n     --pname         name of the package"
32   echo "  -v     --pver          version number of the package"   echo "  -v     --pver          version number of the package"
33   echo "  -b     --pbuild        build number of the package"   echo "  -b     --pbuild        build number of the package"
34   echo "  -m     --method        which calc method should be used:"   echo "  -m     --method        which calc method should be used:"
35   echo "                         install, srcinstall, depend, srcdepend"   echo "                         install, srcinstall, pretend, srcpretend"
36   echo "                         upgrade, srcupgrade"   echo "                         upgrade, srcupgrade,"
37     echo "                         install-build-prerequisites,"
38     echo "                         pretend-build-prerequisites"
39     echo "  -d     --debug         enable debug mode"
40     echo "  -s     --smage         use a smage to calculate dependencies"
41   echo   echo
42   echo "method, name, version and build must be given !"   echo "method, category, name, version and build must be given !"
43   echo   echo
44   exit 1   exit 1
45  }  }
46    
47    # set some sane defaults
48    DEBUG=0
49    SMAGE_DEPEND=0
50    
51  # very basic getops  # very basic getops
52  for i in $*  for i in $*
53  do  do
# Line 49  do Line 57  do
57   --pver|-v) shift; PVER="$1" ;;   --pver|-v) shift; PVER="$1" ;;
58   --pbuild|-b) shift; PBUILD="$1" ;;   --pbuild|-b) shift; PBUILD="$1" ;;
59   --method|-m) shift; METHOD="$1" ;;   --method|-m) shift; METHOD="$1" ;;
60     --debug|-d) shift; DEBUG=1 ;;
61     --smage|-s) shift; SMAGEFILE="$1"; SMAGE_DEPEND=1; SILENT=1; FVERBOSE=off ;;
62   --help|-h) usage ;;   --help|-h) usage ;;
63   esac   esac
64   shift   shift
65  done  done
66    
67  # sanity checks; abort if not given  # sanity checks; abort if not given
68  [ -z "${PCAT}" ] && usage  if [[ -z ${SMAGEFILE} ]]
69  [ -z "${PNAME}" ] && usage  then
70  [ -z "${PVER}" ] && usage   [ -z "${PCAT}" ] && usage
71  [ -z "${PBUILD}" ] && usage   [ -z "${PNAME}" ] && usage
72     [ -z "${PVER}" ] && usage
73     [ -z "${PBUILD}" ] && usage
74    fi
75  [ -z "${METHOD}" ] && usage  [ -z "${METHOD}" ] && usage
76    
77  # check needed global vars  # check needed global vars
# Line 68  done Line 81  done
81    
82  # other needed vars  # other needed vars
83  ALLDEPS=""  ALLDEPS=""
84    if [[ -n ${SMAGEFILE} ]]
85    then
86     if [[ -e ${SMAGEFILE} ]]
87     then
88     smagesource "${SMAGEFILE}"
89     else
90     die "Smage file '${SMAGEFILE}' does not exist!"
91     fi
92    fi
93  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"
94    
95  # much faster than fgrep  # much faster than fgrep
# Line 98  checklist_processeddeps() Line 120  checklist_processeddeps()
120  }  }
121    
122  #####################  #####################
123  ##  rumwandern /path/to/mage/file/.mage  ##  depwalking /path/to/mage/file/.mage
124  rumwandern()  depwalking()
125  {  {
126   unset DEPEND   unset DEPEND
127   unset SDEPEND   unset SDEPEND
# Line 120  rumwandern() Line 142  rumwandern()
142    
143   DFILE="$1"   DFILE="$1"
144    
145     # debug info
146     decho "depwalking magefile '${DFILE}'"
147     decho
148    
149   source ${DFILE}   source ${DFILE}
150    
151   # forced nodeps   # forced nodeps
# Line 132  rumwandern() Line 158  rumwandern()
158   MY_DEPEND="${DEPEND}"   MY_DEPEND="${DEPEND}"
159    
160   # for srcinstall & srcdepend only; SDEPEND also needed   # for srcinstall & srcdepend only; SDEPEND also needed
161   if [[ ${METHOD} = srcinstall ]] || \   if [[ ${METHOD} = srcinstall ]] ||
162   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] ||
163   [[ ${METHOD} = srcupgrade ]] || \   [[ ${METHOD} = srcupgrade ]] ||
164   [[ ${METHOD} = srcuppretend ]]   [[ ${METHOD} = srcuppretend ]] ||
165     [[ ${METHOD} = install-build-prerequisites ]] ||
166     [[ ${METHOD} = pretend-build-prerequisites ]]
167   then   then
168   # only if SDEPEND is not zero   # only if SDEPEND is not zero
169   if [ -n "${SDEPEND}" ]   if [ -n "${SDEPEND}" ]
# Line 156  rumwandern() Line 184  rumwandern()
184    
185   if [ -z "${MY_DEPEND}" ]   if [ -z "${MY_DEPEND}" ]
186   then   then
187     decho "MY_DEPEND is empty; deps of '${DFILE}' ignored"
188   return 1   return 1
189   fi   fi
190    
191   while read SYM DEPNAME   while read SYM DEPNAME
192   do   do
193     # debug info
194     decho "DEPNAME='${DEPNAME}'"
195    
196   # exclude empty depnames   # exclude empty depnames
197   [[ -z ${DEPNAME} ]] && continue   [[ -z ${DEPNAME} ]] && continue
198    
# Line 172  rumwandern() Line 204  rumwandern()
204    
205   # mark depfile as processed to prevent double runs -without version   # mark depfile as processed to prevent double runs -without version
206   # but do not add any virtuals to PROCESSEDDEPS or their resolved   # but do not add any virtuals to PROCESSEDDEPS or their resolved
207   # pkgnames will be ignored and they are missing on the dependecy-list   # pkgnames will be ignored and they are missing on the dependency-list
208   if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]   if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]
209   then   then
210   PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"   PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"
211   fi   fi
212    
213   HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}")   HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}")
214     if [[ -z ${HIGHEST_DEPFILE} ]]
215     then
216     INVALID_DEPS+=" ${DEPNAME}:${DFILE}"
217     continue
218     fi
219    
220   PCAT="$(magename2pcat ${HIGHEST_DEPFILE})"   PCAT="$(magename2pcat ${HIGHEST_DEPFILE})"
221   PNAME="$(magename2pname ${HIGHEST_DEPFILE})"   PNAME="$(magename2pname ${HIGHEST_DEPFILE})"
222   PVER="$(magename2pver ${HIGHEST_DEPFILE})"   PVER="$(magename2pver ${HIGHEST_DEPFILE})"
223   PBUILD="$(magename2pbuild ${HIGHEST_DEPFILE})"   PBUILD="$(magename2pbuild ${HIGHEST_DEPFILE})"
224    
225   ## check ob schon in ALLDEPS enthalten dann mach weiter   ## dep already in ALLDEPS? then going on
226    
227   # usage of fgrep is extremly slow and consumes a lot of cpu power   # usage of fgrep is extremly slow and consumes a lot of cpu power
228   #if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ]   #if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ]
229   if checklist_alldeps "${HIGHEST_DEPFILE}"   if checklist_alldeps "${HIGHEST_DEPFILE}"
230   then   then
231   ### check ob DFILE schon installiert ist ###   ### check if the dependency is already installed ###
232   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
233   then   then
234   rumwandern ${HIGHEST_DEPFILE}   # but first get all deps of highest_depfile to catch all dependencies of it
235     depwalking ${HIGHEST_DEPFILE}
236   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"
237     decho "added '${HIGHEST_DEPFILE}' to ALLDEPS"
238   fi   fi
239   fi   fi
240   done << EOF   done << EOF
# Line 207  EOF Line 246  EOF
246  [[ ${METHOD} = pretend ]] || \  [[ ${METHOD} = pretend ]] || \
247   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] || \
248   [[ ${METHOD} = uppretend ]] || \   [[ ${METHOD} = uppretend ]] || \
249   [[ ${METHOD} = srcuppretend ]] && \   [[ ${METHOD} = srcuppretend ]] || \
250     [[ ${METHOD} = pretend-build-prerequisites ]] && \
251   echo -n "Calculating dependencies ... "   echo -n "Calculating dependencies ... "
252    
253    
# Line 225  then Line 265  then
265   # get the highest mage file from mage-db   # get the highest mage file from mage-db
266   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"
267    
268     # debug info
269     decho "dep='${dep}'"
270     decho "PCAT='${PCAT}'"
271     decho "PNAME='${PNAME}'"
272     decho "MAGEFILE='${MAGEFILE}'"
273    
274   # if no install candidate was found, record this   # if no install candidate was found, record this
275   # and process with the next one   # and process with the next one
276   if [[ -z ${MAGEFILE} ]]   if [[ -z ${MAGEFILE} ]]
277   then   then
278   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"
279     decho "added to NO_UPGRADE_CANDIDATE"
280   continue   continue
281   fi   fi
282    
# Line 237  then Line 284  then
284   PVER="$(magename2pver ${MAGEFILE})"   PVER="$(magename2pver ${MAGEFILE})"
285   PBUILD="$(magename2pbuild ${MAGEFILE})"   PBUILD="$(magename2pbuild ${MAGEFILE})"
286    
287   # do not wander files which are installed   # debug info
288     decho "PVER='${PVER}'"
289     decho "PBUILD='${PBUILD}'"
290    
291     # do not walk files which are installed
292   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
293   then   then
294   # get dependencies the package   # get dependencies the package
295   rumwandern ${MAGEFILE}   depwalking ${MAGEFILE}
296    
297   # now add the package itself to the dependencies   # now add the package itself to the dependencies
298   # (if not exists already)   # (if not exists already)
  #if [ -z "$(echo ${ALLDEPS} | fgrep "${MAGEFILE}")" ]  
299   if checklist_alldeps "${MAGEFILE}"   if checklist_alldeps "${MAGEFILE}"
300   then   then
301     decho "added '${MAGEFILE}' to ALLDEPS"
302   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   ALLDEPS="${ALLDEPS} ${MAGEFILE}"
303   fi   fi
304     else
305     # debug info
306     decho "ignored package"
307     decho
308   fi   fi
309   done   done
310  else  else
311   # get dependencies the package   # get all dependencies of the package
312   rumwandern ${MAGEFILE}   if [[ -n ${SMAGEFILE} ]]
313     then
314     depwalking "${SMAGEFILE}"
315     else
316     depwalking "${MAGEFILE}"
317     fi
318    fi
319    
320    if [[ ${METHOD} != install-build-prerequisites ]] &&
321     [[ ${METHOD} != pretend-build-prerequisites ]] &&
322     [[ ${METHOD} != upgrade ]] &&
323     [[ ${METHOD} != uppretend ]] &&
324     [[ ${METHOD} != srcupgrade ]] &&
325     [[ ${METHOD} != srcuppretend ]]
326    then
327   # now add the package itself to the dependencies   # now add the package itself to the dependencies
328   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   # (if not exists already)
329     if checklist_alldeps "${MAGEFILE}"
330     then
331     decho "added '${MAGEFILE}' to ALLDEPS"
332     ALLDEPS="${ALLDEPS} ${MAGEFILE}"
333     fi
334  fi  fi
335    
336  [[ ${METHOD} = pretend ]] || \  [[ ${METHOD} = pretend ]] || \
337   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] || \
338   [[ ${METHOD} = uppretend ]] || \   [[ ${METHOD} = uppretend ]] || \
339   [[ ${METHOD} = srcuppretend ]] && \   [[ ${METHOD} = srcuppretend ]] || \
340     [[ ${METHOD} = pretend-build-prerequisites ]] && \
341   echo "done"   echo "done"
342    
343    
# Line 271  fi Line 345  fi
345  if [[ ${METHOD} = pretend ]] || \  if [[ ${METHOD} = pretend ]] || \
346   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] || \
347   [[ ${METHOD} = uppretend ]] || \   [[ ${METHOD} = uppretend ]] || \
348   [[ ${METHOD} = srcuppretend ]]   [[ ${METHOD} = srcuppretend ]] || \
349     [[ ${METHOD} = pretend-build-prerequisites ]]
350  then  then
351   # this is a little bit faster   # this is a little bit faster
352   declare -i x=0   declare -i x=0
# Line 288  then Line 363  then
363   PBUILD="$(magename2pbuild ${i})"   PBUILD="$(magename2pbuild ${i})"
364   if [ -z "${list}" ]   if [ -z "${list}" ]
365   then   then
366   list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"   list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
367   else   else
368   list="${list}   list="${list}
369  \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"  \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
# Line 299  then Line 374  then
374   echo -e "${list}"   echo -e "${list}"
375   echo   echo
376    
377     if [[ ! -z ${INVALID_DEPS} ]]
378     then
379     echo -e "${COLRED}Invalid dependencies found:${COLDEFAULT}"
380     for i in ${INVALID_DEPS}
381     do
382     _dep="${i%%:*}"
383     _mage="${i##*:}"
384     echo -e "${COLRED} '${_dep}' -> '${_mage}'${COLDEFAULT}"
385     done
386     echo
387     fi
388    
389   if [[ ! -z ${NO_UPGRADE_CANDIDATE} ]]   if [[ ! -z ${NO_UPGRADE_CANDIDATE} ]]
390   then   then
391   echo -e "${COLRED}Currently no candidates found for:${COLDEFAULT}"   echo -e "${COLRED}Currently no candidates found for:${COLDEFAULT}"
# Line 318  fi Line 405  fi
405  [[ ${METHOD} = install ]] || \  [[ ${METHOD} = install ]] || \
406   [[ ${METHOD} = srcinstall ]] || \   [[ ${METHOD} = srcinstall ]] || \
407   [[ ${METHOD} = upgrade ]] || \   [[ ${METHOD} = upgrade ]] || \
408   [[ ${METHOD} = srcupgrade ]] && \   [[ ${METHOD} = srcupgrade ]] || \
409     [[ ${METHOD} = install-build-prerequisites ]] && \
410   echo "${ALLDEPS}"   echo "${ALLDEPS}"

Legend:
Removed from v.1561  
changed lines
  Added in v.2832