[SAC-HELP] NetBSD falling foul of SAC's toupper/tolower macros

Kevin.Buckley at mcs.vuw.ac.nz Kevin.Buckley at mcs.vuw.ac.nz
Mon Sep 29 18:15:19 PDT 2008

Hi there,

I am sure this is a known issue but my searches turned up zilch
so, just in case ...

I came to build sac-101.2 on a NetBSD 4.99.58 platform with
gcc (GCC) 4.1.3 20080202 prerelease (NetBSD nb1 20070620), the
sac build being configured thus:

./configure --prefix=/local/scratch/kevin/sac-101.2

resulting in:

Compliation Options for sac (Seismic Analysis Code 101.2)

CFLAGS         =
LDFLAGS        =
LIBS           = -lm -lcurses
Debug          =
Optimization   =
Database       = off
Matlab         = off
X11-buffer     = on
X11-depth      = on
X_LIBS         =  -L/usr/pkg/lib
X_CFLAGS       =  -I/usr/pkg/include
Readline       = off
Editline       = on
Install Base   = /local/scratch/kevin/sac-101.2
System         =  (i386-unknown-netbsdelf4.99.58)

and saw this error:

gcc -DHAVE_CONFIG_H -I. -I. -I../inc        -I/usr/pkg/include -I../inc 
-I../libedit/include -c -o co/zgpmsg.o co/zgpmsg.c
In file included from /usr/pkg/include/readline/chardefs.h:26,
                 from /usr/pkg/include/readline/keymaps.h:36,
                 from /usr/pkg/include/readline/readline.h:38,
                 from co/zgpmsg.c:93:
/usr/include/ctype.h:71: error: expected identifier or '(' before 'int'
/usr/include/ctype.h:71: error: expected ')' before '?' token
/usr/include/ctype.h:72: error: expected identifier or '(' before 'int'
/usr/include/ctype.h:72: error: expected ')' before '?' token

this occurs because the toupper/tolower declarations in this system's

int     tolower(int);
int     toupper(int);

get mangled by the macro declaration in sac's


#ifndef CYGWIN
/*      macro expansions        */
#define tolower(c)       ((c>='A' && c<='Z') ? (c+('a'-'A')) : c)
#define toupper(c)       ((c>='a' && c<='z') ? (c-('a'-'A')) : c)
#endif /* CYGWIN */

as they are only protected by the CYGWIN define and so appear as:

int ((int>='A' && int<='Z') ? (int+('a'-'A')) : int);
int ((int>='a' && int<='z') ? (int-('a'-'A')) : int);

After removing the macro definitions, the code compiles OK.


Kevin M. Buckley                                  Room:  CO327
School of Mathematics, Statistics                 Phone: +64 4 463 5971
 and Computer Science
Victoria University of Wellington
New Zealand

More information about the sac-help mailing list