enumerate_libraries Function

public function enumerate_libraries(self, prefix, libs) result(r)

Enumerate libraries, based on compiler and platform

Type Bound

compiler_t

Arguments

Type IntentOptional Attributes Name
class(compiler_t), intent(in) :: self
character(len=*), intent(in) :: prefix
type(string_t), intent(in) :: libs(:)

Return Value character(len=:), allocatable


Variables

Type Visibility Attributes Name Initial
character(len=:), public, allocatable :: joined

Source Code

function enumerate_libraries(self, prefix, libs) result(r)
    class(compiler_t), intent(in) :: self
    character(len=*), intent(in) :: prefix
    type(string_t), intent(in) :: libs(:)
    character(len=:), allocatable :: r

    character(len=:), allocatable :: joined

    if (size(libs) == 0) then
        r = prefix
        return
    end if

    select case (self%id)

    case (id_intel_classic_windows, id_intel_llvm_windows)
        ! Windows Intel uses `.lib` files directly
        joined = string_cat(libs, ".lib ") // ".lib"
        r = trim(prefix) // " " // trim(joined)

    case (id_nag, id_ibmxl)
        ! NAG and IBMXL need -Wl, wrapper around linker flags
        joined = string_cat(libs, " -Wl,")
        r = trim(prefix) // " -Wl," // trim(joined)

    case default
        ! Generic Unix-style linker flags: use `-lfoo`
        joined = string_cat(libs, " -l")
        r = trim(prefix) // " -l" // trim(joined)

    end select

end function enumerate_libraries