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

SOURCES=\
	read_vg_t.c \
	write_vg_t.c \
	pretty_print.c \
	get_pvs_t.c \
	read_pv_t.c \
	get_vgs_t.c

TARGETS=\
	read_vg_t \
	write_vg_t \
	get_pvs_t \
	read_pv_t \
	get_vgs_t

include $(top_builddir)/make.tmpl

read_vg_t: read_vg_t.o pretty_print.o $(top_builddir)/lib/liblvm.a
	$(CC) -o read_vg_t read_vg_t.o pretty_print.o -L$(top_builddir)/lib -llvm

write_vg_t: write_vg_t.o pretty_print.o $(top_builddir)/lib/liblvm.a
	$(CC) -o write_vg_t write_vg_t.o pretty_print.o \
	-L$(top_builddir)/lib -llvm

get_pvs_t: get_pvs_t.o pretty_print.o $(top_builddir)/lib/liblvm.a
	$(CC) -o get_pvs_t get_pvs_t.o pretty_print.o -L$(top_builddir)/lib -llvm

read_pv_t: read_pv_t.o pretty_print.o $(top_builddir)/lib/liblvm.a
	$(CC) -o read_pv_t read_pv_t.o pretty_print.o -L$(top_builddir)/lib -llvm

get_vgs_t: get_vgs_t.o pretty_print.o $(top_builddir)/lib/liblvm.a
	$(CC) -o get_vgs_t get_vgs_t.o pretty_print.o -L$(top_builddir)/lib -llvm

