From 5ef962781fb04f63c6e327ce395d81457838cd61 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Tue, 12 Dec 2023 00:30:36 +0100 Subject: CMake: remove deprecated 'exec_program' from target 'uninstall' 1. 'exec_program()' should be replaced with 'execute_process()'. Done. 2. 'cmake -E remove' is broken and deprecated since 3.17, hence we use 'cmake -E rm' (!) for CMake since 3.17 and 'cmake -E remove' only for older CMake versions. --- CMake/cmake_uninstall.cmake.in | 71 ++++++++++++++++++++++++++++++++---------- 1 file changed, 54 insertions(+), 17 deletions(-) diff --git a/CMake/cmake_uninstall.cmake.in b/CMake/cmake_uninstall.cmake.in index ed3a5bdfd..b2547ecf2 100644 --- a/CMake/cmake_uninstall.cmake.in +++ b/CMake/cmake_uninstall.cmake.in @@ -1,19 +1,56 @@ -if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - message(FATAL_ERROR - "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") -endif(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +# +# Support file to uninstall the FLTK project using CMake +# Originally written by Michael Surette +# +# Copyright 1998-2023 by Bill Spitzak and others. +# +# This library is free software. Distribution and use rights are outlined in +# the file "COPYING" which should have been included with this file. If this +# file is missing or damaged, see the license at: +# +# https://www.fltk.org/COPYING.php +# +# Please see the following page on how to report bugs and issues: +# +# https://www.fltk.org/bugs.php +# -file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) -string(REGEX REPLACE "\n" ";" files "${files}") +if (NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR + "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") +endif () -foreach(file ${files}) -message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") - exec_program("@CMAKE_COMMAND@" - ARGS "-E remove -f \"$ENV{DESTDIR}${file}\"" - OUTPUT_VARIABLE rm_out - RETURN_VALUE rm_retval - ) - if(NOT "${rm_retval}" STREQUAL 0) - message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") - endif(NOT "${rm_retval}" STREQUAL 0) -endforeach(file) +file (READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +string (REGEX REPLACE "\n" ";" files "${files}") + +# Note 1: 'cmake -E remove [-f]' is deprecated since CMake 3.17 and the docs +# state: "The implementation was buggy and always returned 0. It cannot be +# fixed without breaking backwards compatibility. Use rm instead." +# Note 2: 'cmake -E rm [-f]' has been added in CMake 3.17 +# Note 3: +# Remove this distinction if: cmake_minimum_required(VERSION 3.17) or higher. + +if (CMAKE_VERSION VERSION_LESS 3.17) + set (rm_cmd remove) +else () + set (rm_cmd rm) +endif () + +foreach (file ${files}) + message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") + execute_process( + COMMAND "${CMAKE_COMMAND}" -E ${rm_cmd} -f "$ENV{DESTDIR}${file}" + OUTPUT_VARIABLE rm_out + ERROR_VARIABLE rm_err + RESULT_VARIABLE rm_retval + ) + + if (NOT "${rm_retval}" STREQUAL 0) + message (STATUS "Error removing \"$ENV{DESTDIR}${file}\"") + message (STATUS " Status = '${rm_retval}'") + message (STATUS " Output = '${rm_out}'") + message (STATUS " Error = '${rm_err}'") + message (FATAL_ERROR "Exiting with fatal error.") + endif () + +endforeach (file) -- cgit v1.2.3