blob: 20327fcd9e316209b7fc6f0a0eaecb41fe5e7e19 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
cmake_minimum_required (VERSION 2.6)
project (Proton C)
set (PN_VERSION_MAJOR 0)
set (PN_VERSION_MINOR 1)
set (PN_VERSION "${PN_VERSION_MAJOR}.${PN_VERSION_MINOR}")
# In rpm builds the build sets some variables:
# CMAKE_INSTALL_PREFIX - this is a standard cmake variable
# INCLUDE_INSTALL_DIR
# LIB_INSTALL_DIR
# SYSCONF_INSTALL_DIR
# SHARE_INSTALL_DIR
# So make these cached variables and the specific variables non cached
# and derived from them.
if (NOT DEFINED LIB_SUFFIX)
get_property(LIB64 GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS)
if (${LIB64} STREQUAL "TRUE" AND ${CMAKE_SIZEOF_VOID_P} STREQUAL "8")
set(LIB_SUFFIX 64)
else()
set(LIB_SUFFIX "")
endif()
endif()
set (INCLUDE_INSTALL_DIR include CACHE PATH "Include file directory")
set (LIB_INSTALL_DIR "lib${LIB_SUFFIX}" CACHE PATH "Library object file directory")
set (SYSCONF_INSTALL_DIR etc CACHE PATH "System read only configuration directory")
set (SHARE_INSTALL_DIR share CACHE PATH "Shared read only data directory")
set (PROTON_SHARE ${SHARE_INSTALL_DIR}/proton)
if (${CMAKE_VERSION} VERSION_LESS "2.8.0")
set (OPTIONAL_ARG "")
add_custom_target(docs ALL)
else()
set (OPTIONAL_ARG OPTIONAL)
add_custom_target(docs)
endif()
# Set the default SSL/TLS implementation
find_package(OpenSSL)
set(ssl_impl, none)
if (OPENSSL_FOUND)
set(ssl_impl openssl)
endif(OPENSSL_FOUND)
set(SSL_IMPL ${ssl_impl} CACHE STRING "Library to use for SSL/TLS support. Valid values: 'none','openssl'")
configure_file (
"${PROJECT_SOURCE_DIR}/pn_config.h.in"
"${PROJECT_BINARY_DIR}/pn_config.h"
)
include_directories ("${PROJECT_BINARY_DIR}")
include_directories ("${PROJECT_SOURCE_DIR}/include")
add_custom_command (
OUTPUT ${PROJECT_BINARY_DIR}/encodings.h
COMMAND PYTHONPATH=${PROJECT_SOURCE_DIR} python ${PROJECT_SOURCE_DIR}/src/codec/encodings.h.py > ${PROJECT_BINARY_DIR}/encodings.h
DEPENDS ${PROJECT_SOURCE_DIR}/src/codec/encodings.h.py
)
add_custom_command (
OUTPUT ${PROJECT_BINARY_DIR}/protocol.h
COMMAND PYTHONPATH=${PROJECT_SOURCE_DIR} python ${PROJECT_SOURCE_DIR}/src/protocol.h.py > ${PROJECT_BINARY_DIR}/protocol.h
DEPENDS ${PROJECT_SOURCE_DIR}/src/protocol.h.py
)
# Link in openssl if present
if (SSL_IMPL STREQUAL openssl)
set (pn_driver_ssl_impl src/ssl/openssl.c)
set (SSL_LIB ${OPENSSL_LIBRARIES})
else (SSL_IMPL STREQUAL openssl)
set (pn_driver_ssl_impl src/ssl/ssl_stub.c)
endif (SSL_IMPL STREQUAL openssl)
find_package(SWIG)
if (SWIG_FOUND)
add_subdirectory(bindings)
endif (SWIG_FOUND)
add_subdirectory(docs/api)
# Should really be finding the uuid library appropriate for the platform
# in lieu of doing this set the library name directly.
set (UUID_LIB uuid)
set (qpid-proton-platform
src/driver.c
${pn_driver_ssl_impl}
)
add_library (
qpid-proton SHARED
src/util.c
src/error.c
src/buffer.c
src/parser.c
src/scanner.c
src/types.c
src/framing/framing.c
src/codec/codec.c
src/dispatcher/dispatcher.c
src/engine/engine.c
src/message/message.c
src/sasl/sasl.c
src/messenger.c
${qpid-proton-platform}
${PROJECT_BINARY_DIR}/encodings.h
${PROJECT_BINARY_DIR}/protocol.h
)
target_link_libraries (qpid-proton ${UUID_LIB} ${SSL_LIB})
add_executable (proton src/proton.c)
target_link_libraries (proton qpid-proton)
add_executable (proton-dump src/proton-dump.c)
target_link_libraries (proton-dump qpid-proton)
set_target_properties (
qpid-proton proton proton-dump
PROPERTIES
COMPILE_FLAGS "-Wall -Werror -pedantic-errors -std=c99 -g -Iinclude -fPIC"
)
# Install executables and libraries
install (TARGETS proton proton-dump qpid-proton
RUNTIME DESTINATION bin
LIBRARY DESTINATION ${LIB_INSTALL_DIR})
# Install header files
file(GLOB headers "include/proton/*.[hi]")
install (FILES ${headers} DESTINATION ${INCLUDE_INSTALL_DIR}/proton)
# Install documentation files
install (FILES LICENSE README TODO
DESTINATION ${PROTON_SHARE})
# Pkg config file
configure_file(${PROJECT_SOURCE_DIR}/src/libqpid-proton.pc.in
${PROJECT_BINARY_DIR}/libqpid-proton.pc @ONLY)
install (FILES ${PROJECT_BINARY_DIR}/libqpid-proton.pc
DESTINATION ${LIB_INSTALL_DIR}/pkgconfig)