source: trunk/base/foundation.m4 @ 26177

Last change on this file since 26177 was 26177, checked in by jmpp@…, 13 years ago

Finally merging the dp2mp-move branch into trunk, woot!

This basically means all strings in our sources,
whether it's something we output to the user or something
internal, such as a function/proc naming, are entirely in
the macports namespace and we no longer mix darwinports
with apple with macports strings.

It also means we now have new paths in svn and on
the client side at installation time, added to a
cleaner structure under ${prefix}/var/. Read
http://trac.macports.org/projects/macports/wiki/MacPortsRenaming
for more information.

NOTE: This commit also marks the rsync server finally
being moved over to the macosforge boxes, with the new
layout outlined in the dp2mp-move branch in place.
DNS entries still point to the old rsync server for
macports, however, so sync'ing/selfupdating an installation
based on these sources will be temporarily broken
until dns refresh.

To developers and testers, please do test the upgrade
target in the main base/Makefile as thouroughly as
possible and report any bugs/shortcomings/unexpected_behavior
to me, thanks!

File size: 11.1 KB
Line 
1#------------------------------------------------------------------------
2# MP_COMPILER_ATTRIBUTE_LF_PRIVATE
3#
4#       Determines whether the compiler supports the symbol
5#       'visibility("hidden")' attribute
6#
7# Arguments:
8#       None.
9#
10# Requires:
11#       none
12#
13# Depends:
14#       none
15#
16# Results:
17#
18#       Defines the following macros:
19#               LF_PRIVATE
20#
21#------------------------------------------------------------------------
22
23AC_DEFUN([MP_COMPILER_ATTRIBUTE_LF_PRIVATE], [
24        AC_MSG_CHECKING([for gcc symbol visibility attribute])
25        AC_CACHE_VAL(mp_cv_attribute_mp_private, [
26                AC_COMPILE_IFELSE([
27                        AC_LANG_SOURCE([
28                                #if defined(__GNUC__) && defined(__APPLE__) && __GNUC__ < 4
29                                # error Darwin does not support the visibility attribute with gcc releases prior to 4
30                                #elif defined(WIN32) && __GNUC__ < 4
31                                # error MinGW/Cygwin do not support the visibility attribute with gcc releases prior to 4.
32                                #endif
33                                int a __attribute__ ((visibility("hidden")));
34                        ])
35                ],[
36                        mp_cv_attribute_mp_private="__attribute__((visibility(\"hidden\")))"
37                ],[
38                        mp_cv_attribute_mp_private="no"
39                ])
40        ])
41
42        AC_MSG_RESULT([$mp_cv_attribute_mp_private])
43       
44        if test x"$mp_cv_attribute_mp_private" = "xno"; then
45                MP_PRIVATE=""
46        else
47                MP_PRIVATE="$mp_cv_attribute_mp_private"
48        fi
49
50        AC_DEFINE_UNQUOTED(MP_PRIVATE, $MP_PRIVATE, [Mark private symbols])
51])
52
53
54#------------------------------------------------------------------------
55# MP_OBJC_RUNTIME --
56#
57#       Determine the default, working Objective C runtime
58#
59# Arguments:
60#       None.
61#
62# Requires:
63#       none
64#
65# Depends:
66#       AC_PROG_OBJC from objc.m4
67#
68# Results:
69#
70#       Adds a --with-objc-runtime switch to configure.
71#       Result is cached.
72#
73#       Defines one of the following preprocessor macros:
74#               APPLE_RUNTIME GNU_RUNTIME
75#
76#       Substitutes the following variables:
77#               OBJC_RUNTIME OBJC_RUNTIME_FLAGS OBJC_LIBS
78#               OBJC_PTHREAD_CFLAGS OBJC_PTHREAD_LIBS
79#------------------------------------------------------------------------
80AC_DEFUN([MP_OBJC_RUNTIME],[
81        AC_REQUIRE([AC_PROG_OBJC])
82        AC_ARG_WITH(objc-runtime, AC_HELP_STRING([--with-objc-runtime], [Specify either "GNU" or "apple"]), [with_objc_runtime=${withval}])
83
84        if test x"${with_objc_runtime}" != x; then
85                case "${with_objc_runtime}" in
86                        GNU)
87                                ;;
88                        apple)
89                                ;;
90                        *)
91                                AC_MSG_ERROR([${with_objc_runtime} is not a valid argument to --with-objc-runtime. Please specify either "GNU" or "apple"])
92                                ;;
93                esac
94        fi
95
96        AC_LANG_PUSH([Objective C])
97
98        # Check for common header, objc/objc.h
99        AC_CHECK_HEADERS([objc/objc.h], ,[AC_MSG_ERROR([Can't locate Objective C runtime headers])])
100
101        # Save LIBS & OBJCFLAGS
102        # depending on whether the cache is used,
103        # the variables may or may not be modified.
104        OLD_LIBS="${LIBS}"
105        OLD_OBJCFLAGS="${OBJCFLAGS}"
106
107        # Add -lobjc. The following tests will ensure that the library exists and functions with the detected Objective C compiler
108        LIBS="${LIBS} -lobjc"
109
110        # Test if pthreads are required to link against
111        # libobjc - this is the case on FreeBSD.
112
113        AC_MSG_CHECKING([if linking libobjc requires pthreads])
114        AC_CACHE_VAL(mp_cv_objc_req_pthread, [
115                # First, test if objc links without pthreads
116                # The following uses quadrigraphs
117                # '@<:@' = '['
118                # '@:>@' = ']'
119                AC_LINK_IFELSE([
120                                AC_LANG_PROGRAM([
121                                                #include <objc/objc.h>
122                                                #include <objc/Object.h>
123                                        ], [
124                                                Object *obj = @<:@Object alloc@:>@;
125                                                puts(@<:@obj name@:>@);
126                                        ])
127                                ], [
128                                        # Linked without -pthread
129                                        mp_cv_objc_req_pthread="no"
130                                ], [
131                                        # Failed to link without -pthread
132                                        mp_cv_objc_req_pthread="yes"
133                                ]
134                )
135
136                # If the above failed, try with pthreads
137                if test x"${mp_cv_objc_req_pthread}" = x"yes"; then
138                        LIBS="${LIBS} ${PTHREAD_LIBS}"
139                        OBJCFLAGS="${OBJCFLAGS} ${PTHREAD_CFLAGS}"
140                        AC_LINK_IFELSE([
141                                        AC_LANG_PROGRAM([
142                                                        #include <objc/objc.h>
143                                                        #include <objc/Object.h>
144                                                ], [
145                                                        Object *obj = @<:@Object alloc@:>@;
146                                                        puts(@<:@obj name@:>@);
147                                                ])
148                                        ], [
149                                                # Linked with -lpthread
150                                                mp_cv_objc_req_pthread="yes"
151                                        ], [
152                                                # Failed to link against objc at all
153                                                # This will be caught in the runtime
154                                                # checks below
155                                                mp_cv_objc_req_pthread="no"
156                                        ]
157                        )
158                fi
159        ])
160        AC_MSG_RESULT(${mp_cv_objc_req_pthread})
161
162        if test x"${mp_cv_objc_req_pthread}" = x"no"; then
163                OBJC_LIBS="-lobjc"
164                OBJC_PTHREAD_LIBS="${PTHREAD_LIBS}"
165                OBJC_PTHREAD_CFLAGS="${PTHREAD_CFLAGS}"
166        elif test x"${mp_cv_objc_req_pthread}" = x"yes"; then
167                OBJC_LIBS="-lobjc ${PTHREAD_LIBS}"
168                OBJCFLAGS="${OBJCFLAGS} ${PTHREAD_CFLAGS}"
169        fi
170
171        if test x"${with_objc_runtime}" = x || test x"${with_objc_runtime}" = x"apple"; then
172                AC_MSG_CHECKING([for Apple Objective-C runtime])
173                AC_CACHE_VAL(mp_cv_objc_runtime_apple, [
174                        # The following uses quadrigraphs
175                        # '@<:@' = '['
176                        # '@:>@' = ']'
177                        AC_LINK_IFELSE([
178                                        AC_LANG_PROGRAM([
179                                                        #include <objc/objc.h>
180                                                        #include <objc/objc-api.h>
181                                                ], [
182                                                        id class = objc_lookUpClass("Object");
183                                                        id obj = @<:@class alloc@:>@;
184                                                        puts(@<:@obj name@:>@);
185                                                ])
186                                        ], [
187                                                mp_cv_objc_runtime_apple="yes"
188                                        ], [
189                                                mp_cv_objc_runtime_apple="no"
190                                        ]
191                        )
192                ])
193                AC_MSG_RESULT(${mp_cv_objc_runtime_apple})
194        else
195                mp_cv_objc_runtime_apple="no"
196        fi
197
198        if test x"${with_objc_runtime}" = x || test x"${with_objc_runtime}" = x"GNU"; then
199                AC_MSG_CHECKING([for GNU Objective C runtime])
200                AC_CACHE_VAL(mp_cv_objc_runtime_gnu, [
201                        # The following uses quadrigraphs
202                        # '@<:@' = '['
203                        # '@:>@' = ']'
204                        AC_LINK_IFELSE([
205                                        AC_LANG_PROGRAM([
206                                                        #include <objc/objc.h>
207                                                        #include <objc/objc-api.h>
208                                                ], [
209                                                        id class = objc_lookup_class("Object");
210                                                        id obj = @<:@class alloc@:>@;
211                                                        puts(@<:@obj name@:>@);
212                                                ])
213                                        ], [
214                                                mp_cv_objc_runtime_gnu="yes"
215                                        ], [
216                                                mp_cv_objc_runtime_gnu="no"
217                                        ]
218                        )
219                ])
220                AC_MSG_RESULT(${mp_cv_objc_runtime_gnu})
221        else
222                mp_cv_objc_runtime_gnu="no"
223        fi
224
225        # Apple runtime is prefered
226        if test x"${mp_cv_objc_runtime_apple}" = x"yes"; then
227                        OBJC_RUNTIME="APPLE_RUNTIME"
228                        OBJC_RUNTIME_FLAGS="-fnext-runtime"
229                        AC_MSG_NOTICE([Using Apple Objective-C runtime])
230                        AC_DEFINE([APPLE_RUNTIME], 1, [Define if using the Apple Objective-C runtime and compiler.])
231        elif test x"${mp_cv_objc_runtime_gnu}" = x"yes"; then
232                        OBJC_RUNTIME="GNU_RUNTIME"
233                        OBJC_RUNTIME_FLAGS="-fgnu-runtime"
234                        AC_MSG_NOTICE([Using GNU Objective-C runtime])
235                        AC_DEFINE([GNU_RUNTIME], 1, [Define if using the GNU Objective-C runtime and compiler.])
236        else
237                        AC_MSG_FAILURE([Could not locate a working Objective-C runtime.])
238        fi
239
240        # Restore LIBS & OBJCFLAGS
241        LIBS="${OLD_LIBS}"
242        OBJCFLAGS="${OLD_OBJCFLAGS}"
243
244        AC_SUBST([OBJC_RUNTIME])
245        AC_SUBST([OBJC_RUNTIME_FLAGS])
246        AC_SUBST([OBJC_LIBS])
247
248        AC_SUBST([OBJC_PTHREAD_LIBS])
249        AC_SUBST([OBJC_PTHREAD_CFLAGS])
250
251        AC_LANG_POP([Objective C])
252])
253
254#------------------------------------------------------------------------
255# MP_OBJC_FOUNDATION --
256#
257#       Find a functional Foundation implementation.
258#       The NeXT Foundation implementation is prefered,
259#       as it is most likely to be the system provided
260#       Foundation.
261#
262# Arguments:
263#       None.
264#
265# Requires:
266#       OBJC_RUNTIME
267#
268# Depends:
269#       AC_PROG_OBJC from objc.m4
270#
271# Results:
272#
273#       Adds a --with-objc-foundation switch to configure.
274#       Result is cached.
275#
276#       Defines one of the following preprocessor macros:
277#               APPLE_FOUNDATION GNUSTEP_FOUNDATION
278#------------------------------------------------------------------------
279AC_DEFUN([MP_OBJC_FOUNDATION],[
280        AC_REQUIRE([AC_PROG_OBJC])
281        AC_ARG_WITH(objc-foundation, [  --with-objc-foundation  Specify either "GNUstep" or "apple"], [with_objc_foundation=${withval}])
282
283        if test x"${with_objc_foundation}" != x; then
284                case "${with_objc_foundation}" in
285                        GNUstep)
286                                ;;
287                        GNU)
288                                with_objc_foundation="GNUstep"
289                                ;;
290                        apple)
291                                ;;
292                        *)
293                                AC_MSG_ERROR([${with_objc_foundation} is not a valid argument to --with-objc-foundation. Please specify either "GNU" or "apple"])
294                                ;;
295                esac
296        fi
297
298        AC_LANG_PUSH([Objective C])
299
300        if test x"${with_objc_foundation}" == x || test x"${with_objc_foundation}" == x"apple"; then
301                # '@<:@' = '['
302                # '@:>@' = ']'
303                AC_MSG_CHECKING([for Apple Foundation library])
304
305                # Set NeXT LIBS and CFLAGS
306                APPLE_FOUNDATION_CFLAGS="-framework Foundation"
307                APPLE_FOUNDATION_LIBS="-framework Foundation"
308
309                AC_CACHE_VAL(ac_cv_objc_foundation_apple, [
310                        # Save old LIBS and CFLAGS
311                        LIBS_OLD="${LIBS}"
312                        CFLAGS_OLD="${CFLAGS}"
313
314                        CFLAGS="${APPLE_FOUNDATION_CFLAGS} ${CFLAGS}"
315                        LIBS="${APPLE_FOUNDATION_LIBS} ${LIBS}"
316
317                        AC_LINK_IFELSE([
318                                        AC_LANG_PROGRAM([
319                                                                #include <Foundation/Foundation.h>
320                                                        ], [
321                                                                NSString *string = @<:@@<:@NSString alloc@:>@ initWithCString: "Hello World"@:>@;
322                                                                @<:@NSString length@:>@;
323                                                        ])
324                                        ],[
325                                                ac_cv_objc_foundation_apple="yes"
326                                        ],[
327                                                ac_cv_objc_foundation_apple="no"
328                                        ]
329                        )
330                        # Restore LIBS and CFLAGS
331                        LIBS="${LIBS_OLD}"
332                        CFLAGS="${CFLAGS_OLD}"
333                ])
334                AC_MSG_RESULT(${ac_cv_objc_foundation_apple})
335        else
336                ac_cv_objc_foundation_apple="no"
337        fi
338
339        if test x"${with_objc_foundation}" == x || test x${with_objc_foundation} == x"GNUstep"; then
340                if test x"${GNUSTEP_SYSTEM_ROOT}" == x; then
341                        if test x"${with_objc_foundation}" == x"GNUstep"; then
342                                AC_MSG_ERROR([GNUSTEP_SYSTEM_ROOT is not defined in your environment, preventing the use of GNUstep's Foundation library])
343                        else
344                                AC_MSG_WARN([GNUSTEP_SYSTEM_ROOT is not defined in your environment, preventing the use of GNUstep's Foundation library])
345                        fi
346                else
347
348                        AC_MSG_CHECKING([for GNUstep Foundation library])
349
350                        # Set GNUstep LDFLAGS, CPPFLAGS, and LIBS
351                        GNUSTEP_LDFLAGS="-L${GNUSTEP_SYSTEM_ROOT}/Library/Libraries/"
352                        GNUSTEP_CPPFLAGS="-I${GNUSTEP_SYSTEM_ROOT}/Library/Headers/"
353                        GNUSTEP_LIBS="-lgnustep-base"
354
355                        AC_CACHE_VAL(ac_cv_objc_foundation_gnustep, [
356                                # Save old LDFLAGS, CPPFLAGS, and LIBS
357                                LDFLAGS_OLD="${LDFLAGS}"
358                                CPPFLAGS_OLD="${CPPFLAGS}"
359                                LIBS_OLD="${LIBS}"
360
361                                LDFLAGS="${GNUSTEP_LDFLAGS} ${LDFLAGS}"
362                                CPPFLAGS="${GNUSTEP_CPPFLAGS} ${CPPFLAGS}"
363                                LIBS="${GNUSTEP_LIBS} ${LIBS}"
364
365                                AC_LINK_IFELSE([
366                                                AC_LANG_PROGRAM([
367                                                                        #include <Foundation/Foundation.h>
368                                                                ], [
369                                                                        NSString *string = @<:@@<:@NSString alloc@:>@ initWithCString: "Hello World"@:>@;
370                                                                        @<:@NSString length@:>@;
371                                                                ])
372                                                ],[
373                                                        ac_cv_objc_foundation_gnustep="yes"
374                                                ],[
375                                                        ac_cv_objc_foundation_gnustep="no"
376                                                ]
377                                )
378                                # Restore LDFLAGS, CPPFLAGS, and LIBS
379                                LDFLAGS="${LDFLAGS_OLD}"
380                                CPPFLAGS="${CPPFLAGS_OLD}"
381                                LIBS="${LIBS_OLD}"
382                        ])
383                        AC_MSG_RESULT(${ac_cv_objc_foundation_gnustep})
384                fi
385        else
386                ac_cv_objc_foundation_gnustep="no"
387        fi
388
389        # NeXT Foundation is prefered
390        if test x"${ac_cv_objc_foundation_apple}" == x"yes"; then
391                OBJC_FOUNDATION="Apple"
392                CPPFLAGS="${APPLE_FOUNDATION_CPPFLAGS} ${CPPFLAGS}"
393                LIBS="${APPLE_FOUNDATION_LIBS} ${LIBS}"
394                AC_DEFINE([APPLE_FOUNDATION], 1, [Define if using the Apple Foundation framework])
395                AC_MSG_NOTICE([Using Apple Foundation library])
396        elif test x"${ac_cv_objc_foundation_gnustep}" == x"yes"; then
397                OBJC_FOUNDATION="GNUstep"
398                CPPFLAGS="${GNUSTEP_CPPFLAGS} ${CPPFLAGS}"
399                LIBS="${GNUSTEP_LIBS} ${LIBS}"
400                LDFLAGS="${GNUSTEP_LDFLAGS} ${LDFLAGS}"
401                AC_DEFINE([GNUSTEP_FOUNDATION], 1, [Define if using the GNUstep Foundation library])
402                AC_MSG_NOTICE([Using GNUstep Foundation library])
403        else
404                AC_MSG_ERROR([Could not find a working Foundation implementation])
405        fi
406
407        AC_LANG_POP([Objective C])
408])
Note: See TracBrowser for help on using the repository browser.