# @configure_input@ # # Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. # Copyright (C) 2004-2011 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA SHELL = /bin/sh @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@ INSTALL = @INSTALL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ LCOV = @LCOV@ GENHTML = @GENHTML@ LN_S = @LN_S@ SED = @SED@ CFLOW_CMD = @CFLOW_CMD@ AWK = @AWK@ PYTHON = @PYTHON@ LIBS = @LIBS@ # Extra libraries always linked with static binaries STATIC_LIBS = $(SELINUX_LIBS) $(UDEV_LIBS) $(BLKID_LIBS) DEFS += @DEFS@ # FIXME set this only where it's needed, not globally? CFLAGS += @CFLAGS@ @UDEV_CFLAGS@ CLDFLAGS += @CLDFLAGS@ ELDFLAGS += @ELDFLAGS@ LDDEPS += @LDDEPS@ LDFLAGS += @LDFLAGS@ LIB_SUFFIX = @LIB_SUFFIX@ LVMINTERNAL_LIBS = -llvm-internal $(DAEMON_LIBS) $(UDEV_LIBS) $(DL_LIBS) $(BLKID_LIBS) DL_LIBS = @DL_LIBS@ PTHREAD_LIBS = @PTHREAD_LIBS@ READLINE_LIBS = @READLINE_LIBS@ SELINUX_LIBS = @SELINUX_LIBS@ UDEV_LIBS = @UDEV_LIBS@ BLKID_LIBS=@BLKID_LIBS@ TESTING = @TESTING@ # Setup directory variables prefix = @prefix@ exec_prefix = @exec_prefix@ udev_prefix = @udev_prefix@ sysconfdir = @sysconfdir@ rootdir = $(DESTDIR)/ bindir = $(DESTDIR)@bindir@ confdir = $(DESTDIR)@CONFDIR@/lvm includedir = $(DESTDIR)@includedir@ libdir = $(DESTDIR)@libdir@ usrlibdir = $(DESTDIR)@usrlibdir@ sbindir = $(DESTDIR)@sbindir@ usrsbindir = $(DESTDIR)@usrsbindir@ datarootdir = @datarootdir@ 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 systemd_unit_dir = $(DESTDIR)@systemdsystemunitdir@ systemd_generator_dir = $(DESTDIR)@systemdutildir@/system-generators tmpfiles_dir = $(DESTDIR)@tmpfilesdir@ ocf_scriptdir = $(DESTDIR)@OCFDIR@ pyexecdir = $(DESTDIR)$(prefix) USRLIB_RELPATH = $(shell echo $(abspath $(usrlibdir) $(libdir)) | \ $(AWK) -f $(top_srcdir)/scripts/relpath.awk) 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@ # Setup vpath search paths for some suffixes vpath %.c $(srcdir) vpath %.in $(srcdir) vpath %.po $(srcdir) vpath %.exported_symbols $(srcdir) interface = @interface@ interfacebuilddir = $(top_builddir)/libdm/$(interface) # The number of jobs to run, if blank, defaults to the make standard ifndef MAKEFLAGS MAKEFLAGS = @JOBS@ 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: .c .d .o .so .a .po .pot .mo .dylib WFLAGS += -Wall -Wundef -Wshadow -Wcast-align -Wwrite-strings \ -Wmissing-prototypes -Wmissing-declarations -Wnested-externs \ -Winline -Wmissing-noreturn -Wformat-security -Wredundant-decls \ -Wpointer-arith -Wuninitialized -Wmissing-include-dirs \ -Wfloat-equal -Wstrict-prototypes \ -Wold-style-definition -Wmissing-format-attribute ifeq ("@HAVE_WJUMP@", "yes") WFLAGS += -Wjump-misses-init endif ifeq ("@HAVE_WCLOBBERED@", "yes") WFLAGS += -Wclobbered -Wempty-body -Wignored-qualifiers \ -Wmissing-parameter-type -Wold-style-declaration -Woverride-init \ -Wtype-limits -Wsync-nand -Wlogical-op endif ifneq ("@STATIC_LINK@", "yes") ifeq ("@HAVE_PIE@", "yes") ifeq ("@HAVE_FULL_RELRO@", "yes") EXTRA_EXEC_CFLAGS += -fPIE -DPIE EXTRA_EXEC_LDFLAGS += -Wl,-z,relro,-z,now -pie 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 CFLAGS += -fPIC @COPTIMISE_FLAG@ LDFLAGS += @COPTIMISE_FLAG@ ifeq ("@DEBUG@", "yes") CFLAGS += -g -fno-omit-frame-pointer DEFS += -DDEBUG # memory debugging is not thread-safe yet ifneq ("@DMEVENTD@", "yes") DEFS += -DDEBUG_MEM endif endif ifeq ("@INTL@", "yes") DEFS += -DINTL_PACKAGE=\"@INTL_PACKAGE@\" -DLOCALEDIR=\"@LOCALEDIR@\" endif LDFLAGS += -L$(top_builddir)/libdm -L$(top_builddir)/lib CLDFLAGS += -L$(top_builddir)/libdm -L$(top_builddir)/lib DAEMON_LIBS = -ldaemonclient LDFLAGS += -L$(top_builddir)/libdaemon/client CLDFLAGS += -L$(top_builddir)/libdaemon/client ifeq ("@DMEVENTD@", "yes") LDFLAGS += -L$(top_builddir)/daemons/dmeventd CLDFLAGS += -L$(top_builddir)/daemons/dmeventd endif ifeq ("@DM_COMPAT@", "yes") DEFS += -DDM_COMPAT endif ifeq ("@DM_IOCTLS@", "yes") DEFS += -DDM_IOCTLS endif # Combination of DEBUG_POOL and DEBUG_ENFORCE_POOL_LOCKING is not suppored. #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 #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) LIB_VERSION_APP := $(shell $(AWK) -F '[(). ]' '{printf "%s.%s",$$1,$$4}' $(top_srcdir)/VERSION) INCLUDES += -I. -I$(top_builddir)/include INC_LNS = $(top_builddir)/include/.symlinks_created DEPS = $(top_builddir)/make.tmpl $(top_srcdir)/VERSION \ $(top_builddir)/Makefile $(INC_LNS) OBJECTS = $(SOURCES:%.c=%.o) POTFILES = $(SOURCES:%.c=%.pot) .PHONY: all pofile distclean clean cleandir cflow device-mapper .PHONY: install install_cluster install_device-mapper install_lvm2 .PHONY: install_lib_shared install_dm_plugin install_lvm2_plugin .PHONY: install_ocf help .PHONY: python_bindings install_python_bindings .PHONY: $(SUBDIRS) $(SUBDIRS.install) $(SUBDIRS.clean) $(SUBDIRS.distclean) .PHONY: $(SUBDIRS.pofile) $(SUBDIRS.install_cluster) $(SUBDIRS.cflow) .PHONY: $(SUBDIRS.device-mapper) $(SUBDIRS.install-device-mapper) SUBDIRS.device-mapper := $(SUBDIRS:=.device-mapper) SUBDIRS.install := $(SUBDIRS:=.install) SUBDIRS.install_cluster := $(SUBDIRS:=.install_cluster) SUBDIRS.install_device-mapper := $(SUBDIRS:=.install_device-mapper) SUBDIRS.install_lvm2 := $(SUBDIRS:=.install_lvm2) SUBDIRS.install_ocf := $(SUBDIRS:=.install_ocf) 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_cluster: all $(SUBDIRS.install_cluster) install_device-mapper: $(SUBDIRS.install_device-mapper) install_lvm2: $(SUBDIRS.install_lvm2) install_ocf: $(SUBDIRS.install_ocf) 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_cluster): $(SUBDIRS) $(MAKE) -C $(@:.install_cluster=) install_cluster $(SUBDIRS.install_device-mapper): device-mapper $(MAKE) -C $(@:.install_device-mapper=) install_device-mapper $(SUBDIRS.install_lvm2): $(SUBDIRS) $(MAKE) -C $(@:.install_lvm2=) install_lvm2 $(SUBDIRS.install_ocf): $(MAKE) -C $(@:.install_ocf=) install_ocf $(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 ifneq ("$(CFLOW_LIST_TARGET)", "") CLEAN_CFLOW += $(CFLOW_LIST_TARGET) $(CFLOW_LIST_TARGET): $(CFLOW_LIST) echo "CFLOW_SOURCES += $(addprefix \ \$$(top_srcdir)$(subst $(top_srcdir),,$(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" \ --symbol _ISbit:wrapper \ --symbol __attribute__:wrapper \ --symbol __const__:wrapper \ --symbol __const:type \ --symbol __restrict:type \ --symbol __extension__:wrapper \ --symbol __nonnull:wrapper \ --symbol __nothrow__:wrapper \ --symbol __pure__:wrapper \ --symbol __REDIRECT:wrapper \ --symbol __REDIRECT_NTH:wrapper \ --symbol __wur:wrapper \ -I$(top_srcdir)/libdm \ -I$(top_srcdir)/libdm/ioctl \ -I$(top_srcdir)/daemons/dmeventd/plugins/lvm2/ \ $(INCLUDES) $(DEFS) $(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 $(TARGETS): $(OBJECTS) %.o: %.c $(CC) -c $(INCLUDES) $(DEFS) $(WFLAGS) $(CFLAGS) $(CFLAGS_$@) $< -o $@ %.pot: %.c Makefile $(CC) -E $(INCLUDES) -include $(top_srcdir)/include/pogen.h \ $(DEFS) $(WFLAGS) $(CFLAGS) $< > $@ %.so: %.o $(CC) -c $(CFLAGS) $(CLDFLAGS) $< $(LIBS) -o $@ ifneq (,$(LIB_SHARED)) TARGETS += $(LIB_SHARED).$(LIB_VERSION) $(LIB_SHARED).$(LIB_VERSION): $(OBJECTS) $(LDDEPS) ifeq ("@LIB_SUFFIX@","so") $(CC) -shared -Wl,-soname,$(notdir $@) \ $(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@ endif ifeq ("@LIB_SUFFIX@","dylib") $(CC) -dynamiclib -dylib_current_version,$(LIB_VERSION) \ $(CFLAGS) $(CLDFLAGS) $(OBJECTS) $(LIBS) -o $@ endif $(LIB_SHARED): $(LIB_SHARED).$(LIB_VERSION) $(LN_S) -f $( $@ .export.sym: .exported_symbols_generated set -e; (echo "Base {"; echo " global:"; \ sed "s/^/ /;s/$$/;/" < $<; \ echo " local:"; echo " *;"; echo "};") > $@ ifeq (,$(findstring $(MAKECMDGOALS),cscope.out cflow clean distclean lcov \ help check check_local check_cluster check_lvmetad)) ifdef SOURCES -include $(SOURCES:.c=.d) endif ifdef SOURCES2 -include $(SOURCES2:.c=.d) endif endif