Skip to content

Commit cc1292c

Browse files
authored
Store version info at compile time (#115)
* Store version info at compile time * Fix code order * Hopefully fix versioninfo in case LibTrixi is the active project
1 parent 974f990 commit cc1292c

2 files changed

Lines changed: 53 additions & 30 deletions

File tree

LibTrixi.jl/src/LibTrixi.jl

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,53 @@ export SimulationState, store_simstate, load_simstate, delete_simstate!
6363

6464

6565
# global storage of name and version information of loaded packages
66-
const _version_info = Ref("")
67-
const _version_info_extended = Ref("")
68-
const _version_libtrixi = Ref("")
66+
function assemble_version_info(; filter_expr = identity, include_julia = true)
67+
packages = Pkg.dependencies() |> values |> collect |> filter_expr
68+
versions = String[]
69+
found_libtrixi = false
70+
for p in packages
71+
if isnothing(p.version)
72+
push!(versions, p.name * " n/a")
73+
else
74+
push!(versions, p.name * " " * string(p.version))
75+
end
76+
if p.name == "LibTrixi"
77+
found_libtrixi = true
78+
end
79+
end
80+
81+
# When running Julia with the LibTrixi package dir as the active project,
82+
# Pkg.dependencies() will not return LibTrixi itself, which is remedied here
83+
if !found_libtrixi && Pkg.project().name == "LibTrixi"
84+
push!(versions, "LibTrixi " * string(Pkg.project().version))
85+
end
86+
87+
sort!(versions)
88+
89+
# Add Julia version
90+
if include_julia
91+
push!(versions, "julia " * string(VERSION))
92+
end
93+
94+
return join(versions, "\n")
95+
end
96+
97+
const _version_info = assemble_version_info(filter_expr = filter(p -> p.is_direct_dep))
98+
const _version_info_extended = assemble_version_info()
99+
const _version_libtrixi = begin
100+
libtrixi_string = assemble_version_info(filter_expr = filter(p -> p.name == "LibTrixi"),
101+
include_julia = false)
102+
103+
# When running Julia with the LibTrixi package dir as the active project,
104+
# Pkg.dependencies() will not return LibTrixi itself, which is remedied here
105+
if isempty(libtrixi_string)
106+
version_string = string(Pkg.project().version)
107+
else
108+
version_string = split(libtrixi_string, " ")[2]
109+
end
110+
111+
version_string
112+
end
69113

70114

71115
include("simulationstate.jl")
@@ -87,21 +131,6 @@ function show_debug_output()
87131
end
88132

89133

90-
function assemble_version_info(; filter_expr = identity)
91-
packages = Pkg.dependencies() |> values |> collect |> filter_expr
92-
versions = String[]
93-
for p in sort(packages, by=x->x.name)
94-
if isnothing(p.version)
95-
push!(versions, p.name * " n/a")
96-
else
97-
push!(versions, p.name * " " * string(p.version))
98-
end
99-
end
100-
push!(versions, "julia " * string(VERSION))
101-
join(versions, "\n")
102-
end
103-
104-
105134
function __init__()
106135
# MPI could have been initialized by an external application.
107136
# In this situation MPI.jl's MPI.Init is not called and leaves some package-internal
@@ -111,12 +140,6 @@ function __init__()
111140
if show_debug_output()
112141
MPI.set_default_error_handler_return()
113142
end
114-
115-
# assemble packages information
116-
_version_info[] = assemble_version_info(filter_expr = filter(p -> p.is_direct_dep))
117-
_version_info_extended[] = assemble_version_info()
118-
libtrixi_string = assemble_version_info(filter_expr = filter(p -> p.name == "LibTrixi"))
119-
_version_libtrixi[] = split(split(libtrixi_string, "\n")[1], " ")[2]
120143
end
121144

122145
end # module LibTrixi

LibTrixi.jl/src/api_c.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ This function is thread-safe. It must be run after `trixi_initialize` has been c
1212
function trixi_version_library_major end
1313

1414
Base.@ccallable function trixi_version_library_major()::Cint
15-
return VersionNumber(_version_libtrixi[]).major
15+
return VersionNumber(_version_libtrixi).major
1616
end
1717

1818
trixi_version_library_major_cfptr() = @cfunction(trixi_version_library_major, Cint, ())
@@ -28,7 +28,7 @@ This function is thread-safe. It must be run after `trixi_initialize` has been c
2828
function trixi_version_library_minor end
2929

3030
Base.@ccallable function trixi_version_library_minor()::Cint
31-
return VersionNumber(_version_libtrixi[]).minor
31+
return VersionNumber(_version_libtrixi).minor
3232
end
3333

3434
trixi_version_library_minor_cfptr() = @cfunction(trixi_version_library_minor, Cint, ())
@@ -44,7 +44,7 @@ This function is thread-safe. It must be run after `trixi_initialize` has been c
4444
function trixi_version_library_patch end
4545

4646
Base.@ccallable function trixi_version_library_patch()::Cint
47-
return VersionNumber(_version_libtrixi[]).patch
47+
return VersionNumber(_version_libtrixi).patch
4848
end
4949

5050
trixi_version_library_patch_cfptr() = @cfunction(trixi_version_library_patch, Cint, ())
@@ -67,7 +67,7 @@ This function is thread-safe. It must be run after `trixi_initialize` has been c
6767
function trixi_version_library end
6868

6969
Base.@ccallable function trixi_version_library()::Cstring
70-
return pointer(_version_libtrixi[])
70+
return pointer(_version_libtrixi)
7171
end
7272

7373
trixi_version_library_cfptr() = @cfunction(trixi_version_library, Cstring, ())
@@ -89,7 +89,7 @@ This function is thread-safe. It must be run after `trixi_initialize` has been c
8989
function trixi_version_julia end
9090

9191
Base.@ccallable function trixi_version_julia()::Cstring
92-
return pointer(_version_info[])
92+
return pointer(_version_info)
9393
end
9494

9595
trixi_version_julia_cfptr() = @cfunction(trixi_version_julia, Cstring, ())
@@ -112,7 +112,7 @@ This function is thread-safe. It must be run after `trixi_initialize` has been c
112112
function trixi_version_julia_extended end
113113

114114
Base.@ccallable function trixi_version_julia_extended()::Cstring
115-
return pointer(_version_info_extended[])
115+
return pointer(_version_info_extended)
116116
end
117117

118118
trixi_version_julia_extended_cfptr() = @cfunction(trixi_version_julia_extended, Cstring, ())

0 commit comments

Comments
 (0)