diff --git a/src/hb-common.cc b/src/hb-common.cc index 243c2163ef169bb4955301de9ffff05a8ee91d0a..8ec269eb107a46f557b6c68d3ec4ce3d4530aafd 100644 --- a/src/hb-common.cc +++ b/src/hb-common.cc @@ -1069,3 +1069,12 @@ hb_variation_to_string (hb_variation_t *variation, memcpy (buf, s, len); buf[len] = '\0'; } + +/* If there is no visibility control, then hb-static.cc will NOT + * define anything. Instead, we get it to define one set in here + * only, so only libharfbuzz.so defines them, not other libs. */ +#ifdef HB_NO_VISIBILITY +#undef HB_NO_VISIBILITY +#include "hb-static.cc" +#define HB_NO_VISIBILITY 1 +#endif diff --git a/src/hb-private.hh b/src/hb-private.hh index ddb256f80d52a7e85d47a56f3bbcaf734e16da33..37a2eb8deb9b397db6bbddbaaf8f83d646a8cf02 100644 --- a/src/hb-private.hh +++ b/src/hb-private.hh @@ -375,16 +375,8 @@ typedef uint64_t hb_vector_size_impl_t; #define HB_NULL_POOL_SIZE 264 -#ifdef HB_NO_VISIBILITY -static -#else extern HB_INTERNAL -#endif -hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] -#ifdef HB_NO_VISIBILITY -= {} -#endif -; +hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)]; /* Generic nul-content Null objects. */ template @@ -413,16 +405,8 @@ static_assert (Namespace::Type::min_size + 1 <= sizeof (_Null##Type), "Null pool * for correct operation. It only exist to catch and divert program logic bugs instead of * causing bad memory access. So, races there are not actually introducing incorrectness * in the code. Has ~12kb binary size overhead to have it, also clang build fails with it. */ -#ifdef HB_NO_VISIBILITY -static -#else extern HB_INTERNAL -#endif -/*thread_local*/ hb_vector_size_impl_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] -#ifdef HB_NO_VISIBILITY -= {} -#endif -; +/*thread_local*/ hb_vector_size_impl_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)]; /* CRAP pool: Common Region for Access Protection. */ template diff --git a/src/hb-static.cc b/src/hb-static.cc index 729b242c56ba22d895331d3b1c28d9a599560f18..bc4bf547d3c78c056f5d88dbcb6fca3b60dfe4a7 100644 --- a/src/hb-static.cc +++ b/src/hb-static.cc @@ -31,9 +31,9 @@ #include "hb-ot-maxp-table.hh" #ifndef HB_NO_VISIBILITY + hb_vector_size_impl_t const _hb_NullPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] = {}; /*thread_local*/ hb_vector_size_impl_t _hb_CrapPool[(HB_NULL_POOL_SIZE + sizeof (hb_vector_size_impl_t) - 1) / sizeof (hb_vector_size_impl_t)] = {}; -#endif void hb_face_t::load_num_glyphs (void) const @@ -52,3 +52,5 @@ hb_face_t::load_upem (void) const upem = head_table->get_upem (); hb_blob_destroy (head_blob); } + +#endif