@@ -129,7 +129,7 @@ module fpm_command_line
129
129
character (len= :),allocatable :: dump_model
130
130
end type
131
131
132
- type, extends(fpm_cmd_settings) :: fpm_clean_settings
132
+ type, extends(fpm_build_settings) :: fpm_clean_settings
133
133
logical :: clean_skip = .false.
134
134
logical :: clean_all = .false.
135
135
logical :: clean_test = .false.
@@ -240,7 +240,6 @@ subroutine get_command_line_settings(cmd_settings)
240
240
integer :: i
241
241
integer :: os
242
242
type (fpm_install_settings), allocatable :: install_settings
243
- type (fpm_publish_settings), allocatable :: publish_settings
244
243
type (fpm_export_settings) , allocatable :: export_settings
245
244
type (version_t) :: version
246
245
character (len= :), allocatable :: common_args, compiler_args, run_args, working_dir, &
@@ -316,8 +315,7 @@ subroutine get_command_line_settings(cmd_settings)
316
315
& --config-file " " &
317
316
& --' ,help_run,version_text)
318
317
319
- call check_build_vals()
320
-
318
+ ! Collect target names
321
319
if ( size (unnamed) > 1 )then
322
320
names= unnamed(2 :)
323
321
else
@@ -345,34 +343,28 @@ subroutine get_command_line_settings(cmd_settings)
345
343
val_runner_args= sget(' runner-args' )
346
344
call remove_characters_in_set(val_runner_args,set= ' "' )
347
345
348
- c_compiler = sget(' c-compiler' )
349
- cxx_compiler = sget(' cxx-compiler' )
350
- archiver = sget(' archiver' )
351
- config_file = sget(' config-file' )
346
+ ! Allocate and populate (parent build settings via helper)
352
347
allocate (fpm_run_settings :: cmd_settings)
353
- val_runner= sget(' runner' )
354
- if (specified(' runner' ) .and. val_runner==' ' )val_runner= ' echo'
355
-
356
- cmd_settings= fpm_run_settings(&
357
- & args= remaining,&
358
- & profile= val_profile,&
359
- & prune= .not. lget(' no-prune' ), &
360
- & compiler= val_compiler, &
361
- & c_compiler= c_compiler, &
362
- & cxx_compiler= cxx_compiler, &
363
- & archiver= archiver, &
364
- & path_to_config= config_file, &
365
- & flag= val_flag, &
366
- & cflag= val_cflag, &
367
- & cxxflag= val_cxxflag, &
368
- & ldflag= val_ldflag, &
369
- & example= lget(' example' ), &
370
- & list= lget(' list' ),&
371
- & build_tests= .false. ,&
372
- & name= names,&
373
- & runner= val_runner,&
374
- & runner_args= val_runner_args, &
375
- & verbose= lget(' verbose' ) )
348
+
349
+ select type (cmd = > cmd_settings)
350
+
351
+ type is (fpm_run_settings)
352
+
353
+ call build_settings(cmd, list= lget(' list' ), build_tests= .false. , &
354
+ config_file= sget(' config-file' ))
355
+
356
+ ! Runner defaults/overrides
357
+ val_runner = sget(' runner' )
358
+ if (specified(' runner' ) .and. val_runner == ' ' ) val_runner = ' echo'
359
+
360
+ ! Run-specific fields
361
+ cmd% args = remaining
362
+ cmd% example = lget(' example' )
363
+ cmd% name = names
364
+ cmd% runner = val_runner
365
+ cmd% runner_args = val_runner_args
366
+
367
+ end select
376
368
377
369
case (' build' )
378
370
call set_args(common_args // compiler_args // ' &
@@ -383,33 +375,16 @@ subroutine get_command_line_settings(cmd_settings)
383
375
& --config-file " " &
384
376
& --' ,help_build,version_text)
385
377
386
- call check_build_vals()
387
-
388
- c_compiler = sget(' c-compiler' )
389
- cxx_compiler = sget(' cxx-compiler' )
390
- archiver = sget(' archiver' )
391
- config_file = sget(' config-file' )
392
- val_dump = sget(' dump' )
393
- if (specified(' dump' ) .and. val_dump==' ' )val_dump= ' fpm_model.toml'
394
-
378
+ ! Create and populate a base fpm_build_settings from CLI/env
395
379
allocate ( fpm_build_settings :: cmd_settings )
396
- cmd_settings= fpm_build_settings( &
397
- & profile= val_profile,&
398
- & dump= val_dump,&
399
- & prune= .not. lget(' no-prune' ), &
400
- & compiler= val_compiler, &
401
- & c_compiler= c_compiler, &
402
- & cxx_compiler= cxx_compiler, &
403
- & archiver= archiver, &
404
- & path_to_config= config_file, &
405
- & flag= val_flag, &
406
- & cflag= val_cflag, &
407
- & cxxflag= val_cxxflag, &
408
- & ldflag= val_ldflag, &
409
- & list= lget(' list' ),&
410
- & show_model= lget(' show-model' ),&
411
- & build_tests= lget(' tests' ),&
412
- & verbose= lget(' verbose' ) )
380
+
381
+ select type (cmd = > cmd_settings)
382
+ class is (fpm_build_settings)
383
+ call build_settings(cmd, list= lget(' list' ), &
384
+ show_model= lget(' show-model' ), &
385
+ build_tests= lget(' tests' ), &
386
+ config_file= sget(' config-file' ) )
387
+ end select
413
388
414
389
case (' new' )
415
390
call set_args(common_args // ' &
@@ -553,26 +528,13 @@ subroutine get_command_line_settings(cmd_settings)
553
528
554
529
call check_build_vals()
555
530
556
- c_compiler = sget(' c-compiler' )
557
- cxx_compiler = sget(' cxx-compiler' )
558
- archiver = sget(' archiver' )
559
531
config_file = sget(' config-file' )
560
- allocate (install_settings, source= fpm_install_settings(&
561
- list= lget(' list' ), &
562
- build_tests= lget(' test' ), &
563
- profile= val_profile,&
564
- prune= .not. lget(' no-prune' ), &
565
- compiler= val_compiler, &
566
- c_compiler= c_compiler, &
567
- cxx_compiler= cxx_compiler, &
568
- archiver= archiver, &
569
- path_to_config= config_file, &
570
- flag= val_flag, &
571
- cflag= val_cflag, &
572
- cxxflag= val_cxxflag, &
573
- ldflag= val_ldflag, &
574
- no_rebuild= lget(' no-rebuild' ), &
575
- verbose= lget(' verbose' )))
532
+ allocate (install_settings)
533
+
534
+ call build_settings(install_settings, list= lget(' list' ), &
535
+ build_tests= lget(' test' ), config_file= config_file)
536
+
537
+ install_settings% no_rebuild = lget(' no-rebuild' )
576
538
call get_char_arg(install_settings% prefix, ' prefix' )
577
539
call get_char_arg(install_settings% libdir, ' libdir' )
578
540
call get_char_arg(install_settings% testdir, ' testdir' )
@@ -620,35 +582,23 @@ subroutine get_command_line_settings(cmd_settings)
620
582
val_runner_args= sget(' runner-args' )
621
583
call remove_characters_in_set(val_runner_args,set= ' "' )
622
584
623
- c_compiler = sget(' c-compiler' )
624
- cxx_compiler = sget(' cxx-compiler' )
625
- archiver = sget(' archiver' )
626
- config_file = sget(' config-file' )
627
-
628
585
allocate (fpm_test_settings :: cmd_settings)
629
586
val_runner= sget(' runner' )
630
587
if (specified(' runner' ) .and. val_runner==' ' )val_runner= ' echo'
631
588
632
- cmd_settings= fpm_test_settings(&
633
- & args= remaining, &
634
- & profile= val_profile, &
635
- & prune= .not. lget(' no-prune' ), &
636
- & compiler= val_compiler, &
637
- & c_compiler= c_compiler, &
638
- & cxx_compiler= cxx_compiler, &
639
- & archiver= archiver, &
640
- & path_to_config= config_file, &
641
- & flag= val_flag, &
642
- & cflag= val_cflag, &
643
- & cxxflag= val_cxxflag, &
644
- & ldflag= val_ldflag, &
645
- & example= .false. , &
646
- & list= lget(' list' ), &
647
- & build_tests= .true. , &
648
- & name= names, &
649
- & runner= val_runner, &
650
- & runner_args= val_runner_args, &
651
- & verbose= lget(' verbose' ))
589
+ select type (cmd = > cmd_settings)
590
+ type is (fpm_test_settings)
591
+
592
+ call build_settings(cmd, list= lget(' list' ), build_tests= .true. , &
593
+ config_file= sget(' config-file' ))
594
+
595
+ cmd% args = remaining
596
+ cmd% example = .false.
597
+ cmd% name = names
598
+ cmd% runner = val_runner
599
+ cmd% runner_args = val_runner_args
600
+
601
+ end select
652
602
653
603
case (' update' )
654
604
call set_args(common_args // ' &
@@ -688,30 +638,15 @@ subroutine get_command_line_settings(cmd_settings)
688
638
689
639
call check_build_vals()
690
640
691
- c_compiler = sget(' c-compiler' )
692
- cxx_compiler = sget(' cxx-compiler' )
693
- archiver = sget(' archiver' )
694
- allocate (export_settings, source= fpm_export_settings(&
695
- profile= val_profile,&
696
- prune= .not. lget(' no-prune' ), &
697
- compiler= val_compiler, &
698
- c_compiler= c_compiler, &
699
- cxx_compiler= cxx_compiler, &
700
- archiver= archiver, &
701
- flag= val_flag, &
702
- cflag= val_cflag, &
703
- show_model= .true. , &
704
- cxxflag= val_cxxflag, &
705
- ldflag= val_ldflag, &
706
- verbose= lget(' verbose' )))
641
+ allocate (export_settings)
642
+ call build_settings(export_settings, show_model= .true. )
707
643
call get_char_arg(export_settings% dump_model, ' model' )
708
644
call get_char_arg(export_settings% dump_manifest, ' manifest' )
709
645
call get_char_arg(export_settings% dump_dependencies, ' dependencies' )
710
646
call move_alloc(export_settings, cmd_settings)
711
647
712
-
713
648
case (' clean' )
714
- call set_args(common_args // &
649
+ call set_args(common_args // compiler_args // &
715
650
& ' --registry-cache' // &
716
651
& ' --skip' // &
717
652
& ' --all' // &
@@ -742,16 +677,20 @@ subroutine get_command_line_settings(cmd_settings)
742
677
end if
743
678
744
679
allocate (fpm_clean_settings :: cmd_settings)
745
- call get_current_directory(working_dir, error)
746
- cmd_settings = fpm_clean_settings( &
747
- & working_dir= working_dir, &
748
- & clean_skip= skip, &
749
- & registry_cache= lget(' registry-cache' ), &
750
- & clean_all= clean_all, &
751
- & clean_test= clean_test, &
752
- & clean_apps= clean_apps, &
753
- & clean_examples= clean_examples, &
754
- & path_to_config= config_file)
680
+
681
+ select type (cln = > cmd_settings)
682
+ type is (fpm_clean_settings)
683
+
684
+ call build_settings(cln, config_file= config_file)
685
+
686
+ cln% clean_skip = skip
687
+ cln% registry_cache = lget(' registry-cache' )
688
+ cln% clean_all = clean_all
689
+ cln% clean_test = clean_test
690
+ cln% clean_apps = clean_apps
691
+ cln% clean_examples = clean_examples
692
+
693
+ end select
755
694
end block
756
695
757
696
case (' publish' )
@@ -768,33 +707,22 @@ subroutine get_command_line_settings(cmd_settings)
768
707
769
708
call check_build_vals()
770
709
771
- c_compiler = sget(' c-compiler' )
772
- cxx_compiler = sget(' cxx-compiler' )
773
- archiver = sget(' archiver' )
774
710
config_file = sget(' config-file' )
775
711
token_s = sget(' token' )
776
712
777
713
allocate (fpm_publish_settings :: cmd_settings)
778
- cmd_settings = fpm_publish_settings( &
779
- & show_package_version = lget(' show-package-version' ), &
780
- & show_upload_data = lget(' show-upload-data' ), &
781
- & is_dry_run = lget(' dry-run' ), &
782
- & profile= val_profile,&
783
- & prune= .not. lget(' no-prune' ), &
784
- & compiler= val_compiler, &
785
- & c_compiler= c_compiler, &
786
- & cxx_compiler= cxx_compiler, &
787
- & archiver= archiver, &
788
- & flag= val_flag, &
789
- & cflag= val_cflag, &
790
- & cxxflag= val_cxxflag, &
791
- & ldflag= val_ldflag, &
792
- & list= lget(' list' ),&
793
- & show_model= lget(' show-model' ),&
794
- & build_tests= lget(' tests' ),&
795
- & path_to_config= config_file, &
796
- & verbose= lget(' verbose' ),&
797
- & token= token_s)
714
+ select type (pub = > cmd_settings)
715
+ type is (fpm_publish_settings)
716
+
717
+ call build_settings(pub, list= lget(' list' ), show_model= lget(' show-model' ), &
718
+ build_tests= lget(' tests' ), config_file= config_file)
719
+
720
+ pub% show_package_version = lget(' show-package-version' )
721
+ pub% show_upload_data = lget(' show-upload-data' )
722
+ pub% is_dry_run = lget(' dry-run' )
723
+ pub% token = token_s
724
+
725
+ end select
798
726
799
727
case default
800
728
@@ -1654,9 +1582,10 @@ subroutine build_settings(self, list, show_model, build_tests, config_file)
1654
1582
1655
1583
character (len= :), allocatable :: comp, ccomp, cxcomp, arch
1656
1584
character (len= :), allocatable :: fflags, cflags, cxxflags, ldflags
1657
- character (len= :), allocatable :: prof, cfg
1585
+ character (len= :), allocatable :: prof, cfg, dump
1658
1586
1659
1587
! Read CLI/env values (sget returns what set_args registered, including defaults)
1588
+ ! This is equivalent to check_build_vals
1660
1589
comp = sget(' compiler' ); if (comp == ' ' ) comp = ' gfortran'
1661
1590
fflags = ' ' // sget(' flag' )
1662
1591
cflags = ' ' // sget(' c-flag' )
@@ -1668,6 +1597,10 @@ subroutine build_settings(self, list, show_model, build_tests, config_file)
1668
1597
cxcomp = sget(' cxx-compiler' )
1669
1598
arch = sget(' archiver' )
1670
1599
1600
+ ! Handle --dump default (empty value means use 'fpm_model.toml')
1601
+ dump = sget(' dump' )
1602
+ if (specified(' dump' ) .and. dump==' ' ) dump = ' fpm_model.toml'
1603
+
1671
1604
if (present (config_file)) then
1672
1605
if (len_trim (config_file) > 0 ) then
1673
1606
cfg = config_file
@@ -1691,6 +1624,7 @@ subroutine build_settings(self, list, show_model, build_tests, config_file)
1691
1624
self% cxxflag = cxxflags
1692
1625
self% ldflag = ldflags
1693
1626
self% verbose = lget(' verbose' )
1627
+ self% dump = dump
1694
1628
1695
1629
! Optional overrides from caller
1696
1630
if (present (list)) self% list = list
0 commit comments