Allow overriding symbol visibility.

Fontconfig symbols were hardcoded to be either hidden or exported.  This patch
adds configurable symbol visibility.  This is useful for projects that want to
do in-tree fontconfig builds and not export any symbols, otherwise they would
conflict with the system library's symbols

Chromium is a project that does in-tree fontconfig builds, and the workaround
currently used is "#define visibility(x) // nothing" [1] and building with
"-fvisibility=hidden".
[1] https://cs.chromium.org/chromium/src/third_party/fontconfig/BUILD.gn?rcl=ce146f1f300988c960e1eecf8a61b238d6fd7f7f&l=62
This commit is contained in:
Tom Anderson 2018-01-03 11:42:45 -08:00 committed by Behdad Esfahbod
parent 37fb4a989e
commit b8a225b3c3
2 changed files with 10 additions and 3 deletions

View File

@ -123,5 +123,12 @@ _FcObjectSetVapBuild_bail0: \
; \
}
#endif /* _FCPRIVATE_H_ */
#ifndef FC_ATTRIBUTE_VISIBILITY_HIDDEN
#define FC_ATTRIBUTE_VISIBILITY_HIDDEN __attribute((visibility("hidden")))
#endif
#ifndef FC_ATTRIBUTE_VISIBILITY_EXPORT
#define FC_ATTRIBUTE_VISIBILITY_EXPORT __attribute((visibility("default")))
#endif
#endif /* _FCPRIVATE_H_ */

View File

@ -14,7 +14,7 @@ while read name; do
;;
*)
alias="IA__$name"
hattr='__attribute((visibility("hidden")))'
hattr='FC_ATTRIBUTE_VISIBILITY_HIDDEN'
echo "extern __typeof ($name) $alias $hattr;" >> $HEAD
echo "#define $name $alias" >> $HEAD
ifdef=`grep -l '^'$name'[ (]' "$SRCDIR"/*.c | sed -n 1p | sed -e 's/^.*\/\([^.]*\)\.c/__\1__/'`
@ -28,7 +28,7 @@ while read name; do
last=$ifdef
fi
echo "# undef $name" >> $TAIL
cattr='__attribute((alias("'$alias'"), visibility("default")))'
cattr='__attribute((alias("'$alias'"))) FC_ATTRIBUTE_VISIBILITY_EXPORT'
echo "extern __typeof ($name) $name $cattr;" >> $TAIL
;;
esac