diff options
author | Wade Berrier <wade@mono-cvs.ximian.com> | 2007-05-05 12:55:53 +0400 |
---|---|---|
committer | Wade Berrier <wade@mono-cvs.ximian.com> | 2007-05-05 12:55:53 +0400 |
commit | c16adb8ea455cc32fe64e0063327337952ede527 (patch) | |
tree | 69f69acee92a7ffc3f28443cbbd086b87f792288 /scripts/mono-find-requires.in | |
parent | f6314b4401593f090ef7812c7b36904db7fe6e9f (diff) |
2007-05-05 Wade Berrier <wberrier@novell.com>
* scripts/mono-find-provides.in: don't use 'which' anymore (never solved
anything since it broke symlinks)
* scripts/mono-find-requires.in: also don't use 'which'
Parse .config files to look for native libs. Honor 'os' attributes for
dllmaps. Query rpm db for package that provides this lib. Support 64bit
rpm configurations, as well as 32bit running on 64bit.
svn path=/trunk/mono/; revision=76732
Diffstat (limited to 'scripts/mono-find-requires.in')
-rw-r--r-- | scripts/mono-find-requires.in | 60 |
1 files changed, 54 insertions, 6 deletions
diff --git a/scripts/mono-find-requires.in b/scripts/mono-find-requires.in index 5c9edddf391..02deeeef7e3 100644 --- a/scripts/mono-find-requires.in +++ b/scripts/mono-find-requires.in @@ -12,22 +12,29 @@ IFS=$'\n' filelist=($(grep -Ev '/usr/doc/|/usr/share/doc/')) monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$")) -a=`which "$0"` -d=`dirname "$a"` +# parse .config files to find which native libraries to depend on +# (target attribute must have double quotes for this to work, ie: target="file" ) +# Add /etc/mono/config ? +configlist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.config\$")) # Set the prefix, unless it is overriden (used when building mono rpms) -: ${prefix=$d/..} +: ${prefix=@prefix@} -exec_prefix=$d/.. libdir=$prefix/@reloc_libdir@ -bindir=$d +bindir=$prefix/bin # Bail out if monodis or libmono is missing if [ ! -x $bindir/monodis ] || [ ! -f $libdir/libmono.so ] ; then - echo "monodis missing or unusable, exiting..." + echo "monodis missing or unusable, exiting..." 1>&2 exit 1 fi +# special case for 64bit archs +if test "x@reloc_libdir@" = "xlib64" ; then + libext="()(64bit)" +else + libext="" +fi # set LD_LIBRARY_PATH to ensure that libmono.so is found export LD_LIBRARY_PATH=$libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} @@ -55,6 +62,47 @@ REQUIRES=$( } ') 2> /dev/null done + # Parse the xml .config files to see what native binaries we call into + # TODO: also check monodis --moduleref + for i in "${configlist[@]}"; do + awk 'match($_, /<dllmap .*target=.*/) { + ignore=0 + req="" + split($_, toks, "\"") + for(i=1; i <= length(toks); i++) { + if(toks[i] ~ /target=/) { + req=toks[i+1] + } + if(toks[i] ~ /os=/) { + negate=0 + found=0 + + attr=toks[i+1] + if(attr ~ /^!/) { + attr=substr(attr, 2, length(attr)-1) + negate=1 + } + + split(attr, os_targets, ",") + for(j=1; j <= length(os_targets); j++) { + if(os_targets[j] == "linux") { + found=1 + } + } + + if(negate) { + found=!found + } + if (!found) { + ignore=1 + } + } + } + if(!ignore) { + system("rpm -q --whatprovides --queryformat \"%{NAME}\n\" ""\""req"'$libext'""\"") + } + } ' $i 2>/dev/null + done ) PROVIDES=$( |