Skip to content

cmake: Support build directories with special characters

With VERBATIM, CMake will automatically quote/escape special characters in the commands.

Reproduce the error:

$ mkdir "build space"                                                                                                             
$ cd "build space"                                                                                                                
$ cmake ..        
-- The C compiler identification is GNU 10.2.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/sbin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Performing Test REQUIRED_FLAGS_WERROR
-- Performing Test REQUIRED_FLAGS_WERROR - Success
-- Performing Test WITH_STD_GNU99_FLAG
-- Performing Test WITH_STD_GNU99_FLAG - Success
-- Performing Test WITH_WPEDANTIC_FLAG
-- Performing Test WITH_WPEDANTIC_FLAG - Success
-- Performing Test WITH_WALL_FLAG
-- Performing Test WITH_WALL_FLAG - Success
-- Performing Test WITH_WSHADOW_FLAG
-- Performing Test WITH_WSHADOW_FLAG - Success
-- Performing Test WITH_WMISSING_PROTOTYPES_FLAG
-- Performing Test WITH_WMISSING_PROTOTYPES_FLAG - Success
-- Performing Test WITH_WCAST_ALIGN_FLAG
-- Performing Test WITH_WCAST_ALIGN_FLAG - Success
-- Performing Test WITH_WERROR_ADDRESS_FLAG
-- Performing Test WITH_WERROR_ADDRESS_FLAG - Success
-- Performing Test WITH_WSTRICT_PROTOTYPES_FLAG
-- Performing Test WITH_WSTRICT_PROTOTYPES_FLAG - Success
-- Performing Test WITH_WERROR_STRICT_PROTOTYPES_FLAG
-- Performing Test WITH_WERROR_STRICT_PROTOTYPES_FLAG - Success
-- Performing Test WITH_WWRITE_STRINGS_FLAG
-- Performing Test WITH_WWRITE_STRINGS_FLAG - Success
-- Performing Test WITH_WERROR_WRITE_STRINGS_FLAG
-- Performing Test WITH_WERROR_WRITE_STRINGS_FLAG - Success
-- Performing Test WITH_WERROR_IMPLICIT_FUNCTION_DECLARATION_FLAG
-- Performing Test WITH_WERROR_IMPLICIT_FUNCTION_DECLARATION_FLAG - Success
-- Performing Test WITH_WPOINTER_ARITH_FLAG
-- Performing Test WITH_WPOINTER_ARITH_FLAG - Success
-- Performing Test WITH_WERROR_POINTER_ARITH_FLAG
-- Performing Test WITH_WERROR_POINTER_ARITH_FLAG - Success
-- Performing Test WITH_WDECLARATION_AFTER_STATEMENT_FLAG
-- Performing Test WITH_WDECLARATION_AFTER_STATEMENT_FLAG - Success
-- Performing Test WITH_WERROR_DECLARATION_AFTER_STATEMENT_FLAG
-- Performing Test WITH_WERROR_DECLARATION_AFTER_STATEMENT_FLAG - Success
-- Performing Test WITH_WRETURN_TYPE_FLAG
-- Performing Test WITH_WRETURN_TYPE_FLAG - Success
-- Performing Test WITH_WERROR_RETURN_TYPE_FLAG
-- Performing Test WITH_WERROR_RETURN_TYPE_FLAG - Success
-- Performing Test WITH_WUNINITIALIZED_FLAG
-- Performing Test WITH_WUNINITIALIZED_FLAG - Success
-- Performing Test WITH_WERROR_UNINITIALIZED_FLAG
-- Performing Test WITH_WERROR_UNINITIALIZED_FLAG - Success
-- Performing Test WITH_WIMPLICIT_FALLTHROUGH_FLAG
-- Performing Test WITH_WIMPLICIT_FALLTHROUGH_FLAG - Success
-- Performing Test WITH_WERROR_STRICT_OVERFLOW_FLAG
-- Performing Test WITH_WERROR_STRICT_OVERFLOW_FLAG - Success
-- Performing Test WITH_WSTRICT_OVERFLOW_2_FLAG
-- Performing Test WITH_WSTRICT_OVERFLOW_2_FLAG - Success
-- Performing Test WITH_WNO_FORMAT_ZERO_LENGTH_FLAG
-- Performing Test WITH_WNO_FORMAT_ZERO_LENGTH_FLAG - Success
-- Performing Test WITH_WMISSING_FIELD_INITIALIZERS_FLAG
-- Performing Test WITH_WMISSING_FIELD_INITIALIZERS_FLAG - Success
-- Performing Test WITH_WSIGN_COMPARE_FLAG
-- Performing Test WITH_WSIGN_COMPARE_FLAG - Success
-- Performing Test REQUIRED_FLAGS_WFORMAT
-- Performing Test REQUIRED_FLAGS_WFORMAT - Success
-- Performing Test WITH_WFORMAT_SECURITY_FLAG
-- Performing Test WITH_WFORMAT_SECURITY_FLAG - Success
-- Performing Test WITH_WERROR_FORMAT_SECURITY_FLAG
-- Performing Test WITH_WERROR_FORMAT_SECURITY_FLAG - Success
-- Performing Test WITH_FNO_COMMON_FLAG
-- Performing Test WITH_FNO_COMMON_FLAG - Success
-- Performing Test WITH_STACK_PROTECTOR_STRONG
-- Performing Test WITH_STACK_PROTECTOR_STRONG - Success
-- Performing Test WITH_STACK_CLASH_PROTECTION
-- Performing Test WITH_STACK_CLASH_PROTECTION - Success
-- Performing Test WITH_WNO_DEPRECATED_DECLARATIONS_FLAG
-- Performing Test WITH_WNO_DEPRECATED_DECLARATIONS_FLAG - Success
-- Found ZLIB: /usr/lib/libz.so (found version "1.2.11") 
-- Found OpenSSL: /usr/lib/libcrypto.so (found suitable version "1.1.1i", minimum required is "1.0.1")  
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE  
-- Found GSSAPI: /usr/lib/libgssapi_krb5.so;/usr/lib/libkrb5.so;/usr/lib/libk5crypto.so;/usr/lib/libcom_err.so  
-- Could NOT find NaCl (missing: NACL_LIBRARIES NACL_INCLUDE_DIRS) 
-- Found PythonInterp: /usr/sbin/python (found version "3.9.1") 
-- Found ABIMap: /root/.local/bin/abimap (found suitable version "0.3.2", minimum required is "0.3.1") 
-- Performing Test WITH_VISIBILITY_HIDDEN
-- Performing Test WITH_VISIBILITY_HIDDEN - Success
-- Looking for argp.h
-- Looking for argp.h - found
-- Looking for pty.h
-- Looking for pty.h - found
-- Looking for utmp.h
-- Looking for utmp.h - found
-- Looking for termios.h
-- Looking for termios.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for util.h
-- Looking for util.h - not found
-- Looking for libutil.h
-- Looking for libutil.h - not found
-- Looking for sys/time.h
-- Looking for sys/time.h - found
-- Looking for sys/utime.h
-- Looking for sys/utime.h - not found
-- Looking for sys/param.h
-- Looking for sys/param.h - found
-- Looking for arpa/inet.h
-- Looking for arpa/inet.h - found
-- Looking for byteswap.h
-- Looking for byteswap.h - found
-- Looking for glob.h
-- Looking for glob.h - found
-- Looking for valgrind/valgrind.h
-- Looking for valgrind/valgrind.h - not found
-- Looking for openssl/des.h
-- Looking for openssl/des.h - found
-- Looking for openssl/aes.h
-- Looking for openssl/aes.h - found
-- Looking for openssl/ecdh.h
-- Looking for openssl/ecdh.h - found
-- Looking for openssl/ec.h
-- Looking for openssl/ec.h - found
-- Looking for openssl/ecdsa.h
-- Looking for openssl/ecdsa.h - found
-- Looking for EVP_KDF_CTX_new_id
-- Looking for EVP_KDF_CTX_new_id - not found
-- Looking for FIPS_mode
-- Looking for FIPS_mode - found
-- Looking for RAND_priv_bytes
-- Looking for RAND_priv_bytes - found
-- Looking for EVP_DigestSign
-- Looking for EVP_DigestSign - found
-- Looking for EVP_DigestVerify
-- Looking for EVP_DigestVerify - found
-- Looking for OPENSSL_ia32cap_loc
-- Looking for OPENSSL_ia32cap_loc - not found
-- Looking for EVP_PKEY_ED25519
-- Looking for EVP_PKEY_ED25519 - found
-- Looking for EVP_chacha20
-- Looking for EVP_chacha20 - found
-- Looking for EVP_PKEY_POLY1305
-- Looking for EVP_PKEY_POLY1305 - found
-- Looking for EVP_PKEY_X25519
-- Looking for EVP_PKEY_X25519 - found
-- Looking for isblank
-- Looking for isblank - found
-- Looking for strncpy
-- Looking for strncpy - found
-- Looking for strndup
-- Looking for strndup - found
-- Looking for strtoull
-- Looking for strtoull - found
-- Looking for explicit_bzero
-- Looking for explicit_bzero - found
-- Looking for memset_s
-- Looking for memset_s - not found
-- Performing Test HAVE_GLOB_GL_FLAGS_MEMBER
-- Performing Test HAVE_GLOB_GL_FLAGS_MEMBER - Success
-- Looking for glob
-- Looking for glob - found
-- Looking for vsnprintf
-- Looking for vsnprintf - found
-- Looking for snprintf
-- Looking for snprintf - found
-- Looking for poll
-- Looking for poll - found
-- Looking for select
-- Looking for select - found
-- Looking for getaddrinfo
-- Looking for getaddrinfo - found
-- Looking for ntohll
-- Looking for ntohll - not found
-- Looking for htonll
-- Looking for htonll - not found
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Looking for forkpty in util
-- Looking for forkpty in util - found
-- Looking for cfmakeraw
-- Looking for cfmakeraw - found
-- Looking for __strtoull
-- Looking for __strtoull - not found
-- Performing Test HAVE_GCC_THREAD_LOCAL_STORAGE
-- Performing Test HAVE_GCC_THREAD_LOCAL_STORAGE - Success
-- Performing Test HAVE_MSC_THREAD_LOCAL_STORAGE
-- Performing Test HAVE_MSC_THREAD_LOCAL_STORAGE - Failed
-- Performing Test HAVE_CONSTRUCTOR_ATTRIBUTE
-- Performing Test HAVE_CONSTRUCTOR_ATTRIBUTE - Success
-- Performing Test HAVE_DESTRUCTOR_ATTRIBUTE
-- Performing Test HAVE_DESTRUCTOR_ATTRIBUTE - Success
-- Performing Test HAVE_FALLTHROUGH_ATTRIBUTE
-- Performing Test HAVE_FALLTHROUGH_ATTRIBUTE - Success
-- Performing Test HAVE_UNUSED_ATTRIBUTE
-- Performing Test HAVE_UNUSED_ATTRIBUTE - Success
-- Performing Test HAVE_GCC_VOLATILE_MEMORY_PROTECTION
-- Performing Test HAVE_GCC_VOLATILE_MEMORY_PROTECTION - Success
-- Performing Test HAVE_COMPILER__FUNC__
-- Performing Test HAVE_COMPILER__FUNC__ - Success
-- Performing Test HAVE_COMPILER__FUNCTION__
-- Performing Test HAVE_COMPILER__FUNCTION__ - Success
-- Performing Test HAVE_LD_VERSION_SCRIPT
-- Performing Test HAVE_LD_VERSION_SCRIPT - Success
-- Check if the system is big endian
-- Searching 16 bit integer
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of unsigned short
-- Check size of unsigned short - done
-- Searching 16 bit integer - Using unsigned short
-- Check if the system is big endian - little endian
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
-- Threads_FOUND=TRUE
-- The CXX compiler identification is GNU 10.2.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/sbin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- ********************************************
-- ********** libssh build options : **********
-- zlib support: ON
-- libgcrypt support: OFF
-- libmbedTLS support: OFF
-- libnacl support: OFF
-- SFTP support: ON
-- Server support : ON
-- GSSAPI support : ON
-- GEX support : ON
-- Support insecure none cipher and MAC : OFF
-- Pcap debugging support : ON
-- Build shared library: ON
-- Unit testing: OFF
-- Client code testing: OFF
-- Blowfish cipher support: OFF
-- PKCS #11 URI support: OFF
-- DSA support: OFF
-- Server code testing: OFF
-- Public API documentation generation
-- Benchmarks: OFF
-- Symbol versioning: ON
-- Allow ABI break: OFF
-- Release is final:
-- Global client config: /etc/ssh/ssh_config
-- Global bind config: /etc/ssh/libssh_server_config
-- ********************************************
-- Configuring done
-- Generating done
-- Build files have been written to: /root/libssh-mirror/build space
$ make                                                                                                                            
Scanning dependencies of target dev_header_list_int                                                                               
[  0%] Searching for files
CMake Error at /root/libssh-mirror/cmake/Modules/GetFilesList.cmake:59 (file):
  file failed to open for writing (No such file or directory):

    /root/libssh-mirror/build\ space/src/dev_header_list.list


make[2]: *** [src/CMakeFiles/dev_header_list_int.dir/build.make:77: src/CMakeFiles/dev_header_list_int] Error 1
make[1]: *** [CMakeFiles/Makefile2:264: src/CMakeFiles/dev_header_list_int.dir/all] Error 2
make: *** [Makefile:171: all] Error 2

Checklist

  • Commits have Signed-off-by: with name/author being identical to the commit author
  • Code modified for feature
  • Test suite updated with functionality tests
  • Test suite updated with negative tests
  • Documentation updated

Reviewer's checklist:

  • Any issues marked for closing are addressed
  • There is a test suite reasonably covering new functionality or modifications
  • Function naming, parameters, return values, types, etc., are consistent and according to CONTRIBUTING.md
  • This feature/change has adequate documentation added
  • No obvious mistakes in the code

Merge request reports

Loading