make librpc compatible with eglibc, unconditionally enable it for packages that need rpc support
SVN-Revision: 32129
This commit is contained in:
parent
15189a628a
commit
4d8cd3afc0
4 changed files with 207 additions and 37 deletions
|
@ -21,7 +21,6 @@ config BUSYBOX_CONFIG_HUSH
|
||||||
|
|
||||||
config BUSYBOX_USE_LIBRPC
|
config BUSYBOX_USE_LIBRPC
|
||||||
bool
|
bool
|
||||||
depends USE_UCLIBC
|
|
||||||
default y if BUSYBOX_CONFIG_FEATURE_HAVE_RPC
|
default y if BUSYBOX_CONFIG_FEATURE_HAVE_RPC
|
||||||
|
|
||||||
source "package/busybox/config/Config.in"
|
source "package/busybox/config/Config.in"
|
||||||
|
|
|
@ -9,18 +9,7 @@ PKG_SOURCE_URL:=git://nbd.name/uclibc-rpc.git
|
||||||
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
|
||||||
PKG_SOURCE_VERSION:=0a2179bbc0844928f2a0ec01dba93d9b5d6d41a7
|
PKG_SOURCE_VERSION:=0a2179bbc0844928f2a0ec01dba93d9b5d6d41a7
|
||||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
|
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
|
CMAKE_INSTALL:=1
|
||||||
endif
|
|
||||||
|
|
||||||
include $(INCLUDE_DIR)/package.mk
|
include $(INCLUDE_DIR)/package.mk
|
||||||
include $(INCLUDE_DIR)/cmake.mk
|
include $(INCLUDE_DIR)/cmake.mk
|
||||||
|
@ -29,30 +18,11 @@ define Package/librpc
|
||||||
SECTION:=libs
|
SECTION:=libs
|
||||||
CATEGORY:=Libraries
|
CATEGORY:=Libraries
|
||||||
TITLE:=uClibc RPC library
|
TITLE:=uClibc RPC library
|
||||||
MDEPENDS:=@USE_UCLIBC
|
|
||||||
endef
|
endef
|
||||||
|
|
||||||
ifdef BUILD_LIBRPC
|
|
||||||
define Package/librpc/install
|
define Package/librpc/install
|
||||||
$(INSTALL_DIR) $(1)/lib/
|
$(INSTALL_DIR) $(1)/lib/
|
||||||
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/librpc.so $(1)/lib/
|
$(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/librpc.so $(1)/lib/
|
||||||
endef
|
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
|
|
||||||
|
|
||||||
$(eval $(call BuildPackage,librpc))
|
$(eval $(call BuildPackage,librpc))
|
||||||
|
|
203
package/librpc/patches/100-compat_fix.patch
Normal file
203
package/librpc/patches/100-compat_fix.patch
Normal file
|
@ -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
|
4
rules.mk
4
rules.mk
|
@ -119,10 +119,8 @@ else
|
||||||
LIBGCC_A=$(wildcard $(TOOLCHAIN_DIR)/lib/gcc/*/*/libgcc.a)
|
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))
|
LIBGCC_S=$(if $(wildcard $(TOOLCHAIN_DIR)/lib/libgcc_s.so),-L$(TOOLCHAIN_DIR)/lib -lgcc_s,$(LIBGCC_A))
|
||||||
endif
|
endif
|
||||||
ifdef CONFIG_USE_UCLIBC
|
|
||||||
LIBRPC=-lrpc
|
LIBRPC=-lrpc
|
||||||
endif
|
LIBRPC_DEPENDS=+librpc
|
||||||
LIBRPC_DEPENDS=+USE_UCLIBC:librpc
|
|
||||||
|
|
||||||
ifndef DUMP
|
ifndef DUMP
|
||||||
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),)
|
||||||
|
|
Loading…
Reference in a new issue