]> git.jsancho.org Git - lugaru.git/blobdiff - CMakeLists.txt
CMake: Install required DLLs when building with mingw
[lugaru.git] / CMakeLists.txt
index 81a7d67d6aeaaa02696a6e6d47cbcdccbebc5e99..bdf247f3b3f6ddac0276671d882f2375bfe70563 100644 (file)
@@ -1,6 +1,7 @@
 project(lugaru)
 
 cmake_minimum_required(VERSION 3.5)
+cmake_policy(SET CMP0004 OLD)
 
 INCLUDE(FindPkgConfig)
 
@@ -138,18 +139,23 @@ if(MSVC) # MSVC non-C99 support biting us hard
 endif(MSVC)
 
 if(WIN32)
-  ENABLE_LANGUAGE(RC)
-
-  # !!! FIXME: get rid of WinDefs.{cpp,h}
-  set(LUGARU_SRCS
-    ${LUGARU_SRCS}
-    ${SRCDIR}/WinDefs.cpp
-    ${SRCDIR}/win-res/Lugaru.rc)
-
-  set(LUGARU_H
-    ${LUGARU_H}
-    ${SRCDIR}/WinDefs.h
-    ${SRCDIR}/win-res/resource.h)
+    ADD_CUSTOM_COMMAND( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                        COMMAND ${CMAKE_RC_COMPILER}
+                        -I${SRCDIR}/win-res
+                        -o ${CMAKE_CURRENT_BINARY_DIR}/lugaru_resource.obj
+                        -i${SRCDIR}/win-res/Lugaru.rc
+                        DEPENDS ${SRCDIR}/win-res/Lugaru.rc
+    )
+
+    # !!! FIXME: get rid of this.
+    set(LUGARU_SRCS
+        ${LUGARU_SRCS}
+        ${SRCDIR}/WinDefs.cpp)
+
+    set(LUGARU_H
+        ${LUGARU_H}
+        ${SRCDIR}/WinDefs.h
+        ${SRCDIR}/win-res/resource.h)
 endif(WIN32)
 
 if (APPLE)
@@ -159,16 +165,10 @@ endif (APPLE)
 # Deal with dependencies...
 find_package(OpenGL REQUIRED)
 # force this include dir no matter what on Windows, so we get sane headers.
-if(NOT WIN32)
-    option (LUGARU_FORCE_INTERNAL_OPENGL "Force internal OpenGL headers, even if there's a system version" True)
-    if (LUGARU_FORCE_INTERNAL_OPENGL)
-        include_directories("${DEPDIR}/OpenGL")
-    endif (LUGARU_FORCE_INTERNAL_OPENGL)
-endif(NOT WIN32)
-
-if(WIN32)
+option (LUGARU_FORCE_INTERNAL_OPENGL "Force internal OpenGL headers, even if there's a system version" True)
+if (LUGARU_FORCE_INTERNAL_OPENGL)
     include_directories("${DEPDIR}/OpenGL")
-endif(WIN32)
+endif (LUGARU_FORCE_INTERNAL_OPENGL)
 
 if(MSVC) # More Visual Studio annoyances
     include_directories("${DEPDIR}/msinttypes")
@@ -176,38 +176,21 @@ endif(MSVC)
 
 option (LUGARU_FORCE_INTERNAL_OPENAL "Force internal libOpenAL, even if there's a system version" False)
 if (NOT LUGARU_FORCE_INTERNAL_OPENAL)
-    find_package(OpenAL REQUIRED)
-else(NOT LUGARU_FORCE_INTERNAL_OPENAL)
-    set(OPENAL_FOUND False)
+    if (WIN32)
+        pkg_check_modules(OPENAL openal)
+        set(OPENAL_LIBRARY ${OPENAL_LIBRARIES})
+    else (WIN32)
+        find_package(OpenAL REQUIRED)
+    endif()
 endif (NOT LUGARU_FORCE_INTERNAL_OPENAL)
 
 if (NOT OPENAL_FOUND OR LUGARU_FORCE_INTERNAL_OPENAL)
     message(STATUS "Using internal copy of OpenAL")
