[Svante Signell] > Currently cmake FTBFS on GNU/Hurd due to a PATH_MAX issue. Attached is > the patch path_max.patch also provided by the first attachment in this > bug #900240, there named path_max.path. With the attached patch and the > upcoming bug report on linux-any, providing > Source_Modules_FindLibUV.cmake.diff cmake builds fine.
I tested the patch, and it seem to solve the problem. I hope this issue can be fixed soon, as the missing cmake is blocking a lot of builds. But one of the 496 tests failed: 426/496 Test #426: RunCMake.CPack_DEB .....................................***Failed 136.49 sec -- CUSTOM_NAMES-COMPONENT-type - PASSED -- CUSTOM_NAMES-COMPONENT-type-Build - PASSED -- DEB/CUSTOM_NAMES-COMPONENT-type - PASSED -- DEFAULT_PERMISSIONS-CMAKE_var_set-subtest-MONOLITHIC-type - PASSED -- DEB/DEFAULT_PERMISSIONS-CMAKE_var_set-subtest-MONOLITHIC-type - PASSED -- DEFAULT_PERMISSIONS-CMAKE_var_set-subtest-COMPONENT-type - PASSED -- DEB/DEFAULT_PERMISSIONS-CMAKE_var_set-subtest-COMPONENT-type - PASSED -- DEFAULT_PERMISSIONS-CPACK_var_set-subtest-MONOLITHIC-type - PASSED -- DEB/DEFAULT_PERMISSIONS-CPACK_var_set-subtest-MONOLITHIC-type - PASSED -- DEFAULT_PERMISSIONS-CPACK_var_set-subtest-COMPONENT-type - PASSED -- DEB/DEFAULT_PERMISSIONS-CPACK_var_set-subtest-COMPONENT-type - PASSED -- DEFAULT_PERMISSIONS-both_set-subtest-MONOLITHIC-type - PASSED -- DEB/DEFAULT_PERMISSIONS-both_set-subtest-MONOLITHIC-type - PASSED -- DEFAULT_PERMISSIONS-both_set-subtest-COMPONENT-type - PASSED -- DEB/DEFAULT_PERMISSIONS-both_set-subtest-COMPONENT-type - PASSED -- DEFAULT_PERMISSIONS-invalid_CMAKE_var-subtest-MONOLITHIC-type - PASSED -- DEB/DEFAULT_PERMISSIONS-invalid_CMAKE_var-subtest-MONOLITHIC-type - PASSED -- DEFAULT_PERMISSIONS-invalid_CMAKE_var-subtest-COMPONENT-type - PASSED -- DEB/DEFAULT_PERMISSIONS-invalid_CMAKE_var-subtest-COMPONENT-type - PASSED -- DEFAULT_PERMISSIONS-invalid_CPACK_var-subtest-MONOLITHIC-type - PASSED -- DEB/DEFAULT_PERMISSIONS-invalid_CPACK_var-subtest-MONOLITHIC-type - PASSED -- DEFAULT_PERMISSIONS-invalid_CPACK_var-subtest-COMPONENT-type - PASSED -- DEB/DEFAULT_PERMISSIONS-invalid_CPACK_var-subtest-COMPONENT-type - PASSED -- DEPENDENCIES-COMPONENT-type - PASSED -- DEPENDENCIES-COMPONENT-type-Build - PASSED -- DEB/DEPENDENCIES-COMPONENT-type - PASSED -- EMPTY_DIR-MONOLITHIC-type - PASSED -- EMPTY_DIR-MONOLITHIC-type-Build - PASSED -- DEB/EMPTY_DIR-MONOLITHIC-type - PASSED -- EMPTY_DIR-COMPONENT-type - PASSED -- EMPTY_DIR-COMPONENT-type-Build - PASSED -- DEB/EMPTY_DIR-COMPONENT-type - PASSED -- VERSION-MONOLITHIC-type - PASSED -- DEB/VERSION-MONOLITHIC-type - PASSED -- VERSION-COMPONENT-type - PASSED -- DEB/VERSION-COMPONENT-type - PASSED -- EXTRA-COMPONENT-type - PASSED -- DEB/EXTRA-COMPONENT-type - PASSED -- GENERATE_SHLIBS-soversion_not_zero-subtest-COMPONENT-type - PASSED -- GENERATE_SHLIBS-soversion_not_zero-subtest-COMPONENT-type-Build - PASSED CMake Error at /home/pere/cmake-3.12.1/Tests/RunCMake/RunCMake.cmake:150 (message): DEB/GENERATE_SHLIBS-soversion_not_zero-subtest-COMPONENT-type - FAILED: Result is [1], not [0]. stderr does not match that expected. Command was: command> "/home/pere/cmake-3.12.1/Build/bin/cmake" "-DRunCMake_TEST=GENERATE_SHLIBS-soversion_not_zero-subtest-COMPONENT-type" "-DRunCMake_TEST_FILE_PREFIX=GENERATE_SHLIBS" "-DRunCMake_SUBTEST_SUFFIX=soversion_not_zero" "-DGENERATOR_TYPE=DEB" "-DPACKAGING_TYPE=COMPONENT" "-Dsrc_dir=/home/pere/cmake-3.12.1/Tests/RunCMake/CPack" "-Dbin_dir=/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS-build-soversion_not_zero-subtest" "-Dconfig_file=/home/pere/cmake-3.12.1/Build/Tests/RunCMake/CPack/conf/DEB_config.cmake" "-P" "/home/pere/cmake-3.12.1/Tests/RunCMake/CPack/VerifyResult.cmake" Actual stdout: actual-out> Expected stderr to match: expect-err> ^$ Actual stderr: actual-err> CMake Error at /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/DEB/Helpers.cmake:144 (message): actual-err> Expected Debian control file does not exist: 'shlibs' Extra: install files actual-err> '/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS-build-soversion_not_zero-subtest/data_shlibs/usr/foo/libtest_lib.so: actual-err> symbolic link to libtest_lib.so.0.8 actual-err> actual-err> actual-err> ;/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS-build-soversion_not_zero-subtest/data_shlibs/usr/foo/libtest_lib.so.0.8: actual-err> ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically actual-err> linked, BuildID[sha1]=dd4771c7b0eef02c878a458492e8b02797b12a0a, with actual-err> debug_info, not stripped actual-err> actual-err> '; readelf " actual-err> actual-err> " actual-err> Call Stack (most recent call first): actual-err> /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/tests/GENERATE_SHLIBS/VerifyResult.cmake:9 (verifyDebControl) actual-err> /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/VerifyResult.cmake:129 (include) Call Stack (most recent call first): /home/pere/cmake-3.12.1/Tests/RunCMake/RunCMake.cmake:164 (run_cmake) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/CPackTestHelpers.cmake:98 (run_cmake_command) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/CPackTestHelpers.cmake:123 (run_cpack_test_common_) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/RunCMakeTest.cmake:16 (run_cpack_test_subtests) -- GENERATE_SHLIBS-soversion_zero-subtest-COMPONENT-type - PASSED -- GENERATE_SHLIBS-soversion_zero-subtest-COMPONENT-type-Build - PASSED CMake Error at /home/pere/cmake-3.12.1/Tests/RunCMake/RunCMake.cmake:150 (message): DEB/GENERATE_SHLIBS-soversion_zero-subtest-COMPONENT-type - FAILED: Result is [1], not [0]. stderr does not match that expected. Command was: command> "/home/pere/cmake-3.12.1/Build/bin/cmake" "-DRunCMake_TEST=GENERATE_SHLIBS-soversion_zero-subtest-COMPONENT-type" "-DRunCMake_TEST_FILE_PREFIX=GENERATE_SHLIBS" "-DRunCMake_SUBTEST_SUFFIX=soversion_zero" "-DGENERATOR_TYPE=DEB" "-DPACKAGING_TYPE=COMPONENT" "-Dsrc_dir=/home/pere/cmake-3.12.1/Tests/RunCMake/CPack" "-Dbin_dir=/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS-build-soversion_zero-subtest" "-Dconfig_file=/home/pere/cmake-3.12.1/Build/Tests/RunCMake/CPack/conf/DEB_config.cmake" "-P" "/home/pere/cmake-3.12.1/Tests/RunCMake/CPack/VerifyResult.cmake" Actual stdout: actual-out> Expected stderr to match: expect-err> ^$ Actual stderr: actual-err> CMake Error at /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/DEB/Helpers.cmake:144 (message): actual-err> Expected Debian control file does not exist: 'shlibs' Extra: install files actual-err> '/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS-build-soversion_zero-subtest/data_shlibs/usr/foo/libtest_lib.so: actual-err> symbolic link to libtest_lib.so.0 actual-err> actual-err> actual-err> ;/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS-build-soversion_zero-subtest/data_shlibs/usr/foo/libtest_lib.so.0: actual-err> ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically actual-err> linked, BuildID[sha1]=38ff16f7199f1977d05e2eed1242c7c88a383db6, with actual-err> debug_info, not stripped actual-err> actual-err> '; readelf " actual-err> actual-err> " actual-err> Call Stack (most recent call first): actual-err> /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/tests/GENERATE_SHLIBS/VerifyResult.cmake:9 (verifyDebControl) actual-err> /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/VerifyResult.cmake:129 (include) Call Stack (most recent call first): /home/pere/cmake-3.12.1/Tests/RunCMake/RunCMake.cmake:164 (run_cmake) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/CPackTestHelpers.cmake:98 (run_cmake_command) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/CPackTestHelpers.cmake:123 (run_cpack_test_common_) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/RunCMakeTest.cmake:16 (run_cpack_test_subtests) -- GENERATE_SHLIBS_LDCONFIG-COMPONENT-type - PASSED -- GENERATE_SHLIBS_LDCONFIG-COMPONENT-type-Build - PASSED CMake Error at /home/pere/cmake-3.12.1/Tests/RunCMake/RunCMake.cmake:150 (message): DEB/GENERATE_SHLIBS_LDCONFIG-COMPONENT-type - FAILED: Result is [1], not [0]. stderr does not match that expected. Command was: command> "/home/pere/cmake-3.12.1/Build/bin/cmake" "-DRunCMake_TEST=GENERATE_SHLIBS_LDCONFIG-COMPONENT-type" "-DRunCMake_TEST_FILE_PREFIX=GENERATE_SHLIBS_LDCONFIG" "-DRunCMake_SUBTEST_SUFFIX=" "-DGENERATOR_TYPE=DEB" "-DPACKAGING_TYPE=COMPONENT" "-Dsrc_dir=/home/pere/cmake-3.12.1/Tests/RunCMake/CPack" "-Dbin_dir=/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS_LDCONFIG-build" "-Dconfig_file=/home/pere/cmake-3.12.1/Build/Tests/RunCMake/CPack/conf/DEB_config.cmake" "-P" "/home/pere/cmake-3.12.1/Tests/RunCMake/CPack/VerifyResult.cmake" Actual stdout: actual-out> Expected stderr to match: expect-err> ^$ Actual stderr: actual-err> CMake Error at /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/DEB/Helpers.cmake:144 (message): actual-err> Expected Debian control file does not exist: 'shlibs' Extra: install files actual-err> '/home/pere/cmake-3.12.1/Build/Tests/RunCMake/DEB/CPack/GENERATE_SHLIBS_LDCONFIG-build/data_shlibs/usr/lib/libtest_lib.so.0.8: actual-err> ELF 32-bit LSB pie executable, Intel 80386, version 1 (SYSV), dynamically actual-err> linked, BuildID[sha1]=dfa3ab0e1cc5aeb84dd5f655ef53977fb87b0aa1, with actual-err> debug_info, not stripped actual-err> actual-err> '; readelf " actual-err> actual-err> " actual-err> Call Stack (most recent call first): actual-err> /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/tests/GENERATE_SHLIBS_LDCONFIG/VerifyResult.cmake:8 (verifyDebControl) actual-err> /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/VerifyResult.cmake:129 (include) Call Stack (most recent call first): /home/pere/cmake-3.12.1/Tests/RunCMake/RunCMake.cmake:164 (run_cmake) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/CPackTestHelpers.cmake:98 (run_cmake_command) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/CPackTestHelpers.cmake:116 (run_cpack_test_common_) /home/pere/cmake-3.12.1/Tests/RunCMake/CPack/RunCMakeTest.cmake:17 (run_cpack_test) -- LONG_FILENAMES-MONOLITHIC-type - PASSED -- DEB/LONG_FILENAMES-MONOLITHIC-type - PASSED -- MINIMAL-MONOLITHIC-type - PASSED -- DEB/MINIMAL-MONOLITHIC-type - PASSED -- MINIMAL-COMPONENT-type - PASSED -- DEB/MINIMAL-COMPONENT-type - PASSED -- PER_COMPONENT_FIELDS-COMPONENT-type - PASSED -- DEB/PER_COMPONENT_FIELDS-COMPONENT-type - PASSED -- MD5SUMS-MONOLITHIC-type - PASSED -- DEB/MD5SUMS-MONOLITHIC-type - PASSED -- MD5SUMS-COMPONENT-type - PASSED -- DEB/MD5SUMS-COMPONENT-type - PASSED -- DEB_PACKAGE_VERSION_BACK_COMPATIBILITY-MONOLITHIC-type - PASSED -- DEB/DEB_PACKAGE_VERSION_BACK_COMPATIBILITY-MONOLITHIC-type - PASSED -- DEB_PACKAGE_VERSION_BACK_COMPATIBILITY-COMPONENT-type - PASSED -- DEB/DEB_PACKAGE_VERSION_BACK_COMPATIBILITY-COMPONENT-type - PASSED Start 427: RunCMake.CPack_7Z 427/496 Test #427: RunCMake.CPack_7Z ...................................... Passed 9.31 sec Start 428: RunCMake.CPack_TBZ2 Btw, I had a look at the patch, and perhaps it is better to not depend on lstat(), as it fail in files like /proc/*/exe, where size is always 0. Here is an alternative proposal: Index: cmake-3.12.1/Utilities/cmlibuv/src/unix/fs.c =================================================================== --- cmake-3.12.1.orig/Utilities/cmlibuv/src/unix/fs.c +++ cmake-3.12.1/Utilities/cmlibuv/src/unix/fs.c @@ -426,6 +426,7 @@ static ssize_t uv__fs_scandir(uv_fs_t* r } +#if _POSIX_VERSION < 200809L static ssize_t uv__fs_pathmax_size(const char* path) { ssize_t pathmax; @@ -441,12 +442,52 @@ static ssize_t uv__fs_pathmax_size(const return pathmax; } +#endif static ssize_t uv__fs_readlink(uv_fs_t* req) { + ssize_t size = 1024; ssize_t len; char* buf; + while (1) { + buf = uv__malloc(size + 1); - len = uv__fs_pathmax_size(req->path); + if (buf == NULL) { + errno = ENOMEM; + return -1; + } + +#if defined(__MVS__) + len = os390_readlink(req->path, buf, size); +#else + len = readlink(req->path, buf, size); +#endif + + if (len == -1) { + uv__free(buf); + return -1; + } + + if (len < size) { + buf[len] = '\0'; + req->ptr = buf; + return 0; + } + free(buf); + size *= 2; + } +} + +static ssize_t uv__fs_readlink(uv_fs_t* req) { + ssize_t len; + char* buf; + struct stat st; + int ret; + + ret = lstat(req->path, &st); + if (ret != 0) { + return -1; + } + len = st.st_size; buf = uv__malloc(len + 1); if (buf == NULL) { @@ -473,9 +514,16 @@ static ssize_t uv__fs_readlink(uv_fs_t* } static ssize_t uv__fs_realpath(uv_fs_t* req) { - ssize_t len; char* buf; +#if _POSIX_VERSION >= 200809L + buf = realpath(req->path, NULL); + if (buf == NULL) { + return -1; + } +#else + ssize_t len; + len = uv__fs_pathmax_size(req->path); buf = uv__malloc(len + 1); @@ -488,6 +536,7 @@ static ssize_t uv__fs_realpath(uv_fs_t* uv__free(buf); return -1; } +#endif req->ptr = buf; -- Happy hacking Petter Reinholdtsen