Magellan Linux

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

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

revision 226 by niro, Fri Sep 9 16:35:46 2005 UTC revision 2280 by niro, Wed Nov 20 12:20:12 2013 UTC
# Line 1  Line 1 
1  #!/bin/bash  #!/bin/bash
2    # $Id$
3  #depwalker  # dependeny walker
 # $Header: /home/cvsd/magellan-cvs/magellan-src/mage/usr/lib/mage/depwalker.sh,v 1.1 2005-09-09 16:35:27 niro Exp $  
4    
5  # default die function  # default die function
6  die()  die()
# Line 10  die() Line 9  die()
9   exit 1   exit 1
10  }  }
11    
12  # # include all needed files  # include all needed files
13  # [ -f ${MLIBDIR}/conf/mage.rc.global ] &&  \  [ -f /etc/mage.rc.global ] &&  \
14  # source ${MLIBDIR}/conf/mage.rc.global || \   source /etc/mage.rc.global || \
15  # die "${MLIBDIR}/conf/mage.rc.global missing"   die "/etc/mage.rc.global missing"
16  #  
17  # [ -f /etc/mage.rc ] && source /etc/mage.rc || \  [ -f ${MAGERC} ] && source ${MAGERC} || \
18  # die "Your /etc/mage.rc is missing. Aborting."   die "Your ${MAGERC} is missing. Aborting."
19  #  
20  # [ -f ${MLIBDIR}/mage.functions.sh ] && \  [ -f ${MLIBDIR}/mage4.functions.sh ] && \
21  # source ${MLIBDIR}/mage.functions.sh || \   source ${MLIBDIR}/mage4.functions.sh || \
22  # die "mage functions missing"   die "mage functions missing"
   
 # for tests only  
 source /home/tjoke/alx-cvs/magellan-src/mage/usr/lib/mage/mage.rc.global  
 source /etc/mage.rc  
 source /home/tjoke/alx-cvs/magellan-src/mage/usr/lib/mage/mage4.functions.sh  
   
 # not serios if missing, only for colors  
 [ -f /etc/init.d/functions ] && source /etc/init.d/functions  
   
 # disable colors if wanted  
 if [[ ${NOCOLORS} = true ]]  
 then  
  COLRED=""  
  COLGREEN=""  
  COLYELLOW=""  
  COLBLUE=""  
  COLMAGENTA=""  
  COLWHITE=""  
  COLDEFAULT=""  
 fi  
