#
# Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved.
# Copyright (C) 2004-2012 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

srcdir = @srcdir@
top_srcdir = @top_srcdir@
top_builddir = @top_builddir@

SOURCES =\
	dumpconfig.c \
	formats.c \
	lvchange.c \
	lvconvert.c \
	lvconvert_poll.c \
	lvcreate.c \
	lvdisplay.c \
	lvextend.c \
	lvmchange.c \
	lvmcmdline.c \
	lvmdiskscan.c \
	lvreduce.c \
	lvremove.c \
	lvrename.c \
	lvresize.c \
	lvscan.c \
	polldaemon.c \
	pvchange.c \
	pvck.c \
	pvcreate.c \
	pvdisplay.c \
	pvmove.c \
	pvmove_poll.c \
	pvremove.c \
	pvresize.c \
	pvscan.c \
	reporter.c \
	segtypes.c \
	tags.c \
	toollib.c \
	vgcfgbackup.c \
	vgcfgrestore.c \
	vgchange.c \
	vgck.c \
	vgcreate.c \
	vgconvert.c \
	vgdisplay.c \
	vgexport.c \
	vgextend.c \
	vgimport.c \
	vgmerge.c \
	vgmknodes.c \
	lvpoll.c \
	vgimportclone.c \
	vgreduce.c \
	vgremove.c \
	vgrename.c \
	vgscan.c \
	vgsplit.c

SOURCES2 =\
	dmsetup.c \
	lvm.c \
	lvm2cmd-static.c \
	lvm2cmd.c \
	lvmcmdlib.c

TARGETS =\
	.commands \
	liblvm2cmd.a \
	lvm

TARGETS_DM = dmsetup

INSTALL_LVM_TARGETS = install_tools_dynamic
INSTALL_DMSETUP_TARGETS = install_dmsetup_dynamic
INSTALL_CMDLIB_TARGETS = install_cmdlib_dynamic install_cmdlib_include 

ifeq ("@STATIC_LINK@", "yes")
  TARGETS += lvm.static
  TARGETS_DM += dmsetup.static
  INSTALL_LVM_TARGETS += install_tools_static
  INSTALL_DMSETUP_TARGETS += install_dmsetup_static
  INSTALL_CMDLIB_TARGETS += install_cmdlib_static
endif

LVMLIBS = $(LVMINTERNAL_LIBS)
LIB_VERSION = $(LIB_VERSION_LVM)

CLEAN_TARGETS = liblvm2cmd.$(LIB_SUFFIX) $(TARGETS_DM) \
	liblvm2cmd.$(LIB_SUFFIX).$(LIB_VERSION) lvm-static.o \
	liblvm2cmd-static.a dmsetup.static lvm.static \
	$(LDDEPS) .exported_symbols_generated

ifeq ("@CMDLIB@", "yes")
	TARGETS += liblvm2cmd.$(LIB_SUFFIX).$(LIB_VERSION)
	INSTALL_LVM_TARGETS += $(INSTALL_CMDLIB_TARGETS)
endif

ifeq ("@DMEVENTD@", "yes")
	LVMLIBS += -ldevmapper-event
endif

LVMLIBS += -ldevmapper

EXPORTED_HEADER = $(srcdir)/lvm2cmd.h
EXPORTED_FN_PREFIX = lvm2

CFLOW_LIST = lvmcmdlib.c lvm2cmd.c
CFLOW_LIST_TARGET = liblvm2cmd.cflow
CFLOW_TARGET = lvm

include $(top_builddir)/make.tmpl

device-mapper: $(TARGETS_DM)

CFLAGS_dmsetup.o += $(UDEV_CFLAGS) $(EXTRA_EXEC_CFLAGS)

dmsetup: dmsetup.o $(top_builddir)/libdm/libdevmapper.$(LIB_SUFFIX)
	$(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) -L$(top_builddir)/libdm \
	      -o $@ dmsetup.o -ldevmapper $(LIBS)

dmsetup.static: dmsetup.o $(interfacebuilddir)/libdevmapper.a
	$(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacebuilddir) \
	      -o $@ dmsetup.o -ldevmapper $(M_LIBS) $(PTHREAD_LIBS) $(STATIC_LIBS) $(LIBS)

all: device-mapper

CFLAGS_lvm.o += $(EXTRA_EXEC_CFLAGS)
CFLAGS_lvmcmdline.o += $(VALGRIND_CFLAGS)

