Skip to content

Instantly share code, notes, and snippets.

@jonathanBieler
Created November 16, 2018 13:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jonathanBieler/6f4e078b9294470479a504180a8ef887 to your computer and use it in GitHub Desktop.
Save jonathanBieler/6f4e078b9294470479a504180a8ef887 to your computer and use it in GitHub Desktop.
Gtk build
using ApplicationBuilder, GtkREPL, Compat
cd("/Users/jbieler/.julia/dev/GtkREPL/")
builddir = "/Users/jbieler/.julia/dev/GtkREPL/builddir/GtkREPL.app/Contents/Libraries/"
r = s->joinpath("/Users/jbieler/.julia/",s)
#Gtk libs
gtk_libs = [
:libgdk,
:libgdk_pixbuf,
:libgio,
:libglib,
:libgobject,
:libgtk,
]
copy_libs(src,dest) = try cp(src, joinpath(builddir,dest); force=true, follow_symlinks=true) catch err
warn(err)
warn(joinpath(builddir,dest))
end
hb_root = "/Users/jbieler/.julia/packages/Homebrew/l8kUw/deps/usr/"
function copy_dir(src,libs)
mkpath(joinpath(builddir,src))
@info "copying to $(joinpath(builddir,src))"
for lib in libs
copy_libs(joinpath(hb_root,src,lib),joinpath(src,lib))
end
end
# copy whole directories
copy_dir("Cellar",["gtk+3","glib","gdk-pixbuf","cairo","gettext","pango","harfbuzz","pcre"])
copy_dir("lib",["glib-2.0","gdk-pixbuf-2.0"])
copy_dir("opt",[
"gtk+3","glib","gdk-pixbuf","cairo","pango","fribidi","atk","libepoxy","gettext",
"libffi","pcre","pixman","fontconfig","freetype","libpng","harfbuzz","icu4c",
"graphite2",
])
#copy individual files in "lib"
for lib in [Core.eval(GtkREPL.Gtk,l) for l in gtk_libs]
copy_libs(lib, joinpath("lib", basename(lib)) )
end
#copy individual files in "bin"
mkpath(joinpath(builddir,"bin"))
for lib in [joinpath(hb_root,"bin/gdk-pixbuf-query-loaders")]
copy_libs(lib, joinpath("bin", basename(lib)) )
end
function fix_library(l; relpath="@loader_path/../Libraries")
name = basename(l)
@assert isfile(l)
chmod(l, 0o777)
run(`install_name_tool -id "$l" $l`)
try
external_deps = readlines(pipeline(`otool -L $l`,
`grep .julia`, # filter julia lib deps
`sed 's/(.*)$//'`)) # remove trailing parens
for line in external_deps
line = strip(line)
path = line
line = line[end] == ':' ? line[1:end-1] : line
#@info line
if !occursin(hb_root,line)
@info "skipped $line"
continue
end
depname = strip(split(line,hb_root)[2])
if !isfile(joinpath(builddir,depname))
@show line
error("file not found: $(joinpath(builddir,depname))")
end
cmd = `install_name_tool -change "$path" "$(relpath)/$(depname)" $l`
#println(cmd)
run(cmd)
end
catch err
error(err)
end
end
#list all libraries and fix them
libs = readlines(pipeline(`find $builddir -type f -name "*.dylib"`))
for lib in libs
fix_library(lib)
end
fix_library(joinpath(builddir,"bin/gdk-pixbuf-query-loaders"), relpath = "@loader_path/..")
#Libdl.dlopen(joinpath(builddir,"opt/glib/lib/libgobject-2.0.0.dylib"))
## build
# build_app_bundle("build_app.jl", appname="GtkREPL",
# resources=[r("dev/GtkREPL/config/default_settings.jl")],
# #libraries=libs,
# verbose=true,
# )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment