2002-11-08  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.31

2002-11-08  Theodore Ts'o  <tytso@mit.edu>

	* configure.in, configure: Change --enable-jfs-debug to 
		--enable-jbd-debug for consistency's sake.

	* configure.in, configure: Add new substitution variable,
		SWAPFS_CMT, which is '' if swapfs has been enabled, and
		'#' if it has been disabled.
	
	* configure.in, configure: Add support for EVMS ABI 1.2.
		Changed configure option from --enable-old-evms
		to --enable-evms-10 and --enable-evms-11

2002-10-31  Theodore Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs 1.30

2002-10-30  Theodore Ts'o  <tytso@mit.edu>

	* MCONFIG.in (COMPRESS_EXT): Declare all compression extensions

2001-09-24  Theodore Tso  <tytso@mit.edu>

	* Release of E2fsprogs 1.29

2001-08-31  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.28

2002-08-18  Theodore Ts'o  <tytso@mit.edu>

	* configure.in, configure: Add new substitution variable,
		LINUX_CMT, which is '' on Linux systems, and '#' on
		non-Linux systems.  Enable HTREE support by default.

	* Makefile.in: On Linux systems, build lib/evms.

2002-07-14  Theodore Ts'o  <tytso@mit.edu>

	* configure.in, configure: Remove test for the presence (or
		absence of d_namlen in the struct dirent) and replace it
		with a check for pathconf().  lib/e2p/iod.c now uses a
		different technique for providing struct dirent
		compatibility.

2002-06-25  Theodore Ts'o  <tytso@mit.edu>

	* configure.in, configure: Add --enable-htree and --enable-clear-htree

2002-05-24  Theodore Ts'o  <tytso@mit.edu>

	* configure.in: Add makefile for lib/evms for the EVMS FSIM
		plugin.  Add --enable-old-evms configure option which uses
		the EVMS 1.0.0 ABI, instead of the ABI used by EVMS 1.1.0.

2002-05-21  Theodore Ts'o  <tytso@mit.edu>

	* configure.in: On Linux systems, if the prefix is defaulted to
		/usr, then default mandir to /usr/share/man

2002-05-17  Theodore Ts'o  <tytso@mit.edu>

	* Remove check for asm/page.h, and add check for sysconf()

2002-05-16  Andreas Dilger <adilger@clusterfs.com>

	* Add check for asm/page.h

2002-05-11  Theodore Tso <tytso@mit.edu>

	* configure.in, MCONFIG.in: Add new makefile variables, $datadir
		and $root_sysconfdir, which are normally /usr/share and
		/etc, respectively, on Linux systems.  Also changed
		root_bindir, root_sbindir, and root_libdir so that their
		value is set by the configure script.  This allows the
		right thing to happen on non-Linux systems when bindir,
		et. al.  are manually set via the configure script's
		--bindir switch.  Add ext2ed/Makefile.in as a generated
		file by the configure script.

2002-03-08  Theodore Tso  <tytso@mit.edu>

	* Release of E2fsprogs 1.27

2002-02-03  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.26

2001-12-24  Theodore Tso  <tytso@valinux.com>

	* MCONFIG.in (ALL_CFLAGS): No longer put $(top_srcdir)/include in
		the -I search path, since we don't have any header files
		there any more.

2001-12-16  Theodore Tso  <tytso@valinux.com>

	* configure.in: If journal debugging is enabled, define
		CONFIG_JBD_DEBUG instead of JFS_DEBUG.

2001-09-20  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.25

2001-09-02  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24a

2001-08-30  Theodore Tso  <tytso@thunk.org>

	* Release of E2fsprogs 1.24

2001-08-27  Theodore Tso  <tytso@valinux.com>

	* configure.in: Check for the presence of strnlen.  Stop checking
		for strdup, since we don't actually care about that symbol
		any more.

2001-08-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.23

2001-08-04  Andreas Dilger  <root@lynx.adilger.int>

	* Makefile.in: Add "*.orig" to "make clean" target, change
		explicit listing of ext2_types.h in "make distclean" to
		$(SUBS).  Add $(SUBS) as a dependency to "make check"
		target.  Add $(SUBS) as a dependency to "make check"
		target.  Add -f flag to doc/Makefile $(RM) of files which
		may not exist.

2001-06-23  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.22

