feat: add libass (#2346)

* feat(fribidi): add version 1.0.13 and wasm supoort

* feat(fribidi): turn on all platforms

* chore(fribidi): tweaks

* feat(harfbuzz): wasm support

* chore(harfbuzz): tweaks

* feat(meson): try to enable bsd support

* feat(freetype): new dep command since 2.11.1

* fix(freetype): fix a typo

* feat(fribidi): optimize includes export

* feat: add libass

* feat(harfbuzz): try to add some platform

* fix(libass): try to fix windows build error

* feat(libass): add more version

* fix(harfbuzz): fix dependence error on bsd

* fix(harfbuzz): disable freetype on bsd

* fix: fix asm build error

* Update xmake.lua

* fix(harfbuzz): fix android build

* Update xmake.lua

* fix(harfbuzz): fix android build

* fix(huffbuzz): fix a dep error

* fix(harfbuzz): fix a typo

* fix(harfbuzz): try to fix android build error

* fix(harfbuzz): disable freetype on android

* fix(libass): fix clang build error

* Update xmake.lua

* fix(libass): fix windows shared library build

* feat(harfbuzz): add more versions

* fix(harfbuzz): fix windows shared lib build

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

* Update xmake.lua

---------

Co-authored-by: ruki <waruqi@gmail.com>
pull/2444/head
冰雪殇璃陌梦 1 year ago committed by GitHub
parent e678ebbaac
commit f6735ebeed
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 15
      packages/f/freetype/xmake.lua
  2. 22
      packages/f/fribidi/xmake.lua
  3. 35
      packages/h/harfbuzz/xmake.lua
  4. 12
      packages/l/libass/port/config.h.in
  5. 98
      packages/l/libass/port/xmake.lua
  6. 32
      packages/l/libass/xmake.lua
  7. 2
      packages/m/meson/xmake.lua

@ -5,7 +5,8 @@ package("freetype")
add_urls("https://downloads.sourceforge.net/project/freetype/freetype2/$(version)/freetype-$(version).tar.gz", add_urls("https://downloads.sourceforge.net/project/freetype/freetype2/$(version)/freetype-$(version).tar.gz",
"https://download.savannah.gnu.org/releases/freetype/freetype-$(version).tar.gz", {alias="archive"}) "https://download.savannah.gnu.org/releases/freetype/freetype-$(version).tar.gz", {alias="archive"})
add_urls("https://gitlab.freedesktop.org/freetype/freetype.git", {alias = "git"}) add_urls("https://gitlab.freedesktop.org/freetype/freetype.git",
"https://github.com/freetype/freetype.git", {alias = "git"})
add_versions("archive:2.13.1", "0b109c59914f25b4411a8de2a506fdd18fa8457eb86eca6c7b15c19110a92fa5") add_versions("archive:2.13.1", "0b109c59914f25b4411a8de2a506fdd18fa8457eb86eca6c7b15c19110a92fa5")
add_versions("archive:2.13.0", "a7aca0e532a276ea8d85bd31149f0a74c33d19c8d287116ef8f5f8357b4f1f80") add_versions("archive:2.13.0", "a7aca0e532a276ea8d85bd31149f0a74c33d19c8d287116ef8f5f8357b4f1f80")
@ -72,7 +73,11 @@ package("freetype")
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF")) table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
local function add_dep(opt) local function add_dep(opt)
if package:config(opt.conf) then if package:config(opt.conf) then
table.insert(configs, "-DFT_WITH_" .. opt.cmakewith .. "=ON") if package:version():ge("2.11.1") then
table.insert(configs, "-DFT_REQUIRE_" .. opt.cmakewith .. "=ON")
else
table.insert(configs, "-DFT_WITH_" .. opt.cmakewith .. "=ON")
end
local lib = package:dep(opt.pkg or opt.conf) local lib = package:dep(opt.pkg or opt.conf)
if lib and not lib:is_system() then if lib and not lib:is_system() then
@ -85,7 +90,11 @@ package("freetype")
end end
end end
else else
table.insert(configs, "-DCMAKE_DISABLE_FIND_PACKAGE_" .. (opt.cmakedisable or opt.cmakewith) .. "=ON") if package:version():ge("2.11.1") then
table.insert(configs, "-DFT_DISABLE_" .. opt.cmakewith .. "=ON")
else
table.insert(configs, "-DCMAKE_DISABLE_FIND_PACKAGE_" .. (opt.cmakedisable or opt.cmakewith) .. "=ON")
end
end end
end end
add_dep({conf = "bzip2", cmakewith = "BZIP2", cmakedisable = "BZip2", cmakeinclude = "BZIP2_INCLUDE_DIR"}) add_dep({conf = "bzip2", cmakewith = "BZIP2", cmakedisable = "BZip2", cmakeinclude = "BZIP2_INCLUDE_DIR"})

@ -8,26 +8,26 @@ package("fribidi")
add_versions("1.0.10", "7f1c687c7831499bcacae5e8675945a39bacbad16ecaa945e9454a32df653c01") add_versions("1.0.10", "7f1c687c7831499bcacae5e8675945a39bacbad16ecaa945e9454a32df653c01")
add_versions("1.0.11", "30f93e9c63ee627d1a2cedcf59ac34d45bf30240982f99e44c6e015466b4e73d") add_versions("1.0.11", "30f93e9c63ee627d1a2cedcf59ac34d45bf30240982f99e44c6e015466b4e73d")
add_versions("1.0.12", "0cd233f97fc8c67bb3ac27ce8440def5d3ffacf516765b91c2cc654498293495") add_versions("1.0.12", "0cd233f97fc8c67bb3ac27ce8440def5d3ffacf516765b91c2cc654498293495")
add_versions("1.0.13", "7fa16c80c81bd622f7b198d31356da139cc318a63fc7761217af4130903f54a2")
if is_plat("windows") then if not is_plat("macosx", "linux", "bsd") then
add_deps("meson", "ninja") add_deps("meson", "ninja")
elseif is_plat("linux") then elseif is_plat("linux") then
add_extsources("apt::libfribidi-dev", "pacman::fribidi") add_extsources("apt::libfribidi-dev", "pacman::fribidi")
end end
if is_plat("wasm") then
add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
end
add_includedirs("include", "include/fribidi")
on_load("windows", function (package) on_load("windows", function (package)
if not package:config("shared") then if not package:config("shared") then
package:add("defines", "FRIBIDI_LIB_STATIC") package:add("defines", "FRIBIDI_LIB_STATIC")
end end
end) end)
on_install("windows", function (package) on_install("macosx", "linux", "bsd", function (package)
local configs = {"-Ddocs=false", "-Dtests=false"}
table.insert(configs, "-Ddefault_library=" .. (package:config("shared") and "shared" or "static"))
import("package.tools.meson").install(package, configs)
end)
on_install("macosx", "linux", function (package)
local configs = {} local configs = {}
table.insert(configs, "--enable-shared=" .. (package:config("shared") and "yes" or "no")) table.insert(configs, "--enable-shared=" .. (package:config("shared") and "yes" or "no"))
table.insert(configs, "--enable-static=" .. (package:config("shared") and "no" or "yes")) table.insert(configs, "--enable-static=" .. (package:config("shared") and "no" or "yes"))
@ -37,6 +37,12 @@ package("fribidi")
import("package.tools.autoconf").install(package, configs) import("package.tools.autoconf").install(package, configs)
end) end)
on_install(function (package)
local configs = {"-Ddocs=false", "-Dtests=false"}
table.insert(configs, "-Ddefault_library=" .. (package:config("shared") and "shared" or "static"))
import("package.tools.meson").install(package, configs)
end)
on_test(function (package) on_test(function (package)
assert(package:has_cfuncs("fribidi_debug_status", {includes = "fribidi/fribidi-common.h"})) assert(package:has_cfuncs("fribidi_debug_status", {includes = "fribidi/fribidi-common.h"}))
end) end)

@ -10,16 +10,36 @@ package("harfbuzz")
add_versions("2.9.0", "bf5d5bad69ee44ff1dd08800c58cb433e9b3bf4dad5d7c6f1dec5d1cf0249d04") add_versions("2.9.0", "bf5d5bad69ee44ff1dd08800c58cb433e9b3bf4dad5d7c6f1dec5d1cf0249d04")
add_versions("3.0.0", "55f7e36671b8c5569b6438f80efed2fd663298f785ad2819e115b35b5587ef69") add_versions("3.0.0", "55f7e36671b8c5569b6438f80efed2fd663298f785ad2819e115b35b5587ef69")
add_versions("3.1.1", "5283c7f5f1f06ddb5e2e88319f6946ea37d2eb3a574e0f73f6000de8f9aa34e6") add_versions("3.1.1", "5283c7f5f1f06ddb5e2e88319f6946ea37d2eb3a574e0f73f6000de8f9aa34e6")
add_versions("4.4.1", "1a95b091a40546a211b6f38a65ccd0950fa5be38d95c77b5c4fa245130b418e1")
add_versions("5.3.1", "77c8c903f4539b050a6d3a5be79705c7ccf7b1cb66d68152a651486e261edbd2")
add_versions("6.0.0", "6d753948587db3c7c3ba8cc4f8e6bf83f5c448d2591a9f7ec306467f3a4fe4fa")
add_versions("7.3.0", "7cefc6cc161e9d5c88210dafc43bc733ca3e383fd3dd4f1e6178f81bd41cfaae")
add_versions("8.0.0", "a8e8ec6f0befce0bd5345dd741d2f88534685a798002e343a38b7f9b2e00c884")
add_versions("8.0.1", "d54ca67b6a0bf732b66a343566446d7f93df2bb850133f886c0082fb618a06b2")
add_versions("8.1.0", "8d544f1b74797b7b4d88f586e3b9202528b3e8c17968d28b7cdde02041bff5a0")
add_versions("8.1.1", "b16e6bc0fc7e6a218583f40c7d201771f2e3072f85ef6e9217b36c1dc6b2aa25")
add_configs("icu", {description = "Enable ICU library unicode functions.", default = false, type = "boolean"}) add_configs("icu", {description = "Enable ICU library unicode functions.", default = false, type = "boolean"})
add_configs("freetype", {description = "Enable freetype interop helpers.", default = true, type = "boolean"}) add_configs("freetype", {description = "Enable freetype interop helpers.", default = true, type = "boolean"})
add_deps("meson") if is_plat("android") then
add_deps("cmake")
else
add_deps("meson", "ninja")
if is_plat("windows") then
add_deps("pkgconf")
end
end
add_includedirs("include", "include/harfbuzz") add_includedirs("include", "include/harfbuzz")
if is_plat("macosx") then if is_plat("macosx") then
add_frameworks("CoreText", "CoreFoundation", "CoreGraphics") add_frameworks("CoreText", "CoreFoundation", "CoreGraphics")
elseif is_plat("bsd", "android") then
add_configs("freetype", {description = "Enable freetype interop helpers.", default = false, type = "boolean", readonly = true})
elseif is_plat("wasm") then
add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
end end
on_load("windows", "linux", "macosx", function (package)
on_load(function (package)
if package:config("icu") then if package:config("icu") then
package:add("deps", "icu4c") package:add("deps", "icu4c")
end end
@ -28,7 +48,16 @@ package("harfbuzz")
end end
end) end)
on_install("windows", "linux", "macosx", function (package) on_install("android", function (package)
local configs = {"-DHB_HAVE_GLIB=OFF", "-DHB_HAVE_GOBJECT=OFF"}
table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release"))
table.insert(configs, "-DBUILD_SHARED_LIBS=" .. (package:config("shared") and "ON" or "OFF"))
table.insert(configs, "-DHB_HAVE_FREETYPE=" .. (package:config("freetype") and "ON" or "OFF"))
table.insert(configs, "-DHB_HAVE_ICU=" .. (package:config("icu") and "ON" or "OFF"))
import("package.tools.cmake").install(package, configs)
end)
on_install(function (package)
import("package.tools.meson") import("package.tools.meson")
local configs = {"-Dtests=disabled", "-Ddocs=disabled", "-Dbenchmark=disabled", "-Dcairo=disabled", "-Dglib=disabled", "-Dgobject=disabled"} local configs = {"-Dtests=disabled", "-Ddocs=disabled", "-Dbenchmark=disabled", "-Dcairo=disabled", "-Dglib=disabled", "-Dgobject=disabled"}

@ -0,0 +1,12 @@
/* found CoreText framework */
#undef CONFIG_CORETEXT
/* found DirectWrite and GDI (Win32) */
#undef CONFIG_DIRECTWRITE
/* found libpng via pkg-config */
#undef CONFIG_LIBPNG
#define CONFIG_SOURCEVERSION "commit: ${GIT_TAG}${GIT_COMMIT_LONG}"
${define HAVE_STRDUP}
${define HAVE_STRNDUP}

@ -0,0 +1,98 @@
set_project("libass")
add_requires("freetype", "fribidi", "harfbuzz")
includes("check_cfuncs.lua")
add_rules("mode.debug", "mode.release")
if is_plat("windows") and is_kind("shared") then
add_rules("utils.symbols.export_all")
end
option("asm")
set_default(true)
set_description("compiling with ASM")
add_defines("CONFIG_ASM")
option("large-tiles")
set_default(false)
set_description("use larger tiles in the rasterizer (better performance, slightly worse quality)")
add_defines("CONFIG_LARGE_TILES")
option("system-font-provider")
on_check(function (option)
option:enable(not is_plat("wasm"))
end)
set_description("enable checking for system fonts provider")
target("ass")
set_kind("$(kind)")
add_options("asm", "large-tiles", "system-font-provider")
add_packages("freetype", "fribidi", "harfbuzz")
add_files("libass/*.c|ass_fontconfig.c|ass_directwrite.c|ass_coretext.c",
"libass/c/*.c")
add_includedirs("libass", "libass/c", "$(buildir)")
if not is_plat("windows") then
add_syslinks("m")
end
add_configfiles("config.h.in")
configvar_check_cfuncs("HAVE_STRDUP", "strdup", {includes = "string.h"})
configvar_check_cfuncs("HAVE_STRNDUP", "strndup", {includes = "string.h"})
if has_config("asm") then
if is_arch("x64", "x86", "x86_64") then
set_toolchains("nasm")
add_files("libass/x86/*.asm|utils.asm|x86inc.asm")
add_includedirs("libass/x86")
add_defines("ARCH_X86=1", "private_prefix=ass")
if is_arch("x86") then
add_defines("ARCH_X86_64=0", "BITMODE=32")
else
add_defines("ARCH_X86_64=1", "BITMODE=64")
end
if is_plat("windows") and is_arch("x86") then
add_defines("PREFIX")
elseif is_plat("macosx") then
add_defines("PREFIX", "STACK_ALIGNMENT=16")
elseif is_plat("linux") then
add_defines("STACK_ALIGNMENT=16")
end
elseif is_arch("arm64.*", "aarch64") then
add_files("libass/aarch64/*.S")
add_defines("ARCH_AARCH64")
end
end
if has_config("system-font-provider") then
on_config(function (target)
-- directwrite
if target:is_plat("windows", "mingw") and target:has_cincludes("dwrite_c.h") then
if target:check_csnippets([[#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#error Win32 desktop APIs are available
#endif]]) then
target:add("syslinks", "dwrite")
else
target:add("syslinks", "gdi32")
end
if target:kind() == "shared" then
target:add("syslinks", "user32")
end
target:add("files", "libass/ass_directwrite.c")
target:add("defines", "CONFIG_DIRECTWRITE")
end
-- coretext
if target:is_plat("macosx") then
if target:has_cfuncs("CTFontDescriptorCopyAttribute", {includes = "ApplicationServices/ApplicationServices.h"}) then
target:add("frameworks", "ApplicationServices", "CoreFoundation")
target:add("files", "libass/ass_coretext.c")
target:add("defines", "CONFIG_CORETEXT=1")
elseif target:has_cincludes("CoreText/CoreText.h") then
target:add("frameworks", "CoreText", "CoreFoundation")
target:add("files", "libass/ass_coretext.c")
target:add("defines", "CONFIG_CORETEXT=1")
end
end
-- fontconfig
if target:has_cincludes("fontconfig/fontconfig.h") then
target:add("files", "libass/ass_fontconfig.c")
target:add("defines", "CONFIG_FONTCONFIG")
target:add("syslinks", "fontconfig")
end
end)
end
add_headerfiles("libass/ass.h", "libass/ass_types.h", {prefix = "include/libass"})

@ -0,0 +1,32 @@
package("libass")
set_homepage("https://github.com/libass/libass")
set_description("libass is a portable subtitle renderer for the ASS/SSA (Advanced Substation Alpha/Substation Alpha) subtitle format.")
set_license("ISC")
add_urls("https://github.com/libass/libass/releases/download/$(version)/libass-$(version).tar.gz",
"https://github.com/libass/libass.git")
add_versions("0.15.2", "1b2a54dda819ef84fa2dee3069cf99748a886363d2adb630fde87fe046e2d1d5")
add_versions("0.16.0", "fea8019b1887cab9ab00c1e58614b4ec2b1cee339b3f7e446f5fab01b032d430")
add_versions("0.17.0", "72b9ba5d9dd1ac6d30b5962f38cbe7aefb180174f71d8b65c5e3c3060dbc403f")
add_versions("0.17.1", "d653be97198a0543c69111122173c41a99e0b91426f9e17f06a858982c2fb03d")
add_deps("freetype", "fribidi", "harfbuzz", "nasm")
if is_plat("wasm") then
add_configs("shared", {description = "Build shared library.", default = false, type = "boolean", readonly = true})
end
on_install(function (package)
os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
os.cp(path.join(package:scriptdir(), "port", "config.h.in"), "config.h.in")
local configs = {}
if package:config("shared") then
configs.kind = "shared"
end
import("package.tools.xmake").install(package, configs)
end)
on_test(function (package)
assert(package:has_cfuncs("ass_library_init", {includes = "ass.h"}))
end)

@ -24,7 +24,7 @@ package("meson")
-- https://github.com/xmake-io/xmake-repo/issues/1937 -- https://github.com/xmake-io/xmake-repo/issues/1937
set_policy("package.precompiled", false) set_policy("package.precompiled", false)
on_install("@macosx", "@linux", "@windows", "@msys", function (package) on_install("@macosx", "@linux", "@bsd", "@windows", "@msys", function (package)
local envs = {PYTHONPATH = package:installdir()} local envs = {PYTHONPATH = package:installdir()}
local python = package:is_plat("windows") and "python" or "python3" local python = package:is_plat("windows") and "python" or "python3"
os.vrunv(python, {"-m", "pip", "install", "--target=" .. package:installdir(), "."}, {envs = envs}) os.vrunv(python, {"-m", "pip", "install", "--target=" .. package:installdir(), "."}, {envs = envs})

Loading…
Cancel
Save