Add CMake script to build vorbis.
authorstopiccot <alexey.petruchik@gmail.com>
Sun, 7 Jun 2015 14:15:41 +0000 (17:15 +0300)
committerRalph Giles <giles@thaumas.net>
Thu, 18 Jun 2015 21:08:24 +0000 (14:08 -0700)
Signed-off-by: Ralph Giles <giles@thaumas.net>
CMakeLists.txt [new file with mode: 0644]
lib/CMakeLists.txt [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f3f0a95
--- /dev/null
@@ -0,0 +1,69 @@
+cmake_minimum_required(VERSION 2.8.7)
+project(vorbis)
+
+# 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()
+
+if(BUILD_FRAMEWORK)
+       set(BUILD_SHARED_LIBS TRUE)
+endif()
+
+# Extract project version from configure.ac
+file(READ configure.ac CONFIGURE_AC_CONTENTS)
+string(REGEX MATCH "AC_INIT\\(\\[libvorbis\\],\\[([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} ${pkg_config_file} @ONLY)
+endfunction()
+
+message(STATUS "Configuring ${PROJECT_NAME} ${PROJECT_VERSION}")
+
+# Find ogg dependency
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_OGG QUIET ogg)
+find_path(OGG_INCLUDE_DIRS NAMES ogg/ogg.h HINTS ${PC_OGG_INCLUDE_DIRS} PATH_SUFFIXES ogg)
+find_library(OGG_LIBRARIES NAMES ogg HINTS ${PC_OGG_LIBRARY_DIRS})
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(OGG DEFAULT_MSG OGG_INCLUDE_DIRS OGG_LIBRARIES)
+
+add_subdirectory(lib)
+
+configure_pkg_config_file(vorbis.pc.in)
+configure_pkg_config_file(vorbisenc.pc.in)
+configure_pkg_config_file(vorbisfile.pc.in)
+
+install(FILES vorbis.pc vorbisenc.pc vorbisfile.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
diff --git a/lib/CMakeLists.txt b/lib/CMakeLists.txt
new file mode 100644 (file)
index 0000000..c660004
--- /dev/null
@@ -0,0 +1,104 @@
+set(VORBIS_PUBLIC_HEADERS
+    ../include/vorbis/codec.h
+    ../include/vorbis/vorbisenc.h
+    ../include/vorbis/vorbisfile.h
+)
+
+set(VORBIS_HEADERS
+    envelope.h
+    lpc.h
+    lsp.h
+    codebook.h
+    misc.h
+    psy.h
+    masking.h
+    os.h
+    mdct.h
+    smallft.h
+    highlevel.h
+    registry.h
+    scales.h
+    window.h
+    lookup.h
+    lookup_data.h
+    codec_internal.h
+    backends.h
+    bitrate.h
+)
+
+set(VORBIS_SOURCES
+    mdct.c
+    smallft.c
+    block.c
+    envelope.c
+    window.c
+    lsp.c
+    lpc.c
+    analysis.c
+    synthesis.c
+    psy.c
+    info.c
+    floor1.c
+    floor0.c
+    res0.c
+    mapping0.c
+    registry.c
+    codebook.c
+    sharedbook.c
+    lookup.c
+    bitrate.c
+)
+
+set(VORBISFILE_SOURCES
+    vorbisfile.c
+)
+
+set(VORBISENC_SOURCES
+    vorbisenc.c
+)
+
+if(MSVC)
+    list(APPEND VORBIS_SOURCES ../win32/vorbis.def)
+    list(APPEND VORBISENC_SOURCES ../win32/vorbisenc.def)
+    list(APPEND VORBISFILE_SOURCES ../win32/vorbisfile.def)
+endif()
+
+include_directories(../include)
+include_directories(.)
+include_directories(${OGG_INCLUDE_DIRS})
+
+if (NOT BUILD_FRAMEWORK)
+    add_library(vorbis ${VORBIS_HEADERS} ${VORBIS_SOURCES})
+    add_library(vorbisenc ${VORBISENC_SOURCES})
+    add_library(vorbisfile ${VORBISFILE_SOURCES})
+
+    get_version_info(VORBIS_VERSION_INFO "V_LIB_CURRENT" "V_LIB_AGE" "V_LIB_REVISION")
+    set_target_properties(vorbis PROPERTIES SOVERSION ${VORBIS_VERSION_INFO})
+    get_version_info(VORBISENC_VERSION_INFO "VE_LIB_CURRENT" "VE_LIB_AGE" "VE_LIB_REVISION")
+    set_target_properties(vorbisenc PROPERTIES SOVERSION ${VORBISENC_VERSION_INFO})
+    get_version_info(VORBISFILE_VERSION_INFO "VF_LIB_CURRENT" "VF_LIB_AGE" "VF_LIB_REVISION")
+    set_target_properties(vorbisfile PROPERTIES SOVERSION ${VORBISFILE_VERSION_INFO})
+
+    target_link_libraries(vorbis ${OGG_LIBRARIES})
+    target_link_libraries(vorbisenc ${OGG_LIBRARIES})
+    target_link_libraries(vorbisfile ${OGG_LIBRARIES})
+
+    install(FILES ${VORBIS_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_FULL_INCLUDEDIR}/vorbis)
+
+    install(TARGETS vorbis     RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
+    install(TARGETS vorbisenc  RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
+    install(TARGETS vorbisfile RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR})
+else()
+    add_library(vorbis ${VORBIS_PUBLIC_HEADERS} ${VORBIS_HEADERS} ${VORBIS_SOURCES} ${VORBISFILE_SOURCES} ${VORBISENC_SOURCES})
+    set_target_properties(vorbis PROPERTIES
+        FRAMEWORK TRUE
+        FRAMEWORK_VERSION ${PROJECT_VERSION}
+        MACOSX_FRAMEWORK_IDENTIFIER org.xiph.vorbis
+        MACOSX_FRAMEWORK_SHORT_VERSION_STRING ${PROJECT_VERSION}
+        MACOSX_FRAMEWORK_BUNDLE_VERSION ${PROJECT_VERSION}
+        XCODE_ATTRIBUTE_INSTALL_PATH "@rpath"
+        PUBLIC_HEADER "${VORBIS_PUBLIC_HEADERS}"
+        OUTPUT_NAME Vorbis
+    )
+    target_link_libraries(vorbis ${OGG_LIBRARIES})
+endif()