b7af385fea6f823cbb2dfff3a59d5b5b0be7a801
[p5sagit/p5-mst-13.2.git] / hints / darwin.sh
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.
11 perl_revision=`awk '/define[    ]+PERL_REVISION/ {print $3}' $src/patchlevel.h`
12 perl_version=`awk '/define[     ]+PERL_VERSION/ {print $3}' $src/patchlevel.h`
13 perl_subversion=`awk '/define[  ]+PERL_SUBVERSION/ {print $3}' $src/patchlevel.h`
14 version="${perl_revision}.${perl_version}.${perl_subversion}"
15
16 # This was previously used in all but causes three cases
17 # (no -Ddprefix=, -Dprefix=/usr, -Dprefix=/some/thing/else)
18 # but that caused too much grief.
19 # vendorlib="/System/Library/Perl/${version}"; # Apple-supplied modules
20
21 # BSD paths
22 case "$prefix" in
23   ''|'/usr')
24         case "$prefix" in
25         '')     # Default install; use non-system directories
26                 prefix='/usr/local';
27                 siteprefix='/usr/local';
28                 ;;
29         '/usr') # We are building/replacing the built-in perl
30                 prefix=/;
31                 siteprefix='/usr/local';
32                 # The DSTROOT is used by the Apple build system.
33                 installprefix="${DSTROOT}/";
34                 bin='/usr/bin';
35                 sitebin='/usr/bin';
36                 installusrbinperl='define'; # You knew what you were doing.
37                 privlib="/System/Library/Perl/${version}";
38                 sitelib="/Library/Perl/${version}";
39                 ;;
40         esac
41         vendorlib="/Network/Library/Perl/${version}";
42         # 4BSD uses ${prefix}/share/man, not ${prefix}/man.
43         man1dir='/usr/share/man/man1';
44         man3dir='/usr/share/man/man3';
45         ;;
46   *)    # Anything else; use non-system directories, use Configure defaults
47         ;;
48 esac
49
50 ##
51 # Tool chain settings
52 ##
53
54 # Since we can build fat, the archname doesn't need the processor type
55 archname='darwin';
56
57 # nm works.
58 usenm='true';
59
60 case "$optimize" in
61 '')
62 #    Optimizing for size also mean less resident memory usage on the part
63 # of Perl.  Apple asserts that this is a more important optimization than
64 # saving on CPU cycles.  Given that memory speed has not increased at
65 # pace with CPU speed over time (on any platform), this is probably a
66 # reasonable assertion.
67 if [ -z "${optimize}" ]; then
68   case "`${cc:-gcc} -v 2>&1`" in
69     *"gcc version 3."*) optimize='-Os' ;;
70     *) optimize='-O3' ;;
71   esac
72 else
73   optimize='-O3'
74 fi
75 ;;
76 esac
77
78 # -pipe: makes compilation go faster.
79 # -fno-common because common symbols are not allowed in MH_DYLIB
80 # -DDARWIN: apparently the __APPLE__ is not sanctioned by Apple
81 # as the way to differentiate Mac OS X.  (The official line is that
82 # *no* cpp symbol does differentiate Mac OS X.)
83 ccflags="${ccflags} -pipe -fno-common -DDARWIN"
84
85 # At least on Darwin 1.3.x:
86 #
87 # # define INT32_MIN -2147483648
88 # int main () {
89 #  double a = INT32_MIN;
90 #  printf ("INT32_MIN=%g\n", a);
91 #  return 0;
92 # }
93 # will output:
94 # INT32_MIN=2.14748e+09
95 # Note that the INT32_MIN has become positive.
96 # INT32_MIN is set in /usr/include/stdint.h by:
97 # #define INT32_MIN        -2147483648
98 # which seems to break the gcc.  Defining INT32_MIN as (-2147483647-1)
99 # seems to work.  INT64_MIN seems to be similarly broken.
100 # -- Nicholas Clark, Ken Williams, and Edward Moy
101 #
102 # This seems to have been fixed since at least Mac OS X 10.1.3,
103 # stdint.h defining INT32_MIN as (-INT32_MAX-1)
104 # -- Edward Moy
105 #
106 case "$(grep '^#define INT32_MIN' /usr/include/stdint.h)" in
107   *-2147483648) ccflags="${ccflags} -DINT32_MIN_BROKEN -DINT64_MIN_BROKEN" ;;
108 esac
109
110 # Avoid Apple's cpp precompiler, better for extensions
111 cppflags="${cppflags} -no-cpp-precomp"
112
113 # This is necessary because perl's build system doesn't
114 # apply cppflags to cc compile lines as it should.
115 ccflags="${ccflags} ${cppflags}"
116
117 # Known optimizer problems.
118 case "`cc -v 2>&1`" in
119   *"3.1 20020105"*) toke_cflags='optimize=""' ;;
120 esac
121
122 # Shared library extension is .dylib.
123 # Bundle extension is .bundle.
124 ld='cc';
125 so='dylib';
126 dlext='bundle';
127 dlsrc='dl_dyld.xs'; usedl='define';
128 cccdlflags=' '; # space, not empty, because otherwise we get -fpic
129 # Perl bundles do not expect two-level namespace, added in Darwin 1.4.
130 # But starting from perl 5.8.1/Darwin 7 the default is the two-level.
131 case "$osvers" in
132 1.[0-3].*)
133    lddlflags="${ldflags} -bundle -undefined suppress"
134    ;;
135 1.*)
136    ldflags="${ldflags} -flat_namespace"
137    lddlflags="${ldflags} -bundle -undefined suppress"
138    ;;
139 [2-6].*)
140    ldflags="${ldflags} -flat_namespace"
141    lddlflags="${ldflags} -bundle -undefined suppress"
142    ;;
143 *) lddlflags="${ldflags} -bundle -undefined dynamic_lookup"
144    case "$ld" in
145    *MACOSX_DEVELOPMENT_TARGET*) ;;
146    *) ld="MACOSX_DEPLOYMENT_TARGET=10.3 ${ld}" ;;
147    esac
148    ;;
149 esac
150 ldlibpthname='DYLD_LIBRARY_PATH';
151
152 # useshrplib=true results in much slower startup times.
153 # 'false' is the default value.  Use Configure -Duseshrplib to override.
154
155 cat > UU/archname.cbu <<'EOCBU'
156 # This script UU/archname.cbu will get 'called-back' by Configure 
157 # after it has otherwise determined the architecture name.
158 case "$ldflags" in
159 *"-flat_namespace"*) ;; # Backward compat, be flat.
160 # If we are using two-level namespace, we will munge the archname to show it.
161 *) archname="${archname}-2level" ;;
162 esac
163 EOCBU
164
165 ##
166 # System libraries
167 ##
168
169 # vfork works
170 usevfork='true';
171
172 # malloc works
173 usemymalloc='n';
174
175 # Locales aren't feeling well.
176 LC_ALL=C; export LC_ALL;
177 LANG=C; export LANG;
178
179 #
180 # The libraries are not threadsafe as of OS X 10.1.
181 #
182 # Fix when Apple fixes libc.
183 #
184 case "$usethreads$useithreads" in
185   *define*)
186   case "$osvers" in
187     [12345].*)     cat <<EOM >&4
188
189
190
191 *** Warning, there might be problems with your libraries with
192 *** regards to threading.  The test ext/threads/t/libc.t is likely
193 *** to fail.
194
195 EOM
196     ;;
197     *) usereentrant='define';;
198   esac
199
200 esac
201
202 ##
203 # Build process
204 ##
205
206 # Case-insensitive filesystems don't get along with Makefile and
207 # makefile in the same place.  Since Darwin uses GNU make, this dodges
208 # the problem.
209 firstmakefile=GNUmakefile;