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 1562 by niro, Wed Dec 28 09:59:15 2011 UTC branches/mage-next/src/depwalker.in revision 2626 by niro, Wed Mar 5 08:16:25 2014 UTC
# Line 2  Line 2 
2  # $Id$  # $Id$
3  # dependeny walker  # dependeny walker
4    
5  # default die function  decho()
 die()  
6  {  {
7   echo ${COLRED}"$@"${COLDEFAULT}   if [[ ${DEBUG} = 1 ]]
8   exit 1   then
9     echo "DEBUG: $@" >&2
10     fi
11  }  }
12    
13  # include all needed files  # first of all include common functions
14  [ -f /etc/mage.rc.global ] &&  \  source ${MLIBDIR}/common.functions.sh || exit 1
15   source /etc/mage.rc.global || \  source @@SYSCONFDIR@@/mage.rc.global || die "@@SYSCONFDIR@@/mage.rc.global missing"
16   die "/etc/mage.rc.global missing"  source ${MAGERC} || die "Your ${MAGERC} is missing. Aborting."
17    source ${MLIBDIR}/mage4.functions.sh || die "mage functions missing"
18  [ -f ${MAGERC} ] && source ${MAGERC} || \  source ${MLIBDIR}/smage2.functions.sh || die "smage functions missing"
  die "Your ${MAGERC} is missing. Aborting."  
   
 [ -f ${MLIBDIR}/mage4.functions.sh ] && \  
  source ${MLIBDIR}/mage4.functions.sh || \  
  die "mage functions missing"  
