[m-rev.] for review: port tcl/tk binding to Mac OS X

Julien Fischer juliensf at cs.mu.OZ.AU
Thu Aug 11 00:17:40 AEST 2005


On Wed, 10 Aug 2005, Ian MacLarty wrote:

> For review by anyone.
>
> Estimated hours taken: 5
> Branches: main

This may as well go on the release branch as well.

>
> Port the Tcl/Tk binding to Mac OS X.
>
> extras/graphics/mercury_tcltk/HOWTO:
> 	Remove the remark about interior pointers since it is no longer
> 	applicable.
>
I'm pretty sure that you can still disable the recognition of interior
pointers if you wish, so the remark is not entirely useful.  It may be
better to keep it and just mention that this is the default beahviour.

> extras/graphics/mercury_tcltk/Mmakefile:
> 	Try to link with tcl/tk 8.4 by default.
>
> extras/graphics/mercury_tcltk/Mmakefile.MacOSX:
> 	Mmakefile for Mac OS X.
>
> extras/graphics/mercury_tcltk/README:
> 	Mention Mmakefile.MacOSX.
>
> extras/graphics/mercury_tcltk/mtcltk.m:
> 	Include the headers from a different location on Mac OS X.
>
> extras/graphics/samples/calc/Mmakefile.MacOSX:
> 	Add a Mmakefile to compile the Tcl/Tk example on Mac OS X.
>
> extras/graphics/samples/calc/README:
> 	Add a README.
>
> extras/graphics/samples/calc/calc.m:
> 	Add spaces around some of the characters on the buttons, so that they
> 	are visible in Mac OS X.
>
Does that affect them on Linux?

