您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

275 行
7.6 KiB

  1. dnl
  2. dnl Lol Engine
  3. dnl
  4. dnl Copyright © 2010—2016 Sam Hocevar <sam@hocevar.net>
  5. dnl
  6. dnl Lol Engine is free software. It comes without any warranty, to
  7. dnl the extent permitted by applicable law. You can redistribute it
  8. dnl and/or modify it under the terms of the Do What the Fuck You Want
  9. dnl to Public License, Version 2, as published by the WTFPL Task Force.
  10. dnl See http://www.wtfpl.net/ for more details.
  11. dnl
  12. AC_INIT(lolengine, 0.0)
  13. AC_PREREQ(2.50)
  14. AC_CONFIG_AUX_DIR(.auto)
  15. AC_CANONICAL_SYSTEM
  16. AM_INIT_AUTOMAKE([subdir-objects no-define tar-ustar silent-rules])
  17. dnl AM_MAINTAINER_MODE
  18. AM_DEFAULT_VERBOSITY=0
  19. dnl Versioning of the separate software we ship
  20. LOLUNIT_VERSION=0.1
  21. AC_SUBST(LOLUNIT_VERSION)
  22. LOLREMEZ_VERSION=0.2
  23. AC_SUBST(LOLREMEZ_VERSION)
  24. AC_SUBST(lol_srcdir, '${top_srcdir}')
  25. AC_SUBST(lol_builddir, '${top_builddir}')
  26. AC_CONFIG_HEADER(config.h)
  27. AM_PROG_CC_C_O
  28. AC_PROG_CPP
  29. AC_PROG_CXX
  30. AC_PROG_CXXCPP
  31. AC_PROG_RANLIB
  32. LOL_AC_INIT()
  33. AC_LANG_PUSH(C++)
  34. AC_MSG_CHECKING(for C++11 enum class support)
  35. AC_TRY_LINK([], [enum class Foo : int { Bar, Baz };],
  36. [AC_MSG_RESULT(yes)],
  37. [AC_MSG_RESULT(no)
  38. AC_MSG_ERROR([[C++ compiler does not support C++11 enum classes]])])
  39. AC_LANG_POP(C++)
  40. AC_LIBTOOL_WIN32_DLL
  41. AM_PROG_LIBTOOL
  42. AC_LIBTOOL_CXX
  43. AC_C_CONST
  44. AC_C_INLINE
  45. dnl Ensure an error is thrown if pkg-config M4 files are not found.
  46. m4_pattern_allow([^PKG_CONFIG_LIBDIR$])
  47. m4_pattern_forbid([^PKG_CHECK_MODULES$])
  48. m4_pattern_forbid([^PKG_PROG_PKG_CONFIG$])
  49. dnl Same for Lol Engine M4 files.
  50. m4_pattern_forbid([^LOL_AC_])
  51. dnl Do not use PKG_CONFIG_LIBDIR when cross-compiling.
  52. if test "${build}" != "${host}" -a "${PKG_CONFIG_LIBDIR}" = ""; then
  53. export PKG_CONFIG_LIBDIR=/dev/null
  54. fi
  55. dnl AC_PROG_EGREP only exists in autoconf 2.54+, so we use AC_EGREP_CPP right
  56. dnl now otherwise it might be set in an obscure if statement. Same thing for
  57. dnl PKG_PROG_PKG_CONFIG which needs to be called first.
  58. AC_EGREP_CPP(yes, foo)
  59. PKG_PROG_PKG_CONFIG()
  60. dnl Check for a working implementation of sed
  61. AC_PROG_SED
  62. AC_MSG_CHECKING(for a sed that understands \t)
  63. if test "$(echo 'x\x' | "${SED}" 's/.*@<:@^x\t@:>@//')" != x; then
  64. AC_MSG_RESULT(no)
  65. AC_MSG_ERROR([[consider installing GNU sed]])
  66. else
  67. AC_MSG_RESULT(yes)
  68. fi
  69. dnl conditional builds
  70. AC_ARG_ENABLE(debug,
  71. [ --enable-debug build debug versions of the game (default no)])
  72. AC_ARG_ENABLE(release,
  73. [ --enable-release build final release of the game (default no)])
  74. AC_ARG_ENABLE(experimental,
  75. [ --enable-experimental experimental build (default no)])
  76. AC_ARG_ENABLE(doc,
  77. [ --enable-doc build documentation (needs doxygen and LaTeX)])
  78. dnl Common C headers
  79. AC_CHECK_HEADERS(stdio.h stdarg.h inttypes.h endian.h stdint.h getopt.h math.h)
  80. AC_CHECK_HEADERS(fastmath.h libutil.h util.h pty.h glob.h unistd.h io.h)
  81. AC_CHECK_HEADERS(execinfo.h)
  82. AC_CHECK_HEADERS(sys/ioctl.h sys/ptrace.h sys/stat.h sys/syscall.h sys/user.h)
  83. AC_CHECK_HEADERS(sys/wait.h sys/time.h sys/types.h)
  84. AC_CHECK_HEADERS(linux/kdev_t.h linux/major.h)
  85. AC_CHECK_HEADERS(security/pam_appl.h security/pam_misc.h)
  86. AC_CHECK_HEADERS(pam/pam_appl.h pam/pam_misc.h)
  87. dnl Common C++ headers
  88. AC_LANG_PUSH(C++)
  89. AC_CHECK_HEADERS(cxxabi.h)
  90. AC_LANG_POP(C++)
  91. dnl Common C functions
  92. AC_CHECK_FUNCS(getenv system tmpfile tmpnam getcwd _getcwd getlogin)
  93. AC_CHECK_FUNCS(backtrace_symbols)
  94. AC_CHECK_FUNCS(gettimeofday usleep)
  95. dnl Build mode
  96. ac_cv_my_build_mode="devel"
  97. if test "x${enable_release}" = "xyes"; then
  98. ac_cv_my_build_mode="release"
  99. fi
  100. if test "x${enable_devel}" = "xyes"; then
  101. ac_cv_my_build_mode="devel"
  102. fi
  103. if test "x${enable_debug}" = "xyes"; then
  104. ac_cv_my_build_mode="debug"
  105. fi
  106. if test "x${ac_cv_my_build_mode}" = "xdebug"; then
  107. AC_DEFINE(LOL_BUILD_DEBUG, 1, Define to 1 to activate debug build)
  108. LOL_TRY_CXXFLAGS(-O, [AM_CXXFLAGS="${AM_CXXFLAGS} -O"])
  109. LOL_TRY_CXXFLAGS(-g, [AM_CXXFLAGS="${AM_CXXFLAGS} -g"])
  110. elif test "x${ac_cv_my_build_mode}" = "xdevel"; then
  111. AC_DEFINE(LOL_BUILD_DEVEL, 1, Define to 1 to activate development build)
  112. LOL_TRY_CXXFLAGS(-Os, [AM_CXXFLAGS="${AM_CXXFLAGS} -Os"])
  113. LOL_TRY_CXXFLAGS(-g, [AM_CXXFLAGS="${AM_CXXFLAGS} -g"])
  114. LOL_TRY_CXXFLAGS(-ffast-math, [AM_CXXFLAGS="${AM_CXXFLAGS} -ffast-math"])
  115. else
  116. AC_DEFINE(LOL_BUILD_RELEASE, 1, Define to 1 to activate final release)
  117. LOL_TRY_CXXFLAGS(-Os, [AM_CXXFLAGS="${AM_CXXFLAGS} -Os"])
  118. LOL_TRY_CXXFLAGS(-ffast-math, [AM_CXXFLAGS="${AM_CXXFLAGS} -ffast-math"])
  119. LOL_TRY_CXXFLAGS(-fomit-frame-pointer, [AM_CXXFLAGS="${AM_CXXFLAGS} -fomit-frame-pointer"])
  120. LOL_TRY_CXXFLAGS(-fno-strength-reduce, [AM_CXXFLAGS="${AM_CXXFLAGS} -fno-strength-reduce"])
  121. fi
  122. dnl Build documentation?
  123. DOXYGEN="no"
  124. LATEX="no"
  125. if test "${enable_doc}" != "no"; then
  126. AC_PATH_PROG(DOXYGEN, doxygen, no)
  127. if test "${DOXYGEN}" != "no"; then
  128. # Build LaTeX documentation?
  129. AC_PATH_PROG(LATEX, pdflatex, no)
  130. AC_PATH_PROG(KPSEWHICH, kpsewhich, no)
  131. AC_PATH_PROG(DVIPS, dvips, no)
  132. if test "${DVIPS}" = "no" -o "${KPSEWHICH}" = "no"; then
  133. LATEX="no"
  134. fi
  135. if test "${LATEX}" != "no"; then
  136. AC_MSG_CHECKING(for a4.sty and a4wide.sty)
  137. if "${KPSEWHICH}" a4.sty >/dev/null 2>&1; then
  138. if "${KPSEWHICH}" a4wide.sty >/dev/null 2>&1; then
  139. AC_MSG_RESULT(yes)
  140. else
  141. LATEX="no"
  142. AC_MSG_RESULT(no)
  143. fi
  144. else
  145. LATEX="no"
  146. AC_MSG_RESULT(no)
  147. fi
  148. fi
  149. AC_PATH_PROG(DOT, dot, no)
  150. if test "${DOT}" != "no"; then
  151. LOL_USE_DOT="YES"
  152. else
  153. LOL_USE_DOT="NO"
  154. fi
  155. fi
  156. fi
  157. dnl XXX: disable LaTeX because we use too much memory
  158. LATEX=no
  159. AM_CONDITIONAL(BUILD_DOCUMENTATION, test "${DOXYGEN}" != "no")
  160. AM_CONDITIONAL(LOL_USE_LATEX, test "${LATEX}" != "no")
  161. AM_CONDITIONAL(LOL_USE_DOT, test "${DOT}" != "no")
  162. AC_SUBST(LOL_USE_DOT)
  163. AC_CHECK_LIB(m, sin, MATH_LIBS="${MATH_LIBS} -lm")
  164. AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
  165. dnl Unix-specific libutil
  166. AC_CHECK_LIB(util, forkpty,
  167. [UTIL_LIBS="${UTIL_LIBS} -lutil"
  168. dnl Override future forkpty detection
  169. ac_cv_func_forkpty="yes"])
  170. AC_CHECK_FUNCS(forkpty)
  171. dnl GCC-specific symbol demangling
  172. AC_LANG_PUSH(C++)
  173. AC_TRY_LINK(
  174. [#include <cxxabi.h>],
  175. [abi::__cxa_demangle(NULL, 0, 0, NULL);],
  176. [AC_DEFINE(HAVE_CXA_DEMANGLE, 1, Define to 1 if abi::__cxa_demangle is available)])
  177. AC_LANG_POP(C++)
  178. LOL_AC_CHECK()
  179. dnl Use libcaca? (required for font generation)
  180. ac_cv_my_have_caca="no"
  181. PKG_CHECK_MODULES(CACA, caca >= 0.99.beta17, [ac_cv_my_have_caca="yes"], [:])
  182. if test "${ac_cv_my_have_caca}" != "no"; then
  183. AC_DEFINE(LOL_USE_CACA, 1, Define to 1 to use libcaca)
  184. fi
  185. AM_CONDITIONAL(LOL_USE_CACA, test "${ac_cv_my_have_caca}" != "no")
  186. dnl Use GTK+? (required for the deushax editor)
  187. ac_cv_my_have_gtkgl="no"
  188. PKG_CHECK_MODULES(GTK, gtk+-2.0, [ac_cv_my_have_gtkgl="yes"], [:])
  189. PKG_CHECK_MODULES(GTKGL, gtkgl-2.0, [:], [ac_cv_my_have_gtkgl="no"])
  190. if test "${ac_cv_my_have_gtkgl}" != "no"; then
  191. AC_DEFINE(LOL_USE_GTKGL, 1, Define to 1 to use GtkGl)
  192. fi
  193. AM_CONDITIONAL(LOL_USE_GTKGL, test "${ac_cv_my_have_gtkgl}" != "no")
  194. dnl Can we build neercs?
  195. AM_CONDITIONAL(BUILD_NEERCS, test "${ac_cv_my_have_caca}" != "no")
  196. dnl Should we ship non-free data?
  197. AM_CONDITIONAL(HAVE_NONFREE, true)
  198. dnl Extra libraries we may need
  199. AC_SUBST(MATH_LIBS)
  200. AC_SUBST(PAM_LIBS)
  201. AC_SUBST(UTIL_LIBS)
  202. LOL_AC_SUBST()
  203. AC_CONFIG_FILES(
  204. [Makefile
  205. src/Makefile
  206. src/bullet/Makefile
  207. src/lua/Makefile
  208. src/data/Makefile
  209. src/data/font/Makefile
  210. src/t/Makefile
  211. build/Makefile
  212. binaries/Makefile
  213. doc/Makefile
  214. doc/doxygen.cfg
  215. doc/samples/Makefile
  216. doc/samples/math/Makefile
  217. doc/samples/meshviewer/Makefile
  218. doc/samples/sandbox/Makefile
  219. doc/tutorial/Makefile
  220. tools/Makefile
  221. tools/lolremez/Makefile
  222. tools/lolunit/Makefile
  223. tools/vimlol/Makefile
  224. tools/vslol/Makefile
  225. ])
  226. AC_OUTPUT