2001-06-22  Theodore Tso  <tytso@valinux.com>

	* Makefile.in: Avoid including BitKeeper files into the source
		tarball.

2001-06-15  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.21

2001-06-13  Theodore Tso  <tytso@valinux.com>

	* Makefile.in: Make the install target depend on $(SUBS) to
		accomodate the fools who want to compile and install
		e2fsprogs as root using just one command.

	* Makefile.in: Don't recurse into debugfs and resize subdirectory
		if --disable-debugfs or --disable-resizer is given as a
		configuration option.

	* configure.in: Add --disable-resizer, --disable-imager, and
		--disable-debugfs switches, which allow people who are
		building boot floppies to build a very restricted
		e2fsprogs distribution.  Note: these functions limit the
		functions in the shared library, so beware!

2001-06-11  Theodore Tso  <tytso@valinux.com>

	* configure.in: Add new switch, --disable-swapfs which disables
		support of byte-swapping old filesystems.  Add new test,
		AC_C_BIGENDIAN, which sets WORDS_BIGENDIAN on big-endian
		machines.   Change handling of --with-ccopts so that if
		set, the default CFLAGS is suppressed.

2001-06-01  Theodore Tso  <tytso@valinux.com>

	* wordwrap.pl: Add some rules which help fix up the dependencies.

	* Makefile.in: Move include/asm/types.h.in to
		lib/ext2fs/ext2_types.h.in.

2001-05-25  Theodore Tso  <tytso@valinux.com>

	* Release of E2fsprogs 1.20

2001-05-25  Theodore Tso  <tytso@valinux.com>

	* Makefile.in: Only exclude the top-level TODO file, not over the
		entire tree.

2001-05-19  Theodore Tso  <tytso@valinux.com>

	* configure.in, MCONFIG.in (LDCONFIG): Use AC_PATH_PROG to find
		the pathname for ldconfig.

2001-05-05  Theodore Tso  <tytso@valinux.com>

	* config.guess, config.sub: Update to use latest version from FSF
		(2001-04-20)

2001-01-11  Theodore Ts'o  <tytso@valinux.com>

	* Makefile.in (PROG_SUBDIRS): Build lib/e2p before lib/ext2fs
		since libext2fs depends on libe2p.

2001-01-11    <tytso@snap.thunk.org>

	* MCONFIG.in: Change --enable-gcc-wall handling so that it's no
		longer a configure option, but something which is done
		when the developer uses the command "make gcc-wall".
		(gcc-wall-new): Added new target which forgoes the make
		clean so we only check the newly modified .c files.

	* configure.in: Remove test for ino_t, since we don't use it any
		more (we always use our own ext2_ino_t).  Remove
		--enable-gcc-wall support.  Add test for sys/ioctl.h

2001-01-05    <tytso@snap.thunk.org>

	* configure.in: Add checks for the header files sys/mkdev.h and
		sys/sysmacros.h.

2000-12-08    <tytso@snap.thunk.org>

	* MCONFIG.in, Makefile.in: Fix so that top-level "make check"
		works correctly.

2000-10-24    <tytso@snap.thunk.org>

	* e2fsprogs.spec: Update spec file for Red Hat 7.0 compatibility

	* configure.in: When compiling shared libraries for Solaris, use a
		special-case Makefile fragment to deal with it.

2000-08-18    <tytso@valinux.com>

	* configure.in (JFS_DEBUG): Add support for --enable-jfs-debug

2000-08-14    <tytso@valinux.com>

	* e2fsprogs.spec (Summary): Add description of resize2fs to the
		package summary.

	* configure.in: Add test for sys/mount.h (required for e2fsck's
		ext3 recovery code)

2000-07-13    <tytso@valinux.com>

	* Release of E2fsprogs 1.19

2000-07-13    <tytso@snap.thunk.org>

	* e2fsprogs.spec: Merge in a few changes from the Red Hat 6.2 spec
		file, now that we're using a modern rpm to build
		e2fsprogs.  Also updated version number to 1.19.

2000-07-07  Theodore Ts'o  <tytso@valinux.com>

	* e2fsprogs.spec (%post): Remove resize2fs from its old location
		in /usr/sbin in the postinstall script.

2000-07-05    <tytso@snap.thunk.org>

	* config.guess, config.sub: Update to use latest version from FSF
		(2000-06-13)

