Magellan Linux

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

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

revision 2221 by niro, Wed Oct 16 07:40:02 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
39   echo "Usage: $(basename $0) [command] [arg] ..."   echo "Usage: $(basename $0) [command] [arg] ..."
40   echo   echo
41   echo "  -h     --help          shows this help"   echo "  -h     --help          shows this help"
42   echo "  -c     --pcat          categorie of the package"   echo "  -c     --pcat          category of the package"
43   echo "  -n     --pname         name of the package"   echo "  -n     --pname         name of the package"
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 "  -d     --debug         enable debug mode"   echo "                         install, srcinstall, pretend, srcpretend"
  echo "                         install, srcinstall, depend, srcdepend"  
48   echo "                         upgrade, srcupgrade,"   echo "                         upgrade, srcupgrade,"
49   echo "                         install-build-prerequisites, pretend-build-prerequisites"   echo "                         install-build-prerequisites,"
50     echo "                         pretend-build-prerequisites"
51     echo "  -d     --debug         enable debug mode"
52     echo "  -s     --smage         use a smage to calculate dependencies"
53   echo   echo
54   echo "method, name, version and build must be given !"   echo "method, category, name, version and build must be given !"
55   echo   echo
56   exit 1   exit 1
57  }  }
# Line 55  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 74  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 126  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 138  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 157  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 205  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 232  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 264  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 276  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
305   # get dependencies the package   # get dependencies the package
306   depwalking ${MAGEFILE}   depwalking ${MAGEFILE}
307    
308     # now add the package itself to the dependencies
309     # (if not exists already)
310     if checklist_alldeps "${MAGEFILE}"
311     then
312     decho "added '${MAGEFILE}' to ALLDEPS"
313     ALLDEPS="${ALLDEPS} ${MAGEFILE}"
314     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 ]] &&
332   [[ ${METHOD} != pretend-build-prerequisites ]]   [[ ${METHOD} != pretend-build-prerequisites ]] &&
333     [[ ${METHOD} != upgrade ]] &&
334     [[ ${METHOD} != uppretend ]] &&
335     [[ ${METHOD} != srcupgrade ]] &&
336     [[ ${METHOD} != srcuppretend ]]
337  then  then
338   # now add the package itself to the dependencies   # now add the package itself to the dependencies
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.2221  
changed lines
  Added in v.2827