CMakeLists.txt
cmake_minimum_required(VERSION 2.6)

project(OgreApp)

if (WIN32)
  set (CMAKE_MODULE_PATH "$ENV{OGRE_HOME}/CMake/;${CMAKE_MODULE_PATH}")
  set (OGRE_SAMPLES_INCLUDEPATH $ENV{OGRE_HOME}/Samples/include)
endif (WIN32)

if (UNIX)
  if (EXISTS "/usr/local/lib/OGRE/cmake")
    set (CMAKE_MODULE_PATH
      "/usr/local/lib/OGRE/cmake/;${CMAKE_MODULE_PATH}")
    set (OGRE_SAMPLES_INCLUDEPATH
      "/usr/local/share/OGRE/samples/Common/include/")
  elseif (EXISTS "/usr/lib/OGRE/cmake")
    set (CMAKE_MODULE_PATH
      "/usr/lib/OGRE/cmake/;${CMAKE_MODULE_PATH}")
    set (OGRE_SAMPLES_INCLUDEPATH
      "/usr/share/OGRE/samples/Common/include/")
  else ()
    message(SEND_ERROR "Failed to find module path.")
  endif ()
endif (UNIX)

if (CMAKE_BUILD_TYPE STREQUAL "")
  # CMake defaults to leaving CMAKE_BUILD_TYPE empty. This screws up
  # differentiation between debug and release builds.
  set (
    CMAKE_BUILD_TYPE "RelWithDebInfo"
    CACHE STRING "Choose the type of build, options are: None (CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel."
    FORCE)
endif ()

set (CMAKE_DEBUG_POSTFIX "_d")

set (CMAKE_INSTALL_PREFIX "${CMAKE_CURRENT_BINARY_DIR}/dist")

find_package (OGRE REQUIRED)

find_package (OIS REQUIRED)
if (NOT OIS_FOUND)
  message(SEND_ERROR "Failed to find OIS.")
endif ()

find_package (CEGUI REQUIRED)
if (NOT CEGUI_FOUND)
  message (SEND_ERROR "Failed to find CEGUI.")
endif ()

# Find Boost
if (NOT OGRE_BUILD_PLATFORM_IPHONE)
  if (WIN32 OR APPLE)
    set (Boost_USE_STATIC_LIBS TRUE)
  else ()
    # Statically linking boost to a dynamic Ogre build doesn't work on Linux 64bit
    set (Boost_USE_STATIC_LIBS ${OGRE_STATIC})
  endif ()
  if (MINGW)
    # this is probably a bug in CMake: the boost find module tries to look for
    # boost libraries with name libboost_*, but CMake already prefixes library
    # search names with "lib". This is the workaround.
    set (CMAKE_FIND_LIBRARY_PREFIXES ${CMAKE_FIND_LIBRARY_PREFIXES} "")
  endif ()
  set (Boost_ADDITIONAL_VERSIONS
    "1.44" "1.44.0" "1.42" "1.42.0" "1.41.0" "1.41" "1.40.0" "1.40" "1.39.0"
    "1.39" "1.38.0" "1.38" "1.37.0" "1.37" )
  # Components that need linking (NB does not include header-only components like bind)
  set (OGRE_BOOST_COMPONENTS thread date_time)

  find_package (Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)

  if (NOT Boost_FOUND)
    # Try again with the other type of libs
    set (Boost_USE_STATIC_LIBS NOT ${Boost_USE_STATIC_LIBS})
    find_package (Boost COMPONENTS ${OGRE_BOOST_COMPONENTS} QUIET)
  endif ()

  find_package (Boost QUIET)

  # Set up referencing of Boost
  include_directories (${Boost_INCLUDE_DIR})
  add_definitions (-DBOOST_ALL_NO_LIB)
  set (OGRE_LIBRARIES ${OGRE_LIBRARIES} ${Boost_LIBRARIES})
endif ()

set (HDRS
  ./BasicApp.h)

set (SRCS
  ./BasicApp.cpp)