2000-05-25    <tytso@snap.thunk.org>

	* Makefile.in: Fix makefile so that it's safe to build in parallel.

	* configure.in: Add test for lseek64 and open64.

2000-05-25  Theodore Ts'o  <tytso@valinux.com>

	* configure.in (DO_SUBSTITUTE_SCRIPT): Remove unneeded
		substitution.  (Left over from before we moved to use a C
		program to do substitutions.)
	
2000-05-18  Theodore Ts'o  <tytso@valinux.com>

	* e2fsprogs.spec (fsck.ext3): Add /sbin/fsck.ext3 to the spec file.

2000-04-06  Theodore Ts'o  <tytso@valinux.com>

	* Makefile.in (source_tar_file): Remove the resize directory from
		the list of excluded files.

	* version.h: Update version header for an WIP release.

	* e2fsprogs.spec: Updated for 1.19 release; added resize2fs.

Thu Apr  6 17:43:11 2000  Theodore Y. Ts'o  <tytso@signal.thunk.org>

	* configure.in (fdatasync): Add test for fdatasync(), since not
		all OS's have this function.

2000-04-03  Theodore Ts'o  <tytso@valinux.com>

	* Makefile.in: Remove uneeded parenthesis around shell pipelines
		containing a "cd" command.  Use && instead of ; so that if
		the "cd" fails, the makefile stops.

	* MCONFIG.in (CPPFLAGS): Add define of CPPFLAGS from @CPPFLAGS@.
		Remove uneeded parenthesis around shell pipelines
		containing a "cd" command.

2000-02-11    <tytso@snap.thunk.org>

	* Makefile.in: Exclude the internationalization files from being
		distributed.

	* configure.in: Add support for --enable-compression.  This is
		experimental code only for now, which is why it's under
		--enable test.  Once it's stable, it will always be
		compiled in.

2000-02-11  Theodore Ts'o  <tytso@valinux.com>

	* configure.in: Define HAVE_EXT2_IOCTLS based solely on the OS
		type, instead of basising on whether a test program
		compiles.  This was screwing up on some Linux kernel
		header files, and we know the Hurd doesn't support the
		ext2 ioctls anyway.

2000-02-08  Theodore Ts'o  <tytso@valinux.com>

	* configure.in, aclocal.m4: Add support for GNU gettext
		internationalization support.

2000-02-02  Theodore Ts'o  <tytso@valinux.com>

	* MCONFIG.in: Always include src/include in the include path now.
		This forces us to use our internally provided ext2_fs.h
		file, for sanity's sake.  

	* configure.in: If linux/fs.h isn't found, then add
		build/include into the include path only, since
		src/include is now always included.  Removed define of
		HAVE_LINUX_FS_H, since we're not using it any more.
		Removed i_version vs. i_generation check, since with the
		included header file it is a permanently known quantity.
		Removed AC_C_CROSS since it has been merged into
		AC_PROG_CC in autoconf 2.13. 

2000-01-18  Theodore Ts'o  <tytso@valinux.com>

	* MCONFIG.in (DEPLIBUUID): Since LIBUUID can sometimes include
		"-lsocket" we need a separate DEPLIBUUID that can be used
		in Makefile's dependency rules.

1999-11-19    <tytso@valinux.com>

	* Makefile.in (distclean): Remove TAGS and Makefile.in.old from
		the source directory.  Also, when making the .exclude file
		for the source_tar_file, exclude those two files as well.

1999-11-10    <tytso@valinux.com>

	* Release of E2fsprogs 1.18

1999-10-26    <tytso@valinux.com>

	* Release of E2fsprogs 1.17

1999-10-26    <tytso@valinux.com>

	* configure.in: Move the code that checks for the presence of
		Linux header files, to earlier in the config file, since
		it adds a directory to the include path, and that needs to
		happen before any compile tests are run.  Add termios.h to
		the headers which are checked.

1999-10-25    <tytso@valinux.com>

	* configure.in: Capitalized Hurd to make the GNU folks happy.

1999-10-22    <tytso@valinux.com>

	* Release of E2fsprogs 1.16

1999-09-24    <tytso@valinux.com>

	* configure.in (HAVE_STATE_FLAGS): Check to see if st_flags is
		actually useful (since glibc 2.1 declares it on Alpha
		without it being usable).  Add check for signal.h
		header file, which doesn't exist on non-unix platforms.

