2010-03-04 11:24:28 +01:00
project(OpenMW)
2012-01-29 23:28:05 +04:00
if (APPLE)
set(APP_BUNDLE_NAME "${CMAKE_PROJECT_NAME}.app")
set(APP_BUNDLE_DIR "${OpenMW_BINARY_DIR}/${APP_BUNDLE_NAME}")
2011-07-31 20:20:52 +02:00
2011-07-27 14:15:28 +04:00
# using 10.6 sdk
set(CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.6.sdk")
2012-01-29 23:28:05 +04:00
endif (APPLE)
2011-03-27 23:28:46 +04:00
2011-10-22 13:55:06 +02:00
# Macros
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/)
include (OpenMWMacros)
2011-07-08 14:24:09 +02:00
# Version
set (OPENMW_VERSION_MAJOR 0)
2012-02-14 09:26:06 +01:00
set (OPENMW_VERSION_MINOR 12)
set (OPENMW_VERSION_RELEASE 0)
2011-07-08 14:24:09 +02:00
2011-07-08 14:53:01 +02:00
set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VERSION_RELEASE}")
2011-07-08 14:24:09 +02:00
2011-07-08 14:52:34 +02:00
# doxygen main page
configure_file ("${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp.cmake" "${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp")
2010-08-13 17:11:03 +02:00
# Sound source selection
2010-08-16 17:14:37 +02:00
option(USE_AUDIERE "use Audiere for sound" OFF)
2010-08-13 22:30:22 +02:00
option(USE_FFMPEG "use ffmpeg for sound" OFF)
2010-08-16 17:14:37 +02:00
option(USE_MPG123 "use mpg123 + libsndfile for sound" ON)
2010-08-13 17:11:03 +02:00
2011-01-04 20:42:09 +01:00
find_program(DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems")
2010-09-10 00:56:22 +02:00
# Location of morrowind data files
2011-01-04 20:42:09 +01:00
if(DPKG_PROGRAM)
set(MORROWIND_DATA_FILES "/usr/share/games/openmw/data/" CACHE PATH "location of Morrowind data files")
2011-04-24 12:41:55 +02:00
set(MORROWIND_RESOURCE_FILES "/usr/share/games/openmw/resources/" CACHE PATH "location of OpenMW resources files")
2011-01-04 20:42:09 +01:00
else()
2011-03-12 03:00:42 +03:00
if (APPLE)
2011-06-26 20:15:42 +04:00
set(MORROWIND_DATA_FILES "./data" CACHE PATH "location of Morrowind data files")
set(MORROWIND_RESOURCE_FILES "./resources" CACHE PATH "location of OpenMW resources files")
2011-03-09 01:42:04 +03:00
else()
2011-03-12 03:00:42 +03:00
set(MORROWIND_DATA_FILES "data" CACHE PATH "location of Morrowind data files")
2011-04-24 12:41:55 +02:00
set(MORROWIND_RESOURCE_FILES "resources" CACHE PATH "location of OpenMW resources files")
2011-03-09 01:42:04 +03:00
endif(APPLE)
endif(DPKG_PROGRAM)
2010-09-10 00:56:22 +02:00
2010-09-19 02:01:01 +02:00
if (WIN32)
option(USE_DEBUG_CONSOLE "whether a debug console should be enabled for debug builds, if false debug output is redirected to Visual Studio output" ON)
endif()
2010-02-28 14:51:17 +01:00
# We probably support older versions than this.
cmake_minimum_required(VERSION 2.6)
2010-08-30 02:12:54 +01:00
#
# Pre-built binaries being used?
#
2010-08-30 11:19:45 +01:00
IF(EXISTS "${CMAKE_SOURCE_DIR}/prebuilt/vc100-mt-gd/ogre_1_7_1")
set(PREBUILT_DIR "${CMAKE_SOURCE_DIR}/prebuilt/vc100-mt-gd")
message (STATUS "OpenMW pre-built binaries found at ${PREBUILT_DIR}.")
2011-01-30 13:19:41 +01:00
2010-08-30 11:19:45 +01:00
SET(ENV{OGRE_HOME} "${PREBUILT_DIR}/ogre_1_7_1")
2011-01-30 13:19:41 +01:00
2010-08-30 11:19:45 +01:00
SET(ENV{BOOST_ROOT} "${PREBUILT_DIR}/boost_1_42_0")
2010-08-30 02:12:54 +01:00
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
set(ENV{BOOST_INCLUDEDIR} "${BOOST_ROOT}/include")
set(ENV{BOOST_LIBRARYDIR} "${BOOST_ROOT}/lib")
2011-01-30 13:19:41 +01:00
2010-08-30 11:19:45 +01:00
set(ENV{FREETYPE_DIR} "${PREBUILT_DIR}/freetype-2.3.5-1")
2011-01-30 13:19:41 +01:00
2010-08-30 02:12:54 +01:00
set(USE_MPG123 OFF)
2011-01-30 13:19:41 +01:00
set(USE_AUDIERE ON)
2010-08-30 11:19:45 +01:00
set(AUDIERE_INCLUDE_DIR "${PREBUILT_DIR}/audiere-1.9.4/include")
set(AUDIERE_LIBRARY "${PREBUILT_DIR}/audiere-1.9.4/lib/audiere.lib")
2011-01-30 13:19:41 +01:00
2010-08-30 11:19:45 +01:00
set(ENV{OPENALDIR} "${PREBUILT_DIR}/OpenAL 1.1 SDK")
2011-07-08 14:24:09 +02:00
2011-05-31 21:55:08 -06:00
set(BULLET_ROOT "${PREBUILT_DIR}/bullet")
2010-08-30 02:12:54 +01:00
ELSE()
message (STATUS "OpenMW pre-built binaries not found. Using standard locations.")
ENDIF()
2010-06-25 22:28:59 +02:00
# source directory: libs
2010-06-08 13:53:34 +02:00
2010-07-08 22:53:14 +02:00
set(LIBDIR ${CMAKE_SOURCE_DIR}/libs)
2010-07-16 14:26:46 +02:00
2010-07-08 22:53:14 +02:00
set(MANGLE_VFS ${LIBDIR}/mangle/vfs/servers/ogre_vfs.cpp)
2010-07-16 14:26:46 +02:00
set(MANGLE_INPUT ${LIBDIR}/mangle/input/servers/ois_driver.cpp)
set(MANGLE_ALL ${MANGLE_VFS} ${MANGLE_INPUT})
source_group(libs\\mangle FILES ${MANGLE_ALL})
2010-06-07 16:43:42 +02:00
2010-07-16 14:26:46 +02:00
set(OENGINE_OGRE
${LIBDIR}/openengine/ogre/renderer.cpp
${LIBDIR}/openengine/ogre/mouselook.cpp
2012-02-18 18:25:28 +01:00
${LIBDIR}/openengine/ogre/fader.cpp
2010-07-16 14:26:46 +02:00
)
set(OENGINE_GUI
2010-07-16 21:49:36 +02:00
${LIBDIR}/openengine/gui/events.cpp
2010-07-16 14:26:46 +02:00
${LIBDIR}/openengine/gui/manager.cpp
2010-07-16 21:49:36 +02:00
)
2010-08-13 17:11:03 +02:00
2011-02-26 16:37:47 +01:00
set(OENGINE_BULLET
${LIBDIR}/openengine/bullet/btKinematicCharacterController.cpp
${LIBDIR}/openengine/bullet/btKinematicCharacterController.h
${LIBDIR}/openengine/bullet/BtOgre.cpp
${LIBDIR}/openengine/bullet/BtOgreExtras.h
${LIBDIR}/openengine/bullet/BtOgreGP.h
${LIBDIR}/openengine/bullet/BtOgrePG.h
${LIBDIR}/openengine/bullet/CMotionState.cpp
${LIBDIR}/openengine/bullet/CMotionState.h
${LIBDIR}/openengine/bullet/physic.cpp
${LIBDIR}/openengine/bullet/physic.hpp
2011-03-19 19:54:18 +01:00
${LIBDIR}/openengine/bullet/BulletShapeLoader.cpp
${LIBDIR}/openengine/bullet/BulletShapeLoader.h
2011-02-26 16:37:47 +01:00
)
2010-08-13 17:11:03 +02:00
# Sound setup
if (USE_AUDIERE)
set(MANGLE_SOUND_OUTPUT
${LIBDIR}/mangle/sound/sources/audiere_source.cpp
2010-08-16 17:14:37 +02:00
${LIBDIR}/mangle/sound/sources/sample_reader.cpp
2010-08-13 17:11:03 +02:00
${LIBDIR}/mangle/stream/clients/audiere_file.cpp)
find_package(Audiere REQUIRED)
2010-08-13 19:38:58 +02:00
set(SOUND_INPUT_INCLUDES ${AUDIERE_INCLUDE_DIR})
2010-08-13 17:11:03 +02:00
set(SOUND_INPUT_LIBRARY ${AUDIERE_LIBRARY})
2010-08-13 22:30:22 +02:00
set(SOUND_DEFINE -DOPENMW_USE_AUDIERE)
2010-08-13 17:11:03 +02:00
endif (USE_AUDIERE)
if (USE_FFMPEG)
set(MANGLE_SOUND_OUTPUT
${LIBDIR}/mangle/sound/sources/ffmpeg_source.cpp)
find_package(FFMPEG REQUIRED)
2010-08-13 19:38:58 +02:00
set(SOUND_INPUT_INCLUDES ${FFMPEG_INCLUDE_DIR})
2010-08-13 17:11:03 +02:00
set(SOUND_INPUT_LIBRARY ${FFMPEG_LIBRARIES})
2010-08-13 22:30:22 +02:00
set(SOUND_DEFINE -DOPENMW_USE_FFMPEG)
2010-08-13 17:11:03 +02:00
endif (USE_FFMPEG)
2010-08-13 22:30:22 +02:00
if (USE_MPG123)
set(MANGLE_SOUND_OUTPUT
2010-08-16 17:14:37 +02:00
${LIBDIR}/mangle/sound/sources/mpg123_source.cpp
${LIBDIR}/mangle/sound/sources/libsndfile.cpp
${LIBDIR}/mangle/sound/sources/sample_reader.cpp)
2010-08-13 22:30:22 +02:00
find_package(MPG123 REQUIRED)
2010-08-16 17:14:37 +02:00
find_package(SNDFILE REQUIRED)
set(SOUND_INPUT_INCLUDES ${MPG123_INCLUDE_DIR} ${SNDFILE_INCLUDE_DIR})
set(SOUND_INPUT_LIBRARY ${MPG123_LIBRARY} ${SNDFILE_LIBRARY})
2010-08-13 22:30:22 +02:00
set(SOUND_DEFINE -DOPENMW_USE_MPG123)
endif (USE_MPG123)
2010-08-12 16:13:54 +02:00
set(OENGINE_SOUND
# Mangle and OEngine sound files are sort of intertwined, so put
# them together here
${LIBDIR}/openengine/sound/sndmanager.cpp
${LIBDIR}/mangle/sound/outputs/openal_out.cpp
2010-08-13 17:11:03 +02:00
${MANGLE_SOUND_OUTPUT}
2010-08-12 16:13:54 +02:00
)
2011-02-26 16:37:47 +01:00
set(OENGINE_ALL ${OENGINE_OGRE} ${OENGINE_GUI} ${OENGINE_SOUND} ${OENGINE_BULLET})
2010-07-16 14:26:46 +02:00
source_group(libs\\openengine FILES ${OENGINE_ALL})
set(OPENMW_LIBS ${MANGLE_ALL} ${OENGINE_ALL})
2010-06-25 22:28:59 +02:00
set(OPENMW_LIBS_HEADER)
2010-08-13 18:16:38 +02:00
2010-03-04 11:24:28 +01:00
# Platform specific
if (WIN32)
2010-07-04 20:17:10 -07:00
set(PLATFORM_INCLUDE_DIR "platform")
add_definitions(-DBOOST_ALL_NO_LIB)
2010-03-04 11:24:28 +01:00
else (WIN32)
set(PLATFORM_INCLUDE_DIR "")
2011-01-09 10:22:21 +01:00
find_path (UUID_INCLUDE_DIR uuid/uuid.h)
include_directories(${UUID_INCLUDE_DIR})
2010-03-04 11:24:28 +01:00
endif (WIN32)
2010-08-30 02:12:54 +01:00
if (MSVC10)
2011-01-10 13:47:48 -07:00
set(PLATFORM_INCLUDE_DIR "")
add_definitions(-DMYGUI_DONT_REPLACE_NULLPTR)
2010-08-30 02:12:54 +01:00
endif()
2010-03-04 11:24:28 +01:00
2011-03-07 06:03:39 +03:00
if (APPLE)
2011-03-12 03:00:42 +03:00
set(Boost_USE_STATIC_LIBS ON)
2011-03-07 06:03:39 +03:00
endif (APPLE)
2010-02-28 14:51:17 +01:00
# Dependencies
2010-06-06 12:56:46 +02:00
2010-03-04 11:24:28 +01:00
find_package(OGRE REQUIRED)
2010-07-04 20:17:10 -07:00
find_package(Boost REQUIRED COMPONENTS system filesystem program_options thread)
2010-06-06 12:52:21 +02:00
find_package(OIS REQUIRED)
2010-08-12 16:13:54 +02:00
find_package(OpenAL REQUIRED)
2011-01-30 13:19:41 +01:00
find_package(Bullet REQUIRED)
2010-06-06 12:56:46 +02:00
include_directories("."
2011-01-09 10:22:21 +01:00
${OGRE_INCLUDE_DIR} ${OGRE_INCLUDE_DIR}/Ogre ${OGRE_INCLUDE_DIR}/OGRE
2012-02-25 18:05:29 +04:00
${OIS_INCLUDE_DIRS} ${Boost_INCLUDE_DIR}
2010-06-27 14:08:53 -07:00
${PLATFORM_INCLUDE_DIR}
2010-07-08 11:53:59 +02:00
${CMAKE_HOME_DIRECTORY}/extern/mygui_3.0.1/MyGUIEngine/include
${CMAKE_HOME_DIRECTORY}/extern/mygui_3.0.1/OgrePlatform/include
2010-08-30 02:12:54 +01:00
${OPENAL_INCLUDE_DIR}
2011-01-09 10:22:21 +01:00
${UUID_INCLUDE_DIR}
2010-07-16 14:26:46 +02:00
${LIBDIR}
2010-07-08 11:53:59 +02:00
)
2010-06-03 19:40:23 -04:00
link_directories(${Boost_LIBRARY_DIRS} ${OGRE_LIB_DIR})
2010-02-28 14:51:17 +01:00
2012-01-30 00:28:02 +04:00
if(APPLE)
# List used Ogre plugins
SET(USED_OGRE_PLUGINS "RenderSystem_GL"
"Plugin_OctreeSceneManager"
2012-02-20 18:39:12 +01:00
"Plugin_CgProgramManager"
2012-01-30 00:28:02 +04:00
"Plugin_ParticleFX")
endif(APPLE)
2010-07-07 21:36:15 +02:00
add_subdirectory( extern/mygui_3.0.1 )
2010-06-27 17:01:01 -07:00
2010-09-14 12:29:26 +02:00
# Make sure that certain libraries are used as static libraries
# This is in effect turns off __declspec (dllexport) for windows
# Each library will also need to be configured to build as a static lib
# MyGUI: extern/mygui_3.0.0/
add_definitions(-DMYGUI_STATIC)
2010-06-06 12:56:46 +02:00
# Specify build paths
2011-03-27 23:28:46 +04:00
if (APPLE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APP_BUNDLE_DIR}/Contents/MacOS")
else (APPLE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}")
endif (APPLE)
2010-06-06 12:56:46 +02:00
# Other files
2011-04-24 12:39:50 +02:00
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg.local
2011-04-28 09:30:45 +02:00
"${OpenMW_BINARY_DIR}/openmw.cfg")
configure_file(${OpenMW_SOURCE_DIR}/files/openmw.cfg
"${OpenMW_BINARY_DIR}/openmw.cfg.install")
2011-04-24 12:39:50 +02:00
2010-06-06 12:56:46 +02:00
if (WIN32)
2011-03-27 23:28:46 +04:00
configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.win32
"${OpenMW_BINARY_DIR}/plugins.cfg" COPYONLY)
2011-03-07 06:03:39 +03:00
endif (WIN32)
2011-04-08 19:24:21 +02:00
2011-03-28 20:25:55 +02:00
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
2011-03-27 23:28:46 +04:00
configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.linux
"${OpenMW_BINARY_DIR}/plugins.cfg")
2011-03-29 00:34:35 +02:00
endif()
2011-04-08 19:24:21 +02:00
2011-03-07 06:03:39 +03:00
if (APPLE)
2011-03-27 23:28:46 +04:00
configure_file(${OpenMW_SOURCE_DIR}/files/plugins.cfg.mac
2011-06-26 20:15:42 +04:00
"${OpenMW_BINARY_DIR}/plugins.cfg")
2011-04-08 19:24:21 +02:00
2011-03-27 23:28:46 +04:00
configure_file(${OpenMW_SOURCE_DIR}/files/mac/Info.plist
2012-01-30 00:28:02 +04:00
"${APP_BUNDLE_DIR}/Contents/Info.plist")
2011-04-08 19:24:21 +02:00
2011-03-27 23:28:46 +04:00
configure_file(${OpenMW_SOURCE_DIR}/files/mac/openmw.icns
"${APP_BUNDLE_DIR}/Contents/Resources/OpenMW.icns" COPYONLY)
# prepare plugins
2012-03-12 20:47:47 +04:00
if (${CMAKE_BUILD_TYPE} MATCHES "Release")
set(OPENMW_RELEASE_BUILD 1)
endif()
if (${CMAKE_BUILD_TYPE} MATCHES "RelWithDebugInfo")
set(OPENMW_RELEASE_BUILD 1)
endif()
if (${OPENMW_RELEASE_BUILD})
set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_REL})
else()
set(OGRE_PLUGIN_DIR ${OGRE_PLUGIN_DIR_DBG})
endif()
2012-01-30 00:28:02 +04:00
foreach(plugin ${USED_OGRE_PLUGINS})
configure_file("${OGRE_PLUGIN_DIR}/${plugin}.dylib"
"${APP_BUNDLE_DIR}/Contents/Plugins/${plugin}.dylib"
COPYONLY)
endforeach()
2011-03-07 06:03:39 +03:00
endif (APPLE)
2010-06-06 12:56:46 +02:00
2010-06-18 21:07:15 -04:00
2010-06-25 14:41:49 +02:00
# Compiler settings
if (CMAKE_COMPILER_IS_GNUCC)
2010-09-10 19:34:38 +02:00
#add_definitions (-Wall -Werror)
add_definitions (-Wall)
2010-06-25 14:41:49 +02:00
endif (CMAKE_COMPILER_IS_GNUCC)
2011-01-04 20:42:09 +01:00
if(DPKG_PROGRAM)
SET(CMAKE_INSTALL_PREFIX "/usr")
if(IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.git")
exec_program("git" ${CMAKE_CURRENT_SOURCE_DIR} ARGS "describe" OUTPUT_VARIABLE GIT_VERSION )
STRING(REGEX REPLACE "openmw-" "" VERSION_STRING "${GIT_VERSION}")
exec_program("git" ARGS "config --get user.name" OUTPUT_VARIABLE GIT_NAME )
exec_program("git" ARGS "config --get user.email" OUTPUT_VARIABLE GIT_EMAIL)
set(PACKAGE_MAINTAINER "${GIT_NAME} <${GIT_EMAIL}>")
else()
2011-07-08 14:24:09 +02:00
set(VERSION_STRING "${OPENMW_VERSION}")
2011-01-04 20:42:09 +01:00
set(PACKAGE_MAINTAINER "unknown")
endif()
2011-09-30 09:36:06 +02:00
#Install icon and desktop file
INSTALL(FILES "${OpenMW_SOURCE_DIR}/files/openmw.desktop" DESTINATION "share/applications/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
INSTALL(FILES "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.png" DESTINATION "share/pixmaps/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
2011-01-04 20:42:09 +01:00
#Install global configuration files
2011-04-28 09:30:45 +02:00
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "../etc/openmw/" RENAME "openmw.cfg" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
2011-01-04 20:42:09 +01:00
INSTALL(FILES "${OpenMW_BINARY_DIR}/plugins.cfg" DESTINATION "../etc/openmw/" PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ COMPONENT "openmw")
#Install resources
INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION "share/games/openmw/" FILE_PERMISSIONS OWNER_READ GROUP_READ WORLD_READ COMPONENT "Resources")
INSTALL(DIRECTORY DESTINATION "share/games/openmw/data/" COMPONENT "Resources")
SET(CPACK_GENERATOR "DEB")
SET(CPACK_PACKAGE_NAME "openmw")
2012-02-26 12:12:00 +01:00
SET(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://openmw.org")
2011-01-04 20:42:09 +01:00
SET(CPACK_DEBIAN_PACKAGE_PRIORITY "optional")
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "${PACKAGE_MAINTAINER}")
SET(CPACK_DEBIAN_PACKAGE_DESCRIPTION "A reimplementation of The Elder Scrolls III: Morrowind
OpenMW is a reimplementation of the Bethesda Game Studios game The Elder Scrolls III: Morrowind.
Data files from the original game is required to run it.")
SET(CPACK_DEBIAN_PACKAGE_NAME "openmw")
SET(CPACK_DEBIAN_PACKAGE_VERSION "${VERSION_STRING}")
2011-09-30 09:36:06 +02:00
SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW esmtool;Esmtool omwlauncher;OMWLauncher")
2011-10-12 13:58:59 +02:00
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libogre-1.7.3 (>= 1.7.3), libbullet0 (>= 2.77), libboost-filesystem1.46.1 (>= 1.46.1), libboost-program-options1.46.1 (>= 1.46.1), libboost-system1.46.1 (>= 1.46.1), libboost-thread1.46.1 (>= 1.46.1), libc6 (>= 2.11.2), libfreetype6 (>= 2.2.1), libgcc1 (>= 1:4.1.1), libmpg123-0 (>= 1.12.1), libois-1.3.0 (>= 1.3.0), libopenal1 (>= 1:1.12.854), libsndfile1 (>= 1.0.23), libstdc++6 (>= 4.4.5), libuuid1 (>= 2.17.2), libqtgui4 (>= 4.7.0)")
2011-01-04 20:42:09 +01:00
SET(CPACK_DEBIAN_PACKAGE_SECTION "Games")
string(TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE)
execute_process(
COMMAND ${DPKG_PROGRAM} --print-architecture
OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME_LOWERCASE}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
include(CPack)
endif(DPKG_PROGRAM)
2012-01-29 23:08:02 +01:00
if(WIN32)
FILE(GLOB files "${OpenMW_BINARY_DIR}/Release/*.*")
INSTALL(FILES ${files} DESTINATION ".")
INSTALL(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" DESTINATION "." RENAME "openmw.cfg")
INSTALL(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION ".")
SET(CPACK_GENERATOR "NSIS")
SET(CPACK_PACKAGE_NAME "OpenMW")
SET(CPACK_PACKAGE_VENDOR "OpenMW.org")
SET(CPACK_PACKAGE_VERSION ${OPENMW_VERSION})
SET(CPACK_PACKAGE_VERSION_MAJOR ${OPENMW_VERSION_MAJOR})
SET(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINO})
SET(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE})
SET(CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW;esmtool;Esmtool;omwlauncher;OpenMW Launcher")
SET(CPACK_PACKAGE_DESCRIPTION_FILE "${OpenMW_SOURCE_DIR}/readme.txt")
SET(CPACK_RESOURCE_FILE_LICENSE "${OpenMW_SOURCE_DIR}/GPL3.txt")
SET(CPACK_NSIS_EXECUTABLES_DIRECTORY ".")
SET(CPACK_NSIS_DISPLAY_NAME "OpenMW")
SET(CPACK_NSIS_HELP_LINK "http:\\\\\\\\www.openmw.org")
SET(CPACK_NSIS_URL_INFO_ABOUT "http:\\\\\\\\www.openmw.org")
SET(CPACK_NSIS_INSTALLED_ICON_NAME "omwlauncher.exe")
2012-03-09 15:34:47 +01:00
SET(CPACK_NSIS_MUI_ICON "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.ico")
SET(CPACK_NSIS_MUI_UNIICON "${OpenMW_SOURCE_DIR}/apps/launcher/resources/images/openmw.ico")
# SET(CPACK_PACKAGE_ICON "${OpenMW_SOURCE_DIR}\\\\files\\\\openmw.bmp")
2012-01-29 23:08:02 +01:00
2012-03-01 01:32:02 +01:00
SET(VCREDIST32 "${OpenMW_BINARY_DIR}/vcredist_x86.exe")
if(EXISTS ${VCREDIST32})
INSTALL(FILES ${VCREDIST32} DESTINATION "redist")
2012-01-29 23:12:40 +01:00
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x86.exe\\\" /q'" )
2012-03-01 01:32:02 +01:00
endif(EXISTS ${VCREDIST32})
SET(VCREDIST64 "${OpenMW_BINARY_DIR}/vcredist_x64.exe")
if(EXISTS ${VCREDIST64})
INSTALL(FILES ${VCREDIST64} DESTINATION "redist")
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\"$INSTDIR\\\\redist\\\\vcredist_x64.exe\\\" /q'" )
endif(EXISTS ${VCREDIST64})
2012-02-16 08:52:26 +01:00
SET(OALREDIST "${OpenMW_BINARY_DIR}/oalinst.exe")
if(EXISTS ${OALREDIST})
INSTALL(FILES ${OALREDIST} DESTINATION "redist")
SET(CPACK_NSIS_EXTRA_INSTALL_COMMANDS "${CPACK_NSIS_EXTRA_INSTALL_COMMANDS}
ExecWait '\\\"$INSTDIR\\\\redist\\\\oalinst.exe\\\" /s'" )
endif(EXISTS ${OALREDIST})
2012-01-29 23:12:40 +01:00
2012-03-01 01:32:02 +01:00
if(CMAKE_CL_64)
SET(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
endif()
2012-01-29 23:08:02 +01:00
include(CPack)
endif(WIN32)
2011-11-06 09:30:15 +01:00
# Components
add_subdirectory (components)
2010-07-08 22:53:14 +02:00
# Apps and tools
add_subdirectory( apps/openmw )
2010-07-21 13:52:28 +02:00
option(BUILD_ESMTOOL "build ESM inspector" ON)
if (BUILD_ESMTOOL)
add_subdirectory( apps/esmtool )
endif()
2010-09-19 02:01:01 +02:00
2011-09-29 14:59:20 +02:00
option(BUILD_LAUNCHER "build Launcher inspector" ON)
if (BUILD_LAUNCHER)
add_subdirectory( apps/launcher )
endif()
2011-03-29 01:31:42 +02:00
2010-09-19 02:01:01 +02:00
if (WIN32)
2011-01-04 14:40:28 +03:00
if (MSVC)
2010-09-19 02:01:01 +02:00
if (USE_DEBUG_CONSOLE)
2011-01-04 14:40:28 +03:00
set_target_properties(openmw PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE")
set_target_properties(openmw PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:CONSOLE")
set_target_properties(openmw PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
2010-09-19 02:01:01 +02:00
else()
2011-01-04 14:40:28 +03:00
# Turn off debug console, debug output will be written to visual studio output instead
set_target_properties(openmw PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:WINDOWS")
set_target_properties(openmw PROPERTIES LINK_FLAGS_RELWITHDEBINFO "/SUBSYSTEM:WINDOWS")
2010-09-19 02:01:01 +02:00
endif()
2011-01-30 13:19:41 +01:00
2010-09-19 02:01:01 +02:00
# Release builds use the debug console
set_target_properties(openmw PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:CONSOLE")
set_target_properties(openmw PROPERTIES COMPILE_DEFINITIONS_RELEASE "_CONSOLE")
set_target_properties(openmw PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:CONSOLE")
2012-03-13 21:55:50 +01:00
# Play a bit with the warning levels
2012-03-13 22:47:39 +01:00
set(WARNINGS "/Wall") # Since windows can only disable specific warnings, not enable them
2012-03-13 21:55:50 +01:00
set(WARNINGS_DISABLE
2012-03-13 23:51:48 +01:00
# Warnings that aren't enabled normally and don't need to be enabled
# They're unneeded and sometimes completely retarded warnings that /Wall enables
# Not going to bother commenting them as they tend to warn on every standard library files
4061 4263 4264 4266 4350 4514 4548 4571 4610 4619 4623 4625 4626 4628 4640 4668 4710 4820 4826 4917 4946
# Warnings that are thrown on standard libraries and not OpenMW
4347 # Non-template function with same name and parameter count as template function
4510 4512 # Unable to generate copy constructor/assignment operator as it's not public in the base
4706 # Assignment in conditional expression
4986 # Undocumented warning that occurs in the crtdbg.h file
4996 # Function was declared deprecated
# OpenMW specific warnings
2012-03-13 23:04:33 +01:00
4099 # Type mismatch, declared class or struct is defined with other type
2012-03-13 22:47:39 +01:00
4100 # Unreferenced formal parameter (-Wunused-parameter)
2012-03-13 23:04:33 +01:00
4101 # Unreferenced local variable
2012-03-13 22:47:39 +01:00
4127 # Conditional expression is constant
4146 # Unary minus on unsigned type, result still unsigned
4242 # Storing value in a variable of a smaller type, possible loss of data
2012-03-13 23:04:33 +01:00
4244 # Storing value of one type in variable of another (size_t in int, for example)
2012-03-13 22:47:39 +01:00
4265 # Class has virtual functions but no virtual desctructor (-Wnon-virtual-dtor)
2012-03-13 23:04:33 +01:00
4305 # Truncating value (double to float, for example)
4309 # Variable overflow, trying to store 128 in a signed char for example
2012-03-13 22:47:39 +01:00
4355 # Using 'this' in member initialization list
4365 # Variable signed/unsigned mismatch
4701 # Potentially uninitialized local variable used
4702 # Unreachable code
2012-03-13 21:55:50 +01:00
)
foreach(d ${WARNINGS_DISABLE})
set(WARNINGS "${WARNINGS} /wd${d}")
endforeach(d)
2012-03-13 22:47:39 +01:00
2012-03-13 21:55:50 +01:00
set_target_properties(components PROPERTIES COMPILE_FLAGS ${WARNINGS})
set_target_properties(omwlauncher PROPERTIES COMPILE_FLAGS ${WARNINGS})
set_target_properties(openmw PROPERTIES COMPILE_FLAGS ${WARNINGS})
2011-01-04 14:40:28 +03:00
endif(MSVC)
2011-01-08 23:58:47 +03:00
# Same for MinGW
if (MINGW)
if (USE_DEBUG_CONSOLE)
set_target_properties(openmw PROPERTIES LINK_FLAGS_DEBUG "-Wl,-subsystem,console")
set_target_properties(openmw PROPERTIES LINK_FLAGS_RELWITHDEBINFO "-Wl,-subsystem,console")
set_target_properties(openmw PROPERTIES COMPILE_DEFINITIONS_DEBUG "_CONSOLE")
else(USE_DEBUG_CONSOLE)
set_target_properties(openmw PROPERTIES LINK_FLAGS_DEBUG "-Wl,-subsystem,windows")
set_target_properties(openmw PROPERTIES LINK_FLAGS_RELWITHDEBINFO "-Wl,-subsystem,windows")
endif(USE_DEBUG_CONSOLE)
set_target_properties(openmw PROPERTIES LINK_FLAGS_RELEASE "-Wl,-subsystem,console")
set_target_properties(openmw PROPERTIES LINK_FLAGS_MINSIZEREL "-Wl,-subsystem,console")
set_target_properties(openmw PROPERTIES COMPILE_DEFINITIONS_RELEASE "_CONSOLE")
endif(MINGW)
2011-01-30 13:19:41 +01:00
2011-01-04 14:40:28 +03:00
# TODO: At some point release builds should not use the console but rather write to a log file
#set_target_properties(openmw PROPERTIES LINK_FLAGS_RELEASE "/SUBSYSTEM:WINDOWS")
#set_target_properties(openmw PROPERTIES LINK_FLAGS_MINSIZEREL "/SUBSYSTEM:WINDOWS")
2010-09-19 02:01:01 +02:00
endif()
2012-01-29 23:28:05 +04:00
# Apple bundling
if (APPLE)
2012-02-13 10:31:43 +04:00
set(INSTALL_SUBDIR OpenMW)
2012-01-29 23:28:05 +04:00
2012-02-13 10:31:43 +04:00
install(DIRECTORY "${APP_BUNDLE_DIR}" USE_SOURCE_PERMISSIONS DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime)
install(DIRECTORY "${OpenMW_BINARY_DIR}/resources" DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime)
install(FILES "${OpenMW_BINARY_DIR}/openmw.cfg.install" RENAME "openmw.cfg" DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime)
install(FILES "${OpenMW_BINARY_DIR}/plugins.cfg" DESTINATION "${INSTALL_SUBDIR}" COMPONENT Runtime)
2012-02-28 17:19:44 +01:00
2012-02-01 20:48:13 +04:00
set(CPACK_GENERATOR "DragNDrop")
set(CPACK_PACKAGE_VERSION ${OPENMW_VERSION})
set(CPACK_PACKAGE_VERSION_MAJOR ${OPENMW_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${OPENMW_VERSION_MINO})
set(CPACK_PACKAGE_VERSION_PATCH ${OPENMW_VERSION_RELEASE})
2012-02-13 10:31:43 +04:00
set(APPS "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}")
2012-02-01 20:48:13 +04:00
set(PLUGINS "")
# Scan Plugins dir for *.dylibs
2012-02-15 11:27:51 +04:00
set(PLUGIN_SEARCH_ROOT "${APP_BUNDLE_DIR}/Contents/Plugins")
file(GLOB_RECURSE ALL_PLUGINS "${PLUGIN_SEARCH_ROOT}/*.dylib")
2012-02-01 20:48:13 +04:00
2012-02-15 11:27:51 +04:00
set(PLUGIN_INSTALL_BASE "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}/Contents/Plugins")
2012-02-01 20:48:13 +04:00
foreach(PLUGIN ${ALL_PLUGINS})
2012-02-15 11:27:51 +04:00
string(REPLACE "${PLUGIN_SEARCH_ROOT}/" "" PLUGIN_RELATIVE "${PLUGIN}")
set(PLUGINS ${PLUGINS} "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}")
2012-02-01 20:48:13 +04:00
endforeach()
#For now, search unresolved dependencies only in default system paths, so if you put unresolveable (i.e. with @executable_path in id name) lib or framework somewhere else, it would fail
set(DIRS "")
# Overriding item resolving during installation, it needed if
# some library already has be "fixed up", i.e. its id name contains @executable_path,
# but library is not embedded in bundle. For example, it's Ogre.framework from Ogre SDK.
# Current implementation of GetPrerequsities/BundleUtilities doesn't handle that case.
2012-02-14 09:26:06 +01:00
#
2012-02-01 20:48:13 +04:00
# Current limitations:
# 1. Handles only frameworks, not simple libs
INSTALL(CODE "
set(CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES})
set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(CMAKE_SYSTEM_FRAMEWORK_PATH ${CMAKE_SYSTEM_FRAMEWORK_PATH})
set(OPENMW_RESOLVED_ITEMS \"\")
function(gp_resolve_item_override context item exepath dirs resolved_item_var resolved_var)
if(item MATCHES \"@executable_path\" AND NOT \${\${resolved_var}})
if (item MATCHES \"Frameworks\") # if it is a framework
# get last segment of path
get_filename_component(fname \"\${item}\" NAME_WE)
find_library(ri NAMES \${fname} PATHS \${exepath} \${dirs} /Library/Frameworks)
if (ri)
message(STATUS \"found \${ri} for \${item}\")
string(REGEX REPLACE \"^.*/Frameworks/.*\\\\.framework\" \"\" item_part \${item})
set(ri \"\${ri}\${item_part}\")
set(\${resolved_item_var} \${ri} PARENT_SCOPE)
set(\${resolved_var} 1 PARENT_SCOPE)
set(OPENMW_RESOLVED_ITEMS \${_OPENMW_RESOLVED_ITEMS} \${ri})
endif()
else()
# code path for standard (non-framework) libs (ogre & qt pugins)
2012-01-29 23:28:05 +04:00
endif()
endif()
2012-02-01 20:48:13 +04:00
endfunction(gp_resolve_item_override)
cmake_policy(SET CMP0009 OLD)
set(BU_CHMOD_BUNDLE_ITEMS ON)
include(BundleUtilities)
fixup_bundle(\"${APPS}\" \"${PLUGINS}\" \"${DIRS}\")
" COMPONENT Runtime)
2012-01-29 23:28:05 +04:00
include(CPack)
set(CMAKE_EXE_LINKER_FLAGS "-arch i386")
set(CMAKE_CXX_FLAGS "-arch i386")
2012-02-14 09:26:06 +01:00
endif (APPLE)