1*ec63e07aSXin Li# Copyright 2020 Google LLC 2*ec63e07aSXin Li# 3*ec63e07aSXin Li# Licensed under the Apache License, Version 2.0 (the "License"); 4*ec63e07aSXin Li# you may not use this file except in compliance with the License. 5*ec63e07aSXin Li# You may obtain a copy of the License at 6*ec63e07aSXin Li# 7*ec63e07aSXin Li# https://www.apache.org/licenses/LICENSE-2.0 8*ec63e07aSXin Li# 9*ec63e07aSXin Li# Unless required by applicable law or agreed to in writing, software 10*ec63e07aSXin Li# distributed under the License is distributed on an "AS IS" BASIS, 11*ec63e07aSXin Li# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*ec63e07aSXin Li# See the License for the specific language governing permissions and 13*ec63e07aSXin Li# limitations under the License. 14*ec63e07aSXin Li 15*ec63e07aSXin Licmake_minimum_required(VERSION 3.12) 16*ec63e07aSXin Li 17*ec63e07aSXin Liproject(libcurl_sandbox) 18*ec63e07aSXin Li 19*ec63e07aSXin Liset(CMAKE_CXX_STANDARD 17) 20*ec63e07aSXin Liset(CMAKE_CXX_STANDARD_REQUIRED True) 21*ec63e07aSXin Li 22*ec63e07aSXin Lioption(SAPI_CURL_ENABLE_EXAMPLES "" ON) 23*ec63e07aSXin Lioption(SAPI_CURL_ENABLE_TESTS "" ON) 24*ec63e07aSXin Li 25*ec63e07aSXin Li# Add callbacks used by examples and tests 26*ec63e07aSXin Liif (SAPI_CURL_ENABLE_EXAMPLES OR SAPI_CURL_ENABLE_TESTS) 27*ec63e07aSXin Li list(APPEND CURL_SAPI_CALLBACKS 28*ec63e07aSXin Li "${CMAKE_CURRENT_SOURCE_DIR}/callbacks/callbacks.h" 29*ec63e07aSXin Li "${CMAKE_CURRENT_SOURCE_DIR}/callbacks/callbacks.cc" 30*ec63e07aSXin Li ) 31*ec63e07aSXin Liendif() 32*ec63e07aSXin Li 33*ec63e07aSXin Li# Add folder containing the non-sandboxed custom curl library 34*ec63e07aSXin Liadd_subdirectory(curl_wrapper) 35*ec63e07aSXin Li 36*ec63e07aSXin Li# Setup Sandboxed API 37*ec63e07aSXin Liset(SAPI_ROOT "../.." CACHE PATH "Path to the Sandboxed API source tree") 38*ec63e07aSXin Liset(SAPI_BUILD_EXAMPLES ${SAPI_CURL_ENABLE_EXAMPLES} CACHE BOOL "" FORCE) 39*ec63e07aSXin Liset(SAPI_BUILD_TESTING ${SAPI_CURL_ENABLE_TESTS} CACHE BOOL "" FORCE) 40*ec63e07aSXin Liadd_subdirectory( 41*ec63e07aSXin Li "${SAPI_ROOT}" 42*ec63e07aSXin Li "${CMAKE_BINARY_DIR}/sandboxed-api-build" 43*ec63e07aSXin Li EXCLUDE_FROM_ALL 44*ec63e07aSXin Li) 45*ec63e07aSXin Li 46*ec63e07aSXin Li# Generate SAPI header 47*ec63e07aSXin Liadd_sapi_library(curl_sapi 48*ec63e07aSXin Li SOURCES sandbox.h 49*ec63e07aSXin Li 50*ec63e07aSXin Li # List of all the methods in https://curl.haxx.se/libcurl/c/allfuncs.html 51*ec63e07aSXin Li # Some are added or modified because the original ones are not supported 52*ec63e07aSXin Li # by Sandboxed API (details can be found in curl_wrapper.h) 53*ec63e07aSXin Li FUNCTIONS curl_easy_cleanup 54*ec63e07aSXin Li curl_easy_duphandle 55*ec63e07aSXin Li curl_easy_escape 56*ec63e07aSXin Li curl_easy_getinfo 57*ec63e07aSXin Li curl_easy_getinfo_ptr 58*ec63e07aSXin Li curl_easy_init 59*ec63e07aSXin Li curl_easy_pause 60*ec63e07aSXin Li curl_easy_perform 61*ec63e07aSXin Li curl_easy_recv 62*ec63e07aSXin Li curl_easy_reset 63*ec63e07aSXin Li curl_easy_send 64*ec63e07aSXin Li curl_easy_setopt 65*ec63e07aSXin Li curl_easy_setopt_ptr 66*ec63e07aSXin Li curl_easy_setopt_long 67*ec63e07aSXin Li curl_easy_setopt_curl_off_t 68*ec63e07aSXin Li curl_easy_strerror 69*ec63e07aSXin Li curl_easy_unescape 70*ec63e07aSXin Li curl_easy_upkeep 71*ec63e07aSXin Li curl_free 72*ec63e07aSXin Li curl_getdate_sapi 73*ec63e07aSXin Li curl_global_cleanup 74*ec63e07aSXin Li curl_global_init 75*ec63e07aSXin Li curl_global_init_mem 76*ec63e07aSXin Li curl_global_sslset 77*ec63e07aSXin Li curl_mime_addpart 78*ec63e07aSXin Li curl_mime_data 79*ec63e07aSXin Li curl_mime_data_cb 80*ec63e07aSXin Li curl_mime_encoder 81*ec63e07aSXin Li curl_mime_filedata 82*ec63e07aSXin Li curl_mime_filename 83*ec63e07aSXin Li curl_mime_free 84*ec63e07aSXin Li curl_mime_headers 85*ec63e07aSXin Li curl_mime_init 86*ec63e07aSXin Li curl_mime_name 87*ec63e07aSXin Li curl_mime_subparts 88*ec63e07aSXin Li curl_mime_type 89*ec63e07aSXin Li curl_multi_add_handle 90*ec63e07aSXin Li curl_multi_assign 91*ec63e07aSXin Li curl_multi_cleanup 92*ec63e07aSXin Li curl_multi_fdset_sapi 93*ec63e07aSXin Li curl_multi_info_read 94*ec63e07aSXin Li curl_multi_init 95*ec63e07aSXin Li curl_multi_perform 96*ec63e07aSXin Li curl_multi_remove_handle 97*ec63e07aSXin Li curl_multi_setopt 98*ec63e07aSXin Li curl_multi_setopt_ptr 99*ec63e07aSXin Li curl_multi_setopt_long 100*ec63e07aSXin Li curl_multi_setopt_curl_off_t 101*ec63e07aSXin Li curl_multi_socket_action 102*ec63e07aSXin Li curl_multi_strerror 103*ec63e07aSXin Li curl_multi_timeout 104*ec63e07aSXin Li curl_multi_poll_sapi 105*ec63e07aSXin Li curl_multi_wait_sapi 106*ec63e07aSXin Li curl_multi_wakeup 107*ec63e07aSXin Li curl_share_init 108*ec63e07aSXin Li curl_share_setopt 109*ec63e07aSXin Li curl_share_setopt_ptr 110*ec63e07aSXin Li curl_share_setopt_long 111*ec63e07aSXin Li curl_share_strerror 112*ec63e07aSXin Li curl_slist_append 113*ec63e07aSXin Li curl_slist_free_all 114*ec63e07aSXin Li curl_url 115*ec63e07aSXin Li curl_url_cleanup 116*ec63e07aSXin Li curl_url_dup 117*ec63e07aSXin Li curl_url_get 118*ec63e07aSXin Li curl_url_set 119*ec63e07aSXin Li curl_version 120*ec63e07aSXin Li curl_version_info 121*ec63e07aSXin Li 122*ec63e07aSXin Li INPUTS curl_wrapper/curl/include/curl/curl.h 123*ec63e07aSXin Li curl_wrapper/curl_wrapper.h 124*ec63e07aSXin Li 125*ec63e07aSXin Li LIBRARY curl_wrapper_and_callbacks 126*ec63e07aSXin Li 127*ec63e07aSXin Li LIBRARY_NAME Curl 128*ec63e07aSXin Li 129*ec63e07aSXin Li NAMESPACE curl 130*ec63e07aSXin Li) 131*ec63e07aSXin Litarget_include_directories(curl_sapi INTERFACE 132*ec63e07aSXin Li "${PROJECT_BINARY_DIR}" # Include generated SAPI header 133*ec63e07aSXin Li) 134*ec63e07aSXin Li 135*ec63e07aSXin Liadd_library(curl_util STATIC 136*ec63e07aSXin Li curl_util.cc 137*ec63e07aSXin Li curl_util.h 138*ec63e07aSXin Li) 139*ec63e07aSXin Litarget_link_libraries(curl_util PUBLIC 140*ec63e07aSXin Li curl_sapi 141*ec63e07aSXin Li) 142*ec63e07aSXin Li 143*ec63e07aSXin Li# Add examples 144*ec63e07aSXin Liif (SAPI_CURL_ENABLE_EXAMPLES) 145*ec63e07aSXin Li add_subdirectory(examples) 146*ec63e07aSXin Liendif() 147*ec63e07aSXin Li 148*ec63e07aSXin Li# Add tests 149*ec63e07aSXin Liif (SAPI_CURL_ENABLE_TESTS) 150*ec63e07aSXin Li add_subdirectory(tests) 151*ec63e07aSXin Liendif() 152