Skip to content

Commit

Permalink
Merge 9fcadcb into b8ea3a0
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonDanisch committed Jul 13, 2018
2 parents b8ea3a0 + 9fcadcb commit 4bfac4f
Show file tree
Hide file tree
Showing 8 changed files with 368 additions and 282 deletions.
3 changes: 1 addition & 2 deletions REQUIRE
Expand Up @@ -3,5 +3,4 @@ Compat 0.52.0
Colors
BinDeps 0.3.21
Graphics 0.1
@osx Homebrew
@windows WinRPM
BinaryProvider 0.3.0
209 changes: 54 additions & 155 deletions deps/build.jl
@@ -1,164 +1,63 @@
using BinDeps
using BinaryProvider # requires BinaryProvider 0.3.0 or later

using Compat
import Compat.Libdl
import Compat.Sys

@BinDeps.setup

# check for cairo version
function validate_cairo_version(name,handle)
f = Libdl.dlsym_e(handle, "cairo_version")
f == C_NULL && return false
v = ccall(f, Int32,())
return v > 10800
end

group = library_group("cairo")
# Parse some basic command-line arguments
const verbose = "--verbose" in ARGS
const prefix = Prefix(get([a for a in ARGS if a != "--verbose"], 1, joinpath(@__DIR__, "usr")))
products = [
LibraryProduct(prefix, String["libcairo"], :libcairo),
]