lvm: $(OBJECTS) lvm.o $(top_builddir)/lib/liblvm-internal.a
	$(CC) $(CFLAGS) $(LDFLAGS) $(EXTRA_EXEC_LDFLAGS) $(ELDFLAGS) -o $@ $(OBJECTS) lvm.o \
		$(LVMLIBS) $(READLINE_LIBS) $(LIBS) -rdynamic

ifeq ("@BUILD_LVMETAD@", "yes")
lvm: $(top_builddir)/libdaemon/client/libdaemonclient.a
endif

lvm.static: $(OBJECTS) lvm-static.o $(top_builddir)/lib/liblvm-internal.a  $(interfacebuilddir)/libdevmapper.a
	$(CC) $(CFLAGS) $(LDFLAGS) -static -L$(interfacebuilddir) -o $@ \
	      $(OBJECTS) lvm-static.o $(LVMLIBS) $(STATIC_LIBS) $(LIBS)

liblvm2cmd.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd.o
	cat $(top_builddir)/lib/liblvm-internal.a > $@
	$(AR) rs $@ $(OBJECTS) lvmcmdlib.o lvm2cmd.o

liblvm2cmd-static.a: $(top_builddir)/lib/liblvm-internal.a $(OBJECTS) lvmcmdlib.o lvm2cmd-static.o
	cat $(top_builddir)/lib/liblvm-internal.a > $@
	$(AR) rs $@ $(OBJECTS) lvmcmdlib.o lvm2cmd-static.o

liblvm2cmd.$(LIB_SUFFIX): liblvm2cmd.a $(LDDEPS)
	$(CC) -shared -Wl,-soname,$@.$(LIB_VERSION) \
		$(CFLAGS) $(CLDFLAGS) -o $@ \
		@CLDWHOLEARCHIVE@ liblvm2cmd.a @CLDNOWHOLEARCHIVE@ \
		$(LVMLIBS) $(LIBS)

liblvm2cmd.$(LIB_SUFFIX).$(LIB_VERSION): liblvm2cmd.$(LIB_SUFFIX)
	$(LN_S) -f $< $@

.commands: $(srcdir)/commands.h $(srcdir)/cmdnames.h Makefile
	$(CC) -E -P $(srcdir)/cmdnames.h 2> /dev/null | \
		egrep -v '^ *(|#.*|config|devtypes|dumpconfig|formats|fullreport|help|lastlog|lvpoll|pvdata|segtypes|systemid|tags|version) *$$' > .commands

ifneq ("$(CFLOW_CMD)", "")
CFLOW_SOURCES = $(addprefix $(srcdir)/, $(SOURCES))
-include $(top_builddir)/libdm/libdevmapper.cflow
-include $(top_builddir)/lib/liblvm-internal.cflow
endif

.PHONY: install_cmdlib_dynamic install_cmdlib_static install_cmdlib_include \
	install_tools_dynamic install_tools_static \
	install_dmsetup_dynamic install_dmsetup_static

install_cmdlib_include: $(srcdir)/lvm2cmd.h
	$(INSTALL_DATA) -D $< $(includedir)/$(<F)

install_cmdlib_dynamic: liblvm2cmd.$(LIB_SUFFIX)
	$(INSTALL_PROGRAM) -D $< $(libdir)/$(<F).$(LIB_VERSION)
	$(INSTALL_DIR) $(usrlibdir)
	$(LN_S) -f $(USRLIB_RELPATH)$(<F).$(LIB_VERSION) $(usrlibdir)/$(<F)

install_cmdlib_static: liblvm2cmd-static.a
	$(INSTALL_DATA) -D $< $(usrlibdir)/liblvm2cmd.a

install_tools_dynamic: lvm .commands
	$(INSTALL_PROGRAM) -D lvm $(sbindir)/lvm
	@echo Creating symbolic links for individual commands in $(sbindir)
	@for v in `cat .commands`; do \
		echo "$(LN_S) -f lvm $(sbindir)/$$v"; \
		$(LN_S) -f lvm $(sbindir)/$$v; \
	done;

install_tools_static: lvm.static
	$(INSTALL_PROGRAM) -D $< $(staticdir)/$(<F)

install_dmsetup_dynamic: dmsetup
	$(INSTALL_PROGRAM) -D $< $(sbindir)/$(<F)
	$(LN_S) -f $(<F) $(sbindir)/dmstats

install_dmsetup_static: dmsetup.static
	$(INSTALL_PROGRAM) -D $< $(staticdir)/$(<F)
	$(LN_S) -f $(<F) $(sbindir)/dmstats

install_device-mapper: $(INSTALL_DMSETUP_TARGETS)

install_lvm2: $(INSTALL_LVM_TARGETS)

install: install_lvm2 install_device-mapper
