aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rules.mk1
-rw-r--r--tools/Makefile2
-rw-r--r--tools/fakeroot/Makefile20
-rw-r--r--tools/fakeroot/patches/100-portability.patch112
4 files changed, 134 insertions, 1 deletions
diff --git a/rules.mk b/rules.mk
index 479172de03..45d96d6be4 100644
--- a/rules.mk
+++ b/rules.mk
@@ -264,6 +264,7 @@ endif
BUILD_KEY=$(TOPDIR)/key-build
+FAKEROOT:=$(STAGING_DIR_HOST)/bin/fakeroot
TARGET_CC:=$(TARGET_CROSS)gcc
TARGET_CXX:=$(TARGET_CROSS)g++
KPATCH:=$(SCRIPT_DIR)/patch-kernel.sh
diff --git a/tools/Makefile b/tools/Makefile
index 9bae09ece6..f038c90ba9 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -26,7 +26,7 @@ tools-y += m4 libtool autoconf autoconf-archive automake flex bison pkgconf mkli
tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage
tools-y += firmware-utils patch-image quilt padjffs2
tools-y += mm-macros missing-macros cmake bc findutils gengetopt patchelf
-tools-y += mtools dosfstools libressl
+tools-y += mtools dosfstools libressl fakeroot
tools-$(CONFIG_TARGET_orion_generic) += wrt350nv2-builder upslug2
tools-$(CONFIG_TARGET_x86) += qemu
tools-$(CONFIG_TARGET_mxs) += elftosb sdimage
diff --git a/tools/fakeroot/Makefile b/tools/fakeroot/Makefile
new file mode 100644
index 0000000000..2df893d64d
--- /dev/null
+++ b/tools/fakeroot/Makefile
@@ -0,0 +1,20 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=fakeroot
+PKG_VERSION:=1.24
+
+PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
+PKG_SOURCE_URL:=http://deb.debian.org/debian/pool/main/f/fakeroot
+PKG_HASH:=2e045b3160370b8ab4d44d1f8d267e5d1d555f1bb522d650e7167b09477266ed
+
+include $(INCLUDE_DIR)/host-build.mk
+
+HOST_CONFIGURE_VARS += \
+ ac_cv_header_sys_capability_h=no \
+ ac_cv_func_capset=no
+
+$(eval $(call HostBuild))
diff --git a/tools/fakeroot/patches/100-portability.patch b/tools/fakeroot/patches/100-portability.patch
new file mode 100644
index 0000000000..3835a7792b
--- /dev/null
+++ b/tools/fakeroot/patches/100-portability.patch
@@ -0,0 +1,112 @@
+--- a/libfakeroot.c
++++ b/libfakeroot.c
+@@ -110,8 +110,16 @@
+ #define INT_NEXT_FSTATAT(a,b,c,d) NEXT_FSTATAT(_STAT_VER,a,b,c,d)
+ #define INT_SEND_STAT(a,b) SEND_STAT(a,b,_STAT_VER)
+ #define INT_SEND_GET_XATTR(a,b) SEND_GET_XATTR(a,b,_STAT_VER)
++
++/* 10.10 uses id_t in getpriority/setpriority calls, so pretend
++ id_t is used everywhere, just happens to be int on some OSes */
++#ifndef _ID_T
++#define _ID_T
++typedef int id_t;
++#endif
+ #endif
+
++#include <sys/types.h>
+ #include <stdlib.h>
+ #include <sys/ipc.h>
+ #include <sys/msg.h>
+@@ -123,7 +131,6 @@
+ #include <unistd.h>
+ #include <dirent.h>
+ #include <errno.h>
+-#include <sys/types.h>
+ #ifdef HAVE_SYS_ACL_H
+ #include <sys/acl.h>
+ #endif /* HAVE_SYS_ACL_H */
+@@ -1894,7 +1901,7 @@ ssize_t fremovexattr(int fd, const char
+ }
+ #endif /* HAVE_FREMOVEXATTR */
+
+-int setpriority(int which, int who, int prio){
++int setpriority(int which, id_t who, int prio){
+ if (fakeroot_disabled)
+ return next_setpriority(which, who, prio);
+ next_setpriority(which, who, prio);
+@@ -2426,3 +2433,19 @@ int sysinfo(int command, char *buf, long
+ }
+ }
+ #endif
++
++#ifdef HAVE_OPENAT
++int openat(int dir_fd, const char *pathname, int flags, ...)
++{
++ mode_t mode;
++
++ if (flags & O_CREAT) {
++ va_list args;
++ va_start(args, flags);
++ mode = va_arg(args, int);
++ va_end(args);
++ }
++
++ return next_openat(dir_fd, pathname, flags, mode);
++}
++#endif
+--- a/wrapfunc.inp
++++ b/wrapfunc.inp
+@@ -145,7 +145,7 @@ setfsgid;gid_t;(gid_t fsgid);(fsgid)
+ #endif /* HAVE_SETFSGID */
+ initgroups;int;(const char *user, INITGROUPS_SECOND_ARG group);(user, group)
+ setgroups;int;(SETGROUPS_SIZE_TYPE size, const gid_t *list);(size, list)
+-setpriority;int;(int which, int who, int prio);(which, who, prio)
++setpriority;int;(int which, id_t who, int prio);(which, who, prio)
+ #ifdef HAVE_CAPSET
+ capset;int;(cap_user_header_t hdrp, const cap_user_data_t datap);(hdrp, datap)
+ #endif /* HAVE_CAPSET */
+@@ -197,7 +197,7 @@ fchownat;int;(int dir_fd, const char *pa
+ mkdirat;int;(int dir_fd, const char *pathname, mode_t mode);(dir_fd, pathname, mode)
+ #endif /* HAVE_MKDIRAT */
+ #ifdef HAVE_OPENAT
+-openat;int;(int dir_fd, const char *pathname, int flags);(dir_fd, pathname, flags)
++openat;int;(int dir_fd, const char *pathname, int flags, mode_t mode);(dir_fd, pathname, flags, mode);;(int dir_fd, const char *pathname, int flags, ...)
+ #endif /* HAVE_OPENAT */
+ #ifdef HAVE_RENAMEAT
+ renameat;int;(int olddir_fd, const char *oldpath, int newdir_fd, const char *newpath);(olddir_fd, oldpath, newdir_fd, newpath)
+--- a/wrapawk_macosx
++++ b/wrapawk_macosx
+@@ -46,26 +46,30 @@ BEGIN{
+ argtype=$3;
+ argname=$4;
+ MACRO=$5;
++ argtype_def=$6
++ if(!argtype_def) {
++ argtype_def = argtype
++ }
+ if(MACRO){
+ print "extern " ret " MY_DEF(" name ")" argtype " __attribute__((visibility(\"hidden\")));" > headerfile;
+ print "INTERPOSE(MY_DEF(" name "_RAW)," name "_RAW);" > structfile;
+ print "#undef " name > deffile
+ print "#define " name " MY_DEF(" name "_RAW)" > deffile
+
+- print "extern " ret, name, argtype ";" > tmpffile;
++ print "extern " ret, name, argtype_def ";" > tmpffile;
+ print "static __inline__ " ret " NEXT_" MACRO "_NOARG " argtype " __attribute__((always_inline));" > tmpffile;
+ print "static __inline__ " ret " NEXT_" MACRO "_NOARG " argtype " {" > tmpffile;
+ print " return " name, argname ";" > tmpffile;
+ print "}" > tmpffile;
+ print "" > tmpffile;
+ } else {
+- print "extern " ret " my_" name, argtype " __attribute__((visibility(\"hidden\")));" > headerfile;
++ print "extern " ret " my_" name, argtype_def " __attribute__((visibility(\"hidden\")));" > headerfile;
+ print "#undef " name > structfile;
+ print "INTERPOSE(my_" name "," name ");" > structfile;
+ print "#define " name " my_" name > structfile
+ print "#define " name " my_" name > deffile
+
+- print "extern " ret, name, argtype ";" > tmpffile;
++ print "extern " ret, name, argtype_def ";" > tmpffile;
+ if(argname){
+ print "static __inline__ " ret " next_" name, argtype " __attribute__((always_inline));" > tmpffile;
+ print "static __inline__ " ret " next_" name, argtype " {" > tmpffile;