Bug 1890513: Directly invoke variadic native functions. r=jandem
[gecko.git] / js / src / old-configure.in
blobb9152f974d7c2e09a1ec4f152c717530d177b3d1
1 dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; -*-
2 dnl vi: set tabstop=4 shiftwidth=4 expandtab syntax=m4:
3 dnl This Source Code Form is subject to the terms of the Mozilla Public
4 dnl License, v. 2.0. If a copy of the MPL was not distributed with this
5 dnl file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 dnl Process this file with autoconf to produce a configure script.
8 dnl ========================================================
9 AC_PREREQ(2.13)
10 AC_INIT(js/src/jsapi.h)
11 AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf)
12 AC_CANONICAL_SYSTEM
14 dnl ========================================================
15 dnl =
16 dnl = Don't change the following lines. Doing so breaks:
17 dnl =
18 dnl = CFLAGS="-foo" ./configure
19 dnl =
20 dnl ========================================================
21 CFLAGS="${CFLAGS=}"
22 CPPFLAGS="${CPPFLAGS=}"
23 CXXFLAGS="${CXXFLAGS=}"
24 LDFLAGS="${LDFLAGS=}"
25 HOST_CFLAGS="${HOST_CFLAGS=}"
26 HOST_CXXFLAGS="${HOST_CXXFLAGS=}"
27 HOST_LDFLAGS="${HOST_LDFLAGS=}"
29 dnl Set the minimum version of toolkit libs used by mozilla
30 dnl ========================================================
31 W32API_VERSION=3.14
33 dnl Initialize the Pthread test variables early so they can be
34 dnl  overridden by each platform.
35 dnl ========================================================
36 USE_PTHREADS=
37 _PTHREAD_LDFLAGS=""
39 LDFLAGS="$LDFLAGS $LINKER_LDFLAGS $PACK_REL_RELOC_FLAGS"
40 HOST_LDFLAGS="$HOST_LDFLAGS $HOST_LINKER_LDFLAGS"
42 if test -z "$JS_STANDALONE"; then
43   autoconfmk=autoconf-js.mk
45 AC_SUBST(autoconfmk)
47 jsconfdefs=$_objdir/js/src/js-confdefs.h
49 MOZ_ANDROID_NDK
51 dnl ========================================================
52 dnl Checks for compilers.
53 dnl ========================================================
55 if test "$COMPILE_ENVIRONMENT"; then
57 # Run some logic to figure out exe extensions (mostly for mingw's sake)
58 AC_EXEEXT
60 # Note:
61 #   In Mozilla, we use the names $target, $host and $build incorrectly, but are
62 #   too far gone to back out now. See Bug 475488:
63 #     - When we say $target, we mean $host, that is, the system on which
64 #       Mozilla will be run.
65 #     - When we say $host, we mean $build, that is, the system on which Mozilla
66 #       is built.
67 #     - $target (in its correct usage) is for compilers who generate code for a
68 #       different platform than $host, so it would not be used by Mozilla.
69 if test "$target" != "$host"; then
70     MOZ_CROSS_COMPILER
71 else
72     AC_PROG_CC
73     AC_PROG_CXX
76 MOZ_TOOL_VARIABLES
78 dnl Special win32 checks
79 dnl ========================================================
81 WINVER=0A00
83 case "$target" in
84 *-mingw*)
85     if test "$GCC" != "yes"; then
86         # Check to see if we are really running in a msvc environemnt
87         _WIN32_MSVC=1
89         # Make sure compilers are valid
90         CXXFLAGS="$CXXFLAGS -TP"
91         # _CRT_SECURE_NO_WARNINGS disables warnings about using MSVC-specific
92         # secure CRT functions.
93         CXXFLAGS="$CXXFLAGS -D_CRT_SECURE_NO_WARNINGS"
94         AC_LANG_SAVE
95         AC_LANG_C
96         AC_TRY_COMPILE([#include <stdio.h>],
97             [ printf("Hello World\n"); ],,
98             AC_MSG_ERROR([\$(CC) test failed.  You must have MS VC++ in your path to build.]) )
100         AC_LANG_CPLUSPLUS
101         AC_TRY_COMPILE([#include <new.h>],
102             [ unsigned *test = new unsigned(42); ],,
103             AC_MSG_ERROR([\$(CXX) test failed.  You must have MS VC++ in your path to build.]) )
104         AC_LANG_RESTORE
106         AC_DEFINE(_CRT_SECURE_NO_WARNINGS)
107         AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
109         MSVC_C_RUNTIME_DLL=vcruntime140.dll
110         if test "$TARGET_CPU" != "x86"; then
111             MSVC_C_RUNTIME_1_DLL=vcruntime140_1.dll
112         fi
113         MSVC_CXX_RUNTIME_DLL=msvcp140.dll
115         # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
116         CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
118         AC_SUBST(MSVC_C_RUNTIME_DLL)
119         AC_SUBST(MSVC_C_RUNTIME_1_DLL)
120         AC_SUBST(MSVC_CXX_RUNTIME_DLL)
122         CFLAGS="$CFLAGS -D_HAS_EXCEPTIONS=0"
123         CXXFLAGS="$CXXFLAGS -D_HAS_EXCEPTIONS=0"
124     else
125         # Check w32api version
126         _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'`
127         _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'`
128         AC_MSG_CHECKING([for w32api version >= $W32API_VERSION])
129         AC_TRY_COMPILE([#include <w32api.h>],
130             #if (__W32API_MAJOR_VERSION < $_W32API_MAJOR_VERSION) || \
131                 (__W32API_MAJOR_VERSION == $_W32API_MAJOR_VERSION && \
132                  __W32API_MINOR_VERSION < $_W32API_MINOR_VERSION)
133                 #error "test failed."
134             #endif
135             , [ res=yes ], [ res=no ])
136         AC_MSG_RESULT([$res])
137         if test "$res" != "yes"; then
138             AC_MSG_ERROR([w32api version $W32API_VERSION or higher required.])
139         fi
140     fi # !GNU_CC
142     AC_DEFINE(_USE_MATH_DEFINES) # Otherwise Windows' math.h doesn't #define M_PI.
144     AC_DEFINE_UNQUOTED(WINVER,0x$WINVER)
145     AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x$WINVER)
146     AC_DEFINE_UNQUOTED(_WIN32_IE,0x0A00)
148     ;;
149 esac
151 if test -n "$_WIN32_MSVC"; then
152     SKIP_PATH_CHECKS=1
153     SKIP_COMPILER_CHECKS=1
154     SKIP_LIBRARY_CHECKS=1
157 fi # COMPILE_ENVIRONMENT
159 AC_SUBST(GNU_CC)
160 AC_SUBST(GNU_CXX)
162 dnl ========================================================
163 dnl set the defaults first
164 dnl ========================================================
165 MOZ_FIX_LINK_PATHS="-Wl,-rpath-link,${DIST}/bin -Wl,-rpath-link,${prefix}/lib"
167 dnl Configure platform-specific CPU architecture compiler options.
168 dnl ==============================================================
169 MOZ_ARCH_OPTS
171 MOZ_CONFIG_SANITIZE
173 dnl ========================================================
174 dnl GNU specific defaults
175 dnl ========================================================
176 if test "$GNU_CC"; then
177     DSO_LDOPTS='-shared'
178     if test "$GCC_USE_GNU_LD"; then
179         # Some tools like ASan use a runtime library that is only
180         # linked against executables, so we must allow undefined
181         # symbols for shared objects in some cases.
182         if test -z "$MOZ_ASAN$MOZ_MSAN$MOZ_UBSAN$MOZ_TSAN$FUZZING_INTERFACES"; then
183             # Don't allow undefined symbols in libraries
184             DSO_LDOPTS="$DSO_LDOPTS -Wl,-z,defs"
185         fi
186     fi
188     if test "$OS_ARCH" != "WINNT"; then
189         DSO_PIC_CFLAGS='-fPIC'
190         ASFLAGS="$ASFLAGS -fPIC"
191     fi
193     _DEFINES_CFLAGS="-include $jsconfdefs -DMOZILLA_CLIENT"
196 if test "$GNU_CXX"; then
197     _DEFINES_CXXFLAGS="-DMOZILLA_CLIENT -include $jsconfdefs"
200 dnl ========================================================
201 dnl System overrides of the defaults for host
202 dnl ========================================================
203 case "$host" in
204 *mingw*)
205     if test -n "$_WIN32_MSVC"; then
206         HOST_CFLAGS="$HOST_CFLAGS"
207     else
208         HOST_CFLAGS="$HOST_CFLAGS -mwindows"
209     fi
210     HOST_CFLAGS="$HOST_CFLAGS -DXP_WIN -DWIN32 -D_WIN32 -D_CRT_SECURE_NO_WARNINGS"
211     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
212     HOST_BIN_SUFFIX=.exe
214     case "${host_cpu}" in
215     i*86)
216         if test -n "$_WIN32_MSVC"; then
217             HOST_LDFLAGS="$HOST_LDFLAGS -MACHINE:X86"
218         fi
219         ;;
220     x86_64)
221         if test -n "$_WIN32_MSVC"; then
222             HOST_LDFLAGS="$HOST_LDFLAGS -MACHINE:X64"
223         fi
224         HOST_CFLAGS="$HOST_CFLAGS -D_AMD64_"
225         ;;
226     esac
227     ;;
229 *-darwin*)
230     HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX -DXP_MACOSX"
231     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
232     ;;
234 *-linux*|*-kfreebsd*-gnu|*-gnu*)
235     HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
236     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}"
237     ;;
240     HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX"
241     HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O2}"
242     ;;
243 esac
245 dnl ========================================================
246 dnl System overrides of the defaults for target
247 dnl ========================================================
249 MOZ_OPTIMIZE_LDFLAGS="${_COMPILATION_OPTIMIZE_LDFLAGS} ${MOZ_OPTIMIZE_FLAGS}"
251 case "$target" in
252 *-darwin*)
253     MOZ_OPTIMIZE_FLAGS="-O3"
254     DSO_LDOPTS=''
255     MOZ_FIX_LINK_PATHS=
256     ;;
258 *-android*|*-linuxandroid*)
259     MOZ_OPTIMIZE_FLAGS="-O3"
260     if test -z "$CLANG_CC"; then
261        MOZ_OPTIMIZE_FLAGS="-fno-reorder-functions $MOZ_OPTIMIZE_FLAGS"
262     fi
263     ;;
265 *-*linux*)
266     if test "$GNU_CC" -o "$GNU_CXX"; then
267         MOZ_PGO_OPTIMIZE_FLAGS="-O3"
268         MOZ_OPTIMIZE_FLAGS="-O3"
269     fi
271     case "${target_cpu}" in
272     alpha*)
273         CFLAGS="$CFLAGS -mieee"
274         CXXFLAGS="$CXXFLAGS -mieee"
275     ;;
276     esac
277     ;;
279 *-mingw*)
280     DSO_PIC_CFLAGS=
281     if test -n "$GNU_CC" -o -n "$CLANG_CC"; then
282         # $GNU_CC will match gcc and clang; while $CLANG_CC will match only clang
283         if test -z "$CLANG_CC"; then
284             AC_MSG_ERROR(Firefox cannot be built with mingw-gcc and requires a mingw-clang toolchain to work)
285         fi
287         DSO_LDOPTS='-shared'
288         MOZ_FIX_LINK_PATHS=
290         # Silence problematic clang warnings
291         CXXFLAGS="$CXXFLAGS -Wno-incompatible-ms-struct"
292         LDFLAGS="$LDFLAGS -Wl,--no-insert-timestamp"
294         MOZ_OPTIMIZE_FLAGS="-O2"
296         WIN32_CONSOLE_EXE_LDFLAGS=-mconsole
297         WIN32_GUI_EXE_LDFLAGS=-mwindows
298     else
299         TARGET_COMPILER_ABI=msvc
300         WIN32_SUBSYSTEM_VERSION=10.0
301         WIN32_CONSOLE_EXE_LDFLAGS=-SUBSYSTEM:CONSOLE,$WIN32_SUBSYSTEM_VERSION
302         WIN32_GUI_EXE_LDFLAGS=-SUBSYSTEM:WINDOWS,$WIN32_SUBSYSTEM_VERSION
303         DSO_LDOPTS=-SUBSYSTEM:WINDOWS,$WIN32_SUBSYSTEM_VERSION
304         _DEFINES_CFLAGS="-FI $jsconfdefs -DMOZILLA_CLIENT"
305         _DEFINES_CXXFLAGS="-FI $jsconfdefs -DMOZILLA_CLIENT"
306         CFLAGS="$CFLAGS -Gy -Zc:inline"
307         CXXFLAGS="$CXXFLAGS -Gy -Zc:inline"
308         if test "$TARGET_CPU" = "x86";then
309           dnl VS2012+ defaults to -arch:SSE2. We want to target nothing
310           dnl more recent, so set that explicitly here unless another
311           dnl target arch has already been set.
312           changequote(,)
313           if test -z `echo $CFLAGS | grep -i [-/]arch:` ; then
314             CFLAGS="$CFLAGS -arch:SSE2"
315           fi
316           if test -z `echo $CXXFLAGS | grep -i [-/]arch:` ; then
317             CXXFLAGS="$CXXFLAGS -arch:SSE2"
318           fi
319           changequote([,])
320         fi
321         dnl VS2013+ supports -Gw for better linker optimizations.
322         dnl http://blogs.msdn.com/b/vcblog/archive/2013/09/11/introducing-gw-compiler-switch.aspx
323         dnl Disabled on ASan because it causes false-positive ODR violations.
324         if test -z "$MOZ_ASAN"; then
325             CFLAGS="$CFLAGS -Gw"
326             CXXFLAGS="$CXXFLAGS -Gw"
327         else
328             # String tail merging doesn't play nice with ASan's ODR checker.
329             LDFLAGS="$LDFLAGS -opt:nolldtailmerge"
330         fi
331         MOZ_DEBUG_LDFLAGS='-DEBUG'
332         if test "$HOST_OS_ARCH" != "WINNT"; then
333           # %_PDB% is a special signal to emit only the PDB basename. This
334           # avoids problems in Windows tools that don't like forward-slashes.
335           MOZ_DEBUG_LDFLAGS="$MOZ_DEBUG_LDFLAGS -PDBALTPATH:%_PDB%"
336         fi
337         MOZ_OPTIMIZE_FLAGS="-O2"
338         MOZ_FIX_LINK_PATHS=
339         LDFLAGS="$LDFLAGS -LARGEADDRESSAWARE"
340     fi
341     AC_DEFINE(HAVE__MSIZE)
342     AC_DEFINE(WIN32_LEAN_AND_MEAN)
343     dnl See http://support.microsoft.com/kb/143208 to use STL
344     AC_DEFINE(NOMINMAX)
345     BIN_SUFFIX='.exe'
347     case "$host_os" in
348     cygwin*|msvc*|mks*)
349         AC_MSG_ERROR([Using a Cygwin build environment is unsupported. Configure cannot check for presence of necessary headers. Please upgrade to MozillaBuild; see https://developer.mozilla.org/en/Windows_Build_Prerequisites.])
350         ;;
351     esac
353     case "$target" in
354     i*86-*)
355         if test -n "$GNU_CC"; then
356             CFLAGS="$CFLAGS -mstackrealign"
357             CXXFLAGS="$CXXFLAGS -mstackrealign"
358             LDFLAGS="$LDFLAGS -Wl,--large-address-aware"
359         else
360             DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X86"
361             LDFLAGS="$LDFLAGS -SAFESEH"
362         fi
364         AC_DEFINE(_X86_)
365         ;;
366     x86_64-*)
367         if test -n "$_WIN32_MSVC"; then
368             DSO_LDOPTS="$DSO_LDOPTS -MACHINE:X64"
369         fi
370         AC_DEFINE(_AMD64_)
371         ;;
372     aarch64-*)
373         if test -n "$_WIN32_MSVC"; then
374             DSO_LDOPTS="$DSO_LDOPTS -MACHINE:ARM64"
375         fi
376         AC_DEFINE(_ARM64_)
377         ;;
378     *)
379         AC_DEFINE(_CPU_ARCH_NOT_DEFINED)
380         ;;
381     esac
382     ;;
384 *-netbsd*)
385     CFLAGS="$CFLAGS -Dunix"
386     CXXFLAGS="$CXXFLAGS -Dunix"
387     if $CC -E - -dM </dev/null | grep __ELF__ >/dev/null; then
388         DSO_PIC_CFLAGS='-fPIC -DPIC'
389         DSO_LDOPTS='-shared'
390         MOZ_PROGRAM_LDFLAGS="$MOZ_PROGRAM_LDFLAGS -Wl,--export-dynamic"
391     else
392         DSO_PIC_CFLAGS='-fPIC -DPIC'
393         DSO_LDOPTS='-shared'
394     fi
395     # This will fail on a.out systems prior to 1.5.1_ALPHA.
396     if test "$LIBRUNPATH"; then
397         DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS"
398     fi
399     ;;
401 *-openbsd*)
402     DSO_PIC_CFLAGS='-fPIC'
403     DSO_LDOPTS='-shared -fPIC'
404     if test "$LIBRUNPATH"; then
405         DSO_LDOPTS="-R$LIBRUNPATH $DSO_LDOPTS"
406     fi
407     ;;
409 *-solaris*)
410     MOZ_FIX_LINK_PATHS="-L${DIST}/bin"
411     ;;
413 *-wasi*)
414     CXXFLAGS="$CXXFLAGS -mthread-model single"
415     MOZ_FIX_LINK_PATHS=
416     ;;
418 esac
420 CFLAGS="$CFLAGS $DSO_PIC_CFLAGS"
421 CXXFLAGS="$CXXFLAGS $DSO_PIC_CFLAGS"
423 if test -z "$MOZ_OPTIMIZE_FLAGS"; then
424         MOZ_OPTIMIZE_FLAGS="-O"
427 if test -z "$COMPILE_ENVIRONMENT"; then
428     SKIP_COMPILER_CHECKS=1
429     SKIP_LIBRARY_CHECKS=1
432 if test -n "$COMPILE_ENVIRONMENT"; then
433     MOZ_COMPILER_OPTS
436 if test -z "$SKIP_COMPILER_CHECKS"; then
437 dnl Checks for typedefs, structures, and compiler characteristics.
438 dnl ========================================================
440 AC_LANG_CPLUSPLUS
442 MOZ_CXX11
444 dnl Checks for libraries.
445 dnl ========================================================
446 AC_CHECK_LIB(c_r, gethostbyname_r)
448 dnl We don't want to link with libdl even if it's present on OS X, since
449 dnl it's not used and not part of the default installation. OS/2 has dlfcn
450 dnl in libc.
451 dnl We don't want to link against libm or libpthread on Darwin since
452 dnl they both are just symlinks to libSystem and explicitly linking
453 dnl against libSystem causes issues when debugging (see bug 299601).
454 case $target in
455 *-darwin*)
456     ;;
458     AC_SEARCH_LIBS(dlopen, dl,
459         MOZ_CHECK_HEADER(dlfcn.h,
460         AC_DEFINE(HAVE_DLOPEN)))
461     ;;
462 esac
464 _SAVE_CFLAGS="$CFLAGS"
465 CFLAGS="$CFLAGS -D_GNU_SOURCE"
466 AC_CHECK_FUNCS(dladdr)
467 CFLAGS="$_SAVE_CFLAGS"
469 if test ! "$GNU_CXX"; then
470     AC_CHECK_LIB(C, demangle)
473 AC_CHECK_LIB(socket, socket)
475 dnl ========================================================
476 dnl = pthread support
477 dnl = Start by checking whether the system support pthreads
478 dnl ========================================================
479 case "$target_os" in
480 darwin*)
481     USE_PTHREADS=1
482     ;;
484     AC_CHECK_LIB(pthreads, pthread_create,
485         USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthreads",
486         AC_CHECK_LIB(pthread, pthread_create,
487             USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lpthread",
488             AC_CHECK_LIB(c_r, pthread_create,
489                 USE_PTHREADS=1 _PTHREAD_LDFLAGS="-lc_r",
490                 AC_CHECK_LIB(c, pthread_create,
491                     USE_PTHREADS=1
492                 )
493             )
494         )
495     )
496     ;;
497 esac
499 dnl ========================================================
500 dnl Do the platform specific pthread hackery
501 dnl ========================================================
502 if test "$USE_PTHREADS"x != x
503 then
504         dnl
505         dnl See if -pthread is supported.
506         dnl
507         rm -f conftest*
508         ac_cv_have_dash_pthread=no
509         AC_MSG_CHECKING(whether ${CC-cc} accepts -pthread)
510         echo 'int main() { return 0; }' | cat > conftest.c
511         ${CC-cc} -pthread -o conftest conftest.c > conftest.out 2>&1
512         if test $? -eq 0; then
513                 if test -z "`grep -E -i '(unrecognize|unknown)' conftest.out | grep pthread`" -a -z "`grep -E -i '(error|incorrect)' conftest.out`" ; then
514                         ac_cv_have_dash_pthread=yes
515                 case "$target_os" in
516                 freebsd*)
517 # Freebsd doesn't use -pthread for compiles, it uses them for linking
518                 ;;
519                 *)
520                             CFLAGS="$CFLAGS -pthread"
521                             CXXFLAGS="$CXXFLAGS -pthread"
522                 ;;
523                 esac
524                 fi
525         fi
526         rm -f conftest*
527     AC_MSG_RESULT($ac_cv_have_dash_pthread)
529         dnl
530         dnl See if -pthreads is supported.
531         dnl
532     ac_cv_have_dash_pthreads=no
533     if test "$ac_cv_have_dash_pthread" = "no"; then
534             AC_MSG_CHECKING(whether ${CC-cc} accepts -pthreads)
535         echo 'int main() { return 0; }' | cat > conftest.c
536             ${CC-cc} -pthreads -o conftest conftest.c > conftest.out 2>&1
537         if test $? -eq 0; then
538                 if test -z "`grep -E -i '(unrecognize|unknown)' conftest.out | grep pthreads`" -a -z "`grep -E -i '(error|incorrect)' conftest.out`" ; then
539                             ac_cv_have_dash_pthreads=yes
540                             CFLAGS="$CFLAGS -pthreads"
541                             CXXFLAGS="$CXXFLAGS -pthreads"
542                     fi
543             fi
544             rm -f conftest*
545         AC_MSG_RESULT($ac_cv_have_dash_pthreads)
546     fi
548         case "$target" in
549             *-*-freebsd*)
550                         AC_DEFINE(_REENTRANT)
551                         AC_DEFINE(_THREAD_SAFE)
552                         dnl -pthread links in -lpthread, so don't specify it explicitly.
553                         if test "$ac_cv_have_dash_pthread" = "yes"; then
554                                 _PTHREAD_LDFLAGS="-pthread"
555                         fi
556                         ;;
558             *-*-openbsd*|*-*-bsdi*)
559                         AC_DEFINE(_REENTRANT)
560                         AC_DEFINE(_THREAD_SAFE)
561                         dnl -pthread links in -lc_r, so don't specify it explicitly.
562                         if test "$ac_cv_have_dash_pthread" = "yes"; then
563                 _PTHREAD_LDFLAGS="-pthread"
564                         fi
565                         ;;
567             *-*-linux*|*-*-kfreebsd*-gnu|*-*-gnu*)
568                         AC_DEFINE(_REENTRANT)
569                         ;;
571         esac
572     LDFLAGS="${_PTHREAD_LDFLAGS} ${LDFLAGS}"
576 dnl ========================================================
577 dnl Put your C++ language/feature checks below
578 dnl ========================================================
579 AC_LANG_CPLUSPLUS
581 ARM_ABI_PREFIX=
582 if test "$GNU_CC"; then
583   if test "$TARGET_CPU" = "arm" ; then
584     AC_CACHE_CHECK(for ARM EABI,
585         ac_cv_gcc_arm_eabi,
586         [AC_TRY_COMPILE([],
587                         [
588 #if defined(__ARM_EABI__)
589   return 0;
590 #else
591 #error Not ARM EABI.
592 #endif
593                         ],
594                         ac_cv_gcc_arm_eabi="yes",
595                         ac_cv_gcc_arm_eabi="no")])
596     if test "$ac_cv_gcc_arm_eabi" = "yes"; then
597         HAVE_ARM_EABI=1
598         ARM_ABI_PREFIX=eabi-
599     else
600         ARM_ABI_PREFIX=oabi-
601     fi
602   fi
604   TARGET_COMPILER_ABI="${TARGET_COMPILER_ABI-${ARM_ABI_PREFIX}gcc3}"
607 dnl End of C++ language/feature checks
608 AC_LANG_C
610 fi # ! SKIP_COMPILER_CHECKS
612 TARGET_XPCOM_ABI=
613 if test -n "${TARGET_CPU}" -a -n "${TARGET_COMPILER_ABI}"; then
614     TARGET_XPCOM_ABI="${TARGET_CPU}-${TARGET_COMPILER_ABI}"
617 dnl We can't run TRY_COMPILE tests on Windows, so hard-code some
618 dnl features that Windows actually does support.
620 if test -n "$SKIP_COMPILER_CHECKS"; then
621    dnl Windows has malloc.h
622    AC_DEFINE(MALLOC_H, [<malloc.h>])
623    AC_DEFINE(HAVE_FORCEINLINE)
624 fi # SKIP_COMPILER_CHECKS
626 dnl Mozilla specific options
627 dnl ========================================================
628 dnl The macros used for command line options
629 dnl are defined in build/autoconf/altoptions.m4.
631 dnl ========================================================
632 dnl = Enable code optimization. ON by default.
633 dnl ========================================================
635 # Use value from moz.configure if one is defined. Else use our computed
636 # value.
637 if test -n "${MOZ_CONFIGURE_OPTIMIZE_FLAGS}"; then
638     MOZ_OPTIMIZE_FLAGS=${MOZ_CONFIGURE_OPTIMIZE_FLAGS}
641 if test "$COMPILE_ENVIRONMENT"; then
642 if test -n "$MOZ_OPTIMIZE"; then
643     AC_MSG_CHECKING([for valid optimization flags])
644     _SAVE_CFLAGS=$CFLAGS
645     CFLAGS="$CFLAGS $MOZ_OPTIMIZE_FLAGS"
646     AC_TRY_COMPILE([#include <stdio.h>],
647         [printf("Hello World\n");],
648         _results=yes,
649         _results=no)
650     AC_MSG_RESULT([$_results])
651     if test "$_results" = "no"; then
652         AC_MSG_ERROR([These compiler flags are invalid: $MOZ_OPTIMIZE_FLAGS])
653     fi
654     CFLAGS=$_SAVE_CFLAGS
655     if test -n "$MOZ_LTO" -a -n "$CLANG_CC"; then
656         # When using llvm-based LTO, non numeric optimization levels are
657         # not supported by the linker, so force the linker to use -O2 (
658         # which doesn't influence the level compilation units are actually
659         # compiled at).
660         case " $MOZ_OPTIMIZE_FLAGS " in
661         *\ -Os\ *|*\ -Oz\ *)
662             MOZ_OPTIMIZE_LDFLAGS="$MOZ_OPTIMIZE_LDFLAGS -O2"
663             ;;
664         esac
665     fi
667 fi # COMPILE_ENVIRONMENT
669 AC_SUBST_LIST(MOZ_OPTIMIZE_FLAGS)
670 AC_SUBST_LIST(MOZ_OPTIMIZE_LDFLAGS)
671 AC_SUBST_LIST(MOZ_PGO_OPTIMIZE_FLAGS)
673 dnl ========================================================
674 dnl = Enable jemalloc
675 dnl ========================================================
677 if test "$JS_STANDALONE" -a -z "$MOZ_MEMORY"; then
678   MOZ_GLUE_IN_PROGRAM=
679 else
680   case "${OS_TARGET}" in
681   Android|WINNT|Darwin)
682     MOZ_GLUE_IN_PROGRAM=
683     ;;
684   *)
685     dnl On !Android !Windows !OSX, we only want to link executables against mozglue
686     MOZ_GLUE_IN_PROGRAM=1
687     AC_DEFINE(MOZ_GLUE_IN_PROGRAM)
688     ;;
689   esac
692 if test "$MOZ_MEMORY"; then
693   case "${target}" in
694   *-mingw*)
695     export MOZ_NO_DEBUG_RTL=1
696     ;;
697   esac
699 AC_SUBST(MOZ_GLUE_IN_PROGRAM)
701 dnl ========================================================
702 dnl instruments
703 dnl ========================================================
704 if test -n "$MOZ_INSTRUMENTS"; then
705     LIBS="$LIBS -framework CoreFoundation"
708 dnl ========================================================
709 dnl = Enable using the clang plugin to build
710 dnl ========================================================
712 if test -n "$COMPILE_ENVIRONMENT"; then
713 MOZ_CONFIG_CLANG_PLUGIN
714 fi # COMPILE_ENVIRONMENT
716 MOZ_EXPAND_LIBS
718 dnl ========================================================
719 dnl =
720 dnl = Maintainer debug option (no --enable equivalent)
721 dnl =
722 dnl ========================================================
724 AC_SUBST_LIST(ASFLAGS)
725 AC_SUBST_LIST(MOZ_DEBUG_LDFLAGS)
727 AC_SUBST_LIST(MOZ_FIX_LINK_PATHS)
729 AC_SUBST(MOZ_POST_PROGRAM_COMMAND)
731 AC_SUBST(MOZ_APP_DISPLAYNAME)
733 AC_SUBST(MOZ_PKG_SPECIAL)
735 dnl Echo the CFLAGS to remove extra whitespace.
736 CFLAGS=`echo \
737         $_COMPILATION_CFLAGS \
738         $CFLAGS`
740 CXXFLAGS=`echo \
741         $_COMPILATION_CXXFLAGS \
742         $CXXFLAGS`
744 ASFLAGS=`echo \
745     $_COMPILATION_ASFLAGS \
746     $ASFLAGS`
748 COMPILE_CFLAGS=`echo \
749     $_DEFINES_CFLAGS \
750     $COMPILE_CFLAGS`
752 COMPILE_CXXFLAGS=`echo \
753     $_DEFINES_CXXFLAGS \
754     $COMPILE_CXXFLAGS`
756 HOST_CFLAGS=`echo \
757     $_COMPILATION_HOST_CFLAGS \
758     $HOST_CFLAGS`
760 HOST_CXXFLAGS=`echo \
761     $_COMPILATION_HOST_CXXFLAGS \
762     $HOST_CXXFLAGS`
764 LDFLAGS=`echo \
765     $LDFLAGS \
766     $_COMPILATION_LDFLAGS`
768 HOST_LDFLAGS=`echo \
769     $HOST_LDFLAGS \
770     $_COMPILATION_HOST_LDFLAGS`
772 OS_CFLAGS="$CFLAGS"
773 OS_CXXFLAGS="$CXXFLAGS"
774 OS_CPPFLAGS="$CPPFLAGS"
775 OS_COMPILE_CFLAGS="$COMPILE_CFLAGS"
776 OS_COMPILE_CXXFLAGS="$COMPILE_CXXFLAGS"
777 OS_LDFLAGS="$LDFLAGS"
778 OS_LIBS="$LIBS"
779 AC_SUBST_LIST(OS_CFLAGS)
780 AC_SUBST_LIST(OS_CXXFLAGS)
781 AC_SUBST_LIST(OS_CPPFLAGS)
782 AC_SUBST_LIST(OS_COMPILE_CFLAGS)
783 AC_SUBST_LIST(OS_COMPILE_CXXFLAGS)
784 AC_SUBST_LIST(OS_LDFLAGS)
785 AC_SUBST(OS_LIBS)
787 AC_SUBST(HOST_CC)
788 AC_SUBST(HOST_CXX)
789 AC_SUBST_LIST(HOST_CFLAGS)
790 AC_SUBST_LIST(HOST_CPPFLAGS)
791 AC_SUBST_LIST(HOST_CXXFLAGS)
792 AC_SUBST(HOST_LDFLAGS)
793 AC_SUBST_LIST(HOST_OPTIMIZE_FLAGS)
794 AC_SUBST(HOST_BIN_SUFFIX)
796 AC_SUBST(TARGET_XPCOM_ABI)
798 AC_SUBST(DSO_LDOPTS)
799 AC_SUBST(BIN_SUFFIX)
800 AC_SUBST(USE_N32)
801 AC_SUBST(WIN32_CONSOLE_EXE_LDFLAGS)
802 AC_SUBST(WIN32_GUI_EXE_LDFLAGS)
804 dnl Set various defines and substitutions
805 dnl ========================================================
807 AC_SUBST(MOZ_DEV_EDITION)
808 if test -n "$MOZ_DEV_EDITION"; then
809     AC_DEFINE(MOZ_DEV_EDITION)
812 dnl ========================================================
813 dnl JavaScript shell
814 dnl ========================================================
816 MOZ_CHECK_ALLOCATOR
818 if test -n "$JS_STANDALONE"; then
819 JS_LIBRARY_NAME="mozjs-$MOZILLA_SYMBOLVERSION"
820 else
821 JS_LIBRARY_NAME="mozjs"
823 JS_CONFIG_LIBS="$NSPR_LIBS $LIBS"
824 if test -n "$GNU_CC"; then
825 JS_CONFIG_MOZ_JS_LIBS='-L${libdir} -l${JS_LIBRARY_NAME}'
826 else
827 JS_CONFIG_MOZ_JS_LIBS='${libdir}/${JS_LIBRARY_NAME}.lib'
829 AC_SUBST(JS_LIBRARY_NAME)
830 AC_SUBST(JS_CONFIG_MOZ_JS_LIBS)
831 AC_SUBST(JS_CONFIG_LIBS)
833 # Avoid using obsolete NSPR features
834 AC_DEFINE(NO_NSPR_10_SUPPORT)
836 dnl Spit out some output
837 dnl ========================================================
838 MOZ_CREATE_CONFIG_STATUS()
840 rm -fr confdefs* $ac_clean_files