diff options
Diffstat (limited to 'ogg/CMakeLists.txt')
-rw-r--r-- | ogg/CMakeLists.txt | 116 |
1 files changed, 116 insertions, 0 deletions
diff --git a/ogg/CMakeLists.txt b/ogg/CMakeLists.txt new file mode 100644 index 0000000..5ab14a2 --- /dev/null +++ b/ogg/CMakeLists.txt @@ -0,0 +1,116 @@ +cmake_minimum_required(VERSION 2.8.7) +project(libogg) + +# Required modules +include(GNUInstallDirs) +include(CheckIncludeFiles) + +# Build options +option(BUILD_SHARED_LIBS "Build shared library" OFF) +if(APPLE) + option(BUILD_FRAMEWORK "Build Framework bundle for OSX" OFF) +endif() + +# Extract project version from configure.ac +file(READ configure.ac CONFIGURE_AC_CONTENTS) +string(REGEX MATCH "AC_INIT\\(\\[libogg\\],\\[([0-9]*).([0-9]*).([0-9]*)" DUMMY ${CONFIGURE_AC_CONTENTS}) +set(PROJECT_VERSION_MAJOR ${CMAKE_MATCH_1}) +set(PROJECT_VERSION_MINOR ${CMAKE_MATCH_2}) +set(PROJECT_VERSION_PATCH ${CMAKE_MATCH_3}) +set(PROJECT_VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) + +# Helper function to get version-info +function(get_version_info result current_var_name age_var_name revision_var_name) + string(REGEX MATCH "${current_var_name}=([0-9]*)" DUMMY ${CONFIGURE_AC_CONTENTS}) + set(VERSION_INFO_CURRENT ${CMAKE_MATCH_1}) + + string(REGEX MATCH "${age_var_name}=([0-9]*)" DUMMY ${CONFIGURE_AC_CONTENTS}) + set(VERSION_INFO_AGE ${CMAKE_MATCH_1}) + + string(REGEX MATCH "${revision_var_name}=([0-9]*)" DUMMY ${CONFIGURE_AC_CONTENTS}) + set(VERSION_INFO_REVISION ${CMAKE_MATCH_1}) + + math(EXPR VERSION_INFO_CURRENT_MINUS_AGE "${VERSION_INFO_CURRENT} - ${VERSION_INFO_AGE}") + + set(${result} "${VERSION_INFO_CURRENT_MINUS_AGE}.${VERSION_INFO_AGE}.${VERSION_INFO_REVISION}" PARENT_SCOPE) +endfunction() + +# Helper function to configure pkg-config files +function(configure_pkg_config_file pkg_config_file_in) + set(prefix ${CMAKE_INSTALL_PREFIX}) + set(exec_prefix ${CMAKE_INSTALL_FULL_BINDIR}) + set(libdir ${CMAKE_INSTALL_FULL_LIBDIR}) + set(includedir ${CMAKE_INSTALL_FULL_INCLUDEDIR}) + set(VERSION ${PROJECT_VERSION}) + string(REPLACE ".in" "" pkg_config_file ${pkg_config_file_in}) + configure_file(${pkg_config_file_in} ${CMAKE_CURRENT_BINARY_DIR}/${pkg_config_file} @ONLY) +endfunction() + +message(STATUS "Configuring ${PROJECT_NAME} ${PROJECT_VERSION}") + +# Configure config_type.h +check_include_files(inttypes.h INCLUDE_INTTYPES_H) +check_include_files(stdint.h INCLUDE_STDINT_H) +check_include_files(sys/types.h INCLUDE_SYS_TYPES_H) + +set(SIZE16 int16_t) +set(USIZE16 uint16_t) +set(SIZE32 int32_t) +set(USIZE32 uint32_t) +set(SIZE64 int64_t) + +configure_file(include/ogg/config_types.h.in ${CMAKE_CURRENT_BINARY_DIR}/include/ogg/config_types.h @ONLY) + +set(OGG_HEADERS + ${CMAKE_CURRENT_BINARY_DIR}/include/ogg/config_types.h + include/ogg/ogg.h + include/ogg/os_types.h +) + +set(OGG_SOURCES + src/bitwise.c + src/framing.c +) + +if(MSVC) + list(APPEND OGG_SOURCES win32/ogg.def) +endif() + +if(BUILD_FRAMEWORK) + set(BUILD_SHARED_LIBS TRUE) +endif() + +include_directories(include ${CMAKE_CURRENT_BINARY_DIR}/include) +add_library(ogg ${OGG_HEADERS} ${OGG_SOURCES}) + +get_version_info(OGG_VERSION_INFO "LIB_CURRENT" "LIB_AGE" "LIB_REVISION") +set_target_properties( + ogg PROPERTIES + SOVERSION ${OGG_VERSION_INFO} + PUBLIC_HEADER "${OGG_HEADERS}" +) + +if(BUILD_FRAMEWORK) + set_target_properties(ogg PROPERTIES + FRAMEWORK TRUE + FRAMEWORK_VERSION ${PROJECT_VERSION} + MACOSX_FRAMEWORK_IDENTIFIER org.xiph.ogg + MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PROJECT_VERSION} + MACOSX_FRAMEWORK_BUNDLE_VERSION ${PROJECT_VERSION} + XCODE_ATTRIBUTE_INSTALL_PATH "@rpath" + OUTPUT_NAME Ogg + ) +endif() + +configure_pkg_config_file(ogg.pc.in) + +install(TARGETS ogg + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + FRAMEWORK DESTINATION ${CMAKE_INSTALL_PREFIX} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/ogg +) +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/ogg.pc + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig +) |