include_directories (
  ${OIS_INCLUDE_DIRS}
  ${OGRE_INCLUDE_DIRS}
  ${OGRE_SAMPLES_INCLUDEPATH}
  ${CEGUI_INCLUDE_DIR}
  ${CEGUI_OgreRenderer_INCLUDE_DIRS})

add_executable (OgreApp WIN32 ${HDRS} ${SRCS})

set_target_properties (OgreApp PROPERTIES DEBUG_POSTFIX _d)

target_link_libraries (
  OgreApp
  ${OIS_LIBRARIES}
  ${OGRE_LIBRARIES}
  ${OGRE_Terrain_LIBRARIES}
  ${CEGUI_LIBRARIES}
  ${CEGUI_OgreRenderer_LIBRARIES})

file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/bin)
file (MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dist/media)

# post-build copy for win32
if (WIN32 AND NOT MINGW)
  add_custom_command (
    TARGET OgreApp PRE_BUILD
    COMMAND if not exist .\\dist\\bin mkdir .\\dist\\bin)
  add_custom_command (
    TARGET OgreApp POST_BUILD
    COMMAND copy \"$(TargetPath)\" .\\dist\\bin)
endif (WIN32 AND NOT MINGW)

if (MINGW OR UNIX)
  set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/dist/bin)
endif (MINGW OR UNIX)

if (WIN32)
  install (
    TARGETS OgreApp
    RUNTIME DESTINATION bin
    CONFIGURATIONS All)

  install (
    DIRECTORY ${CMAKE_SOURCE_DIR}/dist/Media
    DESTINATION ./
    CONFIGURATIONS Release RelWithDebInfo Debug)

  install (
    FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins.cfg
    ${CMAKE_SOURCE_DIR}/dist/bin/resources.cfg
    DESTINATION bin
    CONFIGURATIONS Release RelWithDebInfo)

  install (
    FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins_d.cfg
    ${CMAKE_SOURCE_DIR}/dist/bin/resources_d.cfg
    DESTINATION bin
    CONFIGURATIONS Debug)

  install (
    FILES ${OGRE_PLUGIN_DIR_REL}/OgreMain.dll
    ${OGRE_PLUGIN_DIR_REL}/RenderSystem_Direct3D9.dll
    ${OGRE_PLUGIN_DIR_REL}/RenderSystem_GL.dll
    ${OGRE_PLUGIN_DIR_REL}/libOIS.dll
    DESTINATION bin
    CONFIGURATIONS Release RelWithDebInfo)

  install (
    FILES ${OGRE_PLUGIN_DIR_DBG}/OgreMain_d.dll
    ${OGRE_PLUGIN_DIR_DBG}/RenderSystem_Direct3D9_d.dll
    ${OGRE_PLUGIN_DIR_DBG}/RenderSystem_GL_d.dll
    ${OGRE_PLUGIN_DIR_DBG}/libOIS_d.dll
    DESTINATION bin
    CONFIGURATIONS Debug)

  install(
    FILES ${Boost_DATE_TIME_LIBRARY_RELEASE}
    ${Boost_THREAD_LIBRARY_RELEASE}
    DESTINATION bin
    CONFIGURATIONS Release RelWithDebInfo)

  install (
    FILES ${Boost_DATE_TIME_LIBRARY_DEBUG}
    ${Boost_THREAD_LIBRARY_DEBUG}
    DESTINATION bin
    CONFIGURATIONS Debug)
endif (WIN32)

if (UNIX)
  install (
    TARGETS OgreApp
    RUNTIME DESTINATION bin
    CONFIGURATIONS All)

  install (
    DIRECTORY ${CMAKE_SOURCE_DIR}/dist/media
    DESTINATION ./
    CONFIGURATIONS Release RelWithDebInfo Debug)

  install (
    FILES ${CMAKE_SOURCE_DIR}/dist/bin/plugins.cfg
    ${CMAKE_SOURCE_DIR}/dist/bin/resources.cfg
    DESTINATION bin
    CONFIGURATIONS Release RelWithDebInfo Debug)
endif (UNIX)