-    set(LUGARU_MISSING_DEPS "${LUGARU_MISSING_DEPS} OpenAL")
-    set(OPENALDIR "${DEPDIR}/OpenAL")
-    set(OPENAL_INCLUDE_DIR "${OPENALDIR}/include/AL")
-    set(OPENAL_LIBRARY "")
-
-    if (WIN32)
-        set(LUGARU_HAS_INTERNAL_OPENAL True)
-        if (MSVC)
-            set(OPENAL_LIBRARY
-                ${OPENALDIR}/lib/win32/msvc2008/OpenAL32.lib
-            )
-        endif (MSVC)
-        if (MINGW)
-            set(OPENAL_LIBRARY
-                ${OPENALDIR}/lib/win32/mingw/libOpenAL32.dll.a
-            )
-        endif (MINGW)
-    endif(WIN32)
-
-    if (NOT LUGARU_HAS_INTERNAL_OPENAL)
-        message(ERROR "We don't have a prebuilt OpenAL for this platform.")
-    endif (NOT LUGARU_HAS_INTERNAL_OPENAL)
+    message(ERROR "*** Not implemented, terminating.")
+    # FIXME: We should  allow building OpenAL from source, for all platforms
 endif (NOT OPENAL_FOUND OR LUGARU_FORCE_INTERNAL_OPENAL)
 
-PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
+find_package(sdl2 REQUIRED)
 
 option (LUGARU_FORCE_INTERNAL_PNG "Force internal libPNG, even if there's a system version" False)
 if (NOT LUGARU_FORCE_INTERNAL_PNG)
@@ -418,10 +401,14 @@ include_directories(
     ${CMAKE_SOURCE_DIR}/Source
 )
 
-set(LUGARU_LIBS ${OPENAL_LIBRARY} ${PNG_LIBRARY} ${JPEG_LIBRARY} ${ZLIB_LIBRARIES} ${SDL2_LIBRARIES} ${OPENGL_glu_LIBRARY} ${VORBISFILE_LIBRARY} ${OGG_LIBRARY} ${PLATFORM_LIBS})
+set(LUGARU_LIBS ${OPENAL_LIBRARY} ${PNG_LIBRARY} ${JPEG_LIBRARY} ${ZLIB_LIBRARIES} ${SDL2_LIBRARIES} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${VORBISFILE_LIBRARY} ${OGG_LIBRARY} ${PLATFORM_LIBS})
 
 
-add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H})
+if(WIN32)
+    add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H} lugaru_resource.obj)
+else(WIN32)
+    add_executable(lugaru ${LUGARU_SRCS} ${LUGARU_H})
+endif(WIN32)
 
 target_link_libraries(lugaru ${LUGARU_LIBS})
 
@@ -443,11 +430,24 @@ endif(APPLE)
 
 if(WIN32)
     install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/lugaru.exe DESTINATION ${CMAKE_INSTALL_PREFIX})
-    if(MSVC)
-        install(FILES ${OPENALDIR}/lib/win32/msvc2008/OpenAL32.dll DESTINATION ${CMAKE_INSTALL_PREFIX})
-    endif(MSVC)
     if(MINGW)
-        install(FILES ${OPENALDIR}/lib/win32/mingw/OpenAL32.dll DESTINATION ${CMAKE_INSTALL_PREFIX})
+        set(LIBGCC_S libgcc_s_sjlj-1.dll)
+        if(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64") # MinGW64
+            set(LIBGCC_S libgcc_s_seh-1.dll)
+        endif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86_64")
+        # FIXME: Filter out unneeded DLLs when building against some internal deps
+        set(DLL_ROOT ${CMAKE_FIND_ROOT_PATH}/bin)
+        install(FILES ${DLL_ROOT}/${LIBGCC_S}
+                      ${DLL_ROOT}/libjpeg-62.dll
+                      ${DLL_ROOT}/libogg-0.dll
+                      ${DLL_ROOT}/libpng16-16.dll
+                      ${DLL_ROOT}/libstdc++-6.dll
+                      ${DLL_ROOT}/libvorbis-0.dll
+                      ${DLL_ROOT}/libvorbisfile-3.dll
+                      ${DLL_ROOT}/libwinpthread-1.dll
+                      ${DLL_ROOT}/SDL2.dll
+                      ${DLL_ROOT}/zlib1.dll
+                DESTINATION ${CMAKE_INSTALL_PREFIX})
     endif(MINGW)
 else(WIN32)
     if(APPLE)