Неподдерживаемый протокол при загрузке пакета tar.gz
Я только что обновил свой CMake с версии 2.8 до 3.2.
В CMake 2.8 это работает как прелесть, но после обновления происходит сбой.
Я пытаюсь создать стороннюю библиотеку, используя функцию CMake ExternalProject_Add()
.
ExternalProject_Add(
luacov
URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
DOWNLOAD_DIR ${EXTERNAL_PROJECT_DOWNLOAD_DIR}
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE}
SOURCE_DIR ${EXTERNAL_PROJECT_SRC_DIR}/luacov
BINARY_DIR ${EXTERNAL_PROJECT_BUILD_DIR}/luacov
UPDATE_COMMAND ""
PATCH_COMMAND ""
)
МОЕ НАБЛЮДЕНИЕ:
- Используя опцию
GIT_REPOSITORY
, ExternalProject_Add()
позволяет протоколам http
и https
загружать внешний проект. - Используя опцию
URL
, ExternalProject_Add()
разрешает только http
, но не протокол https
загружать внешний проект.
ПРОБЛЕМА:
Есть ли способ скачать и собрать внешний проект по протоколу https
?
ОШИБКА:
[ 16%] Performing download step (download, verify and extract) for 'luacov'
-- downloading...
src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz'
dst='/home/build/my_build/external_projects/downloads/v0.7.tar.gz'
timeout='none'
CMake Error at /home/build/my_build/luacov-prefix/src/luacov-stamp/download-luacov.cmake:21 (message):
error: downloading
'https://github.com/keplerproject/luacov/archive/v0.7.tar.gz' failed
status_code: 1
status_string: "Unsupported protocol"
log: Protocol "https" not supported or disabled in libcurl
Closing connection -1
make[3]: *** [luacov-prefix/src/luacov-stamp/luacov-download] Error 1
make[2]: *** [CMakeFiles/luacov.dir/all] Error 2
make[1]: *** [CMakeFiles/luacov.dir/rule] Error 2
make: *** [luacov] Error 2
Ответы
Ответ 1
В моем ExternalProject_Add()
, я использую GIT_REPOSITORY
insted опции URL
.
#URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
GIT_REPOSITORY https://github.com/keplerproject/luacov.git
И luacov
скачать и построить успешно.
Для любого протокола https
используйте параметр DOWNLOAD_COMMAND
функции ExternalProject_Add()
.
DOWNLOAD_COMMAND wget https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
и его работа как ожидалось.
Спасибо.
Ответ 2
Проблема может заключаться в том, что библиотека CURL, поставляемая с CMake, по умолчанию не работает с поддержкой SSL. Мне пришлось скомпилировать cmake с помощью:
./bootstrap --system-curl
make
sudo make install
... и это сработало, потому что мой системный завиток поддерживает SSL.
Ответ 3
Для меня это работало следующим образом:
-
Обновить openssl
sudo apt-get install openssl libssl-dev
-
Измените файл начальной загрузки, чтобы включить CMAKE_USE_OPENSSL. Замените эту строку на:
cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON"
-
Запустите bootstrap script обычно в папке cmake
/@path_to_cmake/bootstrap
Ответ 4
У меня возникла такая же проблема с созданием библиотеки на компьютере, где CMake не поддерживал протокол https.
Мне пришлось создать cmake самостоятельно с опцией -DCMAKE_USE_OPENSSL = ON, как это было предложено комментарием @dekkard.
Ответ 5
Для CMake 3.8.0 это сработало для меня:
-
Установить/обновить openssl:
yum install openssl openssl-devel
-
Адаптируйте решение из Сообщение форума CMake от Brad King:
./configure --prefix=/software/cmake-3.8.0/ --parallel=${NPROC} -- \
-/DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_USE_OPENSSL:BOOL=ON
make -j ${NPROC}
make install
-
Наслаждайтесь!
Ответ 6
Похоже, что Cmake 3.2.1 работает так, как ожидалось.
Здесь мой пример проекта /CMakeLists.txt:
PROJECT(TestDownload)
SET(CMAKE_CXX_COMPILER "/path/to/bin/g++")
SET(CMAKE_C_COMPILER "/path/to/bin/gcc")
SET(CMAKE_CXX_FLAGS "")
SET(CMAKE_C_FLAGS "")
cmake_minimum_required(VERSION 3.2)
include(ExternalProject)
ExternalProject_Add(
luacov
URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/luacov
UPDATE_COMMAND ""
PATCH_COMMAND ""
INSTALL_COMMAND ""
)
И команды:
$ cd project
$ mkdir build && cd build
$ cmake ..
...
$ make all
Scanning dependencies of target luacov
[ 12%] Creating directories for 'luacov'
[ 25%] Performing download step (download, verify and extract) for 'luacov'
-- downloading...
src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz'
dst='/tmp/project/build/luacov/v0.7.tar.gz'
timeout='none'
-- [download 7% complete]
-- [download 21% complete]
-- [download 76% complete]
-- [download 100% complete]
-- downloading... done
-- verifying file...
file='/tmp/project/build/luacov/v0.7.tar.gz'
-- verifying file... warning: did not verify file - no URL_HASH specified?
-- extracting...
src='/tmp/project/build/luacov/v0.7.tar.gz'
dst='/tmp/project/build/luacov-prefix/src/luacov'
-- extracting... [tar xfz]
-- extracting... [analysis]
-- extracting... [rename]
-- extracting... [clean up]
-- extracting... done
[ 37%] No patch step for 'luacov'
[ 50%] No update step for 'luacov'
...
Ответ 7
Я часто просто изменяю URL с https на http.