1## 2# Darwin (Mac OS) hints 3# Wilfredo Sanchez <wsanchez@wsanchez.net> 4## 5 6## 7# Paths 8## 9 10# Configure hasn't figured out the version number yet. Bummer. 11perl_revision=`awk '/define[ ]+PERL_REVISION/ {print $3}' $src/patchlevel.h` 12perl_version=`awk '/define[ ]+PERL_VERSION/ {print $3}' $src/patchlevel.h` 13perl_subversion=`awk '/define[ ]+PERL_SUBVERSION/ {print $3}' $src/patchlevel.h` 14version="${perl_revision}.${perl_version}.${perl_subversion}" 15 16# Pretend that Darwin doesn't know about those system calls in Tiger 17# (10.4/darwin 8) and earlier [perl #24122] 18case "$osvers" in 19[1-8].*) 20 d_setregid='undef' 21 d_setreuid='undef' 22 d_setrgid='undef' 23 d_setruid='undef' 24 ;; 25esac 26 27# This was previously used in all but causes three cases 28# (no -Ddprefix=, -Dprefix=/usr, -Dprefix=/some/thing/else) 29# but that caused too much grief. 30# vendorlib="/System/Library/Perl/${version}"; # Apple-supplied modules 31 32# BSD paths 33case "$prefix" in 34'') # Default install; use non-system directories 35 prefix='/usr/local'; 36 siteprefix='/usr/local'; 37 ;; 38'/usr') # We are building/replacing the built-in perl 39 prefix='/'; 40 installprefix='/'; 41 bin='/usr/bin'; 42 siteprefix='/usr/local'; 43 # We don't want /usr/bin/HEAD issues. 44 sitebin='/usr/local/bin'; 45 sitescript='/usr/local/bin'; 46 installusrbinperl='define'; # You knew what you were doing. 47 privlib="/System/Library/Perl/${version}"; 48 sitelib="/Library/Perl/${version}"; 49 vendorprefix='/'; 50 usevendorprefix='define'; 51 vendorbin='/usr/bin'; 52 vendorscript='/usr/bin'; 53 vendorlib="/Network/Library/Perl/${version}"; 54 # 4BSD uses ${prefix}/share/man, not ${prefix}/man. 55 man1dir='/usr/share/man/man1'; 56 man3dir='/usr/share/man/man3'; 57 # But users' installs shouldn't touch the system man pages. 58 # Transient obsoleted style. 59 siteman1='/usr/local/share/man/man1'; 60 siteman3='/usr/local/share/man/man3'; 61 # New style. 62 siteman1dir='/usr/local/share/man/man1'; 63 siteman3dir='/usr/local/share/man/man3'; 64 ;; 65 *) # Anything else; use non-system directories, use Configure defaults 66 ;; 67esac 68 69## 70# Tool chain settings 71## 72 73# Since we can build fat, the archname doesn't need the processor type 74archname='darwin'; 75 76# nm isn't known to work after Snow Leopard and XCode 4; testing with OS X 10.5 77# and Xcode 3 shows a working nm, but pretending it doesn't work produces no 78# problems. 79usenm='false'; 80 81case "$optimize" in 82'') 83# Optimizing for size also mean less resident memory usage on the part 84# of Perl. Apple asserts that this is a more important optimization than 85# saving on CPU cycles. Given that memory speed has not increased at 86# pace with CPU speed over time (on any platform), this is probably a 87# reasonable assertion. 88if [ -z "${optimize}" ]; then 89 case "`${cc:-gcc} -v 2>&1`" in 90 *"gcc version 3."*) optimize='-Os' ;; 91 *) optimize='-O3' ;; 92 esac 93else 94 optimize='-O3' 95fi 96;; 97esac 98 99# -fno-common because common symbols are not allowed in MH_DYLIB 100# -DPERL_DARWIN: apparently the __APPLE__ is not sanctioned by Apple 101# as the way to differentiate Mac OS X. (The official line is that 102# *no* cpp symbol does differentiate Mac OS X.) 103ccflags="${ccflags} -fno-common -DPERL_DARWIN" 104 105# At least on Darwin 1.3.x: 106# 107# # define INT32_MIN -2147483648 108# int main () { 109# double a = INT32_MIN; 110# printf ("INT32_MIN=%g\n", a); 111# return 0; 112# } 113# will output: 114# INT32_MIN=2.14748e+09 115# Note that the INT32_MIN has become positive. 116# INT32_MIN is set in /usr/include/stdint.h by: 117# #define INT32_MIN -2147483648 118# which seems to break the gcc. Defining INT32_MIN as (-2147483647-1) 119# seems to work. INT64_MIN seems to be similarly broken. 120# -- Nicholas Clark, Ken Williams, and Edward Moy 121# 122# This seems to have been fixed since at least Mac OS X 10.1.3, 123# stdint.h defining INT32_MIN as (-INT32_MAX-1) 124# -- Edward Moy 125# 126case "$(grep '^#define INT32_MIN' /usr/include/stdint.h)" in 127 *-2147483648) ccflags="${ccflags} -DINT32_MIN_BROKEN -DINT64_MIN_BROKEN" ;; 128esac 129 130# Avoid Apple's cpp precompiler, better for extensions 131if [ "X`echo | ${cc} -no-cpp-precomp -E - 2>&1 >/dev/null`" = "X" ]; then 132 cppflags="${cppflags} -no-cpp-precomp" 133 134 # This is necessary because perl's build system doesn't 135 # apply cppflags to cc compile lines as it should. 136 ccflags="${ccflags} ${cppflags}" 137fi 138 139# Known optimizer problems. 140case "`cc -v 2>&1`" in 141 *"3.1 20020105"*) toke_cflags='optimize=""' ;; 142esac 143 144# Shared library extension is .dylib. 145# Bundle extension is .bundle. 146ld='cc'; 147so='dylib'; 148dlext='bundle'; 149usedl='define'; 150 151# 10.4 can use dlopen. 152# 10.4 broke poll(). 153case "$osvers" in 154[1-7].*) 155 dlsrc='dl_dyld.xs'; 156 ;; 157*) 158 dlsrc='dl_dlopen.xs'; 159 d_poll='undef'; 160 i_poll='undef'; 161 ;; 162esac 163 164case "$ccdlflags" in # If passed in from command line, presume user knows best 165'') 166 cccdlflags=' '; # space, not empty, because otherwise we get -fpic 167;; 168esac 169 170# Perl bundles do not expect two-level namespace, added in Darwin 1.4. 171# But starting from perl 5.8.1/Darwin 7 the default is the two-level. 172case "$osvers" in 1731.[0-3].*) 174 lddlflags="${ldflags} -bundle -undefined suppress" 175 ;; 1761.*) 177 ldflags="${ldflags} -flat_namespace" 178 lddlflags="${ldflags} -bundle -undefined suppress" 179 ;; 180[2-6].*) 181 ldflags="${ldflags} -flat_namespace" 182 lddlflags="${ldflags} -bundle -undefined suppress" 183 ;; 184*) 185 lddlflags="${ldflags} -bundle -undefined dynamic_lookup" 186 case "$ld" in 187 *MACOSX_DEVELOPMENT_TARGET*) ;; 188 *) ld="env MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;; 189 esac 190 ;; 191esac 192ldlibpthname='DYLD_LIBRARY_PATH'; 193 194# useshrplib=true results in much slower startup times. 195# 'false' is the default value. Use Configure -Duseshrplib to override. 196 197cat > UU/archname.cbu <<'EOCBU' 198# This script UU/archname.cbu will get 'called-back' by Configure 199# after it has otherwise determined the architecture name. 200case "$ldflags" in 201*"-flat_namespace"*) ;; # Backward compat, be flat. 202# If we are using two-level namespace, we will munge the archname to show it. 203*) archname="${archname}-2level" ;; 204esac 205EOCBU 206 207# 64-bit addressing support. Currently strictly experimental. DFD 2005-06-06 208case "$use64bitall" in 209$define|true|[yY]*) 210case "$osvers" in 211[1-7].*) 212 cat <<EOM >&4 213 214 215 216*** 64-bit addressing is not supported for Mac OS X versions 217*** below 10.4 ("Tiger") or Darwin versions below 8. Please try 218*** again without -Duse64bitall. (-Duse64bitint will work, however.) 219 220EOM 221 exit 1 222 ;; 223*) 224 case "$osvers" in 225 8.*) 226 cat <<EOM >&4 227 228 229 230*** Perl 64-bit addressing support is experimental for Mac OS X 231*** 10.4 ("Tiger") and Darwin version 8. System V IPC is disabled 232*** due to problems with the 64-bit versions of msgctl, semctl, 233*** and shmctl. You should also expect the following test failures: 234*** 235*** ext/threads-shared/t/wait (threaded builds only) 236 237EOM 238 239 [ "$d_msgctl" ] || d_msgctl='undef' 240 [ "$d_semctl" ] || d_semctl='undef' 241 [ "$d_shmctl" ] || d_shmctl='undef' 242 ;; 243 esac 244 245 case `uname -p` in 246 powerpc) arch=ppc64 ;; 247 i386) arch=x86_64 ;; 248 *) cat <<EOM >&4 249 250*** Don't recognize processor, can't specify 64 bit compilation. 251 252EOM 253 ;; 254 esac 255 for var in ccflags cppflags ld ldflags 256 do 257 eval $var="\$${var}\ -arch\ $arch" 258 done 259 260 ;; 261esac 262;; 263esac 264 265## 266# System libraries 267## 268 269# vfork works 270usevfork='true'; 271 272# malloc wrap works 273case "$usemallocwrap" in 274'') usemallocwrap='define' ;; 275esac 276 277# our malloc works (but allow users to override) 278case "$usemymalloc" in 279'') usemymalloc='n' ;; 280esac 281# However sbrk() returns -1 (failure) somewhere in lib/unicore/mktables at 282# around 14M, so we need to use system malloc() as our sbrk() 283malloc_cflags='ccflags="-DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC $ccflags"' 284 285# Locales aren't feeling well. 286LC_ALL=C; export LC_ALL; 287LANG=C; export LANG; 288 289# 290# The libraries are not threadsafe as of OS X 10.1. 291# 292# Fix when Apple fixes libc. 293# 294case "$usethreads$useithreads" in 295 *define*) 296 case "$osvers" in 297 [12345].*) cat <<EOM >&4 298 299 300 301*** Warning, there might be problems with your libraries with 302*** regards to threading. The test ext/threads/t/libc.t is likely 303*** to fail. 304 305EOM 306 ;; 307 *) usereentrant='define';; 308 esac 309 310esac 311 312# Fink can install a GDBM library that claims to have the ODBM interfaces 313# but Perl dynaloader cannot for some reason use that library. We don't 314# really need ODBM_FIle, though, so let's just hint ODBM away. 315i_dbm=undef; 316 317# Configure doesn't detect ranlib on Tiger properly. 318# NeilW says this should be acceptable on all darwin versions. 319ranlib='ranlib' 320 321## 322# Build process 323## 324 325# Case-insensitive filesystems don't get along with Makefile and 326# makefile in the same place. Since Darwin uses GNU make, this dodges 327# the problem. 328firstmakefile=GNUmakefile; 329