mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
c8868041d8
Add some Gentoo based patches for better support of static linking. This are not tested nor supported by upstream developers. Usage requires presence of several libraries in their static form which is however not commonly available. Selinux modified by zkabelac to still work on older sofrware which did not provided libselinux.pc at a time - see keep the old check present and use pkg-config only when possible.
551 lines
16 KiB
Cheetah
551 lines
16 KiB
Cheetah
# @configure_input@
|
|
#
|
|
# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
|
|
# Copyright (C) 2004-2014 Red Hat, Inc. All rights reserved.
|
|
#
|
|
# This file is part of LVM2.
|
|
#
|
|
# This copyrighted material is made available to anyone wishing to use,
|
|
# modify, copy, or redistribute it subject to the terms and conditions
|
|
# of the GNU General Public License v.2.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software Foundation,
|
|
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
V ?= $(if ("@SILENT_RULES@","yes"),,1)
|
|
Q := $(if $(V),,@)
|
|
SHOW := $(if $(V),@true,@echo)
|
|
|
|
SHELL = @SHELL@
|
|
|
|
@SET_MAKE@
|
|
|
|
# Allow environment to override any built-in default value for CC.
|
|
# If there is a built-in default, CC is NOT set to @CC@ here.
|
|
CC ?= @CC@
|
|
|
|
# If $(CC) holds the usual built-in default value of 'cc' then replace it with
|
|
# the configured value.
|
|
# (To avoid this and force the use of 'cc' from the environment, supply its
|
|
# full path.)
|
|
ifeq ($(CC), cc)
|
|
CC = @CC@
|
|
endif
|
|
|
|
RANLIB = @RANLIB@
|
|
READELF = @READELF@
|
|
INSTALL = @INSTALL@
|
|
MKDIR_P = @MKDIR_P@
|
|
MSGFMT = @MSGFMT@
|
|
LCOV = @LCOV@
|
|
GENHTML = @GENHTML@
|
|
LN_S = @LN_S@
|
|
SED = @SED@
|
|
CFLOW_CMD = @CFLOW_CMD@
|
|
AWK = @AWK@
|
|
CHMOD = @CHMOD@
|
|
EGREP = @EGREP@
|
|
GREP = @GREP@
|
|
SORT = @SORT@
|
|
WC = @WC@
|
|
AR = @AR@
|
|
RM = rm -f
|
|
|
|
LIBS += @LIBS@ $(PTHREAD_LIBS) $(SELINUX_LIBS) $(UDEV_LIBS) $(RT_LIBS) $(M_LIBS)
|
|
# Extra libraries always linked with static binaries
|
|
STATIC_LIBS = $(PTHREAD_LIBS) $(SELINUX_STATIC_LIBS) $(UDEV_STATIC_LIBS) $(BLKID_STATIC_LIBS) $(RT_LIBS) $(M_LIBS)
|
|
DEFS += @DEFS@
|
|
# FIXME set this only where it's needed, not globally?
|
|
CFLAGS ?= @COPTIMISE_FLAG@ @CFLAGS@
|
|
LDFLAGS ?= @LDFLAGS@
|
|
STATIC_LDFLAGS += @STATIC_LDFLAGS@
|
|
CPPFLAGS ?= @CPPFLAGS@
|
|
CLDFLAGS += @CLDFLAGS@
|
|
ELDFLAGS += @ELDFLAGS@
|
|
LDDEPS += @LDDEPS@
|
|
LIB_SUFFIX = @LIB_SUFFIX@
|
|
DL_LIBS = @DL_LIBS@
|
|
RT_LIBS = @RT_LIBS@
|
|
M_LIBS = @M_LIBS@
|
|
PTHREAD_LIBS = @PTHREAD_LIBS@
|
|
READLINE_LIBS = @READLINE_LIBS@
|
|
EDITLINE_LIBS = @EDITLINE_LIBS@
|
|
SELINUX_LIBS = @SELINUX_LIBS@
|
|
SELINUX_STATIC_LIBS = @SELINUX_STATIC_LIBS@
|
|
UDEV_CFLAGS = @UDEV_CFLAGS@
|
|
UDEV_LIBS = @UDEV_LIBS@
|
|
UDEV_STATIC_LIBS = @UDEV_STATIC_LIBS@
|
|
BLKID_CFLAGS = @BLKID_CFLAGS@
|
|
BLKID_LIBS = @BLKID_LIBS@
|
|
BLKID_STATIC_LIBS = @BLKID_STATIC_LIBS@
|
|
LIBSYSTEMD_LIBS = @LIBSYSTEMD_LIBS@
|
|
VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
|
|
|
|
# Setup directory variables
|
|
prefix = @prefix@
|
|
exec_prefix = @exec_prefix@
|
|
udev_prefix = @udev_prefix@
|
|
sysconfdir = @sysconfdir@
|
|
rootdir = $(DESTDIR)/
|
|
bindir = $(DESTDIR)@bindir@
|
|
confdir = $(DESTDIR)@CONFDIR@/lvm
|
|
profiledir = $(confdir)/@DEFAULT_PROFILE_SUBDIR@
|
|
includedir = $(DESTDIR)@includedir@
|
|
libdir = $(DESTDIR)@libdir@
|
|
libexecdir = $(DESTDIR)@libexecdir@
|
|
usrlibdir = $(DESTDIR)@usrlibdir@
|
|
sbindir = $(DESTDIR)@sbindir@
|
|
usrsbindir = $(DESTDIR)@usrsbindir@
|
|
datarootdir = @datarootdir@
|
|
datadir = $(DESTDIR)@datadir@
|
|
infodir = $(DESTDIR)@infodir@
|
|
mandir = $(DESTDIR)@mandir@
|
|
localedir = $(DESTDIR)@localedir@
|
|
staticdir = $(DESTDIR)@STATICDIR@
|
|
udevdir = $(DESTDIR)@udevdir@
|
|
pkgconfigdir = $(usrlibdir)/pkgconfig
|
|
initdir = $(DESTDIR)$(sysconfdir)/rc.d/init.d
|
|
dbusconfdir = $(DESTDIR)$(sysconfdir)/dbus-1/system.d
|
|
dbusservicedir = $(datadir)/dbus-1/system-services
|
|
systemd_unit_dir = $(DESTDIR)@systemdsystemunitdir@
|
|
systemd_generator_dir = $(DESTDIR)$(SYSTEMD_GENERATOR_DIR)
|
|
systemd_dir = $(DESTDIR)@systemdutildir@
|
|
tmpfiles_dir = $(DESTDIR)@tmpfilesdir@
|
|
ocf_scriptdir = $(DESTDIR)@OCFDIR@
|
|
pythonprefix = $(DESTDIR)$(prefix)
|
|
|
|
# N.B. No $(DESTDIR) prefix here.
|
|
python2dir = @PYTHON2DIR@
|
|
python3dir = @PYTHON3DIR@
|
|
|
|
USRLIB_RELPATH = $(shell echo $(abspath $(usrlibdir) $(libdir)) | \
|
|
$(AWK) -f $(top_srcdir)/scripts/relpath.awk)
|
|
|
|
SYSTEMD_GENERATOR_DIR = @systemdutildir@/system-generators
|
|
DEFAULT_SYS_DIR = @DEFAULT_SYS_DIR@
|
|
DEFAULT_ARCHIVE_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_ARCHIVE_SUBDIR@
|
|
DEFAULT_BACKUP_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_BACKUP_SUBDIR@
|
|
DEFAULT_CACHE_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_CACHE_SUBDIR@
|
|
DEFAULT_PROFILE_DIR = $(DEFAULT_SYS_DIR)/@DEFAULT_PROFILE_SUBDIR@
|
|
DEFAULT_LOCK_DIR = @DEFAULT_LOCK_DIR@
|
|
DEFAULT_RUN_DIR = @DEFAULT_RUN_DIR@
|
|
DEFAULT_PID_DIR = @DEFAULT_PID_DIR@
|
|
DEFAULT_MANGLING = @MANGLING@
|
|
|
|
#----------------------------------------------------------------------
|
|
# From http://blog.melski.net/tag/debugging-makefiles/
|
|
#
|
|
# Usage: make print-CC print-CXX print-LD
|
|
#----------------------------------------------------------------------
|
|
print-%:
|
|
@echo '$*=$($*)'
|
|
@echo ' origin = $(origin $*)'
|
|
@echo ' flavor = $(flavor $*)'
|
|
@echo ' value = $(value $*)'
|
|
|
|
# Setup vpath search paths for some suffixes
|
|
vpath %.c $(srcdir)
|
|
vpath %.cpp $(srcdir)
|
|
vpath %.in $(srcdir)
|
|
vpath %.po $(srcdir)
|
|
vpath %.exported_symbols $(srcdir)
|
|
|
|
interface = @interface@
|
|
interfacebuilddir = $(top_builddir)/libdm/$(interface)
|
|
rpmbuilddir = $(abs_top_builddir)/build
|
|
|
|
# The number of jobs to run, if blank, defaults to the make standard
|
|
ifndef MAKEFLAGS
|
|
MAKEFLAGS = @JOBS@
|
|
endif
|
|
|
|
ifneq (1, $(firstword $(V)))
|
|
MAKEFLAGS += --no-print-directory
|
|
endif
|
|
|
|
# Handle installation of files
|
|
ifeq ("@WRITE_INSTALL@", "yes")
|
|
# leaving defaults
|
|
M_INSTALL_SCRIPT =
|
|
M_INSTALL_DATA = -m 644
|
|
else
|
|
M_INSTALL_PROGRAM = -m 555
|
|
M_INSTALL_DATA = -m 444
|
|
endif
|
|
INSTALL_PROGRAM = $(INSTALL) $(M_INSTALL_PROGRAM) $(STRIP)
|
|
INSTALL_DATA = $(INSTALL) -p $(M_INSTALL_DATA)
|
|
INSTALL_WDATA = $(INSTALL) -p -m 644
|
|
|
|
INSTALL_DIR = $(INSTALL) -m 755 -d
|
|
INSTALL_ROOT_DIR = $(INSTALL) -m 700 -d
|
|
INSTALL_ROOT_DATA = $(INSTALL) -m 600
|
|
INSTALL_SCRIPT = $(INSTALL) -p $(M_INSTALL_PROGRAM)
|
|
|
|
.SUFFIXES:
|
|
.SUFFIXES: .c .cpp .d .o .so .a .po .pot .mo .dylib
|
|
|
|
ifeq ("$(notdir $(CC))", "gcc")
|
|
WFLAGS +=\
|
|
-Wall\
|
|
-Wcast-align\
|
|
-Wfloat-equal\
|
|
-Wformat-security\
|
|
-Winline\
|
|
-Wmissing-format-attribute\
|
|
-Wmissing-include-dirs\
|
|
-Wmissing-noreturn\
|
|
-Wpointer-arith\
|
|
-Wredundant-decls\
|
|
-Wshadow\
|
|
-Wundef\
|
|
-Wwrite-strings
|
|
|
|
WCFLAGS +=\
|
|
-Wmissing-declarations\
|
|
-Wmissing-prototypes\
|
|
-Wnested-externs\
|
|
-Wold-style-definition\
|
|
-Wstrict-prototypes\
|
|
-Wuninitialized
|
|
|
|
ifeq ("@HAVE_WJUMP@", "yes")
|
|
WCFLAGS += -Wjump-misses-init
|
|
endif
|
|
|
|
ifeq ("@HAVE_WCLOBBERED@", "yes")
|
|
WFLAGS +=\
|
|
-Wclobbered\
|
|
-Wempty-body\
|
|
-Wignored-qualifiers\
|
|
-Wlogical-op\
|
|
-Wtype-limits
|
|
|
|
WCFLAGS +=\
|
|
-Wmissing-parameter-type\
|
|
-Wold-style-declaration\
|
|
-Woverride-init
|
|
endif
|
|
|
|
ifeq ("@HAVE_WSYNCNAND@", "yes")
|
|
WFLAGS += -Wsync-nand
|
|
endif
|
|
endif
|
|
|
|
ifneq ("@STATIC_LINK@", "yes")
|
|
ifeq ("@HAVE_PIE@", "yes")
|
|
ifeq ("@HAVE_FULL_RELRO@", "yes")
|
|
EXTRA_EXEC_CFLAGS += -fPIE
|
|
EXTRA_EXEC_LDFLAGS += -Wl,-z,relro,-z,now -pie -fPIE
|
|
CLDFLAGS += -Wl,-z,relro
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
#WFLAGS += -W -Wno-sign-compare -Wno-unused-parameter -Wno-missing-field-initializers
|
|
#WFLAGS += -Wsign-compare -Wunused-parameter -Wmissing-field-initializers
|
|
#WFLAGS += -Wconversion -Wbad-function-cast -Wcast-qual -Waggregate-return -Wpacked
|
|
#WFLAGS += -pedantic -std=gnu99
|
|
#DEFS += -DDEBUG_CRC32
|
|
|
|
#
|
|
# Avoid recursive extension of CFLAGS
|
|
# by checking whether CFLAGS already has fPIC string
|
|
#
|
|
ifeq (,$(findstring fPIC,$(CFLAGS)))
|
|
|
|
CFLAGS += -fPIC
|
|
|
|
ifeq ("@DEBUG@", "yes")
|
|
ifeq (,$(findstring -g,$(CFLAGS)))
|
|
CFLAGS += -g
|
|
endif
|
|
CFLAGS += -fno-omit-frame-pointer
|
|
DEFS += -DDEBUG
|
|
endif
|
|
|
|
# end of fPIC protection
|
|
endif
|
|
|
|
# Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not supported.
|
|
#DEFS += -DDEBUG_POOL
|
|
# Default pool locking is using the crc checksum. With mprotect memory
|
|
# enforcing compilation faulty memory write could be easily found.
|
|
#DEFS += -DDEBUG_ENFORCE_POOL_LOCKING
|
|
#DEFS += -DBOUNDS_CHECK
|
|
|
|
# LVM is not supposed to use mmap while devices are suspended.
|
|
# This code causes a core dump if gets called.
|
|
#DEFS += -DDEBUG_MEMLOCK
|
|
|
|
#CFLAGS += -pg
|
|
#LDFLAGS += -pg
|
|
|
|
STRIP=
|
|
#STRIP = -s
|
|
|
|
LVM_VERSION := $(shell cat $(top_srcdir)/VERSION)
|
|
|
|
LIB_VERSION_LVM := $(shell $(AWK) -F '.' '{printf "%s.%s",$$1,$$2}' $(top_srcdir)/VERSION)
|
|
|
|
LIB_VERSION_DM := $(shell $(AWK) -F '.' '{printf "%s.%s",$$1,$$2}' $(top_srcdir)/VERSION_DM)
|
|
|
|
INCLUDES += -I$(srcdir) -I$(top_srcdir) -I$(top_builddir)/include -include configure.h
|
|
|
|
|
|
DEPS = $(top_builddir)/libdm/make.tmpl $(top_srcdir)/VERSION \
|
|
$(top_builddir)/libdm/Makefile
|
|
|
|
OBJECTS = $(SOURCES:%.c=%.o) $(CXXSOURCES:%.cpp=%.o)
|
|
POTFILES = $(SOURCES:%.c=%.pot)
|
|
|
|
.PHONY: all pofile distclean clean cleandir cflow device-mapper
|
|
.PHONY: install install_device-mapper install_lvm2
|
|
.PHONY: install_dbus_service
|
|
.PHONY: install_lib_shared install_dm_plugin install_lvm2_plugin
|
|
.PHONY: install_ocf install_systemd_generators install_all_man all_man man help
|
|
.PHONY: python_bindings install_python_bindings
|
|
.PHONY: $(SUBDIRS) $(SUBDIRS.install) $(SUBDIRS.clean) $(SUBDIRS.distclean)
|
|
.PHONY: $(SUBDIRS.pofile) $(SUBDIRS.cflow)
|
|
.PHONY: $(SUBDIRS.device-mapper) $(SUBDIRS.install-device-mapper)
|
|
.PHONY: $(SUBDIRS.generate) generate
|
|
|
|
SUBDIRS.device-mapper := $(SUBDIRS:=.device-mapper)
|
|
SUBDIRS.install := $(SUBDIRS:=.install)
|
|
SUBDIRS.install_device-mapper := $(SUBDIRS:=.install_device-mapper)
|
|
SUBDIRS.pofile := $(SUBDIRS:=.pofile)
|
|
SUBDIRS.cflow := $(SUBDIRS:=.cflow)
|
|
SUBDIRS.clean := $(SUBDIRS:=.clean)
|
|
SUBDIRS.distclean := $(SUBDIRS:=.distclean)
|
|
|
|
TARGETS += $(LIB_SHARED) $(LIB_STATIC)
|
|
|
|
all: $(SUBDIRS) $(TARGETS)
|
|
|
|
install: all $(SUBDIRS.install)
|
|
install_device-mapper: $(SUBDIRS.install_device-mapper)
|
|
install_device_mapper: install_device-mapper
|
|
cflow: $(SUBDIRS.cflow)
|
|
|
|
$(SUBDIRS): $(SUBDIRS.device-mapper)
|
|
$(MAKE) -C $@
|
|
|
|
$(SUBDIRS.device-mapper):
|
|
$(MAKE) -C $(@:.device-mapper=) device-mapper
|
|
|
|
$(SUBDIRS.install): $(SUBDIRS)
|
|
$(MAKE) -C $(@:.install=) install
|
|
|
|
$(SUBDIRS.install_device-mapper): device-mapper
|
|
$(MAKE) -C $(@:.install_device-mapper=) install_device-mapper
|
|
|
|
$(SUBDIRS.clean):
|
|
-$(MAKE) -C $(@:.clean=) clean
|
|
|
|
$(SUBDIRS.distclean):
|
|
-$(MAKE) -C $(@:.distclean=) distclean
|
|
|
|
$(SUBDIRS.cflow):
|
|
$(MAKE) -C $(@:.cflow=) cflow
|
|
|
|
ifeq ("@INTL@", "yes")
|
|
pofile: $(SUBDIRS.pofile) $(POTFILES)
|
|
|
|
$(SUBDIRS.pofile):
|
|
$(MAKE) -C $(@:.pofile=) pofile
|
|
endif
|
|
|
|
$(SUBDIRS.generate):
|
|
$(MAKE) -C $(@:.generate=) generate
|
|
|
|
ifneq ("$(CFLOW_LIST_TARGET)", "")
|
|
CLEAN_CFLOW += $(CFLOW_LIST_TARGET)
|
|
$(CFLOW_LIST_TARGET): $(CFLOW_LIST)
|
|
echo "CFLOW_SOURCES += $(addprefix $(abs_srcdir)/, $(CFLOW_LIST))" > $@
|
|
cflow: $(CFLOW_LIST_TARGET)
|
|
endif
|
|
|
|
ifneq ("$(CFLOW_TARGET)", "")
|
|
CLEAN_CFLOW += \
|
|
$(CFLOW_TARGET).cflow \
|
|
$(CFLOW_TARGET).xref \
|
|
$(CFLOW_TARGET).tree \
|
|
$(CFLOW_TARGET).rtree \
|
|
$(CFLOW_TARGET).rxref
|
|
|
|
ifneq ("$(CFLOW_CMD)", "")
|
|
CFLOW_FLAGS +=\
|
|
--cpp="$(CC) -E $(INCLUDES) $(VALGRIND_CFLAGS) $(BLKID_CFLAGS) $(DEFS) \
|
|
-I$(top_srcdir)/libdm/ioctl \
|
|
-I$(top_srcdir)/libdm" \
|
|
--symbol _ISbit:wrapper \
|
|
--symbol __attribute__:wrapper \
|
|
--symbol __const:type \
|
|
--symbol __const__:wrapper \
|
|
--symbol __extension__:wrapper \
|
|
--symbol __leaf__:wrapper \
|
|
--symbol __nonnull:wrapper \
|
|
--symbol __nothrow__:wrapper \
|
|
--symbol __pure__:wrapper \
|
|
--symbol __REDIRECT:wrapper \
|
|
--symbol __REDIRECT_NTH:wrapper \
|
|
--symbol __restrict:type \
|
|
--symbol __wur:wrapper
|
|
|
|
$(CFLOW_TARGET).cflow: $(CFLOW_SOURCES)
|
|
$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) $(CFLOW_SOURCES)
|
|
$(CFLOW_TARGET).rxref: $(CFLOW_SOURCES)
|
|
$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) -r --omit-arguments $(CFLOW_SOURCES)
|
|
$(CFLOW_TARGET).tree: $(CFLOW_SOURCES)
|
|
$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) --omit-arguments -T -b $(CFLOW_SOURCES)
|
|
$(CFLOW_TARGET).xref: $(CFLOW_SOURCES)
|
|
$(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) --omit-arguments -x $(CFLOW_SOURCES)
|
|
#$(CFLOW_TARGET).rtree: $(CFLOW_SOURCES)
|
|
# $(CFLOW_CMD) -o$@ $(CFLOW_FLAGS) -r --omit-arguments -T -b $(CFLOW_SOURCES)
|
|
cflow: $(CFLOW_TARGET).cflow $(CFLOW_TARGET).tree $(CFLOW_TARGET).rxref $(CFLOW_TARGET).xref
|
|
#$(CFLOW_TARGET).rtree
|
|
endif
|
|
endif
|
|
|
|
.LIBPATTERNS = lib%.so lib%.a
|
|
|
|
DEPFLAGS=-MT $@ -MMD -MP -MF $*.d
|
|
|
|
# still needed in 2018 for 32bit builds
|
|
DEFS+=-D_FILE_OFFSET_BITS=64
|
|
|
|
%.o: %.c $(DEPS)
|
|
@echo " [CC] $(<F)"
|
|
@mkdir -p $(@D)
|
|
$(Q) $(CC) $(DEPFLAGS) -c $(INCLUDES) $(VALGRIND_CFLAGS) $(PROGS_CFLAGS) $(DEFS) $(DEFS_$@) $(WFLAGS) $(WCFLAGS) $(CFLAGS) $(CFLAGS_$@) $(CPPFLAGS) $< -o $@
|
|
|
|
%.o: %.cpp $(DEPS)
|
|
@echo " [CXX] $(<F)"
|
|
@mkdir -p $(@D)
|
|
$(Q) $(CXX) $(DEPFLAGS) -c $(INCLUDES) $(VALGRIND_CFLAGS) $(DEFS) $(DEFS_$@) $(WFLAGS) $(CXXFLAGS) $(CXXFLAGS_$@) $< -o $@
|
|
|
|
%.pot: %.c $(DEPS)
|
|
@echo " [CC] $@"
|
|
@mkdir -p $(@D)
|
|
$(Q) $(CC) -E $(INCLUDES) $(VALGRIND_CFLAGS) $(PROGS_CFLAGS) -include $(top_builddir)/po/pogen.h $(DEFS) $(WFLAGS) $(CFLAGS) $(CPPFLAGS) $< >$@
|
|
|
|
%.so: %.o
|
|
@echo " [CC] $(<F)"
|
|
$(Q) $(CC) -c $(CFLAGS) $(CLDFLAGS) $< $(LIBS) -o $@
|
|
|
|
ifneq (,$(LIB_SHARED))
|
|
|
|
TARGETS += $(LIB_SHARED).$(LIB_VERSION)
|
|
$(LIB_SHARED).$(LIB_VERSION): $(OBJECTS) $(LDDEPS)
|
|
@echo " [CC] $@"
|
|
ifeq ("@LIB_SUFFIX@","so")
|
|
$(Q) $(CC) -shared -Wl,-soname,$(notdir $@) \
|
|
$(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
|
|
endif
|
|
ifeq ("@LIB_SUFFIX@","dylib")
|
|
$(Q) $(CC) -dynamiclib -dylib_current_version,$(LIB_VERSION) \
|
|
$(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@
|
|
endif
|
|
|
|
$(LIB_SHARED): $(LIB_SHARED).$(LIB_VERSION)
|
|
@echo " [LN] $(<F)"
|
|
$(Q) $(LN_S) -f $(<F) $@
|
|
|
|
CLEAN_TARGETS += $(LDDEPS) .exported_symbols_generated
|
|
|
|
install_lib_shared: $(LIB_SHARED)
|
|
@echo " [INSTALL] $<"
|
|
$(Q) $(INSTALL_PROGRAM) -D $< $(libdir)/$(<F).$(LIB_VERSION)
|
|
$(Q) $(INSTALL_DIR) $(usrlibdir)
|
|
$(Q) $(LN_S) -f $(USRLIB_RELPATH)$(<F).$(LIB_VERSION) $(usrlibdir)/$(<F)
|
|
|
|
# FIXME: plugins are installed to subdirs
|
|
# and for compatibility links in libdir are created
|
|
# when the code is fixed links could be removed.
|
|
install_dm_plugin: $(LIB_SHARED)
|
|
@echo " [INSTALL] $<"
|
|
$(Q) $(INSTALL_PROGRAM) -D $< $(libdir)/device-mapper/$(<F)
|
|
$(Q) $(LN_S) -f device-mapper/$(<F) $(libdir)/$(<F)
|
|
|
|
install_lvm2_plugin: $(LIB_SHARED)
|
|
@echo " [INSTALL] $<"
|
|
$(Q) $(INSTALL_PROGRAM) -D $< $(libdir)/lvm2/$(<F)
|
|
$(Q) $(LN_S) -f lvm2/$(<F) $(libdir)/$(<F)
|
|
$(Q) $(LN_S) -f $(<F) $(libdir)/$(<F).$(LIB_VERSION)
|
|
endif
|
|
|
|
$(LIB_STATIC): $(OBJECTS)
|
|
@echo " [AR] $@"
|
|
$(Q) $(RM) $@
|
|
$(Q) $(AR) rsv $@ $(OBJECTS) > /dev/null
|
|
|
|
%.d:
|
|
.PRECIOUS: %.d
|
|
|
|
%.mo: %.po
|
|
@echo " [MSGFMT] $(<F)"
|
|
$(Q) $(MSGFMT) -o $@ $<
|
|
|
|
CLEAN_TARGETS += \
|
|
$(SOURCES:%.c=%.d) $(SOURCES:%.c=%.gcno) $(SOURCES:%.c=%.gcda) \
|
|
$(SOURCES2:%.c=%.o) $(SOURCES2:%.c=%.d) $(SOURCES2:%.c=%.gcno) $(SOURCES2:%.c=%.gcda) \
|
|
$(POTFILES) $(CLEAN_CFLOW)
|
|
|
|
cleandir:
|
|
@echo " [CLEANDIR]"
|
|
ifneq (,$(firstword $(CLEAN_DIRS)))
|
|
$(Q) $(RM) -r $(CLEAN_DIRS)
|
|
endif
|
|
$(Q) $(RM) $(OBJECTS) $(TARGETS) $(CLEAN_TARGETS) core
|
|
|
|
clean: $(SUBDIRS.clean) cleandir
|
|
|
|
distclean: cleandir $(SUBDIRS.distclean)
|
|
@echo " [DISTCLEAN]"
|
|
ifneq (,$(firstword $(DISTCLEAN_DIRS)))
|
|
$(Q) $(RM) -r $(DISTCLEAN_DIRS)
|
|
endif
|
|
$(Q) $(RM) $(DISTCLEAN_TARGETS) Makefile
|
|
|
|
.exported_symbols_generated: $(EXPORTED_HEADER) .exported_symbols $(DEPS)
|
|
$(Q) set -e; \
|
|
( cat $(srcdir)/.exported_symbols; \
|
|
if test -n "$(EXPORTED_HEADER)"; then \
|
|
$(CC) -E -P $(INCLUDES) $(DEFS) $(EXPORTED_HEADER) | \
|
|
$(SED) -ne "/^typedef|}/!s/.*[ *]\($(EXPORTED_FN_PREFIX)_[a-z0-9_]*\)(.*/\1/p"; \
|
|
fi \
|
|
) > $@
|
|
|
|
EXPORTED_UC := $(shell echo $(EXPORTED_FN_PREFIX) | tr '[a-z]' '[A-Z]')
|
|
EXPORTED_SYMBOLS := $(wildcard $(srcdir)/.exported_symbols.Base $(srcdir)/.exported_symbols.$(EXPORTED_UC)_[0-9_]*[0-9])
|
|
|
|
.export.sym: .exported_symbols_generated $(EXPORTED_SYMBOLS)
|
|
ifeq (,$(firstword $(EXPORTED_SYMBOLS)))
|
|
$(Q) set -e; (echo "Base {"; echo " global:";\
|
|
$(SED) "/^#/d;s/^/ /;s/$$/;/" $<;\
|
|
echo " local:"; echo " *;";\
|
|
echo "};";\
|
|
) > $@
|
|
else
|
|
$(Q) set -e;\
|
|
R=$$($(SORT) $^ | $(GREP) -v "^#" | uniq -u);\
|
|
test -z "$$R" || { echo "Mismatch between symbols in shared library and lists in .exported_symbols.* files: $$R"; false; } ;\
|
|
LAST=;\
|
|
for i in $$(echo $(EXPORTED_SYMBOLS) | tr ' ' '\n' | $(SORT) -nt_ -k5 ); do\
|
|
echo "$${i##*.} {"; echo " global:";\
|
|
$(SED) "/^#/d;s/^/ /;s/$$/;/" $$i;\
|
|
if test -z "$$LAST"; then echo " local:"; echo " *;";fi;\
|
|
echo "}$$LAST;";\
|
|
LAST=" $${i##*.}";\
|
|
done > $@
|
|
endif
|
|
|
|
ifeq ("@USE_TRACKING@","yes")
|
|
ifeq (,$(findstring $(MAKECMDGOALS),cscope.out cflow clean distclean lcov \
|
|
help check check_local check_cluster check_lvmpolld))
|
|
.SECONDARY:
|
|
# Note: no tabs before -include
|
|
-include $(SOURCES:.c=.d) $(SOURCES2:.c=.d) $(CXXSOURCES:.cpp=.d)
|
|
endif
|
|
endif
|