19    
20  usage()  usage()
21  {  {
# Line 27  usage() Line 23  usage()
23   echo "Usage: $(basename $0) [command] [arg] ..."   echo "Usage: $(basename $0) [command] [arg] ..."
24   echo   echo
25   echo "  -h     --help          shows this help"   echo "  -h     --help          shows this help"
26   echo "  -c     --pcat          categorie of the package"   echo "  -c     --pcat          category of the package"
27   echo "  -n     --pname         name of the package"   echo "  -n     --pname         name of the package"
28   echo "  -v     --pver          version number of the package"   echo "  -v     --pver          version number of the package"
29   echo "  -b     --pbuild        build number of the package"   echo "  -b     --pbuild        build number of the package"
30   echo "  -m     --method        which calc method should be used:"   echo "  -m     --method        which calc method should be used:"
31   echo "                         install, srcinstall, depend, srcdepend"   echo "                         install, srcinstall, pretend, srcpretend"
32   echo "                         upgrade, srcupgrade"   echo "                         upgrade, srcupgrade,"
33     echo "                         install-build-prerequisites,"
34     echo "                         pretend-build-prerequisites"
35     echo "  -d     --debug         enable debug mode"
36     echo "  -s     --smage         use a smage to calculate dependencies"
37   echo   echo
38   echo "method, name, version and build must be given !"   echo "method, category, name, version and build must be given !"
39   echo   echo
40   exit 1   exit 1
41  }  }
42    
43    # always default debug=0
44    DEBUG=0
45    
46  # very basic getops  # very basic getops
47  for i in $*  for i in $*
48  do  do
# Line 49  do Line 52  do
52   --pver|-v) shift; PVER="$1" ;;   --pver|-v) shift; PVER="$1" ;;
53   --pbuild|-b) shift; PBUILD="$1" ;;   --pbuild|-b) shift; PBUILD="$1" ;;
54   --method|-m) shift; METHOD="$1" ;;   --method|-m) shift; METHOD="$1" ;;
55     --debug|-d) shift; DEBUG=1 ;;
56     --smage|-s) shift; SMAGEFILE="$1"; SILENT=1; FVERBOSE=off ;;
57   --help|-h) usage ;;   --help|-h) usage ;;
58   esac   esac
59   shift   shift
60  done  done
61    
62  # sanity checks; abort if not given  # sanity checks; abort if not given
63  [ -z "${PCAT}" ] && usage  if [[ -z ${SMAGEFILE} ]]
64  [ -z "${PNAME}" ] && usage  then
65  [ -z "${PVER}" ] && usage   [ -z "${PCAT}" ] && usage
66  [ -z "${PBUILD}" ] && usage   [ -z "${PNAME}" ] && usage
67     [ -z "${PVER}" ] && usage
68     [ -z "${PBUILD}" ] && usage
69    fi
70  [ -z "${METHOD}" ] && usage  [ -z "${METHOD}" ] && usage
71    
72  # check needed global vars  # check needed global vars
# Line 68  done Line 76  done
76    
77  # other needed vars  # other needed vars
78  ALLDEPS=""  ALLDEPS=""
79    if [[ -n ${SMAGEFILE} ]]
80    then
81     if [[ -e ${SMAGEFILE} ]]
82     then
83     smagesource "${SMAGEFILE}"
84     else
85     die "Smage file '${SMAGEFILE}' does not exist!"
86     fi
87    fi
88  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"
89    
90  # much faster than fgrep  # much faster than fgrep
# Line 98  checklist_processeddeps() Line 115  checklist_processeddeps()
115  }  }
116    
117  #####################  #####################
118  ##  rumwandern /path/to/mage/file/.mage  ##  depwalking /path/to/mage/file/.mage
119  rumwandern()  depwalking()
120  {  {
121   unset DEPEND   unset DEPEND
122   unset SDEPEND   unset SDEPEND
# Line 120  rumwandern() Line 137  rumwandern()
137    
138   DFILE="$1"   DFILE="$1"
139    
140     # debug info
141     decho "depwalking magefile '${DFILE}'"
142     decho
143    
144   source ${DFILE}   source ${DFILE}
145    
146   # forced nodeps   # forced nodeps
# Line 132  rumwandern() Line 153  rumwandern()
153   MY_DEPEND="${DEPEND}"   MY_DEPEND="${DEPEND}"
154    
155   # for srcinstall & srcdepend only; SDEPEND also needed   # for srcinstall & srcdepend only; SDEPEND also needed
156   if [[ ${METHOD} = srcinstall ]] || \   if [[ ${METHOD} = srcinstall ]] ||
157   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] ||
158   [[ ${METHOD} = srcupgrade ]] || \   [[ ${METHOD} = srcupgrade ]] ||
159   [[ ${METHOD} = srcuppretend ]]   [[ ${METHOD} = srcuppretend ]] ||
160     [[ ${METHOD} = install-build-prerequisites ]] ||
161     [[ ${METHOD} = pretend-build-prerequisites ]]
162   then   then
163   # only if SDEPEND is not zero   # only if SDEPEND is not zero
164   if [ -n "${SDEPEND}" ]   if [ -n "${SDEPEND}" ]
# Line 156  rumwandern() Line 179  rumwandern()
179    
180   if [ -z "${MY_DEPEND}" ]   if [ -z "${MY_DEPEND}" ]
181   then   then
182     decho "MY_DEPEND is empty; deps of '${DFILE}' ignored"
183   return 1   return 1
184   fi   fi
185    
186   while read SYM DEPNAME   while read SYM DEPNAME
187   do   do
188     # debug info
189     decho "DEPNAME='${DEPNAME}'"
190    
191   # exclude empty depnames   # exclude empty depnames
192   [[ -z ${DEPNAME} ]] && continue   [[ -z ${DEPNAME} ]] && continue
193    
# Line 179  rumwandern() Line 206  rumwandern()
206   fi   fi
207    
208   HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}")   HIGHEST_DEPFILE=$(dep2highest_magefile "${DEPNAME}")
209     if [[ -z ${HIGHEST_DEPFILE} ]]
210     then
211     INVALID_DEPS+=" ${DEPNAME}:${DFILE}"
212     continue
213     fi
214    
215   PCAT="$(magename2pcat ${HIGHEST_DEPFILE})"   PCAT="$(magename2pcat ${HIGHEST_DEPFILE})"
216   PNAME="$(magename2pname ${HIGHEST_DEPFILE})"   PNAME="$(magename2pname ${HIGHEST_DEPFILE})"
# Line 191  rumwandern() Line 223  rumwandern()
223   #if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ]   #if [ -z "$(echo ${ALLDEPS} | fgrep "${HIGHEST_DEPFILE}")" ]
224   if checklist_alldeps "${HIGHEST_DEPFILE}"   if checklist_alldeps "${HIGHEST_DEPFILE}"
225   then   then
226   ### check ob DFILE schon installiert ist ###   ### check if the dependency is already installed ###
227   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
228   then   then
229   rumwandern ${HIGHEST_DEPFILE}   depwalking ${HIGHEST_DEPFILE}
230   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"
231     decho "added '${HIGHEST_DEPFILE}' to ALLDEPS"
232   fi   fi
233   fi   fi
234   done << EOF   done << EOF
# Line 207  EOF Line 240  EOF
240  [[ ${METHOD} = pretend ]] || \  [[ ${METHOD} = pretend ]] || \
241   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] || \
242   [[ ${METHOD} = uppretend ]] || \   [[ ${METHOD} = uppretend ]] || \
243   [[ ${METHOD} = srcuppretend ]] && \   [[ ${METHOD} = srcuppretend ]] || \
244     [[ ${METHOD} = pretend-build-prerequisites ]] && \
245   echo -n "Calculating dependencies ... "   echo -n "Calculating dependencies ... "
246    
247    
# Line 225  then Line 259  then
259   # get the highest mage file from mage-db   # get the highest mage file from mage-db
260   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"
261    
262     # debug info
263     decho "dep='${dep}'"
264     decho "PCAT='${PCAT}'"
265     decho "PNAME='${PNAME}'"
266     decho "MAGEFILE='${MAGEFILE}'"
267    
268   # if no install candidate was found, record this   # if no install candidate was found, record this
269   # and process with the next one   # and process with the next one
270   if [[ -z ${MAGEFILE} ]]   if [[ -z ${MAGEFILE} ]]
271   then   then
272   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"
273     decho "added to NO_UPGRADE_CANDIDATE"
274   continue   continue
275   fi   fi
276    
# Line 237  then Line 278  then
278   PVER="$(magename2pver ${MAGEFILE})"   PVER="$(magename2pver ${MAGEFILE})"
279   PBUILD="$(magename2pbuild ${MAGEFILE})"   PBUILD="$(magename2pbuild ${MAGEFILE})"
280    
281     # debug info
282     decho "PVER='${PVER}'"
283     decho "PBUILD='${PBUILD}'"
284    
285   # do not walk files which are installed   # do not walk files which are installed
286   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
287   then   then
288   # get dependencies the package   # get dependencies the package
289   rumwandern ${MAGEFILE}   depwalking ${MAGEFILE}
290    
291   # now add the package itself to the dependencies   # now add the package itself to the dependencies
292   # (if not exists already)   # (if not exists already)
  #if [ -z "$(echo ${ALLDEPS} | fgrep "${MAGEFILE}")" ]  
