cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
cmake_policy(VERSION 2.6)
if (NOT CMAKE_VERSION VERSION_LESS "3.1")
	cmake_policy(SET CMP0054 NEW)
endif()

project(glm)
set(GLM_VERSION "0.9.9")

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

include(GNUInstallDirs)
include(CMakePackageConfigHelpers)

enable_testing()

add_definitions(-D_CRT_SECURE_NO_WARNINGS)

option(GLM_STATIC_LIBRARY_ENABLE "GLM static library" OFF)
if(GLM_STATIC_LIBRARY_ENABLE)
	message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_STATIC_LIBRARY_ENABLE with ON to build an optional static library")
endif()

option(GLM_DYNAMIC_LIBRARY_ENABLE "GLM static library" OFF)
if(GLM_DYNAMIC_LIBRARY_ENABLE)
	message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_DYNAMIC_LIBRARY_ENABLE with ON to build an optional dynamic library")
endif()

option(GLM_TEST_ENABLE "GLM test" OFF)
if(NOT GLM_TEST_ENABLE)
	message(STATUS "GLM is a header only library, no need to build it. Set the option GLM_TEST_ENABLE with ON to build and run the test bench")
endif()

option(GLM_TEST_ENABLE_FAST_MATH "Enable fast math optimizations" OFF)

if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND UNIX))
	option(GLM_TEST_ENABLE_CXX_98 "Enable C++ 98" OFF)
	option(GLM_TEST_ENABLE_CXX_0X "Enable C++ 0x" OFF)
	option(GLM_TEST_ENABLE_CXX_11 "Enable C++ 11" OFF)
	option(GLM_TEST_ENABLE_CXX_1Y "Enable C++ 1y" OFF)
	option(GLM_TEST_ENABLE_CXX_14 "Enable C++ 14" OFF)
	option(GLM_TEST_ENABLE_CXX_1Z "Enable C++ 1z" OFF)

	if(GLM_TEST_ENABLE_CXX_1Z)
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++1z")
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
		set(CMAKE_CXX_FLAGS "-std=c++1Z")
	elseif(GLM_TEST_ENABLE_CXX_14)
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++14")
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
		set(CMAKE_CXX_FLAGS "-std=c++14")
	elseif(GLM_TEST_ENABLE_CXX_1Y)
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++1y")
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
		set(CMAKE_CXX_FLAGS "-std=c++1y")
	elseif(GLM_TEST_ENABLE_CXX_11)
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
		set(CMAKE_CXX_FLAGS "-std=c++11")
	elseif(GLM_TEST_ENABLE_CXX_0X)
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
		set(CMAKE_CXX_FLAGS "-std=c++0x")
	elseif(GLM_TEST_ENABLE_CXX_98)
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
		set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
		set(CMAKE_CXX_FLAGS "-std=c++98")
		if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
			add_definitions(-Wno-long-long)
		endif()
	endif()
endif()

option(GLM_TEST_ENABLE_LANG_EXTENSIONS "Enable language extensions" OFF)

if(GLM_TEST_ENABLE_LANG_EXTENSIONS)
	if(GLM_TEST_ENABLE_FAST_MATH)
		if(CMAKE_COMPILER_IS_GNUCXX)
			add_definitions(-ffast-math)
		endif()

		if(MSVC)
			add_definitions(/fp:fast)
		endif()
	elseif(NOT GLM_TEST_ENABLE_FAST_MATH)
		if(MSVC)
			add_definitions(/fp:precise)
		endif()
	endif()
