Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37766959
en ru br
Репозитории ALT

Группа :: Система/Библиотеки
Пакет: libxmp

 Главная   Изменения   Спек   Патчи   Sources   Загрузить   Gear   Bugs and FR  Repocop 

Патч: libxmp-fix-lto.patch
Скачать


diff -up libxmp-4.5.0/configure.ac.lto libxmp-4.5.0/configure.ac
--- libxmp-4.5.0/configure.ac.lto	2021-06-10 02:24:24.000000000 +0200
+++ libxmp-4.5.0/configure.ac	2021-06-22 23:29:00.766506145 +0200
@@ -118,24 +118,34 @@ XMP_TRY_COMPILE(whether compiler underst
 __attribute__((visibility("default"))) int foo(void);
 __attribute__((visibility("hidden")))  int bar(void);
 int foo(void) { return 0; }
-int bar(void) { return 1; }],
-    [CFLAGS="${old_CFLAGS} -fvisibility=hidden -DXMP_SYM_VISIBILITY"
-     LD_VERSCRIPT="-Wl,--version-script,libxmp.map"],
-    [CFLAGS="${old_CFLAGS}"])]
-  )
-dnl we want symbol -fvisibility for elf targets, however it works
-dnl with darwin/macho too.  other than that, windows, dos, os/2,
-dnl amiga do not want it:  for any such targets, the -Werror switch
-dnl is should fail the above check, but it does not.  adding the
-dnl manual test below for that, instead.
+int bar(void) { return 1; }])]
+)
 case $host_os in
     mingw*|cygwin*|emx*|*djgpp|amigaos*|aros*|morphos*)
-	CFLAGS="${old_CFLAGS}"
 	if test $ac_cv_c_flag_f_visibility_hidden = yes; then
 	  AC_MSG_NOTICE([ignoring -fvisibility flags for $host_os])
 	fi
+	ac_cv_c_flag_f_visibility_hidden=no
 	;;
 esac
+if test $ac_cv_c_flag_f_visibility_hidden = no; then
+   CFLAGS="${old_CFLAGS}"
+else
+   CFLAGS="${old_CFLAGS} -fvisibility=hidden -DXMP_SYM_VISIBILITY"
+   LD_VERSCRIPT="-Wl,--version-script,libxmp.map"
+
+dnl https://github.com/libxmp/libxmp/issues/385
+   old_CFLAGS="${CFLAGS}"
+   if test $ac_cv_c_flag_w_all = yes; then
+      CFLAGS="${CFLAGS} -Werror"
+   fi
+   XMP_TRY_COMPILE(whether compiler understands externally_visible attribute,
+    ac_cv_c_attribute_visibility_external,[],[
+__attribute__((visibility("default"),externally_visible)) int foo(void);
+int foo(void) { return 0; }],
+    [CFLAGS="${old_CFLAGS} -DHAVE_EXTERNAL_VISIBILITY"],
+    [CFLAGS="${old_CFLAGS}"])
+fi
 
 dnl for clang
 XMP_TRY_COMPILE(whether compiler understands -Wunknown-warning-option,
diff -up libxmp-4.5.0/configure.lto libxmp-4.5.0/configure
--- libxmp-4.5.0/configure.lto	2021-06-10 02:24:28.000000000 +0200
+++ libxmp-4.5.0/configure	2021-06-22 23:29:24.327699205 +0200
@@ -4128,22 +4140,60 @@ fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_flag_f_visibility_hidden" >&5
 $as_echo "$ac_cv_c_flag_f_visibility_hidden" >&6; }
   if test "x$ac_cv_c_flag_f_visibility_hidden" = xyes; then :
-  CFLAGS="${old_CFLAGS} -fvisibility=hidden -DXMP_SYM_VISIBILITY"
-     LD_VERSCRIPT="-Wl,--version-script,libxmp.map"
-else
-  CFLAGS="${old_CFLAGS}"
+
 fi
 
 fi
 case $host_os in
     mingw*|cygwin*|emx*|*djgpp|amigaos*|aros*|morphos*)
-	CFLAGS="${old_CFLAGS}"
 	if test $ac_cv_c_flag_f_visibility_hidden = yes; then
 	  { $as_echo "$as_me:${as_lineno-$LINENO}: ignoring -fvisibility flags for $host_os" >&5
 $as_echo "$as_me: ignoring -fvisibility flags for $host_os" >&6;}
 	fi
+	ac_cv_c_flag_f_visibility_hidden=no
 	;;
 esac
