@@ -45,13 +45,16 @@ subroutine build_model(model, settings, package_config, error)
45
45
type (error_t), allocatable , intent (out ) :: error
46
46
47
47
integer :: i, j
48
- type (package_config_t), target :: package, dependency_config, dependency
48
+ type (package_config_t), allocatable , target :: package, dependency_config, dependency
49
49
type (package_config_t), pointer :: manifest
50
- type (platform_config_t) :: target_platform
50
+ type (platform_config_t), allocatable , target :: target_platform
51
51
character (len= :), allocatable :: file_name, lib_dir
52
52
logical :: has_cpp
53
53
logical :: duplicates_found, auto_exe, auto_example, auto_test
54
54
type (string_t) :: include_dir
55
+
56
+ ! Large variables -> safer on heap
57
+ allocate (package,dependency_config,dependency,target_platform)
55
58
56
59
model% package_name = package_config% name
57
60
@@ -500,13 +503,16 @@ end subroutine check_module_names
500
503
subroutine cmd_build (settings )
501
504
type (fpm_build_settings), intent (inout ) :: settings
502
505
503
- type (package_config_t) :: package
504
- type (fpm_model_t) :: model
506
+ type (package_config_t), allocatable :: package
507
+ type (fpm_model_t), allocatable :: model
505
508
type (build_target_ptr), allocatable :: targets(:)
506
509
type (error_t), allocatable :: error
507
510
508
511
integer :: i
509
512
513
+ ! Large variables -> safer on heap
514
+ allocate (package, model)
515
+
510
516
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
511
517
if (allocated (error)) then
512
518
call fpm_stop(1 ,' *cmd_build* Package error: ' // error% message)
@@ -548,8 +554,8 @@ subroutine cmd_run(settings,test)
548
554
integer :: i, j, col_width
549
555
logical :: found(size (settings% name))
550
556
type (error_t), allocatable :: error
551
- type (package_config_t) :: package
552
- type (fpm_model_t) :: model
557
+ type (package_config_t), allocatable :: package
558
+ type (fpm_model_t), allocatable :: model
553
559
type (build_target_ptr), allocatable :: targets(:)
554
560
type (string_t) :: exe_cmd
555
561
type (string_t), allocatable :: executables(:)
@@ -558,6 +564,9 @@ subroutine cmd_run(settings,test)
558
564
integer :: run_scope,firsterror
559
565
integer , allocatable :: stat(:),target_ID(:)
560
566
character (len= :),allocatable :: line,run_cmd,library_path
567
+
568
+ ! Large variables -> safer on heap
569
+ allocate (package,model)
561
570
562
571
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
563
572
if (allocated (error)) then
@@ -781,10 +790,13 @@ subroutine delete_targets(settings, error)
781
790
class(fpm_clean_settings), intent (inout ) :: settings
782
791
type (error_t), allocatable , intent (out ) :: error
783
792
784
- type (package_config_t) :: package
785
- type (fpm_model_t) :: model
793
+ type (package_config_t), allocatable :: package
794
+ type (fpm_model_t), allocatable :: model
786
795
type (build_target_ptr), allocatable :: targets(:)
787
796
logical :: deleted_any
797
+
798
+ ! Large variables -> safer on heap
799
+ allocate (package,model)
788
800
789
801
! Get package configuration
790
802
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
@@ -1028,7 +1040,4 @@ subroutine restore_library_path(saved_path, error)
1028
1040
1029
1041
end subroutine restore_library_path
1030
1042
1031
-
1032
-
1033
-
1034
1043
end module fpm
0 commit comments