cmake_minimum_required(VERSION 2.6)

# user configurables
set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type: Release Debug")
if(NOT $ENV{WITH_LUA} STREQUAL "")
	SET(WITH_LUA $ENV{WITH_LUA})
endif()
set(WITH_LUA "${WITH_LUA}" CACHE STRING "Enable LUA support (none, system, internal)")
if(NOT $ENV{WITH_LUASQL} STREQUAL "")
	SET(WITH_LUASQL TRUE)
endif()
SET(WITH_LUASQL "${WITH_LUASQL}" CACHE BOOL "Enable luasql support")
if(NOT $ENV{WITH_DOC} STREQUAL "")
	SET(WITH_DOC TRUE)
endif()
set(WITH_DOC "${WITH_DOC}" CACHE BOOL "Generate documentation")
set(USE_STATIC_LIBS "${USE_STATIC_LIBS}" CACHE BOOL "Link statically")

project(gringo)

include(cmake/re2c.cmake)
include(cmake/lemon.cmake)
include(cmake/macros.cmake)
include(cmake/PCHSupport.cmake)

ENSURE_OUT_OF_SOURCE_BUILD("you have to create an out-of-source build")

set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake CACHE INTERNAL "" FORCE)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin CACHE INTERNAL "" FORCE)
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/lib CACHE INTERNAL "" FORCE)

IF(USE_STATIC_LIBS)
	set(CMAKE_EXE_LINK_DYNAMIC_C_FLAGS)
	set(CMAKE_EXE_LINK_DYNAMIC_CXX_FLAGS)
	set(CMAKE_SHARED_LIBRARY_C_FLAGS)
	set(CMAKE_SHARED_LIBRARY_CXX_FLAGS)
	set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS)
	set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS)
	set(Boost_USE_STATIC_LIBS TRUE)
	set(CMAKE_EXE_LINKER_FLAGS ${CMAKE_EXE_LINKER_FLAGS} -static)
	set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a)
ENDIF()

if(CMAKE_COMPILER_IS_GNUCXX)
	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-ignored-qualifiers")
endif()

set(Boost_USE_MULTITHREADED OFF CACHE STRING "Whether to Use multi-threaded boost libraries")
find_package(Boost REQUIRED filesystem system)
include_directories(${Boost_INCLUDE_DIRS})
if(WITH_LUA STREQUAL "system")
	find_package(LUA51 REQUIRED)
	add_definitions("-DWITH_LUA=1")
	include_directories(${LUA_INCLUDE_DIR})
elseif(WITH_LUA STREQUAL "shipped")
	add_definitions("-DWITH_LUA=2")
	include_directories(liblua)
	add_subdirectory(liblua)
	if(WITH_LUASQL)
		add_definitions("-DWITH_LUASQL")
		include_directories(${CMAKE_SOURCE_DIR}/libluasql ${CMAKE_BINARY_DIR}/libluasql)
		add_subdirectory(libluasql)
	endif()
endif()
add_subdirectory(libclasp)
add_subdirectory(libgringo)
add_subdirectory(libprogram_opts)
add_subdirectory(app)

if(WITH_DOC)
	include(cmake/UseLATEX.cmake)
	add_subdirectory(doc/guide)
endif()