1999-07-18  Theodore Ts'o  <tytso@valinux.com>

	* Release of E2fsprogs 1.15

1999-07-03    <tytso@valinux.com>

	* depfix.sed: Remove all line continuations from the dependencies;
		the word wrapping is now done by wordwrap.pl.

	* MCONFIG.in (BUILD_CC):
	* configure.in (BUILD_CC): If cross compiling, find the native C
		compiler and set it to BUILD_CC so that we can
		successfully build util/subst.  Change default long long
		size when cross compiling to be 8 (instead of 0).  Also
		change the Hurd's defaults so that root files are placed
		in / instead of /usr/local.

	* Makefile.in (depend): Make "make depend" at the top-level
		automatically recurse through all subdirectories.

	* configure.in: Test for perl since it's needed by wordwrap.pl

	* MCONFIG.in (depend): Fix make-depend so that it the dependencies
		are automatically word-wrapped.  Added the makefile macro
		$(PERL).

	* wordwrap.pl: New file which does the word wrapping.

	* MCONFIG.in (subst): Add rule to build the util/subst program if
		necessary (by cd'ing to $(top_builddir)/util and making it.)

1999-06-23    <tytso@valinux.com>

	* configure.in: Check for the presence of i_generation field
		versus i_version in the ext2_inode to support compiling
		e2fsprogs in Linux 2.3.

1999-04-17    <tytso@rsts-11.mit.edu>

	* MCONFIG.in: Define man1dir, man3dir, and man8dir in terms of
		mandir.

1999-03-31  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* config.sub: Update config.sub from autoconf 2.13 so that it will
		recognize new machine types from the Alpha.

1999-03-16  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Add check for malloc.h and mallinfo().

1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.14

1999-01-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in (YEAR): Allow a 4-digit year for the version date,
		so we can be Y2K politically correct.  (The date isn't
		used for anything except display purposes, but it should
		make people more comfortable to not use a 2-digit date,
		even though it doesn't matter.)

Mon Jan  4 02:36:23 1999  Theodore Y. Ts'o  <tytso@mit.edu>

	* Makefile.in: Move the generated types.h file from the linux/
 		directory to the asm/ directory.

	* configure.in: Force Solaris to never use -static, due to its
 		dynamic loader not being available to statically linked
 		programs.  Create the asm/ directory if needed.

1999-01-01  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* INSTALL.elfbin (NOTE): Add a warning that the ELF binaries
		assume glibc.

	* config.guess: Update with a newer version from the FSF (although
		I've removed rms's pathetic LINUX/GNU name kludgery)

1998-12-15  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.13

1998-11-27  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Add paths.h to header files for which we search.

1998-07-09  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.12

Wed Apr  8 02:03:48 1998  Theodore Y. Ts'o  <tytso@mit.edu>

	* Fix missing "test" invokation in configure.in test.  (Only
		affected default non-Linux builds).

1998-03-30  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Change how the installation directions are
		selected.  Previously, we had prefix and usr_prefix, where
		prefix was '' and usr_prefix was /usr, and we then defined
		bindir, ubindir, libdir, ulibdir, etc. in terms of that.
		In autoconf 2.12, it's possible to override bindir,
		libdir, etc., and so in order to make our installation
		directory makefile variables more in line with autoconf
		2.12, I've changed all of the various makefiles to use
		prefix and root_prefix, where the default Linux
		definitions are /usr and '', respectively.  What used to
		be bindir is now root_bindir, and what used to be ubindir,
		is now bindir.

	* MCONFIG.in: Change directories to match with new installation
		directory convention (see above).  Add Makefile
		dependencies for makefile fragments, and define
		DEP_LIB_MAKEFILES which library makefiles can use to
		define DEP_MAKEFILES, so that the library makefiles will
		get regenerated when the makefile fragments change.
		Remove the cat?dir variables, since we aren't creating
		those directories any more.

	* Makefile.in: Add top-level uninstall targets.

	* e2fsprogs-1.12.spec: Add to the RPM package the e2label man
		page, and to reflect that fact that we now compile_et and
		mk_cmds for the development package.

1998-03-28  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in: Use && after a cd command so that the right thing
		happens if the directory is missing.  Don't compile man
		pages upon installation any more, since modern Linux
		systems don't have /usr/man/cat? anymore (they 
		typically cache man pages in /var/catman and delete them
		if they haven't been used in a while, to save on disk
		space, and because CPU's are fast enough these days that
		you can get away with this).

	* MCONFIG.in: Add a new makefile variable for the share
		directory (i.e., /usr/share).  Make an autoconf magic
		make rule so that $(top_builddir)/util/subst.conf gets
		rebuilt automatically when necessary.

Mon Jan 19 10:01:39 1998  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* e2fsprogs-1.12.spec: Update spec file in preparation for 1.12
		release. 

Tue Nov 25 15:56:29 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Remove @EXTRA_PROGS@, since we aren't using it in
	 	e2fsck/Makefile.in.

Tue Nov  4 10:46:18 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Add check for setjmp.h

Mon Oct 20 19:30:45 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in (HAVE_LLSEEK_PROTOTYPE): Added check to see if
		llseek is declared in unistd.h

Sun Oct 19 19:09:30 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Add tests for sys/stat.h, sys/time.h, and sys/types.h

Tue Jun 17 01:33:20 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs 1.11

Sat Jun 14 03:26:45 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (SRCROOT): Allow people to set the version.h to
		something like 1.10-PLUS.

Sat Jun  7 16:38:40 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in (rmakefile): Added (optional) private directory for
		resize2fs.

	* Makefile.in: Change recursive descent rules to check to see if a
		directory exists before trying to make it.

Thu May  8 22:23:49 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (source_tar_file): Fix up makefile to work in new
		CVS development environment.

Thu Apr 24 12:16:42 1997  Theodre Ts'o  <tytso@localhost.mit.edu>

	* Release of E2fsprogs version 1.10

Tue Apr 22 10:48:03 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Add explicit check to see if linker accepts
		-static (since even Linux systems might not work if 
		libc.a isn't installed).

Thu Apr 17 12:23:38 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.09

Fri Apr 11 18:56:26 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.08

Wed Mar 12 13:32:05 1997  Theodore Y. Ts'o  <tytso@mit.edu>

	* Release of E2fsprogs version 1.07

Wed Jan 15 11:37:36 1997  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* config.sub (basic_machine): Added i686-* as another name for the
 		Pentium Pro.

Tue Oct  8 02:02:03 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.06

Mon Oct  7 08:22:31 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Makefile.in (all): Don't run "make check" by default.  User
 	 	should manually run "make check" if they wish to test
 	 	things out.

Thu Sep 12 15:23:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.05

Sat Aug 31 10:55:45 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in (AC_CHECK_FUNCS): Add fchown to list of functions
	 	that we check.

Wed Aug 28 14:42:12 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* configure.in (usr_prefix): To be slightly more conformant with
		the coding standards, always default to ${prefix}
		unless on a linux system with prefix = ''.  Allow
		--with-usr-prefix option.

Tue Aug 27 16:53:29 1996  Miles Bader  <miles@gnu.ai.mit.edu>

	* configure.in (AC_CHECK_HEADERS): Add net/if.h & netinet/in.h.
		Add `--enable-fsck' switch, to allow configuration of
		fsck wrapper building (default yes except on the hurd).
		Make '' prefix default and LDFLAG_STATIC hacks work on
		the hurd as well as linux.

Tue Aug 27 16:23:56 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Check to see if sys/types.h defines ino_t.  Add
		support for checking/sizing "long long".

Wed Aug 21 00:44:22 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Added configure flag --enable-old-bitops, which
 		forces the bitops to use the standard bitmask operations.

Fri Aug  9 08:29:00 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Check for existence of sys/utsname.h and
	 	strcasecmp().  Remove check for EXT2 fragment in system
	 	header file.  E2fsprogs now deals with the fragment fields
	 	by dispatching off of the OS field.

Tue Aug  6 14:34:19 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in (AC_OUPUT): Create substitutions for the uuid
	 	library.

	* MCONFIG.in (all): Add new variables for the uuid library.

Thu May 23 12:39:07 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Make the default prefix be '' for Linux.

Thu May 16 11:12:30 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.04

Thu May 16 09:38:40 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: 
	  MCONFIG.in: Man pages, shell scripts and include files are now
		generated using the lib/substitute_sh script.  This is
		faster than the configure substitution, and it doesn't
		change the mod time of the file if it hasn't changed,
		which prevents needless compilation of files.

		Define new sets of Makefile variables: LIBSS, LIBCOM_ERR,
 		LIBEXT2FS, LIBE2P, and their static and profiled variants,
 		STATIC_* and PROFILED_*, which point to the actual file of
 		the shared or static library.  This way makefiles can link
 		directly with exactly the library they want.  Many ld's
		(include GNU ld) have a really broken idea of how -L
		works, and will link against an older library in /usr/lib
		even though there is a newer on in a specified -L directory.
		  
Wed May 15 21:40:22 1996  Theodore Ts'o  <tytso@rsts-11.mit.edu>

	* configure.in: Add support for --enable-dynamic-e2fsck, for
 		people who don't want to link e2fsck statically.  This
 		saves space, at the cost of increasing the reliance of
 		e2fsck other files (3-4 shared libraries).

Wed Mar 27 00:33:40 1996    <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.03

Wed Jan 31 11:06:08 1996    <tytso@rsts-11.mit.edu>

	* Release of E2fsprogs version 1.02

Thu Oct 26 11:59:44 1995    <tytso@rsts-11.mit.edu>

	* configure.in (LDFALG_STATIC): Add temporary kludge for
		determining how to link executables statically.  For now,
		we assume that Linux systems only can link statically.

Fri Sep 22 18:23:55 1995    <tytso@rsts-11.mit.edu>

	* depfix.sed: Remove /usr/include lines which occur at the end of
		the dependency listing.

Mon Sep  4 21:40:22 1995  Remy Card  <card@bbj>

	* configure.in: Added support for the --enable-bsd-shlibs option.

Wed Aug  9 21:33:31 1995  Theodore Y. Ts'o  <tytso@dcl>

	* MCONFIG.in (LD): Add $(PURE) to the definition to make it easier
		to link executables using programs like purify.

Sat Aug  5 11:41:03 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* configure.in: Check to see if strdup() is present

	* INSTALL: Updated building and installation instructions to
		reflect the new configure system.

	* Makefile.in (install): When doing a general install, install the
		shared libraries as well by using the new target 
		install-shlibs-libs-recursive.

	* configure.in: If we are building on a Linux system, set $prefix
		to be '/' by default.

Sun Jul  9 13:38:20 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* configure.in (checking type sizes): provide some default for
	type-sizes when cross-compiling, as we can't check them then.
	(SS_DIR, ET_DIR): Make these correct even when ${srcdir} is absolute.

Thu Jun 15 23:33:37 1995  Remy Card  <card@bbj>

	* Makefile.in (distclean-local): Added config.cache and
		include/linux/types.h.

	* configure.in: Added support for the --enable-elf option.
		Added a test to check for llseek() in the C library.

	* lib/Makefile.dll-lib: Fixed incorrect RM and LN calls.

	* lib/Makefile.elf-lib: New file, to create ELF shared libraries.

Sat Jun 10 19:52:51 1995  Theodore Y. Ts'o  <tytso@lurch.mit.edu>

	* configure.in: Create ET_DIR and SS_DIR, which gives the absolute
		pathname to the source directories of the lib/et and
		lib/ss.  (Can't just use $srcdir since that may be a
		relative path.)

Thu Jun  8 12:25:57 1995  Miles Bader  <miles@churchy.gnu.ai.mit.edu>

	* lib/Makefile.library ($(LIBRARY).a): Changed to work with the
	new makefiles.
	* lib/Makefile.dll-lib: Ditto.
	* lib/Makefile.profiled: Ditto.
	* lib/Makefile.checker: Ditto.

	* Add the include subdirectory to hold substitute include files
	for systems that need them.

	* Makefile.in: Rewritten to conform to GNU coding standards.
	* MCONFIG: Moved to MCONFIG.in, and totally changed to support
	GNU-style makefiles.
	* mkinstalldirs: New file, copied from /gd/gnu/lib.
	* config.guess: Ditto.
	* config.sub: Ditto.
	* install-sh: Ditto.

	* configure.in: Many new tests added.  --with-cc and --with-ccopts
	options removed as configure already supports a method to do this,
	and they were interfering with normal usage.

Sat Mar 11 18:23:45 1995  Theodore Y. Ts'o  <tytso@localhost>

	* Makefile.in (bin-tree): Add Makefile target which automatically
		generates the binary distribution for e2fsprogs.


