List Info

Thread: v5.10.0 util.c and pp_sys.c fail to compile under Mac OS X




v5.10.0 util.c and pp_sys.c fail to compile under Mac OS X
user name
2007-10-22 19:44:33
# New Ticket Created by  Tom Wyant 
# Please include the string:  [perl #46725]
# in the subject line of all future correspondence about
this issue. 
# <URL: h
ttp://rt.perl.org/rt3/Ticket/Display.html?id=46725 >


This is a bug report for perl from wyantcpan.org,
generated with the help of perlbug 1.36 running under perl
5.10.0.


------------------------------------------------------------
-----
The 'make' step for Perl 5.10.0 DEVEL32174 fails to compile
util.c
under Mac OS X 10.3.9 with the following error:

`sh  cflags "optimize='-Os'" util.o`  util.c
          CCCMD =  cc -DPERL_CORE -c -DPERL_PATCHNUM=32174
-fno-common -DPERL_DARWIN -no-cpp-precomp
-fno-strict-aliasing -pipe -I/usr/local/include  -std=c89
-Os -Wall -ansi   -W -Wendif-labels 
In file included from
/usr/include/libkern/OSByteOrder.h:35,
                 from /usr/include/mach/ndr.h:93,
                 from /usr/include/mach/clock_priv.h:7,
                 from
/usr/include/mach/mach_interface.h:37,
                 from /usr/include/mach/mach.h:62,
                 from /usr/include/sys/event.h:154,
                 from /usr/include/sys/select.h:71,
                 from util.c:44:
/usr/include/libkern/ppc/OSByteOrder.h:42: error: syntax
error before "uint16_t"
/usr/include/libkern/ppc/OSByteOrder.h:57: error: syntax
error before "uint32_t"
/usr/include/libkern/ppc/OSByteOrder.h:72: error: syntax
error before "uint64_t"
/usr/include/libkern/ppc/OSByteOrder.h:93: error: syntax
error before "void"
/usr/include/libkern/ppc/OSByteOrder.h:107: error: syntax
error before "void"
/usr/include/libkern/ppc/OSByteOrder.h:121: error: syntax
error before "void"
/usr/include/libkern/ppc/OSByteOrder.h:143: error: syntax
error before "uint16_t"
/usr/include/libkern/ppc/OSByteOrder.h:153: error: syntax
error before "uint32_t"
/usr/include/libkern/ppc/OSByteOrder.h:163: error: syntax
error before "uint64_t"
In file included from /usr/include/mach/ndr.h:93,
                 from /usr/include/mach/clock_priv.h:7,
                 from
/usr/include/mach/mach_interface.h:37,
                 from /usr/include/mach/mach.h:62,
                 from /usr/include/sys/event.h:154,
                 from /usr/include/sys/select.h:71,
                 from util.c:44:
/usr/include/libkern/OSByteOrder.h:49: error: syntax error
before "int32_t"
/usr/include/libkern/OSByteOrder.h:105: error: syntax error
before "uint16_t"
/usr/include/libkern/OSByteOrder.h:115: error: syntax error
before "uint32_t"
/usr/include/libkern/OSByteOrder.h:125: error: syntax error
before "uint64_t"
/usr/include/libkern/OSByteOrder.h:137: error: syntax error
before "void"
/usr/include/libkern/OSByteOrder.h:148: error: syntax error
before "void"
/usr/include/libkern/OSByteOrder.h:159: error: syntax error
before "void"
/usr/include/libkern/OSByteOrder.h:172: error: syntax error
before "uint16_t"
/usr/include/libkern/OSByteOrder.h:182: error: syntax error
before "uint32_t"
/usr/include/libkern/OSByteOrder.h:192: error: syntax error
before "uint64_t"
/usr/include/libkern/OSByteOrder.h:204: error: syntax error
before "void"
/usr/include/libkern/OSByteOrder.h:215: error: syntax error
before "void"
/usr/include/libkern/OSByteOrder.h:226: error: syntax error
before "void"
/usr/include/libkern/OSByteOrder.h:245: error: syntax error
before "uint16_t"
/usr/include/libkern/OSByteOrder.h:254: error: syntax error
before "uint32_t"
/usr/include/libkern/OSByteOrder.h:263: error: syntax error
before "uint64_t"
/usr/include/libkern/OSByteOrder.h:292: error: syntax error
before "uint16_t"
/usr/include/libkern/OSByteOrder.h:301: error: syntax error
before "uint32_t"
/usr/include/libkern/OSByteOrder.h:310: error: syntax error
before "uint64_t"
make: *** [util.o] Error 1

The problem is that the various OSByteOrder.h files define
(by default)
inline functions, which are disallowed both by -ansi and
-std=c89. The
workaround is to compile without -ansi, and either without
the -std
option, or with -std=c99.

