# Beginning of file MCONFIG

SHELL = /bin/sh

prefix = @prefix@
exec_prefix = @exec_prefix@
usr_prefix = @usr_prefix@
bindir = $(exec_prefix)/bin
ubindir = $(usr_prefix)/bin
sbindir = $(exec_prefix)/sbin
usbindir = $(usr_prefix)/sbin
libdir = $(exec_prefix)/lib
ulibdir = $(usr_prefix)/lib
includedir = $(usr_prefix)/include
mandir = $(usr_prefix)/man
man1dir = $(usr_prefix)/man/man1
man8dir = $(usr_prefix)/man/man8
cat1dir = $(usr_prefix)/man/cat1
cat8dir = $(usr_prefix)/man/cat8
infodir = $(usr_prefix)/info

@SET_MAKE@

INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
CC = @CC@
DEFS = @DEFS@
CFLAGS = @CFLAGS@
ALL_CFLAGS = $(CPPFLAGS) $(DEFS) $(WFLAGS) $(CFLAGS) $(XTRA_CFLAGS) \
	-I$(top_builddir)/lib -I$(top_srcdir)/lib $(LINUX_INCLUDE) 
LDFLAGS = @LDFLAGS@
ALL_LDFLAGS = $(LDFLAGS)
RM = @RM@
LN = @LN@
LN_S = @LN_S@
MV = @MV@
CP = @CP@
CHMOD = @CHMOD@
AR = @AR@
AWK = @AWK@
SED = @SED@
RANLIB = @RANLIB@
STRIP = @STRIP@
LD = $(PURE) @CC@
ARUPD = $(AR) r

#
# Library definitions
#
LIB = $(top_builddir)/lib
LIBSS = $(LIB)/libss@LIB_EXT@
LIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@
LIBE2P = $(LIB)/libe2p@LIB_EXT@
LIBEXT2FS = $(LIB)/libext2fs@LIB_EXT@
LIBUUID = $(LIB)/libuuid@LIB_EXT@ @SOCKET_LIB@ 

STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@
STATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@
STATIC_LIBE2P = $(LIB)/libe2p@STATIC_LIB_EXT@
STATIC_LIBEXT2FS = $(LIB)/libext2fs@STATIC_LIB_EXT@
STATIC_LIBUUID = $(LIB)/libuuid@STATIC_LIB_EXT@ @SOCKET_LIB@ 

PROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@
PROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@
PROFILED_LIBE2P = $(LIB)/libe2p@PROFILED_LIB_EXT@
PROFILED_LIBEXT2FS = $(LIB)/libext2fs@PROFILED_LIB_EXT@
PROFILED_LIBUUID = $(LIB)/libuuid@PROFILED_LIB_EXT@ @SOCKET_LIB@ 

#
# Use these definitions is you use tools 2.x, x < 16
#
#DLL_BIN=/usr/dll/bin
#JUMP_PREFIX=/usr/dll/jump/

#
# Use these definitions if you use tools 2.16 or above
#
DLL_BIN=/usr/bin
JUMP_PREFIX=/usr/bin/jump

# An include directive pointing to a directory holding enough linux-like
# include files to satisfy some programs here
LINUX_INCLUDE=@LINUX_INCLUDE@

#
# A fast substitution command for fixing up man pages, shell scripts, etc.
#
SUBSTITUTE= $(top_builddir)/lib/substitute_sh

#
# Warning flags
#
# Uncomment WFLAGS if you want really anal GCC warning messages
#
#
@W@WFLAGS=		-ansi -D_POSIX_SOURCE -pedantic \
@W@			-Wall -Wwrite-strings -Wpointer-arith \
@W@			-Wcast-qual -Wcast-align -Wtraditional \
@W@			-Wstrict-prototypes -Wmissing-prototypes \
@W@			-Wnested-externs -Winline -DNO_INLINE_FUNCS -Wshadow 

#
# Installation user and groups
#
BINGRP=		bin
BINOWN=		bin
BINMODE=	555
INCGRP=		bin
INCOWN=		bin
INCMODE=	444
LIBOWN=		bin
LIBGRP=		bin
LIBMODE=	444
MANGRP=		bin
MANOWN=		bin
MANMODE=	444

all::

#
# Autoconf magic...
#

$(top_builddir)/config.status: $(top_srcdir)/configure
	(cd $(top_builddir); ./config.status --recheck)

$(top_builddir)/MCONFIG: $(top_srcdir)/MCONFIG.in $(top_builddir)/config.status
	(cd $(top_builddir); CONFIG_FILES=MCONFIG ./config.status)

$(top_builddir)/lib/substitute_sh: $(top_srcdir)/lib/substitute_sh.in \
		$(top_builddir)/config.status
	(cd $(top_builddir); CONFIG_FILES=lib/substitute_sh ./config.status)

Makefile: $(srcdir)/Makefile.in $(top_builddir)/MCONFIG \
		$(top_builddir)/config.status
	(cd $(top_builddir); CONFIG_FILES=$(my_dir)/Makefile ./config.status)

$(top_srcdir)/configure: $(top_srcdir)/configure.in
	cd $(top_srcdir) && autoconf

#
# Make depend magic...
#

.depend: Makefile $(SRCS) $(top_srcdir)/depfix.sed
	if test -n "$(SRCS)" ; then \
		$(CC) -M $(ALL_CFLAGS) $(SRCS) | \
			sed -f $(top_srcdir)/depfix.sed \
			    -e 's; $(srcdir)/; $$(srcdir)/;g' \
			    -e 's; $(top_srcdir)/; $$(top_srcdir)/;g' \
			    -e 's; $(top_builddir)/; $$(top_builddir)/;g' \
			    -e 's; \./; ;g' \
			    -e '/^ *\\$$/d' > .depend; \
	else :; fi

depend:: .depend
	if test -n "$(SRCS)" ; then \
		sed -e '/^# +++ Dependency line eater +++/,$$d' \
			< $(srcdir)/Makefile.in | cat - .depend \
			> $(srcdir)/Makefile.in.new; \
	$(MV) $(srcdir)/Makefile.in $(srcdir)/Makefile.in.old; \
	$(MV) $(srcdir)/Makefile.in.new $(srcdir)/Makefile.in; \
	else :; fi





# End of file MCONFIG
