@@ -23,6 +23,7 @@ module fpm
23
23
& stdout= >output_unit, &
24
24
& stderr= >error_unit
25
25
use fpm_manifest_dependency, only: dependency_config_t
26
+ use , intrinsic :: iso_fortran_env, only: error_unit
26
27
implicit none
27
28
private
28
29
public :: cmd_build, cmd_run
@@ -43,6 +44,8 @@ subroutine build_model(model, settings, package, error)
43
44
type (package_config_t) :: dependency
44
45
character (len= :), allocatable :: manifest, lib_dir
45
46
47
+ logical :: duplicates_found = .false.
48
+
46
49
if (settings% verbose)then
47
50
write (* ,* )' <INFO>BUILD_NAME:' ,settings% build_name
48
51
write (* ,* )' <INFO>COMPILER: ' ,settings% compiler
@@ -155,15 +158,19 @@ subroutine build_model(model, settings, package, error)
155
158
if (allocated (error)) return
156
159
157
160
! 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
159
165
end subroutine build_model
160
166
161
167
! Check for duplicate modules
162
- subroutine check_modules (model )
168
+ subroutine check_modules_for_duplicates (model , duplicates_found )
163
169
type (fpm_model_t), intent (in ) :: model
164
170
integer :: maxsize
165
171
integer :: i,j,k,l,m,modi
166
172
type (string_t), allocatable :: modules(:)
173
+ logical :: duplicates_found
167
174
! Initialise the size of array
168
175
maxsize = 0
169
176
! Get number of modules provided by each source file of every package
@@ -175,7 +182,7 @@ subroutine check_modules(model)
175
182
end do
176
183
end do
177
184
! Allocate array to contain distinct names of modules
178
- allocate (modules(1 : maxsize))
185
+ allocate (modules(maxsize))
179
186
180
187
! Initialise index to point at start of the newly allocated array
181
188
modi = 1
@@ -187,16 +194,18 @@ subroutine check_modules(model)
187
194
do l= 1 ,size (model% packages(k)% sources)
188
195
if (allocated (model% packages(k)% sources(l)% modules_provided)) then
189
196
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.
192
200
else
193
201
modules(modi) = model% packages(k)% sources(l)% modules_provided(m)
202
+ modi = modi + 1
194
203
end if
195
204
end do
196
205
end if
197
206
end do
198
207
end do
199
- end subroutine check_modules
208
+ end subroutine check_modules_for_duplicates
200
209
201
210
subroutine cmd_build (settings )
202
211
type (fpm_build_settings), intent (in ) :: settings
0 commit comments