################################################################################
# Set cmake version and do some general work (set project, CMAKE_MODULE_PATH,...)
################################################################################

cmake_minimum_required(VERSION 2.6)

PROJECT(DemoApp)

# add modules to cmake module path
############################
# We have some custom .cmake scripts not in the official distribution.
SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${DemoApp_SOURCE_DIR}/CMakeModules")

# workaround: cmake 2.6 comes with incomplete modules for osg search (no debug libs etc...)
# see: http://public.kitware.com/Bug/view.php?id=7331
SET(CMAKE_MODULE_PATH "${CMAKE_MODULE_PATH};${DemoApp_SOURCE_DIR}/CMakeModules/osg")



################################################################################
# Find some necessary packages
################################################################################

# Find OpenGL
FIND_PACKAGE(OpenGL)



################################################################################
# Set basic unclude directories: i.e. show some headers to everyone
################################################################################

# Make the headers visible to everything
IF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})
   INCLUDE_DIRECTORIES(${PROJECT_BINARY_DIR}/include)
ENDIF(NOT ${PROJECT_BINARY_DIR} EQUAL ${PROJECT_SOURCE_DIR})


INCLUDE_DIRECTORIES(
    ${DemoApp_SOURCE_DIR}/include
    # do this for general use, because almost every lib may need to link against opengl
    ${OPENGL_INCLUDE_DIR}
)



################################################################################
# Platform specific definitions
################################################################################

IF(WIN32)
    IF(MSVC)
        ADD_DEFINITIONS(-D_SCL_SECURE_NO_WARNINGS)
        ADD_DEFINITIONS(-D_CRT_SECURE_NO_DEPRECATE)
    ENDIF(MSVC)
ENDIF(WIN32)



################################################################################
# check for necessary libraries
################################################################################

# check for some libs and scrips.
INCLUDE(Findosg)        # sets OSG_FOUND


################################################################################
# set data path
################################################################################
file(TO_CMAKE_PATH "$ENV{DEMOAPP_FILE_PATH}" DATA_PATH)


################################################################################
# Create bin and lib directories in build path
################################################################################

# Create bin and lib directories if required
IF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
   FILE(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/bin ${CMAKE_BINARY_DIR}/lib)
ENDIF("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")



################################################################################
# Installation stuff
################################################################################

SET(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "add a postfix, usually d on windows")
ADD_DEFINITIONS(-DDEBUG_POSTFIX="${CMAKE_DEBUG_POSTFIX}")
IF(UNIX AND NOT WIN32 AND NOT APPLE)
  IF(CMAKE_BUILD_TYPE STREQUAL "Debug")
    ADD_DEFINITIONS("-D_DEBUG")
  ENDIF(CMAKE_BUILD_TYPE STREQUAL "Debug")
ENDIF(UNIX AND NOT WIN32 AND NOT APPLE)


# Check for 64 Bit system 
IF(UNIX AND NOT WIN32 AND NOT APPLE)
  IF(CMAKE_SIZEOF_VOID_P MATCHES "8")
      SET(LIB_POSTFIX "64" CACHE STRING "suffix for 32/64 dir placement")
      MARK_AS_ADVANCED(LIB_POSTFIX)
  ENDIF(CMAKE_SIZEOF_VOID_P MATCHES "8")
ENDIF(UNIX AND NOT WIN32 AND NOT APPLE)
IF(NOT DEFINED LIB_POSTFIX)
    SET(LIB_POSTFIX "")
ENDIF(NOT DEFINED LIB_POSTFIX)


# Make the bin/ and lib/ folders
SET(OUTPUT_BINDIR ${PROJECT_BINARY_DIR}/bin)
MAKE_DIRECTORY(${OUTPUT_BINDIR})

SET(OUTPUT_LIBDIR ${PROJECT_BINARY_DIR}/lib)
MAKE_DIRECTORY(${OUTPUT_LIBDIR})


# On CMake 2.6.x use the newly minted CMAKE_LIBRARY_OUTPUT_DIRECTORY,
# CMAKE_ARCHIVE_OUTPUT_DIRECTORY & CMAKE_RUNTIME_OUTPUT_DIRECTORY
SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
IF(WIN32)
	SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_BINDIR})
ELSE(WIN32)
	SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_LIBDIR})
ENDIF(WIN32)



################################################################################
# User Options
################################################################################

############################
# Dynamic vs Static Linking
############################
OPTION(DYNAMIC_LINKING "Set to ON to build the module for dynamic linking.  Use OFF for static." ON)
IF   (DYNAMIC_LINKING)
    SET(LINKING_USER_DEFINED_DYNAMIC_OR_STATIC "SHARED")
ELSE (DYNAMIC_LINKING)
    SET(LINKING_USER_DEFINED_DYNAMIC_OR_STATIC "STATIC")
ENDIF(DYNAMIC_LINKING)



############################
# Include important macro
############################
INCLUDE(MacroUtils)



############################
# add sources
############################
ADD_SUBDIRECTORY(src)



############################
# add applications
############################
OPTION(BUILD_APPLICATIONS "Enable to build Applications" ON)
IF   (BUILD_APPLICATIONS)
    ADD_SUBDIRECTORY(applications)
ENDIF(BUILD_APPLICATIONS)



################################################################################
# Uninstall target
## - check if it also works under linux
################################################################################

CONFIGURE_FILE(
  "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules/cmake_uninstall.cmake.in"
  "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake"
  IMMEDIATE @ONLY)

ADD_CUSTOM_TARGET(uninstall
  "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
  