Created
November 16, 2018 13:53
-
-
Save jonathanBieler/6f4e078b9294470479a504180a8ef887 to your computer and use it in GitHub Desktop.
Gtk build
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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