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 2221 by niro, Wed Oct 16 07:40:02 2013 UTC branches/mage-next/src/depwalker.in revision 2839 by niro, Wed Oct 22 12:27:17 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 "  -d     --debug         enable debug mode"   echo "                         install, srcinstall, pretend, srcpretend"
  echo "                         install, srcinstall, depend, srcdepend"  
36   echo "                         upgrade, srcupgrade,"   echo "                         upgrade, srcupgrade,"
37   echo "                         install-build-prerequisites, pretend-build-prerequisites"   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  # always default debug=0  # set some sane defaults
48  DEBUG=0  DEBUG=0
49    SMAGE_DEPEND=0
50    
51  # very basic getops  # very basic getops
52  for i in $*  for i in $*
# Line 55  do Line 58  do
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 ;;   --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 72  done Line 79  done
79  [ -z "${INSTALLDB}" ] && die "\$INSTALLDB not set."  [ -z "${INSTALLDB}" ] && die "\$INSTALLDB not set."
80  [ -z "${BUILDDIR}" ] && die "\$BUILDDIR not set."  [ -z "${BUILDDIR}" ] && die "\$BUILDDIR not set."
81    
82    # load mage-features to support them with smagesource()
83    load_mage_features
84    
85  # other needed vars  # other needed vars
86  ALLDEPS=""  ALLDEPS=""
87    if [[ -n ${SMAGEFILE} ]]
88    then
89     if [[ -e ${SMAGEFILE} ]]
90     then
91     smagesource "${SMAGEFILE}"
92     else
93     die "Smage file '${SMAGEFILE}' does not exist!"
94     fi
95    fi
96  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"  MAGEFILE="${MAGEDIR}/${PCAT}/${PNAME}/${PNAME}-${PVER}-${PBUILD}.mage"
97    
98  # much faster than fgrep  # much faster than fgrep
# Line 126  depwalking() Line 145  depwalking()
145    
146   DFILE="$1"   DFILE="$1"
147    
148     # debug info
149     decho "depwalking magefile '${DFILE}'"
150     decho
151    
152   source ${DFILE}   source ${DFILE}
153    
154   # forced nodeps   # forced nodeps
# Line 138  depwalking() Line 161  depwalking()
161   MY_DEPEND="${DEPEND}"   MY_DEPEND="${DEPEND}"
162    
163   # for srcinstall & srcdepend only; SDEPEND also needed   # for srcinstall & srcdepend only; SDEPEND also needed
164   if [[ ${METHOD} = srcinstall ]] || \   if [[ ${METHOD} = srcinstall ]] ||
165   [[ ${METHOD} = srcpretend ]] || \   [[ ${METHOD} = srcpretend ]] ||
166   [[ ${METHOD} = srcupgrade ]] || \   [[ ${METHOD} = srcupgrade ]] ||
167   [[ ${METHOD} = srcuppretend ]]   [[ ${METHOD} = srcuppretend ]] ||
168     [[ ${METHOD} = install-build-prerequisites ]] ||
169     [[ ${METHOD} = pretend-build-prerequisites ]]
170   then   then
171   # only if SDEPEND is not zero   # only if SDEPEND is not zero
172   if [ -n "${SDEPEND}" ]   if [ -n "${SDEPEND}" ]
# Line 157  depwalking() Line 182  depwalking()
182   fi   fi
183   fi   fi
184    
  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  
   
185   unset DEPEND   unset DEPEND
186   unset SDEPEND   unset SDEPEND
187    
188   if [ -z "${MY_DEPEND}" ]   if [ -z "${MY_DEPEND}" ]
189   then   then
190     decho "MY_DEPEND is empty; deps of '${DFILE}' ignored"
191   return 1   return 1
192   fi   fi
193    
194   while read SYM DEPNAME   while read SYM DEPNAME
195   do   do
196   if [[ ${DEBUG} = 1 ]]   # debug info
197   then   decho "DEPNAME='${DEPNAME}'"
  echo "DEBUG: DEPNAME='${DEPNAME}'" >&2  
  fi  
198    
199   # exclude empty depnames   # exclude empty depnames
200   [[ -z ${DEPNAME} ]] && continue   [[ -z ${DEPNAME} ]] && continue
# Line 205  depwalking() Line 207  depwalking()
207    
208   # mark depfile as processed to prevent double runs -without version   # mark depfile as processed to prevent double runs -without version
209   # but do not add any virtuals to PROCESSEDDEPS or their resolved   # but do not add any virtuals to PROCESSEDDEPS or their resolved
210   # pkgnames will be ignored and they are missing on the dependecy-list   # pkgnames will be ignored and they are missing on the dependency-list
211   if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]   if [[ ${DEPNAME/virtual\//} = ${DEPNAME} ]]
212   then   then
213   PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"   PROCESSEDDEPS="${PROCESSEDDEPS} ${DEPNAME%-*}"
# Line 232  depwalking() Line 234  depwalking()
234   ### check if the dependency is already installed ###   ### check if the dependency is already installed ###
235   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${MROOT}${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
236   then   then
237     # but first get all deps of highest_depfile to catch all dependencies of it
238   depwalking ${HIGHEST_DEPFILE}   depwalking ${HIGHEST_DEPFILE}
239   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"   ALLDEPS="${ALLDEPS} ${HIGHEST_DEPFILE}"
240     decho "added '${HIGHEST_DEPFILE}' to ALLDEPS"
241   fi   fi
242   fi   fi
243   done << EOF   done << EOF
# Line 264  then Line 268  then
268   # get the highest mage file from mage-db   # get the highest mage file from mage-db
269   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"   MAGEFILE="$(get_highest_magefile ${PCAT} ${PNAME})"
270    
271     # debug info
272     decho "dep='${dep}'"
273     decho "PCAT='${PCAT}'"
274     decho "PNAME='${PNAME}'"
275     decho "MAGEFILE='${MAGEFILE}'"
276    
277   # if no install candidate was found, record this   # if no install candidate was found, record this
278   # and process with the next one   # and process with the next one
279   if [[ -z ${MAGEFILE} ]]   if [[ -z ${MAGEFILE} ]]
280   then   then
281   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"   NO_UPGRADE_CANDIDATE="${NO_UPGRADE_CANDIDATE} ${PCAT}/${PNAME}"
282     decho "added to NO_UPGRADE_CANDIDATE"
283   continue   continue
284   fi   fi
285    
# Line 276  then Line 287  then
287   PVER="$(magename2pver ${MAGEFILE})"   PVER="$(magename2pver ${MAGEFILE})"
288   PBUILD="$(magename2pbuild ${MAGEFILE})"   PBUILD="$(magename2pbuild ${MAGEFILE})"
289    
290     # debug info
291     decho "PVER='${PVER}'"
292     decho "PBUILD='${PBUILD}'"
293    
294   # do not walk files which are installed   # do not walk files which are installed
295   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]   if [ ! -d ${INSTALLDB}/${PCAT}/${PNAME}-${PVER}-${PBUILD} ]
296   then   then
297   # get dependencies the package   # get dependencies the package
298   depwalking ${MAGEFILE}   depwalking ${MAGEFILE}
299    
300     # now add the package itself to the dependencies
301     # (if not exists already)
302     if checklist_alldeps "${MAGEFILE}"
303     then
304     decho "added '${MAGEFILE}' to ALLDEPS"
305     ALLDEPS="${ALLDEPS} ${MAGEFILE}"
306     fi
307     else
308     # debug info
309     decho "ignored package"
310     decho
311   fi   fi
312   done   done
313  else  else
  LOOP_COUNTER=0  
314   # get all dependencies of the package   # get all dependencies of the package
315   depwalking ${MAGEFILE}   if [[ -n ${SMAGEFILE} ]]
316     then
317     depwalking "${SMAGEFILE}"
318     else
319     depwalking "${MAGEFILE}"
320     fi
321  fi  fi
322    
323  if [[ ${METHOD} != install-build-prerequisites ]] &&  if [[ ${METHOD} != install-build-prerequisites ]] &&
324   [[ ${METHOD} != pretend-build-prerequisites ]]   [[ ${METHOD} != pretend-build-prerequisites ]] &&
325     [[ ${METHOD} != upgrade ]] &&
326     [[ ${METHOD} != uppretend ]] &&
327     [[ ${METHOD} != srcupgrade ]] &&
328     [[ ${METHOD} != srcuppretend ]]
329  then  then
330   # now add the package itself to the dependencies   # now add the package itself to the dependencies
331   # (if not exists already)   # (if not exists already)
332   if checklist_alldeps "${MAGEFILE}"   if checklist_alldeps "${MAGEFILE}"
333   then   then
334     decho "added '${MAGEFILE}' to ALLDEPS"
335   ALLDEPS="${ALLDEPS} ${MAGEFILE}"   ALLDEPS="${ALLDEPS} ${MAGEFILE}"
336   fi   fi
337  fi  fi

Legend:
Removed from v.2221  
changed lines
  Added in v.2839