diff --git a/Project.toml b/Project.toml index 2c3ab1789..79d2d6fe0 100644 --- a/Project.toml +++ b/Project.toml @@ -17,6 +17,7 @@ Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316" LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" Measures = "442fdcdd-2543-5da2-b0f3-8c86c306513e" NaNMath = "77ba4419-2d1f-58cd-9bb1-8ffee604a2e3" +Pkg = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" PlotThemes = "ccf2f8ad-2431-5c83-bf29-c5338b663b6a" PlotUtils = "995b91a9-d308-5afd-9ec6-746e21dbc043" Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7" @@ -45,11 +46,11 @@ JSON = "0.21, 1" Latexify = "0.14 - 0.15" Measures = "0.3" NaNMath = "0.3, 1" +PGFPlotsX = "1" PlotThemes = "2" PlotUtils = "1" PlotlyBase = "0.7" PlotlyJS = "0.18" -PGFPlotsX = "1" PyPlot = "2" RecipesBase = "1.2" RecipesPipeline = "0.5" diff --git a/src/Plots.jl b/src/Plots.jl index 5717a37ed..3d499645b 100644 --- a/src/Plots.jl +++ b/src/Plots.jl @@ -1,5 +1,7 @@ module Plots +using Pkg + if isdefined(Base, :Experimental) && isdefined(Base.Experimental, Symbol("@optlevel")) @eval Base.Experimental.@optlevel 1 end @@ -7,17 +9,26 @@ if isdefined(Base, :Experimental) && isdefined(Base.Experimental, Symbol("@max_m @eval Base.Experimental.@max_methods 1 end -const _current_plots_version = VersionNumber( - split( - first( - filter( - line -> occursin("version", line), - readlines(normpath(@__DIR__, "..", "Project.toml")), - ), - ), - "\"", - )[2], -) +const _plots_project = Pkg.Types.read_project(normpath(@__DIR__, "..", "Project.toml")) +const _current_plots_version = _plots_project.version +const _plots_compats = _plots_project.compat +function _check_compat(sim::Module) + sim_str = string(sim) + if !haskey(_plots_compats, sim_str) + return nothing + end + be_v = Pkg.Types.read_project(joinpath(Base.pkgdir(sim), "Project.toml")).version + be_c = _plots_compats[sim_str] + if be_c isa String # julia 1.6 + if be_v in Pkg.Types.semver_spec(be_c) + @warn "$sim $be_v is not compatible with this version of Plots. The declared compatibility is $(be_c)." + end + else + if isempty(intersect(be_v, be_c.val)) + @warn "$sim $be_v is not compatible with this version of Plots. The declared compatibility is $(be_c.str)." + end + end +end using Reexport diff --git a/src/backends.jl b/src/backends.jl index e426cda07..59325bfb0 100644 --- a/src/backends.jl +++ b/src/backends.jl @@ -300,11 +300,23 @@ function _initialize_backend(pkg::AbstractBackend) @eval Main begin import $sym export $sym + Plots._check_compat($sym) end end _initialize_backend(pkg::GRBackend) = nothing +function _initialize_backend(pkg::PlotlyBackend) + try + @eval Main begin + import PlotlyBase + end + _check_compat(PlotlyBase) + catch + @info "For saving to png with the Plotly backend PlotlyBase has to be installed." + end +end + # ------------------------------------------------------------------------------ # gr @@ -423,16 +435,6 @@ is_marker_supported(::GRBackend, shape::Shape) = true # ------------------------------------------------------------------------------ # plotly -function _initialize_backend(pkg::PlotlyBackend) - try - @eval Main begin - import PlotlyBase - end - catch - @info "For saving to png with the Plotly backend PlotlyBase has to be installed." - end -end - const _plotly_attr = merge_with_base_supported([ :annotations, :legend_background_color,