[MLton] Support for link options in ML Basis files
Chris Clearwater
chris@detriment.org
Sat, 15 Jan 2005 05:55:22 -0800
Matthew Fluet wrote:
>>Are there any plans to support link options in ML Basis files? For
>>example, I have written bindings to some SDL functions neccesary to use
>>in place of GLUT with OpenGL. It would be nice for applications which
>>used the SDL and OpenGL bindings to simply add "sdl/sdl-lib.mlb" and
>>"gl/gl-lib.mlb" to their .mlb files and have MLton automaticaly use the
>>supplied link options when compiling the final executable.
>>
>>
>
>See
> http://mlton.org/pipermail/mlton/2004-July/025553.html
>for a similar proposal and
> http://mlton.org/pipermail/mlton/2004-July/025554.html
>for a reply.
>
>I believe that the reply still applies.
>
>
>
>>Also, is
>>their a way to have MLton tell you where it keeps SML libraries (for
>>example, /usr/lib/mlton/sml/ on my Debian machine) so you could have a
>>makefile target install the library in the appropriate place?
>>
>>
>
>I don't think we have a simple way of doing it, but there are a couple of
>hacks that would get you that functionality. If you give mlton a
>nonexistent .mlb file, it will print out the path with all MLB path
>variables expanded:
>
>-bash-2.05b$ mlton '$(SML_LIB)/z.mlb'
>Error: <string> 1.1.
> File /usr/lib/mlton/sml/z.mlb does not exist.
>compilation aborted: parseAndElaborate reported errors
>
>Alternatively, compiling a .mlb file with -stop f will yield a list of
>files (suitable for a Makefile dependency), again with all path variables
>expanded:
>
>-bash-2.05b$ mlton -stop f '$(SML_LIB)/basis/basis.mlb'
>/usr/lib/mlton/sml/basis/misc/primitive.sml
>/usr/lib/mlton/sml/basis/posix/primitive.sml
>...
>/usr/lib/mlton/sml/basis/libs/basis-2002/top-level/overloads.sml
>
>
>From either of these, a little grep and sed hackery could should yield the
>path you are looking for.
>
>_______________________________________________
>MLton mailing list
>MLton@mlton.org
>http://mlton.org/mailman/listinfo/mlton
>
>
>
I wonder then how you guys would feel about using Pkgconfig
(http://www.freedesktop.org/Software/pkgconfig). Pkgconfig in
combination with mlbs would provide you a fully functional packaging
system with minimal effort. For example, with my SDL bindings I would
just install a file such as "mlton-sdl.pc" in /usr/lib/pkgconfig/. An
example of what this might look like:
Name: MLSDL
Description: SDL bindings for the MLton compiler
Version: 0.1
Libs: -L/usr/lib/mlton/sml/sdl -lSDL -lpthread
Now any program wishing to use the SDL bindings would simply compile
with "-link-opt `pkg-config --libs mlton-sdl`" and include
$(SML_LIB)/sdl/sdl.mlb in their mlb. This nicely seperates the clean
SML world from the messy C world. As an advantage, any package requiring
another package, such as the case of mlgtk requiring gtk+-2.0, it would
simply need to add a "Requires" line and it would draw compile options
from the target package. This would also serve for MLton packages
depending on other MLton packages. Requires lines can also deal with
version dependancies. Pkgconfig also supports arbitrary variables in the
".pc" file. There are some commonly defined variables such as "prefix",
"libdir" and "includedir". MLton could define a variable such as
"smllib" for packages to query where to install their files.
Although it is by no means required, pkgconfig integrates very well with
autoconf/automake. Even if you don't wish to use these tools for MLton,
distributers of individual MLton packages could use them if they prefer
the automation they provide. For more information, check out "man
pkgconfig".
The obvious downside to this is that it adds a build dependancy on
Pkgconfig. This isn't so bad as it only affects people compiling
themselves, in which case they may already have pkgconfig anyways. My
machine has 46 packages already installed in /usr/lib/pkgconfig.
Admitidely, most of these are gnome/gtk related, but a fair number are
not and Pkgconfig is gaining in popularity all the time.
This information comes from my breif investigation, maybe there is
someone else more familiar with pkgconfig that can comment?