File libxdiff-0.22-visibility.patch of Package libxdiff0

Index: xdiff/xdiff.h
===================================================================
--- xdiff/xdiff.h.orig	2006-10-29 01:24:22.000000000 +0200
+++ xdiff/xdiff.h	2009-10-08 23:04:35.000000000 +0200
@@ -43,7 +43,9 @@ extern "C" {
 #define XDL_BDOP_CPY 2
 #define XDL_BDOP_INSB 3
 
-
+#ifndef XDIFF_API
+#define XDIFF_API
+#endif
 
 typedef struct s_memallocator {
 	void *priv;
@@ -89,42 +91,42 @@ typedef struct s_bdiffparam {
 } bdiffparam_t;
 
 
-int xdl_set_allocator(memallocator_t const *malt);
-void *xdl_malloc(unsigned int size);
-void xdl_free(void *ptr);
-void *xdl_realloc(void *ptr, unsigned int size);
-
-int xdl_init_mmfile(mmfile_t *mmf, long bsize, unsigned long flags);
-void xdl_free_mmfile(mmfile_t *mmf);
-int xdl_mmfile_iscompact(mmfile_t *mmf);
-int xdl_seek_mmfile(mmfile_t *mmf, long off);
-long xdl_read_mmfile(mmfile_t *mmf, void *data, long size);
-long xdl_write_mmfile(mmfile_t *mmf, void const *data, long size);
-long xdl_writem_mmfile(mmfile_t *mmf, mmbuffer_t *mb, int nbuf);
-void *xdl_mmfile_writeallocate(mmfile_t *mmf, long size);
-long xdl_mmfile_ptradd(mmfile_t *mmf, char *ptr, long size, unsigned long flags);
-long xdl_copy_mmfile(mmfile_t *mmf, long size, xdemitcb_t *ecb);
-void *xdl_mmfile_first(mmfile_t *mmf, long *size);
-void *xdl_mmfile_next(mmfile_t *mmf, long *size);
-long xdl_mmfile_size(mmfile_t *mmf);
-int xdl_mmfile_cmp(mmfile_t *mmf1, mmfile_t *mmf2);
-int xdl_mmfile_compact(mmfile_t *mmfo, mmfile_t *mmfc, long bsize, unsigned long flags);
+XDIFF_API int xdl_set_allocator(memallocator_t const *malt);
+XDIFF_API void *xdl_malloc(unsigned int size);
+XDIFF_API void xdl_free(void *ptr);
+XDIFF_API void *xdl_realloc(void *ptr, unsigned int size);
+
+XDIFF_API int xdl_init_mmfile(mmfile_t *mmf, long bsize, unsigned long flags);
+XDIFF_API void xdl_free_mmfile(mmfile_t *mmf);
+XDIFF_API int xdl_mmfile_iscompact(mmfile_t *mmf);
+XDIFF_API int xdl_seek_mmfile(mmfile_t *mmf, long off);
+XDIFF_API long xdl_read_mmfile(mmfile_t *mmf, void *data, long size);
+XDIFF_API long xdl_write_mmfile(mmfile_t *mmf, void const *data, long size);
+XDIFF_API long xdl_writem_mmfile(mmfile_t *mmf, mmbuffer_t *mb, int nbuf);
+XDIFF_API void *xdl_mmfile_writeallocate(mmfile_t *mmf, long size);
+XDIFF_API long xdl_mmfile_ptradd(mmfile_t *mmf, char *ptr, long size, unsigned long flags);
+XDIFF_API long xdl_copy_mmfile(mmfile_t *mmf, long size, xdemitcb_t *ecb);
+XDIFF_API void *xdl_mmfile_first(mmfile_t *mmf, long *size);
+XDIFF_API void *xdl_mmfile_next(mmfile_t *mmf, long *size);
+XDIFF_API long xdl_mmfile_size(mmfile_t *mmf);
+XDIFF_API int xdl_mmfile_cmp(mmfile_t *mmf1, mmfile_t *mmf2);
+XDIFF_API int xdl_mmfile_compact(mmfile_t *mmfo, mmfile_t *mmfc, long bsize, unsigned long flags);
 
-int xdl_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
+XDIFF_API int xdl_diff(mmfile_t *mf1, mmfile_t *mf2, xpparam_t const *xpp,
 	     xdemitconf_t const *xecfg, xdemitcb_t *ecb);
-int xdl_patch(mmfile_t *mf, mmfile_t *mfp, int mode, xdemitcb_t *ecb,
+XDIFF_API int xdl_patch(mmfile_t *mf, mmfile_t *mfp, int mode, xdemitcb_t *ecb,
 	      xdemitcb_t *rjecb);
 
-int xdl_merge3(mmfile_t *mmfo, mmfile_t *mmf1, mmfile_t *mmf2, xdemitcb_t *ecb,
+XDIFF_API int xdl_merge3(mmfile_t *mmfo, mmfile_t *mmf1, mmfile_t *mmf2, xdemitcb_t *ecb,
 	       xdemitcb_t *rjecb);
 
-int xdl_bdiff_mb(mmbuffer_t *mmb1, mmbuffer_t *mmb2, bdiffparam_t const *bdp, xdemitcb_t *ecb);
-int xdl_bdiff(mmfile_t *mmf1, mmfile_t *mmf2, bdiffparam_t const *bdp, xdemitcb_t *ecb);
-int xdl_rabdiff_mb(mmbuffer_t *mmb1, mmbuffer_t *mmb2, xdemitcb_t *ecb);
-int xdl_rabdiff(mmfile_t *mmf1, mmfile_t *mmf2, xdemitcb_t *ecb);
-long xdl_bdiff_tgsize(mmfile_t *mmfp);
-int xdl_bpatch(mmfile_t *mmf, mmfile_t *mmfp, xdemitcb_t *ecb);
-int xdl_bpatch_multi(mmbuffer_t *base, mmbuffer_t *mbpch, int n, xdemitcb_t *ecb);
+XDIFF_API int xdl_bdiff_mb(mmbuffer_t *mmb1, mmbuffer_t *mmb2, bdiffparam_t const *bdp, xdemitcb_t *ecb);
+XDIFF_API int xdl_bdiff(mmfile_t *mmf1, mmfile_t *mmf2, bdiffparam_t const *bdp, xdemitcb_t *ecb);
+XDIFF_API int xdl_rabdiff_mb(mmbuffer_t *mmb1, mmbuffer_t *mmb2, xdemitcb_t *ecb);
+XDIFF_API int xdl_rabdiff(mmfile_t *mmf1, mmfile_t *mmf2, xdemitcb_t *ecb);
+XDIFF_API long xdl_bdiff_tgsize(mmfile_t *mmfp);
+XDIFF_API int xdl_bpatch(mmfile_t *mmf, mmfile_t *mmfp, xdemitcb_t *ecb);
+XDIFF_API int xdl_bpatch_multi(mmbuffer_t *base, mmbuffer_t *mbpch, int n, xdemitcb_t *ecb);
 
 
 #ifdef __cplusplus
Index: configure.in
===================================================================
--- configure.in.orig	2009-10-08 22:59:29.000000000 +0200
+++ configure.in	2009-10-08 23:12:02.000000000 +0200
@@ -26,6 +26,44 @@ AC_C_BIGENDIAN
 dnl Checks for library functions.
 AC_CHECK_FUNCS(memset memcmp memchr memcpy strlen malloc free realloc)
 
+dnl ************************************************************
+dnl Enable hiding of internal symbols in library to reduce its size and
+dnl speed dynamic linking of applications.  This currently is only supported
+dnl on gcc >= 4.0 and SunPro C.
+dnl
+AC_MSG_CHECKING([whether to enable hidden symbols in the library])
+AC_ARG_ENABLE(hidden-symbols,
+AC_HELP_STRING([--enable-hidden-symbols],[Hide internal symbols in library])
+AC_HELP_STRING([--disable-hidden-symbols],[Leave all symbols with default visibility in library]),
+[ case "$enableval" in
+  no)
+       AC_MSG_RESULT(no)
+       ;;
+  *)
+       AC_MSG_CHECKING([whether $CC supports it])
+       if test "$GCC" = yes ; then
+         if $CC --help --verbose 2>&1 | grep fvisibility= > /dev/null ; then
+           AC_MSG_RESULT(yes)
+           AC_DEFINE(XDIFF_API, [__attribute__ ((visibility ("default")))], [to make a symbol visible])
+           CFLAGS="$CFLAGS -fvisibility=hidden"
+         else
+            AC_MSG_RESULT(no)
+          fi
+
+       else
+         dnl Test for SunPro cc
+         if $CC 2>&1 | grep flags >/dev/null && $CC -flags | grep xldscope= >/dev/null ; then
+           AC_MSG_RESULT(yes)
+           AC_DEFINE(XDIFF_API, [__global], [to make a symbol visible])
+           CFLAGS="$CFLAGS -xldscope=hidden"
+         else
+           AC_MSG_RESULT(no)
+         fi
+       fi
+       ;;
+  esac ],
+       AC_MSG_RESULT(no)
+)
 
 AC_CONFIG_FILES([
 	Makefile
openSUSE Build Service is sponsored by