diff --git a/CMakeLists.txt b/CMakeLists.txt index f9d349d1b..7916c44cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,9 +26,10 @@ endif (WIN32) # Dependencies find_package(OGRE REQUIRED) find_package(Boost REQUIRED) +find_package(OIS REQUIRED) include_directories("." ${OGRE_INCLUDE_DIR} ${Boost_INCLUDE_DIR} ${PLATFORM_INCLUDE_DIR}) link_directories(${Boost_LIBRARY_DIRS} ${OGRE_LIB_DIR}) # Main executable add_executable(openmw ${BSA} ${TOOLS} ${OGRE} ${INPUT} ${GAME} ${GAMEREND}) -target_link_libraries(openmw ${OGRE_LIBRARIES}) +target_link_libraries(openmw ${OGRE_LIBRARIES} ${OIS_LIBRARIES}) diff --git a/cmake/FindOIS.cmake b/cmake/FindOIS.cmake new file mode 100644 index 000000000..e0278d8a2 --- /dev/null +++ b/cmake/FindOIS.cmake @@ -0,0 +1,87 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +# - Try to find OIS +# Once done, this will define +# +# OIS_FOUND - system has OIS +# OIS_INCLUDE_DIRS - the OIS include directories +# OIS_LIBRARIES - link these to use OIS +# OIS_BINARY_REL / OIS_BINARY_DBG - DLL names (windows only) + +include(FindPkgMacros) +findpkg_begin(OIS) + +# Get path, convert backslashes as ${ENV_${var}} +getenv_path(OIS_HOME) +getenv_path(OGRE_SDK) +getenv_path(OGRE_HOME) +getenv_path(OGRE_SOURCE) +getenv_path(OGRE_DEPENDENCIES_DIR) + +# construct search paths +set(OIS_PREFIX_PATH ${OIS_HOME} ${ENV_OIS_HOME} + ${OGRE_DEPENDENCIES_DIR} ${ENV_OGRE_DEPENDENCIES_DIR} + ${OGRE_SOURCE}/iPhoneDependencies ${ENV_OGRE_SOURCE}/iPhoneDependencies + ${OGRE_SOURCE}/Dependencies ${ENV_OGRE_SOURCE}/Dependencies + ${OGRE_SDK} ${ENV_OGRE_SDK} + ${OGRE_HOME} ${ENV_OGRE_HOME}) +create_search_paths(OIS) +# redo search if prefix path changed +clear_if_changed(OIS_PREFIX_PATH + OIS_LIBRARY_FWK + OIS_LIBRARY_REL + OIS_LIBRARY_DBG + OIS_INCLUDE_DIR +) + +set(OIS_LIBRARY_NAMES OIS) +get_debug_names(OIS_LIBRARY_NAMES) + +use_pkgconfig(OIS_PKGC OIS) + +# For OIS, prefer static library over framework (important when referencing OIS source build) +set(CMAKE_FIND_FRAMEWORK "LAST") + +findpkg_framework(OIS) +if (OIS_HOME) + # OIS uses the 'includes' path for its headers in the source release, not 'include' + set(OIS_INC_SEARCH_PATH ${OIS_INC_SEARCH_PATH} ${OIS_HOME}/includes) +endif() +if (APPLE AND OIS_HOME) + # OIS source build on Mac stores libs in a different location + # Also this is for static build + set(OIS_LIB_SEARCH_PATH ${OIS_LIB_SEARCH_PATH} ${OIS_HOME}/Mac/XCode-2.2/build) +endif() +find_path(OIS_INCLUDE_DIR NAMES OIS.h HINTS ${OIS_INC_SEARCH_PATH} ${OIS_PKGC_INCLUDE_DIRS} PATH_SUFFIXES OIS) +find_library(OIS_LIBRARY_REL NAMES ${OIS_LIBRARY_NAMES} HINTS ${OIS_LIB_SEARCH_PATH} ${OIS_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" release relwithdebinfo minsizerel) +find_library(OIS_LIBRARY_DBG NAMES ${OIS_LIBRARY_NAMES_DBG} HINTS ${OIS_LIB_SEARCH_PATH} ${OIS_PKGC_LIBRARY_DIRS} PATH_SUFFIXES "" debug) +make_library_set(OIS_LIBRARY) + +if (WIN32) + set(OIS_BIN_SEARCH_PATH ${OIS_HOME}/dll ${ENV_OIS_HOME}/dll + ${OGRE_DEPENDENCIES_DIR}/bin ${ENV_OGRE_DEPENDENCIES_DIR}/bin + ${OGRE_SOURCE}/Dependencies/bin ${ENV_OGRE_SOURCE}/Dependencies/bin + ${OGRE_SDK}/bin ${ENV_OGRE_SDK}/bin + ${OGRE_HOME}/bin ${ENV_OGRE_HOME}/bin) + find_file(OIS_BINARY_REL NAMES "OIS.dll" HINTS ${OIS_BIN_SEARCH_PATH} + PATH_SUFFIXES "" release relwithdebinfo minsizerel) + find_file(OIS_BINARY_DBG NAMES "OIS_d.dll" HINTS ${OIS_BIN_SEARCH_PATH} + PATH_SUFFIXES "" debug ) +endif() +mark_as_advanced(OIS_BINARY_REL OIS_BINARY_DBG) + + +findpkg_finish(OIS) + +# add parent of OIS folder to support OIS/OIS.h +add_parent_dir(OIS_INCLUDE_DIRS OIS_INCLUDE_DIR) + +# Reset framework finding +set(CMAKE_FIND_FRAMEWORK "FIRST") diff --git a/cmake/FindPkgMacros.cmake b/cmake/FindPkgMacros.cmake new file mode 100644 index 000000000..0e83c4e28 --- /dev/null +++ b/cmake/FindPkgMacros.cmake @@ -0,0 +1,147 @@ +#------------------------------------------------------------------- +# This file is part of the CMake build system for OGRE +# (Object-oriented Graphics Rendering Engine) +# For the latest info, see http://www.ogre3d.org/ +# +# The contents of this file are placed in the public domain. Feel +# free to make use of it in any way you like. +#------------------------------------------------------------------- + +################################################################## +# Provides some common functionality for the FindPackage modules +################################################################## + +# Begin processing of package +macro(findpkg_begin PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Looking for ${PREFIX}...") + endif () +endmacro(findpkg_begin) + +# Display a status message unless FIND_QUIETLY is set +macro(pkg_message PREFIX) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS ${ARGN}) + endif () +endmacro(pkg_message) + +# Get environment variable, define it as ENV_$var and make sure backslashes are converted to forward slashes +macro(getenv_path VAR) + set(ENV_${VAR} $ENV{${VAR}}) + # replace won't work if var is blank + if (ENV_${VAR}) + string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} ) + endif () +endmacro(getenv_path) + +# Construct search paths for includes and libraries from a PREFIX_PATH +macro(create_search_paths PREFIX) + foreach(dir ${${PREFIX}_PREFIX_PATH}) + set(${PREFIX}_INC_SEARCH_PATH ${${PREFIX}_INC_SEARCH_PATH} + ${dir}/include ${dir}/Include ${dir}/include/${PREFIX} ${dir}/Headers) + set(${PREFIX}_LIB_SEARCH_PATH ${${PREFIX}_LIB_SEARCH_PATH} + ${dir}/lib ${dir}/Lib ${dir}/lib/${PREFIX} ${dir}/Libs) + set(${PREFIX}_BIN_SEARCH_PATH ${${PREFIX}_BIN_SEARCH_PATH} + ${dir}/bin) + endforeach(dir) + set(${PREFIX}_FRAMEWORK_SEARCH_PATH ${${PREFIX}_PREFIX_PATH}) +endmacro(create_search_paths) + +# clear cache variables if a certain variable changed +macro(clear_if_changed TESTVAR) + # test against internal check variable + if (NOT "${${TESTVAR}}" STREQUAL "${${TESTVAR}_INT_CHECK}") + message(STATUS "${TESTVAR} changed.") + foreach(var ${ARGN}) + set(${var} "NOTFOUND" CACHE STRING "x" FORCE) + endforeach(var) + endif () + set(${TESTVAR}_INT_CHECK ${${TESTVAR}} CACHE INTERNAL "x" FORCE) +endmacro(clear_if_changed) + +# Try to get some hints from pkg-config, if available +macro(use_pkgconfig PREFIX PKGNAME) + find_package(PkgConfig) + if (PKG_CONFIG_FOUND) + pkg_check_modules(${PREFIX} ${PKGNAME}) + endif () +endmacro (use_pkgconfig) + +# Couple a set of release AND debug libraries (or frameworks) +macro(make_library_set PREFIX) + if (${PREFIX}_FWK) + set(${PREFIX} ${${PREFIX}_FWK}) + elseif (${PREFIX}_REL AND ${PREFIX}_DBG) + set(${PREFIX} optimized ${${PREFIX}_REL} debug ${${PREFIX}_DBG}) + elseif (${PREFIX}_REL) + set(${PREFIX} ${${PREFIX}_REL}) + elseif (${PREFIX}_DBG) + set(${PREFIX} ${${PREFIX}_DBG}) + endif () +endmacro(make_library_set) + +# Generate debug names from given release names +macro(get_debug_names PREFIX) + foreach(i ${${PREFIX}}) + set(${PREFIX}_DBG ${${PREFIX}_DBG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i}) + endforeach(i) +endmacro(get_debug_names) + +# Add the parent dir from DIR to VAR +macro(add_parent_dir VAR DIR) + get_filename_component(${DIR}_TEMP "${${DIR}}/.." ABSOLUTE) + set(${VAR} ${${VAR}} ${${DIR}_TEMP}) +endmacro(add_parent_dir) + +# Do the final processing for the package find. +macro(findpkg_finish PREFIX) + # skip if already processed during this run + if (NOT ${PREFIX}_FOUND) + if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY) + set(${PREFIX}_FOUND TRUE) + set(${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR}) + set(${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY}) + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Found ${PREFIX}: ${${PREFIX}_LIBRARIES}") + endif () + else () + if (NOT ${PREFIX}_FIND_QUIETLY) + message(STATUS "Could not locate ${PREFIX}") + endif () + if (${PREFIX}_FIND_REQUIRED) + message(FATAL_ERROR "Required library ${PREFIX} not found! Install the library (including dev packages) and try again. If the library is already installed, set the missing variables manually in cmake.") + endif () + endif () + + mark_as_advanced(${PREFIX}_INCLUDE_DIR ${PREFIX}_LIBRARY ${PREFIX}_LIBRARY_REL ${PREFIX}_LIBRARY_DBG ${PREFIX}_LIBRARY_FWK) + endif () +endmacro(findpkg_finish) + + +# Slightly customised framework finder +MACRO(findpkg_framework fwk) + IF(APPLE) + SET(${fwk}_FRAMEWORK_PATH + ${${fwk}_FRAMEWORK_SEARCH_PATH} + ${CMAKE_FRAMEWORK_PATH} + ~/Library/Frameworks + /Library/Frameworks + /System/Library/Frameworks + /Network/Library/Frameworks + /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/System/Library/Frameworks/ + ${CMAKE_CURRENT_SOURCE_DIR}/lib/Release + ${CMAKE_CURRENT_SOURCE_DIR}/lib/Debug + ) + FOREACH(dir ${${fwk}_FRAMEWORK_PATH}) + SET(fwkpath ${dir}/${fwk}.framework) + IF(EXISTS ${fwkpath}) + SET(${fwk}_FRAMEWORK_INCLUDES ${${fwk}_FRAMEWORK_INCLUDES} + ${fwkpath}/Headers ${fwkpath}/PrivateHeaders) + SET(${fwk}_FRAMEWORK_PATH ${dir}) + if (NOT ${fwk}_LIBRARY_FWK) + SET(${fwk}_LIBRARY_FWK "-framework ${fwk}") + endif () + ENDIF(EXISTS ${fwkpath}) + ENDFOREACH(dir) + ENDIF(APPLE) +ENDMACRO(findpkg_framework) diff --git a/game/main.cpp b/game/main.cpp index 81f0f2201..51c59598a 100644 --- a/game/main.cpp +++ b/game/main.cpp @@ -34,17 +34,21 @@ void maintest() ESM::ESMReader esm; ESMS::ESMStore store; ESMS::CellStore cell; - Render::CellRender rend(cell); + // This parses the ESM file and loads a sample cell esm.open(esmFile); store.load(esm); cell.loadInt("Beshara", store, esm); + // Create the window ogre.createWindow("OpenMW"); Render::MWScene scene; scene.setup(&ogre); + // This doesn't do anything yet. + Render::CellRender rend(cell); + Input::OISManager input; input.setup(&ogre);