diff --git a/ocaml-cairo-fno-common.patch b/ocaml-cairo-fno-common.patch new file mode 100644 index 0000000..68636c5 --- /dev/null +++ b/ocaml-cairo-fno-common.patch @@ -0,0 +1,126 @@ +diff --git a/src/cairo_ocaml.h.p b/src/cairo_ocaml.h.p +index 4192aed..78a02e2 100644 +--- a/src/cairo_ocaml.h.p ++++ b/src/cairo_ocaml.h.p +@@ -25,7 +25,7 @@ + /* cairo_t + ***********************************************************************/ + #define CAIRO_VAL(v) (* (cairo_t **) Data_custom_val(v)) +-struct custom_operations caml_cairo_ops; ++CAMLextern struct custom_operations caml_cairo_ops; + + void caml_cairo_raise_Error(cairo_status_t status); + /* raise [Cairo.Error] if the status indicates a failure. */ +@@ -33,7 +33,7 @@ void caml_cairo_raise_Error(cairo_status_t status); + /* cairo_pattern_t + ***********************************************************************/ + #define PATTERN_VAL(v) (* (cairo_pattern_t **) Data_custom_val(v)) +-struct custom_operations caml_pattern_ops; ++CAMLextern struct custom_operations caml_pattern_ops; + + #define EXTEND_VAL(v) ((cairo_extend_t) Int_val(v)) + #define VAL_EXTEND(v) Val_int(v) +@@ -45,12 +45,12 @@ struct custom_operations caml_pattern_ops; + ***********************************************************************/ + + #define FONT_OPTIONS_VAL(v) (* (cairo_font_options_t**) Data_custom_val(v)) +-struct custom_operations caml_font_options_ops; ++CAMLextern struct custom_operations caml_font_options_ops; + + /* cairo_font_type_t + ***********************************************************************/ + +-value caml_cairo_font_type[5]; ++CAMLextern value caml_cairo_font_type[5]; + + cairo_font_type_t caml_cairo_font_type_val(value vft); + +@@ -61,13 +61,13 @@ cairo_font_type_t caml_cairo_font_type_val(value vft); + ***********************************************************************/ + + #define SCALED_FONT_VAL(v) (* (cairo_scaled_font_t**) Data_custom_val(v)) +-struct custom_operations caml_scaled_font_ops; ++CAMLextern struct custom_operations caml_scaled_font_ops; + + /* cairo_surface_t + ***********************************************************************/ + + #define SURFACE_VAL(v) (* (cairo_surface_t **) Data_custom_val(v)) +-struct custom_operations caml_surface_ops; ++CAMLextern struct custom_operations caml_surface_ops; + + /* Type cairo_content_t */ + +@@ -93,7 +93,7 @@ struct custom_operations caml_surface_ops; + ***********************************************************************/ + + #define PATH_VAL(v) (* (cairo_path_t **) Data_custom_val(v)) +-struct custom_operations caml_path_ops; ++CAMLextern struct custom_operations caml_path_ops; + + #define PATH_DATA_ASSIGN(vdata, data) \ + switch (data->header.type) { \ +@@ -151,10 +151,10 @@ struct custom_operations caml_path_ops; + #include + + #define FT_LIBRARY_VAL(v) (* (FT_Library*) Data_custom_val(v)) +-struct custom_operations caml_cairo_ft_library_ops; ++CAMLextern struct custom_operations caml_cairo_ft_library_ops; + + #define FT_FACE_VAL(v) (* (FT_Face*) Data_custom_val(v)) +-struct custom_operations caml_cairo_ft_face_ops; ++CAMLextern struct custom_operations caml_cairo_ft_face_ops; + + #endif /* OCAML_CAIRO_HAS_FT */ + +diff --git a/src/cairo_ocaml_types.h b/src/cairo_ocaml_types.h +index b850ae2..b036142 100644 +--- a/src/cairo_ocaml_types.h ++++ b/src/cairo_ocaml_types.h +@@ -267,14 +267,6 @@ static intnat caml_cairo_font_options_hash(value v) + return(cairo_font_options_hash(FONT_OPTIONS_VAL(v))); + } + +-struct custom_operations caml_font_options_ops = { +- "font_options_t", /* identifier for serialization and deserialization */ +- &caml_cairo_font_options_finalize, +- &caml_cairo_font_options_compare, +- &caml_cairo_font_options_hash, +- custom_serialize_default, +- custom_deserialize_default }; +- + + /* caml_cairo_font_type is defined in "cairo_ocaml.h". */ + CAMLexport value caml_cairo_font_type_init(value unit) +diff --git a/src/cairo_stubs.c b/src/cairo_stubs.c +index de35aca..60fae71 100644 +--- a/src/cairo_stubs.c ++++ b/src/cairo_stubs.c +@@ -34,6 +34,27 @@ + #include "cairo_macros.h" + #include "cairo_ocaml_types.h" + ++CAMLexport value caml_cairo_font_type[5]; ++ ++CAMLexport struct custom_operations caml_cairo_ops; ++CAMLexport struct custom_operations caml_pattern_ops; ++CAMLexport struct custom_operations caml_scaled_font_ops; ++CAMLexport struct custom_operations caml_surface_ops; ++CAMLexport struct custom_operations caml_path_ops; ++ ++#ifdef OCAML_CAIRO_HAS_FT ++CAMLexport struct custom_operations caml_cairo_ft_library_ops; ++CAMLexport struct custom_operations caml_cairo_ft_face_ops; ++#endif ++ ++CAMLexport struct custom_operations caml_font_options_ops = { ++ "font_options_t", /* identifier for serialization and deserialization */ ++ &caml_cairo_font_options_finalize, ++ &caml_cairo_font_options_compare, ++ &caml_cairo_font_options_hash, ++ custom_serialize_default, ++ custom_deserialize_default }; ++ + /* cairo_t functions. + ***********************************************************************/ + diff --git a/ocaml-cairo.spec b/ocaml-cairo.spec index 515fd90..315247f 100644 --- a/ocaml-cairo.spec +++ b/ocaml-cairo.spec @@ -25,6 +25,9 @@ Source0: %{url}/releases/download/%{version}/cairo2-%{version}.tbz # Avoid a GC-related segfault. See: # https://github.com/Chris00/ocaml-cairo/issues/19 Patch0: %{name}-test.patch +# Fix builds of consuming packages with -fno-common. +# https://github.com/Chris00/ocaml-cairo/pull/20 +Patch1: %{name}-fno-common.patch BuildRequires: ocaml >= 4.02 BuildRequires: ocaml-dune-devel @@ -250,6 +253,7 @@ dune runtest - Add -gtk-devel and -pango-devel subpackages to manage dependencies - Add %%check script - Add -test patch until upstream weighs in on GC issues +- Add -fno-common patch to fix builds of consuming packages with GCC 10 * Sun Jan 19 2020 Richard W.M. Jones - 2:0.4.7-0.28.gitbe5a298 - OCaml 4.10.0+beta1 rebuild.