Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / man / mono-config.5
index 1800f42b8d24b17dd841b7f196ba892c37e55eef..a8e31f3ed3356515a970d082eb42bb5537a13e2f 100644 (file)
@@ -1,10 +1,11 @@
 .\" 
-.\" mono configuration page.
+.\" mono-config configuration page.
 .\" (C) Ximian, Inc. 
 .\" Author:
 .\"   Miguel de Icaza (miguel@gnu.org)
+.\"   Paolo Molaro (lupus@ximian.com)
 .\"
-.TH Mono "Mono 1.0"
+.TH Mono "mono-config"
 .SH NAME
 mono-config \- Mono runtime file format configuration
 .SH DESCRIPTION
@@ -12,6 +13,10 @@ The Mono runtime will load configuration data from the
 installation prefix /etc/mono/config file, the ~/.mono/config or from
 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 as well as the
+~/.mono/assemblies/ASSEMBLY/ASSEMBLY.EXT.config file. 
+.PP
 This file controls the behavior of the runtime.
 .PP
 The file contains an XML-like file with various sections, all of them
@@ -19,18 +24,115 @@ contained inside a
 .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.
 .PP
 This is typically used to map Windows libraries to Unix library names.
+The 
+.B dllmap
+element takes two attributes:
+.TP
+.I dll
+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: 
+this name should be suitable for use with the platform native shared library 
+loading routines (dlopen etc.), so you may want to check the manpages for that, too.
+.SH <dllentry> directive
+This directive can be used to map a specific dll/function pair to a different
+library and also a different function name. It should appear inside a
+.B dllmap
+element with only the dll attribute specified.
+.PP
+The
+.B dllentry
+element takes 3 attributes:
+.TP
+.I dll
+This is the target library, where the function can be found.
+.TP
+.I name
+This is the name of the function as it appears in the metadata: it is the name 
+of the P/Invoke method.
+.TP
+.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.
+.TP
+.I wordsize
+This is the size of registers on the target architecture, it can be
+either 32 or 64.  
+.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
+       [DllImport ("libc")]
+       static extern void somefunction ();
+.fi
+to
+.B differentfunction
+in
+.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
+
 .SH SEE ALSO
-.BR mono(1), monodis(1), mint(1)
\ No newline at end of file
+.BR mono(1), monodis(1), mint(1)