2015-04-23 15 views
7

ho appena aggiornare il mio CMake dalla versione 2.8 a 3.2protocollo non supportato mentre pacchetto di download tar.gz

Il suo fascino lavorare in CMake 2.8 ma, dopo l'aggiornamento la sua fallire.

Sto cercando di creare una libreria di terze parti utilizzando la funzione 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 "" 
) 

mia osservazione:

  1. Utilizzando GIT_REPOSITORY opzione, ExternalProject_Add() permettono http e https protocollo per scaricare progetto esterno.
  2. L'utilizzo dell'opzione URL, ExternalProject_Add() consente solo il protocollo http, ma non il https per scaricare il progetto esterno.

PROBLEMA:

Esiste un modo per scaricare e costruire progetto esterno utilizzando https protocollo?

ERRORE:

[ 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 

risposta

2

Nel mio ExternalProject_Add(), devo usare GIT_REPOSITORY invece di URL opzione.

#URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz 
GIT_REPOSITORY https://github.com/keplerproject/luacov.git 

E luacov scaricare e compilare correttamente.

Per qualsiasi protocollo https utilizzare l'opzione DOWNLOAD_COMMAND della funzione ExternalProject_Add().

DOWNLOAD_COMMAND wget https://github.com/keplerproject/luacov/archive/v0.7.tar.gz 

e il suo funzionamento come previsto.

Grazie.

+2

Come estrai l'archivio quando usi 'DOWNLOAD_COMMAND'? Una volta scaricato tramite URL, questo viene fatto automaticamente, ma questo sembra non essere il caso quando lo fai in questo modo. – heine

1

Sembra che con cmake 3.2.1 funziona come previsto.

Ecco il mio progetto di esempio/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 "" 
) 

E i comandi:

$ 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' 
... 
+0

Grazie e +1 per la risposta. Sto seguendo gli stessi passaggi che hai menzionato in risposta. Ma ancora di fronte all'errore che ho aggiornato nella mia quetion sotto il tag 'EDIT'. –

+3

Hm, questo è un altro accordo. Non so se è ancora vero, ma ecco cosa dicono (http://www.cmake.org/pipermail/cmake/2010-December/041295.html): '' 'CMake si costruisce da solo, senza supporto ssl per impostazione predefinita, a meno che non sia puntarlo verso l'arricciatura del sistema. Puoi ricostruire CMake con CMAKE_USE_OPENSSL ON se hai tutte le librerie di sistema di supporto installate. '' – dekkard

2

Avevo lo stesso problema di creare una libreria in un computer in cui CMake non supportava il protocollo https.

Ho dovuto creare cmake con l'opzione -DCMAKE_USE_OPENSSL = ON come suggerito dal commento di @ dekkard.

8

Il problema potrebbe essere che la libreria CURL fornita con CMake non è stata creata con il supporto SSL per impostazione predefinita.Ho dovuto compilare cmake con:

./bootstrap --system-curl 
make 
sudo make install 

... e che ha funzionato, perché il ricciolo del mio sistema ha il supporto SSL.

8

cosa ha funzionato per me è la seguente:

  1. Aggiornamento OpenSSL

    sudo apt-get install openssl libssl-dev 
    
  2. modificare il file di bootstrap per consentire CMAKE_USE_OPENSSL. Sostituire questo line da:

    cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON" 
    
  3. Esegui script di bootstrap normalmente nella cartella CMake

    /@path_to_cmake/bootstrap 
    
+0

il numero di riga non è aggiornato. quale linea è ora? –

+0

se la riga nubmer non corrisponde, quindi cerca cmake_options nel file – infoclogged

+0

L'installazione di 'libssl-dev' è stata sufficiente per me. (Ubuntu 16.04) Quando vengono installati OpenSSL e 'libssl-div', CMake verrà creato con il supporto SSL. Non è necessario modificare il file di bootstrap o assegnargli manualmente i parametri sulla riga di comando. – Farway

1

Per CMake 3.8.0 questo ha funzionato per me:

  1. Installare/aggiornamento openssl:

    yum install openssl openssl-devel 
    
  2. adattare la soluzione da un CMake forum reply da Brad Re:

    ./configure --prefix=/software/cmake-3.8.0/ --parallel=${NPROC} -- \ 
        -/DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_USE_OPENSSL:BOOL=ON 
    make -j ${NPROC} 
    make install 
    
  3. Enjoy!

+0

Grazie per la risposta. +1 per altra opzione. –

Problemi correlati