-CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
-PROJECT(bundle C)
-set (VERSION "0.1.31")
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
+PROJECT(bundle C CXX)
+IF("${VERSION}" STREQUAL "")
+ MESSAGE(FATAL_ERROR "VERSION is not defined")
+ENDIF()
+STRING(REGEX MATCH "^[0-9]+" VERSION_MAJOR ${VERSION})
+IF("${VERSION_MAJOR}" STREQUAL "")
+ MESSAGE(FATAL_ERROR "can't get VERSION_MAJOR")
+ENDIF()
-### Required packages
INCLUDE(FindPkgConfig)
-pkg_check_modules(pkgs REQUIRED glib-2.0 dlog)
+PKG_CHECK_MODULES(pkgs REQUIRED
+ glib-2.0 dlog capi-base-common json-glib-1.0
+)
+
FOREACH(flag ${pkgs_CFLAGS})
SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
ENDFOREACH(flag)
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -fvisibility=hidden -flto -Wall -Werror -Winline -Wno-noexcept-type")
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CFLAGS} -std=c++11")
+SET(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O2")
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/src)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/)
-### Local include directories
-include_directories(${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src)
+AUX_SOURCE_DIRECTORY(src SOURCES)
-### Build
-add_library(bundle SHARED
- src/bundle.c
- src/keyval_type.c
- src/keyval.c
- src/keyval_array.c
- )
-set_target_properties(bundle PROPERTIES SOVERSION "0")
-set_target_properties(bundle PROPERTIES VERSION "${VERSION}")
-message(STATUS "Version from debian/changelog: ${VERSION}, Major version: ${VERSION_MAJOR}")
-target_link_libraries(bundle ${pkgs_LDFLAGS})
+ADD_LIBRARY (${PROJECT_NAME} SHARED ${SOURCES})
+SET_TARGET_PROPERTIES(bundle PROPERTIES SOVERSION ${VERSION_MAJOR})
+SET_TARGET_PROPERTIES(bundle PROPERTIES VERSION "${VERSION}")
+
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS} -fPIE")
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINK_FLAGS "-pie")
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
### Make pkgconfig file
SET(PREFIX ${CMAKE_INSTALL_PREFIX})
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/bundle.pc.in ${CMAKE_BINARY_DIR}/bundle.pc @ONLY)
-
### Install
-install(TARGETS bundle
- DESTINATION ${LIB_INSTALL_DIR}
- )
-install(FILES
- ${CMAKE_SOURCE_DIR}/include/bundle.h
- ${CMAKE_SOURCE_DIR}/include/SLP_bundle_PG.h
- DESTINATION include/
- )
-install(FILES ${CMAKE_BINARY_DIR}/bundle.pc
- DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/
- )
-
-
-### Test
-add_subdirectory(test)
+INSTALL(TARGETS bundle DESTINATION ${LIB_INSTALL_DIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ DESTINATION include/)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/bundle.pc DESTINATION ${LIB_INSTALL_DIR}/pkgconfig/)
+
+ADD_SUBDIRECTORY(parcel)
+ADD_DEPENDENCIES(parcel bundle)
+
+IF(NOT DEFINED MINIMUM_BUILD)
+ENABLE_TESTING()
+SET(BUNDLE_UNITTESTS bundle_unittests)
+ADD_TEST(NAME ${BUNDLE_UNITTESTS} COMMAND ${BUNDLE_UNITTESTS}
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/bundle_unittests)
+
+ADD_SUBDIRECTORY(tests)
+ADD_DEPENDENCIES(bundle_unittests bundle)
+
+SET(PARCEL_UNITTESTS parcel_unittests)
+ADD_TEST(NAME ${PARCEL_UNITTESTS} COMMAND ${PARCEL_UNITTESTS}
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests/parcel_unittests)
+ADD_DEPENDENCIES(parcel_unittests parcel)
+ENDIF(NOT DEFINED MINIMUM_BUILD)