# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
#                                                             #
# File: src/CMakeLists.txt                                    #
#                                                             #
# Project name: SMT-RAT                                       #
# Contact: Florian Corzilius <corzilius@cs.rwth-aachen.de>,   #
#          Ulrich Loup <loup@cs.rwth-aachen.de>               #
# Project page: https://github.com/smtrat/smtrat/wiki         #
# Development status: beta                                    #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# Version: 2013-03-31                                         #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #


include_directories( ${carl_INCLUDE_DIR} )

# Core library
# # # # # # # # # # #
set(lib_core_src
    Common.cpp
)

set(lib_core_headers
    Common.h
)

# Include modules
#######################
add_subdirectory(modules)

# write config.h
#######################
configure_file( ${CMAKE_SOURCE_DIR}/src/lib/config.h.in ${CMAKE_SOURCE_DIR}/src/lib/config.h )

add_subdirectory(utilities)

foreach(name datastructures solver strategies utilities)
  collect_files(lib ${name})
endforeach()

set(lib_${PROJECT_NAME}_SRCS
    ${lib_core_src}
    ${lib_datastructures_src}
    ${lib_modules_src}
    ${lib_solver_src}
    ${lib_strategies_src}
    ${lib_utilities_src}
)

# set linking flags
# # # # # # # # # #

set(STATICLIB "SHARED")
if(STATICLIB_SWITCH)
	set(STATICLIB "STATIC")
endif()

# library target
# # # # # # # # #

add_library(lib_${PROJECT_NAME} ${STATICLIB} ${lib_${PROJECT_NAME}_SRCS} )
set_target_properties( lib_${PROJECT_NAME} PROPERTIES
#		# create *nix style library versions + symbolic links
		VERSION "${${PROJECT_NAME}_MAJORVERSION}.${${PROJECT_NAME}_MINORVERSION}.${${PROJECT_NAME}_MAINTENANCEVERSION}"
		SOVERSION "${${PROJECT_NAME}_MAJORVERSION}.${${PROJECT_NAME}_MINORVERSION}.${${PROJECT_NAME}_MAINTENANCEVERSION}"
#		# allow creating static and shared libs without conflicts
#		# CLEAN_DIRECT_OUTPUT 1
#		# avoid conflicts between library and binary target names
		OUTPUT_NAME ${PROJECT_NAME}
        LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
        ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}
)
if(STATICLIB_SWITCH)
        set(SMTRAT_TARGETS lib_smtrat CACHE STRING INTERNAL FORCE)
	target_link_libraries( lib_${PROJECT_NAME} lib_carl_static ${libraries} ) # libraries definied in top-level CMakeLists.txt
else()
        set(SMTRAT_TARGETS lib_smtrat CACHE STRING INTERNAL FORCE)
	target_link_libraries( lib_${PROJECT_NAME} lib_carl ${libraries} ) # libraries definied in top-level CMakeLists.txt
endif()


if(USE_COTIRE)
    cotire( lib_${PROJECT_NAME} )
endif()




# Install destination and permissions for the library
# # # # # # # # # # # # # # # # # # # # # # # # # # #


install( TARGETS ${SMTRAT_TARGETS}
	EXPORT smtratTargets
	LIBRARY DESTINATION "${LIB_INSTALL_DIR}"
        ARCHIVE DESTINATION "${LIB_INSTALL_DIR}"
        COMPONENT shlib
	PERMISSIONS
		OWNER_READ OWNER_WRITE OWNER_EXECUTE
		GROUP_READ GROUP_EXECUTE
		WORLD_READ WORLD_EXECUTE
)
