# @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 ifeq ("@HAVE_FULL_RELRO@", "yes") comma := , ifneq ("@STATIC_LINK@", "yes") ifeq (,$(findstring -z$(comma)relro,$(LDFLAGS))) LDFLAGS += -Wl,-z,relro endif ifeq (,$(findstring -z$(comma)now,$(LDFLAGS))) LDFLAGS += -Wl,-z,now endif # TODO: think about configure option for this flag # for now leave decision on distro maitainer #ifeq (,$(findstring -z$(comma)pack-relative-relocs,$(LDFLAGS))) # LDFLAGS += -Wl,-z,pack-relative-relocs #endif # For systems with old readline library that requires extra libs to link with # we stick to default --no-as-needed and we avoid adding --as-needed flag ifneq (-l,$(findstring -l,$(filter-out %readline,$(READLINE_LIBS)))) ifeq (,$(findstring --as-needed,$(LDFLAGS))) LDFLAGS += -Wl,--as-needed endif endif ifeq ("@HAVE_PIE@", "yes") EXTRA_EXEC_CFLAGS += -fPIE EXTRA_EXEC_LDFLAGS += -pie -fPIE 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_STATIC) ifeq ("@SHARED_LINK@", "yes") TARGETS += $(LIB_SHARED) endif 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) $(SHOW) " [CC] $($@ %.so: %.o $(SHOW) " [CC] $( /dev/null %.d: .PRECIOUS: %.d %.mo: %.po $(SHOW) " [MSGFMT] $( $@ 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