233 lines
7.7 KiB
Plaintext
233 lines
7.7 KiB
Plaintext
|
This file contains a collection of notes that various people have
|
||
|
provided about porting Tk to various machines and operating systems.
|
||
|
I don't have personal access to any of these machines, so I make
|
||
|
no guarantees that the notes are correct, complete, or up-to-date.
|
||
|
I'd be happy to receive corrections or updates.
|
||
|
|
||
|
---------------------------------------------
|
||
|
DEC Alphas:
|
||
|
---------------------------------------------
|
||
|
|
||
|
1. There appears to be a compiler/library bug that prevents tkTrig.c
|
||
|
from compiling unless you turn off optimization (remove the -O compiler
|
||
|
switch). The problem appears to have been fixed in the 1.3-4 version
|
||
|
of the compiler.
|
||
|
|
||
|
---------------------------------------------
|
||
|
HP-UX systems:
|
||
|
---------------------------------------------
|
||
|
|
||
|
1. Configuration:
|
||
|
HP-UX Release 7.05 on a series 300 (68k) machine.
|
||
|
The native cc has been used for production.
|
||
|
X11r4 libraries and include files were taken from
|
||
|
internet archives, where as the server came with HPUX release 7.05.
|
||
|
|
||
|
Problems:
|
||
|
Symbol table space for cc had to be increased with: -Wc,-Ns3000
|
||
|
tkBind.c did not compile under -O:
|
||
|
C1 internal error in "GetField": Set Error Detected
|
||
|
*** Error code 1
|
||
|
tkBind.c did compile without optimization (no -O).
|
||
|
|
||
|
2. Note: if you have trouble getting xauth-style access control to work
|
||
|
(and you'll need xauth if you want to use "send"), be sure to uncomment
|
||
|
the line
|
||
|
|
||
|
# Vuelogin*authorize: True
|
||
|
|
||
|
in the file /usr/vue/config/Xconfig, so that the server starts up with
|
||
|
authorization enabled. Also, you may have to reboot the machine in
|
||
|
order to force the server to restart.
|
||
|
|
||
|
---------------------------------------------
|
||
|
SCO Unix:
|
||
|
---------------------------------------------
|
||
|
|
||
|
Getting Tk to run under SCO Unix:
|
||
|
|
||
|
Add a "#undef select" to tkEvent.c, and remove the reference to TK_EXCEPTION
|
||
|
around line 460 of main.c.
|
||
|
|
||
|
Tk uses its own scheme for allocating the border colors for its 3D widgets,
|
||
|
which causes problems when running TK on a system with "PseudoColor"
|
||
|
display class, and a 16-cell colormap.
|
||
|
|
||
|
If you can't go to eight bitplanes, you can instead start the server with a
|
||
|
"-static" (Xsco) or "-analog" (Xsight) option, making the display class
|
||
|
become "StaticColor". This makes the entire colormap read-only, and it will
|
||
|
return the color that most closely maps to the desired color as possible.
|
||
|
|
||
|
---------------------------------------------
|
||
|
Silicon Graphics systems:
|
||
|
---------------------------------------------
|
||
|
|
||
|
1. Change the CC variable in the Makefile to:
|
||
|
|
||
|
CC = cc -xansi -D__STDC__ -signed
|
||
|
|
||
|
2. Change the LIBS variable in the Makefile to use the X11 shared library
|
||
|
("-lX11_s" instead of "-lX11"). Also, if you want to access remote servers
|
||
|
you may need to link with "-lsun", e.g. "-lX11_s -lsun".
|
||
|
|
||
|
3. Under some versions of IRIX (e.g. 4.0.1) you have to turn off
|
||
|
optimization (e.g. change "-O" in CFLAGS to "-O0" or remove it
|
||
|
entirely) because of faulty code generation. If the Tcl or Tk test
|
||
|
suites fail, turn off optimization.
|
||
|
|
||
|
4. Add a "-lsun" switch just before "-lm" in the LIBS definition.
|
||
|
|
||
|
---------------------------------------------
|
||
|
IBM RS/6000's:
|
||
|
---------------------------------------------
|
||
|
1. To allow ALT- sequences to work on the RS-6000, the following
|
||
|
line should be changed in tkBind.c:
|
||
|
|
||
|
OLD LINE:
|
||
|
{"Alt", Mod2Mask, 0},
|
||
|
NEW LINE:
|
||
|
{"Alt", Mod1Mask, 0},
|
||
|
|
||
|
---------------------------------------------
|
||
|
AT&T SVR4:
|
||
|
---------------------------------------------
|
||
|
|
||
|
1. The first major hurdle is that SVR4's select() subtly differs
|
||
|
from BSD select. This impacts Tk in two ways, some of the Xlib calls
|
||
|
make use of select() and are inherently broken and Tk itself makes
|
||
|
extensive use of select(). The first problem can't be fixed without
|
||
|
rebuilding one's Xlib, but can be avoided. I intend to submit part
|
||
|
of my work the XFree86 guys so that the next version of XFree86 for
|
||
|
SVR4 will not be broken. Until then, it is necessary to comment out
|
||
|
this section of code from Tk_DoOneEvent() (which is near line 1227):
|
||
|
|
||
|
#if !defined(SVR4)
|
||
|
void (*oldHandler)();
|
||
|
|
||
|
oldHandler = (void (*)()) signal(SIGPIPE, SIG_IGN);
|
||
|
XNoOp(display);
|
||
|
XFlush(display);
|
||
|
(void) signal(SIGPIPE, oldHandler);
|
||
|
#endif /* SVR4 */
|
||
|
|
||
|
if you don't comment it out, some scripts cause wish to go into
|
||
|
an infinite loop of sending no-ops to the X server.
|
||
|
|
||
|
2. As for fixing Tk's calls to select(), I've taken the simple
|
||
|
approach of writing a wrapper for select and then using #define to
|
||
|
replace all calls to select with the wrapper. I chose tkConfig.h
|
||
|
to load the wrapper. So at the very end of tkConfig.h, it now looks
|
||
|
like:
|
||
|
|
||
|
#if defined(SVR4)
|
||
|
# include "BSDselect.h"
|
||
|
#endif
|
||
|
|
||
|
#endif /* _TKCONFIG */
|
||
|
|
||
|
The file BSDselect.h looks like this:
|
||
|
|
||
|
#include <sys/types.h>
|
||
|
#include <sys/time.h>
|
||
|
#include <sys/select.h>
|
||
|
|
||
|
/* This is a fix for the difference between BSD's select() and
|
||
|
* SVR4's select(). SVR4's select() can never return a value larger
|
||
|
* than the total number of file descriptors being checked. So, if
|
||
|
* you select for read and write on one file descriptor, and both
|
||
|
* are true, SVR4 select() will only return 1. BSD select in the
|
||
|
* same situation will return 2.
|
||
|
*
|
||
|
* Additionally, BSD select() on timing out, will zero the masks,
|
||
|
* while SVR4 does not. This is fixed here as well.
|
||
|
*
|
||
|
* Set your tabstops to 4 characters to have this code nicely formatted.
|
||
|
*
|
||
|
* Jerry Whelan, guru@bradley.edu, June 12th, 1993
|
||
|
*/
|
||
|
|
||
|
|
||
|
int
|
||
|
BSDselect(nfds, readfds, writefds, exceptfds, timeout)
|
||
|
int nfds;
|
||
|
fd_set *readfds, *writefds, *exceptfds;
|
||
|
struct timeval *timeout;
|
||
|
{
|
||
|
int rval,
|
||
|
i;
|
||
|
|
||
|
rval = select(nfds, readfds, writefds, exceptfds, timeout);
|
||
|
|
||
|
switch(rval) {
|
||
|
case -1: return(rval);
|
||
|
break;
|
||
|
|
||
|
case 0: if(readfds != NULL)
|
||
|
FD_ZERO(readfds);
|
||
|
if(writefds != NULL)
|
||
|
FD_ZERO(writefds);
|
||
|
if(exceptfds != NULL)
|
||
|
FD_ZERO(exceptfds);
|
||
|
|
||
|
return(rval);
|
||
|
break;
|
||
|
|
||
|
default: for(i=0, rval=0; i < nfds; i++) {
|
||
|
if((readfds != NULL) && FD_ISSET
|
||
|
(i, readfds)) rval++;
|
||
|
if((writefds != NULL) && FD_ISSE
|
||
|
T(i, writefds)) rval++;
|
||
|
if((writefds != NULL) && FD_ISSE
|
||
|
T(i, exceptfds)) rval++;
|
||
|
}
|
||
|
return(rval);
|
||
|
}
|
||
|
/* Should never get here */
|
||
|
}
|
||
|
|
||
|
---------------------------------------------
|
||
|
CDC 4680MP, EP/IX 1.4.3:
|
||
|
---------------------------------------------
|
||
|
|
||
|
The installation was done in the System V environment (-systype sysv)
|
||
|
with the BSD extensions available (-I/usr/include/bsd and -lbsd). It was
|
||
|
built with the 2.20 level C compiler. The 2.11 level can be used, but
|
||
|
it is better to match what TCL is built with, which must be 2.20 or
|
||
|
higher (see the porting notes with TCL for the details).
|
||
|
|
||
|
To make the configure script find the BSD extensions, I set environment
|
||
|
variable DEFS to "-I/usr/include/bsd" and LIBS to "-lbsd" before
|
||
|
running it. I would have also set CC to "cc2.20", but that compiler
|
||
|
driver has a bug that loader errors (e.g. not finding a library routine,
|
||
|
which the script uses to tell what is available) do not cause an error
|
||
|
status to be returned to the shell.
|
||
|
|
||
|
After running configure, I changed the CC definition line in Makefile
|
||
|
from:
|
||
|
CC=cc
|
||
|
to
|
||
|
CC=cc2.20
|
||
|
to match the TCL build. Skip this if the default compiler is already 2.20
|
||
|
(or later).
|
||
|
|
||
|
-------------------------------------------------
|
||
|
Pyramid, OSx 5.1a (UCB universe, GCC installed):
|
||
|
-------------------------------------------------
|
||
|
|
||
|
Instead of typing "./configure" to configure, type
|
||
|
|
||
|
DEFS="-I/usr/include/X11/attinc" ./configure
|
||
|
|
||
|
to sh to do the configuration.
|
||
|
|
||
|
-------------------------------------------------
|
||
|
NextSTEP 3.1:
|
||
|
-------------------------------------------------
|
||
|
|
||
|
1. Run configure with predefined CPP:
|
||
|
CPP='cc -E' ./configure
|
||
|
|
||
|
2. Edit Makefile:
|
||
|
-add '-m' to MATH_LIBS
|
||
|
MATH_LIBS = -m -lm
|