the file pointed by the MONO_CONFIG environment variable.
.PP
For each assembly loaded a config file with the name:
-/path/to/the/assembly.exe.config is loaded, too.
+/path/to/the/assembly.exe.config is loaded as well as the
+~/.mono/assemblies/ASSEMBLY/ASSEMBLY.EXT.config file.
.PP
This file controls the behavior of the runtime.
.PP
.B<configuration>
section (It actually uses GMarkup
to parse the file).
+.PP
+This page describes the Unix-specific and Mono-specific extensions to
+the configuration file; For complete details, see the
+http://www.mono-project.com/Config web page.
.SH <dllmap> directive
You use the dllmap directive to map shared libraries referenced by
P/Invoke in your assemblies to a different shared library.
element takes two attributes:
.TP
.I dll
-This should be the same string used in the DllImport attribute
+This should be the same string used in the DllImport attribute, optionally
+prefixed with "i:" to indicate that the string must be matched in a
+case-insensitive way
.TP
.I target
This should be the name of the library where the function can be found:
.I target
This is the name of the function to lookup instead of the name specified in the
P/Invoke method.
+.SH Mapping based on operating system and cpu
+Both the
+.B dllmap
+and the
+.B dllentry
+elements allow the following two attributes which make it easy to use a single
+configuration file and support multiple operating systems and architectures with
+different mapping requirements:
+.TP
+.I os
+This is the name of the operating system for which the mapping should be applied.
+Allowed values are: linux, osx, solaris, freebsd, openbsd, netbsd, windows, aix, hpux.
+.TP
+.I cpu
+This is the name of the architecture for which the mapping should be applied.
+Allowed values are: x86, x86-64, sparc, ppc, s390, s390x, arm, mips, alpha, hppa, ia64.
+.PP
+The attribute value for both attributes can be a comma-separated list of the allowed
+values. Additionally, the first character may be a
+.I '!'
+to reverse the meaning. An attribute value of "!windows,osx", for example, would mean
+that the entry is considered on all operating systems, except on Windows and OS X.
+No spaces are allowed in any part of the value.
+.PP
+Note that later entries will override the entries defined earlier in the file.
.SH EXAMPLES
The following example maps references to the `cygwin1.dll' shared
library to the `libc.so.6' file.
.nf
<configuration>
- <dllmap dll="cygwin1.dll" target="libc.so.6"/>
+ <dllmap dll="i:cygwin1.dll" target="libc.so.6"/>
</configuration>
.fi
+The library name in the DllImport attribute is allowed to be in any
+case variant, like the following examples:
+.nf
+.nf
+ [DllImport ("cygwin1.dll")]
+ [DllImport ("Cygwin1.dll")]
+ [DllImport ("cygwiN1.Dll")]
+.fi
.PP
This one maps the following C# method:
.nf
to
.B differentfunction
in
-.B libdifferent.so.
+.B libdifferent.so
+, but to the same function in the library
+.B libanother.so
+when running under the Solaris and FreeBSD operating systems.
.nf
<configuration>
<dllmap dll="libc">
<dllentry dll="libdifferent.so" name="somefunction" target="differentfunction" />
+ <dllentry os="solaris,freebsd" dll="libanother.so" name="somefunction" target="differentfunction" />
</dllmap>
</configuration>
.fi