Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

309 Zeilen
9.5 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. dnl C++11 and later mode. Checked early so that we don't run into surprises.
  33. version_flag=''
  34. LOL_TRY_CXXFLAGS(-std=c++0x, [version_flag='-std=c++0x'])
  35. LOL_TRY_CXXFLAGS(-std=c++11, [version_flag='-std=c++11'])
  36. LOL_TRY_CXXFLAGS(-std=c++14, [version_flag='-std=c++14'])
  37. LOL_TRY_CXXFLAGS(-std=c++17, [version_flag='-std=c++17'])
  38. AM_CXXFLAGS="${AM_CXXFLAGS} ${version_flag}"
  39. CXXFLAGS="${CXXFLAGS} ${version_flag}"
  40. AC_LANG_PUSH(C++)
  41. AC_MSG_CHECKING(for C++11 enum class support)
  42. AC_TRY_LINK([], [enum class Foo : int { Bar, Baz };],
  43. [AC_MSG_RESULT(yes)],
  44. [AC_MSG_RESULT(no)
  45. AC_MSG_ERROR([[C++ compiler does not support C++11 enum classes]])])
  46. AC_LANG_POP(C++)
  47. AC_LIBTOOL_WIN32_DLL
  48. AM_PROG_LIBTOOL
  49. AC_LIBTOOL_CXX
  50. AC_C_CONST
  51. AC_C_INLINE
  52. dnl Ensure an error is thrown if pkg-config M4 files are not found.
  53. m4_pattern_allow([^PKG_CONFIG_LIBDIR$])
  54. m4_pattern_forbid([^PKG_CHECK_MODULES$])
  55. m4_pattern_forbid([^PKG_PROG_PKG_CONFIG$])
  56. dnl Same for Lol Engine M4 files.
  57. m4_pattern_forbid([^LOL_AC_])
  58. dnl Do not use PKG_CONFIG_LIBDIR when cross-compiling.
  59. if test "${build}" != "${host}" -a "${PKG_CONFIG_LIBDIR}" = ""; then
  60. export PKG_CONFIG_LIBDIR=/dev/null
  61. fi
  62. dnl AC_PROG_EGREP only exists in autoconf 2.54+, so we use AC_EGREP_CPP right
  63. dnl now otherwise it might be set in an obscure if statement. Same thing for
  64. dnl PKG_PROG_PKG_CONFIG which needs to be called first.
  65. AC_EGREP_CPP(yes, foo)
  66. PKG_PROG_PKG_CONFIG()
  67. dnl Check for a working implementation of sed
  68. AC_PROG_SED
  69. AC_MSG_CHECKING(for a sed that understands \t)
  70. if test "$(echo 'x\x' | "${SED}" 's/.*@<:@^x\t@:>@//')" != x; then
  71. AC_MSG_RESULT(no)
  72. AC_MSG_ERROR([[consider installing GNU sed]])
  73. else
  74. AC_MSG_RESULT(yes)
  75. fi
  76. dnl conditional builds
  77. AC_ARG_ENABLE(debug,
  78. [ --enable-debug build debug versions of the game (default no)])
  79. AC_ARG_ENABLE(release,
  80. [ --enable-release build final release of the game (default no)])
  81. AC_ARG_ENABLE(experimental,
  82. [ --enable-experimental experimental build (default no)])
  83. AC_ARG_ENABLE(doc,
  84. [ --enable-doc build documentation (needs doxygen and LaTeX)])
  85. dnl Common C headers
  86. AC_CHECK_HEADERS(stdio.h stdarg.h inttypes.h endian.h stdint.h getopt.h math.h)
  87. AC_CHECK_HEADERS(fastmath.h libutil.h util.h pty.h glob.h unistd.h io.h)
  88. AC_CHECK_HEADERS(execinfo.h)
  89. AC_CHECK_HEADERS(sys/ioctl.h sys/ptrace.h sys/stat.h sys/syscall.h sys/user.h)
  90. AC_CHECK_HEADERS(sys/wait.h sys/time.h sys/types.h)
  91. AC_CHECK_HEADERS(linux/kdev_t.h linux/major.h)
  92. AC_CHECK_HEADERS(security/pam_appl.h security/pam_misc.h)
  93. AC_CHECK_HEADERS(pam/pam_appl.h pam/pam_misc.h)
  94. dnl Common C++ headers
  95. AC_LANG_PUSH(C++)
  96. AC_CHECK_HEADERS(cxxabi.h)
  97. AC_LANG_POP(C++)
  98. dnl Common C functions
  99. AC_CHECK_FUNCS(getenv system tmpfile tmpnam getcwd _getcwd getlogin)
  100. AC_CHECK_FUNCS(backtrace_symbols)
  101. AC_CHECK_FUNCS(gettimeofday usleep)
  102. dnl Build mode
  103. ac_cv_my_build_mode="devel"
  104. if test "x${enable_release}" = "xyes"; then
  105. ac_cv_my_build_mode="release"
  106. fi
  107. if test "x${enable_devel}" = "xyes"; then
  108. ac_cv_my_build_mode="devel"
  109. fi
  110. if test "x${enable_debug}" = "xyes"; then
  111. ac_cv_my_build_mode="debug"
  112. fi
  113. if test "x${ac_cv_my_build_mode}" = "xdebug"; then
  114. AC_DEFINE(LOL_BUILD_DEBUG, 1, Define to 1 to activate debug build)
  115. LOL_TRY_CXXFLAGS(-O, [AM_CXXFLAGS="${AM_CXXFLAGS} -O"])
  116. LOL_TRY_CXXFLAGS(-g, [AM_CXXFLAGS="${AM_CXXFLAGS} -g"])
  117. elif test "x${ac_cv_my_build_mode}" = "xdevel"; then
  118. AC_DEFINE(LOL_BUILD_DEVEL, 1, Define to 1 to activate development build)
  119. LOL_TRY_CXXFLAGS(-Os, [AM_CXXFLAGS="${AM_CXXFLAGS} -Os"])
  120. LOL_TRY_CXXFLAGS(-g, [AM_CXXFLAGS="${AM_CXXFLAGS} -g"])
  121. LOL_TRY_CXXFLAGS(-ffast-math, [AM_CXXFLAGS="${AM_CXXFLAGS} -ffast-math"])
  122. else
  123. AC_DEFINE(LOL_BUILD_RELEASE, 1, Define to 1 to activate final release)
  124. LOL_TRY_CXXFLAGS(-Os, [AM_CXXFLAGS="${AM_CXXFLAGS} -Os"])
  125. LOL_TRY_CXXFLAGS(-ffast-math, [AM_CXXFLAGS="${AM_CXXFLAGS} -ffast-math"])
  126. LOL_TRY_CXXFLAGS(-fomit-frame-pointer, [AM_CXXFLAGS="${AM_CXXFLAGS} -fomit-frame-pointer"])
  127. LOL_TRY_CXXFLAGS(-fno-strength-reduce, [AM_CXXFLAGS="${AM_CXXFLAGS} -fno-strength-reduce"])
  128. fi
  129. dnl Build documentation?
  130. DOXYGEN="no"
  131. LATEX="no"
  132. if test "${enable_doc}" != "no"; then
  133. AC_PATH_PROG(DOXYGEN, doxygen, no)
  134. if test "${DOXYGEN}" != "no"; then
  135. # Build LaTeX documentation?
  136. AC_PATH_PROG(LATEX, pdflatex, no)
  137. AC_PATH_PROG(KPSEWHICH, kpsewhich, no)
  138. AC_PATH_PROG(DVIPS, dvips, no)
  139. if test "${DVIPS}" = "no" -o "${KPSEWHICH}" = "no"; then
  140. LATEX="no"
  141. fi
  142. if test "${LATEX}" != "no"; then
  143. AC_MSG_CHECKING(for a4.sty and a4wide.sty)
  144. if "${KPSEWHICH}" a4.sty >/dev/null 2>&1; then
  145. if "${KPSEWHICH}" a4wide.sty >/dev/null 2>&1; then
  146. AC_MSG_RESULT(yes)
  147. else
  148. LATEX="no"
  149. AC_MSG_RESULT(no)
  150. fi
  151. else
  152. LATEX="no"
  153. AC_MSG_RESULT(no)
  154. fi
  155. fi
  156. AC_PATH_PROG(DOT, dot, no)
  157. if test "${DOT}" != "no"; then
  158. LOL_USE_DOT="YES"
  159. else
  160. LOL_USE_DOT="NO"
  161. fi
  162. fi
  163. fi
  164. dnl XXX: disable LaTeX because we use too much memory
  165. LATEX=no
  166. AM_CONDITIONAL(BUILD_DOCUMENTATION, test "${DOXYGEN}" != "no")
  167. AM_CONDITIONAL(LOL_USE_LATEX, test "${LATEX}" != "no")
  168. AM_CONDITIONAL(LOL_USE_DOT, test "${DOT}" != "no")
  169. AC_SUBST(LOL_USE_DOT)
  170. dnl Debug symbols
  171. LOL_TRY_LDFLAGS(-rdynamic, [AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"])
  172. dnl Code qui fait des warnings == code de porc == deux baffes dans ta gueule
  173. LOL_TRY_CXXFLAGS(-Wall, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wall"])
  174. LOL_TRY_CXXFLAGS(-Wextra, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wextra"])
  175. LOL_TRY_CXXFLAGS(-Wpointer-arith, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wpointer-arith"])
  176. LOL_TRY_CXXFLAGS(-Wcast-align, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-align"])
  177. LOL_TRY_CXXFLAGS(-Wcast-qual, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-qual"])
  178. LOL_TRY_CXXFLAGS(-Wshadow, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wshadow"])
  179. LOL_TRY_CXXFLAGS(-Wsign-compare, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wsign-compare"])
  180. LOL_TRY_CXXFLAGS(-Wstrict-overflow=1, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wstrict-overflow=1"])
  181. dnl Add these even though they're implicitly set, so that we can safely
  182. dnl remove them from within a Makefile.
  183. LOL_TRY_CXXFLAGS(-Wmaybe-uninitialized, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wmaybe-uninitialized"])
  184. LOL_TRY_CXXFLAGS(-Wnarrowing, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wnarrowing"])
  185. LOL_TRY_CXXFLAGS(-Wunused, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wunused"])
  186. LOL_TRY_CXXFLAGS(-Wstrict-aliasing, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wstrict-aliasing"])
  187. LOL_TRY_CXXFLAGS(-Wparentheses, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wparentheses"])
  188. LOL_TRY_CXXFLAGS(-Wreorder, [AM_CXXFLAGS="${AM_CXXFLAGS} -Wreorder"])
  189. dnl Disable these warnings because they're annoyingly verbose
  190. LOL_TRY_CXXFLAGS(-Wno-psabi, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wno-psabi"])
  191. AC_CHECK_LIB(m, sin, MATH_LIBS="${MATH_LIBS} -lm")
  192. AC_CHECK_LIB(pthread, main, LIBS="$LIBS -lpthread")
  193. dnl Unix-specific libutil
  194. AC_CHECK_LIB(util, forkpty,
  195. [UTIL_LIBS="${UTIL_LIBS} -lutil"
  196. dnl Override future forkpty detection
  197. ac_cv_func_forkpty="yes"])
  198. AC_CHECK_FUNCS(forkpty)
  199. dnl GCC-specific symbol demangling
  200. AC_LANG_PUSH(C++)
  201. AC_TRY_LINK(
  202. [#include <cxxabi.h>],
  203. [abi::__cxa_demangle(NULL, 0, 0, NULL);],
  204. [AC_DEFINE(HAVE_CXA_DEMANGLE, 1, Define to 1 if abi::__cxa_demangle is available)])
  205. AC_LANG_POP(C++)
  206. LOL_AC_CHECK()
  207. dnl Use libcaca? (required for font generation)
  208. ac_cv_my_have_caca="no"
  209. PKG_CHECK_MODULES(CACA, caca >= 0.99.beta17, [ac_cv_my_have_caca="yes"], [:])
  210. if test "${ac_cv_my_have_caca}" != "no"; then
  211. AC_DEFINE(LOL_USE_CACA, 1, Define to 1 to use libcaca)
  212. fi
  213. AM_CONDITIONAL(LOL_USE_CACA, test "${ac_cv_my_have_caca}" != "no")
  214. dnl Use GTK+? (required for the deushax editor)
  215. ac_cv_my_have_gtkgl="no"
  216. PKG_CHECK_MODULES(GTK, gtk+-2.0, [ac_cv_my_have_gtkgl="yes"], [:])
  217. PKG_CHECK_MODULES(GTKGL, gtkgl-2.0, [:], [ac_cv_my_have_gtkgl="no"])
  218. if test "${ac_cv_my_have_gtkgl}" != "no"; then
  219. AC_DEFINE(LOL_USE_GTKGL, 1, Define to 1 to use GtkGl)
  220. fi
  221. AM_CONDITIONAL(LOL_USE_GTKGL, test "${ac_cv_my_have_gtkgl}" != "no")
  222. dnl Can we build neercs?
  223. AM_CONDITIONAL(BUILD_NEERCS, test "${ac_cv_my_have_caca}" != "no")
  224. dnl Should we ship non-free data?
  225. AM_CONDITIONAL(HAVE_NONFREE, true)
  226. dnl Extra libraries we may need
  227. AC_SUBST(MATH_LIBS)
  228. AC_SUBST(PAM_LIBS)
  229. AC_SUBST(UTIL_LIBS)
  230. LOL_AC_SUBST()
  231. AC_CONFIG_FILES(
  232. [Makefile
  233. src/Makefile
  234. src/bullet/Makefile
  235. src/lua/Makefile
  236. src/data/Makefile
  237. src/data/font/Makefile
  238. src/t/Makefile
  239. build/Makefile
  240. binaries/Makefile
  241. doc/Makefile
  242. doc/doxygen.cfg
  243. doc/samples/Makefile
  244. doc/samples/math/Makefile
  245. doc/samples/meshviewer/Makefile
  246. doc/samples/sandbox/Makefile
  247. doc/tutorial/Makefile
  248. tools/Makefile
  249. tools/lolremez/Makefile
  250. tools/lolunit/Makefile
  251. tools/vimlol/Makefile
  252. tools/vslol/Makefile
  253. ])
  254. AC_OUTPUT