library_filename Function

public pure function library_filename(package_name, shared, import, target_os) result(name)

Utility function: return library filename

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: package_name
logical, intent(in) :: shared

Whether it’s a shared library

logical, intent(in) :: import

Whether it’s for linking (import library) or actual library

integer, intent(in) :: target_os

Build target OS: one of OS_WINDOWS, OS_MACOS, …

Return Value character(len=:), allocatable


Source Code

    pure function library_filename(package_name, shared, import, target_os) result(name)
        character(*), intent(in) :: package_name    
        !> Whether it's a shared library
        logical, intent(in) :: shared       
        !> Whether it's for linking (import library) or actual library
        logical, intent(in) :: import       
        !> Build target OS: one of OS_WINDOWS, OS_MACOS, ...
        integer, intent(in) :: target_os        

        character(len=:), allocatable :: name

        if (shared) then
            select case (target_os)
            case (OS_WINDOWS)
                if (import) then
                    ! Linking requires the import library
                    name = 'lib' // package_name // '.lib'
                else
                    ! The actual shared object is a DLL
                    name = 'lib' // package_name // '.dll'
                end if
            case (OS_MACOS)
                name = 'lib' // package_name // '.dylib'
            case default
                name = 'lib' // package_name // '.so'
            end select
        else
            ! Static library (same for all platforms)
            name = 'lib' // package_name // '.a'
        end if

    end function library_filename