From a040891a59bb20ec6796b8ae654a7778f60c5151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Wed, 1 Sep 2010 10:11:58 +0200 Subject: [PATCH] - no Firewire on s390(x) - fix building on other arches than x86 and ppc --- jack-audio-connection-kit-1.9.5-64bit.patch | 273 +++++++++++++++++++ jack-audio-connection-kit-1.9.5-atomic.patch | 61 +++++ jack-audio-connection-kit-1.9.5-cycles.patch | 55 ++++ jack-audio-connection-kit.spec | 18 +- 4 files changed, 406 insertions(+), 1 deletion(-) create mode 100644 jack-audio-connection-kit-1.9.5-64bit.patch create mode 100644 jack-audio-connection-kit-1.9.5-atomic.patch create mode 100644 jack-audio-connection-kit-1.9.5-cycles.patch diff --git a/jack-audio-connection-kit-1.9.5-64bit.patch b/jack-audio-connection-kit-1.9.5-64bit.patch new file mode 100644 index 0000000..6ba57dd --- /dev/null +++ b/jack-audio-connection-kit-1.9.5-64bit.patch @@ -0,0 +1,273 @@ +diff -up jack-1.9.5/common/JackAPI.cpp.s390x jack-1.9.5/common/JackAPI.cpp +--- jack-1.9.5/common/JackAPI.cpp.s390x 2010-08-28 15:34:33.000000000 +0200 ++++ jack-1.9.5/common/JackAPI.cpp 2010-08-28 15:35:59.000000000 +0200 +@@ -317,7 +317,7 @@ EXPORT void* jack_port_get_buffer(jack_p + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_get_buffer"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -337,7 +337,7 @@ EXPORT const char* jack_port_name(const + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_name"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -357,7 +357,7 @@ EXPORT const char* jack_port_short_name( + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_short_name"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -377,7 +377,7 @@ EXPORT int jack_port_flags(const jack_po + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_flags"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -397,7 +397,7 @@ EXPORT const char* jack_port_type(const + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_type"); + #endif +- #if defined(__x86_64__) || defined(__ppc64__) ++ #if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -417,7 +417,7 @@ EXPORT jack_port_type_id_t jack_port_typ + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_type_id"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -437,7 +437,7 @@ EXPORT int jack_port_connected(const jac + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_connected"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -458,7 +458,7 @@ EXPORT int jack_port_connected_to(const + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_connected_to"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -488,7 +488,7 @@ EXPORT int jack_port_tie(jack_port_t* sr + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_tie"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t src_aux = (uint64_t)src; + #else + uint32_t src_aux = (uint32_t)src; +@@ -498,7 +498,7 @@ EXPORT int jack_port_tie(jack_port_t* sr + jack_error("jack_port_tie called with a NULL src port"); + return -1; + } +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t dst_aux = (uint64_t)dst; + #else + uint32_t dst_aux = (uint32_t)dst; +@@ -522,7 +522,7 @@ EXPORT int jack_port_untie(jack_port_t* + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_untie"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -542,7 +542,7 @@ EXPORT jack_nframes_t jack_port_get_late + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_get_latency"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -563,7 +563,7 @@ EXPORT void jack_port_set_latency(jack_p + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_set_latency"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -585,7 +585,7 @@ EXPORT int jack_recompute_total_latency( + #endif + + JackClient* client = (JackClient*)ext_client; +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -630,7 +630,7 @@ EXPORT int jack_port_set_name(jack_port_ + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_set_name"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -660,7 +660,7 @@ EXPORT int jack_port_set_alias(jack_port + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_set_alias"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -683,7 +683,7 @@ EXPORT int jack_port_unset_alias(jack_po + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_unset_alias"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -706,7 +706,7 @@ EXPORT int jack_port_get_aliases(const j + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_get_aliases"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -726,7 +726,7 @@ EXPORT int jack_port_request_monitor(jac + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_request_monitor"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -769,7 +769,7 @@ EXPORT int jack_port_ensure_monitor(jack + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_ensure_monitor"); + #endif +- #if defined(__x86_64__) || defined(__ppc64__) ++ #if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -789,7 +789,7 @@ EXPORT int jack_port_monitoring_input(ja + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_monitoring_input"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -1128,7 +1128,7 @@ EXPORT jack_port_t* jack_port_register(j + jack_error("jack_port_register called with a NULL port name or a NULL port_type"); + return NULL; + } else { +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + return (jack_port_t *)((uint64_t)client->PortRegister(port_name, port_type, flags, buffer_size)); + #else + return (jack_port_t *)client->PortRegister(port_name, port_type, flags, buffer_size); +@@ -1146,7 +1146,7 @@ EXPORT int jack_port_unregister(jack_cli + jack_error("jack_port_unregister called with a NULL client"); + return -1; + } +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -1169,7 +1169,7 @@ EXPORT int jack_port_is_mine(const jack_ + jack_error("jack_port_is_mine called with a NULL client"); + return -1; + } +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -1187,7 +1187,7 @@ EXPORT const char** jack_port_get_connec + #ifdef __CLIENTDEBUG__ + JackGlobals::CheckContext("jack_port_get_connections"); + #endif +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -1215,7 +1215,7 @@ EXPORT const char** jack_port_get_all_co + return NULL; + } + +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -1242,7 +1242,7 @@ EXPORT jack_nframes_t jack_port_get_tota + return 0; + } + +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)port; + #else + uint32_t port_aux = (uint32_t)port; +@@ -1307,7 +1307,7 @@ EXPORT int jack_port_disconnect(jack_cli + jack_error("jack_port_disconnect called with a NULL client"); + return -1; + } +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + uint64_t port_aux = (uint64_t)src; + #else + uint32_t port_aux = (uint32_t)src; +@@ -1383,7 +1383,7 @@ EXPORT jack_port_t* jack_port_by_name(ja + if (!manager) + return NULL; + int res = manager->GetPort(portname); // returns a port index at least > 1 +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + return (res == NO_PORT) ? NULL : (jack_port_t*)((uint64_t)res); + #else + return (res == NO_PORT) ? NULL : (jack_port_t*)res; +@@ -1397,7 +1397,7 @@ EXPORT jack_port_t* jack_port_by_id(jack + JackGlobals::CheckContext("jack_port_by_id"); + #endif + /* jack_port_t* type is actually the port index */ +-#if defined(__x86_64__) || defined(__ppc64__) ++#if defined(__x86_64__) || defined(__ppc64__) || defined (__s390x__) + return (jack_port_t*)((uint64_t)id); + #else + return (jack_port_t*)id; diff --git a/jack-audio-connection-kit-1.9.5-atomic.patch b/jack-audio-connection-kit-1.9.5-atomic.patch new file mode 100644 index 0000000..33a00ee --- /dev/null +++ b/jack-audio-connection-kit-1.9.5-atomic.patch @@ -0,0 +1,61 @@ +diff -up jack-1.9.5/linux/JackAtomic_os.h.atomic jack-1.9.5/linux/JackAtomic_os.h +--- jack-1.9.5/linux/JackAtomic_os.h.atomic 2010-08-28 15:23:58.000000000 +0200 ++++ jack-1.9.5/linux/JackAtomic_os.h 2010-09-01 09:29:03.000000000 +0200 +@@ -22,23 +22,23 @@ Foundation, Inc., 59 Temple Place - Suit + + #include "JackTypes.h" + +-#ifdef __PPC__ ++#if defined(__PPC__) + + static inline int CAS(register UInt32 value, register UInt32 newvalue, register volatile void* addr) + { + register int result; + register UInt32 tmp; + asm volatile ( +- "# CAS \n" +- " lwarx %4, 0, %1 \n" // creates a reservation on addr +- " cmpw %4, %2 \n" // test value at addr +- " bne- 1f \n" +- " sync \n" // synchronize instructions +- " stwcx. %3, 0, %1 \n" // if the reservation is not altered ++ "# CAS \n" ++ " lwarx %4, 0, %1 \n" // creates a reservation on addr ++ " cmpw %4, %2 \n" // test value at addr ++ " bne- 1f \n" ++ " sync \n" // synchronize instructions ++ " stwcx. %3, 0, %1 \n" // if the reservation is not altered + // stores the new value at addr +- " bne- 1f \n" ++ " bne- 1f \n" + " li %0, 1 \n" +- " b 2f \n" ++ " b 2f \n" + "1: \n" + " li %0, 0 \n" + "2: \n" +@@ -48,9 +48,7 @@ static inline int CAS(register UInt32 va + return result; + } + +-#endif +- +-#if defined(__i386__) || defined(__x86_64__) ++#elif defined(__i386__) || defined(__x86_64__) + + #define LOCK "lock ; " + +@@ -67,6 +65,13 @@ static inline char CAS(volatile UInt32 v + return ret; + } + ++#else ++ ++static inline int CAS(register UInt32 value, register UInt32 newvalue, register volatile void* addr) ++{ ++ return __sync_val_compare_and_swap((UInt32 *)addr, value, newvalue); ++} ++ + #endif + + #endif diff --git a/jack-audio-connection-kit-1.9.5-cycles.patch b/jack-audio-connection-kit-1.9.5-cycles.patch new file mode 100644 index 0000000..a9d0d95 --- /dev/null +++ b/jack-audio-connection-kit-1.9.5-cycles.patch @@ -0,0 +1,55 @@ +diff -up jack-1.9.5/linux/cycles.h.cycles jack-1.9.5/linux/cycles.h +--- jack-1.9.5/linux/cycles.h.cycles 2010-08-28 16:03:40.000000000 +0200 ++++ jack-1.9.5/linux/cycles.h 2010-08-28 16:05:47.000000000 +0200 +@@ -39,7 +39,7 @@ + + #ifdef __linux__ + +-#ifdef __x86_64__ ++#if defined(__x86_64__) + + typedef unsigned long cycles_t; + extern cycles_t cacheflush_time; +@@ -51,9 +51,7 @@ static inline unsigned long get_cycles(v + return (((unsigned long)hi)<<32) | ((unsigned long)lo); + } + +-#endif +- +-#ifdef __PPC__ ++#elif defined(__PPC__) + + /* PowerPC */ + +@@ -82,9 +80,7 @@ static inline cycles_t get_cycles(void) + return ret; + } + +-#endif +- +-#ifdef __i386__ ++#elif defined(__i386__) + + typedef unsigned long long cycles_t; + +@@ -101,8 +97,19 @@ static inline cycles_t get_cycles (void) + return ret; + } + +-#endif ++#else ++ ++/* fallback solution */ ++typedef unsigned long cycles_t; ++ ++static inline cycles_t get_cycles (void) ++{ ++ return 0; ++} ++ + + #endif + ++#endif /* __linux__ */ ++ + #endif /* __jack_cycles_h__ */ diff --git a/jack-audio-connection-kit.spec b/jack-audio-connection-kit.spec index 1ffc83b..31c633a 100644 --- a/jack-audio-connection-kit.spec +++ b/jack-audio-connection-kit.spec @@ -4,7 +4,7 @@ Summary: The Jack Audio Connection Kit Name: jack-audio-connection-kit Version: 1.9.5 -Release: 1%{?dist} +Release: 2%{?dist} # The entire source (~500 files) is a mixture of these three licenses License: GPLv2 and GPLv2+ and LGPLv2+ Group: System Environment/Daemons @@ -26,6 +26,13 @@ Patch3: jack-manpages.patch Patch4: jack-realtime-compat.patch # Compile against celt-0.8.0 Patch5: jack-celt08.patch +# Use GCC atomic operation for other arches +Patch6: %{name}-1.9.5-atomic.patch +# Treat s390x as 64-bit arch +Patch7: %{name}-1.9.5-64bit.patch +# Add fallback get_cycles() solution +Patch8: %{name}-1.9.5-cycles.patch + BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: alsa-lib-devel @@ -33,8 +40,10 @@ BuildRequires: dbus-devel BuildRequires: celt-devel BuildRequires: doxygen BuildRequires: expat-devel +%ifnarch s390 s390x BuildRequires: libffado-devel BuildRequires: libfreebob-devel +%endif BuildRequires: libsamplerate-devel BuildRequires: libsndfile-devel BuildRequires: ncurses-devel @@ -85,6 +94,9 @@ Small example clients that use the Jack Audio Connection Kit. %if 0%{?fedora} > 13 %patch5 -p1 -b .celt08 %endif +%patch6 -p1 -b .atomic +%patch7 -p1 -b .64bit +%patch8 -p1 -b .cycles # Fix encoding issues for file in ChangeLog README TODO; do @@ -214,6 +226,10 @@ exit 0 %changelog +* Thu Aug 26 2010 Dan HorĂ¡k - 1.9.5-2 +- no Firewire on s390(x) +- fix building on other arches than x86 and ppc + * Mon Jul 19 2010 Orcan Ogetbil - 1.9.5-1 - Jack 2!