project ( OpenMW )
if ( APPLE )
set ( APP_BUNDLE_NAME "${CMAKE_PROJECT_NAME}.app" )
set ( APP_BUNDLE_DIR "${OpenMW_BINARY_DIR}/${APP_BUNDLE_NAME}" )
# using 10.6 sdk
set ( CMAKE_OSX_SYSROOT "/Developer/SDKs/MacOSX10.6.sdk" )
endif ( APPLE )
# Macros
set ( CMAKE_MODULE_PATH ${ CMAKE_SOURCE_DIR } /cmake/ )
include ( OpenMWMacros )
# Version
set ( OPENMW_VERSION_MAJOR 0 )
set ( OPENMW_VERSION_MINOR 12 )
set ( OPENMW_VERSION_RELEASE 0 )
set ( OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VERSION_RELEASE}" )
# doxygen main page
configure_file ( "${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp.cmake" "${OpenMW_SOURCE_DIR}/Docs/mainpage.hpp" )
# Sound source selection
option ( USE_AUDIERE "use Audiere for sound" OFF )
option ( USE_FFMPEG "use ffmpeg for sound" OFF )
option ( USE_MPG123 "use mpg123 + libsndfile for sound" ON )
find_program ( DPKG_PROGRAM dpkg DOC "dpkg program of Debian-based systems" )
# Location of morrowind data files
if ( DPKG_PROGRAM )
set ( MORROWIND_DATA_FILES "/usr/share/games/openmw/data/" CACHE PATH "location of Morrowind data files" )
set ( MORROWIND_RESOURCE_FILES "/usr/share/games/openmw/resources/" CACHE PATH "location of OpenMW resources files" )
else ( )
if ( APPLE )
set ( MORROWIND_DATA_FILES "./data" CACHE PATH "location of Morrowind data files" )
set ( MORROWIND_RESOURCE_FILES "./resources" CACHE PATH "location of OpenMW resources files" )
else ( )
set ( MORROWIND_DATA_FILES "data" CACHE PATH "location of Morrowind data files" )
set ( MORROWIND_RESOURCE_FILES "resources" CACHE PATH "location of OpenMW resources files" )
endif ( APPLE )
endif ( DPKG_PROGRAM )
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 ( )
# We probably support older versions than this.
cmake_minimum_required ( VERSION 2.6 )
#
# Pre-built binaries being used?
#
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}." )
SET ( ENV{OGRE_HOME} "${PREBUILT_DIR}/ogre_1_7_1" )
SET ( ENV{BOOST_ROOT} "${PREBUILT_DIR}/boost_1_42_0" )
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" )
set ( ENV{FREETYPE_DIR} "${PREBUILT_DIR}/freetype-2.3.5-1" )
set ( USE_MPG123 OFF )
set ( USE_AUDIERE ON )
set ( AUDIERE_INCLUDE_DIR "${PREBUILT_DIR}/audiere-1.9.4/include" )
set ( AUDIERE_LIBRARY "${PREBUILT_DIR}/audiere-1.9.4/lib/audiere.lib" )
set ( ENV{OPENALDIR} "${PREBUILT_DIR}/OpenAL 1.1 SDK" )
set ( BULLET_ROOT "${PREBUILT_DIR}/bullet" )
ELSE ( )
message ( STATUS "OpenMW pre-built binaries not found. Using standard locations." )
ENDIF ( )
# source directory: libs
set ( LIBDIR ${ CMAKE_SOURCE_DIR } /libs )
set ( MANGLE_VFS ${ LIBDIR } /mangle/vfs/servers/ogre_vfs.cpp )
set ( MANGLE_INPUT ${ LIBDIR } /mangle/input/servers/ois_driver.cpp )
set ( MANGLE_ALL ${ MANGLE_VFS } ${ MANGLE_INPUT } )
source_group ( libs\\mangle FILES ${ MANGLE_ALL } )
set ( OENGINE_OGRE
$ { L I B D I R } / o p e n e n g i n e / o g r e / r e n d e r e r . c p p
$ { L I B D I R } / o p e n e n g i n e / o g r e / m o u s e l o o k . c p p
$ { L I B D I R } / o p e n e n g i n e / o g r e / f a d e r . c p p
)
set ( OENGINE_GUI
$ { L I B D I R } / o p e n e n g i n e / g u i / e v e n t s . c p p
$ { L I B D I R } / o p e n e n g i n e / g u i / m a n a g e r . c p p
)
set ( OENGINE_BULLET
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / b t K i n e m a t i c C h a r a c t e r C o n t r o l l e r . c p p
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / b t K i n e m a t i c C h a r a c t e r C o n t r o l l e r . h
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / B t O g r e . c p p
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / B t O g r e E x t r a s . h
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / B t O g r e G P . h
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / B t O g r e P G . h
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / C M o t i o n S t a t e . c p p
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / C M o t i o n S t a t e . h
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / p h y s i c . c p p
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / p h y s i c . h p p
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / B u l l e t S h a p e L o a d e r . c p p
$ { L I B D I R } / o p e n e n g i n e / b u l l e t / B u l l e t S h a p e L o a d e r . h
)
# Sound setup
if ( USE_AUDIERE )
set ( MANGLE_SOUND_OUTPUT
$ { L I B D I R } / m a n g l e / s o u n d / s o u r c e s / a u d i e r e _ s o u r c e . c p p
$ { L I B D I R } / m a n g l e / s o u n d / s o u r c e s / s a m p l e _ r e a d e r . c p p
$ { L I B D I R } / m a n g l e / s t r e a m / c l i e n t s / a u d i e r e _ f i l e . c p p )
find_package ( Audiere REQUIRED )
set ( SOUND_INPUT_INCLUDES ${ AUDIERE_INCLUDE_DIR } )
set ( SOUND_INPUT_LIBRARY ${ AUDIERE_LIBRARY } )
set ( SOUND_DEFINE -DOPENMW_USE_AUDIERE )
endif ( USE_AUDIERE )
if ( USE_FFMPEG )
set ( MANGLE_SOUND_OUTPUT
$ { L I B D I R } / m a n g l e / s o u n d / s o u r c e s / f f m p e g _ s o u r c e . c p p )
find_package ( FFMPEG REQUIRED )
set ( SOUND_INPUT_INCLUDES ${ FFMPEG_INCLUDE_DIR } )
set ( SOUND_INPUT_LIBRARY ${ FFMPEG_LIBRARIES } )
set ( SOUND_DEFINE -DOPENMW_USE_FFMPEG )
endif ( USE_FFMPEG )
if ( USE_MPG123 )
set ( MANGLE_SOUND_OUTPUT
$ { L I B D I R } / m a n g l e / s o u n d / s o u r c e s / m p g 1 2 3 _ s o u r c e . c p p
$ { L I B D I R } / m a n g l e / s o u n d / s o u r c e s / l i b s n d f i l e . c p p
$ { L I B D I R } / m a n g l e / s o u n d / s o u r c e s / s a m p l e _ r e a d e r . c p p )
find_package ( MPG123 REQUIRED )
find_package ( SNDFILE REQUIRED )
set ( SOUND_INPUT_INCLUDES ${ MPG123_INCLUDE_DIR } ${ SNDFILE_INCLUDE_DIR } )
set ( SOUND_INPUT_LIBRARY ${ MPG123_LIBRARY } ${ SNDFILE_LIBRARY } )
set ( SOUND_DEFINE -DOPENMW_USE_MPG123 )
endif ( USE_MPG123 )
set ( OENGINE_SOUND
# Mangle and OEngine sound files are sort of intertwined, so put
# them together here
$ { L I B D I R } / o p e n e n g i n e / s o u n d / s n d m a n a g e r . c p p
$ { L I B D I R } / m a n g l e / s o u n d / o u t p u t s / o p e n a l _ o u t . c p p
$ { M A N G L E _ S O U N D _ O U T P U T }
)
set ( OENGINE_ALL ${ OENGINE_OGRE } ${ OENGINE_GUI } ${ OENGINE_SOUND } ${ OENGINE_BULLET } )
source_group ( libs\\openengine FILES ${ OENGINE_ALL } )
set ( OPENMW_LIBS ${ MANGLE_ALL } ${ OENGINE_ALL } )
set ( OPENMW_LIBS_HEADER )
# Platform specific
if ( WIN32 )
set ( PLATFORM_INCLUDE_DIR "platform" )
add_definitions ( -DBOOST_ALL_NO_LIB )
else ( WIN32 )
set ( PLATFORM_INCLUDE_DIR "" )
find_path ( UUID_INCLUDE_DIR uuid/uuid.h )
include_directories ( ${ UUID_INCLUDE_DIR } )
endif ( WIN32 )
if ( MSVC10 )
set ( PLATFORM_INCLUDE_DIR "" )
add_definitions ( -DMYGUI_DONT_REPLACE_NULLPTR )
endif ( )
if ( APPLE )
set ( Boost_USE_STATIC_LIBS ON )
endif ( APPLE )
# Dependencies
find_package ( OGRE REQUIRED )
find_package ( Boost REQUIRED COMPONENTS system filesystem program_options thread )
find_package ( OIS REQUIRED )
find_package ( OpenAL REQUIRED )
find_package ( Bullet REQUIRED )
include_directories ( "."
$ { O G R E _ I N C L U D E _ D I R } $ { O G R E _ I N C L U D E _ D I R } / O g r e $ { O G R E _ I N C L U D E _ D I R } / O G R E
$ { O I S _ I N C L U D E _ D I R S } $ { B o o s t _ I N C L U D E _ D I R }
$ { P L A T F O R M _ I N C L U D E _ D I R }
$ { C M A K E _ H O M E _ D I R E C T O R Y } / e x t e r n / m y g u i _ 3 . 0 . 1 / M y G U I E n g i n e / i n c l u d e
$ { C M A K E _ H O M E _ D I R E C T O R Y } / e x t e r n / m y g u i _ 3 . 0 . 1 / O g r e P l a t f o r m / i n c l u d e
$ { O P E N A L _ I N C L U D E _ D I R }
$ { U U I D _ I N C L U D E _ D I R }
$ { L I B D I R }
)
link_directories ( ${ Boost_LIBRARY_DIRS } ${ OGRE_LIB_DIR } )
if ( APPLE )
# List used Ogre plugins
SET ( USED_OGRE_PLUGINS "RenderSystem_GL"
" P l u g i n _ O c t r e e S c e n e M a n a g e r "
" P l u g i n _ C g P r o g r a m M a n a g e r "
" P l u g i n _ P a r t i c l e F X " )
endif ( APPLE )
add_subdirectory ( extern/mygui_3.0.1 )
# 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 )
# Specify build paths
if ( APPLE )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${APP_BUNDLE_DIR}/Contents/MacOS" )
else ( APPLE )
set ( CMAKE_RUNTIME_OUTPUT_DIRECTORY "${OpenMW_BINARY_DIR}" )
endif ( APPLE )
# Other files
configure_file ( ${ OpenMW_SOURCE_DIR } /files/openmw.cfg.local
" $ { O p e n M W _ B I N A R Y _ D I R } / o p e n m w . c f g " )
configure_file ( ${ OpenMW_SOURCE_DIR } /files/openmw.cfg
" $ { O p e n M W _ B I N A R Y _ D I R } / o p e n m w . c f g . i n s t a l l " )
if ( WIN32 )
configure_file ( ${ OpenMW_SOURCE_DIR } /files/plugins.cfg.win32
" $ { O p e n M W _ B I N A R Y _ D I R } / p l u g i n s . c f g " C O P Y O N L Y )
endif ( WIN32 )
if ( ${ CMAKE_SYSTEM_NAME } MATCHES "Linux" )
configure_file ( ${ OpenMW_SOURCE_DIR } /files/plugins.cfg.linux
" $ { O p e n M W _ B I N A R Y _ D I R } / p l u g i n s . c f g " )
endif ( )
if ( APPLE )
configure_file ( ${ OpenMW_SOURCE_DIR } /files/plugins.cfg.mac
" $ { O p e n M W _ B I N A R Y _ D I R } / p l u g i n s . c f g " )
configure_file ( ${ OpenMW_SOURCE_DIR } /files/mac/Info.plist
" $ { A P P _ B U N D L E _ D I R } / C o n t e n t s / I n f o . p l i s t " )
configure_file ( ${ OpenMW_SOURCE_DIR } /files/mac/openmw.icns
" $ { A P P _ B U N D L E _ D I R } / C o n t e n t s / R e s o u r c e s / O p e n M W . i c n s " C O P Y O N L Y )
# prepare plugins
if ( ${ CMAKE_BUILD_TYPE } MATCHES "Release" OR
$ { C M A K E _ B U I L D _ T Y P E } M A T C H E S " R e l W i t h D e b u g I n f o " )
set ( OGRE_PLUGIN_DIR ${ OGRE_PLUGIN_DIR_REL } )
else ( )
set ( OGRE_PLUGIN_DIR ${ OGRE_PLUGIN_DIR_DBG } )
endif ( )
foreach ( plugin ${ USED_OGRE_PLUGINS } )
configure_file ( "${OGRE_PLUGIN_DIR}/${plugin}.dylib"
" $ { A P P _ B U N D L E _ D I R } / C o n t e n t s / P l u g i n s / $ { p l u g i n } . d y l i b "
C O P Y O N L Y )
endforeach ( )
endif ( APPLE )
# Compiler settings
if ( CMAKE_COMPILER_IS_GNUCC )
add_definitions ( -Wall -Wextra -Wno-unused-parameter -Wno-unused-but-set-parameter -Wno-reorder )
endif ( CMAKE_COMPILER_IS_GNUCC )
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 ( )
set ( VERSION_STRING "${OPENMW_VERSION}" )
set ( PACKAGE_MAINTAINER "unknown" )
endif ( )
#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" )
#Install global configuration files
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" )
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" )
SET ( CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://openmw.org" )
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
O p e n M W i s a r e i m p l e m e n t a t i o n o f t h e B e t h e s d a G a m e S t u d i o s g a m e T h e E l d e r S c r o l l s I I I : M o r r o w i n d .
D a t a f i l e s f r o m t h e o r i g i n a l g a m e i s r e q u i r e d t o r u n i t . " )
SET ( CPACK_DEBIAN_PACKAGE_NAME "openmw" )
SET ( CPACK_DEBIAN_PACKAGE_VERSION "${VERSION_STRING}" )
SET ( CPACK_PACKAGE_EXECUTABLES "openmw;OpenMW esmtool;Esmtool omwlauncher;OMWLauncher" )
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)" )
SET ( CPACK_DEBIAN_PACKAGE_SECTION "Games" )
string ( TOLOWER "${CPACK_PACKAGE_NAME}" CPACK_PACKAGE_NAME_LOWERCASE )
execute_process (
C O M M A N D $ { D P K G _ P R O G R A M } - - p r i n t - a r c h i t e c t u r e
O U T P U T _ V A R I A B L E C P A C K _ D E B I A N _ P A C K A G E _ A R C H I T E C T U R E
O U T P U T _ S T R I P _ T R A I L I N G _ W H I T E S P A C E
)
set ( CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME_LOWERCASE}_${CPACK_DEBIAN_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" )
include ( CPack )
endif ( DPKG_PROGRAM )
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" )
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")
SET ( VCREDIST32 "${OpenMW_BINARY_DIR}/vcredist_x86.exe" )
if ( EXISTS ${ VCREDIST32 } )
INSTALL ( FILES ${ VCREDIST32 } DESTINATION "redist" )
SET ( CPACK_NSIS_EXTRA_INSTALL_COMMANDS "ExecWait '\\\" $ INSTDIR\\\\redist\\\\vcredist_x86.exe\\\ " /q'" )
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 } )
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 }
E x e c W a i t ' \ \ \ " $ I N S T D I R \ \ \ \ r e d i s t \ \ \ \ o a l i n s t . e x e \ \ \ " / s ' " )
endif ( EXISTS ${ OALREDIST } )
if ( CMAKE_CL_64 )
SET ( CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64" )
endif ( )
include ( CPack )
endif ( WIN32 )
# Components
add_subdirectory ( components )
# Apps and tools
add_subdirectory ( apps/openmw )
option ( BUILD_ESMTOOL "build ESM inspector" ON )
if ( BUILD_ESMTOOL )
add_subdirectory ( apps/esmtool )
endif ( )
option ( BUILD_LAUNCHER "build Launcher inspector" ON )
if ( BUILD_LAUNCHER )
add_subdirectory ( apps/launcher )
endif ( )
if ( WIN32 )
if ( MSVC )
if ( USE_DEBUG_CONSOLE )
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" )
else ( )
# 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" )
endif ( )
# 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" )
# Play a bit with the warning levels
set ( WARNINGS "/Wall" ) # Since windows can only disable specific warnings, not enable them
set ( WARNINGS_DISABLE
# 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
4 0 6 1 4 2 6 3 4 2 6 4 4 2 6 6 4 3 5 0 4 5 1 4 4 5 4 8 4 5 7 1 4 6 1 0 4 6 1 9 4 6 2 3 4 6 2 5 4 6 2 6 4 6 2 8 4 6 4 0 4 6 6 8 4 7 1 0 4 7 1 1 4 8 2 0 4 8 2 6 4 9 1 7 4 9 4 6
# Warnings that are thrown on standard libraries and not OpenMW
4 3 4 7 # Non-template function with same name and parameter count as template function
4 3 6 5 # Variable signed/unsigned mismatch
4 5 1 0 4 5 1 2 # Unable to generate copy constructor/assignment operator as it's not public in the base
4 7 0 6 # Assignment in conditional expression
4 7 3 8 # Storing 32-bit float result in memory, possible loss of performance
4 9 8 6 # Undocumented warning that occurs in the crtdbg.h file
4 9 9 6 # Function was declared deprecated
# OpenMW specific warnings
4 0 9 9 # Type mismatch, declared class or struct is defined with other type
4 1 0 0 # Unreferenced formal parameter (-Wunused-parameter)
4 1 2 7 # Conditional expression is constant
4 2 4 2 # Storing value in a variable of a smaller type, possible loss of data
4 2 4 4 # Storing value of one type in variable of another (size_t in int, for example)
4 3 0 5 # Truncating value (double to float, for example)
4 3 0 9 # Variable overflow, trying to store 128 in a signed char for example
4 3 5 5 # Using 'this' in member initialization list
4 7 0 1 # Potentially uninitialized local variable used
)
foreach ( d ${ WARNINGS_DISABLE } )
set ( WARNINGS "${WARNINGS} /wd${d}" )
endforeach ( d )
set_target_properties ( components PROPERTIES COMPILE_FLAGS ${ WARNINGS } )
set_target_properties ( omwlauncher PROPERTIES COMPILE_FLAGS ${ WARNINGS } )
set_target_properties ( openmw PROPERTIES COMPILE_FLAGS ${ WARNINGS } )
endif ( MSVC )
# 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 )
# 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")
endif ( )
# Apple bundling
if ( APPLE )
set ( INSTALL_SUBDIR OpenMW )
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 )
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 } )
set ( APPS "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}" )
set ( PLUGINS "" )
# Scan Plugins dir for *.dylibs
set ( PLUGIN_SEARCH_ROOT "${APP_BUNDLE_DIR}/Contents/Plugins" )
file ( GLOB_RECURSE ALL_PLUGINS "${PLUGIN_SEARCH_ROOT}/*.dylib" )
set ( PLUGIN_INSTALL_BASE "\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR}/${APP_BUNDLE_NAME}/Contents/Plugins" )
foreach ( PLUGIN ${ ALL_PLUGINS } )
string ( REPLACE "${PLUGIN_SEARCH_ROOT}/" "" PLUGIN_RELATIVE "${PLUGIN}" )
set ( PLUGINS ${ PLUGINS } "${PLUGIN_INSTALL_BASE}/${PLUGIN_RELATIVE}" )
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.
#
# 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)
endif ( )
endif ( )
endfunction ( gp_resolve_item_override )
cmake_policy ( SET CMP0009 OLD )
set ( BU_CHMOD_BUNDLE_ITEMS ON )
include ( BundleUtilities )
fixup_bundle ( \"${APPS}\" \"${PLUGINS}\" \"${DIRS}\")
" C O M P O N E N T R u n t i m e )
include ( CPack )
set ( CMAKE_EXE_LINKER_FLAGS "-arch i386" )
set ( CMAKE_CXX_FLAGS "-arch i386" )
endif ( APPLE )