cmake_minimum_required(VERSION 2.8)
project(WFR-lib_odb CXX)


# cmake options
OPTION(USE_BUILDIN_ODB "Use buildin odb" ON)


# Check whether we are called by another script
get_directory_property(hasParent PARENT_DIRECTORY)
	
# Include libsqlite3
add_subdirectory(sqlite3) 
# Provide some variables to parent script
if(hasParent)
	set(Sqlite3_INCLUDE_DIR "${Sqlite3_INCLUDE_DIR}" PARENT_SCOPE)
	set(Sqlite3_LIBRARY_DIR "${Sqlite3_LIBRARY_DIR}" PARENT_SCOPE)
	set(Sqlite3_LIBRARIES "${Sqlite3_LIBRARIES}" PARENT_SCOPE)
endif()
	
# Let's build our own copy of odb
if (USE_BUILDIN_ODB)
	include(ExternalProject)
	
	# Set odb version
	if(hasParent)
		set(odb_version "2.4.0" PARENT_SCOPE)
		set(odb_version "2.4.0")
	else()
		set(odb_version "2.4.0")
	endif()
	
	set(libodb_common_CPPFLAGS "")
	set(libodb_common_CPPFLAGS "")
	set(libodb_common_DEPENDS "")
	set(libodb_common_include "-I${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/include")
	set(libodb_common_lib "-L${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/lib")
	
	set(libodb_sqlite_CPPFLAGS "${libodb_common_include} -I${Sqlite3_INCLUDE_DIR}")
	set(libodb_sqlite_LDFLAGS "${libodb_common_lib} -L${Sqlite3_LIBRARY_DIR}")
	set(libodb_sqlite_DEPENDS "libodb_common")
	set(libodb_sqlite_include "-I${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/include -I${Sqlite3_INCLUDE_DIR}")
	set(libodb_sqlite_lib "-L${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/lib")
	
	set(libodb_sqlite_DEPENDS ${libodb_sqlite_DEPENDS} sqlite3)
	
	# How to build libodb-common
	ExternalProject_Add(libodb_common
		DEPENDS ${libodb_common_DEPENDS}
		SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libodb-${odb_version}
		CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/libodb-${odb_version}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install --libdir=${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/lib "CPPFLAGS=${libodb_common_CPPFLAGS}" "LDFLAGS=${libodb_common_LDFLAGS}"
		PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libodb_common
		BUILD_COMMAND make install
	)
	
	# How to build libodb-sqlite
	ExternalProject_Add(libodb_sqlite
		DEPENDS ${libodb_sqlite_DEPENDS}
		SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libodb-sqlite-${odb_version}
		CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/libodb-sqlite-${odb_version}/configure --prefix=${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install --libdir=${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/lib "CPPFLAGS=${libodb_sqlite_CPPFLAGS}" "LDFLAGS=${libodb_sqlite_LDFLAGS}" LIBS=-ldl
		PREFIX ${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite
		BUILD_COMMAND make install
	)

	# Where to install odb
	install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/include DESTINATION ${CMAKE_INSTALL_PREFIX})
	install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/lib DESTINATION ${CMAKE_INSTALL_PREFIX})
	install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/include DESTINATION ${CMAKE_INSTALL_PREFIX})
	install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/lib DESTINATION ${CMAKE_INSTALL_PREFIX})
	install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/odb-${odb_version}-x86_64-linux-gnu/ USE_SOURCE_PERMISSIONS DESTINATION ${CMAKE_INSTALL_PREFIX})
	install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/odb-config.cmake DESTINATION ${CMAKE_INSTALL_PREFIX})
	
	# Provide some variables to parent script
	if(hasParent)
		set(Odb_Bin "${CMAKE_CURRENT_SOURCE_DIR}/odb-${odb_version}-x86_64-linux-gnu/bin/odb")
		set(Odb_Bin "${Odb_Bin}" PARENT_SCOPE)
		set(Libodb_common_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/include")
		set(Libodb_common_INCLUDE_DIR "${Libodb_common_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_common_INCLUDE_DIRS "${Libodb_common_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_common_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/libodb_common/install/lib")
		set(Libodb_common_LIBRARY_DIR "${Libodb_common_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_common_LIBRARY_DIRS "${Libodb_common_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_common_LIBRARIES "${Libodb_common_LIBRARY_DIR}/libodb.a" PARENT_SCOPE)
		set(Libodb_sqlite_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/include")
		set(Libodb_sqlite_INCLUDE_DIR "${Libodb_sqlite_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_INCLUDE_DIRS "${Libodb_sqlite_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_LIBRARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/libodb_sqlite/install/lib")
		set(Libodb_sqlite_LIBRARY_DIR "${Libodb_sqlite_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_LIBRARY_DIRS "${Libodb_sqlite_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_LIBRARIES "${Libodb_sqlite_LIBRARY_DIR}/libodb-sqlite.a" PARENT_SCOPE)
	endif()
	
	add_custom_target(libodb) # Dummy target for add_dependencies
	add_dependencies(libodb libodb_common libodb_sqlite)


# Let's use an existing copy of odb
else()
	add_custom_target(libodb) # Dummy target for add_dependencies
	find_package(ODB REQUIRED)
	if(hasParent)
		set(ODB_INCLUDE_DIR "${ODB_INCLUDE_DIR}" PARENT_SCOPE)
		set(ODB_LIBRARY_DIR "${ODB_LIBRARY_DIR}" PARENT_SCOPE)
		set(ODB_LIBRARIES "${ODB_LIBRARIES}" PARENT_SCOPE)
		set(Libodb_common_INCLUDE_DIR "${ODB_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_common_INCLUDE_DIRS "${Libodb_common_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_common_LIBRARY_DIR "${ODB_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_common_LIBRARY_DIRS "${Libodb_common_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_common_LIBRARIES "${Libodb_common_LIBRARIES}" PARENT_SCOPE)
		set(Libodb_sqlite_INCLUDE_DIR "${ODB_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_INCLUDE_DIRS "${Libodb_sqlite_INCLUDE_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_LIBRARY_DIR "${ODB_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_LIBRARY_DIRS "${Libodb_sqlite_LIBRARY_DIR}" PARENT_SCOPE)
		set(Libodb_sqlite_LIBRARIES "${Libodb_sqlite_LIBRARIES}" PARENT_SCOPE)
		set(Odb_Bin "${Odb_Bin}" PARENT_SCOPE)
	endif()
endif ()
 
