.TH ml-nlffigen 1 "April 25, 2003" .SH NAME ml-nlffigen \- SML No Longer Foreign Function Interface tool .SH SYNOPSIS .B ml-nlffigen .RI [ option ] -- .I file .br .SH DESCRIPTION This manual page documents briefly the .B ml-nlffigen command. This manual page was written for the Debian distribution because the original program does not have a manual page. .PP .BR ml-nlffigen , a glue-code generator for the new .SM NLFFI foreign function interface. The generator reads C source code and emits ML code along with a description file for CM. .SH OPTIONS A summary of options is included below. .IP "\fB-dir \fIdir" 4 .PD 0 .IP "\fB-d \fId" 4 .PD Output directory where all generated files are placed. .BR default : .IR NLFFI-Generated . .IP "\fB-allSU" .PD Instructs .B ml-nlffigen to include all structs and unions, even those that are defined in included files (as opposed to files explicitly listed as arguments). .BR default : .IR off . .IP "\fB-width \fIw" .PD 0 .IP "\fB-w \fIw" .PD Sets output line width (just a guess) to .IR w . .BR default : .IR 75 . .IP "\fB-smloption \fIx" .PD Instructs .B ml-nlffigen to include .I x into the list of options to annotate .sml entries in the generated .cm file with. .BR default : .IR noguid . .IP "\fB-guid" .PD Removes the default .B -noguid from the list of sml options. (This re-enables strict handling of type- and object-identity but can have negative impact on CM cutoff recompilation performance if the programmer routinely removes the entire tree of ml-nlffigen-generated files during development.) .IP "\fB-lambdasplit \fIx" .PD 0 .IP "\fB-ls \fIx" .PD Instructs .B ml-nlffigen to generate "lambdasplit" options for all ML files (see CM manual for what this means; it does not currently work anyway because cross-module inlining is broken). .BR default : nothing. .IP "\fB-target \fIt" .PD 0 .IP "\fB-t \fIt" .PD Sets the target to .I t (which must be one of "sparc-unix","x86-unix", or "x86-win32"). .BR default : current architecture. .IP "\fB-light" .PD 0 .IP "\fB-l" .PD Suppress "heavy" versions of function wrappers and field accessors; also resets any earlier .B -heavy to default. .BR default ": not suppressed." .IP "\fB-heavy" .PD 0 .IP "\fB-h" .PD suppress "light" versions of function wrappers and field accessors; also resets any earlier .B -light to default. .BR default ": not suppressed" .IP "\fB-namedargs" .PD 0 .IP "\fB-na" .PD Instruct .B ml-nlffigen to generated function wrappers that use named arguments (ML records) instead of tuples if there is enough information for this in the C source; (this is not always very useful). .BR default ": off." .IP "\fB-nocollect" .PD Do not do the following: Collect enum constants from truly unnamed enumerations (those without tags that occur at toplevel or in an unnamed context, i.e., not in a typedef or another named struct or union) into a single artificial enumeration tagged by ' (single apostrohe). The corresponding ML-side representative will be a structure named E_'. .IP "\fB-enum-constructors" .PD 0 .IP "\fB-ec" .PD When possible (i.e., if all values of a given enumeration are different from each other), make the ML representation type of the enumeration a datatype. The default (and fallback) is to make that type the same as .BR MLRep.Signed.int . .IP "\fB-libhandle \fIh" .PD 0 .IP "\fB-lh \fIh" .PD Use the variable .I h to refer to the handle to the shared library object. Given the constraints of CM, .I h must have the form of a long ML identifier, e.g., .BR MyLibrary.libhandle . default : Library.libh . .IP "\fB-include \fIf" .PD 0 .IP "\fB-add \fIf" .PD Mention file .I f in the generated .cm file. This option is necessary at least once for providing the library handle. It can be used arbitrarily many times, resulting in more than one such programmer-supplied file to be mentioned. If .I f is relative, then it must be relative to the directory specified in the .BI -dir " dir" option. .IP "\fB-cmfile \fIf" .PD 0 .IP "\fB-cm \fIf" .PD Specify name of the generated .cm file, relative to the directory specified by the .BI -dir " dir" option. .BR default : .IR nlffi-generated.cm . .IP "\fB-cppopt \fIo" .PD The string .I o gets added to the list of options to be passed to cpp (the C preprocessor). The list of options gets substituted for .I %o in the cpp command line template. .IP "\fB-U \fIx" .PD The string .BI -U x gets added to the list of cpp options. .IP "\fB-D \fIx" .PD The string .BI -D x gets added to the list of cpp options. .IP "\fB-I \fIx" .PD The string .BI -I x gets added to the list of cpp options. .IP "\fB-version" .PD Just write the version number of .B ml-nlffigen to standard output and then quit. .IP "\fB-match \fIr" .PD 0 .IP "\fB-m \fIr" .PD Normally .B ml-nlffigen will include ML definitions for a C declaration if the C declaration textually appears in one of the files specified at the command line. Definitions in #include-d files will normally not appear (unless their absence would lead to inconsistencies). By specifying .BI -match r , .B ml-nlffigen will also include definitions that occur in recursively #include-d files for which the .BR awk -style regular expression .I r matches their names. .IP "\fB-prefix \fIp" .PD 0 .IP "\fB-p \fIp" .PD Generated ML structure names will all have prefix .I p (in addition to the usual "S_" or "U_" or "F_" ...) .IP "\fB-gensym \fIg" .IP "\fB-g \fIg" Names "gensym-ed" by .B ml-nlffigen (for anonymous struct/union/ enums) will get an additional suffix .RI _ g. (This should be used if output from several indepdendent runs of .B ml-nlffigen are to coexist in the same ML program.) .IP "\fB--" Terminate processing of options, remaining arguments are taken to be C sources. .SH SEE ALSO .BR sml (1), .BR ml-build (1). .br This program described in more detail in .I No-Longer-Foreign: Teaching an ML compiler to speak C \"natively\" , Matthias Blume, which is available via . .SH AUTHOR This manual page was written by Aaron Matthew Read , for the Debian GNU/Linux system (but may be used by others).