11module fpm
2- use fpm_strings, only: string_t, operator (.in .), glob, join, string_cat
2+ use fpm_strings, only: string_t, operator (.in .), glob, join, string_cat, fnv_1a
33use fpm_backend, only: build_package
44use fpm_command_line, only: fpm_build_settings, fpm_new_settings, &
55 fpm_run_settings, fpm_install_settings, fpm_test_settings
@@ -9,8 +9,7 @@ module fpm
99use fpm_model, only: fpm_model_t, srcfile_t, show_model, &
1010 FPM_SCOPE_UNKNOWN, FPM_SCOPE_LIB, FPM_SCOPE_DEP, &
1111 FPM_SCOPE_APP, FPM_SCOPE_EXAMPLE, FPM_SCOPE_TEST
12- use fpm_compiler, only: get_module_flags, is_unknown_compiler, get_default_c_compiler, &
13- get_archiver
12+ use fpm_compiler, only: new_compiler, new_archiver
1413
1514
1615use fpm_sources, only: add_executable_sources, add_sources_from_dir
@@ -19,12 +18,9 @@ module fpm
1918 FPM_TARGET_EXECUTABLE, FPM_TARGET_ARCHIVE
2019use fpm_manifest, only : get_package_data, package_config_t
2120use fpm_error, only : error_t, fatal_error, fpm_stop
22- use fpm_manifest_test, only : test_config_t
2321use ,intrinsic :: iso_fortran_env, only : stdin= >input_unit, &
2422 & stdout= >output_unit, &
2523 & stderr= >error_unit
26- use fpm_manifest_dependency, only: dependency_config_t
27- use , intrinsic :: iso_fortran_env, only: error_unit
2824implicit none
2925private
3026public :: cmd_build, cmd_run
@@ -43,10 +39,11 @@ subroutine build_model(model, settings, package, error)
4339
4440 integer :: i, j
4541 type (package_config_t) :: dependency
46- character (len= :), allocatable :: manifest, lib_dir
42+ character (len= :), allocatable :: manifest, lib_dir, flags
4743
4844 logical :: duplicates_found = .false.
4945 type (string_t) :: include_dir
46+ character (len= 16 ) :: build_name
5047
5148 model% package_name = package% name
5249
@@ -63,27 +60,30 @@ subroutine build_model(model, settings, package, error)
6360 call filewrite(join_path(" build" , " .gitignore" ),[" *" ])
6461 end if
6562
66- if (settings% compiler.eq. ' ' )then
67- model% fortran_compiler = ' gfortran'
63+ call new_compiler(model% compiler, settings% compiler)
64+ call new_archiver(model% archiver)
65+
66+ if (settings% flag == ' ' ) then
67+ flags = model% compiler% get_default_flags(settings% profile == " release" )
6868 else
69- model% fortran_compiler = settings% compiler
70- endif
69+ flags = settings% flag
70+ select case (settings% profile)
71+ case (" release" , " debug" )
72+ flags = flags // model% compiler% get_default_flags(settings% profile == " release" )
73+ end select
74+ end if
7175
72- model% archiver = get_archiver()
73- call get_default_c_compiler(model% fortran_compiler, model% c_compiler)
74- model% c_compiler = get_env(' FPM_C_COMPILER' ,model% c_compiler)
76+ write (build_name, ' (z16.16)' ) fnv_1a(flags)
7577
76- if (is_unknown_compiler( model% fortran_compiler )) then
78+ if (model% compiler % is_unknown( )) then
7779 write (* , ' (*(a:,1x))' ) &
78- " <WARN>" , " Unknown compiler" , model% fortran_compiler , " requested!" , &
80+ " <WARN>" , " Unknown compiler" , model% compiler % fc , " requested!" , &
7981 " Defaults for this compiler might be incorrect"
8082 end if
81- model% output_directory = join_path(' build' ,basename(model% fortran_compiler )// ' _' // settings % build_name)
83+ model% output_directory = join_path(' build' ,basename(model% compiler % fc )// ' _' // build_name)
8284
83- call get_module_flags(model% fortran_compiler, &
84- & join_path(model% output_directory,model% package_name), &
85- & model% fortran_compile_flags)
86- model% fortran_compile_flags = settings% flag // model% fortran_compile_flags
85+ model% fortran_compile_flags = flags // " " // &
86+ & model% compiler% get_module_flag(join_path(model% output_directory, model% package_name))
8787
8888 allocate (model% packages(model% deps% ndep))
8989
@@ -191,9 +191,9 @@ subroutine build_model(model, settings, package, error)
191191 if (allocated (error)) return
192192
193193 if (settings% verbose) then
194- write (* ,* )' <INFO> BUILD_NAME: ' ,settings % build_name
195- write (* ,* )' <INFO> COMPILER: ' ,settings % compiler
196- write (* ,* )' <INFO> C COMPILER: ' ,model% c_compiler
194+ write (* ,* )' <INFO> BUILD_NAME: ' ,build_name
195+ write (* ,* )' <INFO> COMPILER: ' ,model % compiler% fc
196+ write (* ,* )' <INFO> C COMPILER: ' ,model% compiler % cc
197197 write (* ,* )' <INFO> COMPILER OPTIONS: ' , model% fortran_compile_flags
198198 write (* ,* )' <INFO> INCLUDE DIRECTORIES: [' , string_cat(model% include_dirs,' ,' ),' ]'
199199 end if
@@ -236,7 +236,7 @@ subroutine check_modules_for_duplicates(model, duplicates_found)
236236 if (allocated (model% packages(k)% sources(l)% modules_provided)) then
237237 do m= 1 ,size (model% packages(k)% sources(l)% modules_provided)
238238 if (model% packages(k)% sources(l)% modules_provided(m)% s.in .modules(:modi-1 )) then
239- write (error_unit , * ) " Warning: Module " ,model% packages(k)% sources(l)% modules_provided(m)% s, &
239+ write (stderr , * ) " Warning: Module " ,model% packages(k)% sources(l)% modules_provided(m)% s, &
240240 " in " ,model% packages(k)% sources(l)% file_name," is a duplicate"
241241 duplicates_found = .true.
242242 else
0 commit comments