subroutine check_modules_for_duplicates(model, duplicates_found)
type(fpm_model_t), intent(in) :: model
integer :: maxsize
integer :: i,j,k,l,m,modi
type(string_t), allocatable :: modules(:)
logical :: duplicates_found
! Initialise the size of array
maxsize = 0
! Get number of modules provided by each source file of every package
do i=1,size(model%packages)
do j=1,size(model%packages(i)%sources)
if (allocated(model%packages(i)%sources(j)%modules_provided)) then
maxsize = maxsize + size(model%packages(i)%sources(j)%modules_provided)
end if
end do
end do
! Allocate array to contain distinct names of modules
allocate(modules(maxsize))
! Initialise index to point at start of the newly allocated array
modi = 1
! Loop through modules provided by each source file of every package
! Add it to the array if it is not already there
! Otherwise print out warning about duplicates
do k=1,size(model%packages)
do l=1,size(model%packages(k)%sources)
if (allocated(model%packages(k)%sources(l)%modules_provided)) then
do m=1,size(model%packages(k)%sources(l)%modules_provided)
if (model%packages(k)%sources(l)%modules_provided(m)%s.in.modules(:modi-1)) then
write(stderr, *) "Warning: Module ",model%packages(k)%sources(l)%modules_provided(m)%s, &
" in ",model%packages(k)%sources(l)%file_name," is a duplicate"
duplicates_found = .true.
else
modules(modi) = model%packages(k)%sources(l)%modules_provided(m)
modi = modi + 1
end if
end do
end if
end do
end do
end subroutine check_modules_for_duplicates