ソースを参照

improve cario (#343)

* fix cairo

* switch to xmake build for cairo

* fix defines

* fix pthread

* improve cario

Co-authored-by: xq114 <[email protected]>
ruki 4 年 前
コミット
3d5ead0bf6

+ 27 - 0
packages/c/cairo/port/cairo-features.h.in

@@ -0,0 +1,27 @@
+#ifndef CAIRO_FEATURES_H
+#define CAIRO_FEATURES_H
+
+#ifdef _WIN32
+#define CAIRO_HAS_WIN32_SURFACE 1
+#define CAIRO_HAS_WIN32_FONT 1
+#endif
+
+#define CAIRO_HAS_PNG_FUNCTIONS 1
+#define CAIRO_HAS_PS_SURFACE 1
+#define CAIRO_HAS_PDF_SURFACE 1
+
+#define CAIRO_HAS_SCRIPT_SURFACE 1
+#define CAIRO_HAS_SVG_SURFACE 1
+
+#define CAIRO_HAS_IMAGE_SURFACE 1
+#define CAIRO_HAS_MIME_SURFACE 1
+#define CAIRO_HAS_RECORDING_SURFACE 1
+#define CAIRO_HAS_OBSERVER_SURFACE 1
+#define CAIRO_HAS_USER_FONT 1
+
+#define CAIRO_HAS_GOBJECT_FUNCTIONS 0
+
+#define CAIRO_HAS_FT_FONT ${FT_ON}
+#define CAIRO_HAS_FC_FONT ${FT_ON}
+
+#endif

+ 221 - 0
packages/c/cairo/port/xmake.lua

@@ -0,0 +1,221 @@
+add_rules("mode.debug", "mode.release")
+add_requires("zlib", "libpng", "pixman")
+
+option("with_x11")
+    set_default(is_plat("linux") and true or false)
+    add_defines("CAIRO_HAS_XLIB_SURFACE=1")
+option_end()
+if has_config("with_x11") then
+    add_requires("libxrender")
+end
+
+option("with_freetype")
+    set_default(is_plat("linux") and true or false)
+    add_defines(
+        "HAVE_FT_GLYPHSLOT_EMBOLDEN=1",
+        "HAVE_FT_LIBRARY_SETLCDFILTER=1",
+        "HAVE_FT_GLYPHSLOT_OBLIQUE=1",
+        "HAVE_FT_LOAD_SFNT_TABLE=1",
+        "HAVE_FT_GET_X11_FONT_FORMAT=1",
+        "CAIRO_HAS_FT_FONT=1",
+        "CAIRO_HAS_FC_FONT=1"
+    )
+option_end()
+if has_config("with_freetype") then
+    add_requires("freetype", "fontconfig")
+end
+
+target("cairo")
+    set_kind("$(kind)")
+    add_packages("zlib", "libpng", "pixman")
+    add_includedirs("$(projectdir)")
+    add_includedirs("$(projectdir)/src")
+    if is_plat("windows") then
+        if is_kind("static") then
+            add_defines("CAIRO_WIN32_STATIC_BUILD=1")
+        end
+        add_syslinks("gdi32", "msimg32", "user32")
+    elseif is_plat("macosx") then
+        add_frameworks("CoreGraphics", "CoreFoundation")
+    elseif is_plat("linux") then
+        add_cxflags("pthread")
+    end
+
+    if is_plat("windows") then
+        add_includedirs("$(projectdir)/src/win32")
+        add_files(
+            "src/win32/cairo-win32-debug.c",
+            "src/win32/cairo-win32-device.c",
+            "src/win32/cairo-win32-gdi-compositor.c",
+            "src/win32/cairo-win32-system.c",
+            "src/win32/cairo-win32-surface.c",
+            "src/win32/cairo-win32-display-surface.c",
+            "src/win32/cairo-win32-printing-surface.c",
+            "src/win32/cairo-win32-font.c"
+        )
+    else
+        add_defines(
+            "HAVE_INTTYPES_H=1",
+            "HAVE_STDINT_H=1",
+            "HAVE_SYS_TYPES_H=1",
+            "HAVE_UINT64_T=1",
+            "HAVE_UNISTD_H=1",
+            "CAIRO_HAS_PTHREAD=1",
+            "CAIRO_HAS_REAL_PTHREAD=1"
+        )
+    end
+
+    -- set_configvar("FT_ON", has_config("with_freetype") and 1 or 0)
+    -- add_configfiles("cairo-features.h.in", {prefixdir = "$(projectdir)"})
+    add_headerfiles(
+        "src/cairo.h",
+        "src/cairo-deprecated.h",
+        "src/cairo-pdf.h",
+        "src/cairo-ps.h",
+        "src/cairo-script.h",
+        "src/cairo-svg.h",
+        "src/cairo-win32.h",
+        "src/cairo-ft.h",
+        "src/cairo-xlib.h",
+        "cairo-features.h",
+        "cairo-version.h",
+        "util/cairo-gobject/cairo-gobject.h",
+        {prefixdir = "cairo"}
+    )
+    add_files(
+        "src/cairo-analysis-surface.c",
+        "src/cairo-arc.c",
+        "src/cairo-array.c",
+        "src/cairo-atomic.c",
+        "src/cairo-base64-stream.c",
+        "src/cairo-base85-stream.c",
+        "src/cairo-bentley-ottmann.c",
+        "src/cairo-bentley-ottmann-rectangular.c",
+        "src/cairo-bentley-ottmann-rectilinear.c",
+        "src/cairo-botor-scan-converter.c",
+        "src/cairo-boxes.c",
+        "src/cairo-boxes-intersect.c",
+        "src/cairo.c",
+        "src/cairo-cache.c",
+        "src/cairo-clip.c",
+        "src/cairo-clip-boxes.c",
+        "src/cairo-clip-polygon.c",
+        "src/cairo-clip-region.c",
+        "src/cairo-clip-surface.c",
+        "src/cairo-color.c",
+        "src/cairo-composite-rectangles.c",
+        "src/cairo-compositor.c",
+        "src/cairo-contour.c",
+        "src/cairo-damage.c",
+        "src/cairo-debug.c",
+        "src/cairo-default-context.c",
+        "src/cairo-device.c",
+        "src/cairo-error.c",
+        "src/cairo-fallback-compositor.c",
+        "src/cairo-fixed.c",
+        "src/cairo-font-face.c",
+        "src/cairo-font-face-twin.c",
+        "src/cairo-font-face-twin-data.c",
+        "src/cairo-font-options.c",
+        "src/cairo-freelist.c",
+        "src/cairo-freed-pool.c",
+        "src/cairo-gstate.c",
+        "src/cairo-hash.c",
+        "src/cairo-hull.c",
+        "src/cairo-image-compositor.c",
+        "src/cairo-image-info.c",
+        "src/cairo-image-source.c",
+        "src/cairo-image-surface.c",
+        "src/cairo-line.c",
+        "src/cairo-lzw.c",
+        "src/cairo-matrix.c",
+        "src/cairo-mask-compositor.c",
+        "src/cairo-mesh-pattern-rasterizer.c",
+        "src/cairo-mempool.c",
+        "src/cairo-misc.c",
+        "src/cairo-mono-scan-converter.c",
+        "src/cairo-mutex.c",
+        "src/cairo-no-compositor.c",
+        "src/cairo-observer.c",
+        "src/cairo-output-stream.c",
+        "src/cairo-paginated-surface.c",
+        "src/cairo-path-bounds.c",
+        "src/cairo-path.c",
+        "src/cairo-path-fill.c",
+        "src/cairo-path-fixed.c",
+        "src/cairo-path-in-fill.c",
+        "src/cairo-path-stroke.c",
+        "src/cairo-path-stroke-boxes.c",
+        "src/cairo-path-stroke-polygon.c",
+        "src/cairo-path-stroke-traps.c",
+        "src/cairo-path-stroke-tristrip.c",
+        "src/cairo-pattern.c",
+        "src/cairo-pen.c",
+        "src/cairo-polygon.c",
+        "src/cairo-polygon-intersect.c",
+        "src/cairo-polygon-reduce.c",
+        "src/cairo-raster-source-pattern.c",
+        "src/cairo-recording-surface.c",
+        "src/cairo-rectangle.c",
+        "src/cairo-rectangular-scan-converter.c",
+        "src/cairo-region.c",
+        "src/cairo-rtree.c",
+        "src/cairo-scaled-font.c",
+        "src/cairo-shape-mask-compositor.c",
+        "src/cairo-slope.c",
+        "src/cairo-spans.c",
+        "src/cairo-spans-compositor.c",
+        "src/cairo-spline.c",
+        "src/cairo-stroke-dash.c",
+        "src/cairo-stroke-style.c",
+        "src/cairo-surface.c",
+        "src/cairo-surface-clipper.c",
+        "src/cairo-surface-fallback.c",
+        "src/cairo-surface-observer.c",
+        "src/cairo-surface-offset.c",
+        "src/cairo-surface-snapshot.c",
+        "src/cairo-surface-subsurface.c",
+        "src/cairo-surface-wrapper.c",
+        "src/cairo-time.c",
+        "src/cairo-tor-scan-converter.c",
+        "src/cairo-tor22-scan-converter.c",
+        "src/cairo-clip-tor-scan-converter.c",
+        "src/cairo-tag-attributes.c",
+        "src/cairo-tag-stack.c",
+        "src/cairo-toy-font-face.c",
+        "src/cairo-traps.c",
+        "src/cairo-tristrip.c",
+        "src/cairo-traps-compositor.c",
+        "src/cairo-unicode.c",
+        "src/cairo-user-font.c",
+        "src/cairo-version.c",
+        "src/cairo-wideint.c",
+        -- generic font support
+        "src/cairo-cff-subset.c",
+        "src/cairo-scaled-font-subsets.c",
+        "src/cairo-truetype-subset.c",
+        "src/cairo-type1-fallback.c",
+        "src/cairo-type1-glyph-names.c",
+        "src/cairo-type1-subset.c",
+        "src/cairo-type3-glyph-surface.c",
+        -- pdf
+        "src/cairo-pdf-interchange.c",
+        "src/cairo-pdf-operators.c",
+        "src/cairo-pdf-shading.c",
+        "src/cairo-pdf-surface.c",
+        -- png
+        "src/cairo-png.c",
+        -- ps surface
+        "src/cairo-ps-surface.c",
+        -- deflate source
+        "src/cairo-deflate-stream.c",
+        -- svg surface
+        "src/cairo-svg-surface.c",
+        -- script surface
+        "src/cairo-script-surface.c"
+    )
+    if has_config("with_freetype") then
+        add_files("src/cairo-ft-font.c")
+        add_packages("freetype", "fontconfig")
+    end
+target_end()

+ 15 - 40
packages/c/cairo/xmake.lua

@@ -6,55 +6,30 @@ package("cairo")
     set_urls("https://cairographics.org/releases/cairo-$(version).tar.xz")
     add_versions("1.16.0", "5e7b29b3f113ef870d1e3ecf8adf21f923396401604bda16d44be45e66052331")
 
-    if is_plat("windows") then
-        add_deps("make", "libpng", "pixman", "zlib")
-    else
-        add_deps("pkg-config", "fontconfig", "freetype", "libpng", "pixman")
+    add_deps("libpng", "pixman", "zlib")
+    if is_plat("linux") then
+        add_deps("freetype", "fontconfig")
     end
 
-    if is_plat("macosx") then
-        add_frameworks("CoreGraphics", "CoreFoundation", "Foundation")
-    elseif is_plat("windows") then
-        add_defines("CAIRO_WIN32_STATIC_BUILD=1")
+    if is_plat("windows") then
         add_syslinks("gdi32", "msimg32", "user32")
-    else
+    elseif is_plat("macosx") then
+        add_frameworks("CoreGraphics", "CoreFoundation")
+    elseif is_plat("linux") then
         add_syslinks("pthread")
     end
 
-    on_install("windows", function (package)
-        import("core.tool.toolchain")
-        local runenvs = toolchain.load("msvc"):runenvs()
-        io.gsub("build/Makefile.win32.common", "%-MD", "-" .. package:config("vs_runtime"))
-        io.gsub("build/Makefile.win32.common", "mkdir %-p", "xmake l mkdir")
-        io.gsub("build/Makefile.win32.common", "dirname", "xmake l path.directory")
-        io.gsub("build/Makefile.win32.common", "link", "echo")
-        io.gsub("src/Makefile.win32", "%$%(PIXMAN_LIBS%)", "")
-        local pixman = package:dep("pixman")
-        if pixman then
-            io.gsub("build/Makefile.win32.common", "%$%(PIXMAN_CFLAGS%)", "-I\"" .. pixman:installdir("include/pixman-1") .. "\"")
-        end
-        local libpng = package:dep("libpng")
-        if libpng then
-            io.gsub("build/Makefile.win32.common", "%$%(LIBPNG_CFLAGS%)", "-I\"" .. libpng:installdir("include") .. "\"")
-        end
-        local zlib = package:dep("zlib")
-        if zlib then
-            io.gsub("build/Makefile.win32.common", "%$%(ZLIB_CFLAGS%)", "-I\"" .. zlib:installdir("include") .. "\"")
+    on_load("windows", function (package)
+        if not package:config("shared") then 
+            package:add("defines", "CAIRO_WIN32_STATIC_BUILD=1")
         end
-        os.vrunv("make", {"-f", "Makefile.win32", "CFG=" .. (package:debug() and "debug" or "release")}, {envs = runenvs})
-        os.cp("src/*.h", package:installdir("include/cairo"))
-        os.cp("src/**.lib", package:installdir("lib"))
     end)
 
-    on_install("macosx", "linux", function (package)
-        local configs = {"--disable-dependency-tracking", "--enable-shared=no"}
-        table.insert(configs, "--enable-gobject=no")
-        table.insert(configs, "--enable-svg=yes")
-        table.insert(configs, "--enable-tee=yes")
-        table.insert(configs, "--enable-quartz=no")
-        table.insert(configs, "--enable-xlib=" .. (is_plat("macosx") and "no" or "yes"))
-        table.insert(configs, "--enable-xlib-xrender=" .. (is_plat("macosx") and "no" or "yes"))
-        import("package.tools.autoconf").install(package, configs)
+    on_install("windows", "macosx", "linux", function (package)
+        os.cp(path.join(package:scriptdir(), "port", "xmake.lua"), "xmake.lua")
+        os.cp(path.join(package:scriptdir(), "port", "cairo-features.h.in"), "cairo-features.h")
+        io.replace("cairo-features.h", "${FT_ON}", (package:is_plat("linux") and "1" or "0"), {plain = true})
+        import("package.tools.xmake").install(package, {kind = package:config("shared") and "shared" or "static"})
     end)
 
     on_test(function (package)

+ 1 - 1
packages/l/libtiff/xmake.lua

@@ -7,7 +7,7 @@ package("libtiff")
              "https://fossies.org/linux/misc/tiff-$(version).tar.gz")
     add_versions("4.1.0", "5d29f32517dadb6dbcd1255ea5bbc93a2b54b94fbf83653b4d65c7d6775b8634")
 
-    add_deps("zlib")
+    add_deps("zlib", "libjpeg")
     if is_plat("windows", "mingw") then
         add_deps("cmake")
     end

+ 1 - 4
packages/m/make/xmake.lua

@@ -8,6 +8,7 @@ package("make")
              "https://mirrors.ustc.edu.cn/gnu/make/make-$(version).tar.gz",
              "http://mirror.easyname.at/gnu/make/make-$(version).tar.gz")
     add_versions("4.2.1", "e40b8f018c1da64edd1cc9a6fce5fa63b2e707e404e20cad91fbae337c98a5b7")
+    add_versions("4.3", "e05fdde47c5f7ca45cb697e973894ff4f5d79e13b750ed57d7b66d8defc78e19")
 
     on_install("@windows", function(package)
         import("core.tool.toolchain")
@@ -17,10 +18,6 @@ package("make")
     end)
 
     on_install("@macosx", "@linux", function (package)
-        -- fix undefined reference to `__alloca'
-        if is_subhost("linux") then
-            io.replace("glob/glob.c", "!defined __alloca && !defined __GNU_LIBRARY__", "1")
-        end
         import("package.tools.autoconf").install(package, {"--disable-dependency-tracking", "--disable-gtk", "--disable-silent-rules"})
     end)
 

+ 1 - 0
packages/p/pixman/xmake.lua

@@ -5,6 +5,7 @@ package("pixman")
 
     set_urls("https://cairographics.org/releases/pixman-$(version).tar.gz")
     add_versions("0.38.0", "a7592bef0156d7c27545487a52245669b00cf7e70054505381cff2136d890ca8")
+    add_versions("0.40.0", "6d200dec3740d9ec4ec8d1180e25779c00bc749f94278c8b9021f5534db223fc")
 
     if is_plat("windows") then
         add_deps("make")

+ 2 - 2
packages/p/python/xmake.lua

@@ -83,8 +83,8 @@ package("python")
         os.mv("*.exe", package:installdir("bin"))
         os.mv("*.dll", package:installdir("bin"))
         os.mv("Lib", package:installdir())
-        os.mv("libs/*", package:installdir("lib"))
-        os.cp("*|libs", package:installdir())
+        os.cp("libs/*", package:installdir("lib"))
+        os.cp("*", package:installdir())
         local python = path.join(package:installdir("bin"), "python.exe")
         os.vrunv(python, {"-m", "pip", "install", "wheel"})
     end)