@@ -2,7 +2,7 @@ module fpm_cmd_install
2
2
use fpm, only : build_model
3
3
use fpm_backend, only : build_package
4
4
use fpm_command_line, only : fpm_install_settings
5
- use fpm_error, only : error_t
5
+ use fpm_error, only : error_t, fatal_error
6
6
use fpm_filesystem, only : join_path, list_files
7
7
use fpm_installer, only : installer_t, new_installer
8
8
use fpm_manifest, only : package_config_t, get_package_data
@@ -25,13 +25,21 @@ subroutine cmd_install(settings)
25
25
type (fpm_model_t) :: model
26
26
type (installer_t) :: installer
27
27
character (len= :), allocatable :: lib, exe, dir
28
+ logical :: installable
28
29
29
30
call get_package_data(package, " fpm.toml" , error, apply_defaults= .true. )
30
31
call handle_error(error)
31
32
32
33
call build_model(model, settings% fpm_build_settings, package, error)
33
34
call handle_error(error)
34
35
36
+ installable = (allocated (package% library) .and. package% install% library) &
37
+ .or. allocated (package% executable)
38
+ if (.not. installable) then
39
+ call fatal_error(error, " Project does not contain any installable targets" )
40
+ call handle_error(error)
41
+ end if
42
+
35
43
if (.not. settings% no_rebuild) then
36
44
call build_package(model)
37
45
end if
@@ -114,7 +122,7 @@ end function is_module_file
114
122
subroutine handle_error (error )
115
123
type (error_t), intent (in ), optional :: error
116
124
if (present (error)) then
117
- print ' (a)' , error% message
125
+ print ' ("[Error]", 1x, a)' , error% message
118
126
error stop 1
119
127
end if
120
128
end subroutine handle_error
0 commit comments