feat: add install target for cmake (#1269)
this adds an install target which will install binaries, libraries, pkg-config and headers, along with a simple link-test program to verify the installed library and headers work. --------- Co-authored-by: Joey Parrish <joeyparrish@google.com>
This commit is contained in:
parent
0295ef182b
commit
b224fb6e57
|
@ -24,3 +24,4 @@ enable_testing()
|
||||||
|
|
||||||
# Subdirectories with their own CMakeLists.txt
|
# Subdirectories with their own CMakeLists.txt
|
||||||
add_subdirectory(packager)
|
add_subdirectory(packager)
|
||||||
|
add_subdirectory(link-test)
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Copyright 2023 Google LLC. All rights reserved.
|
||||||
|
#
|
||||||
|
# Use of this source code is governed by a BSD-style
|
||||||
|
# license that can be found in the LICENSE file or at
|
||||||
|
# https://developers.google.com/open-source/licenses/bsd
|
||||||
|
|
||||||
|
# If we're building a shared library, make sure it works. We only do this for
|
||||||
|
# a shared library because the static library won't wrap the third-party
|
||||||
|
# dependencies like absl.
|
||||||
|
if(LIBPACKAGER_SHARED)
|
||||||
|
# Install the library and headers to a temporary location.
|
||||||
|
set(TEST_INSTALL_DIR ${CMAKE_BINARY_DIR}/test-install)
|
||||||
|
|
||||||
|
add_custom_target(test-install ALL
|
||||||
|
DEPENDS mpd_generator packager libpackager
|
||||||
|
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_COMMAND} --install . --prefix ${TEST_INSTALL_DIR} --config "$<CONFIG>")
|
||||||
|
|
||||||
|
# Then try to build a very simplistic test app to prove that we can include
|
||||||
|
# the headers and link the library.
|
||||||
|
add_executable(packager_link_test test.cc)
|
||||||
|
add_dependencies(packager_link_test test-install)
|
||||||
|
target_link_directories(packager_link_test PRIVATE ${TEST_INSTALL_DIR}/lib)
|
||||||
|
target_include_directories(packager_link_test PRIVATE ${TEST_INSTALL_DIR}/include)
|
||||||
|
if(NOT MSVC)
|
||||||
|
target_link_libraries(packager_link_test -lpackager)
|
||||||
|
else()
|
||||||
|
target_link_libraries(packager_link_test ${TEST_INSTALL_DIR}/lib/libpackager.lib)
|
||||||
|
endif()
|
||||||
|
endif()
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Link test for libpackager
|
||||||
|
|
||||||
|
This is a dummy application to test linking libpackager. It gives us a build
|
||||||
|
target that validates our install target works and that our public headers (in
|
||||||
|
`../include/packager/...`) are complete and self-contained.
|
|
@ -0,0 +1,35 @@
|
||||||
|
// Copyright 2023 Google LLC. All rights reserved.
|
||||||
|
//
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file or at
|
||||||
|
// https://developers.google.com/open-source/licenses/bsd
|
||||||
|
|
||||||
|
// This is a simple app to test linking against a shared libpackager on all
|
||||||
|
// platforms. It's not meant to do anything useful at all.
|
||||||
|
|
||||||
|
#include <cstdio>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <packager/packager.h>
|
||||||
|
|
||||||
|
int main(int argc, char** argv) {
|
||||||
|
// Unused. Silence warnings.
|
||||||
|
(void)argc;
|
||||||
|
(void)argv;
|
||||||
|
|
||||||
|
// Print the packager version.
|
||||||
|
std::cout << "Packager v" + shaka::Packager::GetLibraryVersion() + "\n";
|
||||||
|
|
||||||
|
// Don't bother filling these out. Just make sure it links.
|
||||||
|
shaka::PackagingParams packaging_params;
|
||||||
|
std::vector<shaka::StreamDescriptor> stream_descriptors;
|
||||||
|
|
||||||
|
// This will fail.
|
||||||
|
shaka::Packager packager;
|
||||||
|
shaka::Status status =
|
||||||
|
packager.Initialize(packaging_params, stream_descriptors);
|
||||||
|
|
||||||
|
// Just print the status to make sure we can do that in a custom app.
|
||||||
|
std::cout << status.ToString() + "\n";
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
# Packager CMake build file.
|
# Packager CMake build file.
|
||||||
|
|
||||||
|
# Include a module to define standard install directories.
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
# Build static libs by default, or shared if LIBPACKAGER_SHARED is defined.
|
# Build static libs by default, or shared if LIBPACKAGER_SHARED is defined.
|
||||||
if(LIBPACKAGER_SHARED)
|
if(LIBPACKAGER_SHARED)
|
||||||
add_definitions(-DSHARED_LIBRARY_BUILD)
|
add_definitions(-DSHARED_LIBRARY_BUILD)
|
||||||
|
@ -114,6 +117,10 @@ target_link_libraries(libpackager
|
||||||
string_utils
|
string_utils
|
||||||
version
|
version
|
||||||
)
|
)
|
||||||
|
# Avoid liblibpackager on Windows:
|
||||||
|
if(NOT MSVC)
|
||||||
|
set_property(TARGET libpackager PROPERTY OUTPUT_NAME packager)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_executable(packager
|
add_executable(packager
|
||||||
app/ad_cue_generator_flags.cc
|
app/ad_cue_generator_flags.cc
|
||||||
|
@ -183,3 +190,14 @@ target_link_libraries(packager_test
|
||||||
gmock
|
gmock
|
||||||
gtest
|
gtest
|
||||||
gtest_main)
|
gtest_main)
|
||||||
|
|
||||||
|
configure_file(packager.pc.in packager.pc @ONLY)
|
||||||
|
|
||||||
|
|
||||||
|
install(TARGETS mpd_generator packager libpackager
|
||||||
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
|
install(DIRECTORY ../include/packager
|
||||||
|
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
|
||||||
|
install(FILES tools/pssh/pssh-box.py DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||||
|
install(FILES ${CMAKE_BINARY_DIR}/packager/packager.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
||||||
|
|
|
@ -1,149 +0,0 @@
|
||||||
# Copyright 2014 Google LLC. All rights reserved.
|
|
||||||
#
|
|
||||||
# Use of this source code is governed by a BSD-style
|
|
||||||
# license that can be found in the LICENSE file or at
|
|
||||||
# https://developers.google.com/open-source/licenses/bsd
|
|
||||||
#
|
|
||||||
# This file contains common settings for building packager components.
|
|
||||||
|
|
||||||
{
|
|
||||||
'variables': {
|
|
||||||
'variables': {
|
|
||||||
'shaka_code%': 0,
|
|
||||||
# musl is a lightweight C standard library used in Alpine Linux.
|
|
||||||
'musl%': 0,
|
|
||||||
# This is a flag from build/common.gypi to allow linker warnings.
|
|
||||||
# This may be necessary with static_link_binaries=1.
|
|
||||||
'disable_fatal_linker_warnings%': '0',
|
|
||||||
'libpackager_type%': 'static_library',
|
|
||||||
'static_link_binaries%': '0',
|
|
||||||
},
|
|
||||||
|
|
||||||
'shaka_code%': '<(shaka_code)',
|
|
||||||
'musl%': '<(musl)',
|
|
||||||
'disable_fatal_linker_warnings%': '<(disable_fatal_linker_warnings)',
|
|
||||||
'libpackager_type%': '<(libpackager_type)',
|
|
||||||
'static_link_binaries%': '<(static_link_binaries)',
|
|
||||||
|
|
||||||
'conditions': [
|
|
||||||
['shaka_code==1', {
|
|
||||||
# This enable warnings and warnings-as-errors.
|
|
||||||
'chromium_code': 1,
|
|
||||||
}],
|
|
||||||
# These are some Chromium build settings that are normally keyed off of
|
|
||||||
# component=="shared_library". We don't use component=="shared_library"
|
|
||||||
# because it would result in a shared lib for every single component, but
|
|
||||||
# we still need these settings for a shared library build of libpackager
|
|
||||||
# on Windows.
|
|
||||||
['libpackager_type=="shared_library"', {
|
|
||||||
# Make sure we use a dynamic CRT to avoid issues with std::string in
|
|
||||||
# the library API on Windows.
|
|
||||||
'win_release_RuntimeLibrary': '2', # 2 = /MD (nondebug DLL)
|
|
||||||
'win_debug_RuntimeLibrary': '3', # 3 = /MDd (debug DLL)
|
|
||||||
# Skip the Windows allocator shim on Windows. Using this with a shared
|
|
||||||
# library results in build errors.
|
|
||||||
'win_use_allocator_shim': 0,
|
|
||||||
}],
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'target_defaults': {
|
|
||||||
'defines': [
|
|
||||||
# These defines make the contents of base/mac/foundation_util.h compile
|
|
||||||
# against the standard OSX SDK, by renaming Chrome's opaque type and
|
|
||||||
# using the real OSX type. This was not necessary before we switched
|
|
||||||
# away from using hermetic copies of clang and the sysroot to build.
|
|
||||||
'OpaqueSecTrustRef=__SecACL',
|
|
||||||
'OpaqueSecTrustedApplicationRef=__SecTrustedApplication',
|
|
||||||
],
|
|
||||||
'conditions': [
|
|
||||||
['shaka_code==1', {
|
|
||||||
'include_dirs': [
|
|
||||||
'.',
|
|
||||||
'..',
|
|
||||||
],
|
|
||||||
'cflags': [
|
|
||||||
# This is triggered by logging macros.
|
|
||||||
'-Wno-implicit-fallthrough',
|
|
||||||
# Triggered by unit tests, which override things in mocks. gmock
|
|
||||||
# doesn't mark them as override. An upgrade may help. TODO: try
|
|
||||||
# upgrading gmock.
|
|
||||||
'-Wno-inconsistent-missing-override',
|
|
||||||
# Triggered by base/time/time.h when using clang, but NOT on Mac.
|
|
||||||
'-Wno-implicit-const-int-float-conversion',
|
|
||||||
],
|
|
||||||
'xcode_settings': {
|
|
||||||
'WARNING_CFLAGS': [
|
|
||||||
# This is triggered by logging macros.
|
|
||||||
'-Wno-implicit-fallthrough',
|
|
||||||
# Triggered by unit tests, which override things in mocks. gmock
|
|
||||||
# doesn't mark them as override. An upgrade may help. TODO: try
|
|
||||||
# upgrading gmock.
|
|
||||||
'-Wno-inconsistent-missing-override',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
# TODO(kqyang): Fix these msvs warnings.
|
|
||||||
'msvs_disabled_warnings': [
|
|
||||||
4125, # Decimal digit terminates octal escape sequence, e.g. "\709".
|
|
||||||
4819, # The file contains a character that cannot be represented in
|
|
||||||
# the current code page. It typically happens when compiling
|
|
||||||
# the code in CJK environment if there is non-ASCII characters
|
|
||||||
# in the file.
|
|
||||||
4251, # Warnings about private std::string in Status in a shared
|
|
||||||
# library config on Windows.
|
|
||||||
],
|
|
||||||
}, {
|
|
||||||
# We do not have control over non-shaka code. Disable some warnings to
|
|
||||||
# make build pass.
|
|
||||||
'cflags': [
|
|
||||||
'-Wno-error',
|
|
||||||
],
|
|
||||||
'variables': {
|
|
||||||
'clang_warning_flags': [
|
|
||||||
'-Wno-error',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'xcode_settings': {
|
|
||||||
'WARNING_CFLAGS': [
|
|
||||||
'-Wno-error',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
'msvs_disabled_warnings': [
|
|
||||||
4819, # The file contains a character that cannot be represented in
|
|
||||||
# the current code page. It typically happens when compiling
|
|
||||||
# the code in CJK environment if there is non-ASCII characters
|
|
||||||
# in the file.
|
|
||||||
],
|
|
||||||
}],
|
|
||||||
['musl==1', {
|
|
||||||
'defines': [
|
|
||||||
# musl is not uClibc but is similar to uClibc that a minimal feature
|
|
||||||
# set is supported. One of Shaka Packager's dependencies, Chromium
|
|
||||||
# base uses __UCLIBC__ flag to disable some features, which needs to
|
|
||||||
# be disabled for musl too.
|
|
||||||
'__UCLIBC__',
|
|
||||||
],
|
|
||||||
'cflags!': [
|
|
||||||
# Do not treat warnings as errors on musl as there is a hard-coded
|
|
||||||
# warning in musl's sys/errno.h.
|
|
||||||
'-Werror',
|
|
||||||
],
|
|
||||||
}],
|
|
||||||
['static_link_binaries==1', {
|
|
||||||
'conditions': [
|
|
||||||
['OS=="linux"', {
|
|
||||||
'defines': [
|
|
||||||
# Even when we are not using musl or uClibc, pretending to use
|
|
||||||
# uClibc on Linux is the only way to disable certain Chromium
|
|
||||||
# base features, such as hooking into malloc. Hooking into
|
|
||||||
# malloc, in turn, fails when we are linking statically.
|
|
||||||
'__UCLIBC__',
|
|
||||||
],
|
|
||||||
}],
|
|
||||||
],
|
|
||||||
'ldflags': [
|
|
||||||
'-static',
|
|
||||||
],
|
|
||||||
}],
|
|
||||||
],
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
# Copyright (c) 2021-present, Facebook, Inc.
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# This source code is licensed under the BSD3 license found in the
|
||||||
|
# LICENSE file in the root directory of this source tree.
|
||||||
|
|
||||||
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
exec_prefix=${prefix}
|
||||||
|
libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
|
||||||
|
Name: @PROJECT_NAME@
|
||||||
|
Description: @PROJECT_DESCRIPTION@
|
||||||
|
Version: @PROJECT_VERSION@
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -lpackager
|
||||||
|
Cflags: -I${includedir}
|
Loading…
Reference in New Issue