From c58584e725b904d74743c6eb2b07e372fc539b39 Mon Sep 17 00:00:00 2001 From: Sebastian Ehlert <28669218+awvwgk@users.noreply.github.com> Date: Sat, 17 Apr 2021 13:01:18 +0200 Subject: Allow usage of response files with ar --- src/fpm_backend.f90 | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/fpm_backend.f90 b/src/fpm_backend.f90 index 74cef61..4b19e25 100644 --- a/src/fpm_backend.f90 +++ b/src/fpm_backend.f90 @@ -33,7 +33,7 @@ use fpm_model, only: fpm_model_t use fpm_targets, only: build_target_t, build_target_ptr, & FPM_TARGET_OBJECT, FPM_TARGET_ARCHIVE, FPM_TARGET_EXECUTABLE -use fpm_strings, only: string_cat +use fpm_strings, only: string_t implicit none @@ -247,7 +247,8 @@ subroutine build_target(model,target) //" "//target%link_flags// " -o " // target%output_file) case (FPM_TARGET_ARCHIVE) - call run("ar -rs " // target%output_file // " " // string_cat(target%link_objects," ")) + call write_response_file(target%output_file//".resp" ,target%link_objects) + call run("ar -rs " // target%output_file // " @" // target%output_file//".resp") end select @@ -259,4 +260,19 @@ subroutine build_target(model,target) end subroutine build_target +!> Response files allow to read command line options from files. +!> Whitespace is used to separate the arguments, we will use newlines +!> as separator to create readable response files which can be inspected +!> in case of errors. +subroutine write_response_file(name, argv) + character(len=*), intent(in) :: name + type(string_t), intent(in) :: argv(:) + integer :: iarg, io + open(file=name, newunit=io) + do iarg = 1, size(argv) + write(io, '(a)') argv(iarg)%s + end do + close(io) +end subroutine write_response_file + end module fpm_backend -- cgit v1.2.3 From 7a8f33721974cb66d44834229aff6dd4e2031eda Mon Sep 17 00:00:00 2001 From: LKedward Date: Sat, 17 Apr 2021 12:27:09 +0100 Subject: Use response files on Windows but with unix_path --- src/fpm_backend.f90 | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/fpm_backend.f90 b/src/fpm_backend.f90 index 4b19e25..21e7983 100644 --- a/src/fpm_backend.f90 +++ b/src/fpm_backend.f90 @@ -27,13 +27,13 @@ !> module fpm_backend -use fpm_environment, only: run -use fpm_filesystem, only: dirname, join_path, exists, mkdir +use fpm_environment, only: run, get_os_type, OS_WINDOWS +use fpm_filesystem, only: dirname, join_path, exists, mkdir, unix_path use fpm_model, only: fpm_model_t use fpm_targets, only: build_target_t, build_target_ptr, & FPM_TARGET_OBJECT, FPM_TARGET_ARCHIVE, FPM_TARGET_EXECUTABLE -use fpm_strings, only: string_t +use fpm_strings, only: string_cat, string_t implicit none @@ -247,8 +247,16 @@ subroutine build_target(model,target) //" "//target%link_flags// " -o " // target%output_file) case (FPM_TARGET_ARCHIVE) - call write_response_file(target%output_file//".resp" ,target%link_objects) - call run("ar -rs " // target%output_file // " @" // target%output_file//".resp") + + select case (get_os_type()) + case (OS_WINDOWS) + call write_response_file(target%output_file//".resp" ,target%link_objects) + call run("ar -rs " // target%output_file // " @" // target%output_file//".resp") + + case default + call run("ar -rs " // target%output_file // " " // string_cat(target%link_objects," ")) + + end select end select @@ -270,7 +278,7 @@ subroutine write_response_file(name, argv) integer :: iarg, io open(file=name, newunit=io) do iarg = 1, size(argv) - write(io, '(a)') argv(iarg)%s + write(io, '(a)') unix_path(argv(iarg)%s) end do close(io) end subroutine write_response_file -- cgit v1.2.3