root/lang/objective-cplusplus/i3/trunk/configure.ac @ 37572

Revision 37565, 12.6 kB (checked in by saturday06, 3 years ago)

iconv ga ugokanai svn updatesvn update1111

Line 
1# -*- coding: us-ascii-unix -*-
2
3AC_PREREQ(2.60)
4AC_INIT([windcrest],[m4_esyscmd(. ./unix/scripts/ac_init_version.sh | tr -d '\r\n')],[dyob@lunaport.net],[],[http://www.lunaport.net/test/])
5
6#
7# macros
8#
9
10AC_DEFUN([I3_HIGHLIGHTED_ECHO], [
11    # some old grep can't use '.*'
12    echo $1 | GREP_COLOR='01' grep --color=auto '.' 2> /dev/null
13    if test $? -ne 0; then
14        echo $1
15    fi
16])
17
18AC_DEFUN([I3_ADD_CPPFLAGS], [
19    if test "$1" != ""; then
20        AC_MSG_CHECKING([for $1])
21        orig="$CPPFLAGS"
22        CPPFLAGS="$1 $CPPFLAGS"
23        AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [AC_MSG_RESULT([yes])], [
24            AC_MSG_RESULT([no])
25            CPPFLAGS="$orig"
26            $2
27        ])
28    fi
29])
30
31AC_DEFUN([I3_ADD_CXXFLAGS], [
32    if test "$1" != ""; then
33        AC_MSG_CHECKING([for $1])
34        orig="$CXXFLAGS"
35        CXXFLAGS="$1 $CXXFLAGS"
36        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [AC_MSG_RESULT([yes])], [
37            AC_MSG_RESULT([no])
38            CXXFLAGS="$orig"
39            $2
40        ])
41    fi
42])
43
44AC_DEFUN([I3_ADD_LDFLAGS], [
45    if test "$1" != ""; then
46        AC_MSG_CHECKING([for $1])
47        orig="$LDFLAGS"
48        LDFLAGS="$1 $LDFLAGS"
49        AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [AC_MSG_RESULT([yes])], [
50            AC_MSG_RESULT([no])
51            LDFLAGS="$orig"
52            $2
53        ])
54    fi
55])
56
57#
58# env backup
59#
60
61CFLAGS_before_configure="$CFLAGS"
62CXXFLAGS_before_configure="$CXXFLAGS"
63
64#
65# banner
66#
67
68I3_HIGHLIGHTED_ECHO([$0: $PACKAGE_STRING])
69
70
71#
72# basic test
73#
74
75AC_CONFIG_AUX_DIR([unix/build-aux])
76AM_INIT_AUTOMAKE([-Wall gnu no-define filename-length-max=99 std-options])
77#AM_INIT_AUTOMAKE([-Wall gnu no-define filename-length-max=99 std-options check-news])
78AC_CONFIG_SRCDIR([unix/am/i3.am])
79AC_CONFIG_HEADER([config.h])
80AC_USE_SYSTEM_EXTENSIONS
81AC_CANONICAL_HOST
82AC_PROG_CXXCPP # for old cygwin
83AC_PROG_CPP
84AC_PROG_CC
85AC_PROG_CXX
86AC_LANG([C++])
87
88AC_DEFINE(MIL_CONFIG_H_INCLUDED, 1, [config.h include guard])
89
90if test ! -d "$srcdir"; then
91    AC_MSG_FAILURE([Environment variable "srcdir" not found, please report this to $PACKAGE_BUGREPORT])
92fi
93
94I3_ADD_CPPFLAGS([-I${srcdir}/src])
95I3_ADD_CPPFLAGS([-I${srcdir}/src/mil/include])
96I3_ADD_CPPFLAGS([-I${srcdir}/src/tests/no-test])
97I3_ADD_CPPFLAGS([-Iintl])
98
99#
100# configure options
101#
102
103AC_ARG_ENABLE(
104    debug,
105    AS_HELP_STRING([--enable-debug], [build debug binaries]),
106    enable_debug="$enableval",
107    enable_debug="no"
108)
109
110AM_CONDITIONAL(ENABLE_DEBUG, test "$enable_debug" = "yes")
111if test "$enable_debug" = "yes"; then
112    CFLAGS="$CFLAGS_before_configure -O0 -g"
113    CXXFLAGS="$CXXFLAGS_before_configure -O0 -g"
114fi
115
116# ---------------------------------------
117# Runtime envirinment
118
119#
120# OS selection
121#
122
123case "$host_os" in
124    cygwin)
125        with_os=unix
126        #with_gui_default=windows
127        with_gui_default=gnustep
128        I3_ADD_LDFLAGS([-Wl,--enable-auto-import])
129        ;;
130    darwin*)
131        with_os=unix
132        with_gui_default=cocoa
133        ;;
134    mingw*)
135        with_os=windows
136        with_gui_default=windows
137        I3_ADD_LDFLAGS([-Wl,--enable-auto-import])
138        ;;
139    *)
140        with_os=unix
141        with_gui_default=gnustep
142        ;;
143esac
144
145if test "$with_os" = "windows"; then
146    I3_ADD_CPPFLAGS([-DMIL_OS_WINDOWS])
147    I3_ADD_LDFLAGS([-mwindows])
148else
149    I3_ADD_CPPFLAGS([-DMIL_OS_UNIX])
150fi
151
152#
153# GUI selection
154#
155
156AC_ARG_WITH(gui,
157    AS_HELP_STRING([--with-gui={cocoa|gnustep|windows}], [GUI toolkit]),
158        with_gui="$withval", with_gui=$with_gui_default)
159
160AC_PATH_PROG([PERL], [perl])
161if test "$PERL" = ""; then
162    AC_MSG_WARN([perl not found])
163fi
164
165AC_PATH_PROG([VALGRIND], [valgrind])
166
167case "$with_gui" in
168    windows)
169        GCH_LANG="c++-header"
170        I3_ADD_CXXFLAGS([-fno-operator-names])
171        I3_ADD_CPPFLAGS([-D_WIN32_WINNT=0x0601]) # Windows 7
172        I3_ADD_CPPFLAGS([-DMIL_GUI_WINDOWS])
173    ;;
174    cocoa)
175        I3_ADD_CXXFLAGS([-fobjc-exceptions])
176        I3_ADD_LDFLAGS([-framework Cocoa])
177    ;;
178    gnustep)
179        with_gui=cocoa
180        AC_PATH_PROG([GNUSTEP_CONFIG], [gnustep-config])
181        if test "$GNUSTEP_CONFIG" = ""; then
182            AC_MSG_WARN([gnustep-config not found])
183        else
184            if test "$enable_debug" = "yes"; then
185                debug_arg="--debug"
186            fi
187
188            if test "$PERL" != ""; then
189                GNUSTEP_CONFIG="$PERL $srcdir/unix/scripts/gnustep-config-filter.pl $debug_arg $GNUSTEP_CONFIG"
190            fi
191
192            my_gnustep_cxxflags=`$GNUSTEP_CONFIG --objc-flags`
193            my_gnustep_libs=`$GNUSTEP_CONFIG --gui-libs`
194
195            echo additional GNUstep CXXFLAGS : $my_gnustep_cxxflags
196            echo additional GNUstep LIBS     : $my_gnustep_libs
197
198            CXXFLAGS="$my_gnustep_cxxflags $CXXFLAGS"
199            LIBS="$my_gnustep_libs $LIBS"
200        fi
201    ;;
202    *)
203        AC_MSG_FAILURE([--with-gui=$with_gui is invalid])
204    ;;
205esac
206
207if test "$with_os" = "windows" || test "$with_gui" = "windows"; then
208    LIBS="-lgdi32 -luser32 -lpsapi -lshlwapi -lcomctl32 $LIBS"
209fi
210
211if test "$with_gui" = "cocoa"; then
212    GCH_LANG="objective-c++-header"
213    I3_ADD_LDFLAGS([-x none])
214    I3_ADD_CPPFLAGS([-DMIL_GUI_COCOA])
215
216    AC_MSG_CHECKING([for -x objective-c++])
217    CXX_ORIG="$CXX"
218    CXX="$CXX -x objective-c++" # can't use CXXFLAGS
219    AC_COMPILE_IFELSE(
220        [AC_LANG_PROGRAM([[]], [[]])],
221        [AC_MSG_RESULT([yes])],
222        [
223            AC_MSG_RESULT([no])
224            CXX="$CXX_ORIG"
225            AC_MSG_WARN([compiler option "-x objective-c++" unsupported])
226        ]
227    )
228
229    AC_MSG_CHECKING([for Objective-C++ toolset works])
230    LDFLAGS_ORIG="$LDFLAGS"
231    LDFLAGS="$LDFLAGS -x objective-c++" # override "-x none"
232
233    AC_LINK_IFELSE(
234        [AC_LANG_PROGRAM([[
235#import <Foundation/Foundation.h>
236#import <AppKit/AppKit.h>
237#include <stdlib.h>
238#include <memory>
239class Foo {
240};
241@interface Bar : NSObject {
242}
243@end
244@implementation Bar
245@end
246        ]],
247        [[
248NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
249Bar* bar = [[Bar alloc] init];
250[bar release];
251Foo foo;
252std::auto_ptr<Foo> p(new Foo());
253NSException* e = [NSException exceptionWithName:@"foo"
254                                         reason:@"bar"
255                                       userInfo:nil];
256NSLog([e description]);
257[pool release];
258        ]])],
259        [AC_MSG_RESULT([yes])],
260        [AC_MSG_RESULT([no])
261         echo -----------------------------------------------------
262         echo
263         echo =============
264         echo = ERROR LOG =
265         echo =============
266         echo
267         grep -i -A 100 "for Objective-C++ toolset works" config.log
268         echo
269         echo =================
270         echo = ERROR LOG END =
271         echo =================
272         echo
273         AC_MSG_FAILURE([Objective-C++ toolset does not work])])
274
275    LDFLAGS="$LDFLAGS_ORIG"
276fi
277
278AC_SUBST(GCH_LANG)
279
280OS_DIR="os-$with_os"
281GUI_DIR="gui-$with_gui"
282AC_SUBST(OS_DIR)
283AC_SUBST(GUI_DIR)
284
285I3_ADD_CPPFLAGS([-I${srcdir}/src/${GUI_DIR}])
286I3_ADD_CPPFLAGS([-I${srcdir}/src/${OS_DIR}])
287
288AM_CONDITIONAL(WITH_OS_WINDOWS,  test "$with_os"  = "windows")
289AM_CONDITIONAL(WITH_OS_UNIX,     test "$with_os"  = "unix")
290AM_CONDITIONAL(WITH_GUI_WINDOWS, test "$with_gui" = "windows")
291AM_CONDITIONAL(WITH_GUI_COCOA,   test "$with_gui" = "cocoa")
292
293# ---------------------------------------
294# Libraries
295
296#
297# pthread
298#
299
300if test "$with_os" = "unix"; then
301    AX_PTHREAD
302    CXXFLAGS="$PTHREAD_CFLAGS $CXXFLAGS"
303    LIBS="$PTHREAD_LIBS $LIBS"
304fi
305
306#
307# boost
308#
309
310AX_BOOST_BASE([1.33.1], [], [AC_MSG_FAILURE([boost c++ libraries required])])
311I3_ADD_CPPFLAGS([${BOOST_CPPFLAGS}])
312I3_ADD_LDFLAGS([${BOOST_LDFLAGS}])
313
314AC_CHECK_HEADERS([boost/detail/is_incrementable.hpp boost/ptr_container/detail/static_move_ptr.hpp boost/spirit/include/classic.hpp boost/stopwatches.h])
315
316#
317# gettext
318#
319
320# po/POTFILES.in
321$SHELL $srcdir/unix/scripts/POTFILES.in.sh
322if test $? -ne 0; then
323    AC_MSG_FAILURE([can't update po/POTFILES.in])
324fi
325
326# po/LINGUAS
327$SHELL $srcdir/unix/scripts/LINGUAS.sh
328if test $? -ne 0; then
329    AC_MSG_FAILURE([can't update po/LINGUAS])
330fi
331
332AC_LANG_PUSH([C]) # for iconv
333AM_GNU_GETTEXT_VERSION([0.17])
334#AM_GNU_GETTEXT_VERSION([0.16.1])
335#AM_GNU_GETTEXT_VERSION([0.14.5])
336AM_GNU_GETTEXT
337AC_LANG_POP
338
339LIBS_ORIG="$LIBS"
340LIBS="$LIBINTL $LIBS"
341AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [], [LIBS="$LIBS_ORIG"])
342
343#
344# wbindtextdomain
345#
346
347AC_CHECK_FUNCS([wbindtextdomain])
348
349
350#
351# popt (may depend on gettext, put it after AM_GNU_GETTEXT)
352#
353
354if test "$with_os" = "unix"; then
355    AC_CHECK_HEADERS([popt.h], [AC_CHECK_LIB([popt], [poptGetContext])])
356fi
357
358# ---------------------------------------
359# Checks for header files.
360
361AC_CHECK_HEADERS([malloc.h semaphore.h])
362AC_CHECK_HEADERS([uxtheme.h dwmapi.h], [], [], [
363#include <windows.h>
364])
365
366
367# ---------------------------------------
368# Checks for typedefs, structures, and compiler characteristics.
369
370AC_CHECK_TYPES([HPAINTBUFFER])
371
372#
373# extra compiler options
374#
375
376I3_ADD_CXXFLAGS([-fno-rtti])
377I3_ADD_CXXFLAGS([-funit-at-a-time])
378
379if test "$enable_debug" = "yes"; then
380    #I3_ADD_CXXFLAGS([-pg])
381    #I3_ADD_CXXFLAGS([-fprofile-arcs])
382    #I3_ADD_CXXFLAGS([-ftest-coverage])
383
384    I3_ADD_CXXFLAGS([-Wcast-align -Wcast-qual -Winit-self -Winvalid-pch -Wpointer-arith])
385    I3_ADD_CXXFLAGS([-Wwrite-strings -Wfloat-equal -Wformat=2 -Wimplicit])
386    I3_ADD_CXXFLAGS([-Wmissing-braces -Wdisabled-optimization -Wconversion])
387    #I3_ADD_CXXFLAGS([-Weffc++ -Wpadded -Wunsafe-loop-optimizations])
388
389    I3_ADD_CXXFLAGS([-Wno-unused-value])     # ...
390    I3_ADD_CXXFLAGS([-Wno-unused-parameter]) # ...
391    I3_ADD_CXXFLAGS([-Wno-unused])           # ...
392fi
393
394I3_ADD_CXXFLAGS([-Wno-missing-field-initializers])
395I3_ADD_CXXFLAGS([-Wall])
396I3_ADD_CXXFLAGS([-Wextra])
397
398 
399#
400# Precompiled Headers
401#
402
403use_gch=no
404if test "$GXX" = "yes" && test "$enable_debug" = "yes"; then
405    AC_MSG_CHECKING([for Precompiled Headers])
406    CXXFLAGS_ORIG="$CXXFLAGS"
407    output=header.h.gch
408    rm -f $output
409    if test -e $output; then
410        AC_MSG_FAILURE([can't remove file '$output'])
411    fi
412    CXXFLAGS="-x $GCH_LANG -o $output $CXXFLAGS"
413    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [], [])
414    if test -e $output; then
415        AC_MSG_RESULT([yes])
416        use_gch=yes
417    else
418        AC_MSG_RESULT([no])
419    fi
420    rm -f $output
421    CXXFLAGS="$CXXFLAGS_ORIG"
422fi
423AM_CONDITIONAL(USE_GCC_PRECOMPILED_HEADER, test "$use_gch" = "yes")
424
425
426# ---------------------------------------
427# Checks for library functions.
428
429AC_CHECK_FUNCS([putenv setenv])
430
431#
432# semaphore
433#
434
435AC_MSG_CHECKING([for unnamed semaphore])
436AC_RUN_IFELSE(
437    [AC_LANG_PROGRAM([[
438#include <stdlib.h>
439#include <semaphore.h>
440    ]],
441    [[
442sem_t sem;
443if (sem_init(&sem, 0, 0) == 0) {
444    sem_destroy(&sem);
445    return EXIT_SUCCESS;
446} else {
447    return EXIT_FAILURE;
448}
449    ]])],
450    [AC_MSG_RESULT([yes])
451     AC_DEFINE(HAVE_UNNAMED_SEMAPHORE, 1, [Unnamed semaphore])],
452    [AC_MSG_RESULT([no])],
453    [AC_MSG_RESULT([treat as no (cross compiling)])])
454
455#
456# atomic operations
457#
458
459AC_MSG_CHECKING([for __sync_bool_compare_and_swap])
460
461AC_DEFUN([I3_GCC_ATOMIC_OPERATIONS_FOUND], [
462    AC_MSG_RESULT([yes])
463    AC_DEFINE(HAVE_GCC_ATOMIC_OPERATIONS,[],[TODO: Description])
464])
465
466body="int data = 0;  __sync_bool_compare_and_swap(&data, 0, 1);"
467
468CXXFLAGS_ORIG="$CXXFLAGS"
469AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[$body]])], [I3_GCC_ATOMIC_OPERATIONS_FOUND], [
470    CXXFLAGS="-march=i486 $CXXFLAGS_ORIG"
471    AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[$body]])], [I3_GCC_ATOMIC_OPERATIONS_FOUND], [
472        CXXFLAGS="-march=$host_cpu $CXXFLAGS_ORIG"
473        AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[$body]])], [I3_GCC_ATOMIC_OPERATIONS_FOUND], [
474            AC_MSG_RESULT([no]); CXXFLAGS="$CXXFLAGS_ORIG"
475        ])
476    ])
477])
478
479
480#
481# my helper variable
482#
483
484CONFIGURE_DATE=`date +%Y%m%d.%H%M%S`
485AC_SUBST(CONFIGURE_DATE)
486
487#
488# internal consistency check
489#
490
491AC_MSG_CHECKING([for simple test program])
492AC_LINK_IFELSE([AC_LANG_PROGRAM([[
493#include <stdlib.h>
494#include <cstdio>
495#include <list>
496#include <exception>
497#include <boost/pool/pool.hpp>
498]],
499[[
500using namespace std;
501try {
502    // instanciation test
503    boost::pool<> p(10);
504    list<int> l;
505} catch (exception&) {
506} catch ( ... ) {
507    return EXIT_FAILURE;
508}
509]])], [AC_MSG_RESULT([yes])],
510     [AC_MSG_RESULT([no]); AC_MSG_FAILURE([simple test program does not work])])
511
512AC_MSG_CHECKING([for simple error test program])
513AC_LINK_IFELSE(
514    [AC_LANG_PROGRAM([[ struct {} foo = "bar"; ]],[[]])],
515    [AC_MSG_RESULT([yes]); AC_MSG_FAILURE([no error])],
516    [AC_MSG_RESULT([no])])
517
518AC_CHECK_HEADERS([__NON__EXISTANT__HEADER__FILE__], [AC_MSG_FAILURE([no error when include file is not found])])
519
520# ---------------------------------------
521AC_CONFIG_TESTDIR([unix/tests])
522AC_CONFIG_FILES([Makefile intl/Makefile po/Makefile.in unix/i3.spec unix/tests/Makefile unix/tests/atlocal])
523AC_CONFIG_FILES([unix/debian/changelog])
524AC_OUTPUT
525
526I3_HIGHLIGHTED_ECHO(["Then type \`make' to make ${PACKAGE_NAME}. Good luck. "])
527
Note: See TracBrowser for help on using the browser.