Rob,

On 18/05/2014 17:36, Rob Arthan wrote:
I am trying to understand my options for using Poly/ML on MinGW for
building windows applications coded in Standard ML.

There is a bug reported in http://sourceforge.net/p/mingw/bugs/2043/
that you have to work around to build Poly/ML with the current MinGW.
The work-around is to run configure with
CXXFLAGS="-D_GLIBCXX_HAVE_FENV_H=1” in the environment. (I suspect I
should also throw -O3 in there too, as I think that setting CXXFLAGS
replaces its initial setting of -O3 inside the makefiles. Is that
right?)

I suspect it is. I wasn't aware of the need for _GLIBCXX_HAVE_FENV_H=1 but it's quite a while since I last used Mingw. It isn't clear from the link whether this is something the Poly/ML configure should do or not.

Having got Poly/ML to compile, I found that polyc gives errors like
the following when asked to compile a source file:

gcc.exe: error: C:/DOCUME~1/rda/LOCALS~1/Temp/polyobj.2724.obj: No
such file or directory

Again, I haven't tried this with Mingw.  I'll take a look.

If I create an object file from the Poly/ML GUI using PolyML.export,
polyc will link it. If I understand what is going on correctly, the
resulting program is a Windows application that brings up the Poly/ML
GUI to provide the standard input, output and error channels,  unless
it is run with standard input and output connected to pipes, in which
case it works like a pipe. I think I may end up having to package the
Standard ML parts of my application as a server, with the GUI
provided by clients implemented in some other language. Are there any
other options?

I think there are three possible options for building Poly/ML on Windows: Mingw, Visual C or Cygwin. If you use Mingw or Visual C you are building the native Windows version. This version does put up the GUI, as you say, if the standard input and output are missing. This is actually done by the RTS before the ML code is entered so applies equally to functions exported with PolyML.export as to the usual Poly/ML read-eval-print loop. Actually, it occurs to me that it is now possible to write the GUI in ML and include it as part of the top-level root function in Windows. This would allow a user-exported function to completely by-pass it. I think a GUI is necessary for Windows applications since that is what Windows users would expect.

Using Cygwin might be a possibility if you are thinking of providing a separate GUI. The package that Makarius has provided for running Isabelle on Windows uses Poly/ML under Cygwin but all the user interaction is through jEdit. There might be issues, though, if you wanted the ML code to access the Windows filing system because Cygwin imposes its own view of the filing system.

Regards,
David

_______________________________________________
polyml mailing list
[email protected]
http://lists.inf.ed.ac.uk/mailman/listinfo/polyml

Reply via email to