Blame CMakeLists.txt

Packit Service 5195f2
#
Packit Service 5195f2
# CMakeLists.txt --- a simple "cmake" file for building LZO
Packit Service 5195f2
#
Packit Service 5195f2
# This file is part of the LZO data compression library.
Packit Service 5195f2
#
Packit Service 5195f2
# Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer
Packit Service 5195f2
# All Rights Reserved.
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# simple usage:
Packit Service 5195f2
#     mkdir -p build && cd build && cmake .. && make
Packit Service 5195f2
#
Packit Service 5195f2
# another usage example:
Packit Service 5195f2
#     mkdir -p build/release-i686
Packit Service 5195f2
#     cd       build/release-i686
Packit Service 5195f2
#     cmake ../.. -DENABLE_STATIC=0 -DENABLE_SHARED=1 \
Packit Service 5195f2
#         -DCMAKE_C_COMPILER=gcc -DCMAKE_C_FLAGS="-m32 -march=i686" \
Packit Service 5195f2
#         -DCMAKE_INSTALL_PREFIX=/opt/local/prefix-i686
Packit Service 5195f2
#     make VERBOSE=1
Packit Service 5195f2
#     make install
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# init
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
cmake_minimum_required(VERSION 2.6 FATAL_ERROR)
Packit Service 5195f2
Packit Service 5195f2
# Disallow in-source builds. Note that you will still have to manually
Packit Service 5195f2
# clean up a few files if you accidentally try an in-source build.
Packit Service 5195f2
set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
Packit Service 5195f2
set(CMAKE_DISABLE_SOURCE_CHANGES  ON)
Packit Service 5195f2
if(",${CMAKE_SOURCE_DIR}," STREQUAL ",${CMAKE_BINARY_DIR},")
Packit Service 5195f2
    message(FATAL_ERROR "ERROR: In-source builds are not allowed.")
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
project(lzo C)
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# configuration options
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
option(ENABLE_STATIC "Build static LZO library." ON)
Packit Service 5195f2
option(ENABLE_SHARED "Build shared LZO library." OFF)
Packit Service 5195f2
Packit Service 5195f2
if(NOT CMAKE_BUILD_TYPE)
Packit Service 5195f2
    set(CMAKE_BUILD_TYPE "Release" CACHE STRING "" FORCE)