23    
24  usage()  usage()
25  {  {
# Line 48  usage() Line 27  usage()
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, depend, srcdepend"
36     echo "                         upgrade, srcupgrade,"
37     echo "                         install-build-prerequisites,"
38     echo "                         pretend-build-prerequisites"
39     echo "  -d     --debug         enable debug mode"
40   echo   echo
41   echo "method,name, version and build must be given !"   echo "method, category, name, version and build must be given !"
42   echo   echo
43   exit 1   exit 1
44  }  }
45    
46    # always default debug=0
47    DEBUG=0
48    
49  # very basic getops  # very basic getops
50  for i in $*  for i in $*
51  do  do
# Line 69  do Line 55  do
55   --pver|-v) shift; PVER="$1" ;;   --pver|-v) shift; PVER="$1" ;;
56   --pbuild|-b) shift; PBUILD="$1" ;;   --pbuild|-b) shift; PBUILD="$1" ;;
57   --method|-m) shift; METHOD="$1" ;;   --method|-m) shift; METHOD="$1" ;;
58     --debug|-d) shift; DEBUG=1 ;;
59   --help|-h) usage ;;   --help|-h) usage ;;
60   esac   esac
61   shift   shift
# Line 90  done Line 77  done
77  ALLDEPS=""  ALLDEPS=""
78  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"
79    
80    # much faster than fgrep
81    checklist_alldeps()
82    {
83     local i
84     local item="$1"
85    
86     for i in ${ALLDEPS}
87     do
88     [[ ${i} = ${item} ]] && return 1
89     done
90    
91     return 0
92    }
93    
94    checklist_processeddeps()
95    {
96     local i
97     local item="$1"
98    
99     for i in ${PROCESSEDDEPS}
100     do
101     [[ ${i} = ${item} ]] && return 1
102     done
103    
104     return 0
105    }
106    
107  #####################  #####################
108  ##  rumwandern /path/to/mage/file/.mage  ##  depwalking /path/to/mage/file/.mage
109  rumwandern()  depwalking()
110  {  {
111   unset DEPEND   unset DEPEND
112   unset SDEPEND   unset SDEPEND
# Line 108  rumwandern() Line 122  rumwandern()
122   local INSTALL_VIRTUAL   local INSTALL_VIRTUAL
123   local PNAME   local PNAME
124   local PCAT   local PCAT
125     local PVER
126     local PBUILD
127    
128   DFILE="$1"   DFILE="$1"
129    
130   source ${DFILE}   source ${DFILE}
131    
132     # forced nodeps
133     if [[ ${NODEPS} = true ]]
134     then
135     DEPEND=""
136     SDEPEND=""
137     fi
138    
139   MY_DEPEND="${DEPEND}"   MY_DEPEND="${DEPEND}"
140    
141   # for srcinstall & srcdepend only; SDEPEND also needed   # for srcinstall & srcdepend only; SDEPEND also needed
142   if [[ ${METHOD} = srcinstall ]] || [[ ${METHOD} = srcpretend ]]   if [[ ${METHOD} = srcinstall ]] || \
143     [[ ${METHOD} = srcpretend ]] || \
144     [[ ${METHOD} = srcupgrade ]] || \
145     [[ ${METHOD} = srcuppretend ]]
146   then   then
147   # only if SDEPEND is not zero   # only if SDEPEND is not zero
148   if [ -n "${SDEPEND}" ]   if [ -n "${SDEPEND}" ]
# Line 131  rumwandern() Line 158  rumwandern()
158   fi   fi
159   fi   fi
160    
161     if [[ ${METHOD} = install-build-prerequisites ]] || \
162     [[ ${METHOD} = pretend-build-prerequisites ]]
163     then
164     # only one time
165     if [[ ${LOOP_COUNTER} -lt 1 ]]
166     then
167     # only if SDEPEND is not zero
168     if [ -n "${SDEPEND}" ]
169     then
170     # crlf is substantly needed !!
171     if [ -n "${MY_DEPEND}" ]
172     then
173     MY_DEPEND="${MY_DEPEND}
174     ${SDEPEND}"
175     else
176     MY_DEPEND="${SDEPEND}"
177     fi
178     fi
179     fi
180     LOOP_COUNTER=${LOOP_COUNTER}+1
181     fi
182    
183   unset DEPEND   unset DEPEND
184   unset SDEPEND   unset SDEPEND
185    
# Line 141  rumwandern() Line 190  rumwandern()
190    
191   while read SYM DEPNAME   while read SYM DEPNAME
192   do   do
193     if [[ ${DEBUG} = 1 ]]
194     then
195     echo "DEBUG: DEPNAME='${DEPNAME}'" >&2
196     fi
197    
198     # exclude empty depnames
199     [[ -z ${DEPNAME} ]] && continue
200    
201     # exclude all already processed deps -without version
202     if ! checklist_processeddeps "${DEPNAME%-*}"
203     then
204     continue
205     fi
206    
207     # mark depfile as processed to prevent double runs -without version
208     # but do not add any virtuals to PROCESSEDDEPS or their resolved
209     # pkgnames will be ignored and they are missing on the dependecy-list
210     if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]
211     then
212     PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"
213     fi
214    
215   HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}")   HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}")
216     if [[ -z ${HIGHEST_DEPFILE} ]]
217     then
218     INVALID_DEPS+=" ${DEPNAME}:${DFILE}"
219     continue
220     fi
221    
222   PCAT="$(magename2pcat ${HIGHEST_DEPFILE})"   PCAT="$(magename2pcat ${HIGHEST_DEPFILE})"
223   PNAME="$(magename2pname ${HIGHEST_DEPFILE})"   PNAME="$(magename2pname ${HIGHEST_DEPFILE})"
224   PVER="$(magename2pver ${HIGHEST_DEPFILE})"   PVER="$(magename2pver ${HIGHEST_DEPFILE})"
225   PBUILD="$(magename2pbuild ${HIGHEST_DEPFILE})"   PBUILD="$(magename2pbuild ${HIGHEST_DEPFILE})"
226    
227   ## check ob schon in ALLDEPS enthalten dann mach weiter   ## dep already in ALLDEPS? then going on
228   if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ]  
229     # usage of fgrep is extremly slow and consumes a lot of cpu power
230     #if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ]
231     if checklist_alldeps "${HIGHEST_DEPFILE}"
232   then   then
233   ### check ob DFILE schon installiert ist ###   ### check if the dependency is already installed ###
234   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
235   then   then
236   rumwandern ${HIGHEST_DEPFILE}   depwalking ${HIGHEST_DEPFILE}
237   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"
238   fi   fi
239   fi   fi
# Line 164  EOF Line 243  EOF
243   return 0   return 0
244  }  }
245    
246    [[ ${METHOD} = pretend ]] || \
247     [[ ${METHOD} = srcpretend ]] || \
248     [[ ${METHOD} = uppretend ]] || \
249     [[ ${METHOD} = srcuppretend ]] || \
250     [[ ${METHOD} = pretend-build-prerequisites ]] && \
251     echo -n "Calculating dependencies ... "
252    
 ### abort if this package is already installed (retval 3)  
 # maybe later ?  
 #[ -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ] && exit 3  
