summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-05-27 12:06:40 +0000
committerkib <kib@FreeBSD.org>2017-05-27 12:06:40 +0000
commit73489f5c62c59fdad87b9b0b3f43cff74ba2f3b5 (patch)
tree26ff946da593dc2c9cc2904a51931ec8efb98bb0
parent722784c054e915fdeef5b23b494a1b11a8659a02 (diff)
downloadFreeBSD-ports-73489f5c62c59fdad87b9b0b3f43cff74ba2f3b5.zip
FreeBSD-ports-73489f5c62c59fdad87b9b0b3f43cff74ba2f3b5.tar.gz
Fix lang/rust after ino64 src commit.
Approved by: bapt, dumbbell Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D10799
-rw-r--r--lang/rust/Makefile22
-rw-r--r--lang/rust/files/extra-patch-ino64313
-rw-r--r--lang/rust/files/old_fstat.c103
3 files changed, 435 insertions, 3 deletions
diff --git a/lang/rust/Makefile b/lang/rust/Makefile
index b97f2ac..72953d0 100644
--- a/lang/rust/Makefile
+++ b/lang/rust/Makefile
@@ -105,6 +105,11 @@ DOCS_VARS= rust_manifests+=${RUST_DOCS_MANIFESTS}
PLIST_FILES= lib/rustlib/components \
lib/rustlib/rust-installer-version
+.include <bsd.port.pre.mk>
+.if ${OPSYS} == FreeBSD && ${OSVERSION} >= 1200031
+EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-ino64
+.endif
+
pre-fetch:
# FIXME: This is the same check for CONFLICTS as the standard
# one, except port origins are not compared. This allows
@@ -129,16 +134,27 @@ pre-fetch:
exit 1;\
fi
+LIBSTD= rust-std-1.16.0-x86_64-unknown-freebsd/rust-std-x86_64-unknown-freebsd/lib/rustlib/x86_64-unknown-freebsd/lib/libstd-aef6cb139bd07bdc.rlib
+STDF= std-aef6cb139bd07bdc.0.o
+
post-extract:
@${MKDIR} \
${WRKSRC}/build/cache/${RUST_BOOTSTRAP_DIR} \
${WRKSRC}/build/cache/${CARGO_BOOTSTRAP_DIR}
${LN} -sf ${DISTDIR}/${DIST_SUBDIR}/${RUSTC_BOOTSTRAP} \
${WRKSRC}/build/cache/${RUST_BOOTSTRAP_DIR}
- ${LN} -sf ${DISTDIR}/${DIST_SUBDIR}/${RUST_STD_BOOTSTRAP} \
- ${WRKSRC}/build/cache/${RUST_BOOTSTRAP_DIR}
${LN} -sf ${DISTDIR}/${DIST_SUBDIR}/${CARGO_BOOTSTRAP} \
${WRKSRC}/build/cache/${CARGO_BOOTSTRAP_DIR}
+ ${TAR} -x -C ${WRKSRC} -f ${DISTDIR}/${DIST_SUBDIR}/${RUST_STD_BOOTSTRAP}
+.if ${OPSYS} == FreeBSD && ${OSVERSION} >= 1200031
+ ${CC} ${CFLAGS} -fPIC -c -o ${WRKSRC}/old_fstat.o ${FILESDIR}/old_fstat.c
+ (cd ${WRKSRC} && ${AR} x ${WRKSRC}/${LIBSTD} ${STDF})
+ ${LD} -r -o ${WRKSRC}/std.xx.o ${WRKSRC}/${STDF} ${WRKSRC}/old_fstat.o
+ ${MV} ${WRKSRC}/std.xx.o ${WRKSRC}/${STDF}
+ (cd ${WRKSRC} && ${AR} r ${WRKSRC}/${LIBSTD} ${STDF})
+ ${TAR} -cy -C ${WRKSRC} -f ${WRKSRC}/rustc.tbz rust-std-1.16.0-x86_64-unknown-freebsd
+ ${MV} ${WRKSRC}/rustc.tbz ${WRKSRC}/build/cache/${RUST_STD_BOOTSTRAP}
+.endif
post-patch:
@test ! -f ${WRKSRC}/mk/main.mk || \
@@ -204,7 +220,7 @@ post-install:
${STAGEDIR}${PREFIX}/lib/*.so \
${STAGEDIR}${PREFIX}/lib/rustlib/*/lib/*.so
-.include <bsd.port.mk>
+.include <bsd.port.post.mk>
# "make gen-registry" is a special target to ease this port update.
#
diff --git a/lang/rust/files/extra-patch-ino64 b/lang/rust/files/extra-patch-ino64
new file mode 100644
index 0000000..59d5f90
--- /dev/null
+++ b/lang/rust/files/extra-patch-ino64
@@ -0,0 +1,313 @@
+--- ./src/liblibc/src/unix/bsd/freebsdlike/freebsd/mod.rs.orig 2017-04-24 18:56:45.000000000 +0000
++++ ./src/liblibc/src/unix/bsd/freebsdlike/freebsd/mod.rs 2017-05-25 16:28:37.280076000 +0000
+@@ -1,8 +1,8 @@
+ pub type fflags_t = u32;
+ pub type clock_t = i32;
+-pub type ino_t = u32;
++pub type ino_t = u64;
+ pub type lwpid_t = i32;
+-pub type nlink_t = u16;
++pub type nlink_t = u64;
+ pub type blksize_t = u32;
+ pub type clockid_t = ::c_int;
+ pub type sem_t = _sem;
+@@ -40,10 +40,13 @@
+ }
+
+ pub struct dirent {
+- pub d_fileno: u32,
++ pub d_fileno: u64,
++ pub d_off: u64,
+ pub d_reclen: u16,
+ pub d_type: u8,
+- pub d_namlen: u8,
++ pub d_pad0: u8,
++ pub d_namlen: u16,
++ pub d_pad1: u16,
+ pub d_name: [::c_char; 256],
+ }
+
+--- ./src/liblibc/src/unix/bsd/freebsdlike/freebsd/x86.rs.orig 2017-04-24 18:56:45.000000000 +0000
++++ ./src/liblibc/src/unix/bsd/freebsdlike/freebsd/x86.rs 2017-05-25 16:25:42.303616000 +0000
+@@ -7,25 +7,30 @@
+ pub struct stat {
+ pub st_dev: ::dev_t,
+ pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ pub st_pad0: ::uint16_t,
+ pub st_uid: ::uid_t,
+ pub st_gid: ::gid_t,
++ pub st_pad1: ::uint32_t,
+ pub st_rdev: ::dev_t,
++ pub st_atime_ext ::i32,
+ pub st_atime: ::time_t,
+ pub st_atime_nsec: ::c_long,
++ pub st_mtime_ext ::i32,
+ pub st_mtime: ::time_t,
+ pub st_mtime_nsec: ::c_long,
++ pub st_ctime_ext ::i32,
+ pub st_ctime: ::time_t,
+ pub st_ctime_nsec: ::c_long,
++ pub st_birthtime_ext ::i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
+ pub st_size: ::off_t,
+ pub st_blocks: ::blkcnt_t,
+ pub st_blksize: ::blksize_t,
+ pub st_flags: ::fflags_t,
+- pub st_gen: ::uint32_t,
+- pub st_lspare: ::int32_t,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- __unused: [u8; 8],
++ pub st_gen: ::uint64_t,
++ pub st_lspare: [::uint64_t; 10],
+ }
+ }
+--- ./src/liblibc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs.orig 2017-04-24 18:56:45.000000000 +0000
++++ ./src/liblibc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs 2017-05-25 16:25:42.303910000 +0000
+@@ -7,10 +7,12 @@
+ pub struct stat {
+ pub st_dev: ::dev_t,
+ pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ pub st_pad0: ::uint16_t,
+ pub st_uid: ::uid_t,
+ pub st_gid: ::gid_t,
++ pub st_pad1: ::uint32_t,
+ pub st_rdev: ::dev_t,
+ pub st_atime: ::time_t,
+ pub st_atime_nsec: ::c_long,
+@@ -18,13 +20,13 @@
+ pub st_mtime_nsec: ::c_long,
+ pub st_ctime: ::time_t,
+ pub st_ctime_nsec: ::c_long,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
+ pub st_size: ::off_t,
+ pub st_blocks: ::blkcnt_t,
+ pub st_blksize: ::blksize_t,
+ pub st_flags: ::fflags_t,
+- pub st_gen: ::uint32_t,
+- pub st_lspare: ::int32_t,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
++ pub st_gen: ::uint64_t,
++ pub st_spare: [::int64_t; 10],
+ }
+ }
+--- ./src/liblibc/src/unix/bsd/freebsdlike/mod.rs.orig 2017-04-24 18:56:45.000000000 +0000
++++ ./src/liblibc/src/unix/bsd/freebsdlike/mod.rs 2017-05-25 16:25:42.304391000 +0000
+@@ -1,4 +1,4 @@
+-pub type dev_t = u32;
++pub type dev_t = u64;
+ pub type mode_t = u16;
+ pub type pthread_attr_t = *mut ::c_void;
+ pub type rlim_t = i64;
+--- ./src/libstd/os/freebsd/raw.rs.orig 2017-04-24 18:53:46.000000000 +0000
++++ ./src/libstd/os/freebsd/raw.rs 2017-05-25 16:25:42.304715000 +0000
+@@ -38,32 +38,48 @@
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub struct stat {
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_dev: u32,
++ pub st_dev: u64,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_ino: u32,
++ pub st_ino: u64,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
++ pub st_nlink: u64,
++ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_mode: u16,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_nlink: u16,
++ pub st_pad0: u16,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_uid: u32,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_gid: u32,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_rdev: u32,
++ pub st_pad1: u32,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
++ pub st_rdev: u64,
++ #[cfg(target_arch = "x86")]
++ pub st_atime_ext: c_long,
++ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_atime: c_long,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_atime_nsec: c_long,
++ #[cfg(target_arch = "x86")]
++ pub st_mtime_ext: c_long,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_mtime: c_long,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_mtime_nsec: c_long,
++ #[cfg(target_arch = "x86")]
++ pub st_ctime_ext: c_long,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_ctime: c_long,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_ctime_nsec: c_long,
++ #[cfg(target_arch = "x86")]
++ pub st_birthtime_ext: c_long,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
++ pub st_birthtime: c_long,
++ #[stable(feature = "raw_ext", since = "1.1.0")]
++ pub st_birthtime_nsec: c_long,
++ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_size: i64,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_blocks: i64,
+@@ -72,14 +88,7 @@
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+ pub st_flags: u32,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_gen: u32,
++ pub st_gen: u64,
+ #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_lspare: i32,
+- #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_birthtime: c_long,
+- #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub st_birthtime_nsec: c_long,
+- #[cfg(target_arch = "x86")]
+- #[stable(feature = "raw_ext", since = "1.1.0")]
+- pub __unused: [u8; 8],
++ pub st_spare: [u64; 10],
+ }
+--- ./src/libstd/os/freebsd/fs.rs.orig 2017-04-24 18:53:46.000000000 +0000
++++ ./src/libstd/os/freebsd/fs.rs 2017-05-25 16:25:42.304989000 +0000
+@@ -74,8 +74,6 @@
+ fn st_flags(&self) -> u32;
+ #[stable(feature = "metadata_ext2", since = "1.8.0")]
+ fn st_gen(&self) -> u32;
+- #[stable(feature = "metadata_ext2", since = "1.8.0")]
+- fn st_lspare(&self) -> u32;
+ }
+
+ #[stable(feature = "metadata_ext", since = "1.1.0")]
+@@ -146,9 +144,6 @@
+ }
+ fn st_flags(&self) -> u32 {
+ self.as_inner().as_inner().st_flags as u32
+- }
+- fn st_lspare(&self) -> u32 {
+- self.as_inner().as_inner().st_lspare as u32
+ }
+ }
+
+--- ./src/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs.orig 2017-04-24 20:20:26.000000000 +0000
++++ ./src/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86_64.rs 2017-05-25 16:25:42.305261000 +0000
+@@ -7,10 +7,12 @@
+ pub struct stat {
+ pub st_dev: ::dev_t,
+ pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ pub st_pad0: u16,
+ pub st_uid: ::uid_t,
+ pub st_gid: ::gid_t,
++ pub st_pad1: ::u32,
+ pub st_rdev: ::dev_t,
+ pub st_atime: ::time_t,
+ pub st_atime_nsec: ::c_long,
+@@ -18,13 +20,13 @@
+ pub st_mtime_nsec: ::c_long,
+ pub st_ctime: ::time_t,
+ pub st_ctime_nsec: ::c_long,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
+ pub st_size: ::off_t,
+ pub st_blocks: ::blkcnt_t,
+ pub st_blksize: ::blksize_t,
+ pub st_flags: ::fflags_t,
+- pub st_gen: ::uint32_t,
+- pub st_lspare: ::int32_t,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
++ pub st_gen: ::uint64_t,
++ pub st_spare: [u64; 10],
+ }
+ }
+--- ./src/vendor/libc/src/unix/bsd/freebsdlike/freebsd/mod.rs.orig 2017-04-24 20:20:26.000000000 +0000
++++ ./src/vendor/libc/src/unix/bsd/freebsdlike/freebsd/mod.rs 2017-05-25 16:28:29.708287000 +0000
+@@ -1,8 +1,8 @@
+ pub type fflags_t = u32;
+ pub type clock_t = i32;
+-pub type ino_t = u32;
++pub type ino_t = u64;
+ pub type lwpid_t = i32;
+-pub type nlink_t = u16;
++pub type nlink_t = u64;
+ pub type blksize_t = u32;
+ pub type clockid_t = ::c_int;
+ pub type sem_t = _sem;
+@@ -40,10 +40,13 @@
+ }
+
+ pub struct dirent {
+- pub d_fileno: u32,
++ pub d_fileno: u64,
++ pub d_off: u64,
+ pub d_reclen: u16,
+ pub d_type: u8,
+- pub d_namlen: u8,
++ pub d_pad0: u8,
++ pub d_namlen: u16,
++ pub d_pad1: u16,
+ pub d_name: [::c_char; 256],
+ }
+
+--- ./src/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86.rs.orig 2017-04-24 20:20:26.000000000 +0000
++++ ./src/vendor/libc/src/unix/bsd/freebsdlike/freebsd/x86.rs 2017-05-25 16:25:42.305967000 +0000
+@@ -7,25 +7,30 @@
+ pub struct stat {
+ pub st_dev: ::dev_t,
+ pub st_ino: ::ino_t,
+- pub st_mode: ::mode_t,
+ pub st_nlink: ::nlink_t,
++ pub st_mode: ::mode_t,
++ pub st_pad0: u16,
+ pub st_uid: ::uid_t,
+ pub st_gid: ::gid_t,
++ pub st_pad1: u32,
+ pub st_rdev: ::dev_t,
++ pub st_atime_ext: ::i32,
+ pub st_atime: ::time_t,
+ pub st_atime_nsec: ::c_long,
++ pub st_mtime_ext: ::i32,
+ pub st_mtime: ::time_t,
+ pub st_mtime_nsec: ::c_long,
++ pub st_ctime_ext: ::i32,
+ pub st_ctime: ::time_t,
+ pub st_ctime_nsec: ::c_long,
++ pub st_birthtime_ext: ::i32,
++ pub st_birthtime: ::time_t,
++ pub st_birthtime_nsec: ::c_long,
+ pub st_size: ::off_t,
+ pub st_blocks: ::blkcnt_t,
+ pub st_blksize: ::blksize_t,
+ pub st_flags: ::fflags_t,
+- pub st_gen: ::uint32_t,
+- pub st_lspare: ::int32_t,
+- pub st_birthtime: ::time_t,
+- pub st_birthtime_nsec: ::c_long,
+- __unused: [u8; 8],
++ pub st_gen: ::uint64_t,
++ pub st_spare: [u64; 10],
+ }
+ }
+--- ./src/vendor/libc/src/unix/bsd/freebsdlike/mod.rs.orig 2017-04-24 20:20:26.000000000 +0000
++++ ./src/vendor/libc/src/unix/bsd/freebsdlike/mod.rs 2017-05-25 16:25:42.306480000 +0000
+@@ -1,4 +1,4 @@
+-pub type dev_t = u32;
++pub type dev_t = u64;
+ pub type mode_t = u16;
+ pub type pthread_attr_t = *mut ::c_void;
+ pub type rlim_t = i64;
diff --git a/lang/rust/files/old_fstat.c b/lang/rust/files/old_fstat.c
new file mode 100644
index 0000000..7943678
--- /dev/null
+++ b/lang/rust/files/old_fstat.c
@@ -0,0 +1,103 @@
+/* $FreeBSD$ */
+
+#include <sys/syscall.h>
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+struct stat;
+
+int
+fstat(int fd, struct stat *sb)
+{
+
+ return (syscall(SYS_freebsd11_fstat, fd, sb));
+}
+
+int
+stat(const char *path, struct stat *sb)
+{
+
+ return (syscall(SYS_freebsd11_stat, path, sb));
+}
+
+int
+lstat(const char *path, struct stat *sb)
+{
+
+ return (syscall(SYS_freebsd11_lstat, path, sb));
+}
+
+int
+fstatat(int fd, const char *path, struct stat *sb, int flag)
+{
+
+ return (syscall(SYS_freebsd11_fstatat, fd, path, sb, flag));
+}
+
+struct ODIR;
+struct freebsd11_dirent;
+
+/*
+__asm(".symver old_readdir, readdir@FBSD_1.0");
+int old_readdir(struct ODIR *);
+int
+readdir(struct ODIR *dirp)
+{
+
+ return (old_readdir(dirp));
+}
+*/
+
+__asm(".symver old_readdir_r, readdir_r@FBSD_1.0");
+int old_readdir_r(struct ODIR *, struct freebsd11_dirent *,
+ struct freebsd11_dirent **);
+int
+readdir_r(struct ODIR *dirp, struct freebsd11_dirent *entry,
+ struct freebsd11_dirent **result)
+{
+ void *libc;
+ void *fptr;
+ int error;
+
+ libc = dlopen("libc.so.7", RTLD_LAZY | RTLD_GLOBAL);
+ if (libc == NULL) {
+ fprintf(stderr, "libc open: %s\n", dlerror());
+ abort();
+ }
+ fptr = dlvsym(libc, "readdir_r", "FBSD_1.0");
+ if (fptr == NULL) {
+ fprintf(stderr, "readdir_r: %s\n", dlerror());
+ abort();
+ }
+ error = ((int (*)(struct ODIR *, struct freebsd11_dirent *,
+ struct freebsd11_dirent **))fptr)(dirp, entry, result);
+ dlclose(libc);
+ return (error);
+}
+
+/*
+__asm(".symver old_scandir, scandir@FBSD_1.0");
+int old_scandir(const char *, struct freebsd11_dirent ***,
+ int (*)(const struct freebsd11_dirent *),
+ int (*)(const struct freebsd11_dirent **,
+ const struct freebsd11_dirent **));
+int
+scandir(const char *dirname, struct freebsd11_dirent ***namelist,
+ int (*select)(const struct freebsd11_dirent *),
+ int (*dcomp)(const struct freebsd11_dirent **,
+ const struct freebsd11_dirent **))
+{
+
+ return (old_scandir(dirname, namelist, select, dcomp));
+}
+*/
+
+struct old_statfs;
+int
+fstatfs(int fd, struct old_statfs *buf)
+{
+
+ return (syscall(SYS_freebsd11_fstatfs, fd, buf));
+}
OpenPOWER on IntegriCloud