Skip to content

Commit a668c79

Browse files
committed
use helper for build
1 parent 1dfc4ec commit a668c79

File tree

1 file changed

+87
-153
lines changed

1 file changed

+87
-153
lines changed

src/fpm_command_line.f90

Lines changed: 87 additions & 153 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ module fpm_command_line
129129
character(len=:),allocatable :: dump_model
130130
end type
131131

132-
type, extends(fpm_cmd_settings) :: fpm_clean_settings
132+
type, extends(fpm_build_settings) :: fpm_clean_settings
133133
logical :: clean_skip = .false.
134134
logical :: clean_all = .false.
135135
logical :: clean_test = .false.
@@ -240,7 +240,6 @@ subroutine get_command_line_settings(cmd_settings)
240240
integer :: i
241241
integer :: os
242242
type(fpm_install_settings), allocatable :: install_settings
243-
type(fpm_publish_settings), allocatable :: publish_settings
244243
type(fpm_export_settings) , allocatable :: export_settings
245244
type(version_t) :: version
246245
character(len=:), allocatable :: common_args, compiler_args, run_args, working_dir, &
@@ -316,8 +315,7 @@ subroutine get_command_line_settings(cmd_settings)
316315
& --config-file " " &
317316
& --',help_run,version_text)
318317

319-
call check_build_vals()
320-
318+
! Collect target names
321319
if( size(unnamed) > 1 )then
322320
names=unnamed(2:)
323321
else
@@ -345,34 +343,28 @@ subroutine get_command_line_settings(cmd_settings)
345343
val_runner_args=sget('runner-args')
346344
call remove_characters_in_set(val_runner_args,set='"')
347345

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)
352347
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
376368

377369
case('build')
378370
call set_args(common_args // compiler_args //'&
@@ -383,33 +375,16 @@ subroutine get_command_line_settings(cmd_settings)
383375
& --config-file " " &
384376
& --',help_build,version_text)
385377

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
395379
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
413388

414389
case('new')
415390
call set_args(common_args // '&
@@ -553,26 +528,13 @@ subroutine get_command_line_settings(cmd_settings)
553528

554529
call check_build_vals()
555530

556-
c_compiler = sget('c-compiler')
557-
cxx_compiler = sget('cxx-compiler')
558-
archiver = sget('archiver')
559531
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')
576538
call get_char_arg(install_settings%prefix, 'prefix')
577539
call get_char_arg(install_settings%libdir, 'libdir')
578540
call get_char_arg(install_settings%testdir, 'testdir')
@@ -620,35 +582,23 @@ subroutine get_command_line_settings(cmd_settings)
620582
val_runner_args=sget('runner-args')
621583
call remove_characters_in_set(val_runner_args,set='"')
622584

623-
c_compiler = sget('c-compiler')
624-
cxx_compiler = sget('cxx-compiler')
625-
archiver = sget('archiver')
626-
config_file = sget('config-file')
627-
628585
allocate(fpm_test_settings :: cmd_settings)
629586
val_runner=sget('runner')
630587
if(specified('runner') .and. val_runner=='')val_runner='echo'
631588

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
652602

653603
case('update')
654604
call set_args(common_args // '&
@@ -688,30 +638,15 @@ subroutine get_command_line_settings(cmd_settings)
688638

689639
call check_build_vals()
690640

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.)
707643
call get_char_arg(export_settings%dump_model, 'model')
708644
call get_char_arg(export_settings%dump_manifest, 'manifest')
709645
call get_char_arg(export_settings%dump_dependencies, 'dependencies')
710646
call move_alloc(export_settings, cmd_settings)
711647

712-
713648
case('clean')
714-
call set_args(common_args // &
649+
call set_args(common_args // compiler_args // &
715650
& ' --registry-cache' // &
716651
& ' --skip' // &
717652
& ' --all' // &
@@ -742,16 +677,20 @@ subroutine get_command_line_settings(cmd_settings)
742677
end if
743678

744679
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
755694
end block
756695

757696
case('publish')
@@ -768,33 +707,22 @@ subroutine get_command_line_settings(cmd_settings)
768707

769708
call check_build_vals()
770709

771-
c_compiler = sget('c-compiler')
772-
cxx_compiler = sget('cxx-compiler')
773-
archiver = sget('archiver')
774710
config_file = sget('config-file')
775711
token_s = sget('token')
776712

777713
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
798726

799727
case default
800728

@@ -1654,9 +1582,10 @@ subroutine build_settings(self, list, show_model, build_tests, config_file)
16541582

16551583
character(len=:), allocatable :: comp, ccomp, cxcomp, arch
16561584
character(len=:), allocatable :: fflags, cflags, cxxflags, ldflags
1657-
character(len=:), allocatable :: prof, cfg
1585+
character(len=:), allocatable :: prof, cfg, dump
16581586

16591587
! Read CLI/env values (sget returns what set_args registered, including defaults)
1588+
! This is equivalent to check_build_vals
16601589
comp = sget('compiler'); if (comp == '') comp = 'gfortran'
16611590
fflags = ' ' // sget('flag')
16621591
cflags = ' ' // sget('c-flag')
@@ -1668,6 +1597,10 @@ subroutine build_settings(self, list, show_model, build_tests, config_file)
16681597
cxcomp = sget('cxx-compiler')
16691598
arch = sget('archiver')
16701599

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+
16711604
if (present(config_file)) then
16721605
if (len_trim(config_file) > 0) then
16731606
cfg = config_file
@@ -1691,6 +1624,7 @@ subroutine build_settings(self, list, show_model, build_tests, config_file)
16911624
self%cxxflag = cxxflags
16921625
self%ldflag = ldflags
16931626
self%verbose = lget('verbose')
1627+
self%dump = dump
16941628

16951629
! Optional overrides from caller
16961630
if (present(list)) self%list = list

0 commit comments

Comments
 (0)