253    
254  [[ ${METHOD} = pretend ]] || [[ ${METHOD} = srcpretend ]] && \  if [[ ${METHOD} = upgrade ]] || \
255   echo -n "Calculating dependencies ... "   [[ ${METHOD} = srcupgrade ]] || \
256     [[ ${METHOD} = uppretend ]] || \
257     [[ ${METHOD} = srcuppretend ]]
258    then
259     INSTDEPS="$(${MLIBDIR}/magequery.sh -i)"
260     for dep in ${INSTDEPS}
261     do
262     PCAT="$(magename2pcat ${dep} installdb)"
263     PNAME="$(magename2pname ${dep})"
264    
265  # get dependencies the package   # get the highest mage file from mage-db
266  rumwandern ${MAGEFILE}   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"
267    
268  [[ ${METHOD} = pretend ]] || [[ ${METHOD} = srcpretend ]] && echo "done"   # if no install candidate was found, record this
269     # and process with the next one
270     if [[ -z ${MAGEFILE} ]]
271     then
272     NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"
273     continue
274     fi
275    
276     # now get the pver&pbuild from the new file
277     PVER="$(magename2pver ${MAGEFILE})"
278     PBUILD="$(magename2pbuild ${MAGEFILE})"
279    
280     # do not walk files which are installed
281     if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
282     then
283     # get dependencies the package
284     depwalking ${MAGEFILE}
285    
286     # now add the package itself to the dependencies
287     # (if not exists already)
288     if checklist_alldeps "${MAGEFILE}"
289     then
290     ALLDEPS="${ALLDEPS} ${MAGEFILE}"
291     fi
292     fi
293     done
294    else
295     LOOP_COUNTER=0
296     # get all dependencies of the package
297     depwalking ${MAGEFILE}
298    fi
299    
300    if [[ ${METHOD} != install-build-prerequisites ]] &&
301     [[ ${METHOD} != pretend-build-prerequisites ]] &&
302     [[ ${METHOD} != upgrade ]] &&
303     [[ ${METHOD} != uppretend ]] &&
304     [[ ${METHOD} != srcupgrade ]] &&
305     [[ ${METHOD} != srcuppretend ]]
306    then
307     # now add the package itself to the dependencies
308     # (if not exists already)
309     if checklist_alldeps "${MAGEFILE}"
310     then
311     ALLDEPS="${ALLDEPS} ${MAGEFILE}"
312     fi
313    fi
314    
315    [[ ${METHOD} = pretend ]] || \
316     [[ ${METHOD} = srcpretend ]] || \
317     [[ ${METHOD} = uppretend ]] || \
318     [[ ${METHOD} = srcuppretend ]] || \
319     [[ ${METHOD} = pretend-build-prerequisites ]] && \
320     echo "done"
321    
 # now add the package itself to the dependencies  
 ALLDEPS="${ALLDEPS} ${MAGEFILE}"  
