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# finite() deprecated in 10.9, use isfinite() instead. 28case "$osvers" in 29[1-8].*) ;; 30*) d_finite='undef' ;; 31esac 32 33# This was previously used in all but causes three cases 34# (no -Ddprefix=, -Dprefix=/usr, -Dprefix=/some/thing/else) 35# but that caused too much grief. 36# vendorlib="/System/Library/Perl/${version}"; # Apple-supplied modules 37 38case "$darwin_distribution" in 39$define) # We are building/replacing the built-in perl 40 prefix='/usr'; 41 installprefix='/usr'; 42 bin='/usr/bin'; 43 siteprefix='/usr/local'; 44 # We don't want /usr/bin/HEAD issues. 45 sitebin='/usr/local/bin'; 46 sitescript='/usr/local/bin'; 47 installusrbinperl='define'; # You knew what you were doing. 48 privlib="/System/Library/Perl/${version}"; 49 sitelib="/Library/Perl/${version}"; 50 vendorprefix='/'; 51 usevendorprefix='define'; 52 vendorbin='/usr/bin'; 53 vendorscript='/usr/bin'; 54 vendorlib="/Network/Library/Perl/${version}"; 55 # 4BSD uses ${prefix}/share/man, not ${prefix}/man. 56 man1dir='/usr/share/man/man1'; 57 man3dir='/usr/share/man/man3'; 58 # But users' installs shouldn't touch the system man pages. 59 # Transient obsoleted style. 60 siteman1='/usr/local/share/man/man1'; 61 siteman3='/usr/local/share/man/man3'; 62 # New style. 63 siteman1dir='/usr/local/share/man/man1'; 64 siteman3dir='/usr/local/share/man/man3'; 65 ;; 66esac 67 68## 69# Tool chain settings 70## 71 72# Since we can build fat, the archname doesn't need the processor type 73archname='darwin'; 74 75# nm isn't known to work after Snow Leopard and XCode 4; testing with OS X 10.5 76# and Xcode 3 shows a working nm, but pretending it doesn't work produces no 77# problems. 78usenm='false'; 79 80case "$optimize" in 81'') 82# Optimizing for size also mean less resident memory usage on the part 83# of Perl. Apple asserts that this is a more important optimization than 84# saving on CPU cycles. Given that memory speed has not increased at 85# pace with CPU speed over time (on any platform), this is probably a 86# reasonable assertion. 87if [ -z "${optimize}" ]; then 88 case "`${cc:-gcc} -v 2>&1`" in 89 *"gcc version 3."*) optimize='-Os' ;; 90 *) optimize='-O3' ;; 91 esac 92else 93 optimize='-O3' 94fi 95;; 96esac 97 98# -fno-common because common symbols are not allowed in MH_DYLIB 99# -DPERL_DARWIN: apparently the __APPLE__ is not sanctioned by Apple 100# as the way to differentiate Mac OS X. (The official line is that 101# *no* cpp symbol does differentiate Mac OS X.) 102ccflags="${ccflags} -fno-common -DPERL_DARWIN" 103 104# At least on Darwin 1.3.x: 105# 106# # define INT32_MIN -2147483648 107# int main () { 108# double a = INT32_MIN; 109# printf ("INT32_MIN=%g\n", a); 110# return 0; 111# } 112# will output: 113# INT32_MIN=2.14748e+09 114# Note that the INT32_MIN has become positive. 115# INT32_MIN is set in /usr/include/stdint.h by: 116# #define INT32_MIN -2147483648 117# which seems to break the gcc. Defining INT32_MIN as (-2147483647-1) 118# seems to work. INT64_MIN seems to be similarly broken. 119# -- Nicholas Clark, Ken Williams, and Edward Moy 120# 121# This seems to have been fixed since at least Mac OS X 10.1.3, 122# stdint.h defining INT32_MIN as (-INT32_MAX-1) 123# -- Edward Moy 124# 125if test -f /usr/include/stdint.h; then 126 case "$(grep '^#define INT32_MIN' /usr/include/stdint.h)" in 127 *-2147483648) ccflags="${ccflags} -DINT32_MIN_BROKEN -DINT64_MIN_BROKEN" ;; 128 esac 129fi 130 131# Avoid Apple's cpp precompiler, better for extensions 132if [ "X`echo | ${cc} -no-cpp-precomp -E - 2>&1 >/dev/null`" = "X" ]; then 133 cppflags="${cppflags} -no-cpp-precomp" 134 135 # This is necessary because perl's build system doesn't 136 # apply cppflags to cc compile lines as it should. 137 ccflags="${ccflags} ${cppflags}" 138fi 139 140# Known optimizer problems. 141case "`cc -v 2>&1`" in 142 *"3.1 20020105"*) toke_cflags='optimize=""' ;; 143esac 144 145# Shared library extension is .dylib. 146# Bundle extension is .bundle. 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# Allow the user to override ld, but modify it as necessary below 171case "$ld" in 172 '') case "$cc" in 173 # If the cc is explicitly something else than cc (or empty), 174 # set the ld to be that explicitly something else. Conversely, 175 # if the cc is 'cc' (or empty), set the ld to be 'cc'. 176 cc|'') ld='cc';; 177 *) ld="$cc" ;; 178 esac 179 ;; 180esac 181 182# From http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/mk/platform/Darwin.mk 183# and https://trac.macports.org/wiki/XcodeVersionInfo 184# and https://trac.macports.org/wiki/UsingTheRightCompiler 185# and https://gist.github.com/yamaya/2924292 186# and http://opensource.apple.com/source/clang/ 187# 188# Note that Xcode gets updates on older systems sometimes, and in 189# general that the OS levels and XCode levels are not synchronized 190# since new releases of XCode usually support both some new and some 191# old OS releases. 192# 193# Note that Apple hijacks the clang preprocessor symbols __clang_major__ 194# and __clang_minor__ so they cannot be used (easily) to detect the 195# actual clang release. For example: 196# 197# "Yosemite 10.10.x 14.x.y 6.3 (clang 3.6 as 6.1/602.0.49)" 198# 199# means that the Xcode 6.3 provided the clang 6.3 but called it 6.1 200# (__clang_major__, __clang_minor__) and in addition the preprocessor 201# symbol __apple_build_version__ was 6020049. 202# 203# Codename OS Kernel Xcode 204# 205# Cheetah 10.0.x 1.3.1 206# Puma 10.1 1.4.1 207# 10.1.x 5.x.y 208# Jaguar 10.2.x 6.x.y 209# Panther 10.3.x 7.x.y 210# Tiger 10.4.x 8.x.y 2.0 (gcc4 4.0.0) 211# 2.2 (gcc4 4.0.1) 212# 2.2.1 (gcc 3.3) 213# 2.5 ? 214# Leopard 10.5.x 9.x.y 3.0 (gcc 4.0.1 default) 215# 3.1 (gcc 4.2.1) 216# Snow Leopard 10.6.x 10.x.y 3.2 (llvm gcc 4.2, clang 2.3 as 1.0) 217# 3.2.1 (clang 1.0.1 as 1.0.1/24) 218# 3.2.2 (clang 1.0.2 as 1.0.2/32) 219# 3.2.3 (clang 1.5 as 1.5/60) 220# 4.0.1 (clang 2.9 as 2.0/138) 221# Lion 10.7.x 11.x.y 4.1 (llvm gcc 4.2.1, clang 3.0 as 2.1/163.7.1) 222# 4.2 (clang 3.0 as 3.0/211.10.1) 223# 4.3.3 (clang 3.1 as 3.1/318.0.61) 224# 4.4 (clang 3.1 as 4.0/421.0.57) 225# Mountain Lion 10.8.x 12.x.y 4.5 (clang 3.1 as 4.1/421.11.65, real gcc removed, there is gcc but it's really clang) 226# 4.6 (clang 3.2 as 4.2/425.0.24) 227# 5.0 (clang 3.3 as 5.0/500.2.75) 228# 5.1 (clang 3.4 as 5.1/503.0.38) 229# 5.1.1 (clang 3.4 as 5.1/503.0.40) 230# Mavericks 10.9.x 13.x.y 6.0.1 (clang 3.5 as 6.0/600.0.51) 231# 6.1 (clang 3.5 as 6.0/600.0.54) 232# 6.1.1 (clang 3.5 as 6.0/600.0.56) 233# 6.2 (clang 3.5 as 6.0/600.0.57) 234# Yosemite 10.10.x 14.x.y 6.3 (clang 3.6 as 6.1/602.0.49) 235# 6.3.1 (clang 3.6 as 6.1/602.0.49) 236# 6.3.2 (clang 3.6 as 6.1/602.0.53) 237# El Capitan 10.11.x 15.x.y 7.0 (clang 3.7 as 7.0/700.0.72) 238# 7.1 (clang 3.7 as 7.0/700.1.76) 239# 7.2 (clang 3.7 as 7.0.2/700.1.81) 240# 7.2.1 (clang 3.7 as 7.0.2/700.1.81) 241# 7.3 (clang 3.8 as 7.3.0/703.0.29) 242# Sierra 10.12.x 16.x.y 8.0.0 (clang 3.8 as 8.0/800.0.38) 243# 244 245# Processors Supported 246# 247# PowerPC (PPC): 10.0.x - 10.5.8 (final 10.5.x) 248# PowerPC via Rosetta: 10.4.4 - 10.6.8 (final 10.6.x) 249# IA-32: 10.4.4 - 10.6.8 (though still supported on x86-64) 250# x86-64: 10.4.7 - current 251 252# MACOSX_DEPLOYMENT_TARGET selects the minimum OS level we want to support 253# 254# It is needed for OS releases before 10.6. 255# 256# https://developer.apple.com/library/mac/documentation/DeveloperTools/Conceptual/cross_development/Configuring/configuring.html 257# 258# If it is set, we also propagate its value to ccflags and ldflags 259# using the -mmacosx-version-min flag. If it is not set, we use 260# the OS X release as the min value for the flag. 261 262# Adds "-mmacosx-version-min=$2" to "$1" unless it already is there. 263add_macosx_version_min () { 264 local v 265 eval "v=\$$1" 266 case " $v " in 267 *"-mmacosx-version-min"*) 268 echo "NOT adding -mmacosx-version-min=$2 to $1 ($v)" >&4 269 ;; 270 *) echo "Adding -mmacosx-version-min=$2 to $1" >&4 271 eval "$1='$v -mmacosx-version-min=$2'" 272 ;; 273 esac 274} 275 276# Perl bundles do not expect two-level namespace, added in Darwin 1.4. 277# But starting from perl 5.8.1/Darwin 7 the default is the two-level. 278case "$osvers" in # Note: osvers is the kernel version, not the 10.x 2791.[0-3].*) # OS X 10.0.x 280 lddlflags="${ldflags} -bundle -undefined suppress" 281 ;; 2821.*) # OS X 10.1 283 ldflags="${ldflags} -flat_namespace" 284 lddlflags="${ldflags} -bundle -undefined suppress" 285 ;; 286[2-6].*) # OS X 10.1.x - 10.2.x (though [2-4] never existed publicly) 287 ldflags="${ldflags} -flat_namespace" 288 lddlflags="${ldflags} -bundle -undefined suppress" 289 ;; 290[7-9].*) # OS X 10.3.x - 10.5.x 291 lddlflags="${ldflags} -bundle -undefined dynamic_lookup" 292 case "$ld" in 293 *MACOSX_DEPLOYMENT_TARGET*) ;; 294 *) ld="env MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;; 295 esac 296 ;; 297*) # OS X 10.6.x - current 298 # The MACOSX_DEPLOYMENT_TARGET is not needed, 299 # but the -mmacosx-version-min option is always used. 300 301 # We now use MACOSX_DEPLOYMENT_TARGET, if set, as an override by 302 # capturing its value and adding it to the flags. 303 case "$MACOSX_DEPLOYMENT_TARGET" in 304 [1-9][0-9].*) 305 add_macosx_version_min ccflags $MACOSX_DEPLOYMENT_TARGET 306 add_macosx_version_min ldflags $MACOSX_DEPLOYMENT_TARGET 307 ;; 308 '') 309 # Empty MACOSX_DEPLOYMENT_TARGET is okay. 310 ;; 311 *) 312 cat <<EOM >&4 313 314*** Unexpected MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET 315*** 316*** Please either set it to a valid macOS version number (e.g., 10.15) or to empty. 317 318EOM 319 exit 1 320 ;; 321 esac 322 323 # Keep the prodvers leading whitespace (Configure magic). 324 # Cannot use $osvers here since that is the kernel version. 325 # sw_vers output what we want 326 # "ProductVersion: 10.10.5" "10.10" 327 # "ProductVersion: 10.11" "10.11" 328 prodvers=`sw_vers|awk '/^ProductVersion:/{print $2}'|awk -F. '{print $1"."$2}'` 329 case "$prodvers" in 330 [1-9][0-9].*) 331 add_macosx_version_min ccflags $prodvers 332 add_macosx_version_min ldflags $prodvers 333 ;; 334 *) 335 cat <<EOM >&4 336 337*** Unexpected product version $prodvers. 338*** 339*** Try running sw_vers and see what its ProductVersion says. 340 341EOM 342 exit 1 343 esac 344 345 darwin_major=$(echo $osvers|awk -F. '{print $1}') 346 347 # macOS 10.12 (darwin 16.0.0) deprecated syscall(). 348 if [ "$darwin_major" -ge 16 ]; then 349 d_syscall='undef' 350 # If deploying to pre-10.12, suppress Time::HiRes's detection of the system clock_gettime() 351 case "$MACOSX_DEPLOYMENT_TARGET" in 352 10.[6-9]|10.10|10.11) 353 ccflags="$ccflags -Werror=partial-availability -D_DARWIN_FEATURE_CLOCK_GETTIME=0" 354 ;; 355 *) 356 ;; 357 esac 358 fi 359 360 lddlflags="${ldflags} -bundle -undefined dynamic_lookup" 361 ;; 362esac 363 364ldlibpthname='DYLD_LIBRARY_PATH'; 365 366# useshrplib=true results in much slower startup times. 367# 'false' is the default value. Use Configure -Duseshrplib to override. 368 369cat > UU/archname.cbu <<'EOCBU' 370# This script UU/archname.cbu will get 'called-back' by Configure 371# after it has otherwise determined the architecture name. 372case "$ldflags" in 373*"-flat_namespace"*) ;; # Backward compat, be flat. 374# If we are using two-level namespace, we will munge the archname to show it. 375*) archname="${archname}-2level" ;; 376esac 377EOCBU 378 379# 64-bit addressing support. Currently strictly experimental. DFD 2005-06-06 380case "$use64bitall" in 381$define|true|[yY]*) 382case "$osvers" in 383[1-7].*) 384 cat <<EOM >&4 385 386 387 388*** 64-bit addressing is not supported for Mac OS X versions 389*** below 10.4 ("Tiger") or Darwin versions below 8. Please try 390*** again without -Duse64bitall. (-Duse64bitint will work, however.) 391 392EOM 393 exit 1 394 ;; 395*) 396 case "$osvers" in 397 8.*) 398 cat <<EOM >&4 399 400 401 402*** Perl 64-bit addressing support is experimental for Mac OS X 403*** 10.4 ("Tiger") and Darwin version 8. System V IPC is disabled 404*** due to problems with the 64-bit versions of msgctl, semctl, 405*** and shmctl. You should also expect the following test failures: 406*** 407*** ext/threads-shared/t/wait (threaded builds only) 408 409EOM 410 411 [ "$d_msgctl" ] || d_msgctl='undef' 412 [ "$d_semctl" ] || d_semctl='undef' 413 [ "$d_shmctl" ] || d_shmctl='undef' 414 ;; 415 esac 416 417 case `uname -p` in 418 powerpc) arch=ppc64 ;; 419 i386) arch=x86_64 ;; 420 *) cat <<EOM >&4 421 422*** Don't recognize processor, can't specify 64 bit compilation. 423 424EOM 425 ;; 426 esac 427 for var in ccflags cppflags ld ldflags 428 do 429 eval $var="\$${var}\ -arch\ $arch" 430 done 431 432 ;; 433esac 434;; 435esac 436 437## 438# System libraries 439## 440 441# vfork works 442usevfork='true'; 443 444# malloc wrap works 445case "$usemallocwrap" in 446'') usemallocwrap='define' ;; 447esac 448 449# our malloc works (but allow users to override) 450case "$usemymalloc" in 451'') usemymalloc='n' ;; 452esac 453# However sbrk() returns -1 (failure) somewhere in lib/unicore/mktables at 454# around 14M, so we need to use system malloc() as our sbrk() 455# 456# sbrk() in Darwin deprecated since Mavericks (10.9), it still exists 457# in Yosemite (10.10) but that is just an emulation, and fails for 458# allocations beyond 4MB. One should use e.g. mmap instead (or system 459# malloc, as suggested above, that but is kind of backward). 460malloc_cflags='ccflags="-DUSE_PERL_SBRK -DPERL_SBRK_VIA_MALLOC $ccflags"' 461 462# Locales aren't feeling well. 463LC_ALL=C; export LC_ALL; 464LANG=C; export LANG; 465 466# 467# The libraries are not threadsafe as of OS X 10.1. 468# 469# Fix when Apple fixes libc. 470# 471case "$usethreads$useithreads" in 472 *define*) 473 case "$osvers" in 474 [12345].*) cat <<EOM >&4 475 476 477 478*** Warning, there might be problems with your libraries with 479*** regards to threading. The test ext/threads/t/libc.t is likely 480*** to fail. 481 482EOM 483 ;; 484 *) usereentrant='define';; 485 esac 486 487esac 488 489# Fink can install a GDBM library that claims to have the ODBM interfaces 490# but Perl dynaloader cannot for some reason use that library. We don't 491# really need ODBM_FIle, though, so let's just hint ODBM away. 492i_dbm=undef; 493 494# Configure doesn't detect ranlib on Tiger properly. 495# NeilW says this should be acceptable on all darwin versions. 496ranlib='ranlib' 497 498# Catch MacPorts gcc/g++ extra libdir 499case "$($cc -v 2>&1)" in 500*"MacPorts gcc"*) loclibpth="$loclibpth /opt/local/lib/libgcc" ;; 501esac 502 503## 504# Build process 505## 506 507# Case-insensitive filesystems don't get along with Makefile and 508# makefile in the same place. Since Darwin uses GNU make, this dodges 509# the problem. 510firstmakefile=GNUmakefile; 511 512# Parts of the system call setenv(), in particular in an atfork handler. 513# This causes problems when the child tries to clean up environ[], so 514# let libc manage environ[]. 515cat >> config.over <<'EOOVER' 516if test "$d_unsetenv" = "$define" -a \ 517 `expr "$ccflags" : '.*-DPERL_USE_SAFE_PUTENV'` -eq 0; then 518 ccflags="$ccflags -DPERL_USE_SAFE_PUTENV" 519fi 520EOOVER 521 522# if you use a newer toolchain before OS X 10.9 these functions may be 523# incorrectly detected, so disable them 524# OS X 10.10.x corresponds to kernel 14.x 525case "$osvers" in 526 [1-9].*|1[0-3].*) 527 d_linkat=undef 528 d_openat=undef 529 d_renameat=undef 530 d_unlinkat=undef 531 d_fchmodat=undef 532 ;; 533esac 534 535# mkostemp() was autodetected as present but found to not be linkable 536# on 15.6.0. Unknown what other OS versions are affected. 537d_mkostemp=undef 538