You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

249 lines
8.5 KiB

  1. # LOL_AC_INIT()
  2. # ---------------------
  3. AC_DEFUN([LOL_AC_INIT], [
  4. dnl C++11 and later mode. Checked early so that we don't run into surprises.
  5. version_flag=''
  6. LOL_TRY_CXXFLAGS(-std=c++0x, [version_flag='-std=c++0x'])
  7. LOL_TRY_CXXFLAGS(-std=c++11, [version_flag='-std=c++11'])
  8. LOL_TRY_CXXFLAGS(-std=c++14, [version_flag='-std=c++14'])
  9. LOL_TRY_CXXFLAGS(-std=c++17, [version_flag='-std=c++17'])
  10. AM_CXXFLAGS="${AM_CXXFLAGS} ${version_flag}"
  11. CXXFLAGS="${CXXFLAGS} ${version_flag}"
  12. ]) # LOL_AC_INIT
  13. # LOL_AC_SUBST()
  14. # ---------------------
  15. AC_DEFUN([LOL_AC_SUBST], [
  16. dnl How to use the Lol Engine outside this tree
  17. LOL_CFLAGS="$LOL_CFLAGS $SDL_CFLAGS $GL_CFLAGS $EGL_CFLAGS $LIBPNG_CFLAGS"
  18. LOL_LIBS="$LOL_LIBS $SDL_LIBS $GL_LIBS $EGL_LIBS $LIBPNG_LIBS $D3D_LIBS"
  19. LOL_DEPS="${LOL_DEPS} \$(lol_builddir)/src/liblol-core.a"
  20. LOL_DEPS="${LOL_DEPS} \$(lol_builddir)/src/bullet/liblol-bullet.a"
  21. LOL_DEPS="${LOL_DEPS} \$(lol_builddir)/src/lua/liblol-lua.a"
  22. dnl How to use the Lol Engine inside this tree
  23. AM_CPPFLAGS="${AM_CPPFLAGS} -I\$(lol_srcdir)/src"
  24. AM_CPPFLAGS="${AM_CPPFLAGS} -DLOL_CONFIG_SOURCESUBDIR=\\\"\$(subdir)\\\""
  25. AM_CPPFLAGS="${AM_CPPFLAGS} ${LOL_CFLAGS}"
  26. AM_LDFLAGS="${AM_LDFLAGS} ${LOL_DEPS}"
  27. AM_LDFLAGS="${AM_LDFLAGS} ${LOL_LIBS}"
  28. dnl Extra flags
  29. AC_SUBST(LOL_CFLAGS)
  30. AC_SUBST(LOL_LIBS)
  31. AC_SUBST(LOL_DEPS)
  32. AC_SUBST(AM_CFLAGS)
  33. AC_SUBST(AM_CPPFLAGS)
  34. AC_SUBST(AM_CXXFLAGS)
  35. AC_SUBST(AM_LDFLAGS)
  36. ]) # LOL_AC_SUBST
  37. # LOL_AC_CHECK()
  38. # ---------------------
  39. AC_DEFUN([LOL_AC_CHECK], [
  40. dnl Check that the C++ compiler really works
  41. AC_LANG_PUSH(C++)
  42. AC_MSG_CHECKING(for a fully working C++ compiler)
  43. AC_TRY_LINK([], [],
  44. [AC_MSG_RESULT(yes)],
  45. [AC_MSG_RESULT(no)
  46. AC_MSG_ERROR([[C++ compiler cannot link executables]])])
  47. AC_LANG_POP(C++)
  48. dnl Use mingw threads if necessary
  49. if true; then
  50. LOL_CFLAGS="$LOL_CFLAGS -I\$(lol_srcdir)/external/mingw-std-threads-0.0.ac5c9e3b/include/"
  51. fi
  52. dnl Use pegtl? Yes, always
  53. if true; then
  54. LOL_CFLAGS="$LOL_CFLAGS -I\$(lol_srcdir)/external/pegtl-1.3.1-e7752e81/include"
  55. fi
  56. dnl Use Imgui? Yes, always
  57. if true; then
  58. LOL_CFLAGS="$LOL_CFLAGS -I\$(lol_srcdir)/external/imgui"
  59. fi
  60. dnl Use NativeClient?
  61. ac_cv_my_have_nacl="no"
  62. AC_LANG_PUSH(C++)
  63. AC_CHECK_HEADERS(ppapi/cpp/instance.h,
  64. [ac_cv_my_have_nacl="yes"
  65. LOL_LIBS="${LOL_LIBS} -lnosys"
  66. if test "${ac_cv_my_build_mode}" = "xrelease"; then
  67. LOL_TRY_CXXFLAGS(-s, [AM_CXXFLAGS="${AM_CXXFLAGS} -s"])
  68. fi])
  69. AC_LANG_POP(C++)
  70. AM_CONDITIONAL(LOL_USE_NACL, test "${ac_cv_my_have_nacl}" != "no")
  71. dnl Use Android? FIXME: super hacks!
  72. ac_cv_my_have_android="no"
  73. AC_CHECK_LIB(log, __android_log_vprint,
  74. [ac_cv_my_have_android="yes"
  75. LOL_LIBS="${LOL_LIBS} -llog -landroid -module -lEGL -lGLESv2"])
  76. AM_CONDITIONAL(LOL_USE_ANDROID, test "${ac_cv_my_have_android}" != "no")
  77. dnl Use EGL?
  78. ac_cv_my_have_egl="no"
  79. PKG_CHECK_MODULES(EGL, egl, [ac_cv_my_have_egl="yes"], [:])
  80. if test "${ac_cv_my_have_egl}" != "no"; then
  81. AC_DEFINE(LOL_USE_EGL, 1, Define to 1 to use libegl)
  82. EGL_LIBS="${EGL_LIBS} -lX11"
  83. fi
  84. AC_CHECK_LIB(EGL, main,
  85. [ac_cv_my_have_egl="yes"
  86. AC_DEFINE(LOL_USE_EGL, 1, Define to 1 to use libegl)
  87. EGL_LIBS="-lEGL"])
  88. dnl Raspberry Pi is different, check for it with extra libs; also we
  89. dnl look for a different function to bypass autoconf caching
  90. AC_CHECK_LIB(EGL, eglGetDisplay,
  91. [ac_cv_my_have_egl="yes"
  92. AC_DEFINE(LOL_USE_EGL, 1, Define to 1 to use libegl)
  93. EGL_LIBS="-lEGL -lvcos -lvchiq_arm -lbcm_host -lGLESv2"],
  94. [:],
  95. [-lvcos -lvchiq_arm -lbcm_host -lGLESv2])
  96. AM_CONDITIONAL(LOL_USE_EGL, test "${ac_cv_my_have_egl}" != "no")
  97. dnl Use libpng? (replacement for SDL_image)
  98. ac_cv_my_have_libpng="no"
  99. PKG_CHECK_MODULES(LIBPNG, libpng, [ac_cv_my_have_libpng="yes"], [:])
  100. if test "${ac_cv_my_have_libpng}" != "no"; then
  101. AC_DEFINE(LOL_USE_LIBPNG, 1, Define to 1 to use libpng)
  102. fi
  103. AM_CONDITIONAL(LOL_USE_LIBPNG, test "${ac_cv_my_have_libpng}" != "no")
  104. dnl Use Imlib2?
  105. ac_cv_my_have_imlib2="no"
  106. PKG_CHECK_MODULES(IMLIB2, imlib2, [ac_cv_my_have_imlib2="yes"], [:])
  107. if test "${ac_cv_my_have_imlib2}" != "no"; then
  108. AC_DEFINE(LOL_USE_IMLIB2, 1, Define to 1 to use Imlib2)
  109. LOL_CFLAGS="${LOL_CFLAGS} ${IMLIB2_CFLAGS}"
  110. LOL_LIBS="${LOL_LIBS} ${IMLIB2_LIBS}"
  111. fi
  112. AM_CONDITIONAL(LOL_USE_IMLIB2, test "${ac_cv_my_have_imlib2}" = "yes")
  113. dnl Use Windows GDI+?
  114. ac_cv_my_have_gdiplus="no"
  115. AC_LANG_PUSH(C++)
  116. AC_CHECK_HEADERS(gdiplus.h,
  117. [ac_cv_my_have_gdiplus="yes"
  118. LOL_LIBS="${LOL_LIBS} -lgdiplus"],
  119. [ac_cv_my_have_gdiplus="no"],
  120. [#include <algorithm>
  121. using std::min;
  122. using std::max;
  123. #include <windows.h>])
  124. AC_LANG_POP(C++)
  125. if test "${ac_cv_my_have_gdiplus}" != "no"; then
  126. AC_DEFINE(LOL_USE_GDIPLUS, 1, Define to 1 to use GDI+)
  127. fi
  128. AM_CONDITIONAL(LOL_USE_GDIPLUS, test "${ac_cv_my_have_gdiplus}" = "yes")
  129. dnl Use libavcodec? (required for movie encoding)
  130. ac_cv_my_have_ffmpeg="yes"
  131. PKG_CHECK_MODULES([LIBAVCODEC], [libavcodec], [:], [ac_cv_my_have_ffmpeg=no])
  132. PKG_CHECK_MODULES([LIBAVFORMAT], [libavformat], [:], [ac_cv_my_have_ffmpeg=no])
  133. PKG_CHECK_MODULES([LIBSWSCALE], [libswscale], [:], [ac_cv_my_have_ffmpeg=no])
  134. if test "${ac_cv_my_have_ffmpeg}" = "no"; then
  135. ac_cv_my_have_ffmpeg="yes"
  136. AC_CHECK_HEADERS(libavcodec/avcodec.h, [:], [ac_cv_my_have_ffmpeg=no])
  137. AC_CHECK_HEADERS(libavformat/avformat.h, [:], [ac_cv_my_have_ffmpeg=no])
  138. AC_CHECK_HEADERS(libswscale/swscale.h, [:], [ac_cv_my_have_ffmpeg=no])
  139. if test "${ac_cv_my_have_ffmpeg}" = "yes"; then
  140. LIBAVFORMAT_LIBS="-lavformat"
  141. LIBAVCODEC_LIBS="-lavcodec -lavutil"
  142. LIBSWSCALE_LIBS="-lswscale -lswresample"
  143. AC_CHECK_LIB(ws2_32, main, LOL_LIBS="${LOL_LIBS} -lws2_32")
  144. fi
  145. fi
  146. if test "${ac_cv_my_have_ffmpeg}" != "no"; then
  147. AC_DEFINE(LOL_USE_FFMPEG, 1, Define to 1 to use FFmpeg)
  148. LOL_CFLAGS="${LOL_CFLAGS} ${LIBAVFORMAT_CFLAGS} ${LIBAVCODEC_CFLAGS} ${SWSCALE_CFLAGS}"
  149. LOL_LIBS="${LOL_LIBS} ${LIBAVFORMAT_LIBS} ${LIBAVCODEC_LIBS} ${LIBSWSCALE_LIBS}"
  150. fi
  151. AM_CONDITIONAL(LOL_USE_FFMPEG, test "${ac_cv_my_have_ffmpeg}" != "no")
  152. dnl Are we building using MinGW?
  153. LOL_TRY_CXXFLAGS(-mwindows -mwin32,
  154. [AM_CXXFLAGS="${AM_CXXFLAGS} -mwindows -mwin32"
  155. LOL_LIBS="${LOL_LIBS} -uWinMain -u_WinMain@16"])
  156. dnl Are we building using Emscripten?
  157. ac_cv_my_have_emscripten="no"
  158. AC_CHECK_HEADERS(emscripten.h,
  159. [ac_cv_my_have_emscripten="yes"
  160. dnl XXX: activate this if memory heap is too small
  161. #AM_CXXFLAGS="${AM_CXXFLAGS} -s ALLOW_MEMORY_GROWTH=1"
  162. dnl HACK: until emcc properly adds these to EMSDK_OPTS
  163. CPPFLAGS="${CPPFLAGS} -U__i386__ -U__x86_64__ -U__i386 -U__x86_64 -Ui386 -Ux86_64"
  164. CPPFLAGS="${CPPFLAGS} -U__SSE__ -U__SSE2__ -U__MMX__ -UX87_DOUBLE_ROUNDING"
  165. CPPFLAGS="${CPPFLAGS} -UHAVE_GCC_ASM_FOR_X87 -DEMSCRIPTEN -U__STRICT_ANSI__"
  166. CPPFLAGS="${CPPFLAGS} -U__CYGWIN__"])
  167. AM_CONDITIONAL(LOL_USE_EMSCRIPTEN, test "${ac_cv_my_have_emscripten}" != "no")
  168. dnl Are we on an OS X or iOS platform?
  169. LOL_TRY_LDFLAGS(-framework Foundation,
  170. [LOL_LIBS="${LOL_LIBS} -framework Foundation"])
  171. LOL_TRY_LDFLAGS(-framework CoreGraphics,
  172. [LOL_LIBS="${LOL_LIBS} -framework CoreGraphics"])
  173. LOL_TRY_LDFLAGS(-framework CoreData,
  174. [LOL_LIBS="${LOL_LIBS} -framework CoreData"])
  175. LOL_TRY_LDFLAGS(-framework UIKit,
  176. [LOL_LIBS="${LOL_LIBS} -framework UIKit"])
  177. dnl Other complex checks
  178. LOL_AC_CHECK_OPENGL()
  179. LOL_AC_CHECK_SDL()
  180. dnl Debug symbols
  181. LOL_TRY_LDFLAGS(-rdynamic, [AM_LDFLAGS="${AM_LDFLAGS} -rdynamic"])
  182. dnl Code qui fait des warnings == code de porc == deux baffes dans ta gueule
  183. LOL_TRY_CXXFLAGS(-Wall, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wall"])
  184. LOL_TRY_CXXFLAGS(-Wextra, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wextra"])
  185. LOL_TRY_CXXFLAGS(-Wpointer-arith, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wpointer-arith"])
  186. LOL_TRY_CXXFLAGS(-Wcast-align, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-align"])
  187. LOL_TRY_CXXFLAGS(-Wcast-qual, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wcast-qual"])
  188. LOL_TRY_CXXFLAGS(-Wshadow, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wshadow"])
  189. LOL_TRY_CXXFLAGS(-Wsign-compare, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wsign-compare"])
  190. LOL_TRY_CXXFLAGS(-Wstrict-overflow=1, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wstrict-overflow=1"])
  191. dnl Add these even though they're implicitly set, so that we can safely
  192. dnl remove them from within a Makefile.
  193. LOL_TRY_CXXFLAGS(-Wmaybe-uninitialized, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wmaybe-uninitialized"])
  194. LOL_TRY_CXXFLAGS(-Wnarrowing, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wnarrowing"])
  195. LOL_TRY_CXXFLAGS(-Wunused, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wunused"])
  196. LOL_TRY_CXXFLAGS(-Wstrict-aliasing, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wstrict-aliasing"])
  197. LOL_TRY_CXXFLAGS(-Wparentheses, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wparentheses"])
  198. LOL_TRY_CXXFLAGS(-Wreorder, [AM_CXXFLAGS="${AM_CXXFLAGS} -Wreorder"])
  199. dnl Disable these warnings because they're annoyingly verbose
  200. LOL_TRY_CXXFLAGS(-Wno-psabi, [AM_CPPFLAGS="${AM_CPPFLAGS} -Wno-psabi"])
  201. ]) # LOL_AC_CHECK