xref: /aosp_15_r20/external/cronet/third_party/protobuf/configure.ac (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker## Process this file with autoconf to produce configure.
2*6777b538SAndroid Build Coastguard Worker## In general, the safest way to proceed is to run ./autogen.sh
3*6777b538SAndroid Build Coastguard Worker
4*6777b538SAndroid Build Coastguard WorkerAC_PREREQ(2.59)
5*6777b538SAndroid Build Coastguard Worker
6*6777b538SAndroid Build Coastguard Worker# Note:  If you change the version, you must also update it in:
7*6777b538SAndroid Build Coastguard Worker# * Protobuf.podspec
8*6777b538SAndroid Build Coastguard Worker# * csharp/Google.Protobuf.Tools.nuspec
9*6777b538SAndroid Build Coastguard Worker# * csharp/src/*/AssemblyInfo.cs
10*6777b538SAndroid Build Coastguard Worker# * csharp/src/Google.Protobuf/Google.Protobuf.nuspec
11*6777b538SAndroid Build Coastguard Worker# * java/*/pom.xml
12*6777b538SAndroid Build Coastguard Worker# * python/google/protobuf/__init__.py
13*6777b538SAndroid Build Coastguard Worker# * protoc-artifacts/pom.xml
14*6777b538SAndroid Build Coastguard Worker# * src/google/protobuf/stubs/common.h
15*6777b538SAndroid Build Coastguard Worker# * src/Makefile.am (Update -version-info for LDFLAGS if needed)
16*6777b538SAndroid Build Coastguard Worker#
17*6777b538SAndroid Build Coastguard Worker# In the SVN trunk, the version should always be the next anticipated release
18*6777b538SAndroid Build Coastguard Worker# version with the "-pre" suffix.  (We used to use "-SNAPSHOT" but this pushed
19*6777b538SAndroid Build Coastguard Worker# the size of one file name in the dist tarfile over the 99-char limit.)
20*6777b538SAndroid Build Coastguard WorkerAC_INIT([Protocol Buffers],[3.21.12],[[email protected]],[protobuf])
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard WorkerAM_MAINTAINER_MODE([enable])
23*6777b538SAndroid Build Coastguard Worker
24*6777b538SAndroid Build Coastguard WorkerAC_CONFIG_SRCDIR(src/google/protobuf/message.cc)
25*6777b538SAndroid Build Coastguard Worker# The config file is generated but not used by the source code, since we only
26*6777b538SAndroid Build Coastguard Worker# need very few of them, e.g. HAVE_PTHREAD and HAVE_ZLIB. Those macros are
27*6777b538SAndroid Build Coastguard Worker# passed down in CXXFLAGS manually in src/Makefile.am
28*6777b538SAndroid Build Coastguard WorkerAC_CONFIG_HEADERS([config.h])
29*6777b538SAndroid Build Coastguard WorkerAC_CONFIG_MACRO_DIR([m4])
30*6777b538SAndroid Build Coastguard Worker
31*6777b538SAndroid Build Coastguard WorkerAC_ARG_VAR(DIST_LANG, [language to include in the distribution package (i.e., make dist)])
32*6777b538SAndroid Build Coastguard Workercase "$DIST_LANG" in
33*6777b538SAndroid Build Coastguard Worker  "") DIST_LANG=all ;;
34*6777b538SAndroid Build Coastguard Worker  all | cpp | csharp | java | python | javanano | objectivec | ruby | php) ;;
35*6777b538SAndroid Build Coastguard Worker  *) AC_MSG_FAILURE([unknown language: $DIST_LANG]) ;;
36*6777b538SAndroid Build Coastguard Workeresac
37*6777b538SAndroid Build Coastguard WorkerAC_SUBST(DIST_LANG)
38*6777b538SAndroid Build Coastguard Worker
39*6777b538SAndroid Build Coastguard Worker# autoconf's default CXXFLAGS are usually "-g -O2".  These aren't necessarily
40*6777b538SAndroid Build Coastguard Worker# the best choice for libprotobuf.
41*6777b538SAndroid Build Coastguard WorkerAS_IF([test "x${ac_cv_env_CFLAGS_set}" = "x"],
42*6777b538SAndroid Build Coastguard Worker      [CFLAGS=""])
43*6777b538SAndroid Build Coastguard WorkerAS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"],
44*6777b538SAndroid Build Coastguard Worker      [CXXFLAGS=""])
45*6777b538SAndroid Build Coastguard Worker
46*6777b538SAndroid Build Coastguard WorkerAC_CANONICAL_TARGET
47*6777b538SAndroid Build Coastguard Worker
48*6777b538SAndroid Build Coastguard WorkerAM_INIT_AUTOMAKE([1.9 tar-ustar subdir-objects])
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker# Silent rules enabled: the output is minimal but informative.
51*6777b538SAndroid Build Coastguard Worker# In particular, the warnings from the compiler stick out very clearly.
52*6777b538SAndroid Build Coastguard Worker# To see all logs, use the --disable-silent-rules on configure or via make V=1
53*6777b538SAndroid Build Coastguard WorkerAM_SILENT_RULES([yes])
54*6777b538SAndroid Build Coastguard Worker
55*6777b538SAndroid Build Coastguard WorkerAC_ARG_WITH([zlib],
56*6777b538SAndroid Build Coastguard Worker  [AS_HELP_STRING([--with-zlib],
57*6777b538SAndroid Build Coastguard Worker    [include classes for streaming compressed data in and out @<:@default=check@:>@])],
58*6777b538SAndroid Build Coastguard Worker  [],[with_zlib=check])
59*6777b538SAndroid Build Coastguard Worker
60*6777b538SAndroid Build Coastguard WorkerAC_ARG_WITH([zlib-include],
61*6777b538SAndroid Build Coastguard Worker  [AS_HELP_STRING([--with-zlib-include=PATH],
62*6777b538SAndroid Build Coastguard Worker    [zlib include directory])],
63*6777b538SAndroid Build Coastguard Worker  [CPPFLAGS="-I$withval $CPPFLAGS"])
64*6777b538SAndroid Build Coastguard Worker
65*6777b538SAndroid Build Coastguard WorkerAC_ARG_WITH([zlib-lib],
66*6777b538SAndroid Build Coastguard Worker  [AS_HELP_STRING([--with-zlib-lib=PATH],
67*6777b538SAndroid Build Coastguard Worker    [zlib lib directory])],
68*6777b538SAndroid Build Coastguard Worker  [LDFLAGS="-L$withval $LDFLAGS"])
69*6777b538SAndroid Build Coastguard Worker
70*6777b538SAndroid Build Coastguard WorkerAC_ARG_WITH([protoc],
71*6777b538SAndroid Build Coastguard Worker  [AS_HELP_STRING([--with-protoc=COMMAND],
72*6777b538SAndroid Build Coastguard Worker    [use the given protoc command instead of building a new one when building tests (useful for cross-compiling)])],
73*6777b538SAndroid Build Coastguard Worker  [],[with_protoc=no])
74*6777b538SAndroid Build Coastguard Worker
75*6777b538SAndroid Build Coastguard Worker# Checks for programs.
76*6777b538SAndroid Build Coastguard WorkerAC_PROG_CC
77*6777b538SAndroid Build Coastguard WorkerAC_PROG_CXX
78*6777b538SAndroid Build Coastguard WorkerAC_PROG_CXX_FOR_BUILD
79*6777b538SAndroid Build Coastguard WorkerAC_LANG([C++])
80*6777b538SAndroid Build Coastguard WorkerACX_USE_SYSTEM_EXTENSIONS
81*6777b538SAndroid Build Coastguard Workerm4_ifdef([AM_PROG_AR], [AM_PROG_AR])
82*6777b538SAndroid Build Coastguard WorkerAM_CONDITIONAL(GCC, test "$GCC" = yes)   # let the Makefile know if we're gcc
83*6777b538SAndroid Build Coastguard WorkerAS_CASE([$target_os], [darwin*], [AC_PROG_OBJC], [AM_CONDITIONAL([am__fastdepOBJC], [false])])
84*6777b538SAndroid Build Coastguard Worker
85*6777b538SAndroid Build Coastguard Worker# test_util.cc takes forever to compile with GCC and optimization turned on.
86*6777b538SAndroid Build Coastguard WorkerAC_MSG_CHECKING([C++ compiler flags...])
87*6777b538SAndroid Build Coastguard WorkerAS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"],[
88*6777b538SAndroid Build Coastguard Worker  AS_IF([test "$GCC" = "yes"],[
89*6777b538SAndroid Build Coastguard Worker    PROTOBUF_OPT_FLAG="-O2"
90*6777b538SAndroid Build Coastguard Worker    CXXFLAGS="${CXXFLAGS} -g"
91*6777b538SAndroid Build Coastguard Worker  ])
92*6777b538SAndroid Build Coastguard Worker
93*6777b538SAndroid Build Coastguard Worker  # Protocol Buffers contains several checks that are intended to be used only
94*6777b538SAndroid Build Coastguard Worker  # for debugging and which might hurt performance.  Most users are probably
95*6777b538SAndroid Build Coastguard Worker  # end users who don't want these checks, so add -DNDEBUG by default.
96*6777b538SAndroid Build Coastguard Worker  CXXFLAGS="$CXXFLAGS -std=c++11 -DNDEBUG"
97*6777b538SAndroid Build Coastguard Worker
98*6777b538SAndroid Build Coastguard Worker  AC_MSG_RESULT([use default: $PROTOBUF_OPT_FLAG $CXXFLAGS])
99*6777b538SAndroid Build Coastguard Worker],[
100*6777b538SAndroid Build Coastguard Worker  AC_MSG_RESULT([use user-supplied: $CXXFLAGS])
101*6777b538SAndroid Build Coastguard Worker])
102*6777b538SAndroid Build Coastguard Worker
103*6777b538SAndroid Build Coastguard WorkerAC_SUBST(PROTOBUF_OPT_FLAG)
104*6777b538SAndroid Build Coastguard Worker
105*6777b538SAndroid Build Coastguard WorkerACX_CHECK_SUNCC
106*6777b538SAndroid Build Coastguard Worker
107*6777b538SAndroid Build Coastguard Worker# Have to do libtool after SUNCC, other wise it "helpfully" adds Crun Cstd
108*6777b538SAndroid Build Coastguard Worker# to the link
109*6777b538SAndroid Build Coastguard WorkerAC_PROG_LIBTOOL
110*6777b538SAndroid Build Coastguard Worker
111*6777b538SAndroid Build Coastguard Worker# Check whether the linker supports version scripts
112*6777b538SAndroid Build Coastguard WorkerAC_MSG_CHECKING([whether the linker supports version scripts])
113*6777b538SAndroid Build Coastguard Workersave_LDFLAGS=$LDFLAGS
114*6777b538SAndroid Build Coastguard WorkerLDFLAGS="$LDFLAGS -Wl,--version-script=conftest.map"
115*6777b538SAndroid Build Coastguard Workercat > conftest.map <<EOF
116*6777b538SAndroid Build Coastguard Worker{
117*6777b538SAndroid Build Coastguard Worker  global:
118*6777b538SAndroid Build Coastguard Worker    main;
119*6777b538SAndroid Build Coastguard Worker  local:
120*6777b538SAndroid Build Coastguard Worker    *;
121*6777b538SAndroid Build Coastguard Worker};
122*6777b538SAndroid Build Coastguard WorkerEOF
123*6777b538SAndroid Build Coastguard WorkerAC_LINK_IFELSE(
124*6777b538SAndroid Build Coastguard Worker  [AC_LANG_SOURCE([int main() { return 0; }])],
125*6777b538SAndroid Build Coastguard Worker  [have_ld_version_script=yes; AC_MSG_RESULT(yes)],
126*6777b538SAndroid Build Coastguard Worker  [have_ld_version_script=no; AC_MSG_RESULT(no)])
127*6777b538SAndroid Build Coastguard WorkerLDFLAGS=$save_LDFLAGS
128*6777b538SAndroid Build Coastguard WorkerAM_CONDITIONAL([HAVE_LD_VERSION_SCRIPT], [test "$have_ld_version_script" = "yes"])
129*6777b538SAndroid Build Coastguard Worker
130*6777b538SAndroid Build Coastguard Worker# Checks for header files.
131*6777b538SAndroid Build Coastguard WorkerAC_HEADER_STDC
132*6777b538SAndroid Build Coastguard WorkerAC_CHECK_HEADERS([fcntl.h inttypes.h limits.h stdlib.h unistd.h])
133*6777b538SAndroid Build Coastguard Worker
134*6777b538SAndroid Build Coastguard Worker# Checks for library functions.
135*6777b538SAndroid Build Coastguard WorkerAC_FUNC_MEMCMP
136*6777b538SAndroid Build Coastguard WorkerAC_FUNC_STRTOD
137*6777b538SAndroid Build Coastguard WorkerAC_CHECK_FUNCS([ftruncate memset mkdir strchr strerror strtol])
138*6777b538SAndroid Build Coastguard Worker
139*6777b538SAndroid Build Coastguard Worker# Check for zlib.
140*6777b538SAndroid Build Coastguard WorkerHAVE_ZLIB=0
141*6777b538SAndroid Build Coastguard WorkerAS_IF([test "$with_zlib" != no], [
142*6777b538SAndroid Build Coastguard Worker  AC_MSG_CHECKING([zlib version])
143*6777b538SAndroid Build Coastguard Worker
144*6777b538SAndroid Build Coastguard Worker  # First check the zlib header version.
145*6777b538SAndroid Build Coastguard Worker  AC_COMPILE_IFELSE(
146*6777b538SAndroid Build Coastguard Worker    [AC_LANG_PROGRAM([[
147*6777b538SAndroid Build Coastguard Worker        #include <zlib.h>
148*6777b538SAndroid Build Coastguard Worker        #if !defined(ZLIB_VERNUM) || (ZLIB_VERNUM < 0x1204)
149*6777b538SAndroid Build Coastguard Worker        # error zlib version too old
150*6777b538SAndroid Build Coastguard Worker        #endif
151*6777b538SAndroid Build Coastguard Worker        ]], [])], [
152*6777b538SAndroid Build Coastguard Worker    AC_MSG_RESULT([ok (1.2.0.4 or later)])
153*6777b538SAndroid Build Coastguard Worker
154*6777b538SAndroid Build Coastguard Worker    # Also need to add -lz to the linker flags and make sure this succeeds.
155*6777b538SAndroid Build Coastguard Worker    AC_SEARCH_LIBS([zlibVersion], [z], [
156*6777b538SAndroid Build Coastguard Worker      AC_DEFINE([HAVE_ZLIB], [1], [Enable classes using zlib compression.])
157*6777b538SAndroid Build Coastguard Worker      HAVE_ZLIB=1
158*6777b538SAndroid Build Coastguard Worker    ], [
159*6777b538SAndroid Build Coastguard Worker      AS_IF([test "$with_zlib" != check], [
160*6777b538SAndroid Build Coastguard Worker        AC_MSG_FAILURE([--with-zlib was given, but no working zlib library was found])
161*6777b538SAndroid Build Coastguard Worker      ])
162*6777b538SAndroid Build Coastguard Worker    ])
163*6777b538SAndroid Build Coastguard Worker  ], [
164*6777b538SAndroid Build Coastguard Worker    AS_IF([test "$with_zlib" = check], [
165*6777b538SAndroid Build Coastguard Worker      AC_MSG_RESULT([headers missing or too old (requires 1.2.0.4)])
166*6777b538SAndroid Build Coastguard Worker    ], [
167*6777b538SAndroid Build Coastguard Worker      AC_MSG_FAILURE([--with-zlib was given, but zlib headers were not present or were too old (requires 1.2.0.4)])
168*6777b538SAndroid Build Coastguard Worker    ])
169*6777b538SAndroid Build Coastguard Worker  ])
170*6777b538SAndroid Build Coastguard Worker])
171*6777b538SAndroid Build Coastguard WorkerAM_CONDITIONAL([HAVE_ZLIB], [test $HAVE_ZLIB = 1])
172*6777b538SAndroid Build Coastguard Worker
173*6777b538SAndroid Build Coastguard Worker# Add -std=c++11 if necesssary. It is important for us to do this before the
174*6777b538SAndroid Build Coastguard Worker# libatomic check below, since that also depends on C++11.
175*6777b538SAndroid Build Coastguard WorkerAX_CXX_COMPILE_STDCXX([11], [noext], [mandatory])
176*6777b538SAndroid Build Coastguard Worker
177*6777b538SAndroid Build Coastguard Workerdnl On some platforms, std::atomic needs a helper library
178*6777b538SAndroid Build Coastguard WorkerAC_MSG_CHECKING(whether -latomic is needed)
179*6777b538SAndroid Build Coastguard WorkerAC_LINK_IFELSE([AC_LANG_SOURCE([[
180*6777b538SAndroid Build Coastguard Worker  #include <atomic>
181*6777b538SAndroid Build Coastguard Worker  #include <cstdint>
182*6777b538SAndroid Build Coastguard Worker  std::atomic<std::int64_t> v;
183*6777b538SAndroid Build Coastguard Worker  int main() {
184*6777b538SAndroid Build Coastguard Worker    return v;
185*6777b538SAndroid Build Coastguard Worker  }
186*6777b538SAndroid Build Coastguard Worker]])], STD_ATOMIC_NEED_LIBATOMIC=no, STD_ATOMIC_NEED_LIBATOMIC=yes)
187*6777b538SAndroid Build Coastguard WorkerAC_MSG_RESULT($STD_ATOMIC_NEED_LIBATOMIC)
188*6777b538SAndroid Build Coastguard Workerif test "x$STD_ATOMIC_NEED_LIBATOMIC" = xyes; then
189*6777b538SAndroid Build Coastguard Worker  LIBATOMIC_LIBS="-latomic"
190*6777b538SAndroid Build Coastguard Workerfi
191*6777b538SAndroid Build Coastguard WorkerAC_SUBST([LIBATOMIC_LIBS])
192*6777b538SAndroid Build Coastguard Worker
193*6777b538SAndroid Build Coastguard WorkerAS_IF([test "$with_protoc" != "no"], [
194*6777b538SAndroid Build Coastguard Worker  PROTOC=$with_protoc
195*6777b538SAndroid Build Coastguard Worker  AS_IF([test "$with_protoc" = "yes"], [
196*6777b538SAndroid Build Coastguard Worker    # No argument given.  Use system protoc.
197*6777b538SAndroid Build Coastguard Worker    PROTOC=protoc
198*6777b538SAndroid Build Coastguard Worker  ])
199*6777b538SAndroid Build Coastguard Worker  AS_IF([echo "$PROTOC" | grep -q '^@<:@^/@:>@.*/'], [
200*6777b538SAndroid Build Coastguard Worker    # Does not start with a slash, but contains a slash.  So, it's a relative
201*6777b538SAndroid Build Coastguard Worker    # path (as opposed to an absolute path or an executable in $PATH).
202*6777b538SAndroid Build Coastguard Worker    # Since it will actually be executed from the src directory, prefix with
203*6777b538SAndroid Build Coastguard Worker    # the current directory.  We also insert $ac_top_build_prefix in case this
204*6777b538SAndroid Build Coastguard Worker    # is a nested package and --with-protoc was actually given on the outer
205*6777b538SAndroid Build Coastguard Worker    # package's configure script.
206*6777b538SAndroid Build Coastguard Worker    PROTOC=`pwd`/${ac_top_build_prefix}$PROTOC
207*6777b538SAndroid Build Coastguard Worker  ])
208*6777b538SAndroid Build Coastguard Worker  AC_SUBST([PROTOC])
209*6777b538SAndroid Build Coastguard Worker])
210*6777b538SAndroid Build Coastguard WorkerAM_CONDITIONAL([USE_EXTERNAL_PROTOC], [test "$with_protoc" != "no"])
211*6777b538SAndroid Build Coastguard Worker
212*6777b538SAndroid Build Coastguard WorkerAX_PTHREAD
213*6777b538SAndroid Build Coastguard WorkerAM_CONDITIONAL([HAVE_PTHREAD], [test "x$ax_pthread_ok" = "xyes"])
214*6777b538SAndroid Build Coastguard Worker# We still keep this for improving pbconfig.h for unsupported platforms.
215*6777b538SAndroid Build Coastguard WorkerAC_CXX_STL_HASH
216*6777b538SAndroid Build Coastguard Worker
217*6777b538SAndroid Build Coastguard Worker# Enable ObjC support for conformance directory on OS X.
218*6777b538SAndroid Build Coastguard WorkerOBJC_CONFORMANCE_TEST=0
219*6777b538SAndroid Build Coastguard Workercase "$target_os" in
220*6777b538SAndroid Build Coastguard Worker  darwin*)
221*6777b538SAndroid Build Coastguard Worker    OBJC_CONFORMANCE_TEST=1
222*6777b538SAndroid Build Coastguard Worker    ;;
223*6777b538SAndroid Build Coastguard Workeresac
224*6777b538SAndroid Build Coastguard WorkerAM_CONDITIONAL([OBJC_CONFORMANCE_TEST], [test $OBJC_CONFORMANCE_TEST = 1])
225*6777b538SAndroid Build Coastguard Worker
226*6777b538SAndroid Build Coastguard WorkerAC_MSG_CHECKING(whether -llog is needed)
227*6777b538SAndroid Build Coastguard WorkerANDROID_TEST=no
228*6777b538SAndroid Build Coastguard Workercase "$target_os" in
229*6777b538SAndroid Build Coastguard Worker  *android*)
230*6777b538SAndroid Build Coastguard Worker    ANDROID_TEST=yes
231*6777b538SAndroid Build Coastguard Worker    ;;
232*6777b538SAndroid Build Coastguard Workeresac
233*6777b538SAndroid Build Coastguard WorkerAC_MSG_RESULT($ANDROID_TEST)
234*6777b538SAndroid Build Coastguard Workerif test "x$ANDROID_TEST" = xyes; then
235*6777b538SAndroid Build Coastguard Worker  LIBLOG_LIBS="-llog"
236*6777b538SAndroid Build Coastguard Workerfi
237*6777b538SAndroid Build Coastguard WorkerAC_SUBST([LIBLOG_LIBS])
238*6777b538SAndroid Build Coastguard Worker
239*6777b538SAndroid Build Coastguard Worker# HACK:  Make gmock's configure script pick up our copy of CFLAGS and CXXFLAGS,
240*6777b538SAndroid Build Coastguard Worker#   since the flags added by ACX_CHECK_SUNCC must be used when compiling gmock
241*6777b538SAndroid Build Coastguard Worker#   too.
242*6777b538SAndroid Build Coastguard Workerexport CFLAGS
243*6777b538SAndroid Build Coastguard Workerexport CXXFLAGS
244*6777b538SAndroid Build Coastguard WorkerAC_CONFIG_SUBDIRS([third_party/googletest])
245*6777b538SAndroid Build Coastguard Worker
246*6777b538SAndroid Build Coastguard WorkerAC_CONFIG_FILES([Makefile src/Makefile benchmarks/Makefile conformance/Makefile protobuf.pc protobuf-lite.pc])
247*6777b538SAndroid Build Coastguard WorkerAC_OUTPUT
248