######################################################################
# PagedGeometry BUILD SYSTEM
# Welcome to the CMake build system for PagedGeometry.
# This is the main file where we prepare the general build environment
# and provide build configuration options.
######################################################################

cmake_minimum_required(VERSION 2.6)
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE)
cmake_policy(SET CMP0003 NEW)

project(PagedGeometry)

# Include necessary submodules
set(CMAKE_MODULE_PATH 
  "${PagedGeometry_SOURCE_DIR}/CMake"
  "${PagedGeometry_SOURCE_DIR}/CMake/Utils" 
  "${PagedGeometry_SOURCE_DIR}/CMake/Packages"
)
include(CMakeDependentOption)
include(MacroLogFeature)
include(PagedGeometryConfigTargets)
include(PreprocessorUtils)
set(PagedGeometry_TEMPLATES_DIR "${PagedGeometry_SOURCE_DIR}/CMake/Templates")
set(PagedGeometry_WORK_DIR ${PagedGeometry_BINARY_DIR})


#####################################################################
# Set up the basic build environment
#####################################################################

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 ()

# determine PagedGeometry version numbers
include(PagedGeometryGetVersion)
PagedGeometry_get_version(${PagedGeometry_SOURCE_DIR}/include/PagedGeometry.h)
message(STATUS "Configuring PagedGeometry ${PagedGeometry_VERSION}")


# Set compiler specific build flags
if (CMAKE_COMPILER_IS_GNUCXX)
  add_definitions(-msse)
endif ()
if (MSVC)
  add_definitions(/fp:fast)
endif ()


# determine system endianess
include(TestBigEndian)
test_big_endian(PagedGeometry_TEST_BIG_ENDIAN)

# Add PagedGeometryEngine include path

# Find dependencies
include(Dependencies)
# definitions for samples
set(PagedGeometry_LIBRARY PagedGeometry)
set(PagedGeometry_INCLUDE_DIR ${PagedGeometry_SOURCE_DIR}/include)

# Specify build paths
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PagedGeometry_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PagedGeometry_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PagedGeometry_BINARY_DIR}/bin)

######################################################################
# Provide user options to customise the build process
######################################################################

# Customise what to build
option(PagedGeometry_BUILD_SAMPLES "Build PagedGeometry demos" TRUE)
cmake_dependent_option(PagedGeometry_BUILD_DOCS "Generate documentation" TRUE "DOXYGEN_FOUND" FALSE)

# global configs
include_directories(
 ${PagedGeometry_SOURCE_DIR}/include
 ${OGRE_INCLUDE_DIR}
)
add_definitions("-D_LIB")

###################################################################
# configure global build settings based on selected build options
###################################################################
include(ConfigureBuild)


##################################################################
# Now setup targets
##################################################################

add_subdirectory(source)

if(PagedGeometry_BUILD_DOCS)
add_subdirectory(docs)
endif(PagedGeometry_BUILD_DOCS)

#add_subdirectory(examples)

