mirror of https://github.com/trapexit/mergerfs.git
Browse Source
[RFC] Switch to CMake build system
[RFC] Switch to CMake build system
Currently incomplete features: * version generation based on git information; (currently done at configure time, not build time, so can get stale easily) * libattr autodetection; (might need to be reworked for <sys/attr.h> change) * RPM/DEB packaging might be lacking something; * TGZ (source code) packaging is incomplete.pull/511/head
Andrey Mazo
6 years ago
No known key found for this signature in database
GPG Key ID: 8D30814ABF01E3CF
8 changed files with 246 additions and 350 deletions
-
244CMakeLists.txt
-
247Makefile
-
1debian/compat
-
18debian/control
-
11debian/rules
-
50mergerfs.spec
-
2src/version.hpp.in
-
23tools/update-version
@ -0,0 +1,244 @@ |
|||||
|
cmake_minimum_required(VERSION 3.5 FATAL_ERROR) |
||||
|
|
||||
|
project(mergerfs LANGUAGES CXX) |
||||
|
|
||||
|
include(CMakeDependentOption) |
||||
|
include(GNUInstallDirs) |
||||
|
|
||||
|
if(NOT DEFINED ENABLE_XATTR) |
||||
|
set(ENABLE_XATTR "AUTO") |
||||
|
endif() |
||||
|
# we could have used option(ENABLE_XATTR) here, but it doesn't allow for AUTO behavior |
||||
|
set(ENABLE_XATTR "${ENABLE_XATTR}" CACHE STRING "Build with xattr support (AUTO, YES, NO)") |
||||
|
CMAKE_DEPENDENT_OPTION(WITH_XATTR "Include dir with xattr headers" |
||||
|
OFF "ENABLE_XATTR" |
||||
|
OFF) |
||||
|
option(WITH_INTERNAL_FUSE "Use bundled (YES) or system (NO) libfuse" "YES") |
||||
|
|
||||
|
if(NOT DEFINED CMAKE_BUILD_TYPE) |
||||
|
set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING) |
||||
|
endif() |
||||
|
|
||||
|
file(GLOB mergerfs_sources src/*.cpp src/*.icpp src/*.hpp src/*.h) |
||||
|
set(version_hpp "${CMAKE_CURRENT_BINARY_DIR}/version.hpp") |
||||
|
list(APPEND mergerfs_sources ${version_hpp}) |
||||
|
add_executable(mergerfs ${mergerfs_sources}) |
||||
|
target_include_directories(mergerfs PRIVATE "${CMAKE_CURRENT_BINARY_DIR}") |
||||
|
|
||||
|
set(GIT2DEBCL "${CMAKE_CURRENT_SOURCE_DIR}/tools/git2debcl") |
||||
|
|
||||
|
find_program(PANDOC pandoc) |
||||
|
if(NOT PANDOC) |
||||
|
message(WARNING "pandoc does not appear available: manpage won't be buildable") |
||||
|
endif() |
||||
|
|
||||
|
if(NOT DEFINED ${MERGERFS_VERSION}) |
||||
|
set(git_toplevel_dir) |
||||
|
find_program(GIT git) |
||||
|
if(GIT) |
||||
|
execute_process( |
||||
|
COMMAND ${GIT} rev-parse --show-toplevel |
||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
|
OUTPUT_VARIABLE git_toplevel_dir |
||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
||||
|
) |
||||
|
if(git_toplevel_dir) |
||||
|
file(TO_CMAKE_PATH "${git_toplevel_dir}" git_toplevel_dir) |
||||
|
endif() |
||||
|
endif() |
||||
|
if(git_toplevel_dir STREQUAL CMAKE_CURRENT_SOURCE_DIR) |
||||
|
# we're in a git worktree, and not in a super-project git tree |
||||
|
execute_process( |
||||
|
COMMAND ${GIT} describe --always --tags --dirty |
||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
|
OUTPUT_VARIABLE MERGERFS_VERSION |
||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE |
||||
|
) |
||||
|
elseif(EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/VERSION") |
||||
|
file(READ "${CMAKE_CURRENT_SOURCE_DIR}/VERSION" MERGERFS_VERSION) |
||||
|
else() |
||||
|
message(FATAL_ERROR "mergerfs version can't be determined. Use release tarball or run from within mergerfs git repository") |
||||
|
endif() |
||||
|
endif() |
||||
|
|
||||
|
# XXX: might get stale |
||||
|
# after MERGERFS_VERSION is defined |
||||
|
configure_file(src/version.hpp.in "${version_hpp}" @ONLY) |
||||
|
|
||||
|
if(ENABLE_XATTR) # including "AUTO" |
||||
|
if(WITH_XATTR) |
||||
|
find_path(XATTR_INCLUDE_DIR attr/xattr.h PATHS "${WITH_XATTR}") |
||||
|
else() |
||||
|
find_path(XATTR_INCLUDE_DIR attr/xattr.h) |
||||
|
endif() |
||||
|
if(NOT XATTR_INCLUDE_DIR) |
||||
|
if(ENABLE_XATTR EQUAL "AUTO") |
||||
|
set(msg_level "WARNING") |
||||
|
else() |
||||
|
# xattr is explicitly requested, but is not available |
||||
|
set(msg_level "FATAL_ERROR") |
||||
|
endif() |
||||
|
message("${msg_level}" "xattr not available: disabling") |
||||
|
endif() |
||||
|
else() |
||||
|
set(XATTR_INCLUDE_DIR NO) |
||||
|
endif() |
||||
|
if(XATTR_INCLUDE_DIR) |
||||
|
target_include_directories(mergerfs PRIVATE "${XATTR_INCLUDE_DIR}") |
||||
|
else() |
||||
|
target_compile_definitions(mergerfs PRIVATE "-DWITHOUT_XATTR") |
||||
|
endif() |
||||
|
|
||||
|
if(WITH_INTERNAL_FUSE) |
||||
|
include(ExternalProject) |
||||
|
ExternalProject_Add(libfuse_internal |
||||
|
URL "${CMAKE_CURRENT_SOURCE_DIR}/libfuse" |
||||
|
CONFIGURE_COMMAND ${CMAKE_COMMAND} -E make_directory m4 |
||||
|
COMMAND autoreconf --force --install |
||||
|
COMMAND ./configure CC=${CMAKE_C_COMPILER} CXX=${CMAKE_CXX_COMPILER} --enable-lib --disable-util --disable-example |
||||
|
BUILD_COMMAND ${CMAKE_MAKE_PROGRAM} |
||||
|
INSTALL_COMMAND true |
||||
|
BUILD_IN_SOURCE 1 |
||||
|
) |
||||
|
ExternalProject_Get_Property(libfuse_internal SOURCE_DIR) |
||||
|
ExternalProject_Get_Property(libfuse_internal BINARY_DIR) |
||||
|
add_library(libfuse STATIC IMPORTED) |
||||
|
set_property(TARGET libfuse PROPERTY IMPORTED_LOCATION "${BINARY_DIR}/lib/.libs/libfuse.a") |
||||
|
|
||||
|
add_dependencies(mergerfs libfuse_internal) |
||||
|
target_include_directories(mergerfs PRIVATE "${SOURCE_DIR}/include") |
||||
|
target_compile_definitions(mergerfs PRIVATE "-D_FILE_OFFSET_BITS=64") |
||||
|
target_link_libraries(mergerfs PRIVATE libfuse dl) |
||||
|
set_property(TARGET mergerfs APPEND PROPERTY LINK_FLAGS "-pthread") |
||||
|
else() |
||||
|
set(EXTERNAL_FUSE_MIN_REQ 2.9.7) |
||||
|
find_package(PkgConfig REQUIRED) |
||||
|
pkg_search_module(FUSE REQUIRED "fuse >= ${EXTERNAL_FUSE_MIN_REQ}") |
||||
|
target_include_directories(mergerfs PRIVATE "${FUSE_INCLUDE_DIRS}") |
||||
|
target_compile_options(mergerfs PRIVATE "${FUSE_CFLAGS_OTHER}") |
||||
|
target_link_libraries(mergerfs PRIVATE "${FUSE_LIBRARIES}") |
||||
|
set_property(TARGET mergerfs APPEND PROPERTY LINK_FLAGS "${FUSE_LDFLAGS_OTHER}") |
||||
|
link_directories("${FUSE_LIBRARY_DIRS}") |
||||
|
endif() |
||||
|
|
||||
|
set(UGID_USE_RWLOCK 0) |
||||
|
|
||||
|
target_compile_definitions(mergerfs PRIVATE |
||||
|
"-DFUSE_USE_VERSION=29" |
||||
|
"-DUGID_USE_RWLOCK=${UGID_USE_RWLOCK}" |
||||
|
) |
||||
|
|
||||
|
target_compile_options(mergerfs PRIVATE "-Wall" "-Wno-unused-result") |
||||
|
|
||||
|
add_custom_command(OUTPUT mount.mergerfs |
||||
|
COMMAND ${CMAKE_COMMAND} -E create_symlink mergerfs mount.mergerfs |
||||
|
DEPENDS mergerfs |
||||
|
VERBATIM |
||||
|
) |
||||
|
add_custom_target(create-mount.mergerfs ALL |
||||
|
DEPENDS mount.mergerfs |
||||
|
) |
||||
|
|
||||
|
|
||||
|
install(TARGETS mergerfs DESTINATION "${CMAKE_INSTALL_BINDIR}") |
||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/mount.mergerfs" DESTINATION "${CMAKE_INSTALL_BINDIR}") |
||||
|
|
||||
|
set(manpage "${CMAKE_CURRENT_SOURCE_DIR}/man/mergerfs.1") |
||||
|
|
||||
|
if(PANDOC) |
||||
|
set(manpage "${CMAKE_CURRENT_BINARY_DIR}/mergerfs.1") |
||||
|
add_custom_command(OUTPUT "${manpage}" |
||||
|
COMMAND ${PANDOC} -s -t man -o "${manpage}" "${CMAKE_CURRENT_SOURCE_DIR}/README.md" |
||||
|
DEPENDS README.md |
||||
|
VERBATIM |
||||
|
) |
||||
|
endif() |
||||
|
install( |
||||
|
FILES "${manpage}" |
||||
|
DESTINATION "${CMAKE_INSTALL_MANDIR}/man1" |
||||
|
) |
||||
|
add_custom_target(man ALL DEPENDS "${manpage}") |
||||
|
|
||||
|
|
||||
|
if(GIT) |
||||
|
add_custom_target(changelog |
||||
|
COMMAND ${GIT2DEBCL} --name ${PROJECT_NAME} > ${CMAKE_CURRENT_BINARY_DIR}/changelog |
||||
|
BYPRODUCTS changelog |
||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
|
) |
||||
|
add_custom_target(authors |
||||
|
COMMAND ${GIT} log --format='%aN <%aE>' | sort -fu > ${CMAKE_CURRENT_BINARY_DIR}/AUTHORS |
||||
|
BYPRODUCTS AUTHORS |
||||
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} |
||||
|
) |
||||
|
|
||||
|
endif() |
||||
|
|
||||
|
if(EXISTS /usr/bin/apt-get) |
||||
|
add_custom_target(install-build-pkgs |
||||
|
COMMAND apt-get -qy update |
||||
|
COMMAND apt-get -qy --no-install-suggests --no-install-recommends --force-yes install build-essential git g++ debhelper libattr1-dev python automake libtool lsb-release |
||||
|
) |
||||
|
elseif(EXISTS /usr/bin/dnf) |
||||
|
add_custom_target(install-build-pkgs |
||||
|
COMMAND dnf -y update |
||||
|
COMMAND dnf -y install git rpm-build libattr-devel gcc-c++ make which python automake libtool gettext-devel |
||||
|
) |
||||
|
elseif(EXISTS /usr/bin/yum) |
||||
|
add_custom_target(install-build-pkgs |
||||
|
COMMAND yum -y update |
||||
|
COMMAND yum -y install git rpm-build libattr-devel gcc-c++ make which python automake libtool gettext-devel |
||||
|
) |
||||
|
endif() |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
set(CPACK_GENERATOR "DEB;RPM") |
||||
|
|
||||
|
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}") |
||||
|
set(CPACK_PACKAGE_VERSION "${MERGERFS_VERSION}") |
||||
|
set(CPACK_PACKAGE_CONTACT "Antonio SJ Musumeci <trapexit@spawn.link>") |
||||
|
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "another FUSE union filesystem") |
||||
|
set(package_long_description |
||||
|
"mergerfs is similar to mhddfs, unionfs, and aufs. |
||||
|
Like mhddfs in that it too uses FUSE. |
||||
|
Like aufs in that it provides multiple policies for how to handle behavior." |
||||
|
) |
||||
|
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") |
||||
|
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") |
||||
|
|
||||
|
set(CPACK_DEBIAN_PACKAGE_DEPENDS "\\$\{shlibs\:Depends}, \\$\{misc\:Depends}, fuse [linux-any] | fuse4bsd [kfreebsd-any]") |
||||
|
set(CPACK_DEBIAN_PACKAGE_BUILDS_DEPENDS "debhelper (>= 8.0.0), libattr1-dev") |
||||
|
set(CPACK_DEBIAN_PACKAGE_SECTION "utils") |
||||
|
set(CPACK_DEBIAN_PACKAGE_PRIORITY "optional") |
||||
|
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://github.com/trapexit/mergerfs") |
||||
|
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION |
||||
|
"${CPACK_PACKAGE_DESCRIPTION_SUMMARY} |
||||
|
${package_long_description}" |
||||
|
) |
||||
|
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS "ON") |
||||
|
set(CPACK_DEBIAN_PACKAGE_CONTROL_STRICT_PERMISSION "ON") |
||||
|
|
||||
|
set(CPACK_DEBIAN_PACKAGE_CONTROL_EXTRA |
||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/debian/docs;${CMAKE_CURRENT_SOURCE_DIR}/debian/copyright;${CMAKE_CURRENT_BINARY_DIR}/changelog" |
||||
|
) |
||||
|
|
||||
|
set(CPACK_RPM_PACKAGE_RELEASE "1%{?dist}") |
||||
|
set(CPACK_RPM_PACKAGE_LICENSE "ISC") |
||||
|
set(CPACK_RPM_PACKAGE_GROUP "Applications/System") |
||||
|
set(CPACK_RPM_PACKAGE_URL "http://github.com/trapexit/mergerfs") |
||||
|
set(CPACK_RPM_PACKAGE_REQUIRES "fuse") |
||||
|
set(CPACK_RPM_PACKAGE_SUMMARY "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}") |
||||
|
set(CPACK_RPM_PACKAGE_DESCRIPTION "${package_long_description}") |
||||
|
# TODO: CPACK_RPM_CHANGELOG_FILE |
||||
|
|
||||
|
set(CPACK_SOURCE_GENERATOR "TGZ") |
||||
|
|
||||
|
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_NAME}-${MERGERFS_VERSION}") |
||||
|
set(CPACK_SOURCE_IGNORE_FILES "${CMAKE_CURRENT_SOURCE_DIR}/.git/") |
||||
|
# CPACK_SOURCE_INSTALLED_DIRECTORIES |
||||
|
# custom_target instead of cpack source generator? |
||||
|
|
||||
|
include(CPack) |
@ -1,247 +0,0 @@ |
|||||
# Copyright (c) 2016, Antonio SJ Musumeci <trapexit@spawn.link>
|
|
||||
#
|
|
||||
# Permission to use, copy, modify, and/or distribute this software for any
|
|
||||
# purpose with or without fee is hereby granted, provided that the above
|
|
||||
# copyright notice and this permission notice appear in all copies.
|
|
||||
#
|
|
||||
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
||||
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
||||
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
||||
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
||||
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
||||
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
||||
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
||||
|
|
||||
GIT = $(shell which git) |
|
||||
TAR = $(shell which tar) |
|
||||
MKDIR = $(shell which mkdir) |
|
||||
TOUCH = $(shell which touch) |
|
||||
CP = $(shell which cp) |
|
||||
RM = $(shell which rm) |
|
||||
LN = $(shell which ln) |
|
||||
FIND = $(shell which find) |
|
||||
INSTALL = $(shell which install) |
|
||||
MKTEMP = $(shell which mktemp) |
|
||||
STRIP = $(shell which strip) |
|
||||
PANDOC = $(shell which pandoc) |
|
||||
SED = $(shell which sed) |
|
||||
GZIP = $(shell which gzip) |
|
||||
RPMBUILD = $(shell which rpmbuild) |
|
||||
GIT2DEBCL = ./tools/git2debcl |
|
||||
PKGCONFIG = pkg-config |
|
||||
|
|
||||
GIT_REPO = 0 |
|
||||
ifneq ($(GIT),) |
|
||||
ifeq ($(shell test -e .git; echo $$?),0) |
|
||||
GIT_REPO = 1 |
|
||||
endif |
|
||||
endif |
|
||||
|
|
||||
ifeq ($(PANDOC),) |
|
||||
$(warning "pandoc does not appear available: manpage won't be buildable") |
|
||||
endif |
|
||||
|
|
||||
XATTR_AVAILABLE = $(shell test ! -e /usr/include/attr/xattr.h; echo $$?) |
|
||||
|
|
||||
INTERNAL_FUSE = 1 |
|
||||
EXTERNAL_FUSE_MIN_REQ = 2.9.7 |
|
||||
|
|
||||
ifeq ($(INTERNAL_FUSE),1) |
|
||||
FUSE_CFLAGS = -D_FILE_OFFSET_BITS=64 -Ilibfuse/include |
|
||||
FUSE_LIBS = libfuse/lib/.libs/libfuse.a |
|
||||
FUSE_TARGET = $(FUSE_LIBS) |
|
||||
else |
|
||||
FUSE_CFLAGS := $(shell $(PKGCONFIG) --cflags 'fuse >= $(EXTERNAL_FUSE_MIN_REQ)') |
|
||||
FUSE_LIBS := $(shell $(PKGCONFIG) --libs 'fuse >= $(EXTERNAL_FUSE_MIN_REQ)') |
|
||||
FUSE_TARGET := |
|
||||
ifeq ($(FUSE_CFLAGS)$(FUSE_LIBS),) |
|
||||
$(error "Use of external FUSE requested, but no libfuse >= $(EXTERNAL_FUSE_MIN_REQ) found.") |
|
||||
endif |
|
||||
endif |
|
||||
|
|
||||
UGID_USE_RWLOCK = 0 |
|
||||
|
|
||||
OPTS = -O2 |
|
||||
SRC = $(wildcard src/*.cpp) |
|
||||
OBJ = $(SRC:src/%.cpp=obj/%.o) |
|
||||
DEPS = $(OBJ:obj/%.o=obj/%.d) |
|
||||
TARGET = mergerfs |
|
||||
MANPAGE = $(TARGET).1 |
|
||||
CFLAGS = -g -Wall \
|
|
||||
$(OPTS) \
|
|
||||
-Wno-unused-result \
|
|
||||
$(FUSE_CFLAGS) \
|
|
||||
-DFUSE_USE_VERSION=29 \
|
|
||||
-MMD \
|
|
||||
-DUGID_USE_RWLOCK=$(UGID_USE_RWLOCK) |
|
||||
|
|
||||
PREFIX = /usr/local |
|
||||
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) |
|
||||
|
|
||||
ifeq ($(XATTR_AVAILABLE),0) |
|
||||
$(warning "xattr not available: disabling") |
|
||||
CFLAGS += -DWITHOUT_XATTR |
|
||||
endif |
|
||||
|
|
||||
all: $(TARGET) |
|
||||
|
|
||||
help: |
|
||||
@echo "usage: make" |
|
||||
@echo "make XATTR_AVAILABLE=0 - to build program without xattrs functionality (auto discovered otherwise)" |
|
||||
@echo "make INTERNAL_FUSE=0 - to build program with external (system) libfuse rather than the bundled one ('-o threads=' option will be unavailable)" |
|
||||
|
|
||||
$(TARGET): version obj/obj-stamp $(FUSE_TARGET) $(OBJ) |
|
||||
$(CXX) $(CFLAGS) $(LDFLAGS) $(OBJ) -o $@ $(FUSE_LIBS) -ldl -pthread -lrt |
|
||||
|
|
||||
mount.mergerfs: $(TARGET) |
|
||||
$(LN) -fs "$<" "$@" |
|
||||
|
|
||||
changelog: |
|
||||
ifeq ($(GIT_REPO),1) |
|
||||
$(GIT2DEBCL) --name $(TARGET) > ChangeLog |
|
||||
endif |
|
||||
|
|
||||
authors: |
|
||||
ifeq ($(GIT_REPO),1) |
|
||||
$(GIT) log --format='%aN <%aE>' | sort -f | uniq > AUTHORS |
|
||||
endif |
|
||||
|
|
||||
version: |
|
||||
tools/update-version |
|
||||
|
|
||||
obj/obj-stamp: |
|
||||
$(MKDIR) -p obj |
|
||||
$(TOUCH) $@ |
|
||||
|
|
||||
obj/%.o: src/%.cpp |
|
||||
$(CXX) $(CFLAGS) -c $< -o $@ |
|
||||
|
|
||||
clean: rpm-clean libfuse_Makefile |
|
||||
$(RM) -f src/version.hpp |
|
||||
$(RM) -rf obj |
|
||||
$(RM) -f "$(TARGET)" mount.mergerfs |
|
||||
$(FIND) . -name "*~" -delete |
|
||||
ifeq ($(INTERNAL_FUSE),1) |
|
||||
cd libfuse && $(MAKE) clean |
|
||||
endif |
|
||||
|
|
||||
distclean: clean libfuse_Makefile |
|
||||
ifeq ($(INTERNAL_FUSE),1) |
|
||||
cd libfuse && $(MAKE) distclean |
|
||||
endif |
|
||||
ifeq ($(GIT_REPO),1) |
|
||||
$(GIT) clean -fd |
|
||||
endif |
|
||||
|
|
||||
install: install-base install-mount.mergerfs install-man |
|
||||
|
|
||||
install-base: $(TARGET) |
|
||||
$(MKDIR) -p "$(INSTALLBINDIR)" |
|
||||
$(INSTALL) -v -m 0755 "$(TARGET)" "$(INSTALLBINDIR)/$(TARGET)" |
|
||||
|
|
||||
install-mount.mergerfs: mount.mergerfs |
|
||||
$(MKDIR) -p "$(INSTALLBINDIR)" |
|
||||
$(CP) -a "$<" "$(INSTALLBINDIR)/$<" |
|
||||
|
|
||||
install-man: $(MANPAGE) |
|
||||
$(MKDIR) -p "$(INSTALLMAN1DIR)" |
|
||||
$(INSTALL) -v -m 0644 "man/$(MANPAGE)" "$(INSTALLMAN1DIR)/$(MANPAGE)" |
|
||||
|
|
||||
install-strip: install-base |
|
||||
$(STRIP) "$(INSTALLBINDIR)/$(TARGET)" |
|
||||
|
|
||||
uninstall: uninstall-base uninstall-mount.mergerfs uninstall-man |
|
||||
|
|
||||
uninstall-base: |
|
||||
$(RM) -f "$(INSTALLBINDIR)/$(TARGET)" |
|
||||
|
|
||||
uninstall-mount.mergerfs: |
|
||||
$(RM) -f "$(INSTALLBINDIR)/mount.mergerfs" |
|
||||
|
|
||||
uninstall-man: |
|
||||
$(RM) -f "$(INSTALLMAN1DIR)/$(MANPAGE)" |
|
||||
|
|
||||
$(MANPAGE): README.md |
|
||||
ifneq ($(PANDOC),) |
|
||||
$(PANDOC) -s -t man -o "man/$(MANPAGE)" README.md |
|
||||
endif |
|
||||
|
|
||||
man: $(MANPAGE) |
|
||||
|
|
||||
tarball: distclean man changelog authors version |
|
||||
$(eval VERSION := $(shell cat VERSION)) |
|
||||
$(eval VERSION := $(subst -,_,$(VERSION))) |
|
||||
$(eval FILENAME := $(TARGET)-$(VERSION)) |
|
||||
$(eval TMPDIR := $(shell $(MKTEMP) --tmpdir -d .$(FILENAME).XXXXXXXX)) |
|
||||
$(MKDIR) $(TMPDIR)/$(FILENAME) |
|
||||
$(CP) -ar . $(TMPDIR)/$(FILENAME) |
|
||||
$(TAR) --exclude=.git -cz -C $(TMPDIR) -f $(FILENAME).tar.gz $(FILENAME) |
|
||||
$(RM) -rf $(TMPDIR) |
|
||||
|
|
||||
debian-changelog: |
|
||||
ifeq ($(GIT_REPO),1) |
|
||||
$(GIT2DEBCL) --name $(TARGET) > debian/changelog |
|
||||
else |
|
||||
cp ChangeLog debian/changelog |
|
||||
endif |
|
||||
|
|
||||
signed-deb: debian-changelog |
|
||||
dpkg-buildpackage |
|
||||
|
|
||||
deb: debian-changelog |
|
||||
dpkg-buildpackage -uc -us |
|
||||
|
|
||||
rpm-clean: |
|
||||
$(RM) -rf rpmbuild |
|
||||
|
|
||||
rpm: tarball |
|
||||
$(eval VERSION := $(shell cat VERSION)) |
|
||||
$(eval VERSION := $(subst -,_,$(VERSION))) |
|
||||
$(MKDIR) -p rpmbuild/BUILD rpmbuild/RPMS rpmbuild/SOURCES |
|
||||
$(SED) 's/__VERSION__/$(VERSION)/g' $(TARGET).spec > \
|
|
||||
rpmbuild/SOURCES/$(TARGET).spec |
|
||||
cp -ar $(TARGET)-$(VERSION).tar.gz rpmbuild/SOURCES |
|
||||
$(RPMBUILD) -ba rpmbuild/SOURCES/$(TARGET).spec \
|
|
||||
--define "_topdir $(CURDIR)/rpmbuild" |
|
||||
|
|
||||
install-build-pkgs: |
|
||||
ifeq ($(shell test -e /usr/bin/apt-get; echo $$?),0) |
|
||||
apt-get -qy update |
|
||||
apt-get -qy --no-install-suggests --no-install-recommends --force-yes \
|
|
||||
install build-essential git g++ debhelper libattr1-dev python automake libtool lsb-release |
|
||||
else ifeq ($(shell test -e /usr/bin/dnf; echo $$?),0) |
|
||||
dnf -y update |
|
||||
dnf -y install git rpm-build libattr-devel gcc-c++ make which python automake libtool gettext-devel |
|
||||
else ifeq ($(shell test -e /usr/bin/yum; echo $$?),0) |
|
||||
yum -y update |
|
||||
yum -y install git rpm-build libattr-devel gcc-c++ make which python automake libtool gettext-devel |
|
||||
endif |
|
||||
|
|
||||
unexport CFLAGS |
|
||||
.PHONY: libfuse_Makefile |
|
||||
libfuse_Makefile: |
|
||||
ifeq ($(INTERNAL_FUSE),1) |
|
||||
ifeq ($(shell test -e libfuse/Makefile; echo $$?),1) |
|
||||
cd libfuse && \
|
|
||||
$(MKDIR) -p m4 && \
|
|
||||
autoreconf --force --install && \
|
|
||||
./configure --enable-lib --disable-util --disable-example |
|
||||
endif |
|
||||
endif |
|
||||
|
|
||||
libfuse/lib/.libs/libfuse.a: libfuse_Makefile |
|
||||
cd libfuse && $(MAKE) |
|
||||
|
|
||||
.PHONY: all clean install help version |
|
||||
|
|
||||
-include $(DEPS) |
|
@ -1 +0,0 @@ |
|||||
9 |
|
@ -1,18 +0,0 @@ |
|||||
Source: mergerfs |
|
||||
Section: utils |
|
||||
Priority: optional |
|
||||
Maintainer: Antonio SJ Musumeci <trapexit@spawn.link> |
|
||||
Build-Depends: debhelper (>= 8.0.0), |
|
||||
libattr1-dev |
|
||||
Standards-Version: 3.9.4 |
|
||||
Homepage: http://github.com/trapexit/mergerfs |
|
||||
|
|
||||
Package: mergerfs |
|
||||
Architecture: any |
|
||||
Depends: ${shlibs:Depends}, |
|
||||
${misc:Depends}, |
|
||||
fuse [linux-any] | fuse4bsd [kfreebsd-any] |
|
||||
Description: another FUSE union filesystem |
|
||||
mergerfs is a union filesystem geared towards simplifying storage and |
|
||||
management of files across numerous commodity storage devices. It is |
|
||||
similar to mhddfs, unionfs, and aufs. |
|
@ -1,11 +0,0 @@ |
|||||
#!/usr/bin/make -f |
|
||||
# -*- makefile -*- |
|
||||
|
|
||||
# Uncomment this to turn on verbose mode. |
|
||||
#export DH_VERBOSE=1 |
|
||||
|
|
||||
%: |
|
||||
dh $@ |
|
||||
|
|
||||
override_dh_auto_install: |
|
||||
$(MAKE) DESTDIR=$(CURDIR)/debian/mergerfs PREFIX=/usr install |
|
@ -1,50 +0,0 @@ |
|||||
Name: mergerfs |
|
||||
Version: __VERSION__ |
|
||||
Release: 1%{?dist} |
|
||||
Summary: A FUSE union filesystem |
|
||||
|
|
||||
Group: Applications/System |
|
||||
License: ISC |
|
||||
URL: https://github.com/trapexit/mergerfs |
|
||||
|
|
||||
Source: mergerfs-%{version}.tar.gz |
|
||||
|
|
||||
BuildRequires: gcc-c++ |
|
||||
BuildRequires: libattr-devel |
|
||||
# rpmbuild driven by the Makefile uses git to generate a version number |
|
||||
BuildRequires: git |
|
||||
|
|
||||
Requires: fuse |
|
||||
|
|
||||
%prep |
|
||||
%setup -q |
|
||||
|
|
||||
%description |
|
||||
mergerfs is similar to mhddfs, unionfs, and aufs. Like mhddfs in that it too |
|
||||
uses FUSE. Like aufs in that it provides multiple policies for how to handle |
|
||||
behavior. |
|
||||
|
|
||||
%build |
|
||||
make %{?_smp_mflags} |
|
||||
|
|
||||
%install |
|
||||
make install PREFIX=%{_prefix} DESTDIR=%{buildroot} |
|
||||
|
|
||||
%files |
|
||||
%{_bindir}/* |
|
||||
%doc %{_mandir}/* |
|
||||
|
|
||||
%changelog |
|
||||
* Mon Jan 25 2016 Antonio SJ Musumeci <trapexit@spawn.link> |
|
||||
- Remove sbin files |
|
||||
|
|
||||
* Sat Sep 05 2015 Antonio SJ Musumeci <trapexit@spawn.link> |
|
||||
- Include PREFIX to install |
|
||||
|
|
||||
* Mon Dec 29 2014 Joe Lawrence <joe.lawrence@stratus.com> |
|
||||
- Tweak rpmbuild to archive current git HEAD into a tarball, then (re)build in |
|
||||
the rpmbuild directory -- more complicated but seemingly better suited to |
|
||||
generate source and debug rpms. |
|
||||
|
|
||||
* Fri Jun 20 2014 Joe Lawrence <joe.lawrence@stratus.com> |
|
||||
- Initial rpm spec file. |
|
@ -0,0 +1,2 @@ |
|||||
|
#pragma once |
||||
|
static const char MERGERFS_VERSION[] = "@MERGERFS_VERSION@"; |
@ -1,23 +0,0 @@ |
|||||
#!/bin/sh |
|
||||
|
|
||||
GIT=$(which git) |
|
||||
if [ "${GIT}" = "" ]; then |
|
||||
exit 0 |
|
||||
fi |
|
||||
|
|
||||
VERSION=$(git describe --always --tags --dirty) |
|
||||
if [ $? -ne 0 ]; then |
|
||||
VERSION=$(cat VERSION) |
|
||||
fi |
|
||||
|
|
||||
if [ "${VERSION}" = "" ]; then |
|
||||
VERSION="unknown" |
|
||||
fi |
|
||||
|
|
||||
echo -n "${VERSION}" > VERSION |
|
||||
grep -q \"${VERSION}\" src/version.hpp |
|
||||
RV=$? |
|
||||
if [ $RV -ne 0 ]; then |
|
||||
echo "#pragma once" > src/version.hpp |
|
||||
echo "static const char MERGERFS_VERSION[] = \"${VERSION}\";" >> src/version.hpp |
|
||||
fi |
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue