caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* camltk with native code compiler ocamlopt?
@ 1997-06-12 16:23 Basile STARYNKEVITCH
  1997-06-13  8:25 ` Wolfram Kahl
  0 siblings, 1 reply; 3+ messages in thread
From: Basile STARYNKEVITCH @ 1997-06-12 16:23 UTC (permalink / raw)
  To: Caml list


[[english]]
Hello?

Is there anywere a tiny patch (I expect only Makefile-s to change) to
use the camltk41 interface to the Tk toolkit in native code (not
bytecode) produced by the ocamlopt compiler (version 1.05, platform is
PentiumPro with Linux)

Thanks!

[[french]]

Je cherche un patch (probablement uniquement les Makefile-s à changer)
pour utiliser l'interface camltk41 à la bibliothèque Tk en code natif,
(pas le code octet) produit par le compilateur ocamlopt (version 1.05,
sur Linux / PentiumPro)?

Merci

N.B. Any opinions expressed here are solely mine, and not of my organization.
N.B. Les opinions exprimees ici me sont personnelles et n engagent pas le CEA.


----------------------------------------------------------------------
Basile STARYNKEVITCH   ----  Commissariat à l Energie Atomique 
DRN/DMT/SERMA * CEA/Saclay bat.470 * 91191 GIF/YVETTE CEDEX * France
fax: (33) 01,69.08.85.68; phone: 01,69.08.40.66; home: 01,46.65.45.53
email: Basile . Starynkevitch @ cea . fr  (but remove white space)
I speak french, english, russian. Je parle français, anglais, russe.
----------------------------------------------------------------------






^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: camltk with native code compiler ocamlopt?
  1997-06-12 16:23 camltk with native code compiler ocamlopt? Basile STARYNKEVITCH
@ 1997-06-13  8:25 ` Wolfram Kahl
  1997-06-16 15:00   ` Thorsten Ohl
  0 siblings, 1 reply; 3+ messages in thread
From: Wolfram Kahl @ 1997-06-13  8:25 UTC (permalink / raw)
  To: Basile.Starynkevitch; +Cc: caml-list

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 22003 bytes --]


Basile STARYNKEVITCH writes:

 > [[english]]
 > Hello?

 > Is there anywere a tiny patch (I expect only Makefile-s to change) to
 > use the camltk41 interface to the Tk toolkit in native code (not
 > bytecode) produced by the ocamlopt compiler (version 1.05, platform is
 > PentiumPro with Linux)

 > Thanks!

 > [[french]]

 > Je cherche un patch (probablement uniquement les Makefile-s à changer)
 > pour utiliser l'interface camltk41 à la bibliothèque Tk en code natif,
 > (pas le code octet) produit par le compilateur ocamlopt (version 1.05,
 > sur Linux / PentiumPro)?

 > Merci

I have a done this for 1.02 and it works perfectly;
for my application the speed doubles.
The only known problem is that I cannot compile lablbrowser
since it needs toplevel stuff.

For 1.04 a few things had to be changed
and I am not quite so sure of the results, although essentially it works;
also the patch is not so clean (probably a few absolute paths remain).
I haven't tried 1.5 yet.

Anyway, I include both patches below (take care to use only one of them!!!).
It would be brilliant if future releases of olabl supported this.

IMPORTANT: In order to compile tk.ml; at least on the SUN Sparc,
it is necessary to change all occurrences of 10000 in asmcomp/emit_*.mlp
for your machine to say 20000 before making the optimising compiler
(otherwise the assembler will fail). Perhaps that constant is somewhat
arbitrary and should therefore be given a name that simplifies changing
its value globally.

Another question in this vein:

Would it be possible to compile EVERYTHING, including the compilers,
to native code? Perhaps another Makefile target after ``make opt''
could be ``make optworld''?


[[short and bad french]]

Il y a deux patch pour les versions 1.02 et 1.04,
la pour 1.02 travail tres bien.

Importantement, il faut changer la constant ``10000'' a ``20000''
ens tous ses occurrence dans le fichier asmcomp/emit_*.mlp pour
l' ordinateur desire avant faire ``make opt''.

================

Many thanks to the makers of OCaml and OLabl!!!


Wolfram Kahl


==============================================================================
labltk41-1.04-opt.patch
==============================================================================
diff -r -c olabl-1.04/labltk41/Makefile ocaml-1.04/labltk41/Makefile
*** olabl-1.04/labltk41/Makefile	Sat Feb 15 11:06:56 1997
--- ocaml-1.04/labltk41/Makefile	Fri Mar 21 18:10:52 1997
***************
*** 8,13 ****
--- 8,19 ----
  	cd lib; $(MAKE) -f Makefile.gen; $(MAKE)
  	cd jpf; $(MAKE)
  
+ opt:
+ #	cd libsupport; $(MAKE) opt
+ 	cd lib; $(MAKE) opt
+ 	cd jpf; $(MAKE) opt
+ #	cd browser; $(MAKE) opt
+ 
  Makefile.config:
  	@echo "You must configure first. Read INSTALL."
  	exit 1
***************
*** 38,43 ****
--- 44,54 ----
  	cd compiler; $(MAKE) install
  	cd jpf; $(MAKE) install
  	cd browser; $(MAKE) install
+ 
+ installopt: 
+ 	cd lib; $(MAKE) installopt
+ 	cd jpf; $(MAKE) installopt
+ #	cd browser; $(MAKE) installopt
  
  clean : 
  	-rm -f config.cache
diff -r -c olabl-1.04/labltk41/Makefile.config ocaml-1.04/labltk41/Makefile.config
*** olabl-1.04/labltk41/Makefile.config	Fri Jun 13 10:05:03 1997
--- ocaml-1.04/labltk41/Makefile.config	Fri Mar 21 17:38:14 1997
***************
*** 0 ****
--- 1,42 ----
+ # Generated automatically from Makefile.config.in by configure.
+ ## Where you installed Objective Label
+ LIBDIR=/opt/ocaml-1.04/lib/olabl
+ 
+ ## Where are the sources (for LablBrowser).
+ OLABLDIR=../..
+ 
+ ## Where you want to install LablTk41 libraries and binaries
+ INSTALLDIR=/opt/ocaml-1.04/lib/olabl/labltk41
+ INSTALLBINDIR=/opt/ocaml-1.04/bin
+ 
+ ### What to use to link with X
+ X11_LIBS=-ccopt " -L/global/X11R5sol2.3/lib -R /global/X11R5sol2.3/lib" -cclib " -lX11  -lnsl -lsocket"
+ 
+ ### What to use to compile and link with Tcl/Tk
+ TKINCLUDES=-ccopt "-I/opt/ocaml-1.04/include  -I/global/X11R5sol2.3/include"
+ TKLIBS=-ccopt "-L/opt/ocaml-1.04/lib" -cclib "-ltk4.2 -ltcl7.6 -lsocket -lnsl -ldl -lm"
+ 
+ ### Making a library
+ RANLIB=:
+ 
+ ### Shouldn't need to change anything below
+ ## Tools from the Objective Label distribution
+ EXCRC=$(LIBDIR)/extract_crc
+ EXPUNGE=$(LIBDIR)/expunge
+ 
+ LABLC=olablc
+ LABLCOMP=$(LABLC) -c
+ CPP=/lib/cpp -P
+ LABLYACC=ocamlyacc -v
+ LABLLEX=ocamllex
+ LABLLIBR=$(LABLC) -a
+ LABLDEP=ocamldep
+ COMPFLAGS=
+ LINKFLAGS=
+ LABLOPTC=olablopt
+ LABLOPTCOMP=$(LABLOPTC) -c
+ LABLOPTLIBR=$(LABLOPTC) -a
+ #CAMLOPT=olablopt
+ #CAMLCOPT=olablopt -c
+ 
+ ## End of configuration section
diff -r -c olabl-1.04/labltk41/browser/Makefile ocaml-1.04/labltk41/browser/Makefile
*** olabl-1.04/labltk41/browser/Makefile	Fri Feb 21 10:05:04 1997
--- ocaml-1.04/labltk41/browser/Makefile	Fri Mar 21 18:10:20 1997
***************
*** 11,21 ****
--- 11,30 ----
  	fileselect.cmo	searchid.cmo	searchpos.cmo	shell.cmo	\
  	viewer.cmo	typecheck.cmo	editor.cmo	main.cmo
  
+ OBJX =	list2.cmx	useunix.cmx	setpath.cmx	lexical.cmx	\
+ 	fileselect.cmx	searchid.cmx	searchpos.cmx	shell.cmx	\
+ 	viewer.cmx	typecheck.cmx	editor.cmx	main.cmx
+ 
  JG =	jg_tk.cmo	jg_config.cmo	jg_bind.cmo	 jg_completion.cmo \
  	jg_box.cmo \
  	jg_button.cmo	jg_text.cmo	jg_toplevel.cmo	jg_message.cmo \
  	jg_menu.cmo	jg_entry.cmo	jg_multibox.cmo
  
+ JGX =	jg_tk.cmx	jg_config.cmx	jg_bind.cmx	 jg_completion.cmx \
+ 	jg_box.cmx \
+ 	jg_button.cmx	jg_text.cmx	jg_toplevel.cmx	jg_message.cmx \
+ 	jg_menu.cmx	jg_entry.cmx	jg_multibox.cmx
+ 
  # Default rules
  
  .SUFFIXES: .ml .mli .cmo .cmi .cmx
***************
*** 23,43 ****
--- 32,70 ----
  .ml.cmo:
  	$(COMPILER) $(INCLUDES) $<
  
+ .ml.cmx:
+ 	$(LABLOPTCOMP) $(INCLUDES) $<
+ 
  .mli.cmi:
  	$(COMPILER) $(INCLUDES) $<
  
  all: lablbrowser
  
+ opt: lablbrowse
+ 
  lablbrowser: jglib.cma $(OBJ)
  	$(LINKER) -o lablbrowser $(LABLTKLIB) toplevellib.cma \
  		unix.cma str.cma tk41.cma jglib.cma $(OBJ) \
  		-cclib -lstr -cclib -lunix $(SYSLIBS)
  
+ lablbrowse: jglib.cmxa $(OBJX)
+ 	labltkld -o lablbrowse \
+ #toplevellib.cmxa \
+ 		str.cmxa tk41.cmxa jglib.cmxa $(OBJX) \
+ 		-cclib -lstr
+ #-cclib -ltoplevel
+ 
  jglib.cma: $(JG)
  	$(COMPILER) -a -o jglib.cma $(JG) 
  
+ jglib.cmxa: $(JGX)
+ 	$(LABLOPTLIBR) -o jglib.cmxa $(JGX) 
+ 
  install:
  	if test -f lablbrowser; then : ; cp lablbrowser $(INSTALLBINDIR); fi
+ 
+ installopt:
+ 	if test -f lablbrowse; then : ; cp lablbrowse $(INSTALLBINDIR); fi
  
  clean:
  	rm -f *.cm? lablbrowser *~ *.orig
diff -r -c olabl-1.04/labltk41/configure ocaml-1.04/labltk41/configure
*** olabl-1.04/labltk41/configure	Fri Feb 14 19:04:20 1997
--- ocaml-1.04/labltk41/configure	Thu Mar 20 12:04:21 1997
***************
*** 1178,1183 ****
--- 1178,1184 ----
  else
    ac_save_LIBS="$LIBS"
  LIBS="-lnsl  $LIBS"
+ echo $ac_n "LIBS = '$LIBS'" 1>&6
  cat > conftest.$ac_ext <<EOF
  #line 1179 "configure"
  #include "confdefs.h"
***************
*** 1221,1226 ****
--- 1222,1228 ----
  else
    ac_save_LIBS="$LIBS"
  LIBS="-lsocket  $LIBS"
+ echo $ac_n "LIBS = '$LIBS'" 1>&6
  cat > conftest.$ac_ext <<EOF
  #line 1222 "configure"
  #include "confdefs.h"
***************
*** 1287,1292 ****
--- 1289,1295 ----
    echo "$ac_t""no" 1>&6
  fi
  
+ echo $ac_n "LIBS = '$LIBS'" 1>&6
  
  # Extract the first word of "cpp", so it can be a program name with args.
  set dummy cpp; ac_word=$2
***************
*** 1362,1367 ****
--- 1365,1371 ----
    echo "$ac_t""no" 1>&6
  fi
  
+ LIBS="-lsocket -lnsl -ldl -lm"
  
  ### Check for Tcl7.5(7.6) and Tk4.1(4.2)
  echo $ac_n "checking Tcl and Tk includes and libraries""... $ac_c" 1>&6
diff -r -c olabl-1.04/labltk41/example/Makefile ocaml-1.04/labltk41/example/Makefile
*** olabl-1.04/labltk41/example/Makefile	Fri Mar 14 09:56:35 1997
--- ocaml-1.04/labltk41/example/Makefile	Fri Mar 21 18:13:30 1997
***************
*** 11,16 ****
--- 11,18 ----
  
  all: hello demo eyes calc tetris
  
+ opt: hellox demox eyesx calcx tetrisx
+ 
  hello: hello.cmo
  	$(LABLC) -custom $(COMPFLAGS) -o hello tk41.cma hello.cmo $(TKLINKOPT)
  
diff -r -c olabl-1.04/labltk41/example/demo.ml ocaml-1.04/labltk41/example/demo.ml
*** olabl-1.04/labltk41/example/demo.ml	Fri Feb 14 19:04:24 1997
--- ocaml-1.04/labltk41/example/demo.ml	Fri Mar 21 18:32:10 1997
***************
*** 2,8 ****
  
  (* First, open these modules for convenience *)
  open Tk
! open Support
  
  (* Dummy let *)
  let _ =
--- 2,8 ----
  
  (* First, open these modules for convenience *)
  open Tk
! open Widget
  
  (* Dummy let *)
  let _ =
diff -r -c olabl-1.04/labltk41/jpf/Makefile ocaml-1.04/labltk41/jpf/Makefile
*** olabl-1.04/labltk41/jpf/Makefile	Fri Feb 14 19:04:21 1997
--- ocaml-1.04/labltk41/jpf/Makefile	Fri Mar 21 17:40:04 1997
***************
*** 3,8 ****
--- 3,9 ----
  COMPFLAGS=-I ../lib -I ../support
  
  OBJS= fileselect.cmo balloon.cmo
+ OBJSX= fileselect.cmx balloon.cmx
  
  TKLINKOPT=$(STATIC) \
  	  -ccopt -L../support -cclib -llabltk41 \
***************
*** 10,23 ****
  
  all: libjpf.cma
  
  test: balloontest
  
  libjpf.cma: $(OBJS)
! 	$(LABLLIBR) -a -o libjpf.cma $(OBJS)
  
  install: libjpf.cma
  	cp *.cmi *.mli libjpf.cma $(INSTALLDIR)
  
  clean:
  	rm -f *.cm* *~ *test
  
--- 11,32 ----
  
  all: libjpf.cma
  
+ opt: libjpf.cmxa
+ 
  test: balloontest
  
  libjpf.cma: $(OBJS)
! 	$(LABLLIBR) -o libjpf.cma $(OBJS)
! 
! libjpf.cmxa: $(OBJSX)
! 	$(LABLOPTLIBR) -o libjpf.cmxa $(OBJSX)
  
  install: libjpf.cma
  	cp *.cmi *.mli libjpf.cma $(INSTALLDIR)
  
+ installopt: libjpf.cmxa
+ 	cp *.cmi *.mli libjpf.a libjpf.cmxa $(LIBDIR)
+ 
  clean:
  	rm -f *.cm* *~ *test
  
***************
*** 29,42 ****
  
  balloontest.cmo : balloon.cmo libjpf.cma
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo
  
  .mli.cmi:
  	$(LABLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(LABLCOMP) $(COMPFLAGS) $<
  
  
  depend: 
--- 38,60 ----
  
  balloontest.cmo : balloon.cmo libjpf.cma
  
+ balloontestx: balloontest.cmx 
+ 	$(LABLOPTC) -o balloontestx -I ../support -I ../lib \
+ 	        -custom tk41.cmxa libjpf.cmxa balloontest.cmx $(TKLINKOPT)
+ 
+ balloontest.cmx : balloon.cmx libjpf.cmxa
+ 
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .cmx
  
  .mli.cmi:
  	$(LABLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(LABLCOMP) $(COMPFLAGS) $<
+ 
+ .ml.cmx:
+ 	$(LABLOPTCOMP) $(COMPFLAGS) $<
  
  
  depend: 
diff -r -c olabl-1.04/labltk41/labltklink ocaml-1.04/labltk41/labltklink
*** olabl-1.04/labltk41/labltklink	Fri Jun 13 10:05:03 1997
--- ocaml-1.04/labltk41/labltklink	Thu Mar 20 12:04:55 1997
***************
*** 0 ****
--- 1,8 ----
+ #!/bin/sh
+ 
+ # links with the tcl, tk and X11 libraries
+ 
+ exec olablc -custom -I /opt/ocaml-1.04/lib/olabl/labltk41 tk41.cma $* \
+     -ccopt -L/opt/ocaml-1.04/lib/olabl/labltk41 -cclib -llabltk41 \
+     -ccopt "-L/opt/ocaml-1.04/lib" -cclib "-ltk4.2 -ltcl7.6 -lsocket -lnsl -ldl -lm" \
+     -ccopt " -L/global/X11R5sol2.3/lib -R /global/X11R5sol2.3/lib" -cclib " -lX11  -lnsl -lsocket"
diff -r -c olabl-1.04/labltk41/lib/Makefile ocaml-1.04/labltk41/lib/Makefile
*** olabl-1.04/labltk41/lib/Makefile	Fri Feb 14 19:04:21 1997
--- ocaml-1.04/labltk41/lib/Makefile	Fri Mar 21 18:14:53 1997
***************
*** 12,24 ****
--- 12,38 ----
          ../support/textvariable.cmo ../support/timer.cmo \
          ../support/fileevent.cmo
  
+ SUPPORTX=../support/hashtblc.cmx \
+         ../support/support.cmx ../support/widget.cmx ../support/protocol.cmx \
+         ../support/textvariable.cmx ../support/timer.cmx \
+         ../support/fileevent.cmx
+ 
  all : tk41.cma labltktop
  
+ opt : tk41.cmxa
+ 
  include ./modules
  
+ include ./modulesx
+ 
  tk41.cma : $(SUPPORT) $(WIDGETOBJS) tk.cmo 
  	$(LABLLIBR) -o tk41.cma $(SUPPORT) tk.cmo $(WIDGETOBJS)
  
+ widx: $(WIDGETOBJSX)
+ 
+ tk41.cmxa : $(SUPPORTX) $(WIDGETOBJSX) tk.cmx 
+ 	$(LABLOPTLIBR) -o tk41.cmxa $(SUPPORTX) tk.cmx $(WIDGETOBJSX)
+ 
  ## Until olabltktop is fixed (next release), we in-line it
  ## (otherwise our trick with -ccopt is broken)
  
***************
*** 38,50 ****
  	chmod 755 $(INSTALLBINDIR)/labltktop
  
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .mlp
  
  .mli.cmi:
  	$(LABLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(LABLCOMP) $(COMPFLAGS) $<
  
  include .depend
--- 52,75 ----
  	chmod 755 $(INSTALLBINDIR)/labltktop
  
  
+ installopt: tk41.cmxa
+ 	cp *.cmi tk41.cmxa tk41.a $(INSTALLDIR)
+ 	cp labltkld $(INSTALLBINDIR)
+ 	chmod 755 $(INSTALLBINDIR)/labltkld
+ 	cd $(LIBDIR); ln -s tk41.a liboltk.a; ln -s tk41.a libtk41.a
+ #	chmod 644 $(INSTALLDIR)/*.cmi
+ 	chmod 644 $(INSTALLDIR)/tk41.cmxa tk41.a
+ 
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .cmx .mlp
  
  .mli.cmi:
  	$(LABLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(LABLCOMP) $(COMPFLAGS) $<
+ 
+ .ml.cmx:
+ 	$(LABLOPTCOMP) $(COMPFLAGS) $<
  
  include .depend


==============================================================================
labltk4-1.02-opt.patch
==============================================================================
diff -c -N -r labltk4/Makefile labltk4-opt/Makefile
*** labltk4/Makefile	Thu May 23 10:42:45 1996
--- labltk4-opt/Makefile	Tue Oct 15 09:53:22 1996
***************
*** 6,11 ****
--- 6,16 ----
  	cd lib; $(MAKE)
  	cd jpf; $(MAKE)
  
+ opt:
+ #	cd libsupport; $(MAKE) opt
+ 	cd lib; $(MAKE) opt
+ 	cd jpf; $(MAKE) opt
+ 
  EXDIRS= example lablbrowser 
  
  browser:
***************
*** 28,35 ****
--- 33,46 ----
  	cd libsupport; $(MAKE) install
  # We don't want to install tkcompiler.
  #	cd compiler; $(MAKE) install
+ 	cd jpf; $(MAKE) install
  	cd lablbrowser; $(MAKE) install
  
+ installopt: 
+ 	cd lib; $(MAKE) installopt
+ 	cd jpf; $(MAKE) installopt
+ #	cd lablbrowser; $(MAKE) installopt
+ 
  SUBDIRS=compiler libsupport lib jpf $(EXDIRS)
  
  clean : 
diff -c -N -r labltk4/Makefile.config labltk4-opt/Makefile.config
*** labltk4/Makefile.config	Tue Oct  1 07:29:53 1996
--- labltk4-opt/Makefile.config	Tue Oct 15 09:55:06 1996
***************
*** 1,15 ****
  # This is from your Objective Label installation
  
  # Where you installed O'Labl
! LIBDIR=/usr/local/lib/olabl
  
  # Where you want to install labltklink, labltktop and browser
! BINDIR=/usr/local/bin/lang
  
  #Where is your compiled distribution
  #This is for lablbrowser: add ../ if relative to this directory
  OLABLDIR=../..
  
  ### Which C compiler to use for the native-code compiler.
  ### cc is better than gcc on the Mips and Alpha.
  #NATIVECC=cc
--- 1,19 ----
  # This is from your Objective Label installation
  
+ prefix=/opt/hops
  # Where you installed O'Labl
! LIBDIR=$(prefix)/lib/olabl
  
  # Where you want to install labltklink, labltktop and browser
! BINDIR=$(prefix)/bin
  
  #Where is your compiled distribution
  #This is for lablbrowser: add ../ if relative to this directory
  OLABLDIR=../..
  
+ CAMLOPT=olablopt
+ CAMLCOPT=olablopt -c
+ 
  ### Which C compiler to use for the native-code compiler.
  ### cc is better than gcc on the Mips and Alpha.
  #NATIVECC=cc
***************
*** 17,40 ****
  
  ### How to invoke ranlib
  # BSD-style:
! RANLIB=ranlib
  # System V-style:
  #RANLIB=ar -rs
  # If ranlib is not needed at all:
! #RANLIB=true
  
  ### X Windows, Tcl, Tk
! X11_INCLUDES=/usr/X11R6/include
! X11_LIB=/usr/X11R6/lib
! TCLINCLDIR=/usr/local/lib/tcl7.5/include
! TKINCLDIR=/usr/local/lib/tk4.1/include
! TCLLIBDIR=/usr/local/lib/tcl7.5/lib
! TKLIBDIR=/usr/local/lib/tk4.1/lib
! TKLIBS=-cclib -ltk -cclib -ltcl -cclib -lX11
  
  ### Which version of Tcl/Tk you are using
! #TKVER = -DTK40		# for Tcl7.4/Tk4.0
! TKVER = -DTK41		# for Tcl7.5/Tk4.1
  
  # Add this definition if needed
  #STATIC=-ccopt -static
--- 21,44 ----
  
  ### How to invoke ranlib
  # BSD-style:
! #RANLIB=ranlib
  # System V-style:
  #RANLIB=ar -rs
  # If ranlib is not needed at all:
! RANLIB=true
  
  ### X Windows, Tcl, Tk
! X11_INCLUDES=/usr/openwin/include
! X11_LIB=/usr/openwin/lib
! TCLINCLDIR=/opt/hops/include
! TKINCLDIR=/opt/hops/include
! TCLLIBDIR=/opt/hops/lib
! TKLIBDIR=/opt/hops/lib
! TKLIBS=-cclib -ltk4.0 -cclib -ltcl7.4 -cclib -lX11
  
  ### Which version of Tcl/Tk you are using
! TKVER = -DTK40		# for Tcl7.4/Tk4.0
! #TKVER = -DTK41		# for Tcl7.5/Tk4.1
  
  # Add this definition if needed
  #STATIC=-ccopt -static
diff -c -N -r labltk4/jpf/Makefile labltk4-opt/jpf/Makefile
*** labltk4/jpf/Makefile	Thu May 23 10:42:39 1996
--- labltk4-opt/jpf/Makefile	Tue Oct 15 09:54:08 1996
***************
*** 1,5 ****
! CAMLC=olablc
! CAMLCOMP=$(CAMLC) -c
  
  CAMLDEP=ocamldep
  
--- 1,4 ----
! include ../Makefile.config
  
  CAMLDEP=ocamldep
  
***************
*** 7,22 ****
  
  OBJS= fileselect.cmo
  
  all: libjpf.cma
  
  libjpf.cma: $(OBJS)
  	olablc -a -o libjpf.cma $(OBJS)
  
  clean:
  	rm -f *.cm* *~
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
--- 6,34 ----
  
  OBJS= fileselect.cmo
  
+ OBJSX= fileselect.cmx
+ 
  all: libjpf.cma
  
+ opt: libjpf.cmxa
+ 
+ install: libjpf.cma
+ 	cp *.cmi libjpf.cma $(LIBDIR)
+ 
+ installopt: libjpf.cmxa
+ 	cp *.cmi libjpf.a libjpf.cmxa $(LIBDIR)
+ 
  libjpf.cma: $(OBJS)
  	olablc -a -o libjpf.cma $(OBJS)
  
+ libjpf.cmxa: $(OBJSX)
+ 	$(CAMLOPT) -a -o libjpf.cmxa $(OBJSX)
+ 
  clean:
  	rm -f *.cm* *~
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmx .cmo
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
***************
*** 24,29 ****
--- 36,44 ----
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
+ .ml.cmx:
+ 	$(CAMLCOPT) $(COMPFLAGS) $<
+ 
  
  depend: 
  	mv Makefile Makefile.bak
diff -c -N -r labltk4/lablbrowser/Makefile labltk4-opt/lablbrowser/Makefile
*** labltk4/lablbrowser/Makefile	Sun Sep 29 17:03:14 1996
--- labltk4-opt/lablbrowser/Makefile	Wed Oct  9 12:59:02 1996
***************
*** 10,19 ****
--- 10,27 ----
  	fileselect.cmo	searchid.cmo	searchpos.cmo	viewer.cmo  \
  	typecheck.cmo	editor.cmo	main.cmo
  
+ OBJX =	list2.cmx	useunix.cmx	setpath.cmx	lexical.cmx \
+ 	fileselect.cmx	searchid.cmx	searchpos.cmx	viewer.cmx  \
+ 	typecheck.cmx	editor.cmx	main.cmx
+ 
  JG =	jg_tk.cmo	jg_config.cmo	jg_bind.cmo	jg_box.cmo \
  	jg_button.cmo	jg_text.cmo	jg_toplevel.cmo	jg_message.cmo \
  	jg_menu.cmo	jg_entry.cmo
  
+ JGX =	jg_tk.cmx	jg_config.cmx	jg_bind.cmx	jg_box.cmx \
+ 	jg_button.cmx	jg_text.cmx	jg_toplevel.cmx	jg_message.cmx \
+ 	jg_menu.cmx	jg_entry.cmx
+ 
  # Default rules
  
  .SUFFIXES: .ml .mli .cmo .cmi .cmx
***************
*** 21,26 ****
--- 29,37 ----
  .ml.cmo:
  	$(COMPILER) $(INCLUDES) $<
  
+ .ml.cmx:
+ 	$(CAMLCOPT) $(INCLUDES) $<
+ 
  .mli.cmi:
  	$(COMPILER) $(INCLUDES) $<
  
***************
*** 31,42 ****
--- 42,66 ----
  		unix.cma str.cma tklib.cma jglib.cma $(OBJ) \
  		-cclib -lstr -cclib -lunix $(CAMLTKLIB)
  
+ lablbrowse: jglib.cmxa $(OBJX)
+ 	labltkld -o lablbrowse \
+ #toplevellib.cmxa \
+ 		str.cmxa tklib.cmxa jglib.cmxa $(OBJX) \
+ 		-cclib -lstr
+ #-cclib -ltoplevel
+ 
  jglib.cma: $(JG)
  	$(COMPILER) -a -o jglib.cma $(JG) 
  
+ jglib.cmxa: $(JGX)
+ 	$(CAMLOPT) -a -o jglib.cmxa $(JGX) 
+ 
  install:
  	if test -f lablbrowser; then : ; cp lablbrowser $(BINDIR); fi
  
+ installopt:
+ 	if test -f lablbrowse; then : ; cp lablbrowse $(BINDIR); fi
+ 
  clean:
  	rm -f *.cm? lablbrowser *~ *.orig
  
diff -c -N -r labltk4/lib/Makefile labltk4-opt/lib/Makefile
*** labltk4/lib/Makefile	Wed Sep 25 12:48:59 1996
--- labltk4-opt/lib/Makefile	Tue Oct 15 09:52:12 1996
***************
*** 22,33 ****
--- 22,46 ----
  EXTRAS=	../libsupport/optionmenu.cmo \
  	../libsupport/dialog.cmo
  
+ SUPPORTX=../libsupport/hashtblc.cmx \
+         ../libsupport/support.cmx ../libsupport/protocol.cmx \
+         ../libsupport/textvariable.cmx
+ 
+ EXTRASX=	../libsupport/optionmenu.cmx \
+ 	../libsupport/dialog.cmx
+ 
  all : tklib.cma toplevels
  
+ opt : tklib.cmxa toplevels
+ 
  toplevels: labltktop
  
  include ./modules
  
+ WIDGETOBJSX=place.cmx wm.cmx canvas.cmx button.cmx text.cmx scrollbar.cmx entry.cmx listbox.cmx pack.cmx clipboard.cmx radiobutton.cmx tkwait.cmx grab.cmx scale.cmx checkbutton.cmx bell.cmx resource.cmx imagephoto.cmx label.cmx palette.cmx message.cmx menu.cmx focus.cmx menubutton.cmx toplevel.cmx frame.cmx imagebitmap.cmx selection.cmx winfo.cmx
+ 
+ widx: $(WIDGETOBJSX)
+ 
  tkgen.ml tkigen.ml tkfgen.ml: ../Widgets.src
  	cd ..; compiler/tkcompiler
  
***************
*** 60,65 ****
--- 73,82 ----
  	$(CAMLC) -a -o tklib.cma $(SUPPORT) tk.cmo $(WIDGETOBJS)\
  		 $(EXTRAS)
  
+ tklib.cmxa : tk.cmx  $(SUPPORTX) $(WIDGETOBJSX) $(EXTRASX)
+ 	$(CAMLOPT) -a -o tklib.cmxa $(SUPPORTX) tk.cmx $(WIDGETOBJSX)\
+ 		 $(EXTRASX)
+ 
  labltktop : $(WIDGETOBJS) $(SUPPORT)
  	$(CAMLC) -linkall toplevellib.cma -o labltktop -I $(SUPPORTDIR) \
  		$(PROFILING) -custom $(SUPPORT) tk.cmo \
***************
*** 76,83 ****
  	#chmod 644 $(LIBDIR)/tklib.cma
  	#chmod 755 $(LIBDIR)/labltktop
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .mlp
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
--- 93,109 ----
  	#chmod 644 $(LIBDIR)/tklib.cma
  	#chmod 755 $(LIBDIR)/labltktop
  
+ installopt: tklib.cmxa
+ 	if test -d $(LIBDIR); then : ; else mkdir $(LIBDIR); fi
+ 	cp *.cmi tklib.a tklib.cmxa $(LIBDIR)
+ 	cd $(LIBDIR); ln -s tklib.a liboltk.a; ln -s tklib.a libtk.a; ln -s tklib.cmxa tk.cmxa
+ 	#cp labltktop $(BINDIR)
+ 	#chmod 644 $(LIBDIR)/*.cmi
+ 	#chmod 644 $(LIBDIR)/tklib.cma
+ 	#chmod 755 $(LIBDIR)/labltktop
+ 
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .cmx .mlp
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
***************
*** 85,90 ****
--- 111,119 ----
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
+ .ml.cmx:
+ 	$(CAMLCOPT) $(COMPFLAGS) $<
+ 
  depend: tk.ml
  	$(CAMLDEP) *.mli *.ml > .depend
  
diff -c -N -r labltk4/lib/labltkld labltk4-opt/lib/labltkld
*** labltk4/lib/labltkld
--- labltk4-opt/lib/labltkld	Tue Oct 15 09:55:22 1996
***************
*** 0 ****
--- 1,7 ----
+ #!/bin/sh
+ 
+ # links native code with the tcl, tk and X11 libraries
+ # and also with the unix, str and fileselect libraries
+ 
+ exec olablopt str.cmxa unix.cmxa tklib.cmxa libjpf.cmxa $* -ccopt -L/opt/hops/lib -ccopt -L/usr/openwin/lib -cclib -lstr -cclib -lunix -cclib -llabltk4 -cclib -loltk -cclib -ljpf -cclib -ltk4.0 -cclib -ltcl7.4 -cclib -lX11
+      




^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: camltk with native code compiler ocamlopt?
  1997-06-13  8:25 ` Wolfram Kahl
