From ee1ed07ba16d537962a4e4999dd7c21a2878627d Mon Sep 17 00:00:00 2001 From: cdacosta Date: Wed, 22 Aug 2018 19:06:54 -0300 Subject: [PATCH 1/2] Ready for Julia 0.7 and 1.0 --- api/julia/m8r.jl | 86 ++++++++++++++++++-------------------- api/julia/test/afdm.jl | 20 ++++----- api/julia/test/clip.jl | 12 +++--- api/julia/test/runtests.jl | 42 +++++++++---------- framework/setenv.py | 12 ++++-- 5 files changed, 86 insertions(+), 86 deletions(-) mode change 100644 => 100755 api/julia/test/clip.jl diff --git a/api/julia/m8r.jl b/api/julia/m8r.jl index 0dd7fd0cc7..b328e5e072 100644 --- a/api/julia/m8r.jl +++ b/api/julia/m8r.jl @@ -1,4 +1,3 @@ -__precompile__() """ m8r.jl @@ -62,7 +61,7 @@ function __init__() else append!(argv,ARGS) end - ccall((:sf_init,"libdrsf"),Void,(Int32,Ptr{Ptr{UInt8}}),length(argv),argv) + ccall((:sf_init,"libdrsf"),Cvoid,(Int32,Ptr{Ptr{UInt8}}),length(argv),argv) end function input(tag::String; temp=false) @@ -93,7 +92,7 @@ function esize(file::RSFFile) end function setformat(file::RSFFile,format::String) - ccall((:sf_setformat,"libdrsf"),Void,(Ptr{UInt8},Ptr{UInt8}),file.rsf,format) + ccall((:sf_setformat,"libdrsf"),Cvoid,(Ptr{UInt8},Ptr{UInt8}),file.rsf,format) end function histint(file::RSFFile,name::String) @@ -153,80 +152,80 @@ end function ucharread(arr::Array{UInt8,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_ucharread,"libdrsf"),Void,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_ucharread,"libdrsf"),Cvoid,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function charread(arr::Array{UInt8,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_charread,"libdrsf"),Void,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_charread,"libdrsf"),Cvoid,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function intread(arr::Array{Int32,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_intread,"libdrsf"),Void,(Ptr{Cint},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_intread,"libdrsf"),Cvoid,(Ptr{Cint},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function floatread(arr::Array{Float32,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_floatread,"libdrsf"),Void,(Ptr{Cfloat},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_floatread,"libdrsf"),Cvoid,(Ptr{Cfloat},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end -function complexread(arr::Array{Complex64,1},size::Integer,file::RSFFile) +function complexread(arr::Array{ComplexF32,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_complexread,"libdrsf"),Void,(Ptr{Complex64},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_complexread,"libdrsf"),Cvoid,(Ptr{ComplexF32},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function shortread(arr::Array{Int16,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_shortread,"libdrsf"),Void,(Ptr{Cshort},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_shortread,"libdrsf"),Cvoid,(Ptr{Cshort},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function ucharwrite(arr::Array{UInt8,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_ucharwrite,"libdrsf"),Void,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_ucharwrite,"libdrsf"),Cvoid,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function charwrite(arr::Array{UInt8,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_charwrite,"libdrsf"),Void,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_charwrite,"libdrsf"),Cvoid,(Ptr{UInt8},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function intwrite(arr::Array{Int32,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_intwrite,"libdrsf"),Void,(Ptr{Cint},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_intwrite,"libdrsf"),Cvoid,(Ptr{Cint},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function floatwrite(arr::Array{Float32,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_floatwrite,"libdrsf"),Void,(Ptr{Cfloat},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_floatwrite,"libdrsf"),Cvoid,(Ptr{Cfloat},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end -function complexwrite(arr::Array{Complex64,1},size::Integer,file::RSFFile) +function complexwrite(arr::Array{ComplexF32,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_complexwrite,"libdrsf"),Void,(Ptr{Complex64},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_complexwrite,"libdrsf"),Cvoid,(Ptr{ComplexF32},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function shortwrite(arr::Array{Int16,1},size::Integer,file::RSFFile) size::Csize_t = size - ccall((:sf_complexwrite,"libdrsf"),Void,(Ptr{Cshort},Csize_t,Ptr{UInt8}),arr,size,file.rsf) + ccall((:sf_complexwrite,"libdrsf"),Cvoid,(Ptr{Cshort},Csize_t,Ptr{UInt8}),arr,size,file.rsf) end function putint(file::RSFFile,name::String,val::Integer) val::Cint = val - ccall((:sf_putint,"libdrsf"),Void,(Ptr{UInt8},Ptr{UInt8},Cint),file.rsf,name,val) + ccall((:sf_putint,"libdrsf"),Cvoid,(Ptr{UInt8},Ptr{UInt8},Cint),file.rsf,name,val) end function putfloat(file::RSFFile,name::String,val::Real) val::Cfloat = val - ccall((:sf_putfloat,"libdrsf"),Void,(Ptr{UInt8},Ptr{UInt8},Cfloat),file.rsf,name,val) + ccall((:sf_putfloat,"libdrsf"),Cvoid,(Ptr{UInt8},Ptr{UInt8},Cfloat),file.rsf,name,val) end function putstring(file::RSFFile,name::String,val::String) - ccall((:sf_putstring,"libdrsf"),Void,(Ptr{UInt8},Ptr{UInt8},Ptr{UInt8}),file.rsf,name,val) + ccall((:sf_putstring,"libdrsf"),Cvoid,(Ptr{UInt8},Ptr{UInt8},Ptr{UInt8}),file.rsf,name,val) end function close(file::RSFFile) - ccall((:sf_fileclose,"libdrsf"), Void, (Ptr{UInt8},), file.rsf) + ccall((:sf_fileclose,"libdrsf"), Cvoid, (Ptr{UInt8},), file.rsf) end """ @@ -289,7 +288,7 @@ function rsf_read(file::RSFFile; headers_only::Bool=false) UInt8, # SF_CHAR Int32, # SF_INT Float32, # SF_FLOAT - Complex64, # SF_COMPLEX + ComplexF32, # SF_COMPLEX Int16, # SF_SHORT Float64, # SF_DOUBLE Clong, # SF_LONG (UNIX: Int, Windows: Int32) @@ -302,10 +301,10 @@ function rsf_read(file::RSFFile; headers_only::Bool=false) l = String[] u = String[] for i in 1:length(n) - append!(d, [histfloat(file, "d"*dec(i))]) - append!(o, [histfloat(file, "o"*dec(i))]) - append!(l, [histstring(file, "label"*dec(i))]) - append!(u, [histstring(file, "unit"*dec(i))]) + append!(d, [histfloat(file, "d"*string(i))]) + append!(o, [histfloat(file, "o"*string(i))]) + append!(l, [histstring(file, "label"*string(i))]) + append!(u, [histstring(file, "unit"*string(i))]) end if headers_only @@ -341,10 +340,10 @@ end rsf_read(name::String; headers_only::Bool=false) = rsf_read(input(name); headers_only=headers_only) -function rsf_read(stdin::NTuple{2, Base.PipeEndpoint}; headers_only::Bool=false) - rin, win = stdin +function rsf_read(my_stdin::NTuple{2, Base.PipeEndpoint}; headers_only::Bool=false) + rin, win = my_stdin flush(win) - old_stdin = STDIN + old_stdin = stdin redirect_stdin(rin) data = rsf_read("in"; headers_only=headers_only) redirect_stdin(old_stdin) @@ -364,10 +363,6 @@ In this case, the file is temporary with name `temp_tag`. In all methods, `n`, `d`, `o`, `label`, and `unit` are optional. If given, they should be of type `AbstractArray`. -Finally, one may write from a pipe to a file with: - - rsf_write(file::String, stdin::NTuple{2, Base.PipeEndpoint}) - !!! warning "Writing to file handles" Do *not* supply the file as an `m8r.RSFFile` type unless you know exactly what @@ -446,7 +441,7 @@ function rsf_write(file::RSFFile, dat::AbstractArray, n=nothing, d=nothing, elseif eltype(dat) <: AbstractFloat floatwrite(Array{Float32}(vec(dat)), leftsize(file, 0), file) elseif eltype(dat) <: Complex - complexwrite(Array{Complex64}(vec(dat)), leftsize(file, 0), file) + complexwrite(Array{ComplexF32}(vec(dat)), leftsize(file, 0), file) elseif eltype(dat) <: Int16 shortwrite(Array{Int16}(vec(dat)), leftsize(file, 0), file) elseif eltype(dat) <: Integer @@ -462,7 +457,7 @@ function rsf_write(name::String, dat::AbstractArray, n=nothing, d=nothing, # Madagascar's output function inherits the type of the previous input. # Therefore, in order to have the correct output type, one must create a # dummy input of the correct type. - old_stdin = STDIN + old_stdin = stdin (rin, win) = redirect_stdin() spike = joinpath(RSFROOT, "bin", "sfspike") if eltype(dat) <: Int16 @@ -477,7 +472,7 @@ function rsf_write(name::String, dat::AbstractArray, n=nothing, d=nothing, else pipe = `$spike n1=1 out=stdout` end - Base.wait(spawn(pipeline(pipe, stdout=win))) + Base.wait(run(pipeline(pipe, stdout=win), wait=false)) redirect_stdin(old_stdin) rsf_read((rin, win)) @@ -496,7 +491,7 @@ rsf_write(dat::AbstractArray; n=nothing, d=nothing, o=nothing, l=nothing, function rsf_write(file::RSFFile, tag::String) sfmv = joinpath(m8r.RSFROOT, "bin", "sfmv") fname = String[file.tag, tag] - Base.wait(spawn(`$sfmv $fname`)) + run(`$sfmv $fname`) end function rsf_write(tag::String, file::RSFFile) return rsf_write(file, tag) @@ -518,7 +513,7 @@ end function delete_rsf(tag::String) sfrm = joinpath(m8r.RSFROOT, "bin", "sfrm") fname = String[tag] - return spawn(`$sfrm $fname`) + return run(`$sfrm $fname`, wait=false) end function temporary_rsf() @@ -534,7 +529,6 @@ end if RSFROOT ≠ nothing progs = filter(x -> startswith(x, "sf"), readdir(joinpath(RSFROOT, "bin"))) - #progs = ["sfwindow", "sfspike"] for (F, S) = [ (Symbol(p), p) for p in progs ] @eval export $F @eval begin @@ -542,13 +536,13 @@ if RSFROOT ≠ nothing manfile = joinpath(m8r.RSFROOT, "share", "man", "man1", progname*".1") if isfile(manfile) - old_stdout = STDOUT + old_stdout = stdout (rout, wout) = redirect_stdout() - run(pipeline(`man $manfile`, stdout=wout, stdin=DevNull, - stderr=DevNull)) + run(pipeline(`man $manfile`, stdout=wout, stdin=devnull, + stderr=devnull)) Base.close(wout) - manpage = convert(String, readavailable(rout)) - manpage = replace(manpage, "\n", "\n\t") + manpage = String(readavailable(rout)) + manpage = replace(manpage, "\n" => "\n\t") manpage = "\n# RSF Documentation\n"*manpage Base.close(rout) redirect_stdout(old_stdout) @@ -572,7 +566,7 @@ $manpage""" args = process_args(;kwargs...) progpath = joinpath(RSFROOT, "bin", $S) pipe = `$progpath $args` - Base.wait(spawn(pipeline(pipe, stdout=out_tag))) + run(pipeline(pipe, stdout=out_tag)) return input(out_tag; temp=true) end end @@ -581,7 +575,7 @@ $manpage""" args = process_args(;kwargs...) progpath = joinpath(RSFROOT, "bin", $S) pipe = `$progpath $args` - Base.wait(spawn(pipeline(pipe, stdin=in_file.tag, stdout=out_tag))) + run(pipeline(pipe, stdin=in_file.tag, stdout=out_tag)) if in_file.temp delete_rsf(in_file.tag) end diff --git a/api/julia/test/afdm.jl b/api/julia/test/afdm.jl index d7a4bea198..0945157aff 100755 --- a/api/julia/test/afdm.jl +++ b/api/julia/test/afdm.jl @@ -53,20 +53,20 @@ function run_afdm() for it in 1:nt if verb - print(STDERR, "\b\b\b\b\b $it") + print(stderr, "\b\b\b\b\b $it") end - ud[3:end-2, 3:end-2] = c0 .* uo[3:end-2, 3:end-2] .* (idx .+ idz) .+ - c1.*(uo[3:end-2, 2:end-3] .+ uo[3:end-2, 4:end-1]).*idx .+ - c2.*(uo[3:end-2, 1:end-4] .+ uo[3:end-2, 5:end ]).*idx .+ - c1.*(uo[2:end-3, 3:end-2] .+ uo[4:end-1, 3:end-2]).*idz .+ - c2.*(uo[1:end-4, 3:end-2] .+ uo[5:end, 3:end-2]).*idz + @views @. ud[3:end-2, 3:end-2] = c0 * uo[3:end-2, 3:end-2] * (idx+idz) + + c1*(uo[3:end-2, 2:end-3] + uo[3:end-2, 4:end-1])*idx + + c2*(uo[3:end-2, 1:end-4] + uo[3:end-2, 5:end ])*idx + + c1*(uo[2:end-3, 3:end-2] + uo[4:end-1, 3:end-2])*idz + + c2*(uo[1:end-4, 3:end-2] + uo[5:end, 3:end-2])*idz # inject wavelet - ud = ud .- ww[it] .* rr + ud = @. ud - ww[it] * rr # scale by velocity - ud = ud .* vv .* vv - up = 2.*uo .- um .+ ud .* dt2 + ud = @. ud * vv * vv + up = @. 2f0uo - um + ud * dt2 um = uo uo = up @@ -76,6 +76,6 @@ end @fastmath @inbounds run_afdm() if verb - println(STDERR, "\n") + println(stderr, "\n") end diff --git a/api/julia/test/clip.jl b/api/julia/test/clip.jl old mode 100644 new mode 100755 index 69fd33c797..0421a199de --- a/api/julia/test/clip.jl +++ b/api/julia/test/clip.jl @@ -5,16 +5,16 @@ using m8r inp = m8r.input("in") out = m8r.output("out") -n1 = m8r.histint(inp,"n1") -n2 = m8r.leftsize(inp,1) +n1 = m8r.histint(inp, "n1") +n2 = m8r.leftsize(inp, 1) clip = m8r.getfloat("clip") -trace = Array{Float32}(n1) +trace = Array{Float32}(undef, n1) for i2 in 1:n2 - m8r.floatread(trace,n1,inp) - trace = clamp.(trace,-clip,clip) - m8r.floatwrite(trace,n1,out) + m8r.floatread(trace, n1, inp) + clamp!(trace, -clip, clip) + m8r.floatwrite(trace, n1, out) end diff --git a/api/julia/test/runtests.jl b/api/julia/test/runtests.jl index 39214d8fb4..e1e29a1fe0 100755 --- a/api/julia/test/runtests.jl +++ b/api/julia/test/runtests.jl @@ -1,5 +1,5 @@ #!/usr/bin/env julia -using Base.Test +using Test Base.append!(ARGS, ["int1=1", "float1=1e-99", "str1=ḉ", "bool1=n"]) @@ -79,12 +79,12 @@ m8r.ucharwrite(UInt8[1; 2], m8r.leftsize(out, 0), out) @test m8r.histstring(out, "unit2") == "µm" m8r.close(out) -stdout = STDOUT +old_stdout = stdout (rout, wout) = redirect_stdout() run(pipeline(`sfdisfil`, stdin="test_out_uchar.rsf", stdout=wout)) -data = convert(String, readavailable(rout)) +data = String(readavailable(rout)) close(rout) -redirect_stdout(stdout) +redirect_stdout(old_stdout) @test data == " 0: 1 2 \n" run(`sfrm test_out_uchar.rsf`) @@ -133,12 +133,12 @@ m8r.charwrite(UInt8[1; 2], m8r.leftsize(out, 0), out) @test m8r.histstring(out, "unit2") == "µm" m8r.close(out) -stdout = STDOUT +old_stdout = stdout (rout, wout) = redirect_stdout() run(pipeline(`sfdisfil`, stdin="test_out_char.rsf", stdout=wout)) -data = convert(String, readavailable(rout)) +data = String(readavailable(rout)) close(rout) -redirect_stdout(stdout) +redirect_stdout(old_stdout) @test data == " 0: 1 2 \n" run(`sfrm test_out_char.rsf`) @@ -196,12 +196,12 @@ m8r.intwrite(Int32[1; 2], Int32[m8r.leftsize(out, 0)][], out) @test m8r.histstring(out, "unit2") == "µm" m8r.close(out) -stdout = STDOUT +old_stdout = stdout (rout, wout) = redirect_stdout() run(pipeline(`sfdisfil`, stdin="test_out_int.rsf", stdout=wout)) -data = convert(String, readavailable(rout)) +data = String(readavailable(rout)) close(rout) -redirect_stdout(stdout) +redirect_stdout(old_stdout) @test data == " 0: 1 2 \n" run(`sfrm test_out_int.rsf`) @@ -256,12 +256,12 @@ m8r.floatwrite(Float32[1.5; 2.5], Int32[m8r.leftsize(out, 0)][], out) @test m8r.histstring(out, "unit2") == "µm" m8r.close(out) -stdout = STDOUT +old_stdout = stdout (rout, wout) = redirect_stdout() run(pipeline(`sfdisfil`, stdin="test_out_float.rsf", stdout=wout)) -data = convert(String, readavailable(rout)) +data = String(readavailable(rout)) close(rout) -redirect_stdout(stdout) +redirect_stdout(old_stdout) @test data == " 0: 1.5 2.5\n" run(`sfrm test_out_float.rsf`) @@ -276,7 +276,7 @@ inp = m8r.input("test_inp_complex.rsf") @test m8r.size(inp) == (2, 3) @test m8r.gettype(inp) == 5 dat, = rsf_read(inp) -@test dat == Complex64[1+im im im; im 4+im 2+im] +@test dat == ComplexF32[1+im im im; im 4+im 2+im] @test m8r.histint(inp, "n1") == 2 @test m8r.histint(inp, "n2") == 3 @@ -305,7 +305,7 @@ m8r.putstring(out, "label2", "é") m8r.putstring(out, "unit1", "普通话") m8r.putstring(out, "unit2", "µm") -m8r.complexwrite(Complex64[0.5+im; 2+im], Int32[m8r.leftsize(out, 0)][], out) +m8r.complexwrite(ComplexF32[0.5+im; 2+im], Int32[m8r.leftsize(out, 0)][], out) @test m8r.histint(out, "n1") == 1 @test m8r.histint(out, "n2") == 2 @@ -319,12 +319,12 @@ m8r.complexwrite(Complex64[0.5+im; 2+im], Int32[m8r.leftsize(out, 0)][], out) @test m8r.histstring(out, "unit2") == "µm" m8r.close(out) -stdout = STDOUT +old_stdout = stdout (rout, wout) = redirect_stdout() run(pipeline(`sfdisfil`, stdin="test_out_complex.rsf", stdout=wout)) -data = convert(String, readavailable(rout)) +data = String(readavailable(rout)) close(rout) -redirect_stdout(stdout) +redirect_stdout(old_stdout) @test data == " 0: 0.5, 1i 2, 1i\n" run(`sfrm test_out_complex.rsf`) @@ -381,12 +381,12 @@ m8r.shortwrite(Int16[5; 2], Int32[m8r.leftsize(out, 0)][], out) @test m8r.histstring(out, "unit2") == "µm" m8r.close(out) -stdout = STDOUT +old_stdout = stdout (rout, wout) = redirect_stdout() run(pipeline(`sfdisfil`, stdin="test_out_short.rsf", stdout=wout)) -data = convert(String, readavailable(rout)) +data = String(readavailable(rout)) close(rout) -redirect_stdout(stdout) +redirect_stdout(old_stdout) @test data == " 0: 5 2 \n" run(`sfrm test_out_short.rsf`) diff --git a/framework/setenv.py b/framework/setenv.py index 32bbe43c28..4c42b87442 100755 --- a/framework/setenv.py +++ b/framework/setenv.py @@ -98,15 +98,21 @@ def shell_script(target, source=None, env=None): else: if redefine: myrc += 'if ($?%s) then\n' % par - myrc += 'setenv %s %s:${%s}\n' % (par,value,par) + if par.startswith('JULIA'): + myrc += 'setenv %s %s:${%s}:\n' % (par,value,par) + else: + myrc += 'setenv %s %s:${%s}\n' % (par,value,par) myrc += 'else\n' - myrc += 'setenv %s %s\n' % (par,value) + myrc += 'setenv %s %s:\n' % (par,value) if redefine: myrc += 'endif\n' else: if redefine: myrc += 'if [ -n "$%s" ]; then\n' % par - myrc += 'export %s=%s:${%s}\n' % (par,value,par) + if par.startswith('JULIA'): + myrc += 'export %s=%s:${%s}:\n' % (par,value,par) + else: + myrc += 'export %s=%s:${%s}\n' % (par,value,par) myrc += 'else\n' if par == 'MANPATH': myrc += 'unset MANPATH\n' # necessary for recent bash shells From fc42c9d896ac7f0ec8059a26fa057e77e537133c Mon Sep 17 00:00:00 2001 From: cako Date: Sat, 5 Feb 2022 21:21:34 -0500 Subject: [PATCH 2/2] bugfix: JULIA_LOAD_PATH must always end with : --- framework/setenv.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/framework/setenv.py b/framework/setenv.py index ffd3f912d8..f2a780ccb8 100755 --- a/framework/setenv.py +++ b/framework/setenv.py @@ -104,7 +104,10 @@ def shell_script(target, source=None, env=None): else: myrc += 'setenv %s %s:${%s}\n' % (par,value,par) myrc += 'else\n' - myrc += 'setenv %s %s\n' % (par,value) + if par.startswith('JULIA'): + myrc += 'setenv %s %s:\n' % (par,value) + else: + myrc += 'setenv %s %s\n' % (par,value) if redefine: myrc += 'endif\n' else: @@ -117,7 +120,10 @@ def shell_script(target, source=None, env=None): myrc += 'else\n' if par == 'MANPATH': myrc += 'unset MANPATH\n' # necessary for recent bash shells - myrc += 'export %s=%s\n' % (par,value) + if par.startswith('JULIA'): + myrc += 'export %s=%s:\n' % (par,value) + else: + myrc += 'export %s=%s\n' % (par,value) if redefine: myrc += 'fi\n'