Packit Service 5195f2
endif()
Packit Service 5195f2
if(NOT CMAKE_INSTALL_PREFIX)
Packit Service 5195f2
    set(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "" FORCE)
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# targets
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
file(GLOB lzo_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.c")
Packit Service 5195f2
list(SORT lzo_SOURCES)
Packit Service 5195f2
Packit Service 5195f2
if(NOT ENABLE_STATIC AND NOT ENABLE_SHARED)
Packit Service 5195f2
    set(ENABLE_STATIC ON)
Packit Service 5195f2
endif()
Packit Service 5195f2
if(ENABLE_STATIC)
Packit Service 5195f2
    add_library(lzo_static STATIC ${lzo_SOURCES})
Packit Service 5195f2
    set_target_properties(lzo_static PROPERTIES OUTPUT_NAME lzo2)
Packit Service 5195f2
endif()
Packit Service 5195f2
if(ENABLE_SHARED)
Packit Service 5195f2
    add_library(lzo_shared SHARED ${lzo_SOURCES})
Packit Service 5195f2
    set_target_properties(lzo_shared PROPERTIES OUTPUT_NAME lzo2)
Packit Service 5195f2
    # TODO: VERSION, SOVERSION
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
macro(lzo_add_executable t)
Packit Service 5195f2
    add_executable(${t} ${ARGN})
Packit Service 5195f2
    if(ENABLE_STATIC)
Packit Service 5195f2
        target_link_libraries(${t} lzo_static)
Packit Service 5195f2
    else()
Packit Service 5195f2
        target_link_libraries(${t} lzo_shared)
Packit Service 5195f2
    endif()
Packit Service 5195f2
endmacro()
Packit Service 5195f2
# main test driver
Packit Service 5195f2
lzo_add_executable(lzotest  lzotest/lzotest.c)
Packit Service 5195f2
# examples
Packit Service 5195f2
lzo_add_executable(dict     examples/dict.c)
Packit Service 5195f2
lzo_add_executable(lzopack  examples/lzopack.c)
Packit Service 5195f2
lzo_add_executable(overlap  examples/overlap.c)
Packit Service 5195f2
lzo_add_executable(precomp  examples/precomp.c)
Packit Service 5195f2
lzo_add_executable(precomp2 examples/precomp2.c)
Packit Service 5195f2
lzo_add_executable(simple   examples/simple.c)
Packit Service 5195f2
if(0)
Packit Service 5195f2
# some boring test programs
Packit Service 5195f2
lzo_add_executable(align    tests/align.c)
Packit Service 5195f2
lzo_add_executable(chksum   tests/chksum.c)
Packit Service 5195f2
lzo_add_executable(promote  tests/promote.c)
Packit Service 5195f2
lzo_add_executable(sizes    tests/sizes.c)
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# compilation flags
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
Packit Service 5195f2
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
Packit Service 5195f2
Packit Service 5195f2
include(CheckFunctionExists)
Packit Service 5195f2
include(CheckIncludeFile)
Packit Service 5195f2
include(CheckLibraryExists)
Packit Service 5195f2
include(CheckSymbolExists)
Packit Service 5195f2
include(CheckTypeSize)
Packit Service 5195f2
include(TestBigEndian)
Packit Service 5195f2
Packit Service 5195f2
# Checks for header files
Packit Service 5195f2
macro(lzo_check_include_file f var)
Packit Service 5195f2
    check_include_file("${f}" "${var}")
Packit Service 5195f2
    if(NOT ",${${var}}," STREQUAL ",,")
Packit Service 5195f2
        add_definitions(-D${var}=1)
Packit Service 5195f2
    endif()
Packit Service 5195f2
endmacro()
Packit Service 5195f2
lzo_check_include_file(stdint.h             HAVE_STDINT_H)
Packit Service 5195f2
lzo_check_include_file(sys/stat.h           HAVE_SYS_STAT_H)
Packit Service 5195f2
lzo_check_include_file(sys/types.h          HAVE_SYS_TYPES_H)
Packit Service 5195f2
Packit Service 5195f2
# Checks for typedefs and structures
Packit Service 5195f2
macro(lzo_check_type_size type var)
Packit Service 5195f2
    check_type_size("${type}" "${var}")
Packit Service 5195f2
    if("${${var}}" MATCHES "^[0-9]+$")
Packit Service 5195f2
        add_definitions(-D${var}=${${var}})
Packit Service 5195f2
    endif()
Packit Service 5195f2
endmacro()
Packit Service 5195f2
lzo_check_type_size("short"                 SIZEOF_SHORT)
Packit Service 5195f2
lzo_check_type_size("int"                   SIZEOF_INT)
Packit Service 5195f2
lzo_check_type_size("long"                  SIZEOF_LONG)
Packit Service 5195f2
lzo_check_type_size("long long"             SIZEOF_LONG_LONG)
Packit Service 5195f2
lzo_check_type_size("ptrdiff_t"             SIZEOF_PTRDIFF_T)
Packit Service 5195f2
lzo_check_type_size("size_t"                SIZEOF_SIZE_T)
Packit Service 5195f2
lzo_check_type_size("void *"                SIZEOF_VOID_P)
Packit Service 5195f2
lzo_check_type_size("uintptr_t"             SIZEOF_UINTPTR_T)
Packit Service 5195f2
lzo_check_type_size("__int16"               SIZEOF___INT16)
Packit Service 5195f2
lzo_check_type_size("__int32"               SIZEOF___INT32)
Packit Service 5195f2
lzo_check_type_size("__int64"               SIZEOF___INT64)
Packit Service 5195f2
lzo_check_type_size("off_t"                 SIZEOF_OFF_T)
Packit Service 5195f2
##lzo_check_type_size("off64_t"               SIZEOF_OFF64_T)
Packit Service 5195f2
Packit Service 5195f2
# Checks for library functions
Packit Service 5195f2
macro(lzo_check_function_exists func var)
Packit Service 5195f2
    check_function_exists("${func}" "${var}")
Packit Service 5195f2
    if(NOT ",${${var}}," STREQUAL ",,")
Packit Service 5195f2
        add_definitions(-D${var}=1)
Packit Service 5195f2
    endif()
Packit Service 5195f2
endmacro()
Packit Service 5195f2
lzo_check_function_exists(clock_gettime     HAVE_CLOCK_GETTIME)
Packit Service 5195f2
lzo_check_function_exists(stat              HAVE_STAT)
Packit Service 5195f2
lzo_check_function_exists(strncasecmp       HAVE_STRNCASECMP)
Packit Service 5195f2
lzo_check_function_exists(strnicmp          HAVE_STRNICMP)
Packit Service 5195f2
Packit Service 5195f2
set(big_endian)
Packit Service 5195f2
TEST_BIG_ENDIAN(big_endian)
Packit Service 5195f2
if ("${big_endian}" MATCHES "^1$")
Packit Service 5195f2
    add_definitions(-DLZO_ABI_BIG_ENDIAN=1)
Packit Service 5195f2
elseif ("${big_endian}" MATCHES "^0$")
Packit Service 5195f2
    add_definitions(-DLZO_ABI_LITTLE_ENDIAN=1)
Packit Service 5195f2
else()
Packit Service 5195f2
    message(FATAL_ERROR "ERROR: TEST_BIG_ENDIAN failed.")
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
#
Packit Service 5195f2
# "make install"
Packit Service 5195f2
#
Packit Service 5195f2
Packit Service 5195f2
# subdirs relative to CMAKE_INSTALL_PREFIX
Packit Service 5195f2
if(NOT DEFINED install_doc_subdir)
Packit Service 5195f2
    set(install_doc_subdir doc)
Packit Service 5195f2
endif()
Packit Service 5195f2
if(NOT DEFINED install_include_subdir)
Packit Service 5195f2
    set(install_include_subdir include)
Packit Service 5195f2
endif()
Packit Service 5195f2
if(NOT DEFINED install_lib_subdir)
Packit Service 5195f2
    set(install_lib_subdir lib)
Packit Service 5195f2
endif()
Packit Service 5195f2
if(NOT DEFINED install_examples_subdir)
Packit Service 5195f2
    set(install_examples_subdir libexec/lzo-examples)
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
set(doc_DATA AUTHORS COPYING NEWS THANKS doc/LZO.FAQ doc/LZO.TXT doc/LZOAPI.TXT)
Packit Service 5195f2
set(pkginclude_HEADERS
Packit Service 5195f2
    include/lzo/lzo1.h include/lzo/lzo1a.h include/lzo/lzo1b.h
Packit Service 5195f2
    include/lzo/lzo1c.h include/lzo/lzo1f.h include/lzo/lzo1x.h
Packit Service 5195f2
    include/lzo/lzo1y.h include/lzo/lzo1z.h include/lzo/lzo2a.h
Packit Service 5195f2
    include/lzo/lzo_asm.h include/lzo/lzoconf.h include/lzo/lzodefs.h
Packit Service 5195f2
    include/lzo/lzoutil.h
Packit Service 5195f2
)
Packit Service 5195f2
Packit Service 5195f2
install(FILES ${doc_DATA} DESTINATION ${install_doc_subdir})
Packit Service 5195f2
install(FILES ${pkginclude_HEADERS} DESTINATION ${install_include_subdir}/lzo)
Packit Service 5195f2
if(ENABLE_STATIC)
Packit Service 5195f2
    install(TARGETS lzo_static DESTINATION ${install_lib_subdir})
Packit Service 5195f2
endif()
Packit Service 5195f2
if(ENABLE_SHARED)
Packit Service 5195f2
    install(TARGETS lzo_shared DESTINATION ${install_lib_subdir})
Packit Service 5195f2
endif()
Packit Service 5195f2
if(0)
Packit Service 5195f2
    set(lzo_EXAMPLES lzopack lzotest simple)
Packit Service 5195f2
    if(NOT ENABLE_STATIC)
Packit Service 5195f2
        set(d "${CMAKE_INSTALL_PREFIX}/${install_lib_subdir}")
Packit Service 5195f2
        set_target_properties(${lzo_EXAMPLES} PROPERTIES INSTALL_RPATH "${d}")
Packit Service 5195f2
    endif()
Packit Service 5195f2
    install(TARGETS ${lzo_EXAMPLES} DESTINATION ${install_examples_subdir})
Packit Service 5195f2
endif()
Packit Service 5195f2
Packit Service 5195f2
# vim:set ft=cmake ts=4 sw=4 tw=0 et: