Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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