Неподдерживаемый протокол при загрузке пакета 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 ""
)

МОЕ НАБЛЮДЕНИЕ:

  1. Используя опцию GIT_REPOSITORY, ExternalProject_Add() позволяет протоколам http и https загружать внешний проект.
  2. Используя опцию 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.