pp_sys.c fails in the same way, because it (eventually)
includes the same
header.

This may be a duplicate - I tried to send a report on this
on October 19,
(on DEVEL32147) but I could never find it in
rt.perl.org/perlbug, meaning
either that I didn't send it correctly or didn't look it up
correctly.

I do not know what the favored response is. A look at the
Changes file
says that you dropped these two options under Cygwin, but it
was not
immediately obvious to me how to make this happen under Mac
OS X.

Note that this is _NOT_ the current Mac OS X by any means;
the current is
10.4.10, and is about to be 10.5. The output of 'uname -a'
is appended
for your edification and/or amusement. Thanks.

$ uname -a
Darwin Wyants-White-iMac.local 7.9.0 Darwin Kernel Version
7.9.0: Wed Mar 30 20:11:17 PST 2005; rootnu/xn
u-517.12.7.obj~1/RELEASE_PPC  Power Macintosh powerpc
------------------------------------------------------------
-----
---
Flags:
    category=install
    severity=low
---
Site configuration information for perl 5.10.0:

Configured by tom at Mon Oct 22 18:46:15 EDT 2007.

Summary of my perl5 (revision 5 version 10 subversion 0
patch 32174) configuration:
  Platform:
    osname=darwin, osvers=7.9.0,
archname=darwin-thread-multi-2level
    uname='darwin wyants-white-imac.local 7.9.0 darwin
kernel version 7.9.0: wed mar 30 20:11:17 pst 2005; rootnuxnu
-517.12.7.obj~1release_ppc power macintosh powerpc '
    config_args=''
    hint=recommended, useposix=true, d_sigaction=define
    useithreads=define, usemultiplicity=define
    useperlio=define, d_sfio=undef, uselargefiles=define,
usesocks=undef
    use64bitint=undef, use64bitall=undef,
uselongdouble=undef
    usemymalloc=n, bincompat5005=undef
  Compiler:
    cc='cc', ccflags ='-fno-common -DPERL_DARWIN
-no-cpp-precomp -fno-strict-aliasing -pipe
-I/usr/local/include',
    optimize='-Os',
    cppflags='-no-cpp-precomp -fno-common -DPERL_DARWIN
-no-cpp-precomp -fno-strict-aliasing -pipe
-I/usr/local/include'
    ccversion='', gccversion='3.3 20030304 (Apple Computer,
Inc. build 1671)', gccosandvers=''
    intsize=4, longsize=4, ptrsize=4, doublesize=8,
byteorder=4321
    d_longlong=define, longlongsize=8, d_longdbl=define,
longdblsize=8
    ivtype='long', ivsize=4, nvtype='double', nvsize=8,
Off_t='off_t', lseeksize=8
    alignbytes=8, prototype=define
  Linker and Libraries:
    ld='env MACOSX_DEPLOYMENT_TARGET=10.3 cc', ldflags ='
-L/usr/local/lib'
    libpth=/usr/local/lib /usr/lib
    libs=-ldbm -ldl -lm -lc
    perllibs=-ldl -lm -lc
    libc=/usr/lib/libc.dylib, so=dylib, useshrplib=false,
libperl=libperl.a
    gnulibc_version=''
  Dynamic Linking:
    dlsrc=dl_dyld.xs, dlext=bundle, d_dlsymun=undef,
ccdlflags=' '
    cccdlflags=' ', lddlflags=' -bundle -undefined
dynamic_lookup -L/usr/local/lib'

Locally applied patches:
    DEVEL

---
INC
for perl 5.10.0:
    /sw/lib/perl5
    /sw/lib/perl5/darwin
   
/usr/local/test/perl/5.10.0/lib/5.10.0/darwin-thread-multi-2
level
    /usr/local/test/perl/5.10.0/lib/5.10.0
   
/usr/local/test/perl/5.10.0/lib/site_perl/5.10.0/darwin-thre
ad-multi-2level
    /usr/local/test/perl/5.10.0/lib/site_perl/5.10.0
    .

---
Environment for perl 5.10.0:
    DYLD_LIBRARY_PATH (unset)
    HOME=/Users/tom
    LANG (unset)
    LANGUAGE (unset)
    LD_LIBRARY_PATH (unset)
    LOGDIR (unset)
   
PATH=/sw/bin:/sw/sbin:/bin:/sbin:/usr/local/bin:/usr/bin:/us
r/sbin:/Developer/Tools:/Users/tom/Code/Tools:/usr/X11R6/bin

    PERL5LIB=/sw/lib/perl5:/sw/lib/perl5/darwin
    PERLPKGOPT=-noppm
    PERL_BADLANG (unset)
    SHELL=/bin/bash


