configure.ac 4.25 KB
Newer Older
Kenton Varda's avatar
Kenton Varda committed
1 2
## Process this file with autoconf to produce configure.

3
AC_INIT([Capn Proto],[0.7-dev],[capnproto@googlegroups.com],[capnproto-c++])
Kenton Varda's avatar
Kenton Varda committed
4

5
AC_CONFIG_SRCDIR([src/capnp/layout.c++])
Kenton Varda's avatar
Kenton Varda committed
6 7 8 9 10 11 12 13 14 15 16
AC_CONFIG_AUX_DIR([build-aux])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])

# autoconf's default CXXFLAGS are usually "-g -O2".  A far more reasonable
# default is -O2 -NDEBUG.
AS_IF([test "x${ac_cv_env_CFLAGS_set}" = "x"],
      [CFLAGS="-O2 -DNDEBUG"])
AS_IF([test "x${ac_cv_env_CXXFLAGS_set}" = "x"],
      [CXXFLAGS="-O2 -DNDEBUG"])

17
AM_INIT_AUTOMAKE([tar-ustar])
Kenton Varda's avatar
Kenton Varda committed
18

19 20 21 22 23 24
AC_ARG_WITH([external-capnp],
  [AS_HELP_STRING([--with-external-capnp],
    [use the system capnp binary (or the one specified with $CAPNP) instead of compiling a new
     one (useful for cross-compiling)])],
  [external_capnp=yes],[external_capnp=no])

25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
AC_ARG_ENABLE([reflection], [
  AS_HELP_STRING([--disable-reflection], [
    compile Cap'n Proto in "lite mode", in which all reflection APIs (schema.h, dynamic.h, etc.)
    are not included. Produces a smaller library at the cost of features. All programs built
    against the library MUST be compiled with -DCAPNP_LITE=1. Note that because the compiler
    itself uses reflection in its implementation, you must also use --with-external-capnp when
    using this option.])
  ], [
    case "${enableval}" in
      yes)
        lite_mode=no
        ;;
      no)
        lite_mode=yes
        AS_IF([test "$external_capnp" != "yes"], [
          AC_MSG_ERROR([you must specify --with-external-capnp when using --disable-reflection])
        ])
        ;;
      *)
        AC_MSG_ERROR([bad value ${enableval} for --enable-reflection])
        ;;
    esac
  ], [lite_mode=no])

Kenton Varda's avatar
Kenton Varda committed
49 50 51 52
# Checks for programs.
AC_PROG_CC
AC_PROG_CXX
AC_LANG([C++])
Kenton Varda's avatar
Kenton Varda committed
53
AX_CXX_COMPILE_STDCXX_14
54 55 56 57 58 59

AS_CASE("${host_os}", *mingw*, [
    # We don't use pthreads on MinGW.
    PTHREAD_CFLAGS="-mthreads"
    PTHREAD_LIBS=""
    PTHREAD_CC=""
60
    ASYNC_LIBS="-lws2_32"
61 62 63
    AC_SUBST(PTHREAD_LIBS)
    AC_SUBST(PTHREAD_CFLAGS)
    AC_SUBST(PTHREAD_CC)
64
    AC_SUBST(ASYNC_LIBS)
65 66
  ], *, [
    ACX_PTHREAD
67 68
    ASYNC_LIBS=""
    AC_SUBST(ASYNC_LIBS)
69 70
  ])

71
LT_INIT
Kenton Varda's avatar
Kenton Varda committed
72

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
AS_IF([test "$external_capnp" != "no"], [
	AS_IF([test "x$CAPNP" = "x"], [CAPNP="capnp"], [with_capnp=yes])
	AS_IF([test "x$CAPNPC_CXX" = "x"], [
	  # CAPNPC_CXX was not specified.  Choose a reasonable default.
	  AS_CASE([$CAPNP], [*/*], [
	    # $CAPNP contains a slash, so it's not on $PATH.  Assume capnpc-c++ is not either, but is
	    # in the same directory.
	    CAPNPC_CXX=`dirname $CAPNP`/capnpc-c++
	  ], [
	    # $CAPNP is on $PATH, so tell it to find the plugin on $PATH as well.
	    CAPNPC_CXX="c++"
	  ])
	])
	AC_SUBST([CAPNP])
	AC_SUBST([CAPNPC_CXX])
])
AM_CONDITIONAL([USE_EXTERNAL_CAPNP], [test "$external_capnp" != "no"])

91 92 93 94 95 96 97 98
AM_CONDITIONAL([LITE_MODE], [test "$lite_mode" = "yes"])

AS_IF([test "$lite_mode" = "yes"], [
  CXXFLAGS="-DCAPNP_LITE $CXXFLAGS"
  CAPNP_LITE_FLAG=-DCAPNP_LITE
])
AC_SUBST([CAPNP_LITE_FLAG])

99 100
AC_SEARCH_LIBS(sched_yield, rt)

101 102 103 104
# Users will need to use the same -stdlib as us so we'd better let pkg-config know about it.
STDLIB_FLAG=`echo "$CXX $CXXFLAGS" | grep -o ' [[-]]stdlib=[[^ ]]*'`
AC_SUBST([STDLIB_FLAG])

Kenton Varda's avatar
Kenton Varda committed
105
LIBS="$PTHREAD_LIBS $LIBS"
106
CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
Kenton Varda's avatar
Kenton Varda committed
107

108 109 110 111 112 113 114 115 116
AC_DEFUN([CAPNP_PKG_CONFIG_FILES], [ \
  pkgconfig/capnp.pc \
  pkgconfig/capnp-rpc.pc \
  pkgconfig/capnp-json.pc \
  pkgconfig/kj.pc \
  pkgconfig/kj-async.pc \
  pkgconfig/kj-http.pc \
  pkgconfig/kj-test.pc \
])
117 118
AC_DEFUN([CAPNP_CMAKE_CONFIG_FILES], [ \
  cmake/CapnProtoConfig.cmake \
119
  cmake/CapnProtoConfigVersion.cmake \
120 121
])

122
[CAPNP_PKG_CONFIG_FILES]="CAPNP_PKG_CONFIG_FILES"
123
[CAPNP_CMAKE_CONFIG_FILES]="CAPNP_CMAKE_CONFIG_FILES"
124
AC_SUBST([CAPNP_PKG_CONFIG_FILES])
125 126 127 128
AC_SUBST([CAPNP_CMAKE_CONFIG_FILES])

# CapnProtoConfig.cmake.in needs these PACKAGE_* output variables.
PACKAGE_INIT="set([CAPNP_PKG_CONFIG_FILES] CAPNP_PKG_CONFIG_FILES)"
129
PACKAGE_CMAKE_INSTALL_FULL_INCLUDEDIR="\${CMAKE_CURRENT_LIST_DIR}/../../../include"
130 131 132
AC_SUBST([PACKAGE_INIT])
AC_SUBST([PACKAGE_CMAKE_INSTALL_FULL_INCLUDEDIR])

133 134 135 136 137
# CapnProtoConfigVersion.cmake.in needs PACKAGE_VERSION (already defined by AC_INIT) and
# CMAKE_SIZEOF_VOID_P output variables.
AC_CHECK_SIZEOF([void *])
AC_SUBST(CMAKE_SIZEOF_VOID_P, $ac_cv_sizeof_void_p)

138
AC_CONFIG_FILES([Makefile] CAPNP_PKG_CONFIG_FILES CAPNP_CMAKE_CONFIG_FILES)
Kenton Varda's avatar
Kenton Varda committed
139
AC_OUTPUT