-
Notifications
You must be signed in to change notification settings - Fork 104
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: ability to read project major, minor & patch macros #766
base: main
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
name = "version_test" | ||
version = "0.1.2" | ||
|
||
[preprocess] | ||
[preprocess.cpp] |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
module version_test | ||
implicit none | ||
private | ||
|
||
public :: say_hello | ||
contains | ||
subroutine say_hello | ||
print *, "Hello, version_test!" | ||
#if PROJECT_VERSION_MAJOR != 0 | ||
This breaks the build. | ||
#endif | ||
|
||
#if PROJECT_VERSION_MINOR != 1 | ||
This breaks the build. | ||
#endif | ||
|
||
#if PROJECT_VERSION_PATCH != 2 | ||
This breaks the build. | ||
#endif | ||
|
||
end subroutine say_hello | ||
end module version_test |
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -44,7 +44,7 @@ module fpm_compiler | |||||
use fpm_manifest, only : package_config_t | ||||||
use fpm_error, only: error_t | ||||||
implicit none | ||||||
public :: compiler_t, new_compiler, archiver_t, new_archiver, get_macros | ||||||
public :: compiler_t, new_compiler, archiver_t, new_archiver, get_macros, get_version_macros | ||||||
public :: debug | ||||||
|
||||||
enum, bind(C) | ||||||
|
@@ -432,6 +432,48 @@ subroutine set_preprocessor_flags (id, flags, package) | |||||
|
||||||
end subroutine set_preprocessor_flags | ||||||
|
||||||
!> Extracts the PROJECT_VERSION_MAJOR, PROJECT_VERSION_MINOR & PROJECT_VERSION_PATCH macros. | ||||||
function get_version_macros(id, version) result(version_macros) | ||||||
!> Compiler id. | ||||||
integer(compiler_enum), intent(in) :: id | ||||||
|
||||||
!> Version number of the target. | ||||||
character(len=:), allocatable, intent(in) :: version | ||||||
|
||||||
character(len=:), allocatable :: version_macros | ||||||
character(len=:), allocatable :: macro_definition_symbol | ||||||
character(:), allocatable :: version_parts(:) | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||
integer :: i | ||||||
|
||||||
!> Set macro defintion symbol on the basis of compiler used | ||||||
select case(id) | ||||||
case default | ||||||
macro_definition_symbol = "-D" | ||||||
case (id_intel_classic_windows, id_intel_llvm_windows) | ||||||
macro_definition_symbol = "/D" | ||||||
end select | ||||||
|
||||||
!> Check if version macros are not allocated. | ||||||
if (.not.allocated(version_macros)) then | ||||||
version_macros = " " | ||||||
end if | ||||||
|
||||||
|
||||||
!> Extract the Major, Minor & Patch number from Version Number. | ||||||
call split(version, version_parts, delimiters='.') | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There is a There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Hi @awvwgk , Sorry for getting late on this one. I used |
||||||
|
||||||
do i = 1, size(version_parts) | ||||||
if (i == 1) then | ||||||
version_macros = version_macros//macro_definition_symbol//'PROJECT_VERSION_MAJOR'//'='//version_parts(i) | ||||||
else if (i == 2) then | ||||||
version_macros = version_macros//' '//macro_definition_symbol//'PROJECT_VERSION_MINOR'//'='//version_parts(i) | ||||||
else if (i == 3) then | ||||||
version_macros = version_macros//' '//macro_definition_symbol//'PROJECT_VERSION_PATCH'//'='//version_parts(i) | ||||||
end if | ||||||
end do | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Should those be set automatically or in a similar way as the |
||||||
|
||||||
end function get_version_macros | ||||||
|
||||||
!> This function will parse and read the macros list and | ||||||
!> return them as defined flags. | ||||||
function get_macros(id, macros_list, version) result(macros) | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why is
version
allocatable
in the same time asintent(in)
?