293   if checklist_alldeps "${MAGEFILE}"   if checklist_alldeps "${MAGEFILE}"
294   then   then
295     decho "added '${MAGEFILE}' to ALLDEPS"
296   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   ALLDEPS="${ALLDEPS} ${MAGEFILE}"
297   fi   fi
298     else
299     # debug info
300     decho "ignored package"
301     decho
302   fi   fi
303   done   done
304  else  else
305   # get all dependencies of the package   # get all dependencies of the package
306   rumwandern ${MAGEFILE}   if [[ -n ${SMAGEFILE} ]]
307     then
308     depwalking "${SMAGEFILE}"
309     else
310     depwalking "${MAGEFILE}"
311     fi
312    fi
313    
314    if [[ ${METHOD} != install-build-prerequisites ]] &&
315     [[ ${METHOD} != pretend-build-prerequisites ]] &&
316     [[ ${METHOD} != upgrade ]] &&
317     [[ ${METHOD} != uppretend ]] &&
318     [[ ${METHOD} != srcupgrade ]] &&
319     [[ ${METHOD} != srcuppretend ]]
320    then
321   # now add the package itself to the dependencies   # now add the package itself to the dependencies
322   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   # (if not exists already)
323     if checklist_alldeps "${MAGEFILE}"
324     then
325     decho "added '${MAGEFILE}' to ALLDEPS"
326     ALLDEPS="${ALLDEPS} ${MAGEFILE}"
327     fi
328  fi  fi
329    
330  [[ ${METHOD} = pretend ]] || \  [[ ${METHOD} = pretend ]] || \
331   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] || \
332   [[ ${METHOD} = uppretend ]] || \   [[ ${METHOD} = uppretend ]] || \
333   [[ ${METHOD} = srcuppretend ]] && \   [[ ${METHOD} = srcuppretend ]] || \
334     [[ ${METHOD} = pretend-build-prerequisites ]] && \
335   echo "done"   echo "done"
336    
337    
# Line 271  fi Line 339  fi
339  if [[ ${METHOD} = pretend ]] || \  if [[ ${METHOD} = pretend ]] || \
340   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] || \
341   [[ ${METHOD} = uppretend ]] || \   [[ ${METHOD} = uppretend ]] || \
342   [[ ${METHOD} = srcuppretend ]]   [[ ${METHOD} = srcuppretend ]] || \
343     [[ ${METHOD} = pretend-build-prerequisites ]]
344  then  then
345   # this is a little bit faster   # this is a little bit faster
346   declare -i x=0   declare -i x=0
# Line 288  then Line 357  then
357   PBUILD="$(magename2pbuild ${i})"   PBUILD="$(magename2pbuild ${i})"
358   if [ -z "${list}" ]   if [ -z "${list}" ]
359   then   then
360   list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"   list="\t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
361   else   else
362   list="${list}   list="${list}
363  \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"  \t${COLBLUE}[${k}] ${COLGREEN}${PCAT}/${PNAME}-${PVER}-${PBUILD}${COLDEFAULT}"
# Line 299  then Line 368  then
368   echo -e "${list}"   echo -e "${list}"
369   echo   echo
370    
371     if [[ ! -z ${INVALID_DEPS} ]]
372     then
373     echo -e "${COLRED}Invalid dependencies found:${COLDEFAULT}"
374     for i in ${INVALID_DEPS}
375     do
376     _dep="${i%%:*}"
377     _mage="${i##*:}"
378     echo -e "${COLRED} '${_dep}' -> '${_mage}'${COLDEFAULT}"
379     done
380     echo
381     fi
382    
383   if [[ ! -z ${NO_UPGRADE_CANDIDATE} ]]   if [[ ! -z ${NO_UPGRADE_CANDIDATE} ]]
384   then   then
385   echo -e "${COLRED}Currently no candidates found for:${COLDEFAULT}"   echo -e "${COLRED}Currently no candidates found for:${COLDEFAULT}"
# Line 318  fi Line 399  fi
399  [[ ${METHOD} = install ]] || \  [[ ${METHOD} = install ]] || \
400   [[ ${METHOD} = srcinstall ]] || \   [[ ${METHOD} = srcinstall ]] || \
401   [[ ${METHOD} = upgrade ]] || \   [[ ${METHOD} = upgrade ]] || \
402   [[ ${METHOD} = srcupgrade ]] && \   [[ ${METHOD} = srcupgrade ]] || \
403     [[ ${METHOD} = install-build-prerequisites ]] && \
404   echo "${ALLDEPS}"   echo "${ALLDEPS}"

Legend:
Removed from v.1562  
changed lines
  Added in v.2626