diff --git a/Modules/Internal/CPack/CPack.STGZ_Header.sh.in b/Modules/Internal/CPack/CPack.STGZ_Header.sh.in index a857aa5840..fece7ed512 100755 --- a/Modules/Internal/CPack/CPack.STGZ_Header.sh.in +++ b/Modules/Internal/CPack/CPack.STGZ_Header.sh.in @@ -136,8 +136,16 @@ echo "" use_new_tail_syntax="-n" tail $use_new_tail_syntax +1 "$0" > /dev/null 2> /dev/null || use_new_tail_syntax="" -extractor="pax -r" -command -v pax > /dev/null 2> /dev/null || extractor="tar xf -" +if command -v pax > /dev/null 2> /dev/null; then + extractor="pax -r" +else + # Avoid replacing directory symlinks with directories from the package. + if tar --help 2> /dev/null | grep "keep-directory-symlink" > /dev/null 2> /dev/null; then + extractor="tar --keep-directory-symlink -xf -" + else + extractor="tar xf -" + fi +fi tail $use_new_tail_syntax +###CPACK_HEADER_LENGTH### "$0" | gunzip | (cd "${toplevel}" && ${extractor}) || cpack_echo_exit "Problem unpacking the @CPACK_PACKAGE_FILE_NAME@"