2008-04-16 Wade Berrier <wberrier@novell.com>
[mono.git] / scripts / mono-find-requires.in
index 02deeeef7e32ea7125846656e8c7e75a304ff529..fca4c1442eba283218c0a9e47abad5e30243db1e 100644 (file)
@@ -4,8 +4,9 @@
 #
 # Authors:
 #       Ben Maurer (bmaurer@ximian.com)
+#       Wade Berrier (wberrier@novell.com)
 #
-# (C) 2005 Novell (http://www.novell.com)
+# (C) 2008 Novell (http://www.novell.com)
 #
 
 IFS=$'\n'
@@ -33,9 +34,16 @@ fi
 if test "x@reloc_libdir@" = "xlib64" ; then
         libext="()(64bit)"
 else
+       # (note, this works on ppc64 since we only have 32bit mono)
         libext=""
 fi
 
+# Exceptions:
+case `uname -m` in
+       # ia64 doesn't use lib64 for 'libdir' (sles 9 rpm used to provide both... no longer)
+       ia64)   libext="()(64bit)" ;;
+esac
+
 # set LD_LIBRARY_PATH to ensure that libmono.so is found
 export LD_LIBRARY_PATH=$libdir${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
 
@@ -62,6 +70,9 @@ REQUIRES=$(
                        }
                    ') 2> /dev/null
        done
+)
+
+rpm_config_REQUIRES=$(
        # Parse the xml .config files to see what native binaries we call into
        # TODO: also check monodis --moduleref
        for i in "${configlist[@]}"; do
@@ -69,7 +80,9 @@ REQUIRES=$(
                        ignore=0
                        req=""
                        split($_, toks, "\"")
-                       for(i=1; i <= length(toks); i++) {
+                       toks_size=0
+                        for(tok in toks) { toks_size++ }
+                       for(i=1; i <= toks_size; i++) {
                                if(toks[i] ~ /target=/) {
                                        req=toks[i+1]
                                }
@@ -84,7 +97,9 @@ REQUIRES=$(
                                        }
 
                                        split(attr, os_targets, ",")
-                                       for(j=1; j <= length(os_targets); j++) {
+                                       os_targets_size=0
+                                        for(os_target in os_targets) { os_targets_size++ }
+                                       for(j=1; j <= os_targets_size; j++) {
                                                if(os_targets[j] == "linux") {
                                                        found=1
                                                }
@@ -99,12 +114,31 @@ REQUIRES=$(
                                }
                        }
                        if(!ignore) {
-                               system("rpm -q --whatprovides --queryformat \"%{NAME}\n\" ""\""req"'$libext'""\"")
+                               print req"'$libext'"
                        }
                } ' $i 2>/dev/null
        done
 )
 
+# Resolve provides to packages, warning on missing to stderr
+config_REQUIRES=$(
+       for i in ${rpm_config_REQUIRES[@]} ; do
+               out=$(rpm -q --whatprovides --queryformat "%{NAME}\n" $i)
+               if [ $? -eq 0 ] ; then
+                       echo $out
+               else
+                       # echo to stderr
+                       echo "mono-find-requires: Warning, could not find package that provides: $i" >&2
+               fi
+       done
+)
+
+# Note about above:
+#  Use to do: system("rpm -q --whatprovides --queryformat \"%{NAME}\n\" ""\""req"'$libext'""\"")
+#  rpmlint prefers to have lib names instead of package names.  There was a reason I was using package names but it slips me now...
+#  Ah... now I remember... it's for noarch packs.  The noarch packages can be built on either 32 or 64 bit... so we have to depend
+#   on the package name instead.
+
 PROVIDES=$(
        for i in "${monolist[@]}"; do
                ($bindir/monodis --assembly $i | awk '
@@ -123,9 +157,11 @@ PROVIDES=$(
 # in PROVIDES. While RPM functions correctly when such deps exist,
 # they make the metadata a bit bloated.
 #
+# TODO: make this use the mono-find-provides script, to share code
 
 # Filter out dups from both lists
-REQUIRES=$(echo "$REQUIRES" | sort | uniq)
+REQUIRES=$(echo "$REQUIRES
+$config_REQUIRES"  | sort | uniq)
 PROVIDES=$(echo "$PROVIDES" | sort | uniq)
 
 #