aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2012-06-08 15:10:18 +0000
committerFelix Fietkau <nbd@openwrt.org>2012-06-08 15:10:18 +0000
commit4d8cd3afc05e15f393be4caf4b605c0cd520732d (patch)
treedc7102ee05dd566babee966d8774096a87596e04
parent15189a628ab2cc18cd5eb62540539ec930984c1f (diff)
downloadupstream-4d8cd3afc05e15f393be4caf4b605c0cd520732d.tar.gz
upstream-4d8cd3afc05e15f393be4caf4b605c0cd520732d.tar.bz2
upstream-4d8cd3afc05e15f393be4caf4b605c0cd520732d.zip
make librpc compatible with eglibc, unconditionally enable it for packages that need rpc support
SVN-Revision: 32129
-rw-r--r--package/busybox/Config.in1
-rw-r--r--package/librpc/Makefile36
-rw-r--r--package/librpc/patches/100-compat_fix.patch203
-rw-r--r--rules.mk4
4 files changed, 207 insertions, 37 deletions
diff --git a/package/busybox/Config.in b/package/busybox/Config.in
index 407e95e1e7..a954a25c8a 100644
--- a/package/busybox/Config.in
+++ b/package/busybox/Config.in
@@ -21,7 +21,6 @@ config BUSYBOX_CONFIG_HUSH
config BUSYBOX_USE_LIBRPC
bool
- depends USE_UCLIBC
default y if BUSYBOX_CONFIG_FEATURE_HAVE_RPC
source "package/busybox/config/Config.in"
diff --git a/package/librpc/Makefile b/package/librpc/Makefile
index 5a46921164..34cedbb4ed 100644
--- a/package/librpc/Makefile
+++ b/package/librpc/Makefile
@@ -9,18 +9,7 @@ PKG_SOURCE_URL:=git://nbd.name/uclibc-rpc.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=0a2179bbc0844928f2a0ec01dba93d9b5d6d41a7
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
-
-ifndef CONFIG_NATIVE_TOOLCHAIN
- ifndef CONFIG_EXTERNAL_TOOLCHAIN
- ifdef CONFIG_USE_UCLIBC
- BUILD_LIBRPC=1
- endif
- endif
-endif
-
-ifdef BUILD_LIBRPC
- CMAKE_INSTALL:=1
-endif
+CMAKE_INSTALL:=1
include $(INCLUDE_DIR)/package.mk
include $(INCLUDE_DIR)/cmake.mk
@@ -29,30 +18,11 @@ define Package/librpc
SECTION:=libs
CATEGORY:=Libraries
TITLE:=uClibc RPC library
- MDEPENDS:=@USE_UCLIBC
endef
-ifdef BUILD_LIBRPC
- define Package/librpc/install
+define Package/librpc/install
$(INSTALL_DIR) $(1)/lib/
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/librpc.so $(1)/lib/
- endef
-else
- define Build/Prepare
- endef
-
- define Build/Configure
- endef
-
- define Build/Compile
- endef
-
- define Build/Install
- endef
-
- define Package/librpc/install
- true
- endef
-endif
+endef
$(eval $(call BuildPackage,librpc))
diff --git a/package/librpc/patches/100-compat_fix.patch b/package/librpc/patches/100-compat_fix.patch
new file mode 100644
index 0000000000..6040567c31
--- /dev/null
+++ b/package/librpc/patches/100-compat_fix.patch
@@ -0,0 +1,203 @@
+--- a/compat.h
++++ /dev/null
+@@ -1,32 +0,0 @@
+-#ifndef __UCLIBC_COMPAT_H
+-#define __UCLIBC_COMPAT_H
+-
+-#define _XOPEN_SOURCE
+-#define _GNU_SOURCE
+-
+-#include <features.h>
+-#include <errno.h>
+-
+-#undef __UCLIBC_HAS_THREADS__
+-#include <bits/uClibc_mutex.h>
+-#include <sys/poll.h>
+-
+-#if 0
+-#undef __UCLIBC_MUTEX_LOCK
+-#undef __UCLIBC_MUTEX_UNLOCK
+-#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M))
+-#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M))
+-#endif
+-
+-#define smallint int
+-
+-#define _(...) __VA_ARGS__
+-#define internal_function
+-#define attribute_hidden
+-#define attribute_unused
+-#define attribute_noreturn
+-#define libc_hidden_def(...)
+-
+-#define __set_errno(_val) errno = _val
+-
+-#endif
+--- a/rcmd.c
++++ b/rcmd.c
+@@ -85,7 +85,6 @@ static char sccsid[] = "@(#)rcmd.c 8.3 (
+ #include <wchar.h>
+ #endif
+ #include <sys/uio.h>
+-#include <bits/uClibc_alloc.h>
+
+
+ /* some forward declarations */
+--- a/create_xid.c
++++ b/create_xid.c
+@@ -28,7 +28,6 @@
+
+ /* The RPC code is not threadsafe, but new code should be threadsafe. */
+
+-#include <bits/uClibc_mutex.h>
+ __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+
+ static smallint is_initialized;
+--- a/getrpcent.c
++++ b/getrpcent.c
+@@ -257,7 +257,6 @@ static struct rpcent *interpret(register
+
+ #if defined(__UCLIBC_HAS_REENTRANT_RPC__)
+
+-#include <bits/uClibc_mutex.h>
+ __UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,7 +1,7 @@
+ cmake_minimum_required(VERSION 2.6)
+
+ PROJECT(rpc C)
+-ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include compat.h)
++ADD_DEFINITIONS(-Os -Wall --std=gnu99 -g3 -I. -include rpc/compat.h)
+
+ FILE(GLOB SOURCES *.c)
+
+--- a/rpc/types.h
++++ b/rpc/types.h
+@@ -33,6 +33,8 @@
+ #ifndef _RPC_TYPES_H
+ #define _RPC_TYPES_H 1
+
++#include "compat.h"
++
+ #ifdef _LIBC
+ /* Some adjustments to make the libc source from glibc
+ * compile more easily with uClibc... */
+--- a/clnt_perror.c
++++ b/clnt_perror.c
+@@ -246,7 +246,7 @@ clnt_sperror (CLIENT * rpch, const char
+
+ case RPC_CANTSEND:
+ case RPC_CANTRECV:
+- __glibc_strerror_r (e.re_errno, chrbuf, sizeof chrbuf);
++ strerror_r (e.re_errno, chrbuf, sizeof chrbuf);
+ len = sprintf (str, "; errno = %s", chrbuf);
+ str += len;
+ break;
+@@ -336,7 +336,7 @@ clnt_spcreateerror (const char *msg)
+ (void) strcpy(cp, " - ");
+ cp += strlen(cp);
+
+- __glibc_strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
++ strerror_r (ce->cf_error.re_errno, chrbuf, sizeof chrbuf);
+ (void) strcpy(cp, chrbuf);
+ cp += strlen(cp);
+ break;
+--- a/rpc_thread.c
++++ b/rpc_thread.c
+@@ -13,9 +13,6 @@
+
+ #ifdef __UCLIBC_HAS_THREADS__
+
+-#include <bits/libc-tsd.h>
+-#include <bits/libc-lock.h>
+-
+ /* Variable used in non-threaded applications or for the first thread. */
+ static struct rpc_thread_variables __libc_tsd_RPC_VARS_mem;
+ __libc_tsd_define (, RPC_VARS)
+@@ -52,16 +49,17 @@ rpc_thread_multi (void)
+ __libc_tsd_set (RPC_VARS, &__libc_tsd_RPC_VARS_mem);
+ }
+
++__UCLIBC_MUTEX_STATIC(mylock, PTHREAD_MUTEX_INITIALIZER);
+
+ struct rpc_thread_variables attribute_hidden *
+ __rpc_thread_variables (void)
+ {
+- __libc_once_define (static, once);
+ struct rpc_thread_variables *tvp;
+
++ __UCLIBC_MUTEX_LOCK(mylock);
+ tvp = __libc_tsd_get (RPC_VARS);
+ if (tvp == NULL) {
+- __libc_once (once, rpc_thread_multi);
++ rpc_thread_multi();
+ tvp = __libc_tsd_get (RPC_VARS);
+ if (tvp == NULL) {
+ tvp = calloc (1, sizeof *tvp);
+@@ -71,6 +69,7 @@ __rpc_thread_variables (void)
+ tvp = __libc_tsd_get (RPC_VARS);
+ }
+ }
++ __UCLIBC_MUTEX_UNLOCK(mylock);
+ return tvp;
+ }
+
+--- /dev/null
++++ b/rpc/compat.h
+@@ -0,0 +1,53 @@
++#ifndef __UCLIBC_COMPAT_H
++#define __UCLIBC_COMPAT_H
++
++#define _XOPEN_SOURCE
++#define _GNU_SOURCE
++
++#include <features.h>
++#include <errno.h>
++
++#ifndef __UCLIBC_HAS_THREADS__
++#define __UCLIBC_HAS_THREADS__
++#endif
++
++#include <sys/poll.h>
++#include <pthread.h>
++
++#ifdef __UCLIBC__
++#include <bits/libc-lock.h>
++#else
++#undef __UCLIBC_MUTEX_STATIC
++#undef __UCLIBC_MUTEX_LOCK
++#undef __UCLIBC_MUTEX_UNLOCK
++#define __UCLIBC_MUTEX_STATIC(M,I) static pthread_mutex_t M = I
++#define __UCLIBC_MUTEX_LOCK(M) pthread_mutex_lock(&(M))
++#define __UCLIBC_MUTEX_UNLOCK(M) pthread_mutex_unlock(&(M))
++#endif
++
++#define smallint int
++
++#define _(...) __VA_ARGS__
++#define internal_function
++#define attribute_hidden
++#define attribute_unused
++#define attribute_noreturn
++#define libc_hidden_def(...)
++
++#ifndef libc_hidden_proto
++#define libc_hidden_proto(name, attrs...)
++#endif
++
++#define __set_errno(_val) errno = _val
++
++# define attribute_tls_model_ie __attribute__ ((tls_model ("initial-exec")))
++
++# define __libc_tsd_define(CLASS, KEY) \
++ CLASS __thread void *__libc_tsd_##KEY attribute_tls_model_ie;
++
++# define __libc_tsd_address(KEY) (&__libc_tsd_##KEY)
++# define __libc_tsd_get(KEY) (__libc_tsd_##KEY)
++# define __libc_tsd_set(KEY, VALUE) (__libc_tsd_##KEY = (VALUE))
++
++
++#endif
diff --git a/rules.mk b/rules.mk
index 73a015e7a0..83bc622166 100644
--- a/rules.mk
+++ b/rules.mk
@@ -119,10 +119,8 @@ else
LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a)
LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A))
endif
-ifdef CONFIG_USE_UCLIBC
LIBRPC=-lrpc
-endif
-LIBRPC_DEPENDS=+USE_UCLIBC:librpc
+LIBRPC_DEPENDS=+librpc
ifndef DUMP
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)