Program without program-statement misclassification during parsing
Description
fpm doesn't classify correctly the source type of program units without a program-statement, such as:
print *, "Hello World"
end
or
print *, "Hello World"
end program
which are allowed according to the standard.
Currently, parse_f_source will return FPM_UNIT_SUBPROGRAM (=4)` for these two cases.
Expected Behaviour
The expected source unit type should be FPM_UNIT_PROGRAM (=1).
Version of fpm
0.8.1, alpha
Platform and Architecture
MacOS (Intel)
Additional Information
The culprit is the parsing logic, which relies on detecting the program statement at front:
https://github.com/fortran-lang/fpm/blob/da6d1bf89a241cd87d640b889ab1e570e8be5f35/src/fpm_source_parsing.f90#L335-L355
Instead it should probably rely on the end program statement which is mandatory per the standard. (J3/24-007, 14.1)
I suppose that from the build perspective, a program unit is not very different to an external procedure.
Apparently, @urbanjost already knew about this long time ago: https://github.com/fortran-lang/fpm/issues/820#issuecomment-1373028685
This is a duplicate of https://github.com/fortran-lang/fpm/issues/637.