@@ -515,6 +515,8 @@ subroutine prune_build_targets(targets, root_package)
515
515
516
516
end if
517
517
518
+ call reset_target_flags(targets)
519
+
518
520
exclude_target(:) = .false.
519
521
520
522
! Exclude purely module targets if they are not used anywhere
@@ -592,11 +594,18 @@ subroutine prune_build_targets(targets, root_package)
592
594
593
595
contains
594
596
597
+ ! > Recursively collect which modules are actually used
595
598
recursive subroutine collect_used_modules (target )
596
- type (build_target_t), intent (in ) :: target
599
+ type (build_target_t), intent (inout ) :: target
597
600
598
601
integer :: j, k
599
602
603
+ if (target % touched) then
604
+ return
605
+ else
606
+ target % touched = .true.
607
+ end if
608
+
600
609
if (allocated (target % source)) then
601
610
do j= 1 ,size (target % source% modules_used)
602
611
@@ -631,6 +640,20 @@ recursive subroutine collect_used_modules(target)
631
640
632
641
end subroutine collect_used_modules
633
642
643
+ ! > Reset target flags after recursive search
644
+ subroutine reset_target_flags (targets )
645
+ type (build_target_ptr), intent (inout ) :: targets(:)
646
+
647
+ integer :: i
648
+
649
+ do i= 1 ,size (targets)
650
+
651
+ targets(i)% ptr% touched = .false.
652
+
653
+ end do
654
+
655
+ end subroutine reset_target_flags
656
+
634
657
end subroutine prune_build_targets
635
658
636
659
0 commit comments