Skip to content

Commit 9a14cd1

Browse files
committed
Implement changes requested in the feedback for PR #412
1 parent 8a91181 commit 9a14cd1

File tree

1 file changed

+15
-6
lines changed

1 file changed

+15
-6
lines changed

fpm/src/fpm.f90

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module fpm
2323
& stdout=>output_unit, &
2424
& stderr=>error_unit
2525
use fpm_manifest_dependency, only: dependency_config_t
26+
use, intrinsic :: iso_fortran_env, only: error_unit
2627
implicit none
2728
private
2829
public :: cmd_build, cmd_run
@@ -43,6 +44,8 @@ subroutine build_model(model, settings, package, error)
4344
type(package_config_t) :: dependency
4445
character(len=:), allocatable :: manifest, lib_dir
4546

47+
logical :: duplicates_found = .false.
48+
4649
if(settings%verbose)then
4750
write(*,*)'<INFO>BUILD_NAME:',settings%build_name
4851
write(*,*)'<INFO>COMPILER: ',settings%compiler
@@ -155,15 +158,19 @@ subroutine build_model(model, settings, package, error)
155158
if (allocated(error)) return
156159

157160
! Check for duplicate modules
158-
call check_modules(model)
161+
call check_modules_for_duplicates(model, duplicates_found)
162+
if (duplicates_found) then
163+
error stop
164+
end if
159165
end subroutine build_model
160166

161167
! Check for duplicate modules
162-
subroutine check_modules(model)
168+
subroutine check_modules_for_duplicates(model, duplicates_found)
163169
type(fpm_model_t), intent(in) :: model
164170
integer :: maxsize
165171
integer :: i,j,k,l,m,modi
166172
type(string_t), allocatable :: modules(:)
173+
logical :: duplicates_found
167174
! Initialise the size of array
168175
maxsize = 0
169176
! Get number of modules provided by each source file of every package
@@ -175,7 +182,7 @@ subroutine check_modules(model)
175182
end do
176183
end do
177184
! Allocate array to contain distinct names of modules
178-
allocate(modules(1:maxsize))
185+
allocate(modules(maxsize))
179186

180187
! Initialise index to point at start of the newly allocated array
181188
modi = 1
@@ -187,16 +194,18 @@ subroutine check_modules(model)
187194
do l=1,size(model%packages(k)%sources)
188195
if (allocated(model%packages(k)%sources(l)%modules_provided)) then
189196
do m=1,size(model%packages(k)%sources(l)%modules_provided)
190-
if (model%packages(k)%sources(l)%modules_provided(m)%s.in.modules) then
191-
print *,"Warning: Module ",model%packages(k)%sources(l)%modules_provided(m)%s," is duplicate"
197+
if (model%packages(k)%sources(l)%modules_provided(m)%s.in.modules(:modi-1)) then
198+
write(error_unit, *) "Warning: Module ",model%packages(k)%sources(l)%modules_provided(m)%s," is duplicate"
199+
duplicates_found = .true.
192200
else
193201
modules(modi) = model%packages(k)%sources(l)%modules_provided(m)
202+
modi = modi + 1
194203
end if
195204
end do
196205
end if
197206
end do
198207
end do
199-
end subroutine check_modules
208+
end subroutine check_modules_for_duplicates
200209

201210
subroutine cmd_build(settings)
202211
type(fpm_build_settings), intent(in) :: settings

0 commit comments

Comments
 (0)