Skip to content

Commit

Permalink
Merge pull request #5486 from rouault/cmake_uninstall
Browse files Browse the repository at this point in the history
CMake: improve 'uninstall' target to uninstall bash completion scripts and python bindings; test in CI (fixes #1446)
  • Loading branch information
rouault committed Mar 22, 2022
2 parents 7c3eeef + 07927a1 commit 2b77a0a
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 21 deletions.
5 changes: 5 additions & 0 deletions .github/workflows/cmake_builds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,11 @@ jobs:
run: |
cd $GITHUB_WORKSPACE/superbuild/build
ctest -V
- name: install and uninstall
run: |
cmake --build $GITHUB_WORKSPACE/superbuild/build --target install -- -j$(nproc)
cmake --build $GITHUB_WORKSPACE/superbuild/build --target uninstall
find $GITHUB_WORKSPACE/install-gdal || /bin/true
- name: install
run: |
cmake --build $GITHUB_WORKSPACE/superbuild/build --target install -- -j$(nproc)
Expand Down
70 changes: 49 additions & 21 deletions cmake/template/uninstall.cmake.in
Original file line number Diff line number Diff line change
@@ -1,22 +1,50 @@
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")
# install_manifest.txt is created in the top build tree, not the project one
if (NOT EXISTS "@CMAKE_BINARY_DIR@/install_manifest.txt")
message(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_BINARY_DIR@/install_manifest.txt\"")
endif()

file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
string(REGEX REPLACE "\n" ";" files "${files}")
list(REVERSE files)
foreach (file ${files})
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
if (EXISTS "$ENV{DESTDIR}${file}")
execute_process(
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
OUTPUT_VARIABLE rm_out
RESULT_VARIABLE rm_retval
)
if(NOT ${rm_retval} EQUAL 0)
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
endif (NOT ${rm_retval} EQUAL 0)
else (EXISTS "$ENV{DESTDIR}${file}")
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
endif (EXISTS "$ENV{DESTDIR}${file}")
endforeach(file)
set(uninstall_file_list "@CMAKE_BINARY_DIR@/install_manifest.txt")
if(EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt")
list(APPEND uninstall_file_list "@CMAKE_CURRENT_BINARY_DIR@/install_manifest_extra.txt")
endif()
if(EXISTS "@CMAKE_CURRENT_BINARY_DIR@/swig/python/record.txt")
list(APPEND uninstall_file_list "@CMAKE_CURRENT_BINARY_DIR@/swig/python/record.txt")
endif()

foreach (manifest_file IN ITEMS ${uninstall_file_list})
file(READ "${manifest_file}" files)
string(REGEX REPLACE "\n$" "" files "${files}")
string(REGEX REPLACE "\n" ";" files "${files}")
list(REVERSE files)
foreach (file ${files})
message(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
if (IS_DIRECTORY "$ENV{DESTDIR}${file}")
# Only remove csharp related directories, which are the only ones
# to get in the install_manifest, to avoid doing too dangerous
# removals.
if("${file}" MATCHES "csharp")
execute_process(
COMMAND @CMAKE_COMMAND@ -E remove_directory "$ENV{DESTDIR}${file}"
OUTPUT_VARIABLE rm_out
RESULT_VARIABLE rm_retval
)
if(NOT ${rm_retval} EQUAL 0)
message(STATUS "Problem when removing directory \"$ENV{DESTDIR}${file}\"")
endif()
else()
message(STATUS "Keeping directory \"$ENV{DESTDIR}${file}\".")
endif()
elseif (EXISTS "$ENV{DESTDIR}${file}")
execute_process(
COMMAND @CMAKE_COMMAND@ -E remove "$ENV{DESTDIR}${file}"
OUTPUT_VARIABLE rm_out
RESULT_VARIABLE rm_retval
)
if(NOT ${rm_retval} EQUAL 0)
message(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
endif (NOT ${rm_retval} EQUAL 0)
else ()
message(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
endif ()
endforeach(file)
endforeach()
4 changes: 4 additions & 0 deletions gdal.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ option(BUILD_SHARED_LIBS "Set ON to build shared library" ON)
# Option to set preferred C# compiler
option(CSHARP_MONO "Whether to force the C# compiler to be Mono" OFF)

# This line must be kept early in the CMake instructions. At time of writing,
# this file is populated only be scripts/install_bash_completions.cmake.in
install(CODE "file(REMOVE \"${PROJECT_BINARY_DIR}/install_manifest_extra.txt\")")

# ######################################################################################################################
# Detect available warning flags

Expand Down
1 change: 1 addition & 0 deletions scripts/install_bash_completions.cmake.in
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,5 @@ foreach (program IN LISTS PROGRAMS)
else ()
configure_file("${INSTALL_DIR}/gdalinfo" "${INSTALL_DIR}/${program}" COPYONLY)
endif ()
file(APPEND @PROJECT_BINARY_DIR@/install_manifest_extra.txt "${INSTALL_DIR}/${program}\n")
endforeach ()

0 comments on commit 2b77a0a

Please sign in to comment.