#
# 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

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

ifeq ("@LVM1@", "shared")
  SUBDIRS = format1
endif

ifeq ("@POOL@", "shared")
  SUBDIRS += format_pool
endif

ifeq ("@SNAPSHOTS@", "shared")
  SUBDIRS += snapshot
endif

ifeq ("@MIRRORS@", "shared")
  SUBDIRS += mirror
endif

ifeq ("@RAID@", "shared")
  SUBDIRS += raid
endif

ifeq ("@REPLICATORS@", "shared")
  SUBDIRS += replicator
endif

ifeq ("@THIN@", "shared")
  SUBDIRS += thin
endif

ifeq ("@CACHE@", "shared")
  SUBDIRS += cache_segtype
endif

SOURCES =\
	activate/activate.c \
	cache/lvmcache.c \
	commands/toolcontext.c \
	config/config.c \
	datastruct/btree.c \
	datastruct/str_list.c \
	device/dev-cache.c \
	device/dev-ext.c \
	device/dev-io.c \
	device/dev-md.c \
	device/dev-swap.c \
	device/dev-type.c \
	device/dev-luks.c \
	device/dev-dasd.c \
	display/display.c \
	error/errseg.c \
	unknown/unknown.c \
	filters/filter-composite.c \
	filters/filter-persistent.c \
	filters/filter-regex.c \
	filters/filter-sysfs.c \
	filters/filter-md.c \
	filters/filter-fwraid.c \
	filters/filter-mpath.c \
	filters/filter-partitioned.c \
	filters/filter-type.c \
	filters/filter-usable.c \
	filters/filter-internal.c \
	format_text/archive.c \
	format_text/archiver.c \
	format_text/export.c \
	format_text/flags.c \
	format_text/format-text.c \
	format_text/import.c \
	format_text/import_vsn1.c \
	format_text/text_label.c \
	freeseg/freeseg.c \
	label/label.c \
	locking/file_locking.c \
	locking/locking.c \
	locking/no_locking.c \
	log/log.c \
	metadata/cache_manip.c \
	metadata/lv.c \
	metadata/lv_manip.c \
	metadata/merge.c \
	metadata/metadata.c \
	metadata/mirror.c \
	metadata/pool_manip.c \
	metadata/pv.c \
	metadata/pv_manip.c \
	metadata/pv_map.c \
	metadata/raid_manip.c \
	metadata/replicator_manip.c \
	metadata/segtype.c \
	metadata/snapshot_manip.c \
	metadata/thin_manip.c \
	metadata/vg.c \
	misc/crc.c \
	misc/lvm-exec.c \
	misc/lvm-file.c \
	misc/lvm-flock.c \
	misc/lvm-globals.c \
	misc/lvm-signal.c \
	misc/lvm-string.c \
	misc/lvm-wrappers.c \
	misc/lvm-percent.c \
	mm/memlock.c \
	notify/lvmnotify.c \
	properties/prop_common.c \
	report/properties.c \
	report/report.c \
	striped/striped.c \
	uuid/uuid.c \
	zero/zero.c

ifeq ("@LVM1@", "internal")
  SOURCES +=\
	format1/disk-rep.c \
	format1/format1.c \
	format1/import-export.c \
	format1/import-extents.c \
	format1/layout.c \
	format1/lvm1-label.c \
	format1/vg_number.c
endif

ifeq ("@POOL@", "internal")
  SOURCES +=\
	format_pool/disk_rep.c \
	format_pool/format_pool.c \
	format_pool/import_export.c \
	format_pool/pool_label.c
endif

ifeq ("@CLUSTER@", "internal")
  SOURCES += locking/cluster_locking.c
endif

ifeq ("@CLUSTER@", "shared")
  SUBDIRS += locking
endif

ifeq ("@SNAPSHOTS@", "internal")
  SOURCES += snapshot/snapshot.c
endif

ifeq ("@MIRRORS@", "internal")
  SOURCES += mirror/mirrored.c
endif

ifeq ("@RAID@", "internal")
  SOURCES += raid/raid.c
endif

ifeq ("@REPLICATORS@", "internal")
  SOURCES += replicator/replicator.c
endif

ifeq ("@THIN@", "internal")
  SOURCES += thin/thin.c
endif

ifeq ("@CACHE@", "internal")
  SOURCES += cache_segtype/cache.c
endif

ifeq ("@DEVMAPPER@", "yes")
  SOURCES +=\
	activate/dev_manager.c \
	activate/fs.c
endif

ifeq ("@HAVE_LIBDL@", "yes")
  SOURCES +=\
	locking/external_locking.c \
	misc/sharedlib.c
endif

ifeq ("@BUILD_LVMETAD@", "yes")
  SOURCES +=\
	cache/lvmetad.c
endif

ifeq ("@BUILD_LVMPOLLD@", "yes")
  SOURCES +=\
	lvmpolld/lvmpolld-client.c
endif

ifeq ("@BUILD_LVMLOCKD@", "yes")
  SOURCES +=\
	locking/lvmlockd.c
endif

ifeq ("@DMEVENTD@", "yes")
  CLDFLAGS += -L$(top_builddir)/daemons/dmeventd
  LIBS += -ldevmapper-event
endif

LIB_NAME = liblvm-internal
LIB_STATIC = $(LIB_NAME).a

ifeq ($(MAKECMDGOALS),distclean)
  SUBDIRS =\
	format1 \
	format_pool \
	snapshot \
	mirror \
	notify \
	raid \
	replicator \
	thin \
	cache_segtype \
	locking
endif

CFLOW_LIST = $(SOURCES)
CFLOW_LIST_TARGET = $(LIB_NAME).cflow

include $(top_builddir)/make.tmpl

CFLAGS += $(BLKID_CFLAGS) $(UDEV_CFLAGS) $(VALGRIND_CFLAGS)

$(SUBDIRS): $(LIB_STATIC)

CLEAN_TARGETS += misc/configure.h misc/lvm-version.h
