From 7be150b0e40b7bbde1dcaa546c40ce04c42a9f6c Mon Sep 17 00:00:00 2001 From: Sam Hocevar Date: Wed, 9 Aug 2017 13:55:15 +0200 Subject: [PATCH] Allow to build without SDL or ffmpeg. Linux-only for now. This will be necessary for projects that do not actually use the rendering engine, such as LolRemez. --- build/autotools/m4/lol-conf.m4 | 28 +---------------- build/autotools/m4/lol-ffmpeg.m4 | 53 ++++++++++++++++++++++++++++++++ build/autotools/m4/lol-sdl.m4 | 20 ++++++++---- configure.ac | 5 +++ src/Makefile.am | 2 ++ src/application/application.cpp | 30 ++++++++++++++++-- 6 files changed, 103 insertions(+), 35 deletions(-) create mode 100644 build/autotools/m4/lol-ffmpeg.m4 diff --git a/build/autotools/m4/lol-conf.m4 b/build/autotools/m4/lol-conf.m4 index 61397cb7..e69aa023 100644 --- a/build/autotools/m4/lol-conf.m4 +++ b/build/autotools/m4/lol-conf.m4 @@ -162,33 +162,6 @@ fi AM_CONDITIONAL(LOL_USE_GDIPLUS, test "${ac_cv_my_have_gdiplus}" = "yes") -dnl Use libavcodec? (required for movie encoding) -ac_cv_my_have_ffmpeg="yes" -PKG_CHECK_MODULES([LIBAVCODEC], [libavcodec], [:], [ac_cv_my_have_ffmpeg=no]) -PKG_CHECK_MODULES([LIBAVUTIL], [libavutil], [:], [ac_cv_my_have_ffmpeg=no]) -PKG_CHECK_MODULES([LIBAVFORMAT], [libavformat], [:], [ac_cv_my_have_ffmpeg=no]) -PKG_CHECK_MODULES([LIBSWSCALE], [libswscale], [:], [ac_cv_my_have_ffmpeg=no]) -if test "${ac_cv_my_have_ffmpeg}" = "no"; then - ac_cv_my_have_ffmpeg="yes" - AC_CHECK_HEADERS(libavcodec/avcodec.h, [:], [ac_cv_my_have_ffmpeg=no]) - AC_CHECK_HEADERS(libavformat/avformat.h, [:], [ac_cv_my_have_ffmpeg=no]) - AC_CHECK_HEADERS(libswscale/swscale.h, [:], [ac_cv_my_have_ffmpeg=no]) - if test "${ac_cv_my_have_ffmpeg}" = "yes"; then - LIBAVCODEC_LIBS="-lavcodec" - LIBAVUTIL_LIBS="-lavutil" - LIBAVFORMAT_LIBS="-lavformat" - LIBSWSCALE_LIBS="-lswscale" - AC_CHECK_LIB(ws2_32, main, LOL_LIBS="${LOL_LIBS} -lws2_32") - fi -fi -if test "${ac_cv_my_have_ffmpeg}" != "no"; then - AC_DEFINE(LOL_USE_FFMPEG, 1, Define to 1 to use FFmpeg) - LOL_CFLAGS="${LOL_CFLAGS} ${LIBAVFORMAT_CFLAGS} ${LIBAVUTIL_CFLAGS} ${LIBAVCODEC_CFLAGS} ${LIBSWSCALE_CFLAGS}" - LOL_LIBS="${LOL_LIBS} ${LIBAVFORMAT_LIBS} ${LIBAVUTIL_LIBS} ${LIBAVCODEC_LIBS} ${LIBSWSCALE_LIBS}" -fi -AM_CONDITIONAL(LOL_USE_FFMPEG, test "${ac_cv_my_have_ffmpeg}" != "no") - - dnl Are we building using MinGW? LOL_TRY_CXXFLAGS(-mwindows -mwin32, [AM_CXXFLAGS="${AM_CXXFLAGS} -mwindows -mwin32" @@ -223,6 +196,7 @@ LOL_TRY_LDFLAGS(-framework UIKit, dnl Other complex checks LOL_AC_CHECK_OPENGL() LOL_AC_CHECK_SDL() +LOL_AC_CHECK_FFMPEG() dnl Debug symbols diff --git a/build/autotools/m4/lol-ffmpeg.m4 b/build/autotools/m4/lol-ffmpeg.m4 new file mode 100644 index 00000000..5c8ac90c --- /dev/null +++ b/build/autotools/m4/lol-ffmpeg.m4 @@ -0,0 +1,53 @@ +dnl +dnl Lol Engine +dnl +dnl Copyright © 2010—2016 Sam Hocevar +dnl +dnl Lol Engine is free software. It comes without any warranty, to +dnl the extent permitted by applicable law. You can redistribute it +dnl and/or modify it under the terms of the Do What the Fuck You Want +dnl to Public License, Version 2, as published by the WTFPL Task Force. +dnl See http://www.wtfpl.net/ for more details. +dnl + + +# LOL_AC_CHECK_FFMPEG() +# --------------------- +AC_DEFUN([LOL_AC_CHECK_FFMPEG], +[ +if test "${enable_ffmpeg}" != "no"; then + LOL_AC_CHECK_FFMPEG_INNER() +fi +AM_CONDITIONAL(LOL_USE_FFMPEG, test "${ac_cv_my_have_ffmpeg}" != "no") +]) + +# LOL_AC_CHECK_FFMPEG_INNER() +# --------------------------- +AC_DEFUN([LOL_AC_CHECK_FFMPEG_INNER], +[ +ac_cv_my_have_ffmpeg="yes" +PKG_CHECK_MODULES([LIBAVCODEC], [libavcodec], [:], [ac_cv_my_have_ffmpeg=no]) +PKG_CHECK_MODULES([LIBAVUTIL], [libavutil], [:], [ac_cv_my_have_ffmpeg=no]) +PKG_CHECK_MODULES([LIBAVFORMAT], [libavformat], [:], [ac_cv_my_have_ffmpeg=no]) +PKG_CHECK_MODULES([LIBSWSCALE], [libswscale], [:], [ac_cv_my_have_ffmpeg=no]) +if test "${ac_cv_my_have_ffmpeg}" != "yes"; then + ac_cv_my_have_ffmpeg="yes" + AC_CHECK_HEADERS(libavcodec/avcodec.h, [:], [ac_cv_my_have_ffmpeg=no]) + AC_CHECK_HEADERS(libavformat/avformat.h, [:], [ac_cv_my_have_ffmpeg=no]) + AC_CHECK_HEADERS(libswscale/swscale.h, [:], [ac_cv_my_have_ffmpeg=no]) + if test "${ac_cv_my_have_ffmpeg}" = "yes"; then + LIBAVCODEC_LIBS="-lavcodec" + LIBAVUTIL_LIBS="-lavutil" + LIBAVFORMAT_LIBS="-lavformat" + LIBSWSCALE_LIBS="-lswscale" + AC_CHECK_LIB(ws2_32, main, LOL_LIBS="${LOL_LIBS} -lws2_32") + fi +fi +if test "${ac_cv_my_have_ffmpeg}" = "yes"; then + AC_DEFINE(LOL_USE_FFMPEG, 1, Define to 1 to use FFmpeg) + LOL_CFLAGS="${LOL_CFLAGS} ${LIBAVFORMAT_CFLAGS} ${LIBAVUTIL_CFLAGS} ${LIBAVCODEC_CFLAGS} ${LIBSWSCALE_CFLAGS}" + LOL_LIBS="${LOL_LIBS} ${LIBAVFORMAT_LIBS} ${LIBAVUTIL_LIBS} ${LIBAVCODEC_LIBS} ${LIBSWSCALE_LIBS}" +fi + +]) # LOL_AC_CHECK_FFMPEG_INNER + diff --git a/build/autotools/m4/lol-sdl.m4 b/build/autotools/m4/lol-sdl.m4 index 12c7def6..393852ab 100644 --- a/build/autotools/m4/lol-sdl.m4 +++ b/build/autotools/m4/lol-sdl.m4 @@ -15,6 +15,19 @@ dnl # ------------------ AC_DEFUN([LOL_AC_CHECK_SDL], [ +if test "${enable_sdl}" != "no"; then + LOL_AC_CHECK_SDL_INNER() +fi +AM_CONDITIONAL(LOL_USE_SDL, test "x${ac_cv_my_have_sdl}" = xyes) +AM_CONDITIONAL(LOL_USE_SDL_MIXER, test "x${ac_cv_my_have_sdl_mixer}" = xyes) +AM_CONDITIONAL(LOL_USE_SDL_IMAGE, test "x${ac_cv_my_have_sdl_image}" = xyes) +AM_CONDITIONAL(LOL_USE_OLD_SDL, test "x${ac_cv_my_have_old_sdl}" = xyes) +]) + +# LOL_AC_CHECK_SDL_INNER() +# ------------------------ +AC_DEFUN([LOL_AC_CHECK_SDL_INNER], +[ dnl Find which version of SDL to use (always required on Linux or Win32) dnl dnl Defined C/C++ macros: @@ -169,27 +182,22 @@ if test "x${ac_cv_my_have_sdl}" = xno; then else AC_DEFINE(LOL_USE_SDL, 1, Define to 1 to use SDL) fi -AM_CONDITIONAL(LOL_USE_SDL, test "x${ac_cv_my_have_sdl}" = xyes) if test "x${ac_cv_my_have_sdl_mixer}" = xno; then AC_MSG_WARN([SDL_mixer not found]) else AC_DEFINE(LOL_USE_SDL_MIXER, 1, Define to 1 to use SDL_mixer) fi -AM_CONDITIONAL(LOL_USE_SDL_MIXER, test "x${ac_cv_my_have_sdl_mixer}" = xyes) if test "x${ac_cv_my_have_sdl_image}" = xno; then AC_MSG_WARN([SDL_image not found]) else AC_DEFINE(LOL_USE_SDL_IMAGE, 1, Define to 1 to use SDL_image) fi -AM_CONDITIONAL(LOL_USE_SDL_IMAGE, test "x${ac_cv_my_have_sdl_image}" = xyes) if test "x${ac_cv_my_have_old_sdl}" != xno; then AC_DEFINE(LOL_USE_OLD_SDL, 1, Define to 1 to use SDL) fi -AM_CONDITIONAL(LOL_USE_OLD_SDL, test "x${ac_cv_my_have_old_sdl}" = xyes) - -]) # LOL_AC_CHECK_SDL +]) # LOL_AC_CHECK_SDL_INNER diff --git a/configure.ac b/configure.ac index 4ffd0fab..ffae2ad0 100644 --- a/configure.ac +++ b/configure.ac @@ -80,6 +80,11 @@ AC_ARG_ENABLE(experimental, AC_ARG_ENABLE(subproject, [ --enable-subproject build as a subproject (default no)]) +AC_ARG_ENABLE(ffmpeg, + [ --enable-ffmpeg build using FFmpeg (default autodetected)]) +AC_ARG_ENABLE(sdl, + [ --enable-sdl build using SDL (default autodetected)]) + AC_ARG_ENABLE(test, [ --enable-test build test suite (default yes)]) AC_ARG_ENABLE(tools, diff --git a/src/Makefile.am b/src/Makefile.am index 06d9cb42..c9aa86ac 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -140,9 +140,11 @@ liblol_core_sources = \ debug/fps.cpp debug/fps.h debug/lines.cpp \ debug/record.cpp debug/record.h debug/stats.cpp debug/stats.h +if LOL_USE_SDL sdl_sources = \ platform/sdl/sdlapp.cpp platform/sdl/sdlapp.h \ platform/sdl/sdlinput.cpp platform/sdl/sdlinput.h +endif d3d9_sources = \ platform/d3d9/d3d9input.cpp platform/d3d9/d3d9input.h diff --git a/src/application/application.cpp b/src/application/application.cpp index 0f4834f4..0f3c9893 100644 --- a/src/application/application.cpp +++ b/src/application/application.cpp @@ -32,6 +32,32 @@ namespace lol { +class null_display +{ + friend class ApplicationDisplayData; + +public: + null_display(char const *, ivec2) {} + virtual ~null_display() {} + +protected: + void SetResolution(ivec2) {} + void SetPosition(ivec2) {} + + void Enable() {} + void Disable() {} +}; + +class null_app +{ +public: + null_app(char const *, ivec2, float) {} + virtual ~null_app() {} + + void ShowPointer(bool) {} + void Tick() {} +}; + //----------------------------------------------------------------------------- class ApplicationDisplayData { @@ -69,7 +95,7 @@ protected: /* FIXME: this macro is only deactivated if we include "lolgl.h" */ //NOT HANDLED YET #else -# error No application class available on this platform + null_display display; #endif }; @@ -129,7 +155,7 @@ class ApplicationData /* FIXME: this macro is only deactivated if we include "lolgl.h" */ EglApp app; #else -# error No application class available on this platform + null_app app; #endif };