v5.10.0 util.c and pp_sys.c fail to compile under Mac OS X
user name
2007-10-23 07:54:51
On Mon, 22 Oct 2007, Tom Wyant wrote:

> # New Ticket Created by  Tom Wyant 
> # Please include the string:  [perl #46725]
> # in the subject line of all future correspondence
about this issue. 
> # <URL: h
ttp://rt.perl.org/rt3/Ticket/Display.html?id=46725 >
> 

> The 'make' step for Perl 5.10.0 DEVEL32174 fails to
compile util.c
> under Mac OS X 10.3.9 with the following error:
> 
> `sh  cflags "optimize='-Os'" util.o`  util.c
>           CCCMD = cc -DPERL_CORE -c
-DPERL_PATCHNUM=32174 -fno-common 
>               -DPERL_DARWIN -no-cpp-precomp
-fno-strict-aliasing -pipe 
>               -I/usr/local/include -std=c89 -Os -Wall
-ansi -W 
>               -Wendif-labels
> In file included from
/usr/include/libkern/OSByteOrder.h:35,
>                  from /usr/include/mach/ndr.h:93,
>                  from
/usr/include/mach/clock_priv.h:7,
>                  from
/usr/include/mach/mach_interface.h:37,
>                  from /usr/include/mach/mach.h:62,
>                  from /usr/include/sys/event.h:154,
>                  from /usr/include/sys/select.h:71,
>                  from util.c:44:
> /usr/include/libkern/ppc/OSByteOrder.h:42: error:
syntax error before "uint16_t"
> /usr/include/libkern/ppc/OSByteOrder.h:57: error:
syntax error before "uint32_t"
> /usr/include/libkern/ppc/OSByteOrder.h:72: error:
syntax error before "uint64_t"

[ etc. ]

> The problem is that the various OSByteOrder.h files
define (by default)
> inline functions, which are disallowed both by -ansi
and -std=c89. The
> workaround is to compile without -ansi, and either
without the -std
> option, or with -std=c99.

Good analysis.  The -std=c89 and -ansi flags are added by
cflags.SH after 
Configure time.  cflags.SH builds a
"representative" C file that #includes 
"perl.h" and a whole bunch of system files, and
checks if it can be 
compiled with the flags -std=c89 and -ansi (among others).

That "representative" file already tries to
include <sys/select.h>, but 
because of a typo, it doesn't.  

This patch fixes a series of similar typos.  It ought to fix
it up:

diff -r -u perl-current/cflags.SH perl-andy/cflags.SH
--- perl-current/cflags.SH	2007-10-22 17:43:41.000000000
-0400
+++ perl-andy/cflags.SH	2007-10-23 08:28:18.000000000 -0400
 -66,31
+66,31 
 #ifdef I_UNISTD
 #include <unistd.h>
 #endif
-#ifdef I_SYSTYPES
+#ifdef I_SYS_TYPES
 #include <sys/types.h>
 #endif
-#ifdef I_SYSPARAM
+#ifdef I_SYS_PARAM
 #include <sys/param.h>
 #endif
-#ifdef I_SYSRESOURCE
+#ifdef I_SYS_RESOURCE
 #include <sys/resource.h>
 #endif
-#ifdef I_SYSSELECT
+#ifdef I_SYS_SELECT
 #include <sys/select.h>
 #endif
 #if defined(HAS_SOCKET) && !defined(VMS) &&
!defined(WIN32) /* See perl.h. */
 #include <sys/socket.h>
 #endif
-#ifdef I_SYSSTAT
+#ifdef I_SYS_STAT
 #include <sys/stat.h>
 #endif
-#ifdef I_SYSTIME
+#ifdef I_SYS_TIME
 #include <sys/time.h>
 #endif
-#ifdef I_SYSTIMES
+#ifdef I_SYS_TIMES
 #include <sys/times.h>
 #endif
-#ifdef I_SYSWAIT
+#ifdef I_SYS_WAIT
 #include <sys/wait.h>
 #endif
 /* The gcc -ansi can cause a lot of noise in Solaris
because of:
 -139,7
+139,7 
        case " $ccflags " in
        *" $opt "*) ;; # Skip if already there.
        *) rm -f _cflags$_exe
-          case "`$cc $cflags $warn $opt _cflags.c -o
_cflags$_exe 2>&1`" in
+          case "`$cc $cflags $warn $stdflags $opt
_cflags.c -o _cflags$_exe 2>&1`" in
           *"unrecognized"*) ;;
           *"implicit declaration"*) ;; # Was
something useful hidden?
           *"Invalid"*) ;;

-- 
    Andy Dougherty		dougheralafayette.edu

[1-2]

about | contact  Other archives ( Real Estate discussion Medical topics )