2
0
Эх сурвалжийг харах

2007-05-05 Wade Berrier <[email protected]>

	* 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
Wade Berrier 18 жил өмнө
parent
commit
c16adb8ea4

+ 9 - 0
ChangeLog

@@ -1,3 +1,12 @@
+2007-05-05  Wade Berrier  <[email protected]>
+
+	* 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  <[email protected]>
 
 	* data/net_2_0/web.config: use fully qualified assembly names in

+ 3 - 7
scripts/mono-find-provides.in

@@ -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
 

+ 54 - 6
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=$(