2007-05-05 Wade Berrier <wberrier@novell.com>
authorWade Berrier <wade@mono-cvs.ximian.com>
Sat, 5 May 2007 08:55:53 +0000 (08:55 -0000)
committerWade Berrier <wade@mono-cvs.ximian.com>
Sat, 5 May 2007 08:55:53 +0000 (08:55 -0000)
* 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

ChangeLog
scripts/mono-find-provides.in
scripts/mono-find-requires.in

index c9ea60335177bbaafdf6695c9173a3738e77360b..d5e1f1d0b47663a5971d3ac7b676fdb8284d9fc9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
 2007-04-27  Marek Habersack  <mhabersack@novell.com>
 
        * data/net_2_0/web.config: use fully qualified assembly names in
index de468c27e685d0c96086dd1f0aadab8c38e75d74..ac9d1c83aeb5528f6668f09472d0f68c05b3a43d 100644 (file)
@@ -17,19 +17,15 @@ monolist=($(printf "%s\n" "${filelist[@]}" | egrep "\\.(exe|dll)\$"))
 #monolist=($(printf "%s\n" "${monolist[@]}" | egrep "/gac/"))
 # Disabled... see ChangeLog
 
-a=`which "$0"`
-d=`dirname "$a"`
-
 # 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
 
index 5c9edddf391a71f0ab36d68eeb9dfc65cbd015db..02deeeef7e32ea7125846656e8c7e75a304ff529 100644 (file)
@@ -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=$(