diff --git a/fontconfig-ocloexec.patch b/fontconfig-ocloexec.patch new file mode 100644 index 0000000..051ba62 --- /dev/null +++ b/fontconfig-ocloexec.patch @@ -0,0 +1,60 @@ +--- configure.in.orig ++++ configure.in +@@ -58,7 +58,9 @@ dnl ==================================== + + AM_CONFIG_HEADER(config.h) + +-AC_PROG_CC ++AC_PROG_CC_STDC ++AC_USE_SYSTEM_EXTENSIONS ++AC_SYS_LARGEFILE + AC_PROG_INSTALL + AC_PROG_LN_S + AC_LIBTOOL_WIN32_DLL +@@ -168,7 +170,7 @@ AC_TYPE_PID_T + # Checks for library functions. + AC_FUNC_VPRINTF + AC_FUNC_MMAP +-AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48]) ++AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp mkostemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48]) + + # + # Checks for iconv +--- src/fcatomic.c.orig ++++ src/fcatomic.c +@@ -107,10 +107,14 @@ FcAtomicLock (FcAtomic *atomic) + #ifdef HAVE_LINK + strcpy ((char *) atomic->tmp, (char *) atomic->file); + strcat ((char *) atomic->tmp, TMP_NAME); ++#ifdef HAVE_MKOSTEMP ++ fd = mkostemp ((char *) atomic->tmp, O_CLOEXEC); ++#else + fd = mkstemp ((char *) atomic->tmp); ++#endif + if (fd < 0) + return FcFalse; +- f = fdopen (fd, "w"); ++ f = fdopen (fd, "we"); + if (!f) + { + close (fd); +--- src/fccache.c.orig ++++ src/fccache.c +@@ -202,7 +202,7 @@ FcDirCacheOpenFile (const FcChar8 *cache + if (FcStat (cache_file, file_stat) < 0) + return -1; + #endif +- fd = open((char *) cache_file, O_RDONLY | O_BINARY); ++ fd = open((char *) cache_file, O_RDONLY | O_BINARY | O_CLOEXEC); + if (fd < 0) + return fd; + #ifndef _WIN32 +@@ -909,7 +909,7 @@ FcDirCacheWrite (FcCache *cache, FcConfi + if (!FcAtomicLock (atomic)) + goto bail3; + +- fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666); ++ fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY | O_CLOEXEC, 0666); + if (fd == -1) + goto bail4; + diff --git a/fontconfig-visibility.patch b/fontconfig-visibility.patch new file mode 100644 index 0000000..10e121a --- /dev/null +++ b/fontconfig-visibility.patch @@ -0,0 +1,121 @@ +--- configure.in.orig ++++ configure.in +@@ -36,7 +36,7 @@ dnl not possible to extract the version + AM_INIT_AUTOMAKE(fontconfig, 2.8.0) + m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + AM_MAINTAINER_MODE +- ++AC_CONFIG_MACRO_DIR([m4]) + dnl libtool versioning + + dnl bump revision when fixing bugs +@@ -67,7 +67,7 @@ AC_LIBTOOL_WIN32_DLL + AM_PROG_LIBTOOL + DOLT + AC_PROG_MAKE_SET +- ++gl_VISIBILITY + dnl ========================================================================== + + case "$host" in +--- /dev/null ++++ m4/visibility.m4 +@@ -0,0 +1,78 @@ ++# visibility.m4 serial 4 (gettext-0.18.2) ++dnl Copyright (C) 2005, 2008, 2010-2011 Free Software Foundation, Inc. ++dnl This file is free software; the Free Software Foundation ++dnl gives unlimited permission to copy and/or distribute it, ++dnl with or without modifications, as long as this notice is preserved. ++ ++dnl From Bruno Haible. ++ ++dnl Tests whether the compiler supports the command-line option ++dnl -fvisibility=hidden and the function and variable attributes ++dnl __attribute__((__visibility__("hidden"))) and ++dnl __attribute__((__visibility__("default"))). ++dnl Does *not* test for __visibility__("protected") - which has tricky ++dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on ++dnl MacOS X. ++dnl Does *not* test for __visibility__("internal") - which has processor ++dnl dependent semantics. ++dnl Does *not* test for #pragma GCC visibility push(hidden) - which is ++dnl "really only recommended for legacy code". ++dnl Set the variable CFLAG_VISIBILITY. ++dnl Defines and sets the variable HAVE_VISIBILITY. ++ ++AC_DEFUN([gl_VISIBILITY], ++[ ++ AC_REQUIRE([AC_PROG_CC]) ++ CFLAG_VISIBILITY= ++ HAVE_VISIBILITY=0 ++ if test -n "$GCC"; then ++ dnl First, check whether -Werror can be added to the command line, or ++ dnl whether it leads to an error because of some other option that the ++ dnl user has put into $CC $CFLAGS $CPPFLAGS. ++ AC_MSG_CHECKING([whether the -Werror option is usable]) ++ AC_CACHE_VAL([gl_cv_cc_vis_werror], [ ++ gl_save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -Werror" ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM([[]], [[]])], ++ [gl_cv_cc_vis_werror=yes], ++ [gl_cv_cc_vis_werror=no]) ++ CFLAGS="$gl_save_CFLAGS"]) ++ AC_MSG_RESULT([$gl_cv_cc_vis_werror]) ++ dnl Now check whether visibility declarations are supported. ++ AC_MSG_CHECKING([for simple visibility declarations]) ++ AC_CACHE_VAL([gl_cv_cc_visibility], [ ++ gl_save_CFLAGS="$CFLAGS" ++ CFLAGS="$CFLAGS -fvisibility=hidden" ++ dnl We use the option -Werror and a function dummyfunc, because on some ++ dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning ++ dnl "visibility attribute not supported in this configuration; ignored" ++ dnl at the first function definition in every compilation unit, and we ++ dnl don't want to use the option in this case. ++ if test $gl_cv_cc_vis_werror = yes; then ++ CFLAGS="$CFLAGS -Werror" ++ fi ++ AC_COMPILE_IFELSE( ++ [AC_LANG_PROGRAM( ++ [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; ++ extern __attribute__((__visibility__("default"))) int exportedvar; ++ extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); ++ extern __attribute__((__visibility__("default"))) int exportedfunc (void); ++ void dummyfunc (void) {} ++ ]], ++ [[]])], ++ [gl_cv_cc_visibility=yes], ++ [gl_cv_cc_visibility=no]) ++ CFLAGS="$gl_save_CFLAGS"]) ++ AC_MSG_RESULT([$gl_cv_cc_visibility]) ++ if test $gl_cv_cc_visibility = yes; then ++ CFLAG_VISIBILITY="-fvisibility=hidden" ++ HAVE_VISIBILITY=1 ++ AC_DEFINE([FcPublic], [__attribute__((__visibility__("default")))], [Makes symbol visible]) ++ fi ++ fi ++ AC_SUBST([CFLAG_VISIBILITY]) ++ AC_SUBST([HAVE_VISIBILITY]) ++ AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], ++ [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ++]) +--- src/Makefile.am.orig ++++ src/Makefile.am +@@ -125,6 +125,7 @@ libfontconfig_la_SOURCES = \ + + lib_LTLIBRARIES = libfontconfig.la + ++libfontconfig_la_CFLAGS = $(CFLAG_VISIBILITY) + libfontconfig_la_LDFLAGS = \ + -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) + +--- Makefile.am.orig ++++ Makefile.am +@@ -21,6 +21,7 @@ + # TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + # PERFORMANCE OF THIS SOFTWARE. + ++ACLOCAL_AMFLAGS = -I m4 + DOCSRC=@DOCSRC@ + SUBDIRS=fontconfig fc-case fc-lang fc-glyphname fc-arch src \ + fc-cache fc-cat fc-list fc-match fc-query fc-scan conf.d $(DOCSRC) test diff --git a/fontconfig.changes b/fontconfig.changes index 339f90b..422486a 100644 --- a/fontconfig.changes +++ b/fontconfig.changes @@ -1,3 +1,10 @@ +------------------------------------------------------------------- +Sun Nov 6 16:00:40 UTC 2011 - crrodriguez@opensuse.org + +- Support symbol visibility features +- Use O_CLOEXEC where needed in libfontconfig, callers may fork() + and we end up leaking library internal fds to their child processes. + ------------------------------------------------------------------- Tue Oct 25 10:28:47 UTC 2011 - pgajdos@suse.com diff --git a/fontconfig.spec b/fontconfig.spec index f474ed0..fa3c22e 100644 --- a/fontconfig.spec +++ b/fontconfig.spec @@ -69,6 +69,8 @@ Patch31: bugzilla-246783-do-not-crash-when-config-files-contain-broken-st Patch32: usr-share-doc-packages.patch Patch33: bnc438855-make-FcInitReinitialize-work-again.patch Patch34: urw-aliases-whitespaces.patch +Patch35: fontconfig-ocloexec.patch +Patch36: fontconfig-visibility.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -115,8 +117,11 @@ accepts font patterns and returns the nearest matching font. %patch32 -p1 %patch33 -p1 %patch34 -p1 +%patch35 +%patch36 %build +autoreconf -fiv %configure --with-pic --with-arch=%_host_cpu \ %if %suse_version > 1100 --disable-static \ @@ -132,7 +137,7 @@ accepts font patterns and returns the nearest matching font. %else # %endif -make %{?_smp_mflags} +make %{?_smp_mflags} V=1 %check export MALLOC_CHECK_=2