]> git.ipfire.org Git - thirdparty/xz.git/commitdiff
CMake: Add xz symlinks.
authorLasse Collin <lasse.collin@tukaani.org>
Wed, 31 Aug 2022 13:42:04 +0000 (16:42 +0300)
committerLasse Collin <lasse.collin@tukaani.org>
Fri, 16 Sep 2022 12:32:55 +0000 (15:32 +0300)
These are a minor thing especially since the xz build has
some real problems still like lack of large file support
on 32-bit systems but I'll commit this since the code exists.

Thanks to Jia Tan.

CMakeLists.txt

index a62823c6cfcf5be46a3d5585970eee6c2e1179ad..cf42055cdb2981788a1772342fc170e17991230d 100644 (file)
@@ -13,7 +13,6 @@
 #   - No replacement getopt_long(), libc must have it
 #   - No sandboxing support
 #   - No translations
-#   - No xz symlinks are installed
 #
 # Other missing things:
 #   - No xzgrep or other scripts or their symlinks
@@ -682,5 +681,42 @@ if(NOT MSVC AND HAVE_GETOPT_LONG)
         install(FILES src/xz/xz.1
                 DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
                 COMPONENT xz)
+
+        option(CREATE_XZ_SYMLINKS "Create unxz and xzcat symlinks" ON)
+        option(CREATE_LZMA_SYMLINKS "Create lzma, unlzma, and lzcat symlinks"
+               ON)
+        set(XZ_LINKS)
+
+        if(CREATE_XZ_SYMLINKS)
+            list(APPEND XZ_LINKS "unxz" "xzcat")
+        endif()
+
+        if(CREATE_LZMA_SYMLINKS)
+            list(APPEND XZ_LINKS "lzma" "unlzma" "lzcat")
+        endif()
+
+        # Create symlinks in the build directory and then install them.
+        #
+        # FIXME? On OSes where executables have a suffix like .exe, this
+        # will create links like unxz -> xz.exe which is correct on Cygwin
+        # but perhaps on some other cases unxz.suffix -> xz.suffix would
+        # be the corrent thing?
+        foreach(LINK IN LISTS XZ_LINKS)
+            add_custom_target("${LINK}" ALL
+                "${CMAKE_COMMAND}" -E create_symlink
+                    "$<TARGET_FILE_NAME:xz>" "${LINK}"
+                BYPRODUCTS "${LINK}"
+                VERBATIM)
+            install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LINK}"
+                    DESTINATION "${CMAKE_INSTALL_BINDIR}"
+                    COMPONENT xz)
+            add_custom_target("${LINK}.1" ALL
+                "${CMAKE_COMMAND}" -E create_symlink "xz.1" "${LINK}.1"
+                BYPRODUCTS "${LINK}.1"
+                VERBATIM)
+            install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${LINK}.1"
+                    DESTINATION "${CMAKE_INSTALL_MANDIR}/man1"
+                    COMPONENT xz)
+        endforeach()
     endif()
 endif()