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# 126if test -f /usr/include/stdint.h; then 127 case "$(grep '^#define INT32_MIN' /usr/include/stdint.h)" in 128 *-2147483648) ccflags="${ccflags} -DINT32_MIN_BROKEN -DINT64_MIN_BROKEN" ;; 129 esac 130fi 131 132# Avoid Apple's cpp precompiler, better for extensions 133if [ "X`echo | ${cc} -no-cpp-precomp -E - 2>&1 >/dev/null`" = "X" ]; then 134 cppflags="${cppflags} -no-cpp-precomp" 135 136 # This is necessary because perl's build system doesn't 137 # apply cppflags to cc compile lines as it should. 138 ccflags="${ccflags} ${cppflags}" 139fi 140 141# Known optimizer problems. 142case "`cc -v 2>&1`" in 143 *"3.1 20020105"*) toke_cflags='optimize=""' ;; 144esac 145 146# Shared library extension is .dylib. 147# Bundle extension is .bundle. 148so='dylib'; 149dlext='bundle'; 150usedl='define'; 151 152# 10.4 can use dlopen. 153# 10.4 broke poll(). 154case "$osvers" in 155[1-7].*) 156 dlsrc='dl_dyld.xs'; 157 ;; 158*) 159 dlsrc='dl_dlopen.xs'; 160 d_poll='undef'; 161 i_poll='undef'; 162 ;; 163esac 164 165case "$ccdlflags" in # If passed in from command line, presume user knows best 166'') 167 cccdlflags=' '; # space, not empty, because otherwise we get -fpic 168;; 169esac 170 171# Allow the user to override ld, but modify it as necessary below 172case "$ld" in 173 '') case "$cc" in 174 # If the cc is explicitly something else than cc (or empty), 175 # set the ld to be that explicitly something else. Conversely, 176 # if the cc is 'cc' (or empty), set the ld to be 'cc'. 177 cc|'') ld='cc';; 178 *) ld="$cc" ;; 179 esac 180 ;; 181esac 182 183# Perl bundles do not expect two-level namespace, added in Darwin 1.4. 184# But starting from perl 5.8.1/Darwin 7 the default is the two-level. 185case "$osvers" in 1861.[0-3].*) 187 lddlflags="${ldflags} -bundle -undefined suppress" 188 ;; 1891.*) 190 ldflags="${ldflags} -flat_namespace" 191 lddlflags="${ldflags} -bundle -undefined suppress" 192 ;; 193[2-6].*) 194 ldflags="${ldflags} -flat_namespace" 195 lddlflags="${ldflags} -bundle -undefined suppress" 196 ;; 197*) 198 lddlflags="${ldflags} -bundle -undefined dynamic_lookup" 199 case "$ld" in 200 *MACOSX_DEVELOPMENT_TARGET*) ;; 201 *) ld="env MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;; 202 esac 203 ;; 204esac 205ldlibpthname='DYLD_LIBRARY_PATH'; 206 207# useshrplib=true results in much slower startup times. 208# 'false' is the default value. Use Configure -Duseshrplib to override. 209 210cat > UU/archname.cbu <<'EOCBU' 211# This script UU/archname.cbu will get 'called-back' by Configure 212# after it has otherwise determined the architecture name. 213case "$ldflags" in 214*"-flat_namespace"*) ;; # Backward compat, be flat. 215# If we are using two-level namespace, we will munge the archname to show it. 216*) archname="${archname}-2level" ;; 217esac 218EOCBU 219 220# 64-bit addressing support. Currently strictly experimental. DFD 2005-06-06 221case "$use64bitall" in 222$define|true|[yY]*) 223case "$osvers" in 224[1-7].*) 225 cat <<EOM >&4 226 227 228 229*** 64-bit addressing is not supported for Mac OS X versions 230*** below 10.4 ("Tiger") or Darwin versions below 8. Please try 231*** again without -Duse64bitall. (-Duse64bitint will work, however.) 232 233EOM 234 exit 1 235 ;; 236*) 237 case "$osvers" in 238 8.*) 239 cat <<EOM >&4 240 241 242 243*** Perl 64-bit addressing support is experimental for Mac OS X 244*** 10.4 ("Tiger") and Darwin version 8. System V IPC is disabled 245*** due to problems with the 64-bit versions of msgctl, semctl, 246*** and shmctl. You should also expect the following test failures: 247*** 248*** ext/threads-shared/t/wait (threaded builds only) 249 250EOM 251 252 [ "$d_msgctl" ] || d_msgctl='undef' 253 [ "$d_semctl" ] || d_semctl='undef' 254 [ "$d_shmctl" ] || d_shmctl='undef' 255 ;; 256 esac 257 258 case `uname -p` in 259 powerpc) arch=ppc64 ;; 260 i386) arch=x86_64 ;; 261 *) cat <<EOM >&4 262 263*** Don't recognize processor, can't specify 64 bit compilation. 264 265EOM 266 ;; 267 esac 268 for var in ccflags cppflags ld ldflags 269 do 270 eval $var="\$${var}\ -arch\ $arch" 271 done 272 273 ;; 274esac 275;; 276esac 277 278## 279# System libraries 280## 281 282# vfork works 283usevfork='true'; 284 285# malloc wrap works 286case "$usemallocwrap" in 287'') usemallocwrap='define' ;; 288esac 289 290# our malloc works (but allow users to override) 291case "$usemymalloc" in 292'') usemymalloc='n' ;; 293esac 294# However sbrk() returns -1 (failure) somewhere in lib/unicore/mktables at 295# around 14M, so we need to use system malloc() as our sbrk() 296malloc_cflags='ccflags="-DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC $ccflags"' 297 298# Locales aren't feeling well. 299LC_ALL=C; export LC_ALL; 300LANG=C; export LANG; 301 302# 303# The libraries are not threadsafe as of OS X 10.1. 304# 305# Fix when Apple fixes libc. 306# 307case "$usethreads$useithreads" in 308 *define*) 309 case "$osvers" in 310 [12345].*) cat <<EOM >&4 311 312 313 314*** Warning, there might be problems with your libraries with 315*** regards to threading. The test ext/threads/t/libc.t is likely 316*** to fail. 317 318EOM 319 ;; 320 *) usereentrant='define';; 321 esac 322 323esac 324 325# Fink can install a GDBM library that claims to have the ODBM interfaces 326# but Perl dynaloader cannot for some reason use that library. We don't 327# really need ODBM_FIle, though, so let's just hint ODBM away. 328i_dbm=undef; 329 330# Configure doesn't detect ranlib on Tiger properly. 331# NeilW says this should be acceptable on all darwin versions. 332ranlib='ranlib' 333 334## 335# Build process 336## 337 338# Case-insensitive filesystems don't get along with Makefile and 339# makefile in the same place. Since Darwin uses GNU make, this dodges 340# the problem. 341firstmakefile=GNUmakefile; 342