# The subproject name
Project("freeDiameter core library" C)

# Configuration for newer cmake
cmake_policy(VERSION 2.6)
if (POLICY CMP0022)
	cmake_policy(SET CMP0022 OLD)
endif (POLICY CMP0022)

# Configuration parser
BISON_FILE(fdd.y)
FLEX_FILE(fdd.l)
SET_SOURCE_FILES_PROPERTIES(lex.fdd.c fdd.tab.c PROPERTIES COMPILE_FLAGS "-I ${CMAKE_CURRENT_SOURCE_DIR}")

# List of source files
SET(FDCORE_SRC
	fdcore-internal.h
	apps.c
	cnxctx.h
	config.c
	core.c
	cnxctx.c
	endpoints.c
	events.c
	extensions.c
	fifo_stats.c
	hooks.c
	dict_base_proto.c
	messages.c
	queues.c
	peers.c
	p_ce.c
	p_cnx.c
	p_dw.c
	p_dp.c
	p_expiry.c
	p_out.c
	p_psm.c
	p_sr.c
	routing_dispatch.c
	server.c
	tcp.c
	version.c
	)

IF(NOT DISABLE_SCTP)
	SET(FDCORE_SRC ${FDCORE_SRC} sctp.c sctp3436.c)
ENDIF(NOT DISABLE_SCTP)

SET(FDCORE_GEN_SRC
		lex.fdd.c
		fdd.tab.c
		fdd.tab.h
	)
	
# Save the list of files for the tests 
SET(FDCORE_SRC ${FDCORE_SRC} PARENT_SCOPE)
SET(FDCORE_GEN_SRC ${FDCORE_GEN_SRC} PARENT_SCOPE)

# Include path
INCLUDE_DIRECTORIES(${LFDCORE_INCLUDES})
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR})

# Build the executable
ADD_LIBRARY(libfdcore SHARED ${FDCORE_SRC} ${FDCORE_GEN_SRC})
ADD_DEPENDENCIES(libfdcore version_information)

# Avoid the liblib name, and set the version
SET_TARGET_PROPERTIES(libfdcore PROPERTIES 
	OUTPUT_NAME "fdcore"
	SOVERSION ${FD_PROJECT_VERSION_API}
	VERSION ${FD_PROJECT_VERSION_MAJOR}.${FD_PROJECT_VERSION_MINOR}.${FD_PROJECT_VERSION_REV}
	LINK_INTERFACE_LIBRARIES "${LFDCORE_LINK_INTERFACES}")

# The library itself needs other libraries 
LINK_DIRECTORIES(${CURRENT_BINARY_DIR}/../libfdproto)
TARGET_LINK_LIBRARIES(libfdcore libfdproto ${LFDCORE_LIBS})


####
## INSTALL section ##

INSTALL(TARGETS libfdcore
	LIBRARY DESTINATION ${INSTALL_LIBRARY_SUFFIX}
	COMPONENT freeDiameter-common)
