Be more explict when picking up libs from CoreFx
authorMatt Ellis <matell@microsoft.com>
Wed, 25 May 2016 17:25:49 +0000 (10:25 -0700)
committerMatt Ellis <matell@microsoft.com>
Wed, 25 May 2016 20:29:08 +0000 (13:29 -0700)
There's no contract in the CoreFx build layout that enforces an assembly
is only in one location in the resulting binaries folder. Different
projects may have different versions of dependent assemblies SxS with them
in their output folder.

To work around this, update the copy logic to use the folder name to
determine what assembly to copy from it.

tests/runtest.sh

index 6c3d6a6..2a70c1b 100755 (executable)
@@ -355,16 +355,19 @@ function create_core_overlay {
             if [ ! -d "$currDir" ]; then
                 exit_with_error "$errorSource" "Directory specified in --coreFxBinDir does not exist: $currDir"
             fi
-
-            (cd $currDir && find . -iwholename '*/netstandard/*.dll' \! -iwholename '*test*' \! -iwholename '*/ToolRuntime/*' \! -iwholename '*/RemoteExecutorConsoleApp/*' \! -iwholename '*aot*' -exec cp -n '{}' "$coreOverlayDir/" \;)
+            pushd $currDir > /dev/null
+            for dirName in $(find . -iname '*.dll' \! -iwholename '*test*' \! -iwholename '*/ToolRuntime/*' \! -iwholename '*/RemoteExecutorConsoleApp/*' \! -iwholename '*/net*' \! -iwholename '*aot*' -exec dirname {} \; | uniq | sed 's/\.\/\(.*\)/\1/g'); do
+                cp -n -v "$currDir/$dirName/$dirName.dll" "$coreOverlayDir/"
+            done
+            popd $currDur > /dev/null
         done
     done <<< $coreFxBinDir
 
-    cp -f "$coreFxNativeBinDir/Native/"*."$libExtension" "$coreOverlayDir/" 2>/dev/null
+    cp -f -v "$coreFxNativeBinDir/Native/"*."$libExtension" "$coreOverlayDir/" 2>/dev/null
 
-    cp -f "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
-    cp -f "$mscorlibDir/mscorlib.dll" "$coreOverlayDir/"
-    cp -n "$testDependenciesDir"/* "$coreOverlayDir/" 2>/dev/null
+    cp -f -v "$coreClrBinDir/"* "$coreOverlayDir/" 2>/dev/null
+    cp -f -v "$mscorlibDir/mscorlib.dll" "$coreOverlayDir/"
+    cp -n -v "$testDependenciesDir"/* "$coreOverlayDir/" 2>/dev/null
     if [ -f "$coreOverlayDir/mscorlib.ni.dll" ]; then
         # Test dependencies come from a Windows build, and mscorlib.ni.dll would be the one from Windows
         rm -f "$coreOverlayDir/mscorlib.ni.dll"