It may be worth adding a news item to the webpage mentioning the OS X
Tcl/Tk port (as well as the GLUT/OpenGL ports

> Index: extras/graphics/mercury_tcltk/HOWTO
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/extras/graphics/mercury_tcltk/HOWTO,v
> retrieving revision 1.3
> diff -u -r1.3 HOWTO
> --- extras/graphics/mercury_tcltk/HOWTO	22 Dec 2003 13:23:54 -0000	1.3
> +++ extras/graphics/mercury_tcltk/HOWTO	10 Aug 2005 11:43:48 -0000
> @@ -1,4 +1,3 @@
> -
>  Using mercury_tcltk is not all that different to using Tcl/Tk itself,
>  except that all operations are done in Mercury instead of Tcl.
>  See the samples for example code, and the interfaces of
> @@ -6,20 +5,7 @@
>  fully documented in any way, but if you know Tcl/Tk, you shouldn't
>  have any problems.
>
> -The main tricky thing is that it is *CRUCIAL* that you enable recognition
> -of interior pointers in the garbage collection library.  The simplest
> -way to do this is to set the GC_ALL_INTERIOR_POINTERS environment variable
> -before running your program.  Another alternative is to link with a
> -version of the garbage collection library (libgc.a or libgc.so) which
> -has been compiled with `-DALL_INTERIOR_POINTERS'.  You can create
> -this by typing the commands
> -
> -	make clean
> -	make libgc.a libgc.so GC_GRADE=gc EXTRA_CFLAGS=-DALL_INTERIOR_POINTERS
> -
> -in the boehm_gc directory of the Mercury compiler source distribution.
> -
> -You also need to add some information to your Mmakefile to tell mmake where
> +You may need to add some information to your Mmakefile to tell mmake where
>  the mercury_tcltk library is, and to link with the mercury_tcltk, tcl,
>  tk and X libraries.
>
> @@ -42,10 +28,7 @@
>  	MLLIBS          = -lmercury_tcltk $(TCLTK_MLLIBS) $(EXTRA_MLLIBS)
>  	C2INITFLAGS     = $(MERCURY_TCLTK_DIR)/mercury_tcltk.init
>
> -	# Tell ml to link with our specially-compiled version of
> -	# the libgc library instead of the usual one.
> -	MLFLAGS	+= -L some/other/directory/boehm_gc
> -
>  You can then use EXTRA_MCFLAGS, EXTRA_MLFLAGS, etc to set any other
>  options you need.
>
> +../samples/calc contains an example program.
> Index: extras/graphics/mercury_tcltk/Mmakefile
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/extras/graphics/mercury_tcltk/Mmakefile,v
> retrieving revision 1.4
> diff -u -r1.4 Mmakefile
> --- extras/graphics/mercury_tcltk/Mmakefile	22 Dec 2003 13:23:54 -0000	1.4
> +++ extras/graphics/mercury_tcltk/Mmakefile	10 Aug 2005 11:49:58 -0000
> @@ -8,7 +8,7 @@
>
>  # You may need to modify the line below
>
> -MLLIBS    = -ltk8.0 -ltcl8.0 -L/usr/X11R6/lib -lX11 -lXmu -lXext -lm -ldl \
> +MLLIBS    = -ltk8.4 -ltcl8.4 -L/usr/X11R6/lib -lX11 -lXmu -lXext -lm -ldl \
>     	    -lXt -lICE -lSM
>
>  MLFLAGS	  = -R/usr/X11R6/lib
> Index: extras/graphics/mercury_tcltk/Mmakefile.MacOSX
> ===================================================================
> RCS file: extras/graphics/mercury_tcltk/Mmakefile.MacOSX
> diff -N extras/graphics/mercury_tcltk/Mmakefile.MacOSX
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ extras/graphics/mercury_tcltk/Mmakefile.MacOSX	10 Aug 2005 11:43:48 -0000
> @@ -0,0 +1,25 @@
> +#-----------------------------------------------------------------------------#
> +# Copyright (C) 1998, 2001, 2003 The University of Melbourne.
> +# This file may only be copied under the terms of the GNU Library General
> +# Public License - see the file COPYING.LIB in the Mercury distribution.

The years in the copyright message are wrong.

> +#-----------------------------------------------------------------------------#
> +# To compile the Mercury Tcl/Tk binding on MacOSX you must first install the
> +# Tcl/Tk Aqua framework, available from http://tcltkaqua.sourceforge.net/.

Is Tcl/Tk supplied with Tiger?

> +# Then do:
> +# $ mmake -f Mmakefile.MacOSX depend
> +# $ mmake -f Mmakefile.MacOSX
> +# and to install do:
> +# $ mmake -f Mmakefile.MacOSX install
> +#

Did you have a fix for mmake -f with the install target?

> +
> +include Mercury.options
> +
> +MLLIBS = -framework Tcl -framework Tk
> +
> +EXTRA_CFLAGS = -Wno-uninitialized
> +
> +MAIN_TARGET = libmercury_tcltk
> +
> +depend: mercury_tcltk.depend
> +
> +install: libmercury_tcltk.install
> Index: extras/graphics/mercury_tcltk/README
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/extras/graphics/mercury_tcltk/README,v
> retrieving revision 1.1
> diff -u -r1.1 README
> --- extras/graphics/mercury_tcltk/README	17 Feb 1998 06:33:33 -0000	1.1
> +++ extras/graphics/mercury_tcltk/README	10 Aug 2005 11:43:48 -0000
> @@ -13,6 +13,8 @@
>  See HOWTO for details on how to link the package in with your own
>  Mercury programs.
>
> +To build the Tcl/Tk binding on MacOSX see Mmakefile.MacOSX.
> +
>  	The mercury_tcltk package is free software, but is Copyright
>  	(C) 1997-1998 The University of Melbourne. It is distributed
>  	under the terms of the GNU Library General Public License.

While, you're here the years in that copyright message need updating.


> Index: extras/graphics/mercury_tcltk/mtcltk.m
> ===================================================================
> RCS file: /home/mercury1/repository/mercury/extras/graphics/mercury_tcltk/mtcltk.m,v
> retrieving revision 1.8
> diff -u -r1.8 mtcltk.m
> --- extras/graphics/mercury_tcltk/mtcltk.m	16 Feb 2005 07:08:28 -0000	1.8
> +++ extras/graphics/mercury_tcltk/mtcltk.m	10 Aug 2005 11:43:48 -0000
> @@ -98,7 +98,11 @@
>  ** SCCS: @(#) tkAppInit.c 1.20 96/02/15 18:55:27
>  **/
>
> -#include ""tk.h""
> +#if defined(__APPLE__) && defined(__MACH__)
> +	#include <Tk/tk.h>
> +#else
> +	#include ""tk.h""
> +#endif
>  ").
>
>  /*
> Index: extras/graphics/samples/calc/Mmakefile.MacOSX
> ===================================================================
> RCS file: extras/graphics/samples/calc/Mmakefile.MacOSX
> diff -N extras/graphics/samples/calc/Mmakefile.MacOSX
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ extras/graphics/samples/calc/Mmakefile.MacOSX	10 Aug 2005 11:43:48 -0000
> @@ -0,0 +1,16 @@
> +MAIN_TARGET = calc
> +
> +# Specify the location of the `mercury_tcltk' package.
> +MERCURY_TCLTK_DIR = ../../mercury_tcltk
> +
> +MGNUCFLAGS = -I$(MERCURY_TCLTK_DIR)
> +
> +# Tell mmake to use the `mercury_tcltk' library.
> +VPATH 		= $(MERCURY_TCLTK_DIR):$(MMAKE_VPATH)
> +MCFLAGS 	= -I$(MERCURY_TCLTK_DIR) $(EXTRA_MCFLAGS)
> +MLFLAGS 	= -R$(MERCURY_TCLTK_DIR) $(EXTRA_MLFLAGS) \
> +          	  -L$(MERCURY_TCLTK_DIR)
> +MLLIBS 		= -lmercury_tcltk $(EXTRA_MLLIBS)
> +C2INITARGS 	= $(MERCURY_TCLTK_DIR)/mercury_tcltk.init
> +
> +depend : calc.depend
> Index: extras/graphics/samples/calc/README
> ===================================================================
> RCS file: extras/graphics/samples/calc/README
> diff -N extras/graphics/samples/calc/README
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ extras/graphics/samples/calc/README	10 Aug 2005 11:43:48 -0000
> @@ -0,0 +1,23 @@
> +A simple calculator using the Mercury Tcl/Tk binding.
> +
> +Before building this example you will need to build
> +the Tcl/Tk binding in ../mercury_tcltk.
> +
> +To compile the example on Linux do:
> +mmake depend
> +mmake
> +
> +To compile the example on Mac OS X:
> +
> +If you built the mercury_tcltk library on Mac OS X, but haven't installed it,
> +then do:
> +mmake -f Mmakefile.MacOSX depend
> +mmake -f Mmakefile.MacOSX
> +export DYLD_LIBRARY_PATH=../../mercury_tcltk
> +
> +If you installed the mercury_tcltk library on Mac OS X,
> +then you will need to use a Mmakefile like the following:
> +MAIN_TARGET = calc
> +EXTRA_LIB_DIRS = $(INSTALL_PREFIX)/lib/mercury
> +EXTRA_LIBRARIES = mercury_tcltk
> +depend : calc.depend

Looks good otherwise.

Julien.
--------------------------------------------------------------------------
mercury-reviews mailing list
post:  mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------



More information about the reviews mailing list