From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: X-Spam-Status: No, score=0.4 required=5.0 tests=AWL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id A8900BB84 for ; Sun, 15 Jun 2008 18:32:32 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtoAAKPgVEjRVcbkemdsb2JhbACRW0MBAQsDBAYHEZZLgmUB X-IronPort-AV: E=Sophos;i="4.27,648,1204498800"; d="scan'208";a="14028939" Received: from discorde.inria.fr ([192.93.2.38]) by mail3-smtp-sop.national.inria.fr with ESMTP; 15 Jun 2008 18:32:32 +0200 Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id m5FGWVNn031311 (version=TLSv1/SSLv3 cipher=RC4-SHA bits=128 verify=OK) for ; Sun, 15 Jun 2008 18:32:32 +0200 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AtoAAKPgVEjRVcbkemdsb2JhbACRW0MBAQsDBAYHEZZLgmUB X-IronPort-AV: E=Sophos;i="4.27,648,1204498800"; d="scan'208";a="14028938" Received: from rv-out-0506.google.com ([209.85.198.228]) by mail3-smtp-sop.national.inria.fr with ESMTP; 15 Jun 2008 18:32:30 +0200 Received: by rv-out-0506.google.com with SMTP id k40so4342873rvb.57 for ; Sun, 15 Jun 2008 09:32:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:cc:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=nSGxO1PSDcVQ6FZhXh85saZ0/Up/Swzp4ZGBkrzHiis=; b=bocdbbLS00zqU8vsbb/K2WpsovSy4RKil3xBYQrDs348Zda1lrj2AmjTwyMvZVjUCq yxc1WbtiutR4LBtJdQeAb2tnEGM7WbCyqDwZTDw184HSE3fYzk5CxX8FHl4X7RGA6wjN Z1ADAmKa72wAxxW5gt7LAvJuMoM4rWWfEBMsA= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:cc:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=RE7GSFOy1FP2Lj6O15UAv5cQvNYOEIVLoNlPOh5/O0OzjGm6LDVhoy4JeL2Ok83cHn r5wUABvsOT/JgcBboEZ2fOM0KMDl4kRIBztGR1gKzxBkymK1ZNlzudEXEqwbxiQjJRsh 0plMk2zBjuQ875LXy7il3OxqYWrH73x6R2AmE= Received: by 10.141.171.6 with SMTP id y6mr3168504rvo.85.1213547548136; Sun, 15 Jun 2008 09:32:28 -0700 (PDT) Received: by 10.141.116.8 with HTTP; Sun, 15 Jun 2008 09:32:28 -0700 (PDT) Message-ID: <666572260806150932i793fd09dse7fb537a8d9df4af@mail.gmail.com> Date: Sun, 15 Jun 2008 18:32:28 +0200 From: Adrien To: "Gerd Stolpmann" Subject: Re: [Caml-list] GODI News: RocketBoost Beta Cc: caml-list , godi-list In-Reply-To: <1213541678.22235.107.camel@flake.lan.gerd-stolpmann.de> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <1213541678.22235.107.camel@flake.lan.gerd-stolpmann.de> X-Miltered: at discorde with ID 4855441F.000 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; byterun:01 byterun:01 ocaml:01 ocaml:01 gerd:01 stolpmann:01 mingw:01 cygwin:01 mingw:01 o'caml:01 o'caml:01 gcc:01 tarball:01 unpack:01 cygwin:01 Hi, First, thanks for your work for the windows platform. I've just tried this beta. Overall it worked quite well (it compiled during about one hour on a quite recent machine and installed 260MB of data) but failed in the end. Here are the last lines (I haven't logged everything but this could be enough) : > + /home/Administrateur/godi-rocketboost-20080615/run/ocamlrun-3.09.3/byterun/ocamlfatrun /home/Administrateur/godi-rocketboost-20080615/godi-tools-boot/boot_console delete -f godi-tools > Warning: Package godi-tools is protected against deletion. > Deleting anyway. > + /home/Administrateur/godi-rocketboost-20080615/run/ocamlrun-3.09.3/byterun/ocamlfatrun /home/Administrateur/godi-rocketboost-20080615/go > di-tools-boot/boot_console add /ocaml/build/packages/All/godi-tools-2.0test31.tgz > + exec /ocaml/sbin/godi_console perform -tmpdir-state /tmp/godi4632-0:1 > Fatal error: cannot find file perform > Failure! I have time to install godi from scratch so if you need anything, don't hesitate. :) Btw, is there any chance the PATH gets automatically updated ? I've installed ocaml by hand several times but I keep on forgetting this step. Thanks. --- Adrien Nader 2008/6/15 Gerd Stolpmann : > Hi, > > In the past weeks I've worked hard to finish the next GODI release, > focusing on portability. A beta version of the new bootstrap and > godi_console, called RocketBoost, is now available, and it would be > great if it were tested at large. > > There are not many new features in this release, so there is no reason > to switch to it if you already have GODI. > > The big news is that GODI now supports the MinGW port of OCaml for > Windows (besides the Cygwin port). This means that it is now possible to > create native Windows applications with GODI. Note, however, that the > porting effort is still in its beginning - GODI itself works, but most > packages aren't ported yet, and won't work. > > The MinGW support has become possible because large parts of the GODI > core have been rewritten. In particular, the C programs accompanying > godi_console are now coded in O'Caml (godi_make, godi_add, etc.), so > porting was possible by enhancing a few O'Caml libraries. This > refactoring of GODI also increases the portability in the Unix world - > effectively it should now run on all platforms where OCaml runs, where > gcc is available, and where POSIX-compliant shell utilities are > available. > > If you would like to test it, follow these instructions. For all ports, > you need the bootstrap tarball from: > > http://download.camlcity.org/download/godi-rocketboost-20080615.tar.gz > > > > --- Installation for Unix --- > > For Unix platforms (including MacOSX), just download > godi-rocketboost-20080615.tar.gz, unpack it, run ./bootstrap, and follow > the instructions. > > > > --- Installation for Windows --- > > For Windows you always need Cygwin, even for the MinGW port (it is > needed as scripting environment, please don't question that). Get it > from cygwin.com. Install everything that is needed (binutils, bzip2, > diffutils, file, findutils, gawk, gcc-core, gcc-mingw-core, grep, groff, > gzip, m4, make, man, mingw-runtime, patch, rxvt, sed, tar, w32api, wget > - hope this list is complete). > > IMPORTANT: When you install software you need for GODI, choose paths > that do not contain space characters. This is incompatible with the > shell scripts. So don't install into "My Files". > > Download godi-rocketboost-20080615.tar.gz, and unpack it: > > $ tar xzf godi-rocketboost-20080615.tar.gz > $ cd godi-rocketboost-20080615 > > Now invoke bootstrap. You probably want to set the path where it is > going to be installed with -prefix. Furthermore, you can now select > whether you want the Cygwin or the MinGW port. For the latter, pass > "-w32port mingw" as extra argument. > > IMPORTANT: Remember that GODI itself relies on Cygwin scripting. If you > pass paths to GODI (including godi_console, godi_add, etc.) these are > Cygwin paths, even if you build the MinGW port. > > $ ./bootstrap -prefix /home/gerd/godi -w32port mingw > > This will build boot_console. Then you need an Internet connection, and > do: > > $ export PATH=/home/gerd/godi/bin:/home/gerd/godi/sbin:$PATH > $ ./bootstrap_stage2 > > This will install the minimal GODI core. > > IMPORTANT: godi_console isn't ported to the Windows console window, and > for now only supports terminal windows that can deal with ANSI control > codes. Use Cygwin's rxvt as terminal (or any other capable terminal like > xterm). Furthermore, there is an issue with the MinGW port setting some > terminal features. As workaround, you have to set the TTY environment > variable to the Cygwin tty device, i.e. TTY=`tty`. > > Note that the MinGW port is only available for ocaml-3.10. Passing > "-section 3.09" to bootstrap won't work. > > > --- List of problems --- > > The final part of this message lists some problems that popped up during > the MinGW porting effort. I have often found workarounds, but maybe the > reader knows better solutions. > > * Cygwin interoperability > > A lot of the porting effort was about Cygwin interoperability. > godi_console (which is a native Win32 binary) can translate Cygwin paths > to native Windows paths (by reading the Cygwin mount table in the > registry). However, some problems turned out to be hard: > > Starting a Cygwin binary with CreateProcess from godi_console turned out > to be unreliable when godi_console was itself called from a Cygwin > program. So the calling chain Cygwin_pgm -> Win32_pgm -> Cygwin_pgm > did not always work (symptom: the called program immediately exits). A > workaround was to use cmd.exe as intermediate instance: > Cygwin_pgm -> Win32_pgm -> cmd.exe -> Cygwin_pgm > > Maybe related to that, it wasn't possible to run stty without explicit > device argument. (godi_console needs to call it to talk to the Cygwin > tty driver.) stty (and tty, too) always complained that stdin wasn't a > tty. The workaround is to ask the user to set the environment variable > TTY to the tty device. > > * Cygwin vs. Windows file names > > The approach is that GODI itself is seen as a Cygwin program - although > godi_console is a native program. As already mentioned, godi_console is > capable of translating Cygwin paths without using Cygwin. > > At some time, it is required to translate paths to the Windows style, > because programs like ocaml, ocamlfind, etc. are Windows executables > without Cygwin path translation capability. In GODI Makefiles, there is > now always the variable $(LOCALBASE_NATIVE), set to the Windows path > (using forward slashes). The porting effort was effectively quite low - > in a few places I had to use ${LOCALBASE_NATIVE} instead of > ${LOCALBASE}. > > * CR/LF > > In godi_console, it was required to look carefully over the code, and to > switch between ASCII and binary channel modes where needed. As native > Windows executable, godi_console uses CR/LF as EOL characters. > > It turned out that Cygwin's bash has sometimes problems with CR/LF. > Especially, something like > > stdlib=`ocamlc -where` > > does not work - the CR character remains as part of the result value. > The workaround was to use Cygwin's alternate shell, ash, in these cases, > which handles that better. > > * cygpcre DLL, and DLL lookup by PATH > > Cygwin includes a PCRE DLL. Of course, this DLL cannot be used in > non-Cygwin programs, so GODI always installs its own PCRE DLL. > > It turns out that the MinGW install of PCRE produces a DLL with the same > name as the Cygwin version (cygpcre-0.dll, as far as I remember). As > DLL's are looked up by PATH, and we _need_ the Cygwin directories in > PATH, the problem arises how to direct MinGW executables to use the > right DLL. > > For now the workaround is that the MinGW version has a different version > number (cygpcre-7.dll). It would be nice, however, to get rid of the > "cyg" prefix for a clearer separation of DLL spaces. > > * Ocaml does not install ocamldep.opt.exe > > in the MinGW port. Maybe an oversight? > > * No support for ocamlmklib > > A lot of work has been put into working around the missing ocamlmklib. > The difficulty is that stub libraries need to be compiled with different > flags when a DLL is to be produced, i.e. the C compiler is invoked > differently in this case. This is incompatible with many build Makefiles > that can only produce one version of .o files from a .c file. Because of > this difficulty, ocamlmklib isn't available. > > For ocamlnet, I worked around by using two scripts, stubcc, and > mkstublib, available from > > https://godirepo.camlcity.org/svn/godi-build/trunk/godi/godi-ocamlnet/files/ > > Effectively, stubcc calls the C compiler twice, and produces a .d.o > intended for DLL inclusion, and a normal .o for the static library. I'm > wondering whether such a tool could be included in the ocaml > distribution, or whether ocamlc could have a special -for-stublib option > so that it invokes gcc twice for .c files. > > * Windows "execv" is broken with respect to "wait" > > When a windows process calls execv to invoke another binary, it is > signaled to the parent process that the program is finished. (The > correct POSIX behavior is to wait until the second binary is finished.) > In many places, it was easy to work around the problem by using the > spawn calls. At one place, this is not possible, and godi_console has to > use "execv" to avoid deadlocks. As consequence, it may happen that the > caller of godi_console thinks that the program is done although it is > still running. > > No workaround yet. > > * No real argv support in Windows > > There are no clear rules how to quote arguments in Windows (cmd.exe). > (Actually, there is no list of arguments (argv) in Windows, but only a > command line string.) In GODI, it sometimes happens that quoted > arguments need to be quoted (and more complicated), and this did not > work in Windows. The workaround is to write complex commands to > temporary files, and to run these by /bin/sh. > > * No signals in Windows > > There is no clear way how to signal a process to terminate itself. As a > consequence, aborting builds is broken in godi_console. > > * argv.(0) is broken > > I don't know who is to blame for this, either Windows, or Cygwin. At > least it wasn't possible to pass a name as argv.(0) that differed from > the executable name. > > The workaround was to use wrapper programs. > > > > Anyway, I hope you like the new port. And remember: be patient. Windows > is very slow when used for shell-style scripting. > > Gerd > -- > ------------------------------------------------------------ > Gerd Stolpmann * Viktoriastr. 45 * 64293 Darmstadt * Germany > gerd@gerd-stolpmann.de http://www.gerd-stolpmann.de > Phone: +49-6151-153855 Fax: +49-6151-997714 > ------------------------------------------------------------ > > > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >