diff options
author | Laurence Kedward <laurence.kedward@bristol.ac.uk> | 2021-06-05 13:33:36 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-06-05 13:33:36 +0100 |
commit | e0e6afe457ef717b04dd16bfbd1a47e6ed78f28b (patch) | |
tree | 0bdf3e9b46311dbfc9920e7ce5edff96a96591fd | |
parent | 6d9004d93460dc15b99051c90d1b58d724b010e6 (diff) | |
parent | 3c1d638ea9bef4c7e09475dfcc6a94907bad5796 (diff) | |
download | fpm-e0e6afe457ef717b04dd16bfbd1a47e6ed78f28b.tar.gz fpm-e0e6afe457ef717b04dd16bfbd1a47e6ed78f28b.zip |
Merge pull request #449 from LKedward/response-files
Response files with ar on Windows
-rw-r--r-- | src/fpm_backend.f90 | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/src/fpm_backend.f90 b/src/fpm_backend.f90 index 51861b4..99b6be8 100644 --- a/src/fpm_backend.f90 +++ b/src/fpm_backend.f90 @@ -27,12 +27,12 @@ !> 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_C_OBJECT, FPM_TARGET_ARCHIVE, FPM_TARGET_EXECUTABLE -use fpm_strings, only: string_cat +use fpm_strings, only: string_cat, string_t implicit none @@ -250,7 +250,16 @@ subroutine build_target(model,target) //" "//target%link_flags// " -o " // target%output_file) case (FPM_TARGET_ARCHIVE) - call run(model%archiver // target%output_file // " " // string_cat(target%link_objects," ")) + + select case (get_os_type()) + case (OS_WINDOWS) + call write_response_file(target%output_file//".resp" ,target%link_objects) + call run(model%archiver // target%output_file // " @" // target%output_file//".resp") + + case default + call run(model%archiver // target%output_file // " " // string_cat(target%link_objects," ")) + + end select end select @@ -262,4 +271,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)') unix_path(argv(iarg)%s) + end do + close(io) +end subroutine write_response_file + end module fpm_backend |