<dllmap dll="i:odbc32.dll" target="libiodbc.dylib" os="osx"/>
<dllmap dll="oci" target="libclntsh@libsuffix@" os="!windows"/>
<dllmap dll="db2cli" target="libdb2_36@libsuffix@" os="!windows"/>
- <dllmap dll="MonoPosixHelper" target="@prefix@/@reloc_libdir@/libMonoPosixHelper@libsuffix@" os="!windows" />
+ <dllmap dll="MonoPosixHelper" target="$mono_libdir/libMonoPosixHelper@libsuffix@" os="!windows" />
<dllmap dll="i:msvcrt" target="@LIBC@" os="!windows"/>
<dllmap dll="i:msvcrt.dll" target="@LIBC@" os="!windows"/>
<dllmap dll="sqlite" target="@SQLITE@" os="!windows"/>
for (i = 0; attribute_names [i]; ++i) {
if (strcmp (attribute_names [i], "dll") == 0)
info->dll = g_strdup (attribute_values [i]);
- else if (strcmp (attribute_names [i], "target") == 0)
- info->target = g_strdup (attribute_values [i]);
- else if (strcmp (attribute_names [i], "os") == 0 && !arch_matches (CONFIG_OS, attribute_values [i]))
+ else if (strcmp (attribute_names [i], "target") == 0) {
+ char *match = strstr (attribute_values [i], "$mono_libdir");
+ if (match != NULL) {
+ /* substitude $mono_libdir */
+ const char *libdir = mono_assembly_getrootdir ();
+ const int libdir_len = strlen (libdir);
+ const int varname_len = strlen ("$mono_libdir");
+ const int pre_len = match - attribute_values [i];
+ const int post_len = strlen (match) - varname_len + 3;
+
+ char *result = g_malloc (pre_len + libdir_len + post_len + 1);
+ g_strlcpy (result, attribute_values [i], pre_len);
+ strncat (result, libdir, libdir_len);
+ strncat (result, match + varname_len, post_len);
+ info->target = result;
+ } else
+ info->target = g_strdup (attribute_values [i]);
+ } else if (strcmp (attribute_names [i], "os") == 0 && !arch_matches (CONFIG_OS, attribute_values [i]))
info->ignore = TRUE;
else if (strcmp (attribute_names [i], "cpu") == 0 && !arch_matches (CONFIG_CPU, attribute_values [i]))
info->ignore = TRUE;