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