From 9b8aebc3077d44b5c146041b18d5d87afb9bba92 Mon Sep 17 00:00:00 2001 From: Damian Rouson Date: Wed, 7 Apr 2021 21:45:35 -0700 Subject: [PATCH] feat(install.sh): sudo {mkdir|cp} if necessary This commit causes fpm to invoke mkdir and/or cp using sudo if the user does not have write permissions to the installation destination. Invoking sudo potentially prompts the user for a password. --- src/fpm/installer.f90 | 12 +++++++++++- src/fpm_filesystem.f90 | 8 ++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/fpm/installer.f90 b/src/fpm/installer.f90 index d01bd27348..29471656e4 100644 --- a/src/fpm/installer.f90 +++ b/src/fpm/installer.f90 @@ -238,7 +238,17 @@ subroutine install(self, source, destination, error) end if end if - call self%run(self%copy//' "'//source//'" "'//install_dest//'"', error) + + block + integer write_permission_stat + + call execute_command_line("test -w " // install_dest, exitstat=write_permission_stat) + associate(sudo_if_needed => merge(" ","sudo ", write_permission_stat==0)) + call self%run(sudo_if_needed // self%copy//' "'//source//'" "'//install_dest//'"', error) + end associate + end block + + if (allocated(error)) return end subroutine install diff --git a/src/fpm_filesystem.f90 b/src/fpm_filesystem.f90 index 6acd3836c8..6384a01408 100644 --- a/src/fpm_filesystem.f90 +++ b/src/fpm_filesystem.f90 @@ -285,8 +285,12 @@ subroutine mkdir(dir) select case (get_os_type()) case (OS_UNKNOWN, OS_LINUX, OS_MACOS, OS_CYGWIN, OS_SOLARIS, OS_FREEBSD) call execute_command_line('mkdir -p ' // dir, exitstat=stat) - write (*, '(" + ",2a)') 'mkdir -p ' // dir - + if (stat/=0) then + call execute_command_line('sudo mkdir -p ' // dir, exitstat=stat) + write (*, '(" + ",2a)') 'sudo mkdir -p ' // dir + else + write (*, '(" + ",2a)') 'mkdir -p ' // dir + end if case (OS_WINDOWS) call execute_command_line("mkdir " // windows_path(dir), exitstat=stat) write (*, '(" + ",2a)') 'mkdir ' // windows_path(dir)