@@ -11,6 +11,8 @@ function _generate_stripped_bundle(;
1111 key_pair: :@NamedTuple{private:: String , public:: String },
1212 handlers:: Dict ,
1313 multiplexers:: Vector{String} ,
14+ arch:: Union{Symbol,Nothing} = nothing ,
15+ arch_explicit:: Bool = false ,
1416)
1517 output_dir = abspath(output_dir)
1618
@@ -31,6 +33,8 @@ function _generate_stripped_bundle(;
3133 key_pair = key_pair,
3234 handlers = handlers,
3335 multiplexers = multiplexers,
36+ arch = arch,
37+ arch_explicit = arch_explicit,
3438 )
3539
3640 for (k, v) in new_pkg_version_info
@@ -320,6 +324,8 @@ function _process_project_env(;
320324 key_pair: :@NamedTuple{private:: String , public:: String },
321325 handlers:: Dict ,
322326 multiplexers:: Vector{String} ,
327+ arch:: Union{Symbol,Nothing} = nothing ,
328+ arch_explicit:: Bool = false
323329)
324330 project_dir = normpath(project_dir)
325331 output_dir = normpath(output_dir)
@@ -349,7 +355,7 @@ function _process_project_env(;
349355 _sign_file(joinpath(named_environment, " Manifest.toml" ), key_pair. private)
350356 write(joinpath(named_environment, basename(key_pair. public)), read(key_pair. public))
351357
352- package_paths = _sniff_versions(project_dir, multiplexers)
358+ package_paths = _sniff_versions(project_dir, multiplexers, arch )
353359
354360 packagebundler_file = joinpath(project_dir, " PackageBundler.toml" )
355361 packagebundler_toml =
@@ -358,6 +364,16 @@ function _process_project_env(;
358364 julia_version = TOML. parsefile(manifest_toml)[" julia_version" ]
359365 julia_version =
360366 get(get(Dict{String,Any}, packagebundler_toml, " juliaup" ), " channel" , julia_version)
367+ if arch_explicit
368+ packagebundler_toml = merge(packagebundler_toml, Dict(
369+ " juliaup" => Dict(
370+ " channel" => _juliaup_channel(julia_version, arch)
371+ )
372+ ))
373+ open(joinpath(named_environment, " PackageBundler.toml" ), " w" ) do io
374+ TOML. print(io, packagebundler_toml)
375+ end
376+ end
361377
362378 pkg_version_info = Dict()
363379 for (each_uuid, each_name) in stripped
@@ -374,6 +390,7 @@ function _process_project_env(;
374390 key_pair,
375391 handlers,
376392 multiplexers,
393+ arch,
377394 )
378395 versions = get!(Dict{String,Any}, pkg_version_info, each_name)
379396 versions[version_info[" project" ][" version" ]] = version_info
@@ -395,14 +412,14 @@ end
395412# "julia_version" => v"<version>"
396413# ))
397414#
398- function _sniff_versions(environment:: AbstractString , multiplexers)
415+ function _sniff_versions(environment:: AbstractString , multiplexers, arch :: Union{Symbol,Nothing} = nothing )
399416 registries = Dict(
400417 reg. uuid => _process_reg_info_uuid_mapping(reg) for
401418 reg in Pkg. Registry. reachable_registries()
402419 )
403420 project = Base. env_project_file(environment)
404421 env = Pkg. Types. EnvCache(project)
405- stdlib_path = _get_stdlib_path(env, environment, multiplexers)
422+ stdlib_path = _get_stdlib_path(env, environment, multiplexers, arch )
406423 output = Dict{String,Dict{String,Any}}()
407424 for (uuid, entry) in env. manifest. deps
408425 name = " $(entry. name) "
@@ -455,13 +472,13 @@ function _sniff_versions(environment::AbstractString, multiplexers)
455472 return output
456473end
457474
458- function _get_stdlib_path(env, environment, multiplexers)
475+ function _get_stdlib_path(env, environment, multiplexers, arch :: Union{Symbol,Nothing} = nothing )
459476 toml_file = joinpath(environment, " PackageBundler.toml" )
460477 toml = isfile(toml_file) ? TOML. parsefile(toml_file) : Dict()
461478 juliaup = get(Dict, toml, " juliaup" )
462479 channel = get(juliaup, " channel" , nothing )
463480 version = something(channel, env. manifest. julia_version)
464- julia_bin = _process_multiplexers(multiplexers, version)
481+ julia_bin = _process_multiplexers(multiplexers, version, arch )
465482 return read(
466483 ` $julia_bin --startup-file=no -e 'import Pkg; print(Pkg.stdlib_dir())'` ,
467484 String,
@@ -575,8 +592,9 @@ function _strip_package(
575592 key_pair: :@NamedTuple{private:: String , public:: String },
576593 handlers:: Dict ,
577594 multiplexers:: Vector{String} ,
595+ arch:: Union{Symbol,Nothing} = nothing ,
578596)
579- @info " Stripping source code." julia_version package
597+ @info " Stripping source code." Sys . ARCH arch julia_version package
580598
581599 package = abspath(package)
582600 output = abspath(output)
@@ -695,7 +713,7 @@ function _strip_package(
695713 )
696714 end
697715 script = joinpath(@__DIR__, " serializer.jl" )
698- binary = _process_multiplexers(multiplexers, julia_version)
716+ binary = _process_multiplexers(multiplexers, julia_version, arch )
699717 run(` $(binary) --startup-file=no $(script) $(toml_file) ` )
700718 finally
701719 rm(toml_file; force = true )
@@ -744,12 +762,13 @@ end
744762function _process_multiplexers(
745763 multiplexers:: Vector{String} ,
746764 julia_version:: Union{String,VersionNumber} ,
765+ arch:: Union{Symbol,Nothing} = nothing ,
747766)
748767 for multiplexer in multiplexers
749768 exists = Sys. which(multiplexer)
750769 if ! isnothing(exists)
751770 if multiplexer == " juliaup"
752- return ` julia +$(julia_version) `
771+ return ` julia +$(_juliaup_channel( julia_version, arch) ) `
753772 elseif multiplexer == " asdf"
754773 return withenv(" ASDF_JULIA_VERSION" => " $(julia_version) " ) do
755774 path = readchomp(` asdf which julia` )
@@ -771,3 +790,12 @@ function _process_multiplexers(
771790 error(" no multiplexers found: $(repr(multiplexers)) " )
772791 end
773792end
793+
794+ function _juliaup_channel(julia_version:: Union{String,VersionNumber} , arch:: Union{Symbol,Nothing} = nothing )
795+ if isnothing(arch)
796+ return julia_version
797+ end
798+
799+ juliaup_arch = if arch == :i686; :x86; elseif arch == :x86_64; :x64; else arch; end
800+ return " $(julia_version) ~$juliaup_arch "
801+ end
0 commit comments