322    
323  ## show output of pretend  ## show output of pretend
324  if [[ ${METHOD} = pretend ]] || [[ ${METHOD} = srcpretend ]]  if [[ ${METHOD} = pretend ]] || \
325     [[ ${METHOD} = srcpretend ]] || \
326     [[ ${METHOD} = uppretend ]] || \
327     [[ ${METHOD} = srcuppretend ]] || \
328     [[ ${METHOD} = pretend-build-prerequisites ]]
329  then  then
330   # this is a little bit faster   # this is a little bit faster
331   declare -i x=0   declare -i x=0
# Line 199  then Line 342  then
342   PBUILD="$(magename2pbuild ${i})"   PBUILD="$(magename2pbuild ${i})"
343   if [ -z "${list}" ]   if [ -z "${list}" ]
344   then   then
345   list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"   list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
346   else   else
347   list="${list}   list="${list}
348  \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"  \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
# Line 209  then Line 352  then
352   echo "done"   echo "done"
353   echo -e "${list}"   echo -e "${list}"
354   echo   echo
355    
356     if [[ ! -z ${INVALID_DEPS} ]]
357     then
358     echo -e "${COLRED}Invalid dependencies found:${COLDEFAULT}"
359     for i in ${INVALID_DEPS}
360     do
361     _dep="${i%%:*}"
362     _mage="${i##*:}"
363     echo -e "${COLRED} '${_dep}' -> '${_mage}'${COLDEFAULT}"
364     done
365     echo
366     fi
367    
368     if [[ ! -z ${NO_UPGRADE_CANDIDATE} ]]
369     then
370     echo -e "${COLRED}Currently no candidates found for:${COLDEFAULT}"
371     for i in ${NO_UPGRADE_CANDIDATE}
372     do
373     echo -e "${COLRED}    ${i}${COLDEFAULT}"
374     done
375     echo
376     echo -e "${COLRED}Please consider to uninstall all of them first,${COLDEFAULT}"
377     echo -e "${COLRED}because these packages does not exist in this distribution${COLDEFAULT}"
378     echo -e "${COLRED}anymore and there will be no further support for them.${COLDEFAULT}"
379     echo
380     fi
381  fi  fi
382    
383  ## return output from src/install deps  ## return output from src/install deps
384  [[ ${METHOD} = install ]] || [[ ${METHOD} = srcinstall ]] && echo "${ALLDEPS}"  [[ ${METHOD} = install ]] || \
385     [[ ${METHOD} = srcinstall ]] || \
386  # delete ${BUILDDIR}/virtuals if exists as not needed anymore   [[ ${METHOD} = upgrade ]] || \
387  #[ -d ${BUILDDIR}/virtuals ] && rm -rf ${BUILDDIR}/virtuals   [[ ${METHOD} = srcupgrade ]] || \
388     [[ ${METHOD} = install-build-prerequisites ]] && \
389     echo "${ALLDEPS}"

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