deps = [
libpng = library_dependency("png", aliases = ["libpng","libpng-1.5.14","libpng15","libpng12.so.0","libpng12"], runtime = false, group = group)
pixman = library_dependency("pixman", aliases = ["libpixman","libpixman-1","libpixman-1-0","libpixman-1.0"], depends = [libpng], runtime = false, group = group)
libffi = library_dependency("ffi", aliases = ["libffi"], runtime = false, group = group)
gettext = library_dependency("gettext", aliases = ["libintl", "preloadable_libintl", "libgettextpo"], os = :Unix, group = group)
gobject = library_dependency("gobject", aliases = ["libgobject-2.0-0", "libgobject-2.0", "libgobject-2_0-0", "libgobject-2.0.so.0"], depends=[libffi, gettext], group = group)
freetype = library_dependency("freetype", aliases = ["libfreetype"], runtime = false, group = group)
fontconfig = library_dependency("fontconfig", aliases = ["libfontconfig-1", "libfontconfig", "libfontconfig.so.1"], depends = [freetype], runtime = false, group = group)
cairo = library_dependency("cairo", aliases = ["libcairo-2", "libcairo","libcairo.so.2", "libcairo2"], depends = [gobject,fontconfig,libpng], group = group, validate = validate_cairo_version)
pango = library_dependency("pango", aliases = ["libpango-1.0-0", "libpango-1.0","libpango-1.0.so.0", "libpango-1_0-0"], group = group)
pangocairo = library_dependency("pangocairo", aliases = ["libpangocairo-1.0-0", "libpangocairo-1.0", "libpangocairo-1.0.so.0"], depends = [cairo], group = group)
zlib = library_dependency("zlib", aliases = ["libzlib","zlib1"], os = :Windows, group = group)
dependencies = [
"https://github.com/bicycle1885/ZlibBuilder/releases/download/v1.0.1/build_Zlib.v1.2.11.jl",
"https://github.com/SimonDanisch/LibpngBuilder/releases/download/v1.6.31/build_libpng.v1.0.0.jl",
"https://github.com/staticfloat/PixmanBuilder/releases/download/v0.34.0-1/build_Pixman.v0.34.0.jl",
"https://github.com/JuliaGraphics/FreeTypeBuilder/releases/download/v2.9.1/build_FreeType2.v2.9.0.jl"
]

if Sys.iswindows()
using WinRPM
provides(WinRPM.RPM,"libpango-1_0-0",[pango,pangocairo],os = :Windows)
provides(WinRPM.RPM,["glib2", "libgobject-2_0-0"],gobject,os = :Windows)
provides(WinRPM.RPM,"zlib-devel",zlib,os = :Windows)
provides(WinRPM.RPM,["libcairo2","libharfbuzz0"],cairo,os = :Windows)
# for url in dependencies
# download(url, basename(url))
# end
for elem in dependencies
# it's a bit faster to run the build in an anonymous module instead of
# starting a new julia process
m = Module(:__anon__)
Core.eval(m, :(Main.include($(joinpath(@__DIR__, basename(elem))))))
end

if is_apple()
using Homebrew
provides( Homebrew.HB, "cairo", cairo, os = :Darwin )
provides( Homebrew.HB, "pango", [pango, pangocairo], os = :Darwin, onload =
"""
function __init__()
ENV["PANGO_SYSCONFDIR"] = joinpath("$(Homebrew.prefix())", "etc")
# Download binaries from hosted location
bin_prefix = "https://github.com/JuliaGraphics/CairoBuilder/releases/download/v1.12.12"

# Listing of files generated by BinaryBuilder:
download_info = Dict(
Linux(:aarch64, :glibc) => ("$bin_prefix/Cairo.v1.12.12.aarch64-linux-gnu.tar.gz", "128ab2c799f28ea6c46b974244716c02e4cd0ba9f4d99dbd06cea84486a70c15"),
Linux(:aarch64, :musl) => ("$bin_prefix/Cairo.v1.12.12.aarch64-linux-musl.tar.gz", "cb51e16e171af0dea78947d47c61d1ee5976460e458c64cfe8746c7cfe3e8972"),
Linux(:armv7l, :glibc, :eabihf) => ("$bin_prefix/Cairo.v1.12.12.arm-linux-gnueabihf.tar.gz", "8a699225e6ac5ab945b57d1179ba41e1021f84dddde02df2104e1466d1f1eba4"),
Linux(:armv7l, :musl, :eabihf) => ("$bin_prefix/Cairo.v1.12.12.arm-linux-musleabihf.tar.gz", "3cebe2407cfc6dda7e4f2b4f21b57d120ebc6da18c15785e76de92571ef2fb05"),
Linux(:i686, :glibc) => ("$bin_prefix/Cairo.v1.12.12.i686-linux-gnu.tar.gz", "5011f386292387d76beeea3d33487d09e312daa6c5aaf91033c1c9f4e431d279"),
Linux(:i686, :musl) => ("$bin_prefix/Cairo.v1.12.12.i686-linux-musl.tar.gz", "d12257d06e73297aa3cd40a556d1f1da2831ffa28b9d5d0a76491552a6e594b9"),
Windows(:i686) => ("$bin_prefix/Cairo.v1.12.12.i686-w64-mingw32.tar.gz", "3eb3b72323b0a5effafaad8660fbcb5a4a85cbbb16be8ac69fd7d8df0ea99618"),
Linux(:powerpc64le, :glibc) => ("$bin_prefix/Cairo.v1.12.12.powerpc64le-linux-gnu.tar.gz", "75fa6f359d200665de028c493250539c1ed5e64137e4ed019c61959fc8e4d3a3"),
MacOS(:x86_64) => ("$bin_prefix/Cairo.v1.12.12.x86_64-apple-darwin14.tar.gz", "703323019abbdb8c5ac93dc4671479e71694d2fd6266fb55ced5ffbf7eaef934"),
Linux(:x86_64, :glibc) => ("$bin_prefix/Cairo.v1.12.12.x86_64-linux-gnu.tar.gz", "ba25e83f1f49dce8bb408e4accf914ed774b94d630983a6c8d46d0b66de3f691"),
Linux(:x86_64, :musl) => ("$bin_prefix/Cairo.v1.12.12.x86_64-linux-musl.tar.gz", "823a3ad3d8370714985a3a8a9dc4f3dc1bc1be1ca8937d482fc69f41bf1079e1"),
FreeBSD(:x86_64) => ("$bin_prefix/Cairo.v1.12.12.x86_64-unknown-freebsd11.1.tar.gz", "f08161cc296f2daba8ddae0ce664e9f7b2f1bb071787325970d31310eab0718a"),
Windows(:x86_64) => ("$bin_prefix/Cairo.v1.12.12.x86_64-w64-mingw32.tar.gz", "9718250937e175ecd8306cea6bceb5c18f3d1b1b2e597c7e408340db53ec1bb6"),
)

# Install unsatisfied or updated dependencies:
unsatisfied = any(!satisfied(p; verbose=verbose) for p in products)
if haskey(download_info, platform_key())
url, tarball_hash = download_info[platform_key()]
if unsatisfied || !isinstalled(url, tarball_hash; prefix=prefix)
# Download and install binaries
install(url, tarball_hash; prefix=prefix, force=true, verbose=verbose)
end
""" )
provides( Homebrew.HB, "fontconfig", fontconfig, os = :Darwin )
provides( Homebrew.HB, "glib", gobject, os = :Darwin )
provides( Homebrew.HB, "libpng", libpng, os = :Darwin )
provides( Homebrew.HB, "gettext", gettext, os = :Darwin )
provides( Homebrew.HB, "freetype", freetype, os = :Darwin )
provides( Homebrew.HB, "libffi", libffi, os = :Darwin )
provides( Homebrew.HB, "pixman", pixman, os = :Darwin )
elseif unsatisfied
# If we don't have a BinaryProvider-compatible .tar.gz to download, complain.
# Alternatively, you could attempt to install from a separate provider,
# build from source or something even more ambitious here.
error("Your platform $(triplet(platform_key())) is not supported by this package!")
end

# System Package Managers
provides(AptGet,
Dict(
"libcairo2" => cairo,
"libfontconfig1" => fontconfig,
"libpango1.0-0" => [pango,pangocairo],
"libglib2.0-0" => gobject,
"libpng12-0" => libpng,
"libpixman-1-0" => pixman,
"gettext" => gettext
))

# TODO: check whether these are accurate
provides(Yum,
Dict(
"cairo" => cairo,
"fontconfig" => fontconfig,
"pango" => [pango,pangocairo],
"glib2" => gobject,
"libpng" => libpng,
"gettext-libs" => gettext
))

provides(Zypper,
Dict(
"libcairo2" => cairo,
"libfontconfig" => fontconfig,
"libpango-1_0" => [pango,pangocairo],
"libglib-2_0" => gobject,
"libpng12" => libpng,
"libpixman-1" => pixman,
"gettext" => gettext
))

const png_version = "1.5.14"

provides(Sources,
Dict(
URI("http://www.cairographics.org/releases/pixman-0.28.2.tar.gz") => pixman,
URI("http://www.cairographics.org/releases/cairo-1.12.16.tar.xz") => cairo,
URI("http://download.savannah.gnu.org/releases/freetype/freetype-2.4.11.tar.gz") => freetype,
URI("http://www.freedesktop.org/software/fontconfig/release/fontconfig-2.10.2.tar.gz") => fontconfig,
URI("http://ftp.gnu.org/pub/gnu/gettext/gettext-0.18.2.tar.gz") => gettext,
URI("ftp://ftp.simplesystems.org/pub/libpng/png/src/history/libpng15/libpng-$(png_version).tar.gz") => libpng,
URI("ftp://sourceware.org/pub/libffi/libffi-3.0.11.tar.gz") => libffi,
URI("http://ftp.gnome.org/pub/gnome/sources/glib/2.34/glib-2.34.3.tar.xz") => gobject,
URI("http://ftp.gnome.org/pub/GNOME/sources/pango/1.32/pango-1.32.6.tar.xz") => [pango,pangocairo],
URI("http://zlib.net/zlib-1.2.7.tar.gz") => zlib
))

xx(t...) = (Sys.iswindows() ? t[1] : (is_linux() || length(t) == 2) ? t[2] : t[3])

provides(BuildProcess,
Dict(
Autotools(libtarget = "pixman/libpixman-1.la", installed_libname = xx("libpixman-1-0.","libpixman-1.","libpixman-1.0.")*Libdl.dlext) => pixman,
Autotools(libtarget = xx("objs/.libs/libfreetype.la","libfreetype.la")) => freetype,
Autotools(libtarget = "src/libfontconfig.la") => fontconfig,
Autotools(libtarget = "src/libcairo.la", configure_options = append!(append!(
AbstractString[],
!is_linux() ? AbstractString["--without-x","--disable-xlib","--disable-xcb"] : AbstractString[]),
is_apple() ? AbstractString["--enable-quartz","--enable-quartz-font","--enable-quartz-image","--disable-gl"] : AbstractString[])) => cairo,
Autotools(libtarget = "gettext-tools/gnulib-lib/.libs/libgettextlib.la") => gettext,
Autotools(libtarget = "libffi.la") => libffi,
Autotools(libtarget = "gobject/libgobject-2.0.la") => gobject,
Autotools(libtarget = "pango/libpango-1.0.la") => [pango,pangocairo]
))

provides(BuildProcess,Autotools(libtarget = "libpng15.la"),libpng,os = :Unix)

provides(SimpleBuild,
(@build_steps begin
GetSources(zlib)
@build_steps begin
ChangeDirectory(joinpath(BinDeps.depsdir(zlib),"src","zlib-1.2.7"))
MakeTargets(["-fwin32/Makefile.gcc"])
#MakeTargets(["-fwin32/Makefile.gcc","DESTDIR=../../usr/","INCLUDE_PATH=include","LIBRARY_PATH=lib","SHARED_MODE=1","install"])
end
end),zlib, os = :Windows)

prefix=joinpath(BinDeps.depsdir(libpng),"usr")
uprefix = replace(replace(prefix,"\\","/"),"C:/","/c/")
pngsrcdir = joinpath(BinDeps.depsdir(libpng),"src","libpng-$png_version")
pngbuilddir = joinpath(BinDeps.depsdir(libpng),"builds","libpng-$png_version")
provides(BuildProcess,
(@build_steps begin
GetSources(libpng)
CreateDirectory(pngbuilddir)
@build_steps begin
ChangeDirectory(pngbuilddir)
FileRule(joinpath(prefix,"lib","libpng15.dll"),@build_steps begin
`cmake -DCMAKE_INSTALL_PREFIX="$prefix" -G"MSYS Makefiles" $pngsrcdir`
`make`
`cp 'libpng*.dll' $prefix/lib`
`cp 'libpng*.a' $prefix/lib`
`cp 'libpng*.pc' $prefix/lib/pkgconfig`
`cp pnglibconf.h $prefix/include`
`cp $pngsrcdir/png.h $prefix/include`
`cp $pngsrcdir/pngconf.h $prefix/include`
end)
end
end),libpng, os = :Windows)

@BinDeps.install Dict([(:gobject, :_jl_libgobject),
(:cairo, :_jl_libcairo),
(:pango, :_jl_libpango),
(:pangocairo, :_jl_libpangocairo)])
# Write out a deps.jl file that will contain mappings for our products
write_deps_file(joinpath(@__DIR__, "deps.jl"), products)
46 changes: 46 additions & 0 deletions deps/build_FreeType2.v2.9.0.jl
@@ -0,0 +1,46 @@
using BinaryProvider # requires BinaryProvider 0.3.0 or later

# Parse some basic command-line arguments
const verbose = "--verbose" in ARGS
const prefix = Prefix(get([a for a in ARGS if a != "--verbose"], 1, joinpath(@__DIR__, "usr")))
products = [
LibraryProduct(prefix, String["libfreetype"], :libfreetype),
]

# Download binaries from hosted location
bin_prefix = "https://github.com/Gnimuc/FreeTypeBuilder/releases/download/v2.9.1"

# Listing of files generated by BinaryBuilder:
download_info = Dict(
Linux(:aarch64, :glibc) => ("$bin_prefix/FreeType2.v2.9.0.aarch64-linux-gnu.tar.gz", "c47c6bdef0f8483cf4e968877ee8778fe173f53cadb12de22e6aeee34a70384d"),
Linux(:aarch64, :musl) => ("$bin_prefix/FreeType2.v2.9.0.aarch64-linux-musl.tar.gz", "b50ef907f7019bc7cc49a16a46e24e521213dda7fe1ab48442900d82860230e0"),
Linux(:armv7l, :glibc, :eabihf) => ("$bin_prefix/FreeType2.v2.9.0.arm-linux-gnueabihf.tar.gz", "960642c185936a501a4c7301f042c5bc616e85d859cf868516b72b787f2f1380"),
Linux(:armv7l, :musl, :eabihf) => ("$bin_prefix/FreeType2.v2.9.0.arm-linux-musleabihf.tar.gz", "4e624965ab3aaae52e1751fa60d1eeebca2df60e26cf0b1c5876bd53005144c7"),
Linux(:i686, :glibc) => ("$bin_prefix/FreeType2.v2.9.0.i686-linux-gnu.tar.gz", "f344cd50f3cd9e4eed72fabe48ccce6acf8129cb966b2654ea6b9bb0c729a32a"),
Linux(:i686, :musl) => ("$bin_prefix/FreeType2.v2.9.0.i686-linux-musl.tar.gz", "f7480c18b444509d0f97eea8f5013c068898de05fad1e29fc035d73454d85153"),
Windows(:i686) => ("$bin_prefix/FreeType2.v2.9.0.i686-w64-mingw32.tar.gz", "8114192e9f9f23053bc94eb352b7b87d5a4e1e2438396668e08c5a8b63987fdd"),
Linux(:powerpc64le, :glibc) => ("$bin_prefix/FreeType2.v2.9.0.powerpc64le-linux-gnu.tar.gz", "6714d99a688e994aa311d06e6214b25264f4dc976fe7fdbf9338287656379fe3"),
MacOS(:x86_64) => ("$bin_prefix/FreeType2.v2.9.0.x86_64-apple-darwin14.tar.gz", "1c1fb7b064735780472c7b3de34639072952c274dea50986b1e37a2888d5e642"),
Linux(:x86_64, :glibc) => ("$bin_prefix/FreeType2.v2.9.0.x86_64-linux-gnu.tar.gz", "1abcf93c7bc5e4d94d89823c32577add3d4948d7cdbcdc5214f36594c45ca96e"),
Linux(:x86_64, :musl) => ("$bin_prefix/FreeType2.v2.9.0.x86_64-linux-musl.tar.gz", "9fb7aacef54b59462e9fc5f008df4ffbacf6f828adc54452afb6c7796b825bb9"),
FreeBSD(:x86_64) => ("$bin_prefix/FreeType2.v2.9.0.x86_64-unknown-freebsd11.1.tar.gz", "57af70cbbfda1731e91210a883d5ade50772485189e0a7931f30ad64ff698c7f"),
Windows(:x86_64) => ("$bin_prefix/FreeType2.v2.9.0.x86_64-w64-mingw32.tar.gz", "e28168f248814da26c6319bd9e55982b233f5605e662edaa3c8d6617fb375def"),
)

# Install unsatisfied or updated dependencies:
unsatisfied = any(!satisfied(p; verbose=verbose) for p in products)
if haskey(download_info, platform_key())
url, tarball_hash = download_info[platform_key()]
if unsatisfied || !isinstalled(url, tarball_hash; prefix=prefix)
# Download and install binaries
install(url, tarball_hash; prefix=prefix, force=true, verbose=verbose)
end
elseif unsatisfied
# If we don't have a BinaryProvider-compatible .tar.gz to download, complain.
# Alternatively, you could attempt to install from a separate provider,
# build from source or something even more ambitious here.
error("Your platform $(triplet(platform_key())) is not supported by this package!")
end

# Write out a deps.jl file that will contain mappings for our products
write_deps_file(joinpath(@__DIR__, "deps.jl"), products)
46 changes: 46 additions & 0 deletions deps/build_Pixman.v0.34.0.jl
@@ -0,0 +1,46 @@
using BinaryProvider # requires BinaryProvider 0.3.0 or later

# Parse some basic command-line arguments
const verbose = "--verbose" in ARGS
const prefix = Prefix(get([a for a in ARGS if a != "--verbose"], 1, joinpath(@__DIR__, "usr")))
products = [
LibraryProduct(prefix, String["libpixman"], :libpixman),
]

# Download binaries from hosted location
bin_prefix = "https://github.com/staticfloat/PixmanBuilder/releases/download/v0.34.0-1"

# Listing of files generated by BinaryBuilder:
download_info = Dict(
Linux(:aarch64, :glibc) => ("$bin_prefix/Pixman.v0.34.0.aarch64-linux-gnu.tar.gz", "202d8658a38c3a97d679aaf871c4b4b278a2df2de80e5151884746cd8aecacf1"),
Linux(:aarch64, :musl) => ("$bin_prefix/Pixman.v0.34.0.aarch64-linux-musl.tar.gz", "40215a85cba958e8ac0bbf8fa5c76f07ed41ba10439187a6eed426e9db9fe969"),
Linux(:armv7l, :glibc, :eabihf) => ("$bin_prefix/Pixman.v0.34.0.arm-linux-gnueabihf.tar.gz", "cb6013ae64a8da3c4a5b706052043dd2a82287e6d6a8ef7030c94f9be404860e"),
Linux(:armv7l, :musl, :eabihf) => ("$bin_prefix/Pixman.v0.34.0.arm-linux-musleabihf.tar.gz", "f93e8e42ae7e8a9833288ed71441de699c5639790f6772a3d442b76f55e551c7"),
Linux(:i686, :glibc) => ("$bin_prefix/Pixman.v0.34.0.i686-linux-gnu.tar.gz", "6aa014509b393fed0b5bf2861844f415c2c401cc1f385f1b26df1eb5574682ab"),
Linux(:i686, :musl) => ("$bin_prefix/Pixman.v0.34.0.i686-linux-musl.tar.gz", "7f52cca4f29caf230b1350187f42584c12c71e7c306a6a7cc6c8b62794c548f0"),
Windows(:i686) => ("$bin_prefix/Pixman.v0.34.0.i686-w64-mingw32.tar.gz", "c06c104d74a32fadb1aee26b85a79a83478034ef34969e943f8868f0d333c547"),
Linux(:powerpc64le, :glibc) => ("$bin_prefix/Pixman.v0.34.0.powerpc64le-linux-gnu.tar.gz", "6788f04d8091ac90522b2e5f09961d2408789e37ce6c01f8730e3cdc43dbdcf3"),
MacOS(:x86_64) => ("$bin_prefix/Pixman.v0.34.0.x86_64-apple-darwin14.tar.gz", "248ac947cbf73d5b342694f8421db5b59c558ca5349dfcca6130ca89ad4368cb"),
Linux(:x86_64, :glibc) => ("$bin_prefix/Pixman.v0.34.0.x86_64-linux-gnu.tar.gz", "3382fd010d41bab9c457f1e317ae8d426e34311ddbab2a31d0937b2255873886"),
Linux(:x86_64, :musl) => ("$bin_prefix/Pixman.v0.34.0.x86_64-linux-musl.tar.gz", "27931e6fae07e27acae91657cb7b67d9089f2942ef09b9a082e87cff52bcb603"),
FreeBSD(:x86_64) => ("$bin_prefix/Pixman.v0.34.0.x86_64-unknown-freebsd11.1.tar.gz", "ae5617bfd640b8f6cb47a05440b3a96807cefad9e6cc4af5d333620aac6c39b7"),
Windows(:x86_64) => ("$bin_prefix/Pixman.v0.34.0.x86_64-w64-mingw32.tar.gz", "4cbf76c796ae923e3d7a69d3b06147b8e944bbeb0d224c21a4834be2fa519c22"),
)

# Install unsatisfied or updated dependencies:
unsatisfied = any(!satisfied(p; verbose=verbose) for p in products)
if haskey(download_info, platform_key())
url, tarball_hash = download_info[platform_key()]
if unsatisfied || !isinstalled(url, tarball_hash; prefix=prefix)
# Download and install binaries
install(url, tarball_hash; prefix=prefix, force=true, verbose=verbose)
end
elseif unsatisfied
# If we don't have a BinaryProvider-compatible .tar.gz to download, complain.
# Alternatively, you could attempt to install from a separate provider,
# build from source or something even more ambitious here.
error("Your platform $(triplet(platform_key())) is not supported by this package!")
end

# Write out a deps.jl file that will contain mappings for our products
write_deps_file(joinpath(@__DIR__, "deps.jl"), products)

0 comments on commit 4bfac4f

Please sign in to comment.