diff --git a/Project.toml b/Project.toml index c58e0d3..5a8282e 100644 --- a/Project.toml +++ b/Project.toml @@ -1,15 +1,13 @@ name = "FMIImport" uuid = "9fcbc62e-52a0-44e9-a616-1359a0008194" authors = ["TT ", "LM ", "JK "] -version = "1.0.1" +version = "1.0.2" [deps] Downloads = "f43a241f-c20a-4ad4-852c-f6b1247861c6" FMIBase = "900ee838-d029-460e-b485-d98a826ceef2" Libdl = "8f399da3-3557-5675-b5ff-fb832c97cbdb" -PackageExtensionCompat = "65ce6f38-6b18-4e1d-a461-8949797d7930" RelocatableFolders = "05181044-ff0b-4ac5-8273-598c1e38db00" -Requires = "ae029012-a4dd-5104-9daa-d747884805df" [weakdeps] FMIZoo = "724179cf-c260-40a9-bd27-cccc6fe2f195" @@ -21,7 +19,5 @@ FMIZooExt = ["FMIZoo"] Downloads = "1" FMIBase = "1.0.0" Libdl = "1" -PackageExtensionCompat = "1.0.0" RelocatableFolders = "1" -Requires = "1.3.0" -julia = "1.6" +julia = "1.6" \ No newline at end of file diff --git a/src/FMI2/ext.jl b/src/FMI2/ext.jl index 87c4b49..b74620e 100644 --- a/src/FMI2/ext.jl +++ b/src/FMI2/ext.jl @@ -175,23 +175,23 @@ function loadPointers(fmu::FMU2) fmu.cSetInteger = dlsym(fmu.libHandle, :fmi2SetInteger) fmu.cGetBoolean = dlsym(fmu.libHandle, :fmi2GetBoolean) fmu.cSetBoolean = dlsym(fmu.libHandle, :fmi2SetBoolean) - fmu.cGetString = dlsym_opt(fmu.libHandle, :fmi2GetString) - fmu.cSetString = dlsym_opt(fmu.libHandle, :fmi2SetString) + fmu.cGetString = dlsym_opt(fmu, fmu.libHandle, :fmi2GetString) + fmu.cSetString = dlsym_opt(fmu, fmu.libHandle, :fmi2SetString) if canGetSetFMUState(fmu.modelDescription) - fmu.cGetFMUstate = dlsym_opt(fmu.libHandle, :fmi2GetFMUstate) - fmu.cSetFMUstate = dlsym_opt(fmu.libHandle, :fmi2SetFMUstate) - fmu.cFreeFMUstate = dlsym_opt(fmu.libHandle, :fmi2FreeFMUstate) + fmu.cGetFMUstate = dlsym_opt(fmu, fmu.libHandle, :fmi2GetFMUstate) + fmu.cSetFMUstate = dlsym_opt(fmu, fmu.libHandle, :fmi2SetFMUstate) + fmu.cFreeFMUstate = dlsym_opt(fmu, fmu.libHandle, :fmi2FreeFMUstate) end if canSerializeFMUState(fmu.modelDescription) - fmu.cSerializedFMUstateSize = dlsym_opt(fmu.libHandle, :fmi2SerializedFMUstateSize) - fmu.cSerializeFMUstate = dlsym_opt(fmu.libHandle, :fmi2SerializeFMUstate) - fmu.cDeSerializeFMUstate = dlsym_opt(fmu.libHandle, :fmi2DeSerializeFMUstate) + fmu.cSerializedFMUstateSize = dlsym_opt(fmu, fmu.libHandle, :fmi2SerializedFMUstateSize) + fmu.cSerializeFMUstate = dlsym_opt(fmu, fmu.libHandle, :fmi2SerializeFMUstate) + fmu.cDeSerializeFMUstate = dlsym_opt(fmu, fmu.libHandle, :fmi2DeSerializeFMUstate) end if providesDirectionalDerivatives(fmu.modelDescription) - fmu.cGetDirectionalDerivative = dlsym_opt(fmu.libHandle, :fmi2GetDirectionalDerivative) + fmu.cGetDirectionalDerivative = dlsym_opt(fmu, fmu.libHandle, :fmi2GetDirectionalDerivative) end # CS specific function calls diff --git a/src/FMI3/ext.jl b/src/FMI3/ext.jl index e6dbe4c..fe87dfb 100644 --- a/src/FMI3/ext.jl +++ b/src/FMI3/ext.jl @@ -187,29 +187,29 @@ function loadPointers(fmu::FMU3) fmu.cGetBoolean = dlsym(fmu.libHandle, :fmi3GetBoolean) fmu.cSetBoolean = dlsym(fmu.libHandle, :fmi3SetBoolean) - fmu.cGetString = dlsym_opt(fmu.libHandle, :fmi3GetString) - fmu.cSetString = dlsym_opt(fmu.libHandle, :fmi3SetString) - fmu.cGetBinary = dlsym_opt(fmu.libHandle, :fmi3GetBinary) - fmu.cSetBinary = dlsym_opt(fmu.libHandle, :fmi3SetBinary) + fmu.cGetString = dlsym_opt(fmu, fmu.libHandle, :fmi3GetString) + fmu.cSetString = dlsym_opt(fmu, fmu.libHandle, :fmi3SetString) + fmu.cGetBinary = dlsym_opt(fmu, fmu.libHandle, :fmi3GetBinary) + fmu.cSetBinary = dlsym_opt(fmu, fmu.libHandle, :fmi3SetBinary) if canGetSetFMUState(fmu) - fmu.cGetFMUState = dlsym_opt(fmu.libHandle, :fmi3GetFMUState) - fmu.cSetFMUState = dlsym_opt(fmu.libHandle, :fmi3SetFMUState) - fmu.cFreeFMUState = dlsym_opt(fmu.libHandle, :fmi3FreeFMUState) + fmu.cGetFMUState = dlsym_opt(fmu, fmu.libHandle, :fmi3GetFMUState) + fmu.cSetFMUState = dlsym_opt(fmu, fmu.libHandle, :fmi3SetFMUState) + fmu.cFreeFMUState = dlsym_opt(fmu, fmu.libHandle, :fmi3FreeFMUState) end if canSerializeFMUState(fmu) - fmu.cSerializedFMUStateSize = dlsym_opt(fmu.libHandle, :fmi3SerializedFMUStateSize) - fmu.cSerializeFMUState = dlsym_opt(fmu.libHandle, :fmi3SerializeFMUState) - fmu.cDeSerializeFMUState = dlsym_opt(fmu.libHandle, :fmi3DeserializeFMUState) + fmu.cSerializedFMUStateSize = dlsym_opt(fmu, fmu.libHandle, :fmi3SerializedFMUStateSize) + fmu.cSerializeFMUState = dlsym_opt(fmu, fmu.libHandle, :fmi3SerializeFMUState) + fmu.cDeSerializeFMUState = dlsym_opt(fmu, fmu.libHandle, :fmi3DeserializeFMUState) end if providesDirectionalDerivatives(fmu) - fmu.cGetDirectionalDerivative = dlsym_opt(fmu.libHandle, :fmi3GetDirectionalDerivative) + fmu.cGetDirectionalDerivative = dlsym_opt(fmu, fmu.libHandle, :fmi3GetDirectionalDerivative) end if providesAdjointDerivatives(fmu) - fmu.cGetAdjointDerivative = dlsym_opt(fmu.libHandle, :fmi3GetAdjointDerivative) + fmu.cGetAdjointDerivative = dlsym_opt(fmu, fmu.libHandle, :fmi3GetAdjointDerivative) end # CS specific function calls diff --git a/src/FMIImport.jl b/src/FMIImport.jl index 72a4ab6..5e21755 100644 --- a/src/FMIImport.jl +++ b/src/FMIImport.jl @@ -40,8 +40,8 @@ include("FMI3/ext.jl") include("FMI3/md.jl") # extensions -using Requires -using PackageExtensionCompat +using FMIBase.Requires +using FMIBase.PackageExtensionCompat function __init__() @require_extensions end diff --git a/src/binary.jl b/src/binary.jl index 186e5d9..1d6b922 100644 --- a/src/binary.jl +++ b/src/binary.jl @@ -5,13 +5,26 @@ using FMIBase.EzXML -function dlsym_opt(libHandle, symbol) +""" + dlsym_opt(fmu, libHandle, symbol) + +The same as `dlsym(libHandle, symbol)`, but returns - `Ptr{Cvoid}(C_NULL)` if the symbol `symbol` is not available. + +# Arguments +- `fmu`: The FMU to log a info message if not available. +- `libHandle`: The library handle, see `dlsym`. +- `symbol`: The library symbol, see `dlsym`. + +# Returns +Library symbol if available, else `Ptr{Cvoid}(C_NULL)`. +""" +function dlsym_opt(fmu, libHandle, symbol) addr = dlsym(libHandle, symbol; throw_error=false) - if addr == nothing - logWarning(fmu, "This FMU does not support function '$symbol'.") + if isnothing(addr) + logInfo(fmu, "This FMU does not support the optional function '$symbol'.") addr = Ptr{Cvoid}(C_NULL) end - addr + return addr end """