Merge pull request #716 from trapexit/mount

rework makefiles + install mount tools
This commit is contained in:
trapexit 2020-02-22 17:00:55 -05:00 committed by GitHub
commit 10e8bd9fa3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 70 additions and 46 deletions

View File

@ -37,8 +37,7 @@ endif
endif endif
USE_XATTR = 1 USE_XATTR = 1
UGID_USE_RWLOCK = 0
FUSE_CFLAGS = -D_FILE_OFFSET_BITS=64 -Ilibfuse/include
ifeq ($(DEBUG),1) ifeq ($(DEBUG),1)
DEBUG_FLAGS := -g DEBUG_FLAGS := -g
@ -58,29 +57,30 @@ else
LTO_FLAGS := LTO_FLAGS :=
endif endif
UGID_USE_RWLOCK = 0
OPTS = -O2
SRC = $(wildcard src/*.cpp) SRC = $(wildcard src/*.cpp)
OBJS = $(SRC:src/%.cpp=build/%.o) OBJS = $(SRC:src/%.cpp=build/%.o)
DEPS = $(SRC:src/%.cpp=build/%.d) DEPS = $(SRC:src/%.cpp=build/%.d)
MANPAGE = mergerfs.1 MANPAGE = mergerfs.1
CXXFLAGS += \ CXXFLAGS = \
$(OPTS) \ -O2 \
$(DEBUG_FLAGS) \ $(DEBUG_FLAGS) \
$(STATIC_FLAGS) \ $(STATIC_FLAGS) \
$(LTO_FLAGS) \ $(LTO_FLAGS) \
-Wall \ -Wall \
-Wno-unused-result \ -Wno-unused-result \
$(FUSE_CFLAGS) \ -MMD
-DFUSE_USE_VERSION=29 \ FUSE_FLAGS = \
-MMD \ -Ilibfuse/include \
-D_FILE_OFFSET_BITS=64 \
-DFUSE_USE_VERSION=29
MFS_FLAGS = \
-DUSE_XATTR=$(USE_XATTR) \ -DUSE_XATTR=$(USE_XATTR) \
-DUGID_USE_RWLOCK=$(UGID_USE_RWLOCK) -DUGID_USE_RWLOCK=$(UGID_USE_RWLOCK)
LDFLAGS += \ LDFLAGS = \
-pthread \ -pthread \
-lrt -lrt
DESTDIR =
PREFIX = /usr/local PREFIX = /usr/local
EXEC_PREFIX = $(PREFIX) EXEC_PREFIX = $(PREFIX)
DATAROOTDIR = $(PREFIX)/share DATAROOTDIR = $(PREFIX)/share
@ -108,7 +108,7 @@ objects: version build/stamp
$(MAKE) $(OBJS) $(MAKE) $(OBJS)
build/mergerfs: libfuse objects build/mergerfs: libfuse objects
$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(OBJS) -o $@ libfuse/build/libfuse.a $(LDFLAGS) $(CXX) $(CXXFLAGS) $(FUSE_FLAGS) $(MFS_FLAGS) $(CPPFLAGS) $(OBJS) -o $@ libfuse/build/libfuse.a $(LDFLAGS)
mergerfs: build/mergerfs mergerfs: build/mergerfs
@ -128,7 +128,7 @@ build/stamp:
$(TOUCH) $@ $(TOUCH) $@
build/%.o: src/%.cpp build/%.o: src/%.cpp
$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@ $(CXX) $(CXXFLAGS) $(FUSE_FLAGS) $(MFS_FLAGS) $(CPPFLAGS) -c $< -o $@
.PHONY: clean .PHONY: clean
clean: rpm-clean clean: rpm-clean
@ -142,15 +142,15 @@ ifeq ($(GIT_REPO),1)
endif endif
.PHONY: install .PHONY: install
install: install-base install-mount.mergerfs install-man install: install-base install-mount-tools install-man
install-base: build/mergerfs install-base: build/mergerfs
$(MKDIR) -p "$(INSTALLBINDIR)" $(MKDIR) -p "$(INSTALLBINDIR)"
$(INSTALL) -v -m 0755 build/mergerfs "$(INSTALLBINDIR)/mergerfs" $(INSTALL) -v -m 0755 build/mergerfs "$(INSTALLBINDIR)/mergerfs"
install-mount.mergerfs: install-base install-mount-tools: install-base
$(MKDIR) -p "$(INSTALLBINDIR)" $(MKDIR) -p "$(INSTALLBINDIR)"
$(LN) -fs "mergerfs" "$(INSTALLBINDIR)/mount.mergerfs" $(MAKE) -C libfuse install
install-man: $(MANPAGE) install-man: $(MANPAGE)
$(MKDIR) -p "$(INSTALLMAN1DIR)" $(MKDIR) -p "$(INSTALLMAN1DIR)"

View File

@ -1,5 +1,4 @@
VERSION = "2.9.7-mergerfs_2.29.0" VERSION = 2.9.7-mergerfs_2.29.0
OPTS = -O2
ifeq ($(DEBUG),1) ifeq ($(DEBUG),1)
DEBUG_FLAGS := -g DEBUG_FLAGS := -g
@ -7,9 +6,20 @@ else
DEBUG_FLAGS := DEBUG_FLAGS :=
endif endif
DESTDIR = "/" DESTDIR =
BINDIR = "/bin" PREFIX = /usr/local
SBINDIR = "/sbin" EXEC_PREFIX = $(PREFIX)
DATAROOTDIR = $(PREFIX)/share
DATADIR = $(DATAROOTDIR)
BINDIR = $(EXEC_PREFIX)/bin
SBINDIR = $(EXEC_PREFIX)/sbin
MANDIR = $(DATAROOTDIR)/man
MAN1DIR = $(MANDIR)/man1
INSTALLBINDIR = $(DESTDIR)$(BINDIR)
INSTALLSBINDIR = $(DESTDIR)$(SBINDIR)
INSTALLMAN1DIR = $(DESTDIR)$(MAN1DIR)
SRC = \ SRC = \
lib/buffer.c \ lib/buffer.c \
lib/cuse_lowlevel.c \ lib/cuse_lowlevel.c \
@ -27,24 +37,26 @@ SRC = \
OBJS = $(SRC:lib/%.c=build/%.o) OBJS = $(SRC:lib/%.c=build/%.o)
DEPS = $(SRC:lib/%.c=build/%.d) DEPS = $(SRC:lib/%.c=build/%.d)
CFLAGS += \ CFLAGS = \
$(OPTS) \ -O2 \
$(DEBUG_FLAGS) \ $(DEBUG_FLAGS) \
-Wall \ -Wall \
-pipe \ -pipe \
'-D_FILE_OFFSET_BITS=64' \ -MMD
'-D_REENTRANT' \ FUSERMOUNT_DIR = $(BINDIR)
'-DFUSE_USE_VERSION=29' \ FUSE_FLAGS = \
'-DFUSERMOUNT_DIR="/usr/local/bin"' \
'-DPACKAGE_VERSION=$(VERSION)' \
-Iinclude \ -Iinclude \
-Ibuild \ -Ibuild \
-MMD -D_REENTRANT \
LDFLAGS += \ -D_FILE_OFFSET_BITS=64 \
-DFUSE_USE_VERSION=29 \
-DPACKAGE_VERSION=\"$(VERSION)\" \
-DFUSERMOUNT_DIR=\"$(FUSERMOUNT_DIR)\"
LDFLAGS = \
-lrt \ -lrt \
-pthread -pthread
all: build/libfuse.a all: build/libfuse.a mount.mergerfs mergerfs-fusermount
build/config.h: build/stamp build/config.h: build/stamp
ecfd/build | tee build/config.h ecfd/build | tee build/config.h
@ -59,26 +71,34 @@ objects: build/config.h
build/libfuse.a: objects build/libfuse.a: objects
ar rcs build/libfuse.a $(OBJS) ar rcs build/libfuse.a $(OBJS)
build/mergerfs-mount: build/config.h util/fusermount.c lib/mount_util.c build/mergerfs-fusermount: build/config.h util/fusermount.c lib/mount_util.c
$(CC) $(CFLAGS) -Ilib -o mergerfs-mount util/fusermount.c lib/mount_util.c $(CC) $(CFLAGS) $(FUSE_FLAGS) -Ilib -o build/mergerfs-fusermount util/fusermount.c lib/mount_util.c
build/mount.mergerfs: build/libfuse.a util/mount.fuse.c mergerfs-fusermount: build/mergerfs-fusermount
$(CC) $(CFLAGS) -o mount.mergerfs util/mount.fuse.c build/libfuse.a $(LDFLAGS)
build/mount.mergerfs: build/libfuse.a util/mount.mergerfs.c
$(CC) $(CFLAGS) $(FUSE_FLAGS) -o build/mount.mergerfs util/mount.mergerfs.c build/libfuse.a $(LDFLAGS)
mount.mergerfs: build/mount.mergerfs
build/%.o: lib/%.c build/%.o: lib/%.c
$(CC) $(CFLAGS) -c $< -o $@ $(CC) $(CFLAGS) $(FUSE_FLAGS) -c $< -o $@
clean: clean:
rm -rf build rm -rf build
distclean: clean distclean: clean
install: build/mergerfs-mount build/mount.mergerfs strip:
install -D build/mergerfs-mount "$(DESTDIR)$(BINDIR)/mergerfs-mount" strip --strip-all build/mount.mergerfs
chown root:root "$(DESTDIR)$(BINDIR)/mergerfs-mount" strip --strip-all build/mergerfs-fusermount
chmod u+s "$(DESTDIR)$(BINDIR)/mergerfs-mount"
install -D build/mount.mergerfs "$(DESTDIR)$(SBINDIR)/mount.mergerfs"
.PHONY: objects install: mergerfs-fusermount mount.mergerfs strip
install -D build/mergerfs-fusermount "$(INSTALLBINDIR)/mergerfs-fusermount"
install -D build/mount.mergerfs "$(INSTALLSBINDIR)/mount.mergerfs"
chown root:root "$(INSTALLBINDIR)/mergerfs-fusermount"
chmod u+s "$(INSTALLBINDIR)/mergerfs-fusermount"
.PHONY: objects strip
-include $(DEPS) -include $(DEPS)

View File

@ -143,7 +143,9 @@ static void mount_help(void)
static void exec_fusermount(const char *argv[]) static void exec_fusermount(const char *argv[])
{ {
execv(FUSERMOUNT_DIR "/" FUSERMOUNT_PROG, (char **) argv); execv(FUSERMOUNT_DIR "/mergerfs-" FUSERMOUNT_PROG, (char **) argv);
execvp("mergerfs-" FUSERMOUNT_PROG, (char **) argv);
execv(FUSERMOUNT_DIR "/" FUSERMOUNT_PROG, (char **) argv);
execvp(FUSERMOUNT_PROG, (char **) argv); execvp(FUSERMOUNT_PROG, (char **) argv);
} }
@ -407,7 +409,7 @@ static int fuse_mount_fusermount(const char *mountpoint, struct mount_opts *mo,
rv = receive_fd(fds[1]); rv = receive_fd(fds[1]);
if (!mo->auto_unmount) { if (!mo->auto_unmount) {
/* with auto_unmount option fusermount will not exit until /* with auto_unmount option fusermount will not exit until
this socket is closed */ this socket is closed */
close(fds[1]); close(fds[1]);
waitpid(pid, NULL, 0); /* bury zombie */ waitpid(pid, NULL, 0); /* bury zombie */

View File

@ -1293,7 +1293,7 @@ int main(int argc, char *argv[])
return 0; return 0;
/* Become a daemon and wait for the parent to exit or die. /* Become a daemon and wait for the parent to exit or die.
ie For the control socket to get closed. ie For the control socket to get closed.
btw We don't want to use daemon() function here because btw We don't want to use daemon() function here because
it forks and messes with the file descriptors. */ it forks and messes with the file descriptors. */
setsid(); setsid();

View File

@ -93,6 +93,7 @@ int main(int argc, char *argv[])
else else
basename = argv[0]; basename = argv[0];
type = "mergerfs";
if (strncmp(basename, "mount.fuse.", 11) == 0) if (strncmp(basename, "mount.fuse.", 11) == 0)
type = basename + 11; type = basename + 11;
if (strncmp(basename, "mount.fuseblk.", 14) == 0) if (strncmp(basename, "mount.fuseblk.", 14) == 0)

View File

@ -1,7 +1,7 @@
Name: mergerfs Name: mergerfs
Version: __VERSION__ Version: __VERSION__
Release: 1%{?dist} Release: 1%{?dist}
Summary: A FUSE union filesystem Summary: A featureful FUSE based union filesystem
Group: Applications/System Group: Applications/System
License: ISC License: ISC
@ -33,6 +33,7 @@ make install PREFIX=%{_prefix} DESTDIR=%{buildroot}
%files %files
%{_bindir}/* %{_bindir}/*
%{_sbindir}/*
%doc %{_mandir}/* %doc %{_mandir}/*
%changelog %changelog