1# Copyright 2019 Google LLC 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# https://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15FetchContent_Declare(libcap 16 URL https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.27.tar.gz 17 URL_HASH SHA256=260b549c154b07c3cdc16b9ccc93c04633c39f4fb6a4a3b8d1fa5b8a9c3f5fe8 18) 19FetchContent_MakeAvailable(libcap) 20 21set(libcap_INCLUDE_DIR "${libcap_SOURCE_DIR}/libcap/include") 22 23add_custom_command(OUTPUT ${libcap_SOURCE_DIR}/libcap/cap_names.list.h 24 VERBATIM 25 COMMAND # Use the same logic as libcap/Makefile 26 sed -ne [=[/^#define[ \\t]CAP[_A-Z]\+[ \\t]\+[0-9]\+/{s/^#define \([^ \\t]*\)[ \\t]*\([^ \\t]*\)/\{\"\1\",\2\},/p;}]=] 27 ${libcap_SOURCE_DIR}/libcap/include/uapi/linux/capability.h | 28 tr [:upper:] [:lower:] > ${libcap_SOURCE_DIR}/libcap/cap_names.list.h 29) 30 31if (CMAKE_CROSSCOMPILING AND BUILD_C_COMPILER) 32 add_custom_command(OUTPUT ${libcap_SOURCE_DIR}/libcap/libcap_makenames 33 VERBATIM 34 # Use the same logic as libcap/Makefile 35 COMMAND ${BUILD_C_COMPILER} ${BUILD_C_FLAGS} 36 ${libcap_SOURCE_DIR}/libcap/_makenames.c 37 -o ${libcap_SOURCE_DIR}/libcap/libcap_makenames 38 DEPENDS ${libcap_SOURCE_DIR}/libcap/cap_names.list.h 39 ${libcap_SOURCE_DIR}/libcap/_makenames.c 40 ) 41 42 add_custom_command(OUTPUT ${libcap_SOURCE_DIR}/libcap/cap_names.h 43 COMMAND ${libcap_SOURCE_DIR}/libcap/libcap_makenames > 44 ${libcap_SOURCE_DIR}/libcap/cap_names.h 45 DEPENDS ${libcap_SOURCE_DIR}/libcap/libcap_makenames 46 ) 47else() 48 add_executable(libcap_makenames 49 ${libcap_SOURCE_DIR}/libcap/cap_names.list.h 50 ${libcap_SOURCE_DIR}/libcap/_makenames.c 51 ) 52 53 target_include_directories(libcap_makenames PUBLIC 54 ${libcap_SOURCE_DIR}/libcap 55 ${libcap_SOURCE_DIR}/libcap/include 56 ${libcap_SOURCE_DIR}/libcap/include/uapi 57 ) 58 59 add_custom_command(OUTPUT ${libcap_SOURCE_DIR}/libcap/cap_names.h 60 COMMAND libcap_makenames > ${libcap_SOURCE_DIR}/libcap/cap_names.h 61 ) 62endif() 63 64add_library(cap STATIC 65 ${libcap_SOURCE_DIR}/libcap/cap_alloc.c 66 ${libcap_SOURCE_DIR}/libcap/cap_extint.c 67 ${libcap_SOURCE_DIR}/libcap/cap_file.c 68 ${libcap_SOURCE_DIR}/libcap/cap_flag.c 69 ${libcap_SOURCE_DIR}/libcap/cap_names.h 70 ${libcap_SOURCE_DIR}/libcap/cap_proc.c 71 ${libcap_SOURCE_DIR}/libcap/cap_text.c 72 ${libcap_SOURCE_DIR}/libcap/include/uapi/linux/capability.h 73 ${libcap_SOURCE_DIR}/libcap/libcap.h 74) 75add_library(libcap::libcap ALIAS cap) 76target_include_directories(cap PUBLIC 77 ${libcap_SOURCE_DIR}/libcap 78 ${libcap_SOURCE_DIR}/libcap/include 79 ${libcap_SOURCE_DIR}/libcap/include/uapi 80) 81target_compile_options(cap PRIVATE 82 -Wno-tautological-compare 83 -Wno-unused-result 84) 85target_compile_definitions(cap PRIVATE 86 # Work around sys/xattr.h not declaring this 87 -DXATTR_NAME_CAPS="\"security.capability\"" 88) 89target_link_libraries(cap PRIVATE 90 sapi::base 91) 92