else()
	if(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") OR (("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") AND WIN32))
		add_definitions(/Za)
	elseif(("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") OR ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU"))
		add_definitions(-pedantic)
	endif()
endif()

option(GLM_TEST_ENABLE_SIMD_SSE2 "Enable SSE2 optimizations" OFF)
option(GLM_TEST_ENABLE_SIMD_SSE3 "Enable SSE3 optimizations" OFF)
option(GLM_TEST_ENABLE_SIMD_AVX "Enable AVX optimizations" OFF)
option(GLM_TEST_ENABLE_SIMD_AVX2 "Enable AVX2 optimizations" OFF)
option(GLM_TEST_FORCE_PURE "Force 'pure' instructions" OFF)

if(GLM_TEST_FORCE_PURE)
	add_definitions(-DGLM_FORCE_PURE)

	if(CMAKE_COMPILER_IS_GNUCXX)
		add_definitions(-mfpmath=387)
	endif()
elseif(GLM_TEST_ENABLE_SIMD_AVX2)
	if(CMAKE_COMPILER_IS_GNUCXX)
		add_definitions(-mavx2)
	elseif(GLM_USE_INTEL)
		add_definitions(/QxAVX2)
	elseif(MSVC)
		add_definitions(/arch:AVX2)
	endif()
elseif(GLM_TEST_ENABLE_SIMD_AVX)
	if(CMAKE_COMPILER_IS_GNUCXX)
		add_definitions(-mavx)
	elseif(GLM_USE_INTEL)
		add_definitions(/QxAVX)
	elseif(MSVC)
		add_definitions(/arch:AVX)
	endif()
elseif(GLM_TEST_ENABLE_SIMD_SSE3)
	if(CMAKE_COMPILER_IS_GNUCXX)
		add_definitions(-msse3)
	elseif(GLM_USE_INTEL)
		add_definitions(/QxSSE3)
	elseif(MSVC AND NOT CMAKE_CL_64)
		add_definitions(/arch:SSE2) # VC doesn't support /arch:SSE3	
	endif()
elseif(GLM_TEST_ENABLE_SIMD_SSE2)
	if(CMAKE_COMPILER_IS_GNUCXX)
		add_definitions(-msse2)
	elseif(GLM_USE_INTEL)
		add_definitions(/QxSSE2)
	elseif(MSVC AND NOT CMAKE_CL_64)
		add_definitions(/arch:SSE2)
	endif()
endif()

if(CMAKE_COMPILER_IS_GNUCXX)
	#add_definitions(-S)
	#add_definitions(-s)
	add_definitions(-O2)

	#add_definitions(-fprofile-arcs -ftest-coverage) gcov
	#ctest_enable_coverage()
endif()

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
	add_definitions(/FAs)
endif()

include_directories("${PROJECT_SOURCE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}/test/external")

add_subdirectory(glm)
add_subdirectory(test)

set(GLM_INSTALL_CONFIGDIR "${CMAKE_INSTALL_LIBDIR}/cmake/glm")
install(DIRECTORY glm DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})

write_basic_package_version_file(
    "${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
    VERSION ${GLM_VERSION}
    COMPATIBILITY AnyNewerVersion
)

# build tree package config
configure_file(
    cmake/glmBuildConfig.cmake.in
    glmConfig.cmake
    @ONLY
)

# install tree package config
configure_package_config_file(
    cmake/glmConfig.cmake.in
    ${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake
    INSTALL_DESTINATION ${GLM_INSTALL_CONFIGDIR}
    PATH_VARS CMAKE_INSTALL_INCLUDEDIR
    NO_CHECK_REQUIRED_COMPONENTS_MACRO
)

install(
    FILES 
        "${CMAKE_CURRENT_BINARY_DIR}/${GLM_INSTALL_CONFIGDIR}/glmConfig.cmake"
        "${CMAKE_CURRENT_BINARY_DIR}/glmVersion.cmake"
    DESTINATION ${GLM_INSTALL_CONFIGDIR}
)

if (NOT CMAKE_VERSION VERSION_LESS "3.0")
    add_library(glm INTERFACE)
    target_include_directories(glm INTERFACE
        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    )
    install(TARGETS glm EXPORT glmTargets)

    export(
        EXPORT glmTargets
        FILE "${CMAKE_CURRENT_BINARY_DIR}/glmTargets.cmake"
    )
    
    install(
        EXPORT glmTargets FILE glmTargets.cmake
        DESTINATION ${GLM_INSTALL_CONFIGDIR}
    )
endif()

# build pkg-config file
configure_file(
    "./cmake/glm.pc.in"
    "glm.pc"
    @ONLY
)

# install pkg-config file
install(
    FILES "${CMAKE_CURRENT_BINARY_DIR}/glm.pc"
    DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig"
)

export(PACKAGE glm)
