# 
# lib3dRender build system
#
PROJECT(lib3dRender)

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

set(LIB3DRENDER_VERSION 20160901.0.0)

#--------------------------------#
# Enforce an out-of-source build #
#--------------------------------#

STRING(COMPARE EQUAL "${PROJECT_SOURCE_DIR}" "${PROJECT_BINARY_DIR}" INSOURCE)
IF(INSOURCE)
  MESSAGE(FATAL_ERROR "This project requires an out of source build. This is handled by the Makefile. Please type 'make'.")
ENDIF(INSOURCE)


#--------------------------------#
# Build Options                  #
#--------------------------------#

# this gets CMake to use the system triplet (x86_64-linux-gnu)
# for library locations
INCLUDE(GNUInstallDirs)

# Options can be set from the command line when running cmake.
#   eg. cmake . -DCMAKE_BUILD_TYPE=Release -DDEBUG_PROFILING=on
    
# Build types are: Release, Debug, RelWithDebInfo, MinSizeRel
IF( NOT CMAKE_BUILD_TYPE )
  SET( CMAKE_BUILD_TYPE Release CACHE STRING
       "Build type options are: None Debug Release RelWithDebInfo MinSizeRel."
       FORCE )
ENDIF( NOT CMAKE_BUILD_TYPE )

SET(CMAKE_PREFIX_PATH "/usr/local")


#-----------------------#
# Dependencies          #
#-----------------------#

# OpenCV
FIND_PACKAGE(OpenCV REQUIRED)
     
# libSDL
FIND_PACKAGE(SDL REQUIRED)

# GTK
FIND_PACKAGE(PkgConfig)
pkg_check_modules( GTK REQUIRED "gtk+-2.0")

pkg_check_modules( GTKGLEXT REQUIRED "gtkglext-1.0")

# OpengGL
FIND_PACKAGE(OpenGL REQUIRED)

# libpng
FIND_PACKAGE(PNG REQUIRED)


# lib3dObjects
FIND_PACKAGE(Lib3dObjects REQUIRED)


#-----------------------#
# Compiler setup        #
#-----------------------#

ADD_DEFINITIONS( "-Wall")
ADD_DEFINITIONS( "-DGL2PS_HAVE_LIBPNG")
ADD_DEFINITIONS( "-DHAVE_ZLIB")


ADD_DEFINITIONS( ${GTK_CFLAGS} 
                 ${GTKGLEXT_CFLAGS} )

INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/include
                     ${PROJECT_SOURCE_DIR}/gl2ps
                     ${OpenCV_INCLUDE_DIRS}
                     ${SDL_INCLUDE_DIR}
                     ${GTK_INCLUDE_DIRS}
                     ${GTKGLEXT_INCLUDE_DIRS})


LINK_DIRECTORIES(
                  ${GTK_LIBRARY_DIRS}
                  ${GTKGLEXT_LIBRARY_DIRS} )




#-----------------------#
# Installation Setup    #
#-----------------------#

# An alternative installation location can be specified by using
# -DCMAKE_BUILD_TYPE=<build_type> when running cmake

IF( NOT CMAKE_INSTALL_PREFIX )
   SET( CMAKE_INSTALL_PREFIX "/usr/local" )
ENDIF( NOT CMAKE_INSTALL_PREFIX )


#-----------------------#
# Print Some Info       #
#-----------------------#

MESSAGE( "" )
MESSAGE( "CONFIGURATION SUMMARY" )
MESSAGE( "---------------------" )
MESSAGE( "" )
MESSAGE( "CMAKE_BUILD_TYPE = '${CMAKE_BUILD_TYPE}'" )
MESSAGE( "" )
MESSAGE( "CMAKE_INSTALL_PREFIX = '${CMAKE_INSTALL_PREFIX}'" )
MESSAGE( "" )

IF( CMAKE_BUILD_TYPE STREQUAL Debug )
   MESSAGE( "CMAKE_CXX_FLAGS_DEBUG = '${CMAKE_CXX_FLAGS_DEBUG}'" )
ENDIF( CMAKE_BUILD_TYPE STREQUAL Debug )

IF( CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo )
   MESSAGE( "CMAKE_CXX_FLAGS_RELWITHDEBINFO = '${CMAKE_CXX_FLAGS_RELWITHDEBINFO}'" )
ENDIF( CMAKE_BUILD_TYPE STREQUAL RelWithDebInfo )

IF( CMAKE_BUILD_TYPE STREQUAL Release )
   MESSAGE( "CMAKE_CXX_FLAGS_RELEASE = '${CMAKE_CXX_FLAGS_RELEASE}'" )
ENDIF( CMAKE_BUILD_TYPE STREQUAL Release )

IF( CMAKE_BUILD_TYPE STREQUAL MinSizeRel )
   MESSAGE( "CMAKE_CXX_FLAGS_MINSIZEREL = '${CMAKE_CXX_FLAGS_MINSIZEREL}'" )
ENDIF( CMAKE_BUILD_TYPE STREQUAL MinSizeRel )

MESSAGE( "" )

#-----------------------#
# Build Instructions    #
#-----------------------#

# Locations for the library and binary files
SET( LIBRARY_OUTPUT_PATH     ${PROJECT_SOURCE_DIR}/lib )
SET( EXECUTABLE_OUTPUT_PATH  ${PROJECT_SOURCE_DIR}/bin )

ADD_SUBDIRECTORY(gl2ps)
ADD_SUBDIRECTORY(src)
ADD_SUBDIRECTORY(include)
ADD_SUBDIRECTORY(utils)

#-----------------------#
# Installation Related  #
#-----------------------#

INCLUDE(CMakePackageConfigHelpers)
WRITE_BASIC_PACKAGE_VERSION_FILE(
    "${CMAKE_CURRENT_BINARY_DIR}/Lib3dRender/Lib3dRenderConfigVersion.cmake"
    VERSION ${LIB3DRENDER_VERSION}
    COMPATIBILITY AnyNewerVersion
)

IF(CMAKE_VERSION VERSION_LESS "3.0")
    EXPORT(TARGETS 3dRender gl2ps
        FILE "${CMAKE_CURRENT_BINARY_DIR}/Lib3dRender/Lib3dRenderTargets.cmake"
        NAMESPACE lib3drender::
    )
ELSE()
    EXPORT(EXPORT Lib3dRenderTargets
        FILE "${CMAKE_CURRENT_BINARY_DIR}/Lib3dRender/Lib3dRenderTargets.cmake"
        NAMESPACE lib3drender::
    )
ENDIF()

CONFIGURE_FILE(cmake/Lib3dRenderConfig.cmake
    "${CMAKE_CURRENT_BINARY_DIR}/Lib3dRender/Lib3dRenderConfig.cmake"
    COPYONLY
)

set(ConfigPackageLocation lib/cmake/Lib3dRender)
install(EXPORT Lib3dRenderTargets
    FILE Lib3dRenderTargets.cmake
    NAMESPACE lib3drender::
    DESTINATION ${ConfigPackageLocation}
)
install(
    FILES cmake/Lib3dRenderConfig.cmake
    "${CMAKE_CURRENT_BINARY_DIR}/Lib3dRender/Lib3dRenderConfigVersion.cmake"
    DESTINATION "${ConfigPackageLocation}"
)