@ 1997-06-16 15:00   ` Thorsten Ohl
  0 siblings, 0 replies; 3+ messages in thread
From: Thorsten Ohl @ 1997-06-16 15:00 UTC (permalink / raw)
  To: Wolfram Kahl; +Cc: Basile.Starynkevitch, caml-list

Wolfram Kahl <kahl@diogenes.informatik.unibw-muenchen.de> wrote:

> I have a done this for 1.02 and it works perfectly;
> for my application the speed doubles.
> For 1.04 a few things had to be changed [...]
> I haven't tried 1.5 yet.

Your patch didn't work for me for 1.05.  But it gave me enough
encouragement to try the exercise myself :-).  I wound up with a
factor of four in speed.

> IMPORTANT: In order to compile tk.ml; at least on the SUN Sparc,
> it is necessary to change all occurrences of 10000 in asmcomp/emit_*.mlp
> for your machine to say 20000 before making the optimising compiler

I didn't have to make this change for Intel/Linux.

Here is the patch.  I haven't really cleaned it up, but it does the
job.

Enjoy,
-Thorsten

diff -rc camltk41.orig/Makefile camltk41/Makefile
*** camltk41.orig/Makefile	Sun Dec  1 12:31:40 1996
--- camltk41/Makefile	Sat Jun 14 00:52:36 1997
***************
*** 1,6 ****
  include Makefile.config
  
! SUBDIRS=compiler support lib frx jtk safe jpf tkanim
  
  
  Makefile.config:
--- 1,6 ----
  include Makefile.config
  
! SUBDIRS=compiler support lib frx jtk safe jpf # tkanim
  
  
  Makefile.config:
***************
*** 15,23 ****
  	cd jtk; $(MAKE)
  #	cd threads; $(MAKE)
  	cd jpf; $(MAKE)
! 	cd tkanim; $(MAKE)
  	cd safe; $(MAKE)
  
  lib: Widgets.src
  	compiler/tkcompiler
  	cd lib; $(MAKE)
--- 15,29 ----
  	cd jtk; $(MAKE)
  #	cd threads; $(MAKE)
  	cd jpf; $(MAKE)
! #	cd tkanim; $(MAKE)
  	cd safe; $(MAKE)
  
+ opt:	Makefile.config
+ 	cd support; $(MAKE) opt
+ 	cd lib; $(MAKE) -f Makefile.gen; $(MAKE) opt
+ 	cd frx; $(MAKE) opt
+ 	cd jpf; $(MAKE) opt
+ 
  lib: Widgets.src
  	compiler/tkcompiler
  	cd lib; $(MAKE)
***************
*** 31,38 ****
  	cd frx; $(MAKE) install
  	cd jpf; $(MAKE) install
  	cd jtk; $(MAKE) install
! 	cd tkanim; $(MAKE) install
  	cd safe; $(MAKE) install
  
  clean : 
  	-rm -f config.cache
--- 37,50 ----
  	cd frx; $(MAKE) install
  	cd jpf; $(MAKE) install
  	cd jtk; $(MAKE) install
! #	cd tkanim; $(MAKE) install
  	cd safe; $(MAKE) install
+ 
+ installopt: 
+ 	[ -d $(INSTALLDIR) ] || mkdir $(INSTALLDIR)
+ 	cd lib; $(MAKE) installopt
+ 	cd frx; $(MAKE) installopt
+ 	cd jpf; $(MAKE) installopt
  
  clean : 
  	-rm -f config.cache
diff -rc camltk41.orig/Makefile.config.in camltk41/Makefile.config.in
*** camltk41.orig/Makefile.config.in	Mon Dec  2 14:14:09 1996
--- camltk41/Makefile.config.in	Sat Jun 14 00:23:18 1997
***************
*** 30,33 ****
--- 30,36 ----
  COMPFLAGS=
  LINKFLAGS=
  
+ CAMLOPT=ocamlopt
+ CAMLOPTLIBR=$(CAMLOPT) -a
+ 
  ## End of configuration section
diff -rc camltk41.orig/frx/Makefile camltk41/frx/Makefile
*** camltk41.orig/frx/Makefile	Mon Oct 28 10:42:25 1996
--- camltk41/frx/Makefile	Sat Jun 14 00:31:00 1997
***************
*** 7,31 ****
        frx_dialog.cmo frx_mem.cmo frx_rpc.cmo frx_synth.cmo frx_selection.cmo \
        frx_after.cmo frx_fit.cmo frx_ctext.cmo frx_color.cmo
  
  all: libfrx.cma
  
  libfrx.cma: $(OBJS)
  	$(CAMLLIBR) -o libfrx.cma $(OBJS)
  
  install: libfrx.cma
  	cp *.cmi *.mli libfrx.cma $(INSTALLDIR)
  
  clean:
  	rm -f *.cm*
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  
  depend: 
--- 7,44 ----
        frx_dialog.cmo frx_mem.cmo frx_rpc.cmo frx_synth.cmo frx_selection.cmo \
        frx_after.cmo frx_fit.cmo frx_ctext.cmo frx_color.cmo
  
+ OBJSX = $(OBJS:.cmo=.cmx)
+ 
  all: libfrx.cma
  
+ opt: libfrx.cmxa
+ 
  libfrx.cma: $(OBJS)
  	$(CAMLLIBR) -o libfrx.cma $(OBJS)
  
+ libfrx.cmxa: $(OBJSX)
+ 	$(CAMLOPTLIBR) -o libfrx.cmxa $(OBJSX)
+ 
  install: libfrx.cma
  	cp *.cmi *.mli libfrx.cma $(INSTALLDIR)
  
+ installopt: libfrx.cmxa
+ 	cp libfrx.cmxa libfrx.a $(INSTALLDIR)
+ 
  clean:
  	rm -f *.cm*
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmx .cmo
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
+ 
+ .ml.cmx:
+ 	$(CAMLOPT) -c $(COMPFLAGS) $<
  
  
  depend: 
diff -rc camltk41.orig/jpf/Makefile camltk41/jpf/Makefile
*** camltk41.orig/jpf/Makefile	Fri Nov 29 16:11:38 1996
--- camltk41/jpf/Makefile	Sat Jun 14 00:49:47 1997
***************
*** 4,23 ****
--- 4,35 ----
  
  OBJS= fileselect.cmo balloon.cmo
  
+ OBJSX = $(OBJS:.cmo=.cmx)
+ 
  TKLINKOPT=$(STATIC) \
  	  -ccopt -L../support -cclib -lcamltk41 \
  	  $(TKLIBS) $(X11_LIBS)
  
  all: libjpf.cma
  
+ opt: libjpf.cmxa
+ 
  test: balloontest
  
+ testopt: balloontest.opt
+ 
  libjpf.cma: $(OBJS)
  	$(CAMLLIBR) -o libjpf.cma $(OBJS)
  
+ libjpf.cmxa: $(OBJSX)
+ 	$(CAMLOPTLIBR) -o libjpf.cmxa $(OBJSX)
+ 
  install: libjpf.cma
  	cp *.cmi *.mli libjpf.cma $(INSTALLDIR)
  
+ installopt: libjpf.cmxa
+ 	cp libjpf.cmxa libjpf.a $(INSTALLDIR)
+ 
  clean:
  	rm -f *.cm* *~ *test
  
***************
*** 27,42 ****
  	$(CAMLC) -o balloontest -I ../support -I ../lib \
  	        -custom tk41.cma libjpf.cma balloontest.cmo $(TKLINKOPT)
  
  balloontest.cmo : balloon.cmo libjpf.cma
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  
  depend: 
--- 39,63 ----
  	$(CAMLC) -o balloontest -I ../support -I ../lib \
  	        -custom tk41.cma libjpf.cma balloontest.cmo $(TKLINKOPT)
  
+ balloontest.opt: balloontest.cmx
+ 	$(CAMLOPT) -o balloontest.opt -I ../support -I ../lib \
+ 	        tk41.cmxa libjpf.cmxa balloontest.cmx $(TKLINKOPT)
+ 
  balloontest.cmo : balloon.cmo libjpf.cma
  
+ balloontest.cmx : balloon.cmx libjpf.cmxa
+ 
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmx .cmo
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
+ 
+ .ml.cmx:
+ 	$(CAMLOPT) -c $(COMPFLAGS) $<
  
  
  depend: 
diff -rc camltk41.orig/lib/Makefile camltk41/lib/Makefile
*** camltk41.orig/lib/Makefile	Fri Nov 29 16:11:41 1996
--- camltk41/lib/Makefile	Sat Jun 14 00:28:22 1997
***************
*** 12,24 ****
--- 12,32 ----
          ../support/textvariable.cmo ../support/timer.cmo \
          ../support/fileevent.cmo
  
+ SUPPORTX = $(SUPPORT:.cmo=.cmx)
+ 
  all : tk41.cma ocamltktop
  
+ opt : tk41.cmxa
+ 
  include ./modules
+ WIDGETOBJSX = $(WIDGETOBJS:.cmo=.cmx)
  
  tk41.cma : $(SUPPORT) $(WIDGETOBJS) tk.cmo 
  	$(CAMLLIBR) -o tk41.cma $(SUPPORT) tk.cmo $(WIDGETOBJS)
  
+ tk41.cmxa : $(SUPPORTX) $(WIDGETOBJSX) tk.cmx
+ 	$(CAMLOPTLIBR) -o tk41.cmxa $(SUPPORTX) tk.cmx $(WIDGETOBJSX)
+ 
  ## Until ocamltktop is fixed (next release), we in-line it
  ## (otherwise our trick with -ccopt is broken)
  
***************
*** 38,51 ****
  	chmod 644 $(INSTALLDIR)/tk41.cma
  	chmod 755 $(INSTALLDIR)/ocamltktop
  
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .mlp
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  include .depend
--- 46,68 ----
  	chmod 644 $(INSTALLDIR)/tk41.cma
  	chmod 755 $(INSTALLDIR)/ocamltktop
  
+ installopt: tk41.cmxa
+ 	if test -d $(INSTALLDIR); then : ; else mkdir $(INSTALLDIR); fi
+ 	cp tk41.cmxa tk41.a $(INSTALLDIR)
+ 	chmod 644 $(INSTALLDIR)/tk41.cmxa
+ 	chmod 644 $(INSTALLDIR)/tk41.a
+ 
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .cmx .mlp
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
+ 
+ .ml.cmx:
+ 	$(CAMLOPT) -c $(COMPFLAGS) $<
  
  include .depend
diff -rc camltk41.orig/support/Makefile camltk41/support/Makefile
*** camltk41.orig/support/Makefile	Mon Dec  2 16:00:15 1996
--- camltk41/support/Makefile	Sat Jun 14 00:20:03 1997
***************
*** 4,9 ****
--- 4,13 ----
       textvariable.cmo timer.cmo fileevent.cmo \
       libcamltk41.a
  
+ opt: hashtblc.cmx support.cmx widget.cmx protocol.cmx \
+      textvariable.cmx timer.cmx fileevent.cmx \
+      libcamltk41.a
+ 
  COBJS=cltkCaml.o cltkEval.o cltkEvent.o cltkFile.o cltkMain.o \
        cltkMisc.o cltkTimer.o cltkVar.o cltkWait.o
  
***************
*** 31,37 ****
  	rm -f *.cm* *.o *.a
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .mlp .c .o
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
--- 35,41 ----
  	rm -f *.cm* *.o *.a
  
  .SUFFIXES :
! .SUFFIXES : .mli .ml .cmi .cmo .cmx .mlp .c .o
  
  .mli.cmi:
  	$(CAMLCOMP) $(COMPFLAGS) $<
***************
*** 39,44 ****
--- 43,51 ----
  .ml.cmo:
  	$(CAMLCOMP) $(COMPFLAGS) $<
  
+ .ml.cmx:
+ 	$(CAMLOPT) -c $(COMPFLAGS) $<
+ 
  .c.o:
  	$(CAMLCOMP) $(CCFLAGS) $<
  
***************
*** 46,48 ****
--- 53,56 ----
  	$(CAMLDEP) *.mli *.ml > .depend
  
  include .depend
+ 

-- 
Thorsten Ohl, Physics Department, TH Darmstadt --- PGP: AF 38 FF CE 03 8A 2E A7
http://crunch.ikp.physik.th-darmstadt.de/~ohl/ -------- 8F 2A C1 86 8C 06 32 6B





^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~1997-06-17 16:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-06-12 16:23 camltk with native code compiler ocamlopt? Basile STARYNKEVITCH
1997-06-13  8:25 ` Wolfram Kahl
1997-06-16 15:00   ` Thorsten Ohl

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).