@@ -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
@@ -472,13 +475,16 @@ end subroutine check_module_names
472
475
subroutine cmd_build (settings )
473
476
type (fpm_build_settings), intent (inout ) :: settings
474
477
475
- type (package_config_t) :: package
476
- type (fpm_model_t) :: model
478
+ type (package_config_t), allocatable :: package
479
+ type (fpm_model_t), allocatable :: model
477
480
type (build_target_ptr), allocatable :: targets(:)
478
481
type (error_t), allocatable :: error
479
482
480
483
integer :: i
481
484
485
+ ! Large variables -> safer on heap
486
+ allocate (package, model)
487
+
482
488
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
483
489
if (allocated (error)) then
484
490
call fpm_stop(1 ,' *cmd_build* Package error: ' // error% message)
@@ -520,8 +526,8 @@ subroutine cmd_run(settings,test)
520
526
integer :: i, j, col_width
521
527
logical :: found(size (settings% name))
522
528
type (error_t), allocatable :: error
523
- type (package_config_t) :: package
524
- type (fpm_model_t) :: model
529
+ type (package_config_t), allocatable :: package
530
+ type (fpm_model_t), allocatable :: model
525
531
type (build_target_ptr), allocatable :: targets(:)
526
532
type (string_t) :: exe_cmd
527
533
type (string_t), allocatable :: executables(:)
@@ -530,6 +536,9 @@ subroutine cmd_run(settings,test)
530
536
integer :: run_scope,firsterror
531
537
integer , allocatable :: stat(:),target_ID(:)
532
538
character (len= :),allocatable :: line,run_cmd,library_path
539
+
540
+ ! Large variables -> safer on heap
541
+ allocate (package,model)
533
542
534
543
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
535
544
if (allocated (error)) then
@@ -753,10 +762,13 @@ subroutine delete_targets(settings, error)
753
762
class(fpm_clean_settings), intent (inout ) :: settings
754
763
type (error_t), allocatable , intent (out ) :: error
755
764
756
- type (package_config_t) :: package
757
- type (fpm_model_t) :: model
765
+ type (package_config_t), allocatable :: package
766
+ type (fpm_model_t), allocatable :: model
758
767
type (build_target_ptr), allocatable :: targets(:)
759
768
logical :: deleted_any
769
+
770
+ ! Large variables -> safer on heap
771
+ allocate (package,model)
760
772
761
773
! Get package configuration
762
774
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
@@ -1000,7 +1012,4 @@ subroutine restore_library_path(saved_path, error)
1000
1012
1001
1013
end subroutine restore_library_path
1002
1014
1003
-
1004
-
1005
-
1006
1015
end module fpm
0 commit comments