aboutsummaryrefslogtreecommitdiff
path: root/sysutils/fusefs-smbnetfs
diff options
context:
space:
mode:
authorMikhail Teterin <mi@FreeBSD.org>2018-02-01 18:57:43 +0000
committerMikhail Teterin <mi@FreeBSD.org>2018-02-01 18:57:43 +0000
commit3e3af071b02c42b42d2b3c14100a4caeac8ccdfc (patch)
treee0c566add439b006afc77c8a22f1ce90706b3a50 /sysutils/fusefs-smbnetfs
parent01c42c6963e40d3e709486fbb6eae934349c8ac1 (diff)
downloadports-3e3af071b02c42b42d2b3c14100a4caeac8ccdfc.tar.gz
ports-3e3af071b02c42b42d2b3c14100a4caeac8ccdfc.zip
Allow building against fuse3. Off by default for there
are no obvious advantages to it...
Notes
Notes: svn path=/head/; revision=460623
Diffstat (limited to 'sysutils/fusefs-smbnetfs')
-rw-r--r--sysutils/fusefs-smbnetfs/Makefile14
-rw-r--r--sysutils/fusefs-smbnetfs/files/patch-fuse3216
2 files changed, 229 insertions, 1 deletions
diff --git a/sysutils/fusefs-smbnetfs/Makefile b/sysutils/fusefs-smbnetfs/Makefile
index bf2426f2c22d..08b488a9fa05 100644
--- a/sysutils/fusefs-smbnetfs/Makefile
+++ b/sysutils/fusefs-smbnetfs/Makefile
@@ -27,7 +27,7 @@ USE_GNOME= glib20:build
GNU_CONFIGURE= yes
# A hack to disable gratuitous linking with -lglib-2.0
CONFIGURE_ENV+= GLIB_LIBS=-L/var/empty
-CFLAGS+= -I${SAMBAINCLUDES}
+CFLAGS+= -I${SAMBAINCLUDES} -DFUSE_USE_VERSION=${FUSE_VERSION}
LDFLAGS+= -L${SAMBALIBS}
SUB_FILES= pkg-message
# configure just generated config.h -- we do not need to redo it:
@@ -40,4 +40,16 @@ CONFIGURE_ENV+= ac_cv_lib_iconv_iconv_open=yes
CONFIGURE_ARGS+=--with-libiconv=native
.endif
+# Uses/fuse.mk should be doing the below:
+.if ${LIBFUSE_VER} == 3
+CONFIGURE_ENV+= FUSE_CFLAGS="-I${LOCALBASE}/include/fuse3" \
+ FUSE_LIBS="-L${LOCALBASE}/lib -lfuse3"
+FUSEPKG= fuse3
+LDFLAGS+= -lthr
+.else
+FUSEPKG= fuse
+.endif
+FUSE_VERSION= "`pkgconf --version ${FUSEPKG} | \
+ ${SED} -E 's,^([0-9]+)\.([0-9]+)\..*,\1\2,'`"
+
.include <bsd.port.post.mk>
diff --git a/sysutils/fusefs-smbnetfs/files/patch-fuse3 b/sysutils/fusefs-smbnetfs/files/patch-fuse3
new file mode 100644
index 000000000000..c30563999e05
--- /dev/null
+++ b/sysutils/fusefs-smbnetfs/files/patch-fuse3
@@ -0,0 +1,216 @@
+Allow use of either libfuse3 or libfuse...
+
+ -mi
+
+--- src/event.c 2018-01-04 15:59:38 -0500
++++ src/event.c 2018-02-01 11:12:59 -0500
+@@ -5,5 +5,5 @@
+ #include <pthread.h>
+ #include <libsmbclient.h>
+-#include <fuse/fuse.h>
++#include <fuse.h>
+ #include <glib.h>
+
+--- configure 2018-01-04 16:00:23 -0500
++++ configure 2018-02-01 11:16:43 -0500
+@@ -4059,5 +4059,5 @@
+ fi
+ LIBS="$LIBS $FUSE_LIBS"
+-CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE -DFUSE_USE_VERSION=26 $FUSE_CFLAGS"
++CFLAGS="$CFLAGS -D_REENTRANT -D_GNU_SOURCE $FUSE_CFLAGS"
+
+
+--- src/event.h 2018-01-04 15:59:38.000000000 -0500
++++ src/event.h 2018-02-01 11:20:21.779895000 -0500
+@@ -2,5 +2,5 @@
+ #define __EVENT_H__
+
+-#include <fuse/fuse.h>
++#include <fuse.h>
+
+ int event_set_query_browser_flag(int flag);
+--- src/function.h 2018-01-04 15:59:38.000000000 -0500
++++ src/function.h 2018-02-01 11:21:10.116105000 -0500
+@@ -2,5 +2,5 @@
+ #define __FUNCTION_H__
+
+-#include <fuse/fuse.h>
++#include <fuse.h>
+
+ extern struct fuse_operations smb_oper;
+--- src/function.c 2018-01-04 20:59:38.000000000 +0000
++++ src/function.c 2018-02-01 18:28:01.664078000 +0000
+@@ -149,5 +151,13 @@
+ }
+
+-static int function_rename(const char *from, const char *to){
++static int function_rename(const char *from, const char *to
++#if FUSE_USE_VERSION > 29
++ , unsigned int flags __unused
++#endif
++){
++ /*
++ * XXX Maybe, we should check the flags-argument to better
++ * XXX manage the caller's expectations?
++ */
+ DPRINTF(5, "(%s, %s)\n", from, to);
+ if (smbitem_what_is(from) != SMBITEM_SMB_SHARE_ITEM) return -EINVAL;
+@@ -188,6 +198,15 @@
+ }
+
++
+ static int function_readdir(const char *path, void *buf, fuse_fill_dir_t filler,
+- off_t offset, struct fuse_file_info *fi){
++ off_t offset, struct fuse_file_info *fi
++#if FUSE_USE_VERSION > 29
++ , enum fuse_readdir_flags flags __unused
++#define CALL_FILLER(buf, path, st, offset) \
++ filler(buf, path, st, offset, 0)
++#else
++#define CALL_FILLER filler
++#endif
++){
+ samba_fd fd;
+ int error, rec_cnt;
+@@ -208,6 +227,6 @@
+ error = EINVAL;
+ st.st_mode = S_IFDIR;
+- if (filler(buf, ".", &st, 0)) goto error0;
+- if (filler(buf, "..", &st, 0)) goto error0;
++ if (CALL_FILLER(buf, ".", &st, 0)) goto error0;
++ if (CALL_FILLER(buf, "..", &st, 0)) goto error0;
+
+ show_hidden_hosts = function_get_hidden_hosts_visibility();
+@@ -227,5 +246,5 @@
+ goto error0;
+ }
+- if (filler(buf, dir->childs[i]->name, &st, 0)) goto end;
++ if (CALL_FILLER(buf, dir->childs[i]->name, &st, 0)) goto end;
+ }
+ error = 0;
+@@ -299,9 +318,9 @@
+ memset(&st, 0, sizeof(st));
+ st.st_mode = S_IFDIR;
+- if (filler(buf, ".", &st, 0)) goto end;
+- if (filler(buf, "..", &st, 0)) goto end;
++ if (CALL_FILLER(buf, ".", &st, 0)) goto end;
++ if (CALL_FILLER(buf, "..", &st, 0)) goto end;
+ rec_cnt += 2;
+ }
+- if (filler(buf, rec->d_name, &st, 0)){
++ if (CALL_FILLER(buf, rec->d_name, &st, 0)){
+ error = EINVAL;
+ goto end;
+@@ -317,6 +336,6 @@
+ error = EINVAL;
+ st.st_mode = S_IFDIR;
+- if (filler(buf, ".", &st, 0)) goto end;
+- if (filler(buf, "..", &st, 0)) goto end;
++ if (CALL_FILLER(buf, ".", &st, 0)) goto end;
++ if (CALL_FILLER(buf, "..", &st, 0)) goto end;
+ rec_cnt += 2;
+ }
+@@ -341,5 +360,11 @@
+ }
+
+-static int function_stat(const char *path, struct stat *stbuf){
++static int function_fstat(const char *path, struct stat *stbuf,
++ struct fuse_file_info *fi);
++static int function_stat(const char *path, struct stat *stbuf
++#if FUSE_USE_VERSION > 29
++ , struct fuse_file_info *fi
++#endif
++){
+ int i, count;
+ size_t len;
+@@ -347,4 +372,8 @@
+ char buf[2048];
+
++#if FUSE_USE_VERSION > 29
++ if (fi != NULL)
++ return function_fstat(path, stbuf, fi);
++#endif
+ DPRINTF(5, "(%s)\n", path);
+ if (stat_workaround_is_name_ignored(path)) return -ENOENT;
+@@ -462,5 +491,9 @@
+ }
+
+-static int function_chmod(const char *path, mode_t mode){
++static int function_chmod(const char *path, mode_t mode
++#if FUSE_USE_VERSION > 29
++ , struct fuse_file_info *fi __unused /* XXX make some use of it? */
++#endif
++){
+ DPRINTF(5, "(%s, %o)\n", path, mode);
+ if (smbitem_what_is(path) != SMBITEM_SMB_SHARE_ITEM) return -EINVAL;
+@@ -469,4 +502,5 @@
+ }
+
++#if FUSE_USE_VERSION < 30
+ static int function_utimes(const char *path, struct utimbuf *buffer){
+ struct timeval tbuf[2];
+@@ -483,4 +517,21 @@
+ return 0;
+ }
++#else
++static int function_utimens(const char *path, const struct timespec tv[2],
++ struct fuse_file_info *fi __unused)
++{
++ struct timeval tbuf[2];
++
++ DPRINTF(5, "(%s, %lu)\n", path, (unsigned long)tv[0].tv_sec);
++ if (smbitem_what_is(path) != SMBITEM_SMB_SHARE_ITEM) return -EINVAL;
++
++ tbuf[0].tv_sec = tv[0].tv_sec;
++ tbuf[0].tv_usec = tv[0].tv_nsec / 1000;
++ tbuf[1].tv_sec = tv[1].tv_sec;
++ tbuf[1].tv_usec = tv[1].tv_nsec / 1000;
++ if (samba_utimes(path, tbuf) != 0) return -errno;
++ return 0;
++}
++#endif
+
+ /* libfuse does not support lsetxattr() and fsetxattr(), but samba does */
+@@ -542,5 +593,9 @@
+ }
+
+-static int function_chown(const char *path, uid_t uid, gid_t gid){
++static int function_chown(const char *path, uid_t uid, gid_t gid
++#if FUSE_USE_VERSION > 29
++ , struct fuse_file_info *fi __unused
++#endif
++){
+ (void) path;
+ (void) uid;
+@@ -552,7 +607,15 @@
+ }
+
+-static int function_truncate(const char *path, off_t size){
++static int function_truncate(const char *path, off_t size
++#if FUSE_USE_VERSION > 29
++ , struct fuse_file_info *fi
++#endif
++){
+ samba_fd fd;
+
++#if FUSE_USE_VERSION > 29
++ if (fi != NULL)
++ return function_ftruncate(path, size, fi);
++#endif
+ DPRINTF(5, "(%s, %lld)\n", path, (long long) size);
+ if (size < 0) return -EINVAL;
+@@ -602,8 +665,14 @@
+ .rmdir = function_rmdir,
+ .getattr = function_stat,
++#if FUSE_USE_VERSION < 30
+ .fgetattr = function_fstat,
+ .ftruncate = function_ftruncate,
++#endif
+ .chmod = function_chmod,
++#if FUSE_USE_VERSION < 30
+ .utime = function_utimes,
++#else
++ .utimens = function_utimens,
++#endif
+ .setxattr = function_setxattr,
+ .getxattr = function_getxattr,