1# Copyright 2020 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 15cmake_minimum_required(VERSION 3.12) 16 17project(libcurl_sandbox) 18 19set(CMAKE_CXX_STANDARD 17) 20set(CMAKE_CXX_STANDARD_REQUIRED True) 21 22option(SAPI_CURL_ENABLE_EXAMPLES "" ON) 23option(SAPI_CURL_ENABLE_TESTS "" ON) 24 25# Add callbacks used by examples and tests 26if (SAPI_CURL_ENABLE_EXAMPLES OR SAPI_CURL_ENABLE_TESTS) 27 list(APPEND CURL_SAPI_CALLBACKS 28 "${CMAKE_CURRENT_SOURCE_DIR}/callbacks/callbacks.h" 29 "${CMAKE_CURRENT_SOURCE_DIR}/callbacks/callbacks.cc" 30 ) 31endif() 32 33# Add folder containing the non-sandboxed custom curl library 34add_subdirectory(curl_wrapper) 35 36# Setup Sandboxed API 37set(SAPI_ROOT "../.." CACHE PATH "Path to the Sandboxed API source tree") 38set(SAPI_BUILD_EXAMPLES ${SAPI_CURL_ENABLE_EXAMPLES} CACHE BOOL "" FORCE) 39set(SAPI_BUILD_TESTING ${SAPI_CURL_ENABLE_TESTS} CACHE BOOL "" FORCE) 40add_subdirectory( 41 "${SAPI_ROOT}" 42 "${CMAKE_BINARY_DIR}/sandboxed-api-build" 43 EXCLUDE_FROM_ALL 44) 45 46# Generate SAPI header 47add_sapi_library(curl_sapi 48 SOURCES sandbox.h 49 50 # List of all the methods in https://curl.haxx.se/libcurl/c/allfuncs.html 51 # Some are added or modified because the original ones are not supported 52 # by Sandboxed API (details can be found in curl_wrapper.h) 53 FUNCTIONS curl_easy_cleanup 54 curl_easy_duphandle 55 curl_easy_escape 56 curl_easy_getinfo 57 curl_easy_getinfo_ptr 58 curl_easy_init 59 curl_easy_pause 60 curl_easy_perform 61 curl_easy_recv 62 curl_easy_reset 63 curl_easy_send 64 curl_easy_setopt 65 curl_easy_setopt_ptr 66 curl_easy_setopt_long 67 curl_easy_setopt_curl_off_t 68 curl_easy_strerror 69 curl_easy_unescape 70 curl_easy_upkeep 71 curl_free 72 curl_getdate_sapi 73 curl_global_cleanup 74 curl_global_init 75 curl_global_init_mem 76 curl_global_sslset 77 curl_mime_addpart 78 curl_mime_data 79 curl_mime_data_cb 80 curl_mime_encoder 81 curl_mime_filedata 82 curl_mime_filename 83 curl_mime_free 84 curl_mime_headers 85 curl_mime_init 86 curl_mime_name 87 curl_mime_subparts 88 curl_mime_type 89 curl_multi_add_handle 90 curl_multi_assign 91 curl_multi_cleanup 92 curl_multi_fdset_sapi 93 curl_multi_info_read 94 curl_multi_init 95 curl_multi_perform 96 curl_multi_remove_handle 97 curl_multi_setopt 98 curl_multi_setopt_ptr 99 curl_multi_setopt_long 100 curl_multi_setopt_curl_off_t 101 curl_multi_socket_action 102 curl_multi_strerror 103 curl_multi_timeout 104 curl_multi_poll_sapi 105 curl_multi_wait_sapi 106 curl_multi_wakeup 107 curl_share_init 108 curl_share_setopt 109 curl_share_setopt_ptr 110 curl_share_setopt_long 111 curl_share_strerror 112 curl_slist_append 113 curl_slist_free_all 114 curl_url 115 curl_url_cleanup 116 curl_url_dup 117 curl_url_get 118 curl_url_set 119 curl_version 120 curl_version_info 121 122 INPUTS curl_wrapper/curl/include/curl/curl.h 123 curl_wrapper/curl_wrapper.h 124 125 LIBRARY curl_wrapper_and_callbacks 126 127 LIBRARY_NAME Curl 128 129 NAMESPACE curl 130) 131target_include_directories(curl_sapi INTERFACE 132 "${PROJECT_BINARY_DIR}" # Include generated SAPI header 133) 134 135add_library(curl_util STATIC 136 curl_util.cc 137 curl_util.h 138) 139target_link_libraries(curl_util PUBLIC 140 curl_sapi 141) 142 143# Add examples 144if (SAPI_CURL_ENABLE_EXAMPLES) 145 add_subdirectory(examples) 146endif() 147 148# Add tests 149if (SAPI_CURL_ENABLE_TESTS) 150 add_subdirectory(tests) 151endif() 152