+if test $ac_cv_c_flag_f_visibility_hidden = no; then
+   CFLAGS="${old_CFLAGS}"
+else
+   CFLAGS="${old_CFLAGS} -fvisibility=hidden -DXMP_SYM_VISIBILITY"
+   LD_VERSCRIPT="-Wl,--version-script,libxmp.map"
+
+   old_CFLAGS="${CFLAGS}"
+   if test $ac_cv_c_flag_w_all = yes; then
+      CFLAGS="${CFLAGS} -Werror"
+   fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler understands externally_visible attribute" >&5
+$as_echo_n "checking whether compiler understands externally_visible attribute... " >&6; }
+if ${ac_cv_c_attribute_visibility_external+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    oldcflags="${CFLAGS}"
+    CFLAGS="${CFLAGS} "
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+__attribute__((visibility("default"),externally_visible)) int foo(void);
+int foo(void) { return 0; }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_attribute_visibility_external=yes
+else
+  ac_cv_c_attribute_visibility_external=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    CFLAGS="${oldcflags}"
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_attribute_visibility_external" >&5
+$as_echo "$ac_cv_c_attribute_visibility_external" >&6; }
+  if test "x$ac_cv_c_attribute_visibility_external" = xyes; then :
+  CFLAGS="${old_CFLAGS} -DHAVE_EXTERNAL_VISIBILITY"
+else
+  CFLAGS="${old_CFLAGS}"
+fi
+fi
 
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler understands -Wunknown-warning-option" >&5
diff -up libxmp-4.5.0/src/common.h.lto libxmp-4.5.0/src/common.h
--- libxmp-4.5.0/src/common.h.lto	2021-06-10 02:24:24.000000000 +0200
+++ libxmp-4.5.0/src/common.h	2021-06-22 23:29:00.766506145 +0200
@@ -24,6 +24,11 @@
 #if (defined(__GNUC__) || defined(__clang__)) && defined(XMP_SYM_VISIBILITY)
 #if !defined(_WIN32) && !defined(__ANDROID__) && !defined(__APPLE__) && !defined(LIBXMP_AMIGA) && !defined(__MSDOS__) && !defined(B_BEOS_VERSION) && !defined(__ATHEOS__) && !defined(EMSCRIPTEN) && !defined(__MINT__)
 #define USE_VERSIONED_SYMBOLS
+#ifdef HAVE_EXTERNAL_VISIBILITY
+#define LIBXMP_EXPORT_VERSIONED __attribute__((visibility("default"),externally_visible))
+#else
+#define LIBXMP_EXPORT_VERSIONED __attribute__((visibility("default")))
+#endif
 #endif
 #endif
 
diff -up libxmp-4.5.0/src/control.c.lto libxmp-4.5.0/src/control.c
--- libxmp-4.5.0/src/control.c.lto	2021-06-10 02:24:24.000000000 +0200
+++ libxmp-4.5.0/src/control.c	2021-06-22 23:29:00.766506145 +0200
@@ -309,12 +309,12 @@ int xmp_channel_vol(xmp_context opaque,
 }
 
 #ifdef USE_VERSIONED_SYMBOLS
-LIBXMP_EXPORT extern int xmp_set_player_v40__(xmp_context, int, int);
-LIBXMP_EXPORT extern int xmp_set_player_v41__(xmp_context, int, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_set_player_v40__(xmp_context, int, int);
+LIBXMP_EXPORT_VERSIONED extern int xmp_set_player_v41__(xmp_context, int, int)
 			__attribute__((alias("xmp_set_player_v40__")));
-LIBXMP_EXPORT extern int xmp_set_player_v43__(xmp_context, int, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_set_player_v43__(xmp_context, int, int)
 			__attribute__((alias("xmp_set_player_v40__")));
-LIBXMP_EXPORT extern int xmp_set_player_v44__(xmp_context, int, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_set_player_v44__(xmp_context, int, int)
 			__attribute__((alias("xmp_set_player_v40__")));
 
 asm(".symver xmp_set_player_v40__, xmp_set_player@XMP_4.0");
@@ -427,14 +427,14 @@ int xmp_set_player__(xmp_context opaque,
 }
 
 #ifdef USE_VERSIONED_SYMBOLS
-LIBXMP_EXPORT extern int xmp_get_player_v40__(xmp_context, int);
-LIBXMP_EXPORT extern int xmp_get_player_v41__(xmp_context, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_get_player_v40__(xmp_context, int);
+LIBXMP_EXPORT_VERSIONED extern int xmp_get_player_v41__(xmp_context, int)
 		__attribute__((alias("xmp_get_player_v40__")));
-LIBXMP_EXPORT extern int xmp_get_player_v42__(xmp_context, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_get_player_v42__(xmp_context, int)
 		__attribute__((alias("xmp_get_player_v40__")));
-LIBXMP_EXPORT extern int xmp_get_player_v43__(xmp_context, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_get_player_v43__(xmp_context, int)
 		__attribute__((alias("xmp_get_player_v40__")));
-LIBXMP_EXPORT extern int xmp_get_player_v44__(xmp_context, int)
+LIBXMP_EXPORT_VERSIONED extern int xmp_get_player_v44__(xmp_context, int)
 		__attribute__((alias("xmp_get_player_v40__")));
 
 asm(".symver xmp_get_player_v40__, xmp_get_player@XMP_4.0");
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin