blob: a223f341b4907937a535a923429039088bd4c55e [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.4)
project(AvroC)
enable_testing()
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR})
# Eliminates warning about linker paths when linking both zlib and
# liblzma.
cmake_policy(SET CMP0003 NEW)
#-----------------------------------------------------------------------
# Retrieve the current version number
if (UNIX)
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/version.sh project
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE AVRO_VERSION_RESULT
OUTPUT_VARIABLE AVRO_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(AVRO_VERSION_RESULT)
message(FATAL_ERROR "Cannot determine Avro version number")
endif(AVRO_VERSION_RESULT)
execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/version.sh libtool
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
RESULT_VARIABLE LIBAVRO_VERSION_RESULT
OUTPUT_VARIABLE LIBAVRO_VERSION
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(LIBAVRO_VERSION_RESULT)
message(FATAL_ERROR "Cannot determine libavro version number")
endif(LIBAVRO_VERSION_RESULT)
else(UNIX)
# Hard code for win32 -- need to figure out how to port version.sh for
# Windows.
set(LIBAVRO_VERSION "22:0:0")
endif(UNIX)
#-----------------------------------------------------------------------
# Extract major.minor.patch from version number
if (UNIX)
string(REGEX REPLACE "([0-9]+)\\..*"
"\\1"
AVRO_MAJOR_VERSION
${AVRO_VERSION}
)
string(REGEX REPLACE ".*\\.([0-9]+)\\..*"
"\\1"
AVRO_MINOR_VERSION
${AVRO_VERSION}
)
string(REGEX REPLACE ".*\\..*\\.([0-9]+).*"
"\\1"
AVRO_PATCH_VERSION
${AVRO_VERSION}
)
string(REGEX REPLACE ".*\\..*\\.[0-9]+(.*)"
"\\1"
AVRO_VERSION_EXTENSION
${AVRO_VERSION}
)
endif(UNIX)
#-----------------------------------------------------------------------
# Source package support
include(CPackConfig.txt)
include(CheckLibraryExists)
if(APPLE)
if (NOT CMAKE_INSTALL_NAME_DIR)
set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
endif (NOT CMAKE_INSTALL_NAME_DIR)
endif(APPLE)
if(CMAKE_COMPILER_IS_GNUCC)
add_definitions(-W -Wall)
endif(CMAKE_COMPILER_IS_GNUCC)
if (WIN32)
# Compile win32 in C++ to allow declarations after statements
add_definitions(/TP)
endif(WIN32)
# Uncomment to allow missing fields in the resolved-writer
# add_definitions(-DAVRO_ALLOW_MISSING_FIELDS_IN_RESOLVED_WRITER)
# Uncomment to allow non-atomic increment/decrement of reference count
# add_definitions(-DAVRO_ALLOW_NON_ATOMIC_REFCOUNT)
# Thread support (only for *nix with pthreads)
set(THREADS_LIBRARIES)
if(UNIX AND THREADSAFE AND CMAKE_COMPILER_IS_GNUCC)
set(CMAKE_THREAD_PREFER_PTHREAD)
find_package(Threads)
if(NOT CMAKE_USE_PTHREADS_INIT)
message(FATAL_ERROR "pthreads not found")
endif(NOT CMAKE_USE_PTHREADS_INIT)
add_definitions(-DTHREADSAFE -D_REENTRANT)
set(THREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
endif(UNIX AND THREADSAFE AND CMAKE_COMPILER_IS_GNUCC)
include_directories(${AvroC_SOURCE_DIR}/src)
include_directories(${AvroC_SOURCE_DIR}/jansson/src)
# Enable codecs
find_package(ZLIB)
if (ZLIB_FOUND)
set(ZLIB_PKG zlib)
add_definitions(-DDEFLATE_CODEC)
include_directories(${ZLIB_INCLUDE_DIR})
message("Enabled deflate codec")
else (ZLIB_FOUND)
set(ZLIB_PKG "")
set(ZLIB_LIBRARIES "")
message("Disabled deflate codec. zlib not found.")
endif (ZLIB_FOUND)
find_package(Snappy)
if (SNAPPY_FOUND AND ZLIB_FOUND) # Snappy borrows crc32 from zlib
set(SNAPPY_PKG libsnappy)
add_definitions(-DSNAPPY_CODEC)
message("Enabled snappy codec")
else (SNAPPY_FOUND AND ZLIB_FOUND)
set(SNAPPY_PKG "")
set(SNAPPY_LIBRARIES "")
message("Disabled snappy codec. libsnappy not found or zlib not found.")
endif (SNAPPY_FOUND AND ZLIB_FOUND)
find_package(PkgConfig)
pkg_check_modules(LZMA liblzma)
if (LZMA_FOUND)
set(LZMA_PKG liblzma)
add_definitions(-DLZMA_CODEC)
include_directories(${LZMA_INCLUDE_DIRS})
link_directories(${LZMA_LIBRARY_DIRS})
message("Enabled lzma codec")
else (LZMA_FOUND)
set(LZMA_PKG "")
set(LZMA_LIBRARIES "")
message("Disabled lzma codec. liblzma not found.")
endif (LZMA_FOUND)
set(CODEC_LIBRARIES ${ZLIB_LIBRARIES} ${LZMA_LIBRARIES} ${SNAPPY_LIBRARIES})
set(CODEC_PKG "@ZLIB_PKG@ @LZMA_PKG@ @SNAPPY_PKG@")
add_subdirectory(src)
add_subdirectory(examples)
add_subdirectory(tests)
add_subdirectory(docs)
add_custom_target(pretty
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_SOURCE_DIR}/cmake_pretty.cmake")