CMAKE_MINIMUM_REQUIRED( VERSION 2.6 )
PROJECT(Jreen)

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


# Search for source and headers in source directory (non-recursive)
FILE(GLOB SRC "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
FILE(GLOB HDR "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")

# Add 3rd-party sources
FILE(GLOB_RECURSE 3RD_PARTY_SRC "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/*.cpp")
FILE(GLOB_RECURSE 3RD_PARTY_SRC_C "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/*.c")
FILE(GLOB_RECURSE 3RD_PARTY_HDR "${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/*.h")
LIST(APPEND SRC ${3RD_PARTY_SRC} ${3RD_PARTY_SRC_C})
LIST(APPEND SRC ${3RD_PARTY_SRC})
LIST(APPEND HDR ${3RD_PARTY_HDR})

# Require QT 4.6
SET(QT_MIN_VERSION "4.6.0")

# Search for QT4
FIND_PACKAGE(Qt4 COMPONENTS QtCore QtNetwork QtGui REQUIRED)
INCLUDE(${QT_USE_FILE})
INCLUDE(jreenMacros)
FIND_PACKAGE(QCA2 REQUIRED)
FIND_PACKAGE(ZLIB REQUIRED)
FIND_PACKAGE(LibIDN)

#add_subdirectory(3rdparty)

#spike

# Add include directories
INCLUDE_DIRECTORIES(.
	${CMAKE_CURRENT_BINARY_DIR}
	3rdparty
	${QCA2_INCLUDE_DIR}
	${ZLIB_INCLUDE_DIR}
)
IF(LIBIDN_FOUND)
	INCLUDE_DIRECTORIES(${LIBIDN_INCLUDE_DIR})
	ADD_DEFINITIONS("-DHAVE_IDN=1")
ENDIF(LIBIDN_FOUND)

# Generate moc files
JREEN_WRAP_CPP(MOC_SRC ${HDR})

# This project will generate library

if(SYMBIAN)
	set(JREEN_BUILD_TYPE STATIC)
else()
	set(JREEN_BUILD_TYPE SHARED)
endif()

ADD_LIBRARY(jreen ${JREEN_BUILD_TYPE} ${SRC} ${MOC_SRC} ${HDR} )

#compiler flags
#fixme add macro to clang
if(CMAKE_COMPILER_IS_GNUCXX)
	IF(SYMBIAN)
		#disable stupid warnings
		ADD_DEFINITIONS("-w")
	ELSE()
		ADD_DEFINITIONS("-Wall -Wextra" ) #add -Werror
	ENDIF()
	if(NOT WIN32)
		ADD_DEFINITIONS("-fvisibility=hidden" )
	endif(NOT WIN32)
elseif(MSVC)
	ADD_DEFINITIONS("/W3" )
endif()
ADD_DEFINITIONS(-DJ_BUILD_LIBRARY)

file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/include/jreen" )
file(GLOB JREEN_INCLUDE_HEADERS RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}/src" "${CMAKE_CURRENT_SOURCE_DIR}/src/*.h")
foreach(header ${JREEN_INCLUDE_HEADERS})
	if(NOT ${header} MATCHES ".*_p\\.h")
		if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/include/jreen/${header}")
			file( WRITE "${CMAKE_CURRENT_BINARY_DIR}/include/jreen/${header}"
		"#include \"${CMAKE_CURRENT_SOURCE_DIR}/src/${header}\"
	"
			)
		endif(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/include/jreen/${header}")
	LIST(APPEND JREEN_INSTALL_HEADERS "${CMAKE_CURRENT_SOURCE_DIR}/src/${header}")
    endif(NOT ${header} MATCHES ".*_p\\.h")
endforeach(header)

set(JREEN_LIBRARIES jreen CACHE INTERNAL "" )
set(JREEN_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}/include" CACHE INTERNAL "")

IF(WIN32)
	LIST(APPEND EXTRA_LIBS ws2_32)
ENDIF()
IF(LIBIDN_FOUND)
	LIST(APPEND EXTRA_LIBS ${LIBIDN_LIBRARIES})
ENDIF(LIBIDN_FOUND)

# Link with QT
JREEN_TARGET_LINK_LIBRARIES(jreen ${QT_LIBRARIES} ${QCA2_LIBRARIES} ${ZLIB_LIBRARIES} ${EXTRA_LIBS})

install( TARGETS jreen
	RUNTIME DESTINATION bin
		COMPONENT jreen
	LIBRARY DESTINATION lib${LIB_SUFFIX}
		COMPONENT jreen
	ARCHIVE DESTINATION lib${LIB_SUFFIX}
		COMPONENT jreenDevel
	BUNDLE DESTINATION library
)

INSTALL(FILES ${JREEN_INSTALL_HEADERS}
	DESTINATION include/jreen
		COMPONENT jreenDevel
)
