From 07705e8cdc222c84622fe23f55cfc2e6643fdaad Mon Sep 17 00:00:00 2001 From: "Theodore Y. Ts'o" Date: Tue, 31 Jan 2017 17:31:52 -0500 Subject: [PATCH 1/1] Import e2fsprogs_1.43.4.orig.tar.gz [dgit import orig e2fsprogs_1.43.4.orig.tar.gz] --- .gitignore | 217 + .missing-copyright | 4 + .release-checklist | 19 + ABOUT-NLS | 435 + Android.mk | 1 + CleanSpec.mk | 51 + INSTALL | 69 + INSTALL.elfbin | 53 + MCONFIG.in | 312 + Makefile.in | 153 + NOTICE | 849 + README | 19 + RELEASE-NOTES | 8415 ++++++++++ SHLIBS | 35 + SUBMITTING-PATCHES | 39 + acinclude.m4 | 153 + aclocal.m4 | 4330 ++++++ config/config.guess | 1456 ++ config/config.rpath | 684 + config/config.sub | 1823 +++ config/install-sh | 238 + config/mkinstalldirs | 40 + config/parse-types.sh | 127 + configure | 15344 +++++++++++++++++++ configure.ac | 1475 ++ contrib/Android.mk | 80 + contrib/add_ext4_encrypt.c | 64 + contrib/build-rpm | 45 + contrib/dconf | 118 + contrib/dir2fs | 66 + contrib/e2croncheck | 47 + contrib/fallocate.c | 190 + contrib/fsstress.c | 2701 ++++ contrib/jbd2-resync.sh | 19 + contrib/make-sparse.c | 91 + contrib/populate-extfs.sh | 105 + contrib/python-uuid/setup.py | 11 + contrib/python-uuid/test.py | 18 + contrib/python-uuid/uuid.c | 23 + contrib/spd_readdir.c | 458 + debian/attic/comerrg-dev.info | 4 + debian/attic/comerrg-dev.menu | 7 + debian/attic/e2fslibsg-dev.info | 4 + debian/attic/e2fslibsg-dev.menu | 4 + debian/attic/libs/comerr2g.files | 2 + debian/attic/libs/control | 114 + debian/attic/libs/e2fslibsg.files | 3 + debian/attic/libs/rules | 182 + debian/attic/libs/ss2g.files | 2 + debian/changelog | 3974 +++++ debian/comerr-dev.doc-base | 12 + debian/comerr-dev.examples | 2 + debian/comerr-dev.files.in | 9 + debian/compat | 1 + debian/control.in | 348 + debian/copyright | 73 + debian/e2fsck-static.copyright | 26 + debian/e2fsck-static.files | 2 + debian/e2fsck-static.preinst | 19 + debian/e2fslibs-dev.doc-base | 10 + debian/e2fslibs-dev.files.in | 9 + debian/e2fslibs.files.in | 2 + debian/e2fslibs.symbols | 641 + debian/e2fsprogs-udeb.shlibs.local | 6 + debian/e2fsprogs.docs | 2 + debian/e2fsprogs.files | 6 + debian/e2fsprogs.postinst | 13 + debian/e2fsprogs.preinst | 19 + debian/e2fsprogs.shlibs.local.in | 8 + debian/fuse2fs.files | 2 + debian/libblkid-dev.files.in | 4 + debian/libblkid.copyright | 19 + debian/libblkid1.files.in | 1 + debian/libblkid1.symbols | 41 + debian/libcomerr2.copyright | 24 + debian/libcomerr2.files.in | 1 + debian/libcomerr2.symbols | 21 + debian/libss2.copyright | 25 + debian/libss2.files.in | 1 + debian/libss2.symbols | 35 + debian/libuuid1.copyright | 38 + debian/libuuid1.files.in | 1 + debian/libuuid1.postinst | 40 + debian/libuuid1.postrm | 10 + debian/libuuid1.symbols | 19 + debian/rules | 662 + debian/scripts/test-backtrace | 34 + debian/shlibs.local | 6 + debian/source.lintian-overrides | 2 + debian/source/format | 1 + debian/ss-dev.examples | 1 + debian/ss-dev.files.in | 7 + debian/upstream/signing-key.asc | 156 + debian/uuid-dev.README.Debian | 23 + debian/uuid-dev.copyright | 38 + debian/uuid-dev.files.in | 5 + debian/uuid-runtime.copyright | 39 + debian/uuid-runtime.files | 4 + debian/uuid-runtime.lintian-overrides | 1 + debian/uuid-runtime.postinst | 15 + debian/uuid-runtime.postrm | 10 + debian/uuid-runtime.prerm | 10 + debian/uuid-runtime.shlibs.local | 1 + debian/watch | 5 + debugfs/Android.mk | 93 + debugfs/Makefile.in | 400 + debugfs/debug_cmds.ct | 233 + debugfs/debugfs.8.in | 823 + debugfs/debugfs.c | 2553 +++ debugfs/debugfs.h | 205 + debugfs/do_journal.c | 961 ++ debugfs/dump.c | 384 + debugfs/extent_cmds.ct | 77 + debugfs/extent_inode.c | 542 + debugfs/filefrag.c | 325 + debugfs/htree.c | 443 + debugfs/icheck.c | 173 + debugfs/journal.c | 932 ++ debugfs/journal.h | 25 + debugfs/logdump.c | 732 + debugfs/ls.c | 262 + debugfs/lsdel.c | 216 + debugfs/ncheck.c | 208 + debugfs/quota.c | 170 + debugfs/ro_debug_cmds.ct | 99 + debugfs/set_fields.c | 931 ++ debugfs/unused.c | 58 + debugfs/util.c | 560 + debugfs/xattrs.c | 372 + debugfs/zap.c | 264 + depfix.sed | 35 + doc/Makefile.in | 84 + doc/libblkid.txt | 78 + doc/libext2fs.texinfo | 1374 ++ doc/texinfo.tex | 7226 +++++++++ e2fsck/Android.mk | 92 + e2fsck/CHANGES | 53 + e2fsck/Makefile.in | 542 + e2fsck/badblocks.c | 141 + e2fsck/dirinfo.c | 486 + e2fsck/dx_dirinfo.c | 152 + e2fsck/e2fsck.8.in | 460 + e2fsck/e2fsck.c | 243 + e2fsck/e2fsck.conf.5.in | 450 + e2fsck/e2fsck.h | 649 + e2fsck/ea_refcount.c | 461 + e2fsck/ehandler.c | 133 + e2fsck/emptydir.c | 194 + e2fsck/extend.c | 82 + e2fsck/extents.c | 540 + e2fsck/flushb.c | 67 + e2fsck/iscan.c | 139 + e2fsck/jfs_user.h | 205 + e2fsck/journal.c | 1181 ++ e2fsck/logfile.c | 400 + e2fsck/message.c | 563 + e2fsck/mtrace.awk | 37 + e2fsck/mtrace.c | 160 + e2fsck/mtrace.h | 231 + e2fsck/pass1.c | 4109 +++++ e2fsck/pass1b.c | 1041 ++ e2fsck/pass2.c | 1926 +++ e2fsck/pass3.c | 909 ++ e2fsck/pass4.c | 209 + e2fsck/pass5.c | 929 ++ e2fsck/problem.c | 2384 +++ e2fsck/problem.h | 1242 ++ e2fsck/problemP.h | 46 + e2fsck/quota.c | 84 + e2fsck/readahead.c | 252 + e2fsck/recovery.c | 886 ++ e2fsck/region.c | 210 + e2fsck/rehash.c | 983 ++ e2fsck/revoke.c | 770 + e2fsck/scantest.c | 141 + e2fsck/sigcatcher.c | 446 + e2fsck/super.c | 1026 ++ e2fsck/unix.c | 1946 +++ e2fsck/util.c | 872 ++ e2fsprogs.lsm | 17 + e2fsprogs.spec | 242 + e2fsprogs.spec.in | 242 + ext2ed/COPYRIGHT | 346 + ext2ed/Makefile.in | 96 + ext2ed/README | 160 + ext2ed/blockbitmap_com.c | 266 + ext2ed/dir_com.c | 678 + ext2ed/disk.c | 239 + ext2ed/doc/ext2ed-design.sgml | 3459 +++++ ext2ed/doc/ext2fs-overview.sgml | 1569 ++ ext2ed/doc/user-guide.sgml | 2258 +++ ext2ed/ext2.descriptors | 976 ++ ext2ed/ext2_com.c | 98 + ext2ed/ext2ed.8.in | 72 + ext2ed/ext2ed.conf.in | 79 + ext2ed/ext2ed.h | 435 + ext2ed/file_com.c | 565 + ext2ed/general_com.c | 907 ++ ext2ed/group_com.c | 183 + ext2ed/init.c | 633 + ext2ed/inode_com.c | 437 + ext2ed/inodebitmap_com.c | 215 + ext2ed/main.c | 546 + ext2ed/super_com.c | 156 + ext2ed/win.c | 232 + include/nonunix/asm/types.h | 1 + include/nonunix/config.h | 21 + include/nonunix/dirent.h | 0 include/nonunix/getopt.h | 135 + include/nonunix/grp.h | 17 + include/nonunix/linux/types.h | 28 + include/nonunix/pwd.h | 22 + include/nonunix/sys/file.h | 0 include/nonunix/sys/ioctl.h | 0 include/nonunix/sys/param.h | 0 include/nonunix/sys/resource.h | 0 include/nonunix/sys/socket.h | 0 include/nonunix/sys/time.h | 1 + include/nonunix/sys/wait.h | 0 include/nonunix/termios.h | 0 include/nonunix/unistd.h | 49 + include/nonunix/utime.h | 1 + install-utils/compile_manpages | 18 + install-utils/convfstab | 78 + install-utils/remove_preformat_manpages | 21 + intl/Makefile.in | 547 + intl/VERSION | 1 + intl/bindtextdom.c | 362 + intl/config.charset | 608 + intl/dcgettext.c | 56 + intl/dcigettext.c | 1222 ++ intl/dcngettext.c | 57 + intl/dgettext.c | 58 + intl/dngettext.c | 59 + intl/eval-plural.h | 108 + intl/explodename.c | 185 + intl/finddomain.c | 192 + intl/gettext.c | 63 + intl/gettextP.h | 215 + intl/gmo.h | 149 + intl/hash-string.h | 48 + intl/intl-compat.c | 131 + intl/l10nflist.c | 422 + intl/libgettext.h | 182 + intl/libgnuintl.h.in | 383 + intl/loadinfo.h | 145 + intl/loadmsgcat.c | 1418 ++ intl/localcharset.c | 397 + intl/localcharset.h | 42 + intl/locale.alias | 78 + intl/localealias.c | 414 + intl/localename.c | 1142 ++ intl/log.c | 98 + intl/ngettext.c | 65 + intl/os2compat.c | 98 + intl/os2compat.h | 46 + intl/osdep.c | 24 + intl/plural-exp.c | 154 + intl/plural-exp.h | 118 + intl/plural.c | 1490 ++ intl/plural.y | 381 + intl/printf-args.c | 119 + intl/printf-args.h | 137 + intl/printf-parse.c | 535 + intl/printf-parse.h | 75 + intl/printf.c | 371 + intl/ref-add.sin | 31 + intl/ref-del.sin | 26 + intl/relocatable.c | 449 + intl/relocatable.h | 77 + intl/textdomain.c | 141 + intl/vasnprintf.c | 884 ++ intl/vasnprintf.h | 61 + intl/vasnwprintf.h | 46 + intl/wprintf-parse.h | 75 + intl/xsize.h | 109 + lib/Android.mk | 1 + lib/Makefile.bsd-lib | 47 + lib/Makefile.checker | 3 + lib/Makefile.darwin-lib | 51 + lib/Makefile.elf-lib | 75 + lib/Makefile.library | 25 + lib/Makefile.profile | 27 + lib/Makefile.solaris-lib | 65 + lib/blkid/Android.mk | 62 + lib/blkid/Makefile.in | 222 + lib/blkid/blkid.h.in | 110 + lib/blkid/blkid.pc.in | 11 + lib/blkid/blkidP.h | 189 + lib/blkid/blkid_types.h.in | 167 + lib/blkid/cache.c | 209 + lib/blkid/dev.c | 253 + lib/blkid/devname.c | 557 + lib/blkid/devno.c | 229 + lib/blkid/getsize.c | 214 + lib/blkid/libblkid.3.in | 80 + lib/blkid/list.h | 176 + lib/blkid/llseek.c | 147 + lib/blkid/probe.c | 1708 +++ lib/blkid/probe.h | 853 ++ lib/blkid/read.c | 494 + lib/blkid/resolve.c | 140 + lib/blkid/save.c | 197 + lib/blkid/tag.c | 471 + lib/blkid/test_probe.in | 62 + lib/blkid/tests/cramfs.img.bz2 | Bin 0 -> 124 bytes lib/blkid/tests/cramfs.results | 2 + lib/blkid/tests/ext2.img.bz2 | Bin 0 -> 356 bytes lib/blkid/tests/ext2.results | 3 + lib/blkid/tests/ext3.img.bz2 | Bin 0 -> 1489 bytes lib/blkid/tests/ext3.results | 3 + lib/blkid/tests/fat.img.bz2 | Bin 0 -> 249 bytes lib/blkid/tests/fat.results | 3 + lib/blkid/tests/fat32_label_64MB.img.bz2 | Bin 0 -> 1151 bytes lib/blkid/tests/fat32_label_64MB.results | 3 + lib/blkid/tests/iso.img.bz2 | Bin 0 -> 336 bytes lib/blkid/tests/iso.results | 2 + lib/blkid/tests/jbd.img.bz2 | Bin 0 -> 205 bytes lib/blkid/tests/jbd.results | 2 + lib/blkid/tests/jfs.img.bz2 | Bin 0 -> 3434 bytes lib/blkid/tests/jfs.results | 3 + lib/blkid/tests/minix.img.bz2 | Bin 0 -> 138 bytes lib/blkid/tests/minix.results | 1 + lib/blkid/tests/ocfs2.img.bz2 | Bin 0 -> 1002 bytes lib/blkid/tests/ocfs2.results | 3 + lib/blkid/tests/reiser3.img.bz2 | Bin 0 -> 282 bytes lib/blkid/tests/reiser3.results | 3 + lib/blkid/tests/reiser4.img.bz2 | Bin 0 -> 366 bytes lib/blkid/tests/reiser4.results | 3 + lib/blkid/tests/romfs.img.bz2 | Bin 0 -> 105 bytes lib/blkid/tests/romfs.results | 2 + lib/blkid/tests/small-fat32.img.bz2 | Bin 0 -> 372 bytes lib/blkid/tests/small-fat32.results | 3 + lib/blkid/tests/swap0.img.bz2 | Bin 0 -> 72 bytes lib/blkid/tests/swap0.results | 1 + lib/blkid/tests/swap1.img.bz2 | Bin 0 -> 120 bytes lib/blkid/tests/swap1.results | 3 + lib/blkid/tests/udf.img.bz2 | Bin 0 -> 2031 bytes lib/blkid/tests/udf.results | 2 + lib/blkid/tests/xfs.img.bz2 | Bin 0 -> 443 bytes lib/blkid/tests/xfs.results | 3 + lib/blkid/tests/zfs.img.bz2 | Bin 0 -> 10869 bytes lib/blkid/tests/zfs.results | 1 + lib/blkid/tst_types.c | 64 + lib/blkid/version.c | 50 + lib/config.h.in | 881 ++ lib/dirpaths.h.in | 10 + lib/e2p/Android.mk | 65 + lib/e2p/Makefile.in | 202 + lib/e2p/crypto_mode.c | 74 + lib/e2p/e2p.h | 76 + lib/e2p/e2p.pc.in | 11 + lib/e2p/feature.c | 423 + lib/e2p/fgetflags.c | 102 + lib/e2p/fgetproject.c | 63 + lib/e2p/fgetversion.c | 74 + lib/e2p/fsetflags.c | 107 + lib/e2p/fsetproject.c | 69 + lib/e2p/fsetversion.c | 70 + lib/e2p/getflags.c | 70 + lib/e2p/getversion.c | 40 + lib/e2p/hashstr.c | 72 + lib/e2p/iod.c | 76 + lib/e2p/ls.c | 479 + lib/e2p/mntopts.c | 150 + lib/e2p/ostype.c | 79 + lib/e2p/parse_num.c | 91 + lib/e2p/pe.c | 40 + lib/e2p/percent.c | 67 + lib/e2p/pf.c | 77 + lib/e2p/project.h | 27 + lib/e2p/ps.c | 32 + lib/e2p/setflags.c | 77 + lib/e2p/setversion.c | 39 + lib/e2p/uuid.c | 85 + lib/et/Android.mk | 46 + lib/et/Makefile.in | 184 + lib/et/com_err.3 | 87 + lib/et/com_err.c | 104 + lib/et/com_err.h | 68 + lib/et/com_err.pc.in | 12 + lib/et/com_err.texinfo | 532 + lib/et/com_right.c | 120 + lib/et/compile_et.1 | 82 + lib/et/compile_et.sh.in | 61 + lib/et/error_message.c | 337 + lib/et/error_table.h | 29 + lib/et/et_c.awk | 269 + lib/et/et_h.awk | 204 + lib/et/et_name.c | 43 + lib/et/init_et.c | 53 + lib/et/internal.h | 19 + lib/et/test_cases/continuation.c | 55 + lib/et/test_cases/continuation.et | 8 + lib/et/test_cases/continuation.h | 19 + lib/et/test_cases/heimdal.c | 136 + lib/et/test_cases/heimdal.et | 65 + lib/et/test_cases/heimdal.h | 64 + lib/et/test_cases/heimdal2.c | 122 + lib/et/test_cases/heimdal2.et | 65 + lib/et/test_cases/heimdal2.h | 58 + lib/et/test_cases/heimdal3.c | 56 + lib/et/test_cases/heimdal3.et | 5 + lib/et/test_cases/heimdal3.h | 20 + lib/et/test_cases/imap_err.c | 115 + lib/et/test_cases/imap_err.et | 238 + lib/et/test_cases/imap_err.h | 79 + lib/et/test_cases/simple.c | 76 + lib/et/test_cases/simple.et | 69 + lib/et/test_cases/simple.h | 40 + lib/et/texinfo.tex | 7226 +++++++++ lib/et/vfprintf.c | 50 + lib/ext2fs/Android.mk | 141 + lib/ext2fs/Makefile.in | 1383 ++ lib/ext2fs/alloc.c | 526 + lib/ext2fs/alloc_sb.c | 81 + lib/ext2fs/alloc_stats.c | 164 + lib/ext2fs/alloc_tables.c | 258 + lib/ext2fs/atexit.c | 116 + lib/ext2fs/badblocks.c | 328 + lib/ext2fs/bb_compat.c | 64 + lib/ext2fs/bb_inode.c | 270 + lib/ext2fs/bitmaps.c | 308 + lib/ext2fs/bitops.c | 158 + lib/ext2fs/bitops.h | 703 + lib/ext2fs/blkmap64_ba.c | 492 + lib/ext2fs/blkmap64_rb.c | 976 ++ lib/ext2fs/blknum.c | 543 + lib/ext2fs/block.c | 659 + lib/ext2fs/bmap.c | 473 + lib/ext2fs/bmap64.h | 104 + lib/ext2fs/bmove.c | 167 + lib/ext2fs/brel.h | 86 + lib/ext2fs/brel_ma.c | 199 + lib/ext2fs/check_desc.c | 104 + lib/ext2fs/closefs.c | 514 + lib/ext2fs/crc16.c | 74 + lib/ext2fs/crc16.h | 26 + lib/ext2fs/crc32c.c | 932 ++ lib/ext2fs/crc32c_defs.h | 59 + lib/ext2fs/csum.c | 1019 ++ lib/ext2fs/dblist.c | 403 + lib/ext2fs/dblist_dir.c | 88 + lib/ext2fs/digest_encode.c | 186 + lib/ext2fs/dir_iterate.c | 311 + lib/ext2fs/dirblock.c | 113 + lib/ext2fs/dirhash.c | 261 + lib/ext2fs/dosio.c | 459 + lib/ext2fs/dosio.h | 157 + lib/ext2fs/dupfs.c | 122 + lib/ext2fs/e2image.h | 37 + lib/ext2fs/expanddir.c | 140 + lib/ext2fs/ext2_err.et.in | 545 + lib/ext2fs/ext2_ext_attr.h | 73 + lib/ext2fs/ext2_fs.h | 1104 ++ lib/ext2fs/ext2_io.h | 163 + lib/ext2fs/ext2_types.h.in | 192 + lib/ext2fs/ext2fs.h | 1987 +++ lib/ext2fs/ext2fs.pc.in | 11 + lib/ext2fs/ext2fsP.h | 176 + lib/ext2fs/ext3_extents.h | 127 + lib/ext2fs/ext4_acl.h | 55 + lib/ext2fs/ext_attr.c | 1297 ++ lib/ext2fs/extent.c | 1747 +++ lib/ext2fs/fallocate.c | 858 ++ lib/ext2fs/fiemap.h | 70 + lib/ext2fs/fileio.c | 615 + lib/ext2fs/finddev.c | 214 + lib/ext2fs/flushb.c | 79 + lib/ext2fs/freefs.c | 104 + lib/ext2fs/gen_bitmap.c | 607 + lib/ext2fs/gen_bitmap64.c | 907 ++ lib/ext2fs/gen_crc32ctable.c | 117 + lib/ext2fs/get_num_dirs.c | 50 + lib/ext2fs/get_pathname.c | 171 + lib/ext2fs/getsectsize.c | 136 + lib/ext2fs/getsize.c | 312 + lib/ext2fs/i_block.c | 90 + lib/ext2fs/icount.c | 873 ++ lib/ext2fs/imager.c | 410 + lib/ext2fs/ind_block.c | 67 + lib/ext2fs/initialize.c | 557 + lib/ext2fs/inline.c | 118 + lib/ext2fs/inline_data.c | 852 + lib/ext2fs/inode.c | 1061 ++ lib/ext2fs/inode_io.c | 290 + lib/ext2fs/io_manager.c | 150 + lib/ext2fs/irel.h | 114 + lib/ext2fs/irel_ma.c | 377 + lib/ext2fs/ismounted.c | 463 + lib/ext2fs/jfs_compat.h | 103 + lib/ext2fs/jfs_dat.h | 64 + lib/ext2fs/kernel-jbd.h | 461 + lib/ext2fs/kernel-list.h | 109 + lib/ext2fs/link.c | 201 + lib/ext2fs/llseek.c | 145 + lib/ext2fs/lookup.c | 70 + lib/ext2fs/mkdir.c | 192 + lib/ext2fs/mkjournal.c | 587 + lib/ext2fs/mmp.c | 464 + lib/ext2fs/namei.c | 213 + lib/ext2fs/native.c | 28 + lib/ext2fs/newdir.c | 126 + lib/ext2fs/nt_io.c | 1494 ++ lib/ext2fs/openfs.c | 528 + lib/ext2fs/progress.c | 103 + lib/ext2fs/punch.c | 509 + lib/ext2fs/qcow2.c | 262 + lib/ext2fs/qcow2.h | 113 + lib/ext2fs/rbtree.c | 451 + lib/ext2fs/rbtree.h | 192 + lib/ext2fs/read_bb.c | 102 + lib/ext2fs/read_bb_file.c | 109 + lib/ext2fs/res_gdt.c | 239 + lib/ext2fs/rw_bitmaps.c | 430 + lib/ext2fs/sha256.c | 255 + lib/ext2fs/sha512.c | 303 + lib/ext2fs/swapfs.c | 447 + lib/ext2fs/symlink.c | 176 + lib/ext2fs/tdb.c | 4156 +++++ lib/ext2fs/tdb.h | 215 + lib/ext2fs/tdb/build-tdb | 34 + lib/ext2fs/tdb/patches/copyright | 20 + lib/ext2fs/tdb/patches/ext2tdb-rename | 65 + lib/ext2fs/tdb/patches/replace-includes | 92 + lib/ext2fs/tdb/patches/series | 6 + lib/ext2fs/tdb/patches/static-functions | 13 + lib/ext2fs/tdb/patches/static-prototypes | 72 + lib/ext2fs/tdb/patches/tdbtool-includes | 30 + lib/ext2fs/tdbtool.c | 621 + lib/ext2fs/test_io.c | 549 + lib/ext2fs/tst_badblocks.c | 369 + lib/ext2fs/tst_bitmaps.c | 714 + lib/ext2fs/tst_bitmaps_cmd.ct | 51 + lib/ext2fs/tst_bitmaps_cmds | 148 + lib/ext2fs/tst_bitmaps_exp | 309 + lib/ext2fs/tst_bitops.c | 288 + lib/ext2fs/tst_byteswap.c | 93 + lib/ext2fs/tst_cmds.ct | 6 + lib/ext2fs/tst_fs_struct.c | 81 + lib/ext2fs/tst_getsectsize.c | 63 + lib/ext2fs/tst_getsize.c | 46 + lib/ext2fs/tst_inode_size.c | 89 + lib/ext2fs/tst_iscan.c | 225 + lib/ext2fs/tst_libext2fs.c | 70 + lib/ext2fs/tst_super_size.c | 150 + lib/ext2fs/tst_types.c | 64 + lib/ext2fs/undo_io.c | 1104 ++ lib/ext2fs/unix_io.c | 1224 ++ lib/ext2fs/unlink.c | 100 + lib/ext2fs/valid_blk.c | 68 + lib/ext2fs/version.c | 57 + lib/ext2fs/write_bb_file.c | 35 + lib/fpopen.c | 116 + lib/ss/Android.mk | 60 + lib/ss/Makefile.in | 232 + lib/ss/ct_c.awk | 75 + lib/ss/ct_c.sed | 160 + lib/ss/data.c | 20 + lib/ss/error.c | 75 + lib/ss/execute_cmd.c | 229 + lib/ss/get_readline.c | 100 + lib/ss/help.c | 179 + lib/ss/invocation.c | 107 + lib/ss/list_rqs.c | 83 + lib/ss/listen.c | 200 + lib/ss/mit-sipb-copyright.h | 19 + lib/ss/mk_cmds.1 | 59 + lib/ss/mk_cmds.sh.in | 57 + lib/ss/pager.c | 154 + lib/ss/parse.c | 158 + lib/ss/prompt.c | 31 + lib/ss/request_tbl.c | 68 + lib/ss/requests.c | 66 + lib/ss/ss.h | 96 + lib/ss/ss.pc.in | 12 + lib/ss/ss_err.et | 39 + lib/ss/ss_internal.h | 107 + lib/ss/std_rqs.ct | 46 + lib/ss/test_cmd.ct | 6 + lib/ss/test_script | 8 + lib/ss/test_script_expected | 22 + lib/ss/test_ss.c | 151 + lib/support/Android.mk | 95 + lib/support/Makefile.in | 167 + lib/support/argv_parse.c | 166 + lib/support/argv_parse.h | 43 + lib/support/common.h | 36 + lib/support/cstring.c | 162 + lib/support/cstring.h | 6 + lib/support/dict.c | 1531 ++ lib/support/dict.h | 144 + lib/support/dqblk_v2.h | 31 + lib/support/mkquota.c | 705 + lib/support/nls-enable.h | 21 + lib/support/parse_qtype.c | 88 + lib/support/plausible.c | 291 + lib/support/plausible.h | 28 + lib/support/prof_err.et | 66 + lib/support/profile.c | 1906 +++ lib/support/profile.h | 107 + lib/support/profile_helpers.c | 317 + lib/support/profile_helpers.h | 28 + lib/support/quotaio.c | 444 + lib/support/quotaio.h | 265 + lib/support/quotaio_tree.c | 664 + lib/support/quotaio_tree.h | 64 + lib/support/quotaio_v2.c | 285 + lib/support/quotaio_v2.h | 54 + lib/uuid/Android.mk | 70 + lib/uuid/COPYING | 25 + lib/uuid/Makefile.in | 215 + lib/uuid/clear.c | 44 + lib/uuid/compare.c | 56 + lib/uuid/configure.in | 10 + lib/uuid/copy.c | 46 + lib/uuid/gen_uuid.c | 685 + lib/uuid/gen_uuid_nt.c | 93 + lib/uuid/isnull.c | 49 + lib/uuid/pack.c | 70 + lib/uuid/parse.c | 80 + lib/uuid/tst_uuid.c | 199 + lib/uuid/unpack.c | 64 + lib/uuid/unparse.c | 77 + lib/uuid/uuid.3.in | 66 + lib/uuid/uuid.h.in | 103 + lib/uuid/uuid.pc.in | 11 + lib/uuid/uuidP.h | 63 + lib/uuid/uuid_clear.3.in | 60 + lib/uuid/uuid_compare.3.in | 66 + lib/uuid/uuid_copy.3.in | 62 + lib/uuid/uuid_generate.3.in | 104 + lib/uuid/uuid_is_null.3.in | 62 + lib/uuid/uuid_parse.3.in | 71 + lib/uuid/uuid_time.3.in | 74 + lib/uuid/uuid_time.c | 173 + lib/uuid/uuid_types.h.in | 50 + lib/uuid/uuid_unparse.3.in | 79 + lib/uuid/uuidd.h | 54 + misc/Android.mk | 390 + misc/Makefile.in | 846 + misc/badblocks.8.in | 234 + misc/badblocks.c | 1348 ++ misc/base_device.c | 171 + misc/base_device.tst | 16 + misc/blkid.8.in | 164 + misc/blkid.c | 431 + misc/chattr.1.in | 228 + misc/chattr.c | 357 + misc/create_inode.c | 913 ++ misc/create_inode.h | 41 + misc/dumpe2fs.8.in | 95 + misc/dumpe2fs.c | 738 + misc/e2freefrag.8.in | 96 + misc/e2freefrag.c | 337 + misc/e2freefrag.h | 20 + misc/e2fuzz.c | 371 + misc/e2fuzz.sh | 327 + misc/e2image.8.in | 285 + misc/e2image.c | 1683 ++ misc/e2initrd_helper.c | 397 + misc/e2label.8.in | 53 + misc/e2label.c | 121 + misc/e2undo.8.in | 66 + misc/e2undo.c | 644 + misc/e4crypt.8.in | 45 + misc/e4crypt.c | 878 ++ misc/e4defrag.8.in | 90 + misc/e4defrag.c | 2032 +++ misc/ext4.5.in | 710 + misc/filefrag.8.in | 62 + misc/filefrag.c | 600 + misc/findfs.8.in | 33 + misc/findsuper.c | 268 + misc/fsck.8.in | 414 + misc/fsck.c | 1343 ++ misc/fsck.h | 73 + misc/fuse2fs.1.in | 73 + misc/fuse2fs.c | 3988 +++++ misc/ismounted.c | 218 + misc/logsave.8.in | 61 + misc/logsave.c | 334 + misc/lsattr.1.in | 52 + misc/lsattr.c | 227 + misc/mk_hugefiles.c | 515 + misc/mke2fs-hurd.conf | 42 + misc/mke2fs.8.in | 813 + misc/mke2fs.c | 3244 ++++ misc/mke2fs.conf.5.in | 533 + misc/mke2fs.conf.in | 52 + misc/mke2fs.h | 30 + misc/mklost+found.8.in | 43 + misc/mklost+found.c | 87 + misc/partinfo.c | 80 + misc/profile-to-c.awk | 12 + misc/tune2fs.8.in | 759 + misc/tune2fs.c | 3228 ++++ misc/tune2fs.h | 26 + misc/util.c | 291 + misc/util.h | 27 + misc/uuidd.8.in | 97 + misc/uuidd.c | 600 + misc/uuidd.rc | 55 + misc/uuidgen.1.in | 63 + misc/uuidgen.c | 80 + po/LINGUAS | 1 + po/Makefile.in.in | 375 + po/Makevars | 41 + po/POTFILES.in | 70 + po/Rules-quot | 47 + po/at-expand.pl | 151 + po/boldquot.sed | 10 + po/ca.gmo | Bin 0 -> 143573 bytes po/ca.po | 8680 +++++++++++ po/cs.gmo | Bin 0 -> 177933 bytes po/cs.po | 8845 +++++++++++ po/da.gmo | Bin 0 -> 110572 bytes po/da.po | 8087 ++++++++++ po/de.gmo | Bin 0 -> 151124 bytes po/de.po | 8701 +++++++++++ po/e2fsprogs.pot | 7776 ++++++++++ po/en@boldquot.header | 25 + po/en@quot.header | 22 + po/eo.gmo | Bin 0 -> 90333 bytes po/eo.po | 8080 ++++++++++ po/es.gmo | Bin 0 -> 183604 bytes po/es.po | 8940 +++++++++++ po/fi.gmo | Bin 0 -> 21688 bytes po/fi.po | 7902 ++++++++++ po/fr.gmo | Bin 0 -> 179225 bytes po/fr.po | 8605 +++++++++++ po/hu.gmo | Bin 0 -> 180685 bytes po/hu.po | 8585 +++++++++++ po/id.gmo | Bin 0 -> 82207 bytes po/id.po | 8535 +++++++++++ po/insert-header.sin | 23 + po/it.gmo | Bin 0 -> 56725 bytes po/it.po | 8416 ++++++++++ po/ms.gmo | Bin 0 -> 17590 bytes po/ms.po | 8226 ++++++++++ po/nl.gmo | Bin 0 -> 149244 bytes po/nl.po | 8722 +++++++++++ po/pl.gmo | Bin 0 -> 174447 bytes po/pl.po | 8418 ++++++++++ po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/sr.gmo | Bin 0 -> 231289 bytes po/sr.po | 8602 +++++++++++ po/sv.gmo | Bin 0 -> 170152 bytes po/sv.po | 8416 ++++++++++ po/tr.gmo | Bin 0 -> 70750 bytes po/tr.po | 8899 +++++++++++ po/uk.gmo | Bin 0 -> 236017 bytes po/uk.po | 8669 +++++++++++ po/vi.gmo | Bin 0 -> 145527 bytes po/vi.po | 8484 ++++++++++ po/zh_CN.gmo | Bin 0 -> 158903 bytes po/zh_CN.po | 8384 ++++++++++ resize/Android.mk | 45 + resize/Makefile.in | 196 + resize/extent.c | 241 + resize/main.c | 652 + resize/online.c | 299 + resize/resize2fs.8.in | 188 + resize/resize2fs.c | 3043 ++++ resize/resize2fs.h | 189 + resize/resource_track.c | 128 + resize/sim_progress.c | 118 + resize/test-resize | 27 + resize/test_extent.c | 126 + resize/test_extent.in | 64 + tests/Makefile.in | 94 + tests/README | 68 + tests/d_dumpe2fs_group_only/expect | 51 + tests/d_dumpe2fs_group_only/name | 1 + tests/d_dumpe2fs_group_only/script | 49 + tests/d_fallocate/expect.gz | Bin 0 -> 3770 bytes tests/d_fallocate/name | 1 + tests/d_fallocate/script | 175 + tests/d_fallocate_bigalloc/expect.gz | Bin 0 -> 2673 bytes tests/d_fallocate_bigalloc/name | 1 + tests/d_fallocate_bigalloc/script | 176 + tests/d_fallocate_blkmap/expect | 58 + tests/d_fallocate_blkmap/name | 1 + tests/d_fallocate_blkmap/script | 85 + tests/d_inline_dump/expect | 95 + tests/d_inline_dump/image.gz | Bin 0 -> 2988 bytes tests/d_inline_dump/name | 1 + tests/d_inline_dump/script | 43 + tests/d_loaddump/expect | 18 + tests/d_loaddump/name | 1 + tests/d_loaddump/script | 66 + tests/d_punch/expect | 176 + tests/d_punch/name | 1 + tests/d_punch/script | 129 + tests/d_punch_bigalloc/expect | 175 + tests/d_punch_bigalloc/name | 1 + tests/d_punch_bigalloc/script | 130 + tests/d_special_files/expect | 85 + tests/d_special_files/name | 1 + tests/d_special_files/script | 94 + tests/d_xattr_edits/expect | 55 + tests/d_xattr_edits/name | 1 + tests/d_xattr_edits/script | 141 + tests/d_xattr_sorting/expect | 34 + tests/d_xattr_sorting/name | 1 + tests/d_xattr_sorting/script | 95 + tests/defaults/e_script | 47 + tests/defaults/f_script | 1 + tests/defaults/j_script | 1 + tests/e_brel_bma/name | 1 + tests/e_brel_bma/script | 1 + tests/e_icount_normal/name | 1 + tests/e_icount_opt/name | 1 + tests/e_irel_ima/name | 1 + tests/e_irel_ima/script | 1 + tests/f_16384_block/expect.1 | 7 + tests/f_16384_block/expect.2 | 7 + tests/f_16384_block/image.gz | Bin 0 -> 9992 bytes tests/f_16384_block/name | 1 + tests/f_8192_block/expect.1 | 7 + tests/f_8192_block/expect.2 | 7 + tests/f_8192_block/image.gz | Bin 0 -> 9992 bytes tests/f_8192_block/name | 1 + tests/f_bad_bbitmap/expect.1 | 15 + tests/f_bad_bbitmap/expect.2 | 7 + tests/f_bad_bbitmap/image.gz | Bin 0 -> 2546 bytes tests/f_bad_bbitmap/name | 1 + tests/f_bad_bmap_csum/expect.1 | 16 + tests/f_bad_bmap_csum/expect.2 | 7 + tests/f_bad_bmap_csum/image.gz | Bin 0 -> 2546 bytes tests/f_bad_bmap_csum/name | 1 + tests/f_bad_disconnected_inode/expect.1 | 43 + tests/f_bad_disconnected_inode/expect.2 | 7 + tests/f_bad_disconnected_inode/image.gz | Bin 0 -> 1490 bytes tests/f_bad_disconnected_inode/name | 1 + tests/f_bad_gdt_csum/expect.1 | 10 + tests/f_bad_gdt_csum/expect.2 | 7 + tests/f_bad_gdt_csum/image.gz | Bin 0 -> 2548 bytes tests/f_bad_gdt_csum/name | 1 + tests/f_bad_ibitmap/expect.1 | 15 + tests/f_bad_ibitmap/expect.2 | 7 + tests/f_bad_ibitmap/image.gz | Bin 0 -> 2548 bytes tests/f_bad_ibitmap/name | 1 + tests/f_bad_inode_csum/expect.1 | 126 + tests/f_bad_inode_csum/expect.2 | 7 + tests/f_bad_inode_csum/image.gz | Bin 0 -> 4613 bytes tests/f_bad_inode_csum/name | 1 + tests/f_bad_local_jnl/expect.1 | 14 + tests/f_bad_local_jnl/expect.2 | 7 + tests/f_bad_local_jnl/image.gz | Bin 0 -> 10433 bytes tests/f_bad_local_jnl/name | 1 + tests/f_badbblocks/expect.1 | 28 + tests/f_badbblocks/expect.2 | 7 + tests/f_badbblocks/image.gz | Bin 0 -> 376 bytes tests/f_badbblocks/name | 1 + tests/f_badcluster/expect | 198 + tests/f_badcluster/image.gz | Bin 0 -> 3149 bytes tests/f_badcluster/name | 2 + tests/f_badcluster/script | 27 + tests/f_baddir/expect.1 | 54 + tests/f_baddir/expect.2 | 7 + tests/f_baddir/image.gz | Bin 0 -> 14241 bytes tests/f_baddir/name | 1 + tests/f_baddir2/expect.1 | 12 + tests/f_baddir2/expect.2 | 7 + tests/f_baddir2/image.gz | Bin 0 -> 587 bytes tests/f_baddir2/name | 1 + tests/f_baddotdir/expect.1 | 59 + tests/f_baddotdir/expect.2 | 7 + tests/f_baddotdir/image.gz | Bin 0 -> 564 bytes tests/f_baddotdir/name | 1 + tests/f_badinode/expect.1 | 40 + tests/f_badinode/expect.2 | 7 + tests/f_badinode/image.gz | Bin 0 -> 1155 bytes tests/f_badinode/name | 1 + tests/f_badjour_indblks/expect.1 | 32 + tests/f_badjour_indblks/expect.2 | 7 + tests/f_badjour_indblks/image | Bin 0 -> 8388608 bytes tests/f_badjour_indblks/image.gz | Bin 0 -> 10569 bytes tests/f_badjour_indblks/name | 1 + tests/f_badjourblks/expect.1 | 30 + tests/f_badjourblks/expect.2 | 7 + tests/f_badjourblks/image.gz | Bin 0 -> 10481 bytes tests/f_badjourblks/name | 1 + tests/f_badorphan/expect.1 | 77 + tests/f_badorphan/expect.2 | 7 + tests/f_badorphan/image.gz | Bin 0 -> 78820 bytes tests/f_badorphan/name | 1 + tests/f_badprimary/expect.1 | 27 + tests/f_badprimary/expect.2 | 7 + tests/f_badprimary/image.gz | Bin 0 -> 374 bytes tests/f_badprimary/name | 1 + tests/f_badroot/expect.1 | 29 + tests/f_badroot/expect.2 | 7 + tests/f_badroot/image.gz | Bin 0 -> 479 bytes tests/f_badroot/name | 1 + tests/f_badsymlinks/expect.1 | 61 + tests/f_badsymlinks/expect.2 | 7 + tests/f_badsymlinks/image.gz | Bin 0 -> 1767 bytes tests/f_badsymlinks/name | 1 + tests/f_badtable/expect.1 | 45 + tests/f_badtable/expect.2 | 7 + tests/f_badtable/image.gz | Bin 0 -> 987 bytes tests/f_badtable/name | 1 + tests/f_bb_in_bb/expect.1 | 17 + tests/f_bb_in_bb/expect.2 | 7 + tests/f_bb_in_bb/image.gz | Bin 0 -> 2414 bytes tests/f_bb_in_bb/name | 1 + tests/f_bbfile/expect.1 | 48 + tests/f_bbfile/expect.2 | 7 + tests/f_bbfile/image.gz | Bin 0 -> 5195 bytes tests/f_bbfile/name | 1 + tests/f_bbinode/expect.1 | 51 + tests/f_bbinode/expect.2 | 7 + tests/f_bbinode/image.gz | Bin 0 -> 2637 bytes tests/f_bbinode/name | 1 + tests/f_big_sparse/expect.1 | 11 + tests/f_big_sparse/expect.2 | 7 + tests/f_big_sparse/image.gz | Bin 0 -> 801 bytes tests/f_big_sparse/name | 1 + tests/f_bitmaps/expect.1 | 17 + tests/f_bitmaps/expect.2 | 7 + tests/f_bitmaps/image.gz | Bin 0 -> 687 bytes tests/f_bitmaps/name | 1 + tests/f_boundscheck/expect.1 | 25 + tests/f_boundscheck/expect.2 | 25 + tests/f_boundscheck/image.bz2 | Bin 0 -> 986 bytes tests/f_boundscheck/name | 1 + tests/f_boundscheck/script | 32 + tests/f_clear_xattr/expect.1 | 38 + tests/f_clear_xattr/expect.2 | 7 + tests/f_clear_xattr/image.gz | Bin 0 -> 1082 bytes tests/f_clear_xattr/name | 1 + tests/f_cloneblock_alloc_error/expect.1 | 36 + tests/f_cloneblock_alloc_error/expect.2 | 7 + tests/f_cloneblock_alloc_error/image.gz | Bin 0 -> 3441 bytes tests/f_cloneblock_alloc_error/name | 1 + tests/f_collapse_extent_tree/expect.1 | 16 + tests/f_collapse_extent_tree/expect.2 | 10 + tests/f_collapse_extent_tree/image.gz | Bin 0 -> 2537 bytes tests/f_collapse_extent_tree/name | 1 + tests/f_collapse_extent_tree/script | 118 + tests/f_compress_extent_tree_level/expect.1 | 23 + tests/f_compress_extent_tree_level/expect.2 | 17 + tests/f_compress_extent_tree_level/image.gz | Bin 0 -> 2581 bytes tests/f_compress_extent_tree_level/name | 1 + tests/f_compress_extent_tree_level/script | 118 + tests/f_convert_bmap/expect.1 | 26 + tests/f_convert_bmap/expect.2 | 10 + tests/f_convert_bmap/image.gz | Bin 0 -> 3548 bytes tests/f_convert_bmap/name | 1 + tests/f_convert_bmap/script | 117 + tests/f_convert_bmap_and_extent/expect.1 | 33 + tests/f_convert_bmap_and_extent/expect.2 | 16 + tests/f_convert_bmap_and_extent/image.gz | Bin 0 -> 3657 bytes tests/f_convert_bmap_and_extent/name | 1 + tests/f_convert_bmap_and_extent/script | 119 + tests/f_corrupt_dirent_tail/expect.1 | 16 + tests/f_corrupt_dirent_tail/expect.2 | 7 + tests/f_corrupt_dirent_tail/image.gz | Bin 0 -> 2685 bytes tests/f_corrupt_dirent_tail/name | 1 + tests/f_crashdisk/expect.1 | 13 + tests/f_crashdisk/image.gz | Bin 0 -> 1044 bytes tests/f_crashdisk/name | 1 + tests/f_crashdisk/script | 2 + tests/f_create_symlinks/expect | 69 + tests/f_create_symlinks/name | 1 + tests/f_create_symlinks/script | 62 + tests/f_deleted_inode_bad_csum/expect.1 | 11 + tests/f_deleted_inode_bad_csum/expect.2 | 7 + tests/f_deleted_inode_bad_csum/image.gz | Bin 0 -> 2676 bytes tests/f_deleted_inode_bad_csum/name | 1 + tests/f_desc_size_128/expect.1 | 7 + tests/f_desc_size_128/expect.2 | 7 + tests/f_desc_size_128/image.gz | Bin 0 -> 11547 bytes tests/f_desc_size_128/name | 1 + tests/f_desc_size_bad/expect.1 | 11 + tests/f_desc_size_bad/expect.2 | 7 + tests/f_desc_size_bad/script | 17 + tests/f_detect_junk/expect | 22 + tests/f_detect_junk/expect.nodebugfs | 23 + tests/f_detect_junk/image.bz2 | Bin 0 -> 2504 bytes tests/f_detect_junk/name | 1 + tests/f_detect_junk/script | 44 + tests/f_detect_xfs/expect | 25 + tests/f_detect_xfs/expect.nodebugfs | 23 + tests/f_detect_xfs/image.bz2 | Bin 0 -> 450 bytes tests/f_detect_xfs/name | 1 + tests/f_detect_xfs/script | 37 + tests/f_dir_bad_csum/expect.1 | 56 + tests/f_dir_bad_csum/expect.2 | 7 + tests/f_dir_bad_csum/image.gz | Bin 0 -> 3499 bytes tests/f_dir_bad_csum/name | 1 + tests/f_dir_bad_mode/expect.1 | 12 + tests/f_dir_bad_mode/expect.2 | 7 + tests/f_dir_bad_mode/image.gz | Bin 0 -> 592 bytes tests/f_dir_bad_mode/name | 1 + tests/f_dirlink/expect.1 | 14 + tests/f_dirlink/expect.2 | 7 + tests/f_dirlink/image.gz | Bin 0 -> 490 bytes tests/f_dirlink/name | 1 + tests/f_dup/expect.1 | 38 + tests/f_dup/expect.2 | 7 + tests/f_dup/image.gz | Bin 0 -> 3744 bytes tests/f_dup/name | 1 + tests/f_dup2/expect.1 | 45 + tests/f_dup2/expect.2 | 7 + tests/f_dup2/image.gz | Bin 0 -> 14589 bytes tests/f_dup2/name | 1 + tests/f_dup3/expect.1 | 45 + tests/f_dup3/expect.2 | 7 + tests/f_dup3/image.gz | Bin 0 -> 15358 bytes tests/f_dup3/name | 1 + tests/f_dup4/expect.1 | 112 + tests/f_dup4/expect.2 | 7 + tests/f_dup4/name | 2 + tests/f_dup4/script | 56 + tests/f_dup_ba/expect.1 | 69 + tests/f_dup_ba/expect.2 | 7 + tests/f_dup_ba/image.gz | Bin 0 -> 4668 bytes tests/f_dup_ba/name | 1 + tests/f_dup_de/expect-nohtree.1 | 31 + tests/f_dup_de/expect-nohtree.2 | 7 + tests/f_dup_de/expect.1 | 28 + tests/f_dup_de/expect.2 | 7 + tests/f_dup_de/image.gz | Bin 0 -> 8970 bytes tests/f_dup_de/name | 1 + tests/f_dup_de/script | 16 + tests/f_dup_de2/expect.1 | 16 + tests/f_dup_de2/expect.2 | 7 + tests/f_dup_de2/image.gz | Bin 0 -> 4860 bytes tests/f_dup_de2/name | 1 + tests/f_dup_resize/expect.1 | 34 + tests/f_dup_resize/expect.2 | 7 + tests/f_dup_resize/name | 1 + tests/f_dup_resize/script | 30 + tests/f_dupdot/expect.1 | 22 + tests/f_dupdot/expect.2 | 7 + tests/f_dupdot/image.gz | Bin 0 -> 553 bytes tests/f_dupdot/name | 1 + tests/f_dupfsblks/expect.1 | 65 + tests/f_dupfsblks/expect.2 | 7 + tests/f_dupfsblks/image.gz | Bin 0 -> 464 bytes tests/f_dupfsblks/name | 1 + tests/f_dupsuper/expect.1 | 27 + tests/f_dupsuper/expect.2 | 7 + tests/f_dupsuper/image.gz | Bin 0 -> 5158 bytes tests/f_dupsuper/name | 1 + tests/f_ea_bad_csum/expect.1 | 29 + tests/f_ea_bad_csum/expect.2 | 7 + tests/f_ea_bad_csum/image.gz | Bin 0 -> 3176 bytes tests/f_ea_bad_csum/name | 1 + tests/f_ea_checks/expect.1 | 57 + tests/f_ea_checks/expect.2 | 7 + tests/f_ea_checks/image.gz | Bin 0 -> 2306 bytes tests/f_ea_checks/name | 1 + tests/f_ea_value_crash/expect.1 | 15 + tests/f_ea_value_crash/expect.2 | 7 + tests/f_ea_value_crash/image.gz | Bin 0 -> 2627 bytes tests/f_ea_value_crash/name | 1 + tests/f_emptydir/expect.1 | 19 + tests/f_emptydir/expect.2 | 7 + tests/f_emptydir/image.gz | Bin 0 -> 2710 bytes tests/f_emptydir/name | 2 + tests/f_encrypted_lpf/expect.1 | 27 + tests/f_encrypted_lpf/expect.2 | 7 + tests/f_encrypted_lpf/image.gz | Bin 0 -> 1123 bytes tests/f_encrypted_lpf/name | 1 + tests/f_end-bitmap/expect.1 | 16 + tests/f_end-bitmap/expect.2 | 7 + tests/f_end-bitmap/image.gz | Bin 0 -> 3756 bytes tests/f_end-bitmap/name | 1 + tests/f_eofblocks/expect.1 | 13 + tests/f_eofblocks/expect.2 | 7 + tests/f_eofblocks/image.gz | Bin 0 -> 1364 bytes tests/f_eofblocks/name | 1 + tests/f_expand/expect.1.gz | Bin 0 -> 13462 bytes tests/f_expand/expect.2 | 7 + tests/f_expand/image.gz | Bin 0 -> 63068 bytes tests/f_expand/name | 1 + tests/f_expandroot_create_lnf/expect.1 | 12 + tests/f_expandroot_create_lnf/expect.2 | 7 + tests/f_expandroot_create_lnf/image.gz | Bin 0 -> 1622 bytes tests/f_expandroot_create_lnf/name | 1 + tests/f_ext_journal/expect.1 | 8 + tests/f_ext_journal/expect.2 | 7 + tests/f_ext_journal/image.gz | Bin 0 -> 49415 bytes tests/f_ext_journal/journal.gz | Bin 0 -> 45113 bytes tests/f_ext_journal/name | 1 + tests/f_ext_journal/script | 8 + tests/f_ext_zero_len/expect.1 | 13 + tests/f_ext_zero_len/expect.2 | 7 + tests/f_ext_zero_len/image.gz | Bin 0 -> 576 bytes tests/f_ext_zero_len/name | 1 + tests/f_extent_bad_node/expect.1 | 26 + tests/f_extent_bad_node/expect.2 | 7 + tests/f_extent_bad_node/image.gz | Bin 0 -> 1254 bytes tests/f_extent_bad_node/name | 1 + tests/f_extent_htree/expect.1 | 29 + tests/f_extent_htree/expect.2 | 7 + tests/f_extent_htree/image.gz | Bin 0 -> 10101 bytes tests/f_extent_htree/name | 1 + tests/f_extent_htree/script | 70 + tests/f_extent_int_bad_csum/expect.1 | 11 + tests/f_extent_int_bad_csum/expect.2 | 7 + tests/f_extent_int_bad_csum/image.gz | Bin 0 -> 7202 bytes tests/f_extent_int_bad_csum/name | 1 + tests/f_extent_int_bad_extent/expect.1 | 24 + tests/f_extent_int_bad_extent/expect.2 | 7 + tests/f_extent_int_bad_extent/image.gz | Bin 0 -> 7205 bytes tests/f_extent_int_bad_extent/name | 1 + tests/f_extent_int_bad_magic/expect.1 | 26 + tests/f_extent_int_bad_magic/expect.2 | 7 + tests/f_extent_int_bad_magic/image.gz | Bin 0 -> 7205 bytes tests/f_extent_int_bad_magic/name | 1 + tests/f_extent_interior_start_lblk/expect.1 | 12 + tests/f_extent_interior_start_lblk/expect.2 | 7 + tests/f_extent_interior_start_lblk/image.gz | Bin 0 -> 603 bytes tests/f_extent_interior_start_lblk/name | 1 + tests/f_extent_leaf_bad_csum/expect.1 | 11 + tests/f_extent_leaf_bad_csum/expect.2 | 7 + tests/f_extent_leaf_bad_csum/image.gz | Bin 0 -> 5005 bytes tests/f_extent_leaf_bad_csum/name | 1 + tests/f_extent_leaf_bad_extent/expect.1 | 24 + tests/f_extent_leaf_bad_extent/expect.2 | 7 + tests/f_extent_leaf_bad_extent/image.gz | Bin 0 -> 5008 bytes tests/f_extent_leaf_bad_extent/name | 1 + tests/f_extent_leaf_bad_magic/expect.1 | 26 + tests/f_extent_leaf_bad_magic/expect.2 | 7 + tests/f_extent_leaf_bad_magic/image.gz | Bin 0 -> 5008 bytes tests/f_extent_leaf_bad_magic/name | 1 + tests/f_extent_oobounds/expect.1 | 27 + tests/f_extent_oobounds/expect.2 | 7 + tests/f_extent_oobounds/script | 42 + tests/f_extent_too_deep/expect.1 | 23 + tests/f_extent_too_deep/expect.2 | 10 + tests/f_extent_too_deep/image.gz | Bin 0 -> 2592 bytes tests/f_extent_too_deep/name | 1 + tests/f_extent_too_deep/script | 118 + tests/f_extents/expect.1 | 65 + tests/f_extents/expect.2 | 7 + tests/f_extents/image.gz | Bin 0 -> 20947 bytes tests/f_extents/name | 1 + tests/f_extents2/expect.1 | 70 + tests/f_extents2/expect.2 | 7 + tests/f_extents2/image.gz | Bin 0 -> 40632 bytes tests/f_extents2/name | 1 + tests/f_extra_journal/expect.1 | 23 + tests/f_extra_journal/expect.2 | 7 + tests/f_extra_journal/image.gz | Bin 0 -> 4320 bytes tests/f_extra_journal/name | 1 + tests/f_fast_symlink_extents/expect.1 | 11 + tests/f_fast_symlink_extents/expect.2 | 7 + tests/f_fast_symlink_extents/image.gz | Bin 0 -> 565 bytes tests/f_fast_symlink_extents/name | 1 + tests/f_file_acl_high/expect.1 | 12 + tests/f_file_acl_high/expect.2 | 7 + tests/f_file_acl_high/image.gz | Bin 0 -> 891 bytes tests/f_file_acl_high/name | 1 + tests/f_filetype/expect.1 | 49 + tests/f_filetype/expect.2 | 7 + tests/f_filetype/image.gz | Bin 0 -> 646 bytes tests/f_filetype/name | 1 + tests/f_first_meta_bg_too_big/expect.1 | 20 + tests/f_first_meta_bg_too_big/expect.2 | 7 + tests/f_first_meta_bg_too_big/image.gz | Bin 0 -> 533 bytes tests/f_first_meta_bg_too_big/name | 1 + tests/f_full_bg/expect.1 | 7 + tests/f_full_bg/expect.2 | 7 + tests/f_full_bg/image.gz | Bin 0 -> 1860 bytes tests/f_full_bg/name | 1 + tests/f_h_badnode/expect.1 | 18 + tests/f_h_badnode/expect.2 | 7 + tests/f_h_badnode/image.gz | Bin 0 -> 467331 bytes tests/f_h_badnode/name | 1 + tests/f_h_badnode/script | 5 + tests/f_h_badroot/expect.1 | 40 + tests/f_h_badroot/expect.2 | 7 + tests/f_h_badroot/image.gz | Bin 0 -> 43165 bytes tests/f_h_badroot/name | 1 + tests/f_h_badroot/script | 5 + tests/f_h_normal/expect.1 | 7 + tests/f_h_normal/expect.2 | 7 + tests/f_h_normal/image.gz | Bin 0 -> 454847 bytes tests/f_h_normal/name | 1 + tests/f_h_normal/script | 5 + tests/f_h_reindex/expect.1 | 958 ++ tests/f_h_reindex/expect.2 | 7 + tests/f_h_reindex/image.gz | Bin 0 -> 621257 bytes tests/f_h_reindex/name | 1 + tests/f_h_reindex/script | 5 + tests/f_h_unsigned/expect.1 | 7 + tests/f_h_unsigned/expect.2 | 7 + tests/f_h_unsigned/image.gz | Bin 0 -> 454913 bytes tests/f_h_unsigned/name | 1 + tests/f_h_unsigned/script | 5 + tests/f_holedir/expect.1 | 33 + tests/f_holedir/expect.2 | 7 + tests/f_holedir/image.gz | Bin 0 -> 345 bytes tests/f_holedir/name | 1 + tests/f_holedir2/expect.1 | 22 + tests/f_holedir2/expect.2 | 7 + tests/f_holedir2/image.gz | Bin 0 -> 612 bytes tests/f_holedir2/name | 2 + tests/f_holedir3/expect.1 | 13 + tests/f_holedir3/expect.2 | 7 + tests/f_holedir3/image.gz | Bin 0 -> 3700 bytes tests/f_holedir3/name | 2 + tests/f_holedir4/expect.1 | 68 + tests/f_holedir4/expect.2 | 11 + tests/f_holedir4/image.gz | Bin 0 -> 2535 bytes tests/f_holedir4/name | 1 + tests/f_htree_bad_csum/expect.1 | 28 + tests/f_htree_bad_csum/expect.2 | 7 + tests/f_htree_bad_csum/image.gz | Bin 0 -> 5462 bytes tests/f_htree_bad_csum/name | 1 + tests/f_htree_leaf_csum/expect.1 | 12 + tests/f_htree_leaf_csum/expect.2 | 7 + tests/f_htree_leaf_csum/image.gz | Bin 0 -> 15906 bytes tests/f_htree_leaf_csum/name | 1 + tests/f_hugedir_blocks/expect.1 | 10 + tests/f_hugedir_blocks/expect.2 | 7 + tests/f_hugedir_blocks/image.gz | Bin 0 -> 2497 bytes tests/f_hugedir_blocks/name | 1 + tests/f_hurd/expect.1 | 12 + tests/f_hurd/expect.2 | 7 + tests/f_hurd/image.gz | Bin 0 -> 401 bytes tests/f_hurd/name | 1 + tests/f_idata_and_extents/expect.1 | 35 + tests/f_idata_and_extents/expect.2 | 7 + tests/f_idata_and_extents/image.gz | Bin 0 -> 3112 bytes tests/f_idata_and_extents/name | 1 + tests/f_illbbitmap/expect.1 | 28 + tests/f_illbbitmap/expect.2 | 7 + tests/f_illbbitmap/image.gz | Bin 0 -> 357 bytes tests/f_illbbitmap/name | 1 + tests/f_illibitmap/expect.1 | 25 + tests/f_illibitmap/expect.2 | 7 + tests/f_illibitmap/image.gz | Bin 0 -> 360 bytes tests/f_illibitmap/name | 1 + tests/f_illitable/expect.1 | 49 + tests/f_illitable/expect.2 | 7 + tests/f_illitable/image.gz | Bin 0 -> 396 bytes tests/f_illitable/name | 1 + tests/f_illitable_flexbg/expect.1 | 24 + tests/f_illitable_flexbg/expect.2 | 7 + tests/f_illitable_flexbg/image.gz | Bin 0 -> 38080 bytes tests/f_illitable_flexbg/name | 1 + tests/f_imagic/expect.1 | 47 + tests/f_imagic/expect.2 | 7 + tests/f_imagic/image.gz | Bin 0 -> 1143 bytes tests/f_imagic/name | 1 + tests/f_imagic_fs/expect.1 | 31 + tests/f_imagic_fs/expect.2 | 7 + tests/f_imagic_fs/name | 1 + tests/f_imagic_fs/script | 9 + tests/f_ind_inode_collision/expect.1 | 147 + tests/f_ind_inode_collision/expect.2 | 7 + tests/f_ind_inode_collision/image.gz | Bin 0 -> 2456 bytes tests/f_ind_inode_collision/name | 1 + tests/f_inlinedata_dirblocks/expect.1 | 25 + tests/f_inlinedata_dirblocks/expect.2 | 7 + tests/f_inlinedata_dirblocks/image.gz | Bin 0 -> 2597 bytes tests/f_inlinedata_dirblocks/name | 1 + tests/f_inlinedata_repair/expect.1 | 58 + tests/f_inlinedata_repair/expect.2 | 7 + tests/f_inlinedata_repair/image.gz | Bin 0 -> 3201 bytes tests/f_inlinedata_repair/name | 1 + tests/f_inlinedir_detector/expect.1 | 20 + tests/f_inlinedir_detector/expect.2 | 7 + tests/f_inlinedir_detector/image.gz | Bin 0 -> 2640 bytes tests/f_inlinedir_detector/name | 1 + tests/f_inode_ea_collision/expect.1 | 15 + tests/f_inode_ea_collision/expect.2 | 7 + tests/f_inode_ea_collision/image.gz | Bin 0 -> 2602 bytes tests/f_inode_ea_collision/name | 1 + tests/f_invalid_bad_inode/expect.1 | 11 + tests/f_invalid_bad_inode/expect.2 | 7 + tests/f_invalid_bad_inode/image.gz | Bin 0 -> 623 bytes tests/f_invalid_bad_inode/name | 1 + tests/f_invalid_extent_symlink/expect.1 | 12 + tests/f_invalid_extent_symlink/expect.2 | 7 + tests/f_invalid_extent_symlink/image.gz | Bin 0 -> 1115 bytes tests/f_invalid_extent_symlink/name | 1 + tests/f_itable_collision/expect.1 | 101 + tests/f_itable_collision/expect.2 | 7 + tests/f_itable_collision/image.gz | Bin 0 -> 2817 bytes tests/f_itable_collision/name | 1 + tests/f_itable_collision/script | 37 + tests/f_jnl_32bit/expect.0 | 567 + tests/f_jnl_32bit/expect.1 | 16 + tests/f_jnl_32bit/expect.2 | 7 + tests/f_jnl_32bit/image.gz | Bin 0 -> 44544 bytes tests/f_jnl_32bit/name | 1 + tests/f_jnl_32bit/script | 4 + tests/f_jnl_64bit/expect.0 | 757 + tests/f_jnl_64bit/expect.1 | 16 + tests/f_jnl_64bit/expect.2 | 7 + tests/f_jnl_64bit/image.gz | Bin 0 -> 118573 bytes tests/f_jnl_64bit/name | 1 + tests/f_jnl_64bit/script | 4 + tests/f_jnl_errno/expect.0 | 48 + tests/f_jnl_errno/expect.1 | 9 + tests/f_jnl_errno/expect.2 | 7 + tests/f_jnl_errno/image.gz | Bin 0 -> 8822 bytes tests/f_jnl_errno/name | 1 + tests/f_jnl_errno/script | 4 + tests/f_jnl_etb_alloc_fail/expect.1 | 31 + tests/f_jnl_etb_alloc_fail/expect.2 | 20 + tests/f_jnl_etb_alloc_fail/image.gz | Bin 0 -> 3450 bytes tests/f_jnl_etb_alloc_fail/name | 1 + tests/f_journal/expect.1 | 62 + tests/f_journal/expect.2 | 7 + tests/f_journal/image.gz | Bin 0 -> 36380 bytes tests/f_journal/name | 1 + tests/f_lotsbad/expect.1 | 61 + tests/f_lotsbad/expect.2 | 7 + tests/f_lotsbad/image.gz | Bin 0 -> 3694 bytes tests/f_lotsbad/name | 1 + tests/f_lpf/expect.1 | 48 + tests/f_lpf/expect.2 | 7 + tests/f_lpf/image.gz | Bin 0 -> 15340 bytes tests/f_lpf/name | 1 + tests/f_lpf2/expect.1 | 41 + tests/f_lpf2/expect.2 | 7 + tests/f_lpf2/image.gz | Bin 0 -> 450 bytes tests/f_lpf2/name | 1 + tests/f_lpffile/expect.1 | 32 + tests/f_lpffile/expect.2 | 7 + tests/f_lpffile/image.gz | Bin 0 -> 509 bytes tests/f_lpffile/name | 1 + tests/f_messy_inode/expect.1 | 38 + tests/f_messy_inode/expect.2 | 7 + tests/f_messy_inode/image.gz | Bin 0 -> 3823 bytes tests/f_messy_inode/name | 1 + tests/f_miss_blk_bmap/expect.1 | 20 + tests/f_miss_blk_bmap/expect.2 | 7 + tests/f_miss_blk_bmap/image.gz | Bin 0 -> 687 bytes tests/f_miss_blk_bmap/name | 1 + tests/f_miss_journal/expect.1 | 28 + tests/f_miss_journal/expect.2 | 7 + tests/f_miss_journal/image.gz | Bin 0 -> 4276 bytes tests/f_miss_journal/name | 1 + tests/f_misstable/expect.1 | 49 + tests/f_misstable/expect.2 | 7 + tests/f_misstable/image.gz | Bin 0 -> 17201 bytes tests/f_misstable/name | 1 + tests/f_mke2fs2b/expect.1 | 25 + tests/f_mke2fs2b/expect.2 | 7 + tests/f_mke2fs2b/image.gz | Bin 0 -> 556 bytes tests/f_mke2fs2b/name | 1 + tests/f_mke2fs_baddisk/script | 26 + tests/f_mmp/name | 1 + tests/f_mmp/script | 75 + tests/f_mmp_garbage/expect.1 | 9 + tests/f_mmp_garbage/expect.2 | 7 + tests/f_mmp_garbage/name | 1 + tests/f_mmp_garbage/script | 28 + tests/f_no/expect | 48 + tests/f_no/script | 27 + tests/f_no_cache_corrupt_inode/expect.1 | 11 + tests/f_no_cache_corrupt_inode/expect.2 | 7 + tests/f_no_cache_corrupt_inode/image.gz | Bin 0 -> 2606 bytes tests/f_no_cache_corrupt_inode/name | 1 + tests/f_noroot/expect.1 | 39 + tests/f_noroot/expect.2 | 7 + tests/f_noroot/image.gz | Bin 0 -> 550 bytes tests/f_noroot/name | 1 + tests/f_nospc_create_lnf/expect.1 | 29 + tests/f_nospc_create_lnf/expect.2 | 26 + tests/f_nospc_create_lnf/image.gz | Bin 0 -> 4201 bytes tests/f_nospc_create_lnf/name | 1 + tests/f_okgroup/expect.1 | 9 + tests/f_okgroup/expect.2 | 7 + tests/f_okgroup/image.gz | Bin 0 -> 8387 bytes tests/f_okgroup/name | 1 + tests/f_opt_extent/expect | 55 + tests/f_opt_extent/name | 1 + tests/f_opt_extent/script | 64 + tests/f_opt_extent_ext3/expect | 44 + tests/f_opt_extent_ext3/name | 1 + tests/f_opt_extent_ext3/script | 65 + tests/f_orphan/expect.1 | 14 + tests/f_orphan/expect.2 | 7 + tests/f_orphan/image.gz | Bin 0 -> 12026 bytes tests/f_orphan/name | 1 + tests/f_orphan_dotdot_ft/expect.1 | 56 + tests/f_orphan_dotdot_ft/expect.2 | 7 + tests/f_orphan_dotdot_ft/image.gz | Bin 0 -> 590 bytes tests/f_orphan_dotdot_ft/name | 1 + tests/f_orphan_extents_inode/expect.1 | 10 + tests/f_orphan_extents_inode/expect.2 | 7 + tests/f_orphan_extents_inode/image.gz | Bin 0 -> 564 bytes tests/f_orphan_extents_inode/name | 1 + tests/f_orphan_indirect_inode/expect.1 | 3 + tests/f_orphan_indirect_inode/expect.2 | 7 + tests/f_orphan_indirect_inode/image.gz | Bin 0 -> 592 bytes tests/f_orphan_indirect_inode/name | 1 + tests/f_orphan_indirect_inode/script | 2 + tests/f_overfsblks/expect.1 | 19 + tests/f_overfsblks/expect.2 | 7 + tests/f_overfsblks/image.gz | Bin 0 -> 351 bytes tests/f_overfsblks/name | 1 + tests/f_pre_1970_date_encoding/expect | 45 + tests/f_pre_1970_date_encoding/name | 1 + tests/f_pre_1970_date_encoding/script | 106 + tests/f_preen/expect.1 | 12 + tests/f_preen/expect.2 | 30 + tests/f_preen/image.gz | Bin 0 -> 155743 bytes tests/f_preen/name | 1 + tests/f_preen/script | 4 + tests/f_quota/debugfs-cmds | 7 + tests/f_quota/expect.0 | 21 + tests/f_quota/expect.1 | 13 + tests/f_quota/expect.2 | 7 + tests/f_quota/image.gz | Bin 0 -> 1046 bytes tests/f_quota/name | 1 + tests/f_quota/script | 11 + tests/f_readonly_fsck/expect | 11 + tests/f_readonly_fsck/image.gz | Bin 0 -> 2538 bytes tests/f_readonly_fsck/name | 1 + tests/f_readonly_fsck/script | 46 + tests/f_rebuild_csum_rootdir/expect.1 | 311 + tests/f_rebuild_csum_rootdir/expect.2 | 7 + tests/f_rebuild_csum_rootdir/image.gz | Bin 0 -> 12476 bytes tests/f_rebuild_csum_rootdir/name | 1 + tests/f_recnect_bad/expect.1 | 38 + tests/f_recnect_bad/expect.2 | 7 + tests/f_recnect_bad/image.gz | Bin 0 -> 543 bytes tests/f_recnect_bad/name | 1 + tests/f_reconnect/expect.1 | 24 + tests/f_reconnect/expect.2 | 7 + tests/f_reconnect/image.gz | Bin 0 -> 538 bytes tests/f_reconnect/name | 1 + tests/f_rehash_dir/expect.1 | 10 + tests/f_rehash_dir/expect.2 | 7 + tests/f_rehash_dir/image.gz | Bin 0 -> 3126 bytes tests/f_rehash_dir/name | 1 + tests/f_rehash_dir/script | 3 + tests/f_resize_inode/expect | 159 + tests/f_resize_inode/script | 143 + tests/f_salvage_dir/expect.1 | 19 + tests/f_salvage_dir/expect.2 | 7 + tests/f_salvage_dir/image.gz | Bin 0 -> 616 bytes tests/f_salvage_dir/name | 1 + tests/f_sb_extra_isize/expect.1 | 13 + tests/f_sb_extra_isize/expect.2 | 7 + tests/f_sb_extra_isize/image.gz | Bin 0 -> 719 bytes tests/f_sb_extra_isize/name | 1 + tests/f_selinux/expect.1 | 7 + tests/f_selinux/expect.2 | 7 + tests/f_selinux/image.gz | Bin 0 -> 715 bytes tests/f_selinux/name | 1 + tests/f_short_encrypted_dirent/expect.1 | 17 + tests/f_short_encrypted_dirent/expect.2 | 7 + tests/f_short_encrypted_dirent/image.gz | Bin 0 -> 925 bytes tests/f_short_encrypted_dirent/name | 1 + tests/f_special_ea/expect.1 | 11 + tests/f_special_ea/image.gz | Bin 0 -> 30344 bytes tests/f_special_ea/name | 1 + tests/f_special_ea/script | 2 + tests/f_summary_counts/expect.1 | 19 + tests/f_summary_counts/expect.2 | 7 + tests/f_summary_counts/image.gz | Bin 0 -> 440 bytes tests/f_summary_counts/name | 1 + tests/f_summary_counts/script | 4 + tests/f_super_bad_csum/expect.1 | 13 + tests/f_super_bad_csum/expect.2 | 7 + tests/f_super_bad_csum/image.bz2 | Bin 0 -> 1181 bytes tests/f_super_bad_csum/name | 1 + tests/f_super_bad_csum/script | 33 + tests/f_toobig_extent_dir/expect.1 | 12 + tests/f_toobig_extent_dir/expect.2 | 7 + tests/f_toobig_extent_dir/image.gz | Bin 0 -> 822 bytes tests/f_toobig_extent_dir/name | 1 + tests/f_trunc_dirent_header/expect.1 | 15 + tests/f_trunc_dirent_header/expect.2 | 7 + tests/f_trunc_dirent_header/image.gz | Bin 0 -> 2873 bytes tests/f_trunc_dirent_header/name | 1 + tests/f_uninit_cat/expect | Bin 0 -> 3623 bytes tests/f_uninit_cat/image.gz | Bin 0 -> 1553 bytes tests/f_uninit_cat/name | 1 + tests/f_uninit_cat/script | 37 + tests/f_uninit_dir/expect.1 | 27 + tests/f_uninit_dir/expect.2 | 7 + tests/f_uninit_dir/image.gz | Bin 0 -> 2604 bytes tests/f_uninit_dir/name | 1 + tests/f_uninit_ext_past_eof/expect.1 | 7 + tests/f_uninit_ext_past_eof/expect.2 | 7 + tests/f_uninit_ext_past_eof/image.gz | Bin 0 -> 5102 bytes tests/f_uninit_ext_past_eof/name | 1 + tests/f_uninit_ext_past_eof2/expect.1 | 7 + tests/f_uninit_ext_past_eof2/expect.2 | 7 + tests/f_uninit_ext_past_eof2/image.gz | Bin 0 -> 989 bytes tests/f_uninit_ext_past_eof2/name | 1 + tests/f_uninit_last_uninit/expect.1 | 9 + tests/f_uninit_last_uninit/expect.2 | 7 + tests/f_uninit_last_uninit/name | 2 + tests/f_uninit_last_uninit/script | 26 + tests/f_unsorted_EAs/expect.1 | 11 + tests/f_unsorted_EAs/expect.2 | 7 + tests/f_unsorted_EAs/image.gz | Bin 0 -> 15674 bytes tests/f_unsorted_EAs/name | 1 + tests/f_unused_itable/expect.1 | 28 + tests/f_unused_itable/expect.2 | 7 + tests/f_unused_itable/image.gz | Bin 0 -> 2310 bytes tests/f_unused_itable/name | 1 + tests/f_valid_ea_in_inode/expect.1 | 7 + tests/f_valid_ea_in_inode/image.gz | Bin 0 -> 11873 bytes tests/f_valid_ea_in_inode/name | 1 + tests/f_valid_ea_in_inode/script | 2 + tests/f_write_ea_no_extra_isize/expect.1 | 29 + tests/f_write_ea_no_extra_isize/expect.2 | 7 + tests/f_write_ea_no_extra_isize/image.gz | Bin 0 -> 2516 bytes tests/f_write_ea_no_extra_isize/name | 1 + tests/f_write_ea_toobig_extra_isize/expect.1 | 32 + tests/f_write_ea_toobig_extra_isize/expect.2 | 7 + tests/f_write_ea_toobig_extra_isize/image.gz | Bin 0 -> 2518 bytes tests/f_write_ea_toobig_extra_isize/name | 1 + tests/f_write_ea_toosmall_extra_isize/expect.1 | 32 + tests/f_write_ea_toosmall_extra_isize/expect.2 | 7 + tests/f_write_ea_toosmall_extra_isize/image.gz | Bin 0 -> 2517 bytes tests/f_write_ea_toosmall_extra_isize/name | 1 + tests/f_yes/expect | 45 + tests/f_yes/script | 27 + tests/f_yesall/expect | 62 + tests/f_yesall/image.gz | Bin 0 -> 2597 bytes tests/f_yesall/script | 27 + tests/f_yesthenall/expect | 52 + tests/f_yesthenall/script | 27 + tests/f_yesthenno/expect | 50 + tests/f_yesthenno/script | 27 + tests/f_zero_group/expect.1 | 23 + tests/f_zero_group/expect.2 | 7 + tests/f_zero_group/image.gz | Bin 0 -> 13319 bytes tests/f_zero_group/name | 1 + tests/f_zero_inode_size/expect.1 | 11 + tests/f_zero_inode_size/expect.2 | 7 + tests/f_zero_inode_size/image.gz | Bin 0 -> 10741 bytes tests/f_zero_inode_size/name | 1 + tests/f_zero_super/expect.1 | 23 + tests/f_zero_super/expect.2 | 7 + tests/f_zero_super/image.gz | Bin 0 -> 13262 bytes tests/f_zero_super/name | 1 + tests/f_zero_xattr/expect.1 | 7 + tests/f_zero_xattr/image.gz | Bin 0 -> 707 bytes tests/f_zero_xattr/name | 1 + tests/f_zero_xattr/script | 2 + tests/f_zeroed_ext_header/expect.1 | 22 + tests/f_zeroed_ext_header/expect.2 | 7 + tests/f_zeroed_ext_header/image.gz | Bin 0 -> 1447 bytes tests/f_zeroed_ext_header/name | 1 + tests/filter.sed | 29 + tests/i_bad_csum/expect | 11 + tests/i_bad_csum/image.gz | Bin 0 -> 2606 bytes tests/i_bad_csum/name | 1 + tests/i_bad_csum/script | 26 + tests/i_qcow/i_qcow.crc | 15 + tests/i_qcow/image1024.orig.bz2 | Bin 0 -> 322312 bytes tests/i_qcow/image2048.orig.bz2 | Bin 0 -> 321388 bytes tests/i_qcow/image4096.orig.bz2 | Bin 0 -> 312342 bytes tests/i_qcow/script | 59 + tests/j_corrupt_commit_csum/expect | 18 + tests/j_corrupt_commit_csum/image.gz | Bin 0 -> 2949 bytes tests/j_corrupt_commit_csum/name | 1 + tests/j_corrupt_commit_csum/script | 52 + tests/j_corrupt_commit_tid/expect | 17 + tests/j_corrupt_commit_tid/image.gz | Bin 0 -> 2953 bytes tests/j_corrupt_commit_tid/name | 1 + tests/j_corrupt_commit_tid/script | 52 + tests/j_corrupt_descr_csum/expect | 18 + tests/j_corrupt_descr_csum/image.gz | Bin 0 -> 2989 bytes tests/j_corrupt_descr_csum/name | 1 + tests/j_corrupt_descr_csum/script | 52 + tests/j_corrupt_descr_tid/expect | 17 + tests/j_corrupt_descr_tid/image.gz | Bin 0 -> 2999 bytes tests/j_corrupt_descr_tid/name | 1 + tests/j_corrupt_descr_tid/script | 52 + tests/j_corrupt_ext_jnl_sb_block/expect | 5 + tests/j_corrupt_ext_jnl_sb_block/image.tar.bz2 | Bin 0 -> 939 bytes tests/j_corrupt_ext_jnl_sb_block/name | 1 + tests/j_corrupt_ext_jnl_sb_block/script | 36 + tests/j_corrupt_ext_jnl_sb_csum/expect | 25 + tests/j_corrupt_ext_jnl_sb_csum/image.tar.bz2 | Bin 0 -> 929 bytes tests/j_corrupt_ext_jnl_sb_csum/name | 1 + tests/j_corrupt_ext_jnl_sb_csum/script | 42 + tests/j_corrupt_journal_block/expect | 20 + tests/j_corrupt_journal_block/image.gz | Bin 0 -> 2984 bytes tests/j_corrupt_journal_block/name | 1 + tests/j_corrupt_journal_block/script | 53 + tests/j_corrupt_revoke_block/expect | 17 + tests/j_corrupt_revoke_block/image.gz | Bin 0 -> 3038 bytes tests/j_corrupt_revoke_block/name | 1 + tests/j_corrupt_revoke_block/script | 52 + tests/j_corrupt_revoke_csum/expect | 17 + tests/j_corrupt_revoke_csum/image.gz | Bin 0 -> 3034 bytes tests/j_corrupt_revoke_csum/name | 1 + tests/j_corrupt_revoke_csum/script | 52 + tests/j_corrupt_revoke_rcount/expect.1 | 9 + tests/j_corrupt_revoke_rcount/expect.2 | 7 + tests/j_corrupt_revoke_rcount/image.gz | Bin 0 -> 8648 bytes tests/j_corrupt_revoke_rcount/name | 1 + tests/j_corrupt_sb_csum/expect | 21 + tests/j_corrupt_sb_csum/image.gz | Bin 0 -> 3030 bytes tests/j_corrupt_sb_csum/name | 1 + tests/j_corrupt_sb_csum/script | 52 + tests/j_corrupt_sb_magic/expect | 42 + tests/j_corrupt_sb_magic/image.gz | Bin 0 -> 3036 bytes tests/j_corrupt_sb_magic/name | 1 + tests/j_corrupt_sb_magic/script | 52 + tests/j_ext_dumpe2fs/expect | 54 + tests/j_ext_dumpe2fs/image.gz | Bin 0 -> 2963 bytes tests/j_ext_dumpe2fs/name | 1 + tests/j_ext_dumpe2fs/script | 40 + tests/j_ext_long_revoke_trans/expect | 91 + tests/j_ext_long_revoke_trans/name | 1 + tests/j_ext_long_revoke_trans/script | 77 + tests/j_ext_long_trans/expect | 104 + tests/j_ext_long_trans/name | 1 + tests/j_ext_long_trans/script | 74 + tests/j_long_revoke_trans/expect | 81 + tests/j_long_revoke_trans/name | 1 + tests/j_long_revoke_trans/script | 62 + tests/j_long_revoke_trans_mcsum_32bit/expect | 117 + tests/j_long_revoke_trans_mcsum_32bit/name | 1 + tests/j_long_revoke_trans_mcsum_32bit/script | 67 + tests/j_long_revoke_trans_mcsum_64bit/expect | 132 + tests/j_long_revoke_trans_mcsum_64bit/name | 1 + tests/j_long_revoke_trans_mcsum_64bit/script | 67 + tests/j_long_trans/expect | 107 + tests/j_long_trans/name | 1 + tests/j_long_trans/script | 59 + tests/j_long_trans_mcsum_32bit/expect | 146 + tests/j_long_trans_mcsum_32bit/name | 1 + tests/j_long_trans_mcsum_32bit/script | 63 + tests/j_long_trans_mcsum_64bit/expect | 145 + tests/j_long_trans_mcsum_64bit/name | 1 + tests/j_long_trans_mcsum_64bit/script | 63 + tests/j_recover_csum2_32bit/expect.1 | 16 + tests/j_recover_csum2_32bit/expect.2 | 7 + tests/j_recover_csum2_32bit/image.bz2 | Bin 0 -> 3371 bytes tests/j_recover_csum2_32bit/name | 1 + tests/j_recover_csum2_32bit/script | 31 + tests/j_recover_csum2_64bit/expect.1 | 16 + tests/j_recover_csum2_64bit/expect.2 | 7 + tests/j_recover_csum2_64bit/image.bz2 | Bin 0 -> 3486 bytes tests/j_recover_csum2_64bit/name | 1 + tests/j_recover_csum2_64bit/script | 31 + tests/j_short_revoke_trans/expect | 32 + tests/j_short_revoke_trans/name | 1 + tests/j_short_revoke_trans/script | 64 + tests/j_short_revoke_trans_mcsum_64bit/expect | 34 + tests/j_short_revoke_trans_mcsum_64bit/name | 1 + tests/j_short_revoke_trans_mcsum_64bit/script | 68 + tests/j_short_trans/expect | 38 + tests/j_short_trans/name | 1 + tests/j_short_trans/script | 61 + tests/j_short_trans_64bit/expect | 40 + tests/j_short_trans_64bit/name | 1 + tests/j_short_trans_64bit/script | 65 + tests/j_short_trans_mcsum_64bit/expect | 40 + tests/j_short_trans_mcsum_64bit/name | 1 + tests/j_short_trans_mcsum_64bit/script | 65 + tests/j_short_trans_old_csum/expect | 40 + tests/j_short_trans_old_csum/name | 1 + tests/j_short_trans_old_csum/script | 65 + tests/j_short_trans_open_recover/expect | 43 + tests/j_short_trans_open_recover/name | 1 + tests/j_short_trans_open_recover/script | 69 + tests/j_short_trans_recover/expect | 40 + tests/j_short_trans_recover/name | 1 + tests/j_short_trans_recover/script | 70 + tests/j_short_trans_recover_mcsum_64bit/expect | 42 + tests/j_short_trans_recover_mcsum_64bit/name | 1 + tests/j_short_trans_recover_mcsum_64bit/script | 74 + tests/j_short_uncommitted_trans/expect | 26 + tests/j_short_uncommitted_trans/name | 1 + tests/j_short_uncommitted_trans/script | 61 + tests/j_short_uncommitted_trans_mcsum_64bit/expect | 28 + tests/j_short_uncommitted_trans_mcsum_64bit/name | 1 + tests/j_short_uncommitted_trans_mcsum_64bit/script | 65 + tests/m_64bit_flexbg/expect.1 | 56 + tests/m_64bit_flexbg/script | 4 + tests/m_bigjournal/expect.1 | 573 + tests/m_bigjournal/script | 12 + tests/m_dasd_bs/expect.1 | 65 + tests/m_dasd_bs/script | 6 + tests/m_desc_size_128/expect.1 | 838 + tests/m_desc_size_128/script | 7 + tests/m_devdir/script | 33 + tests/m_error_behavior/expect | 24 + tests/m_error_behavior/script | 110 + tests/m_extent_journal/expect.1 | 113 + tests/m_extent_journal/script | 7 + tests/m_hugefile/expect | 36 + tests/m_hugefile/name | 1 + tests/m_hugefile/script | 71 + tests/m_hugefile_slack/expect | 18 + tests/m_hugefile_slack/name | 1 + tests/m_hugefile_slack/script | 53 + tests/m_large_file/expect.1 | 56 + tests/m_large_file/script | 7 + tests/m_mcsum_extjournal/expect | 5 + tests/m_mcsum_extjournal/name | 1 + tests/m_mcsum_extjournal/script | 29 + tests/m_meta_bg/expect.1 | 835 + tests/m_meta_bg/script | 7 + tests/m_minrootdir/expect | 216 + tests/m_minrootdir/output.sed | 5 + tests/m_minrootdir/script | 81 + tests/m_mkfs_overhead/expect | 1 + tests/m_mkfs_overhead/script | 31 + tests/m_mmp/expect.1 | 68 + tests/m_mmp/script | 18 + tests/m_mmp_bad_csum/expect | 9 + tests/m_mmp_bad_csum/image.gz | Bin 0 -> 2594 bytes tests/m_mmp_bad_csum/name | 1 + tests/m_mmp_bad_csum/script | 30 + tests/m_mmp_bad_magic/.log | 9 + tests/m_mmp_bad_magic/expect | 9 + tests/m_mmp_bad_magic/image.gz | Bin 0 -> 2597 bytes tests/m_mmp_bad_magic/name | 1 + tests/m_mmp_bad_magic/script | 30 + tests/m_no_opt/expect.1 | 102 + tests/m_no_opt/script | 7 + tests/m_offset/script | 34 + tests/m_quota/expect.1 | 160 + tests/m_quota/script | 11 + tests/m_raid_opt/expect.1 | 838 + tests/m_raid_opt/script | 7 + tests/m_root_owner/expect.1 | 54 + tests/m_root_owner/script | 4 + tests/m_rootdir/expect | 117 + tests/m_rootdir/output.sed | 5 + tests/m_rootdir/script | 71 + tests/m_std/expect.1 | 105 + tests/m_std/script | 6 + tests/m_uninit/expect.1 | 155 + tests/m_uninit/script | 7 + tests/mke2fs.conf.in | 49 + tests/progs/Makefile.in | 80 + tests/progs/crcsum.c | 68 + tests/progs/hold_inode.c | 48 + tests/progs/random_exercise.c | 171 + tests/progs/test_data/bma.setup | 1 + tests/progs/test_data/expect.brel | 41 + tests/progs/test_data/expect.icount | 193 + tests/progs/test_data/expect.irel | 62 + tests/progs/test_data/ima.setup | 1 + tests/progs/test_data/normal.setup | 1 + tests/progs/test_data/opt.setup | 1 + tests/progs/test_data/test.brel | 47 + tests/progs/test_data/test.icount | 136 + tests/progs/test_data/test.irel | 69 + tests/progs/test_icount.c | 363 + tests/progs/test_icount.h | 10 + tests/progs/test_icount_cmds.ct | 37 + tests/progs/test_rel.c | 764 + tests/progs/test_rel.h | 35 + tests/progs/test_rel_cmds.ct | 82 + tests/r_1024_small_bg/script | 31 + tests/r_32to64bit/expect | 94 + tests/r_32to64bit/name | 1 + tests/r_32to64bit/script | 74 + tests/r_32to64bit_expand_full/expect | 139 + tests/r_32to64bit_expand_full/name | 1 + tests/r_32to64bit_expand_full/script | 83 + tests/r_32to64bit_meta/expect | 80 + tests/r_32to64bit_meta/name | 1 + tests/r_32to64bit_meta/script | 74 + tests/r_32to64bit_move_itable/expect | 107 + tests/r_32to64bit_move_itable/name | 1 + tests/r_32to64bit_move_itable/script | 74 + tests/r_64bit_big_expand/script | 36 + tests/r_64to32bit/expect | 98 + tests/r_64to32bit/name | 1 + tests/r_64to32bit/script | 76 + tests/r_64to32bit_meta/expect | 80 + tests/r_64to32bit_meta/name | 1 + tests/r_64to32bit_meta/script | 76 + tests/r_bigalloc_big_expand/script | 37 + tests/r_expand_full/expect | 375 + tests/r_expand_full/name | 1 + tests/r_expand_full/script | 79 + tests/r_ext4_big_expand/script | 36 + tests/r_ext4_small_bg/script | 31 + tests/r_fixup_lastbg/expect | 39 + tests/r_fixup_lastbg/script | 37 + tests/r_fixup_lastbg_big/expect | 45 + tests/r_fixup_lastbg_big/script | 37 + tests/r_inline_xattr/expect | 14 + tests/r_inline_xattr/image.gz | Bin 0 -> 18907 bytes tests/r_inline_xattr/name | 1 + tests/r_inline_xattr/script | 53 + tests/r_meta_bg_shrink/script | 34 + tests/r_min_itable/expect | 15 + tests/r_min_itable/image.gz | Bin 0 -> 3597 bytes tests/r_min_itable/name | 1 + tests/r_min_itable/script | 45 + tests/r_move_itable/expect | 2612 ++++ tests/r_move_itable/name | 1 + tests/r_move_itable/script | 116 + tests/r_resize_inode/expect | 1639 ++ tests/r_resize_inode/name | 2 + tests/r_resize_inode/script | 101 + tests/run_e2fsck | 112 + tests/run_mke2fs | 27 + tests/scripts/mkdup | 49 + tests/scripts/resize_test | 173 + tests/t_change_uuid/expect | 7 + tests/t_change_uuid/script | 34 + tests/t_change_uuid_mcsum/expect | 7 + tests/t_change_uuid_mcsum/script | 34 + tests/t_change_uuid_mcsum_mounted/expect | 7 + tests/t_change_uuid_mcsum_mounted/script | 34 + tests/t_change_uuid_mcsum_seed_mounted/expect | 21 + tests/t_change_uuid_mcsum_seed_mounted/script | 52 + tests/t_change_uuid_mounted/expect | 7 + tests/t_change_uuid_mounted/script | 34 + tests/t_dangerous/expect | 97 + tests/t_dangerous/name | 1 + tests/t_dangerous/script | 134 + tests/t_disable_changed_csum_seed/expect | 17 + tests/t_disable_changed_csum_seed/script | 47 + tests/t_disable_changed_csum_seed_mounted/expect | 19 + tests/t_disable_changed_csum_seed_mounted/script | 47 + tests/t_disable_csum_seed/expect | 14 + tests/t_disable_csum_seed/script | 43 + tests/t_disable_mcsum/expect | 45 + tests/t_disable_mcsum/name | 1 + tests/t_disable_mcsum/script | 67 + tests/t_disable_mcsum_noinitbg/expect | 68 + tests/t_disable_mcsum_noinitbg/name | 1 + tests/t_disable_mcsum_noinitbg/script | 67 + tests/t_disable_mcsum_yesinitbg/expect | 45 + tests/t_disable_mcsum_yesinitbg/name | 1 + tests/t_disable_mcsum_yesinitbg/script | 67 + tests/t_disable_meta_csum_and_seed/expect | 14 + tests/t_disable_meta_csum_and_seed/script | 44 + tests/t_enable_csum_seed/expect | 12 + tests/t_enable_csum_seed/script | 38 + tests/t_enable_mcsum/expect | 78 + tests/t_enable_mcsum/name | 1 + tests/t_enable_mcsum/script | 70 + tests/t_enable_mcsum_ext3/expect | 74 + tests/t_enable_mcsum_ext3/name | 1 + tests/t_enable_mcsum_ext3/script | 70 + tests/t_enable_mcsum_initbg/expect | 98 + tests/t_enable_mcsum_initbg/name | 1 + tests/t_enable_mcsum_initbg/script | 70 + tests/t_ext_jnl_fail/expect | 6 + tests/t_ext_jnl_fail/name | 1 + tests/t_ext_jnl_fail/script | 30 + tests/t_ext_jnl_rm/script | 26 + tests/t_format_csum_seed/expect | 10 + tests/t_format_csum_seed/script | 34 + tests/t_iexpand_full/expect | 38 + tests/t_iexpand_full/name | 1 + tests/t_iexpand_full/script | 85 + tests/t_iexpand_mcsum/expect | 54 + tests/t_iexpand_mcsum/name | 1 + tests/t_iexpand_mcsum/script | 85 + tests/t_mmp_1on/name | 1 + tests/t_mmp_1on/script | 40 + tests/t_mmp_2off/name | 1 + tests/t_mmp_2off/script | 40 + tests/t_quota_1on/name | 1 + tests/t_quota_1on/script | 42 + tests/t_quota_2off/name | 1 + tests/t_quota_2off/script | 35 + tests/t_replay_and_set/expect | 36 + tests/t_replay_and_set/name | 1 + tests/t_replay_and_set/script | 60 + tests/t_uninit_bg_rm/expect | 21 + tests/t_uninit_bg_rm/script | 56 + tests/test_config | 43 + tests/test_one.in | 70 + tests/test_post | 17 + tests/test_script.in | 52 + tests/u_compound_bad_rollback/script | 62 + tests/u_compound_rollback/script | 62 + tests/u_corrupt_blk_csum/script | 38 + tests/u_corrupt_blk_csum_force/script | 38 + tests/u_corrupt_hdr_csum/script | 37 + tests/u_corrupt_key_csum/script | 37 + tests/u_debugfs_opt/script | 32 + tests/u_dryrun/script | 32 + tests/u_e2fsck_opt/script | 32 + tests/u_errorout/script | 49 + tests/u_force/script | 40 + tests/u_force_dryrun/script | 38 + tests/u_incomplete/script | 38 + tests/u_mke2fs/script | 34 + tests/u_mke2fs_opt/script | 32 + tests/u_mke2fs_opt_oddsize/script | 31 + tests/u_mke2fs_opt_offset/script | 104 + tests/u_not_undo/script | 28 + tests/u_offset/script | 138 + tests/u_onefile_bad/script | 115 + tests/u_resize2fs_opt/script | 32 + tests/u_revert_64bitmcsum_onefile/script | 112 + tests/u_revert_all_onefile/script | 100 + tests/u_revert_upgrade_to_64bitmcsum/script | 136 + tests/u_tune2fs/script | 34 + tests/u_tune2fs_opt/script | 32 + tests/u_undo_undo/script | 54 + tests/u_wrong_fs/script | 36 + util/Makefile.in | 68 + util/all.exclude | 15 + util/android-README.version.in | 3 + util/android_config.h | 52 + util/android_types.h | 41 + util/copy_sparse.c | 228 + util/gcc-wall-cleanup | 23 + util/gen-android-files | 111 + util/gen-sample-fs | 40 + util/gen-tarball.in | 56 + util/get-ver | 4 + util/install-symlink.in | 89 + util/libecho.c | 78 + util/static-analysis-cleanup | 20 + util/subset.exclude | 36 + util/subst.c | 463 + util/subst.conf.in | 20 + util/symlinks.c | 391 + version.h | 11 + wordwrap.pl | 29 + 1928 files changed, 464881 insertions(+) create mode 100644 .gitignore create mode 100644 .missing-copyright create mode 100644 .release-checklist create mode 100644 ABOUT-NLS create mode 100644 Android.mk create mode 100644 CleanSpec.mk create mode 100644 INSTALL create mode 100644 INSTALL.elfbin create mode 100644 MCONFIG.in create mode 100644 Makefile.in create mode 100644 NOTICE create mode 100644 README create mode 100644 RELEASE-NOTES create mode 100644 SHLIBS create mode 100644 SUBMITTING-PATCHES create mode 100644 acinclude.m4 create mode 100644 aclocal.m4 create mode 100755 config/config.guess create mode 100755 config/config.rpath create mode 100755 config/config.sub create mode 100755 config/install-sh create mode 100755 config/mkinstalldirs create mode 100755 config/parse-types.sh create mode 100755 configure create mode 100644 configure.ac create mode 100644 contrib/Android.mk create mode 100644 contrib/add_ext4_encrypt.c create mode 100644 contrib/build-rpm create mode 100644 contrib/dconf create mode 100755 contrib/dir2fs create mode 100755 contrib/e2croncheck create mode 100644 contrib/fallocate.c create mode 100644 contrib/fsstress.c create mode 100755 contrib/jbd2-resync.sh create mode 100644 contrib/make-sparse.c create mode 100755 contrib/populate-extfs.sh create mode 100755 contrib/python-uuid/setup.py create mode 100755 contrib/python-uuid/test.py create mode 100644 contrib/python-uuid/uuid.c create mode 100644 contrib/spd_readdir.c create mode 100644 debian/attic/comerrg-dev.info create mode 100644 debian/attic/comerrg-dev.menu create mode 100644 debian/attic/e2fslibsg-dev.info create mode 100644 debian/attic/e2fslibsg-dev.menu create mode 100644 debian/attic/libs/comerr2g.files create mode 100644 debian/attic/libs/control create mode 100644 debian/attic/libs/e2fslibsg.files create mode 100644 debian/attic/libs/rules create mode 100644 debian/attic/libs/ss2g.files create mode 100644 debian/changelog create mode 100644 debian/comerr-dev.doc-base create mode 100644 debian/comerr-dev.examples create mode 100644 debian/comerr-dev.files.in create mode 100644 debian/compat create mode 100644 debian/control.in create mode 100644 debian/copyright create mode 100644 debian/e2fsck-static.copyright create mode 100644 debian/e2fsck-static.files create mode 100644 debian/e2fsck-static.preinst create mode 100644 debian/e2fslibs-dev.doc-base create mode 100644 debian/e2fslibs-dev.files.in create mode 100644 debian/e2fslibs.files.in create mode 100644 debian/e2fslibs.symbols create mode 100644 debian/e2fsprogs-udeb.shlibs.local create mode 100644 debian/e2fsprogs.docs create mode 100644 debian/e2fsprogs.files create mode 100644 debian/e2fsprogs.postinst create mode 100644 debian/e2fsprogs.preinst create mode 100644 debian/e2fsprogs.shlibs.local.in create mode 100644 debian/fuse2fs.files create mode 100644 debian/libblkid-dev.files.in create mode 100644 debian/libblkid.copyright create mode 100644 debian/libblkid1.files.in create mode 100644 debian/libblkid1.symbols create mode 100644 debian/libcomerr2.copyright create mode 100644 debian/libcomerr2.files.in create mode 100644 debian/libcomerr2.symbols create mode 100644 debian/libss2.copyright create mode 100644 debian/libss2.files.in create mode 100644 debian/libss2.symbols create mode 100644 debian/libuuid1.copyright create mode 100644 debian/libuuid1.files.in create mode 100644 debian/libuuid1.postinst create mode 100644 debian/libuuid1.postrm create mode 100644 debian/libuuid1.symbols create mode 100755 debian/rules create mode 100755 debian/scripts/test-backtrace create mode 100644 debian/shlibs.local create mode 100644 debian/source.lintian-overrides create mode 100644 debian/source/format create mode 100644 debian/ss-dev.examples create mode 100644 debian/ss-dev.files.in create mode 100644 debian/upstream/signing-key.asc create mode 100644 debian/uuid-dev.README.Debian create mode 100644 debian/uuid-dev.copyright create mode 100644 debian/uuid-dev.files.in create mode 100644 debian/uuid-runtime.copyright create mode 100644 debian/uuid-runtime.files create mode 100644 debian/uuid-runtime.lintian-overrides create mode 100644 debian/uuid-runtime.postinst create mode 100644 debian/uuid-runtime.postrm create mode 100644 debian/uuid-runtime.prerm create mode 100644 debian/uuid-runtime.shlibs.local create mode 100644 debian/watch create mode 100644 debugfs/Android.mk create mode 100644 debugfs/Makefile.in create mode 100644 debugfs/debug_cmds.ct create mode 100644 debugfs/debugfs.8.in create mode 100644 debugfs/debugfs.c create mode 100644 debugfs/debugfs.h create mode 100644 debugfs/do_journal.c create mode 100644 debugfs/dump.c create mode 100644 debugfs/extent_cmds.ct create mode 100644 debugfs/extent_inode.c create mode 100644 debugfs/filefrag.c create mode 100644 debugfs/htree.c create mode 100644 debugfs/icheck.c create mode 100644 debugfs/journal.c create mode 100644 debugfs/journal.h create mode 100644 debugfs/logdump.c create mode 100644 debugfs/ls.c create mode 100644 debugfs/lsdel.c create mode 100644 debugfs/ncheck.c create mode 100644 debugfs/quota.c create mode 100644 debugfs/ro_debug_cmds.ct create mode 100644 debugfs/set_fields.c create mode 100644 debugfs/unused.c create mode 100644 debugfs/util.c create mode 100644 debugfs/xattrs.c create mode 100644 debugfs/zap.c create mode 100644 depfix.sed create mode 100644 doc/Makefile.in create mode 100644 doc/libblkid.txt create mode 100644 doc/libext2fs.texinfo create mode 100644 doc/texinfo.tex create mode 100644 e2fsck/Android.mk create mode 100644 e2fsck/CHANGES create mode 100644 e2fsck/Makefile.in create mode 100644 e2fsck/badblocks.c create mode 100644 e2fsck/dirinfo.c create mode 100644 e2fsck/dx_dirinfo.c create mode 100644 e2fsck/e2fsck.8.in create mode 100644 e2fsck/e2fsck.c create mode 100644 e2fsck/e2fsck.conf.5.in create mode 100644 e2fsck/e2fsck.h create mode 100644 e2fsck/ea_refcount.c create mode 100644 e2fsck/ehandler.c create mode 100644 e2fsck/emptydir.c create mode 100644 e2fsck/extend.c create mode 100644 e2fsck/extents.c create mode 100644 e2fsck/flushb.c create mode 100644 e2fsck/iscan.c create mode 100644 e2fsck/jfs_user.h create mode 100644 e2fsck/journal.c create mode 100644 e2fsck/logfile.c create mode 100644 e2fsck/message.c create mode 100644 e2fsck/mtrace.awk create mode 100644 e2fsck/mtrace.c create mode 100644 e2fsck/mtrace.h create mode 100644 e2fsck/pass1.c create mode 100644 e2fsck/pass1b.c create mode 100644 e2fsck/pass2.c create mode 100644 e2fsck/pass3.c create mode 100644 e2fsck/pass4.c create mode 100644 e2fsck/pass5.c create mode 100644 e2fsck/problem.c create mode 100644 e2fsck/problem.h create mode 100644 e2fsck/problemP.h create mode 100644 e2fsck/quota.c create mode 100644 e2fsck/readahead.c create mode 100644 e2fsck/recovery.c create mode 100644 e2fsck/region.c create mode 100644 e2fsck/rehash.c create mode 100644 e2fsck/revoke.c create mode 100644 e2fsck/scantest.c create mode 100644 e2fsck/sigcatcher.c create mode 100644 e2fsck/super.c create mode 100644 e2fsck/unix.c create mode 100644 e2fsck/util.c create mode 100644 e2fsprogs.lsm create mode 100644 e2fsprogs.spec create mode 100644 e2fsprogs.spec.in create mode 100644 ext2ed/COPYRIGHT create mode 100644 ext2ed/Makefile.in create mode 100644 ext2ed/README create mode 100644 ext2ed/blockbitmap_com.c create mode 100644 ext2ed/dir_com.c create mode 100644 ext2ed/disk.c create mode 100644 ext2ed/doc/ext2ed-design.sgml create mode 100644 ext2ed/doc/ext2fs-overview.sgml create mode 100644 ext2ed/doc/user-guide.sgml create mode 100644 ext2ed/ext2.descriptors create mode 100644 ext2ed/ext2_com.c create mode 100644 ext2ed/ext2ed.8.in create mode 100644 ext2ed/ext2ed.conf.in create mode 100644 ext2ed/ext2ed.h create mode 100644 ext2ed/file_com.c create mode 100644 ext2ed/general_com.c create mode 100644 ext2ed/group_com.c create mode 100644 ext2ed/init.c create mode 100644 ext2ed/inode_com.c create mode 100644 ext2ed/inodebitmap_com.c create mode 100644 ext2ed/main.c create mode 100644 ext2ed/super_com.c create mode 100644 ext2ed/win.c create mode 100644 include/nonunix/asm/types.h create mode 100644 include/nonunix/config.h create mode 100644 include/nonunix/dirent.h create mode 100644 include/nonunix/getopt.h create mode 100644 include/nonunix/grp.h create mode 100644 include/nonunix/linux/types.h create mode 100644 include/nonunix/pwd.h create mode 100644 include/nonunix/sys/file.h create mode 100644 include/nonunix/sys/ioctl.h create mode 100644 include/nonunix/sys/param.h create mode 100644 include/nonunix/sys/resource.h create mode 100644 include/nonunix/sys/socket.h create mode 100644 include/nonunix/sys/time.h create mode 100644 include/nonunix/sys/wait.h create mode 100644 include/nonunix/termios.h create mode 100644 include/nonunix/unistd.h create mode 100644 include/nonunix/utime.h create mode 100644 install-utils/compile_manpages create mode 100644 install-utils/convfstab create mode 100644 install-utils/remove_preformat_manpages create mode 100644 intl/Makefile.in create mode 100644 intl/VERSION create mode 100644 intl/bindtextdom.c create mode 100644 intl/config.charset create mode 100644 intl/dcgettext.c create mode 100644 intl/dcigettext.c create mode 100644 intl/dcngettext.c create mode 100644 intl/dgettext.c create mode 100644 intl/dngettext.c create mode 100644 intl/eval-plural.h create mode 100644 intl/explodename.c create mode 100644 intl/finddomain.c create mode 100644 intl/gettext.c create mode 100644 intl/gettextP.h create mode 100644 intl/gmo.h create mode 100644 intl/hash-string.h create mode 100644 intl/intl-compat.c create mode 100644 intl/l10nflist.c create mode 100644 intl/libgettext.h create mode 100644 intl/libgnuintl.h.in create mode 100644 intl/loadinfo.h create mode 100644 intl/loadmsgcat.c create mode 100644 intl/localcharset.c create mode 100644 intl/localcharset.h create mode 100644 intl/locale.alias create mode 100644 intl/localealias.c create mode 100644 intl/localename.c create mode 100644 intl/log.c create mode 100644 intl/ngettext.c create mode 100644 intl/os2compat.c create mode 100644 intl/os2compat.h create mode 100644 intl/osdep.c create mode 100644 intl/plural-exp.c create mode 100644 intl/plural-exp.h create mode 100644 intl/plural.c create mode 100644 intl/plural.y create mode 100644 intl/printf-args.c create mode 100644 intl/printf-args.h create mode 100644 intl/printf-parse.c create mode 100644 intl/printf-parse.h create mode 100644 intl/printf.c create mode 100644 intl/ref-add.sin create mode 100644 intl/ref-del.sin create mode 100644 intl/relocatable.c create mode 100644 intl/relocatable.h create mode 100644 intl/textdomain.c create mode 100644 intl/vasnprintf.c create mode 100644 intl/vasnprintf.h create mode 100644 intl/vasnwprintf.h create mode 100644 intl/wprintf-parse.h create mode 100644 intl/xsize.h create mode 100644 lib/Android.mk create mode 100644 lib/Makefile.bsd-lib create mode 100644 lib/Makefile.checker create mode 100644 lib/Makefile.darwin-lib create mode 100644 lib/Makefile.elf-lib create mode 100644 lib/Makefile.library create mode 100644 lib/Makefile.profile create mode 100644 lib/Makefile.solaris-lib create mode 100644 lib/blkid/Android.mk create mode 100644 lib/blkid/Makefile.in create mode 100644 lib/blkid/blkid.h.in create mode 100644 lib/blkid/blkid.pc.in create mode 100644 lib/blkid/blkidP.h create mode 100644 lib/blkid/blkid_types.h.in create mode 100644 lib/blkid/cache.c create mode 100644 lib/blkid/dev.c create mode 100644 lib/blkid/devname.c create mode 100644 lib/blkid/devno.c create mode 100644 lib/blkid/getsize.c create mode 100644 lib/blkid/libblkid.3.in create mode 100644 lib/blkid/list.h create mode 100644 lib/blkid/llseek.c create mode 100644 lib/blkid/probe.c create mode 100644 lib/blkid/probe.h create mode 100644 lib/blkid/read.c create mode 100644 lib/blkid/resolve.c create mode 100644 lib/blkid/save.c create mode 100644 lib/blkid/tag.c create mode 100644 lib/blkid/test_probe.in create mode 100644 lib/blkid/tests/cramfs.img.bz2 create mode 100644 lib/blkid/tests/cramfs.results create mode 100644 lib/blkid/tests/ext2.img.bz2 create mode 100644 lib/blkid/tests/ext2.results create mode 100644 lib/blkid/tests/ext3.img.bz2 create mode 100644 lib/blkid/tests/ext3.results create mode 100644 lib/blkid/tests/fat.img.bz2 create mode 100644 lib/blkid/tests/fat.results create mode 100644 lib/blkid/tests/fat32_label_64MB.img.bz2 create mode 100644 lib/blkid/tests/fat32_label_64MB.results create mode 100644 lib/blkid/tests/iso.img.bz2 create mode 100644 lib/blkid/tests/iso.results create mode 100644 lib/blkid/tests/jbd.img.bz2 create mode 100644 lib/blkid/tests/jbd.results create mode 100644 lib/blkid/tests/jfs.img.bz2 create mode 100644 lib/blkid/tests/jfs.results create mode 100644 lib/blkid/tests/minix.img.bz2 create mode 100644 lib/blkid/tests/minix.results create mode 100644 lib/blkid/tests/ocfs2.img.bz2 create mode 100644 lib/blkid/tests/ocfs2.results create mode 100644 lib/blkid/tests/reiser3.img.bz2 create mode 100644 lib/blkid/tests/reiser3.results create mode 100644 lib/blkid/tests/reiser4.img.bz2 create mode 100644 lib/blkid/tests/reiser4.results create mode 100644 lib/blkid/tests/romfs.img.bz2 create mode 100644 lib/blkid/tests/romfs.results create mode 100644 lib/blkid/tests/small-fat32.img.bz2 create mode 100644 lib/blkid/tests/small-fat32.results create mode 100644 lib/blkid/tests/swap0.img.bz2 create mode 100644 lib/blkid/tests/swap0.results create mode 100644 lib/blkid/tests/swap1.img.bz2 create mode 100644 lib/blkid/tests/swap1.results create mode 100644 lib/blkid/tests/udf.img.bz2 create mode 100644 lib/blkid/tests/udf.results create mode 100644 lib/blkid/tests/xfs.img.bz2 create mode 100644 lib/blkid/tests/xfs.results create mode 100644 lib/blkid/tests/zfs.img.bz2 create mode 100644 lib/blkid/tests/zfs.results create mode 100644 lib/blkid/tst_types.c create mode 100644 lib/blkid/version.c create mode 100644 lib/config.h.in create mode 100644 lib/dirpaths.h.in create mode 100644 lib/e2p/Android.mk create mode 100644 lib/e2p/Makefile.in create mode 100644 lib/e2p/crypto_mode.c create mode 100644 lib/e2p/e2p.h create mode 100644 lib/e2p/e2p.pc.in create mode 100644 lib/e2p/feature.c create mode 100644 lib/e2p/fgetflags.c create mode 100644 lib/e2p/fgetproject.c create mode 100644 lib/e2p/fgetversion.c create mode 100644 lib/e2p/fsetflags.c create mode 100644 lib/e2p/fsetproject.c create mode 100644 lib/e2p/fsetversion.c create mode 100644 lib/e2p/getflags.c create mode 100644 lib/e2p/getversion.c create mode 100644 lib/e2p/hashstr.c create mode 100644 lib/e2p/iod.c create mode 100644 lib/e2p/ls.c create mode 100644 lib/e2p/mntopts.c create mode 100644 lib/e2p/ostype.c create mode 100644 lib/e2p/parse_num.c create mode 100644 lib/e2p/pe.c create mode 100644 lib/e2p/percent.c create mode 100644 lib/e2p/pf.c create mode 100644 lib/e2p/project.h create mode 100644 lib/e2p/ps.c create mode 100644 lib/e2p/setflags.c create mode 100644 lib/e2p/setversion.c create mode 100644 lib/e2p/uuid.c create mode 100644 lib/et/Android.mk create mode 100644 lib/et/Makefile.in create mode 100644 lib/et/com_err.3 create mode 100644 lib/et/com_err.c create mode 100644 lib/et/com_err.h create mode 100644 lib/et/com_err.pc.in create mode 100644 lib/et/com_err.texinfo create mode 100644 lib/et/com_right.c create mode 100644 lib/et/compile_et.1 create mode 100644 lib/et/compile_et.sh.in create mode 100644 lib/et/error_message.c create mode 100644 lib/et/error_table.h create mode 100644 lib/et/et_c.awk create mode 100644 lib/et/et_h.awk create mode 100644 lib/et/et_name.c create mode 100644 lib/et/init_et.c create mode 100644 lib/et/internal.h create mode 100644 lib/et/test_cases/continuation.c create mode 100644 lib/et/test_cases/continuation.et create mode 100644 lib/et/test_cases/continuation.h create mode 100644 lib/et/test_cases/heimdal.c create mode 100644 lib/et/test_cases/heimdal.et create mode 100644 lib/et/test_cases/heimdal.h create mode 100644 lib/et/test_cases/heimdal2.c create mode 100644 lib/et/test_cases/heimdal2.et create mode 100644 lib/et/test_cases/heimdal2.h create mode 100644 lib/et/test_cases/heimdal3.c create mode 100644 lib/et/test_cases/heimdal3.et create mode 100644 lib/et/test_cases/heimdal3.h create mode 100644 lib/et/test_cases/imap_err.c create mode 100644 lib/et/test_cases/imap_err.et create mode 100644 lib/et/test_cases/imap_err.h create mode 100644 lib/et/test_cases/simple.c create mode 100644 lib/et/test_cases/simple.et create mode 100644 lib/et/test_cases/simple.h create mode 100644 lib/et/texinfo.tex create mode 100644 lib/et/vfprintf.c create mode 100644 lib/ext2fs/Android.mk create mode 100644 lib/ext2fs/Makefile.in create mode 100644 lib/ext2fs/alloc.c create mode 100644 lib/ext2fs/alloc_sb.c create mode 100644 lib/ext2fs/alloc_stats.c create mode 100644 lib/ext2fs/alloc_tables.c create mode 100644 lib/ext2fs/atexit.c create mode 100644 lib/ext2fs/badblocks.c create mode 100644 lib/ext2fs/bb_compat.c create mode 100644 lib/ext2fs/bb_inode.c create mode 100644 lib/ext2fs/bitmaps.c create mode 100644 lib/ext2fs/bitops.c create mode 100644 lib/ext2fs/bitops.h create mode 100644 lib/ext2fs/blkmap64_ba.c create mode 100644 lib/ext2fs/blkmap64_rb.c create mode 100644 lib/ext2fs/blknum.c create mode 100644 lib/ext2fs/block.c create mode 100644 lib/ext2fs/bmap.c create mode 100644 lib/ext2fs/bmap64.h create mode 100644 lib/ext2fs/bmove.c create mode 100644 lib/ext2fs/brel.h create mode 100644 lib/ext2fs/brel_ma.c create mode 100644 lib/ext2fs/check_desc.c create mode 100644 lib/ext2fs/closefs.c create mode 100644 lib/ext2fs/crc16.c create mode 100644 lib/ext2fs/crc16.h create mode 100644 lib/ext2fs/crc32c.c create mode 100644 lib/ext2fs/crc32c_defs.h create mode 100644 lib/ext2fs/csum.c create mode 100644 lib/ext2fs/dblist.c create mode 100644 lib/ext2fs/dblist_dir.c create mode 100644 lib/ext2fs/digest_encode.c create mode 100644 lib/ext2fs/dir_iterate.c create mode 100644 lib/ext2fs/dirblock.c create mode 100644 lib/ext2fs/dirhash.c create mode 100644 lib/ext2fs/dosio.c create mode 100644 lib/ext2fs/dosio.h create mode 100644 lib/ext2fs/dupfs.c create mode 100644 lib/ext2fs/e2image.h create mode 100644 lib/ext2fs/expanddir.c create mode 100644 lib/ext2fs/ext2_err.et.in create mode 100644 lib/ext2fs/ext2_ext_attr.h create mode 100644 lib/ext2fs/ext2_fs.h create mode 100644 lib/ext2fs/ext2_io.h create mode 100644 lib/ext2fs/ext2_types.h.in create mode 100644 lib/ext2fs/ext2fs.h create mode 100644 lib/ext2fs/ext2fs.pc.in create mode 100644 lib/ext2fs/ext2fsP.h create mode 100644 lib/ext2fs/ext3_extents.h create mode 100644 lib/ext2fs/ext4_acl.h create mode 100644 lib/ext2fs/ext_attr.c create mode 100644 lib/ext2fs/extent.c create mode 100644 lib/ext2fs/fallocate.c create mode 100644 lib/ext2fs/fiemap.h create mode 100644 lib/ext2fs/fileio.c create mode 100644 lib/ext2fs/finddev.c create mode 100644 lib/ext2fs/flushb.c create mode 100644 lib/ext2fs/freefs.c create mode 100644 lib/ext2fs/gen_bitmap.c create mode 100644 lib/ext2fs/gen_bitmap64.c create mode 100644 lib/ext2fs/gen_crc32ctable.c create mode 100644 lib/ext2fs/get_num_dirs.c create mode 100644 lib/ext2fs/get_pathname.c create mode 100644 lib/ext2fs/getsectsize.c create mode 100644 lib/ext2fs/getsize.c create mode 100644 lib/ext2fs/i_block.c create mode 100644 lib/ext2fs/icount.c create mode 100644 lib/ext2fs/imager.c create mode 100644 lib/ext2fs/ind_block.c create mode 100644 lib/ext2fs/initialize.c create mode 100644 lib/ext2fs/inline.c create mode 100644 lib/ext2fs/inline_data.c create mode 100644 lib/ext2fs/inode.c create mode 100644 lib/ext2fs/inode_io.c create mode 100644 lib/ext2fs/io_manager.c create mode 100644 lib/ext2fs/irel.h create mode 100644 lib/ext2fs/irel_ma.c create mode 100644 lib/ext2fs/ismounted.c create mode 100644 lib/ext2fs/jfs_compat.h create mode 100644 lib/ext2fs/jfs_dat.h create mode 100644 lib/ext2fs/kernel-jbd.h create mode 100644 lib/ext2fs/kernel-list.h create mode 100644 lib/ext2fs/link.c create mode 100644 lib/ext2fs/llseek.c create mode 100644 lib/ext2fs/lookup.c create mode 100644 lib/ext2fs/mkdir.c create mode 100644 lib/ext2fs/mkjournal.c create mode 100644 lib/ext2fs/mmp.c create mode 100644 lib/ext2fs/namei.c create mode 100644 lib/ext2fs/native.c create mode 100644 lib/ext2fs/newdir.c create mode 100644 lib/ext2fs/nt_io.c create mode 100644 lib/ext2fs/openfs.c create mode 100644 lib/ext2fs/progress.c create mode 100644 lib/ext2fs/punch.c create mode 100644 lib/ext2fs/qcow2.c create mode 100644 lib/ext2fs/qcow2.h create mode 100644 lib/ext2fs/rbtree.c create mode 100644 lib/ext2fs/rbtree.h create mode 100644 lib/ext2fs/read_bb.c create mode 100644 lib/ext2fs/read_bb_file.c create mode 100644 lib/ext2fs/res_gdt.c create mode 100644 lib/ext2fs/rw_bitmaps.c create mode 100644 lib/ext2fs/sha256.c create mode 100644 lib/ext2fs/sha512.c create mode 100644 lib/ext2fs/swapfs.c create mode 100644 lib/ext2fs/symlink.c create mode 100644 lib/ext2fs/tdb.c create mode 100644 lib/ext2fs/tdb.h create mode 100755 lib/ext2fs/tdb/build-tdb create mode 100644 lib/ext2fs/tdb/patches/copyright create mode 100644 lib/ext2fs/tdb/patches/ext2tdb-rename create mode 100644 lib/ext2fs/tdb/patches/replace-includes create mode 100644 lib/ext2fs/tdb/patches/series create mode 100644 lib/ext2fs/tdb/patches/static-functions create mode 100644 lib/ext2fs/tdb/patches/static-prototypes create mode 100644 lib/ext2fs/tdb/patches/tdbtool-includes create mode 100644 lib/ext2fs/tdbtool.c create mode 100644 lib/ext2fs/test_io.c create mode 100644 lib/ext2fs/tst_badblocks.c create mode 100644 lib/ext2fs/tst_bitmaps.c create mode 100644 lib/ext2fs/tst_bitmaps_cmd.ct create mode 100644 lib/ext2fs/tst_bitmaps_cmds create mode 100644 lib/ext2fs/tst_bitmaps_exp create mode 100644 lib/ext2fs/tst_bitops.c create mode 100644 lib/ext2fs/tst_byteswap.c create mode 100644 lib/ext2fs/tst_cmds.ct create mode 100644 lib/ext2fs/tst_fs_struct.c create mode 100644 lib/ext2fs/tst_getsectsize.c create mode 100644 lib/ext2fs/tst_getsize.c create mode 100644 lib/ext2fs/tst_inode_size.c create mode 100644 lib/ext2fs/tst_iscan.c create mode 100644 lib/ext2fs/tst_libext2fs.c create mode 100644 lib/ext2fs/tst_super_size.c create mode 100644 lib/ext2fs/tst_types.c create mode 100644 lib/ext2fs/undo_io.c create mode 100644 lib/ext2fs/unix_io.c create mode 100644 lib/ext2fs/unlink.c create mode 100644 lib/ext2fs/valid_blk.c create mode 100644 lib/ext2fs/version.c create mode 100644 lib/ext2fs/write_bb_file.c create mode 100644 lib/fpopen.c create mode 100644 lib/ss/Android.mk create mode 100644 lib/ss/Makefile.in create mode 100644 lib/ss/ct_c.awk create mode 100644 lib/ss/ct_c.sed create mode 100644 lib/ss/data.c create mode 100644 lib/ss/error.c create mode 100644 lib/ss/execute_cmd.c create mode 100644 lib/ss/get_readline.c create mode 100644 lib/ss/help.c create mode 100644 lib/ss/invocation.c create mode 100644 lib/ss/list_rqs.c create mode 100644 lib/ss/listen.c create mode 100644 lib/ss/mit-sipb-copyright.h create mode 100644 lib/ss/mk_cmds.1 create mode 100644 lib/ss/mk_cmds.sh.in create mode 100644 lib/ss/pager.c create mode 100644 lib/ss/parse.c create mode 100644 lib/ss/prompt.c create mode 100644 lib/ss/request_tbl.c create mode 100644 lib/ss/requests.c create mode 100644 lib/ss/ss.h create mode 100644 lib/ss/ss.pc.in create mode 100644 lib/ss/ss_err.et create mode 100644 lib/ss/ss_internal.h create mode 100644 lib/ss/std_rqs.ct create mode 100644 lib/ss/test_cmd.ct create mode 100644 lib/ss/test_script create mode 100644 lib/ss/test_script_expected create mode 100644 lib/ss/test_ss.c create mode 100644 lib/support/Android.mk create mode 100644 lib/support/Makefile.in create mode 100644 lib/support/argv_parse.c create mode 100644 lib/support/argv_parse.h create mode 100644 lib/support/common.h create mode 100644 lib/support/cstring.c create mode 100644 lib/support/cstring.h create mode 100644 lib/support/dict.c create mode 100644 lib/support/dict.h create mode 100644 lib/support/dqblk_v2.h create mode 100644 lib/support/mkquota.c create mode 100644 lib/support/nls-enable.h create mode 100644 lib/support/parse_qtype.c create mode 100644 lib/support/plausible.c create mode 100644 lib/support/plausible.h create mode 100644 lib/support/prof_err.et create mode 100644 lib/support/profile.c create mode 100644 lib/support/profile.h create mode 100644 lib/support/profile_helpers.c create mode 100644 lib/support/profile_helpers.h create mode 100644 lib/support/quotaio.c create mode 100644 lib/support/quotaio.h create mode 100644 lib/support/quotaio_tree.c create mode 100644 lib/support/quotaio_tree.h create mode 100644 lib/support/quotaio_v2.c create mode 100644 lib/support/quotaio_v2.h create mode 100644 lib/uuid/Android.mk create mode 100644 lib/uuid/COPYING create mode 100644 lib/uuid/Makefile.in create mode 100644 lib/uuid/clear.c create mode 100644 lib/uuid/compare.c create mode 100644 lib/uuid/configure.in create mode 100644 lib/uuid/copy.c create mode 100644 lib/uuid/gen_uuid.c create mode 100644 lib/uuid/gen_uuid_nt.c create mode 100644 lib/uuid/isnull.c create mode 100644 lib/uuid/pack.c create mode 100644 lib/uuid/parse.c create mode 100644 lib/uuid/tst_uuid.c create mode 100644 lib/uuid/unpack.c create mode 100644 lib/uuid/unparse.c create mode 100644 lib/uuid/uuid.3.in create mode 100644 lib/uuid/uuid.h.in create mode 100644 lib/uuid/uuid.pc.in create mode 100644 lib/uuid/uuidP.h create mode 100644 lib/uuid/uuid_clear.3.in create mode 100644 lib/uuid/uuid_compare.3.in create mode 100644 lib/uuid/uuid_copy.3.in create mode 100644 lib/uuid/uuid_generate.3.in create mode 100644 lib/uuid/uuid_is_null.3.in create mode 100644 lib/uuid/uuid_parse.3.in create mode 100644 lib/uuid/uuid_time.3.in create mode 100644 lib/uuid/uuid_time.c create mode 100644 lib/uuid/uuid_types.h.in create mode 100644 lib/uuid/uuid_unparse.3.in create mode 100644 lib/uuid/uuidd.h create mode 100644 misc/Android.mk create mode 100644 misc/Makefile.in create mode 100644 misc/badblocks.8.in create mode 100644 misc/badblocks.c create mode 100644 misc/base_device.c create mode 100644 misc/base_device.tst create mode 100644 misc/blkid.8.in create mode 100644 misc/blkid.c create mode 100644 misc/chattr.1.in create mode 100644 misc/chattr.c create mode 100644 misc/create_inode.c create mode 100644 misc/create_inode.h create mode 100644 misc/dumpe2fs.8.in create mode 100644 misc/dumpe2fs.c create mode 100644 misc/e2freefrag.8.in create mode 100644 misc/e2freefrag.c create mode 100644 misc/e2freefrag.h create mode 100644 misc/e2fuzz.c create mode 100755 misc/e2fuzz.sh create mode 100644 misc/e2image.8.in create mode 100644 misc/e2image.c create mode 100644 misc/e2initrd_helper.c create mode 100644 misc/e2label.8.in create mode 100644 misc/e2label.c create mode 100644 misc/e2undo.8.in create mode 100644 misc/e2undo.c create mode 100644 misc/e4crypt.8.in create mode 100644 misc/e4crypt.c create mode 100644 misc/e4defrag.8.in create mode 100644 misc/e4defrag.c create mode 100644 misc/ext4.5.in create mode 100644 misc/filefrag.8.in create mode 100644 misc/filefrag.c create mode 100644 misc/findfs.8.in create mode 100644 misc/findsuper.c create mode 100644 misc/fsck.8.in create mode 100644 misc/fsck.c create mode 100644 misc/fsck.h create mode 100644 misc/fuse2fs.1.in create mode 100644 misc/fuse2fs.c create mode 100644 misc/ismounted.c create mode 100644 misc/logsave.8.in create mode 100644 misc/logsave.c create mode 100644 misc/lsattr.1.in create mode 100644 misc/lsattr.c create mode 100644 misc/mk_hugefiles.c create mode 100644 misc/mke2fs-hurd.conf create mode 100644 misc/mke2fs.8.in create mode 100644 misc/mke2fs.c create mode 100644 misc/mke2fs.conf.5.in create mode 100644 misc/mke2fs.conf.in create mode 100644 misc/mke2fs.h create mode 100644 misc/mklost+found.8.in create mode 100644 misc/mklost+found.c create mode 100644 misc/partinfo.c create mode 100644 misc/profile-to-c.awk create mode 100644 misc/tune2fs.8.in create mode 100644 misc/tune2fs.c create mode 100644 misc/tune2fs.h create mode 100644 misc/util.c create mode 100644 misc/util.h create mode 100644 misc/uuidd.8.in create mode 100644 misc/uuidd.c create mode 100644 misc/uuidd.rc create mode 100644 misc/uuidgen.1.in create mode 100644 misc/uuidgen.c create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/at-expand.pl create mode 100644 po/boldquot.sed create mode 100644 po/ca.gmo create mode 100644 po/ca.po create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/e2fsprogs.pot create mode 100644 po/en@boldquot.header create mode 100644 po/en@quot.header create mode 100644 po/eo.gmo create mode 100644 po/eo.po create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/fi.gmo create mode 100644 po/fi.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/hu.gmo create mode 100644 po/hu.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/insert-header.sin create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ms.gmo create mode 100644 po/ms.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/sr.gmo create mode 100644 po/sr.po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/tr.gmo create mode 100644 po/tr.po create mode 100644 po/uk.gmo create mode 100644 po/uk.po create mode 100644 po/vi.gmo create mode 100644 po/vi.po create mode 100644 po/zh_CN.gmo create mode 100644 po/zh_CN.po create mode 100644 resize/Android.mk create mode 100644 resize/Makefile.in create mode 100644 resize/extent.c create mode 100644 resize/main.c create mode 100644 resize/online.c create mode 100644 resize/resize2fs.8.in create mode 100644 resize/resize2fs.c create mode 100644 resize/resize2fs.h create mode 100644 resize/resource_track.c create mode 100644 resize/sim_progress.c create mode 100755 resize/test-resize create mode 100644 resize/test_extent.c create mode 100644 resize/test_extent.in create mode 100644 tests/Makefile.in create mode 100644 tests/README create mode 100644 tests/d_dumpe2fs_group_only/expect create mode 100644 tests/d_dumpe2fs_group_only/name create mode 100644 tests/d_dumpe2fs_group_only/script create mode 100644 tests/d_fallocate/expect.gz create mode 100644 tests/d_fallocate/name create mode 100644 tests/d_fallocate/script create mode 100644 tests/d_fallocate_bigalloc/expect.gz create mode 100644 tests/d_fallocate_bigalloc/name create mode 100644 tests/d_fallocate_bigalloc/script create mode 100644 tests/d_fallocate_blkmap/expect create mode 100644 tests/d_fallocate_blkmap/name create mode 100644 tests/d_fallocate_blkmap/script create mode 100644 tests/d_inline_dump/expect create mode 100644 tests/d_inline_dump/image.gz create mode 100644 tests/d_inline_dump/name create mode 100644 tests/d_inline_dump/script create mode 100644 tests/d_loaddump/expect create mode 100644 tests/d_loaddump/name create mode 100644 tests/d_loaddump/script create mode 100644 tests/d_punch/expect create mode 100644 tests/d_punch/name create mode 100644 tests/d_punch/script create mode 100644 tests/d_punch_bigalloc/expect create mode 100644 tests/d_punch_bigalloc/name create mode 100644 tests/d_punch_bigalloc/script create mode 100644 tests/d_special_files/expect create mode 100644 tests/d_special_files/name create mode 100644 tests/d_special_files/script create mode 100644 tests/d_xattr_edits/expect create mode 100644 tests/d_xattr_edits/name create mode 100644 tests/d_xattr_edits/script create mode 100644 tests/d_xattr_sorting/expect create mode 100644 tests/d_xattr_sorting/name create mode 100644 tests/d_xattr_sorting/script create mode 100644 tests/defaults/e_script create mode 100644 tests/defaults/f_script create mode 100644 tests/defaults/j_script create mode 100644 tests/e_brel_bma/name create mode 100644 tests/e_brel_bma/script create mode 100644 tests/e_icount_normal/name create mode 100644 tests/e_icount_opt/name create mode 100644 tests/e_irel_ima/name create mode 100644 tests/e_irel_ima/script create mode 100644 tests/f_16384_block/expect.1 create mode 100644 tests/f_16384_block/expect.2 create mode 100644 tests/f_16384_block/image.gz create mode 100644 tests/f_16384_block/name create mode 100644 tests/f_8192_block/expect.1 create mode 100644 tests/f_8192_block/expect.2 create mode 100644 tests/f_8192_block/image.gz create mode 100644 tests/f_8192_block/name create mode 100644 tests/f_bad_bbitmap/expect.1 create mode 100644 tests/f_bad_bbitmap/expect.2 create mode 100644 tests/f_bad_bbitmap/image.gz create mode 100644 tests/f_bad_bbitmap/name create mode 100644 tests/f_bad_bmap_csum/expect.1 create mode 100644 tests/f_bad_bmap_csum/expect.2 create mode 100644 tests/f_bad_bmap_csum/image.gz create mode 100644 tests/f_bad_bmap_csum/name create mode 100644 tests/f_bad_disconnected_inode/expect.1 create mode 100644 tests/f_bad_disconnected_inode/expect.2 create mode 100644 tests/f_bad_disconnected_inode/image.gz create mode 100644 tests/f_bad_disconnected_inode/name create mode 100644 tests/f_bad_gdt_csum/expect.1 create mode 100644 tests/f_bad_gdt_csum/expect.2 create mode 100644 tests/f_bad_gdt_csum/image.gz create mode 100644 tests/f_bad_gdt_csum/name create mode 100644 tests/f_bad_ibitmap/expect.1 create mode 100644 tests/f_bad_ibitmap/expect.2 create mode 100644 tests/f_bad_ibitmap/image.gz create mode 100644 tests/f_bad_ibitmap/name create mode 100644 tests/f_bad_inode_csum/expect.1 create mode 100644 tests/f_bad_inode_csum/expect.2 create mode 100644 tests/f_bad_inode_csum/image.gz create mode 100644 tests/f_bad_inode_csum/name create mode 100644 tests/f_bad_local_jnl/expect.1 create mode 100644 tests/f_bad_local_jnl/expect.2 create mode 100644 tests/f_bad_local_jnl/image.gz create mode 100644 tests/f_bad_local_jnl/name create mode 100644 tests/f_badbblocks/expect.1 create mode 100644 tests/f_badbblocks/expect.2 create mode 100644 tests/f_badbblocks/image.gz create mode 100644 tests/f_badbblocks/name create mode 100644 tests/f_badcluster/expect create mode 100644 tests/f_badcluster/image.gz create mode 100644 tests/f_badcluster/name create mode 100644 tests/f_badcluster/script create mode 100644 tests/f_baddir/expect.1 create mode 100644 tests/f_baddir/expect.2 create mode 100644 tests/f_baddir/image.gz create mode 100644 tests/f_baddir/name create mode 100644 tests/f_baddir2/expect.1 create mode 100644 tests/f_baddir2/expect.2 create mode 100644 tests/f_baddir2/image.gz create mode 100644 tests/f_baddir2/name create mode 100644 tests/f_baddotdir/expect.1 create mode 100644 tests/f_baddotdir/expect.2 create mode 100644 tests/f_baddotdir/image.gz create mode 100644 tests/f_baddotdir/name create mode 100644 tests/f_badinode/expect.1 create mode 100644 tests/f_badinode/expect.2 create mode 100644 tests/f_badinode/image.gz create mode 100644 tests/f_badinode/name create mode 100644 tests/f_badjour_indblks/expect.1 create mode 100644 tests/f_badjour_indblks/expect.2 create mode 100644 tests/f_badjour_indblks/image create mode 100644 tests/f_badjour_indblks/image.gz create mode 100644 tests/f_badjour_indblks/name create mode 100644 tests/f_badjourblks/expect.1 create mode 100644 tests/f_badjourblks/expect.2 create mode 100644 tests/f_badjourblks/image.gz create mode 100644 tests/f_badjourblks/name create mode 100644 tests/f_badorphan/expect.1 create mode 100644 tests/f_badorphan/expect.2 create mode 100644 tests/f_badorphan/image.gz create mode 100644 tests/f_badorphan/name create mode 100644 tests/f_badprimary/expect.1 create mode 100644 tests/f_badprimary/expect.2 create mode 100644 tests/f_badprimary/image.gz create mode 100644 tests/f_badprimary/name create mode 100644 tests/f_badroot/expect.1 create mode 100644 tests/f_badroot/expect.2 create mode 100644 tests/f_badroot/image.gz create mode 100644 tests/f_badroot/name create mode 100644 tests/f_badsymlinks/expect.1 create mode 100644 tests/f_badsymlinks/expect.2 create mode 100644 tests/f_badsymlinks/image.gz create mode 100644 tests/f_badsymlinks/name create mode 100644 tests/f_badtable/expect.1 create mode 100644 tests/f_badtable/expect.2 create mode 100644 tests/f_badtable/image.gz create mode 100644 tests/f_badtable/name create mode 100644 tests/f_bb_in_bb/expect.1 create mode 100644 tests/f_bb_in_bb/expect.2 create mode 100644 tests/f_bb_in_bb/image.gz create mode 100644 tests/f_bb_in_bb/name create mode 100644 tests/f_bbfile/expect.1 create mode 100644 tests/f_bbfile/expect.2 create mode 100644 tests/f_bbfile/image.gz create mode 100644 tests/f_bbfile/name create mode 100644 tests/f_bbinode/expect.1 create mode 100644 tests/f_bbinode/expect.2 create mode 100644 tests/f_bbinode/image.gz create mode 100644 tests/f_bbinode/name create mode 100644 tests/f_big_sparse/expect.1 create mode 100644 tests/f_big_sparse/expect.2 create mode 100644 tests/f_big_sparse/image.gz create mode 100644 tests/f_big_sparse/name create mode 100644 tests/f_bitmaps/expect.1 create mode 100644 tests/f_bitmaps/expect.2 create mode 100644 tests/f_bitmaps/image.gz create mode 100644 tests/f_bitmaps/name create mode 100644 tests/f_boundscheck/expect.1 create mode 100644 tests/f_boundscheck/expect.2 create mode 100644 tests/f_boundscheck/image.bz2 create mode 100644 tests/f_boundscheck/name create mode 100755 tests/f_boundscheck/script create mode 100644 tests/f_clear_xattr/expect.1 create mode 100644 tests/f_clear_xattr/expect.2 create mode 100644 tests/f_clear_xattr/image.gz create mode 100644 tests/f_clear_xattr/name create mode 100644 tests/f_cloneblock_alloc_error/expect.1 create mode 100644 tests/f_cloneblock_alloc_error/expect.2 create mode 100644 tests/f_cloneblock_alloc_error/image.gz create mode 100644 tests/f_cloneblock_alloc_error/name create mode 100644 tests/f_collapse_extent_tree/expect.1 create mode 100644 tests/f_collapse_extent_tree/expect.2 create mode 100644 tests/f_collapse_extent_tree/image.gz create mode 100644 tests/f_collapse_extent_tree/name create mode 100644 tests/f_collapse_extent_tree/script create mode 100644 tests/f_compress_extent_tree_level/expect.1 create mode 100644 tests/f_compress_extent_tree_level/expect.2 create mode 100644 tests/f_compress_extent_tree_level/image.gz create mode 100644 tests/f_compress_extent_tree_level/name create mode 100644 tests/f_compress_extent_tree_level/script create mode 100644 tests/f_convert_bmap/expect.1 create mode 100644 tests/f_convert_bmap/expect.2 create mode 100644 tests/f_convert_bmap/image.gz create mode 100644 tests/f_convert_bmap/name create mode 100644 tests/f_convert_bmap/script create mode 100644 tests/f_convert_bmap_and_extent/expect.1 create mode 100644 tests/f_convert_bmap_and_extent/expect.2 create mode 100644 tests/f_convert_bmap_and_extent/image.gz create mode 100644 tests/f_convert_bmap_and_extent/name create mode 100644 tests/f_convert_bmap_and_extent/script create mode 100644 tests/f_corrupt_dirent_tail/expect.1 create mode 100644 tests/f_corrupt_dirent_tail/expect.2 create mode 100644 tests/f_corrupt_dirent_tail/image.gz create mode 100644 tests/f_corrupt_dirent_tail/name create mode 100644 tests/f_crashdisk/expect.1 create mode 100644 tests/f_crashdisk/image.gz create mode 100644 tests/f_crashdisk/name create mode 100644 tests/f_crashdisk/script create mode 100644 tests/f_create_symlinks/expect create mode 100644 tests/f_create_symlinks/name create mode 100644 tests/f_create_symlinks/script create mode 100644 tests/f_deleted_inode_bad_csum/expect.1 create mode 100644 tests/f_deleted_inode_bad_csum/expect.2 create mode 100644 tests/f_deleted_inode_bad_csum/image.gz create mode 100644 tests/f_deleted_inode_bad_csum/name create mode 100644 tests/f_desc_size_128/expect.1 create mode 100644 tests/f_desc_size_128/expect.2 create mode 100644 tests/f_desc_size_128/image.gz create mode 100644 tests/f_desc_size_128/name create mode 100644 tests/f_desc_size_bad/expect.1 create mode 100644 tests/f_desc_size_bad/expect.2 create mode 100644 tests/f_desc_size_bad/script create mode 100644 tests/f_detect_junk/expect create mode 100644 tests/f_detect_junk/expect.nodebugfs create mode 100644 tests/f_detect_junk/image.bz2 create mode 100644 tests/f_detect_junk/name create mode 100644 tests/f_detect_junk/script create mode 100644 tests/f_detect_xfs/expect create mode 100644 tests/f_detect_xfs/expect.nodebugfs create mode 100644 tests/f_detect_xfs/image.bz2 create mode 100644 tests/f_detect_xfs/name create mode 100644 tests/f_detect_xfs/script create mode 100644 tests/f_dir_bad_csum/expect.1 create mode 100644 tests/f_dir_bad_csum/expect.2 create mode 100644 tests/f_dir_bad_csum/image.gz create mode 100644 tests/f_dir_bad_csum/name create mode 100644 tests/f_dir_bad_mode/expect.1 create mode 100644 tests/f_dir_bad_mode/expect.2 create mode 100644 tests/f_dir_bad_mode/image.gz create mode 100644 tests/f_dir_bad_mode/name create mode 100644 tests/f_dirlink/expect.1 create mode 100644 tests/f_dirlink/expect.2 create mode 100644 tests/f_dirlink/image.gz create mode 100644 tests/f_dirlink/name create mode 100644 tests/f_dup/expect.1 create mode 100644 tests/f_dup/expect.2 create mode 100644 tests/f_dup/image.gz create mode 100644 tests/f_dup/name create mode 100644 tests/f_dup2/expect.1 create mode 100644 tests/f_dup2/expect.2 create mode 100644 tests/f_dup2/image.gz create mode 100644 tests/f_dup2/name create mode 100644 tests/f_dup3/expect.1 create mode 100644 tests/f_dup3/expect.2 create mode 100644 tests/f_dup3/image.gz create mode 100644 tests/f_dup3/name create mode 100644 tests/f_dup4/expect.1 create mode 100644 tests/f_dup4/expect.2 create mode 100644 tests/f_dup4/name create mode 100644 tests/f_dup4/script create mode 100644 tests/f_dup_ba/expect.1 create mode 100644 tests/f_dup_ba/expect.2 create mode 100644 tests/f_dup_ba/image.gz create mode 100644 tests/f_dup_ba/name create mode 100644 tests/f_dup_de/expect-nohtree.1 create mode 100644 tests/f_dup_de/expect-nohtree.2 create mode 100644 tests/f_dup_de/expect.1 create mode 100644 tests/f_dup_de/expect.2 create mode 100644 tests/f_dup_de/image.gz create mode 100644 tests/f_dup_de/name create mode 100644 tests/f_dup_de/script create mode 100644 tests/f_dup_de2/expect.1 create mode 100644 tests/f_dup_de2/expect.2 create mode 100644 tests/f_dup_de2/image.gz create mode 100644 tests/f_dup_de2/name create mode 100644 tests/f_dup_resize/expect.1 create mode 100644 tests/f_dup_resize/expect.2 create mode 100644 tests/f_dup_resize/name create mode 100644 tests/f_dup_resize/script create mode 100644 tests/f_dupdot/expect.1 create mode 100644 tests/f_dupdot/expect.2 create mode 100644 tests/f_dupdot/image.gz create mode 100644 tests/f_dupdot/name create mode 100644 tests/f_dupfsblks/expect.1 create mode 100644 tests/f_dupfsblks/expect.2 create mode 100644 tests/f_dupfsblks/image.gz create mode 100644 tests/f_dupfsblks/name create mode 100644 tests/f_dupsuper/expect.1 create mode 100644 tests/f_dupsuper/expect.2 create mode 100644 tests/f_dupsuper/image.gz create mode 100644 tests/f_dupsuper/name create mode 100644 tests/f_ea_bad_csum/expect.1 create mode 100644 tests/f_ea_bad_csum/expect.2 create mode 100644 tests/f_ea_bad_csum/image.gz create mode 100644 tests/f_ea_bad_csum/name create mode 100644 tests/f_ea_checks/expect.1 create mode 100644 tests/f_ea_checks/expect.2 create mode 100644 tests/f_ea_checks/image.gz create mode 100644 tests/f_ea_checks/name create mode 100644 tests/f_ea_value_crash/expect.1 create mode 100644 tests/f_ea_value_crash/expect.2 create mode 100644 tests/f_ea_value_crash/image.gz create mode 100644 tests/f_ea_value_crash/name create mode 100644 tests/f_emptydir/expect.1 create mode 100644 tests/f_emptydir/expect.2 create mode 100644 tests/f_emptydir/image.gz create mode 100644 tests/f_emptydir/name create mode 100644 tests/f_encrypted_lpf/expect.1 create mode 100644 tests/f_encrypted_lpf/expect.2 create mode 100644 tests/f_encrypted_lpf/image.gz create mode 100644 tests/f_encrypted_lpf/name create mode 100644 tests/f_end-bitmap/expect.1 create mode 100644 tests/f_end-bitmap/expect.2 create mode 100644 tests/f_end-bitmap/image.gz create mode 100644 tests/f_end-bitmap/name create mode 100644 tests/f_eofblocks/expect.1 create mode 100644 tests/f_eofblocks/expect.2 create mode 100644 tests/f_eofblocks/image.gz create mode 100644 tests/f_eofblocks/name create mode 100644 tests/f_expand/expect.1.gz create mode 100644 tests/f_expand/expect.2 create mode 100644 tests/f_expand/image.gz create mode 100644 tests/f_expand/name create mode 100644 tests/f_expandroot_create_lnf/expect.1 create mode 100644 tests/f_expandroot_create_lnf/expect.2 create mode 100644 tests/f_expandroot_create_lnf/image.gz create mode 100644 tests/f_expandroot_create_lnf/name create mode 100644 tests/f_ext_journal/expect.1 create mode 100644 tests/f_ext_journal/expect.2 create mode 100644 tests/f_ext_journal/image.gz create mode 100644 tests/f_ext_journal/journal.gz create mode 100644 tests/f_ext_journal/name create mode 100644 tests/f_ext_journal/script create mode 100644 tests/f_ext_zero_len/expect.1 create mode 100644 tests/f_ext_zero_len/expect.2 create mode 100644 tests/f_ext_zero_len/image.gz create mode 100644 tests/f_ext_zero_len/name create mode 100644 tests/f_extent_bad_node/expect.1 create mode 100644 tests/f_extent_bad_node/expect.2 create mode 100644 tests/f_extent_bad_node/image.gz create mode 100644 tests/f_extent_bad_node/name create mode 100644 tests/f_extent_htree/expect.1 create mode 100644 tests/f_extent_htree/expect.2 create mode 100644 tests/f_extent_htree/image.gz create mode 100644 tests/f_extent_htree/name create mode 100644 tests/f_extent_htree/script create mode 100644 tests/f_extent_int_bad_csum/expect.1 create mode 100644 tests/f_extent_int_bad_csum/expect.2 create mode 100644 tests/f_extent_int_bad_csum/image.gz create mode 100644 tests/f_extent_int_bad_csum/name create mode 100644 tests/f_extent_int_bad_extent/expect.1 create mode 100644 tests/f_extent_int_bad_extent/expect.2 create mode 100644 tests/f_extent_int_bad_extent/image.gz create mode 100644 tests/f_extent_int_bad_extent/name create mode 100644 tests/f_extent_int_bad_magic/expect.1 create mode 100644 tests/f_extent_int_bad_magic/expect.2 create mode 100644 tests/f_extent_int_bad_magic/image.gz create mode 100644 tests/f_extent_int_bad_magic/name create mode 100644 tests/f_extent_interior_start_lblk/expect.1 create mode 100644 tests/f_extent_interior_start_lblk/expect.2 create mode 100644 tests/f_extent_interior_start_lblk/image.gz create mode 100644 tests/f_extent_interior_start_lblk/name create mode 100644 tests/f_extent_leaf_bad_csum/expect.1 create mode 100644 tests/f_extent_leaf_bad_csum/expect.2 create mode 100644 tests/f_extent_leaf_bad_csum/image.gz create mode 100644 tests/f_extent_leaf_bad_csum/name create mode 100644 tests/f_extent_leaf_bad_extent/expect.1 create mode 100644 tests/f_extent_leaf_bad_extent/expect.2 create mode 100644 tests/f_extent_leaf_bad_extent/image.gz create mode 100644 tests/f_extent_leaf_bad_extent/name create mode 100644 tests/f_extent_leaf_bad_magic/expect.1 create mode 100644 tests/f_extent_leaf_bad_magic/expect.2 create mode 100644 tests/f_extent_leaf_bad_magic/image.gz create mode 100644 tests/f_extent_leaf_bad_magic/name create mode 100644 tests/f_extent_oobounds/expect.1 create mode 100644 tests/f_extent_oobounds/expect.2 create mode 100644 tests/f_extent_oobounds/script create mode 100644 tests/f_extent_too_deep/expect.1 create mode 100644 tests/f_extent_too_deep/expect.2 create mode 100644 tests/f_extent_too_deep/image.gz create mode 100644 tests/f_extent_too_deep/name create mode 100644 tests/f_extent_too_deep/script create mode 100644 tests/f_extents/expect.1 create mode 100644 tests/f_extents/expect.2 create mode 100644 tests/f_extents/image.gz create mode 100644 tests/f_extents/name create mode 100644 tests/f_extents2/expect.1 create mode 100644 tests/f_extents2/expect.2 create mode 100644 tests/f_extents2/image.gz create mode 100644 tests/f_extents2/name create mode 100644 tests/f_extra_journal/expect.1 create mode 100644 tests/f_extra_journal/expect.2 create mode 100644 tests/f_extra_journal/image.gz create mode 100644 tests/f_extra_journal/name create mode 100644 tests/f_fast_symlink_extents/expect.1 create mode 100644 tests/f_fast_symlink_extents/expect.2 create mode 100644 tests/f_fast_symlink_extents/image.gz create mode 100644 tests/f_fast_symlink_extents/name create mode 100644 tests/f_file_acl_high/expect.1 create mode 100644 tests/f_file_acl_high/expect.2 create mode 100644 tests/f_file_acl_high/image.gz create mode 100644 tests/f_file_acl_high/name create mode 100644 tests/f_filetype/expect.1 create mode 100644 tests/f_filetype/expect.2 create mode 100644 tests/f_filetype/image.gz create mode 100644 tests/f_filetype/name create mode 100644 tests/f_first_meta_bg_too_big/expect.1 create mode 100644 tests/f_first_meta_bg_too_big/expect.2 create mode 100644 tests/f_first_meta_bg_too_big/image.gz create mode 100644 tests/f_first_meta_bg_too_big/name create mode 100644 tests/f_full_bg/expect.1 create mode 100644 tests/f_full_bg/expect.2 create mode 100644 tests/f_full_bg/image.gz create mode 100644 tests/f_full_bg/name create mode 100644 tests/f_h_badnode/expect.1 create mode 100644 tests/f_h_badnode/expect.2 create mode 100644 tests/f_h_badnode/image.gz create mode 100644 tests/f_h_badnode/name create mode 100644 tests/f_h_badnode/script create mode 100644 tests/f_h_badroot/expect.1 create mode 100644 tests/f_h_badroot/expect.2 create mode 100644 tests/f_h_badroot/image.gz create mode 100644 tests/f_h_badroot/name create mode 100644 tests/f_h_badroot/script create mode 100644 tests/f_h_normal/expect.1 create mode 100644 tests/f_h_normal/expect.2 create mode 100644 tests/f_h_normal/image.gz create mode 100644 tests/f_h_normal/name create mode 100644 tests/f_h_normal/script create mode 100755 tests/f_h_reindex/expect.1 create mode 100644 tests/f_h_reindex/expect.2 create mode 100644 tests/f_h_reindex/image.gz create mode 100644 tests/f_h_reindex/name create mode 100644 tests/f_h_reindex/script create mode 100644 tests/f_h_unsigned/expect.1 create mode 100644 tests/f_h_unsigned/expect.2 create mode 100644 tests/f_h_unsigned/image.gz create mode 100644 tests/f_h_unsigned/name create mode 100644 tests/f_h_unsigned/script create mode 100644 tests/f_holedir/expect.1 create mode 100644 tests/f_holedir/expect.2 create mode 100644 tests/f_holedir/image.gz create mode 100644 tests/f_holedir/name create mode 100644 tests/f_holedir2/expect.1 create mode 100644 tests/f_holedir2/expect.2 create mode 100644 tests/f_holedir2/image.gz create mode 100644 tests/f_holedir2/name create mode 100644 tests/f_holedir3/expect.1 create mode 100644 tests/f_holedir3/expect.2 create mode 100644 tests/f_holedir3/image.gz create mode 100644 tests/f_holedir3/name create mode 100644 tests/f_holedir4/expect.1 create mode 100644 tests/f_holedir4/expect.2 create mode 100644 tests/f_holedir4/image.gz create mode 100644 tests/f_holedir4/name create mode 100644 tests/f_htree_bad_csum/expect.1 create mode 100644 tests/f_htree_bad_csum/expect.2 create mode 100644 tests/f_htree_bad_csum/image.gz create mode 100644 tests/f_htree_bad_csum/name create mode 100644 tests/f_htree_leaf_csum/expect.1 create mode 100644 tests/f_htree_leaf_csum/expect.2 create mode 100644 tests/f_htree_leaf_csum/image.gz create mode 100644 tests/f_htree_leaf_csum/name create mode 100644 tests/f_hugedir_blocks/expect.1 create mode 100644 tests/f_hugedir_blocks/expect.2 create mode 100644 tests/f_hugedir_blocks/image.gz create mode 100644 tests/f_hugedir_blocks/name create mode 100644 tests/f_hurd/expect.1 create mode 100644 tests/f_hurd/expect.2 create mode 100644 tests/f_hurd/image.gz create mode 100644 tests/f_hurd/name create mode 100644 tests/f_idata_and_extents/expect.1 create mode 100644 tests/f_idata_and_extents/expect.2 create mode 100644 tests/f_idata_and_extents/image.gz create mode 100644 tests/f_idata_and_extents/name create mode 100644 tests/f_illbbitmap/expect.1 create mode 100644 tests/f_illbbitmap/expect.2 create mode 100644 tests/f_illbbitmap/image.gz create mode 100644 tests/f_illbbitmap/name create mode 100644 tests/f_illibitmap/expect.1 create mode 100644 tests/f_illibitmap/expect.2 create mode 100644 tests/f_illibitmap/image.gz create mode 100644 tests/f_illibitmap/name create mode 100644 tests/f_illitable/expect.1 create mode 100644 tests/f_illitable/expect.2 create mode 100644 tests/f_illitable/image.gz create mode 100644 tests/f_illitable/name create mode 100644 tests/f_illitable_flexbg/expect.1 create mode 100644 tests/f_illitable_flexbg/expect.2 create mode 100755 tests/f_illitable_flexbg/image.gz create mode 100644 tests/f_illitable_flexbg/name create mode 100644 tests/f_imagic/expect.1 create mode 100644 tests/f_imagic/expect.2 create mode 100644 tests/f_imagic/image.gz create mode 100644 tests/f_imagic/name create mode 100644 tests/f_imagic_fs/expect.1 create mode 100644 tests/f_imagic_fs/expect.2 create mode 100644 tests/f_imagic_fs/name create mode 100644 tests/f_imagic_fs/script create mode 100644 tests/f_ind_inode_collision/expect.1 create mode 100644 tests/f_ind_inode_collision/expect.2 create mode 100644 tests/f_ind_inode_collision/image.gz create mode 100644 tests/f_ind_inode_collision/name create mode 100644 tests/f_inlinedata_dirblocks/expect.1 create mode 100644 tests/f_inlinedata_dirblocks/expect.2 create mode 100644 tests/f_inlinedata_dirblocks/image.gz create mode 100644 tests/f_inlinedata_dirblocks/name create mode 100644 tests/f_inlinedata_repair/expect.1 create mode 100644 tests/f_inlinedata_repair/expect.2 create mode 100644 tests/f_inlinedata_repair/image.gz create mode 100644 tests/f_inlinedata_repair/name create mode 100644 tests/f_inlinedir_detector/expect.1 create mode 100644 tests/f_inlinedir_detector/expect.2 create mode 100644 tests/f_inlinedir_detector/image.gz create mode 100644 tests/f_inlinedir_detector/name create mode 100644 tests/f_inode_ea_collision/expect.1 create mode 100644 tests/f_inode_ea_collision/expect.2 create mode 100644 tests/f_inode_ea_collision/image.gz create mode 100644 tests/f_inode_ea_collision/name create mode 100644 tests/f_invalid_bad_inode/expect.1 create mode 100644 tests/f_invalid_bad_inode/expect.2 create mode 100644 tests/f_invalid_bad_inode/image.gz create mode 100644 tests/f_invalid_bad_inode/name create mode 100644 tests/f_invalid_extent_symlink/expect.1 create mode 100644 tests/f_invalid_extent_symlink/expect.2 create mode 100644 tests/f_invalid_extent_symlink/image.gz create mode 100644 tests/f_invalid_extent_symlink/name create mode 100644 tests/f_itable_collision/expect.1 create mode 100644 tests/f_itable_collision/expect.2 create mode 100644 tests/f_itable_collision/image.gz create mode 100644 tests/f_itable_collision/name create mode 100755 tests/f_itable_collision/script create mode 100644 tests/f_jnl_32bit/expect.0 create mode 100644 tests/f_jnl_32bit/expect.1 create mode 100644 tests/f_jnl_32bit/expect.2 create mode 100644 tests/f_jnl_32bit/image.gz create mode 100644 tests/f_jnl_32bit/name create mode 100644 tests/f_jnl_32bit/script create mode 100644 tests/f_jnl_64bit/expect.0 create mode 100644 tests/f_jnl_64bit/expect.1 create mode 100644 tests/f_jnl_64bit/expect.2 create mode 100644 tests/f_jnl_64bit/image.gz create mode 100644 tests/f_jnl_64bit/name create mode 100644 tests/f_jnl_64bit/script create mode 100644 tests/f_jnl_errno/expect.0 create mode 100644 tests/f_jnl_errno/expect.1 create mode 100644 tests/f_jnl_errno/expect.2 create mode 100644 tests/f_jnl_errno/image.gz create mode 100644 tests/f_jnl_errno/name create mode 100644 tests/f_jnl_errno/script create mode 100644 tests/f_jnl_etb_alloc_fail/expect.1 create mode 100644 tests/f_jnl_etb_alloc_fail/expect.2 create mode 100644 tests/f_jnl_etb_alloc_fail/image.gz create mode 100644 tests/f_jnl_etb_alloc_fail/name create mode 100644 tests/f_journal/expect.1 create mode 100644 tests/f_journal/expect.2 create mode 100644 tests/f_journal/image.gz create mode 100644 tests/f_journal/name create mode 100644 tests/f_lotsbad/expect.1 create mode 100644 tests/f_lotsbad/expect.2 create mode 100644 tests/f_lotsbad/image.gz create mode 100644 tests/f_lotsbad/name create mode 100644 tests/f_lpf/expect.1 create mode 100644 tests/f_lpf/expect.2 create mode 100644 tests/f_lpf/image.gz create mode 100644 tests/f_lpf/name create mode 100644 tests/f_lpf2/expect.1 create mode 100644 tests/f_lpf2/expect.2 create mode 100644 tests/f_lpf2/image.gz create mode 100644 tests/f_lpf2/name create mode 100644 tests/f_lpffile/expect.1 create mode 100644 tests/f_lpffile/expect.2 create mode 100644 tests/f_lpffile/image.gz create mode 100644 tests/f_lpffile/name create mode 100644 tests/f_messy_inode/expect.1 create mode 100644 tests/f_messy_inode/expect.2 create mode 100644 tests/f_messy_inode/image.gz create mode 100644 tests/f_messy_inode/name create mode 100644 tests/f_miss_blk_bmap/expect.1 create mode 100644 tests/f_miss_blk_bmap/expect.2 create mode 100644 tests/f_miss_blk_bmap/image.gz create mode 100644 tests/f_miss_blk_bmap/name create mode 100644 tests/f_miss_journal/expect.1 create mode 100644 tests/f_miss_journal/expect.2 create mode 100644 tests/f_miss_journal/image.gz create mode 100644 tests/f_miss_journal/name create mode 100644 tests/f_misstable/expect.1 create mode 100644 tests/f_misstable/expect.2 create mode 100644 tests/f_misstable/image.gz create mode 100644 tests/f_misstable/name create mode 100644 tests/f_mke2fs2b/expect.1 create mode 100644 tests/f_mke2fs2b/expect.2 create mode 100644 tests/f_mke2fs2b/image.gz create mode 100644 tests/f_mke2fs2b/name create mode 100644 tests/f_mke2fs_baddisk/script create mode 100644 tests/f_mmp/name create mode 100644 tests/f_mmp/script create mode 100644 tests/f_mmp_garbage/expect.1 create mode 100644 tests/f_mmp_garbage/expect.2 create mode 100644 tests/f_mmp_garbage/name create mode 100644 tests/f_mmp_garbage/script create mode 100644 tests/f_no/expect create mode 100644 tests/f_no/script create mode 100644 tests/f_no_cache_corrupt_inode/expect.1 create mode 100644 tests/f_no_cache_corrupt_inode/expect.2 create mode 100644 tests/f_no_cache_corrupt_inode/image.gz create mode 100644 tests/f_no_cache_corrupt_inode/name create mode 100644 tests/f_noroot/expect.1 create mode 100644 tests/f_noroot/expect.2 create mode 100644 tests/f_noroot/image.gz create mode 100644 tests/f_noroot/name create mode 100644 tests/f_nospc_create_lnf/expect.1 create mode 100644 tests/f_nospc_create_lnf/expect.2 create mode 100644 tests/f_nospc_create_lnf/image.gz create mode 100644 tests/f_nospc_create_lnf/name create mode 100644 tests/f_okgroup/expect.1 create mode 100644 tests/f_okgroup/expect.2 create mode 100644 tests/f_okgroup/image.gz create mode 100644 tests/f_okgroup/name create mode 100644 tests/f_opt_extent/expect create mode 100644 tests/f_opt_extent/name create mode 100644 tests/f_opt_extent/script create mode 100644 tests/f_opt_extent_ext3/expect create mode 100644 tests/f_opt_extent_ext3/name create mode 100644 tests/f_opt_extent_ext3/script create mode 100644 tests/f_orphan/expect.1 create mode 100644 tests/f_orphan/expect.2 create mode 100644 tests/f_orphan/image.gz create mode 100644 tests/f_orphan/name create mode 100644 tests/f_orphan_dotdot_ft/expect.1 create mode 100644 tests/f_orphan_dotdot_ft/expect.2 create mode 100644 tests/f_orphan_dotdot_ft/image.gz create mode 100644 tests/f_orphan_dotdot_ft/name create mode 100644 tests/f_orphan_extents_inode/expect.1 create mode 100644 tests/f_orphan_extents_inode/expect.2 create mode 100644 tests/f_orphan_extents_inode/image.gz create mode 100644 tests/f_orphan_extents_inode/name create mode 100644 tests/f_orphan_indirect_inode/expect.1 create mode 100644 tests/f_orphan_indirect_inode/expect.2 create mode 100644 tests/f_orphan_indirect_inode/image.gz create mode 100644 tests/f_orphan_indirect_inode/name create mode 100644 tests/f_orphan_indirect_inode/script create mode 100644 tests/f_overfsblks/expect.1 create mode 100644 tests/f_overfsblks/expect.2 create mode 100644 tests/f_overfsblks/image.gz create mode 100644 tests/f_overfsblks/name create mode 100644 tests/f_pre_1970_date_encoding/expect create mode 100644 tests/f_pre_1970_date_encoding/name create mode 100644 tests/f_pre_1970_date_encoding/script create mode 100644 tests/f_preen/expect.1 create mode 100644 tests/f_preen/expect.2 create mode 100644 tests/f_preen/image.gz create mode 100644 tests/f_preen/name create mode 100644 tests/f_preen/script create mode 100644 tests/f_quota/debugfs-cmds create mode 100644 tests/f_quota/expect.0 create mode 100644 tests/f_quota/expect.1 create mode 100644 tests/f_quota/expect.2 create mode 100644 tests/f_quota/image.gz create mode 100644 tests/f_quota/name create mode 100644 tests/f_quota/script create mode 100644 tests/f_readonly_fsck/expect create mode 100644 tests/f_readonly_fsck/image.gz create mode 100644 tests/f_readonly_fsck/name create mode 100644 tests/f_readonly_fsck/script create mode 100644 tests/f_rebuild_csum_rootdir/expect.1 create mode 100644 tests/f_rebuild_csum_rootdir/expect.2 create mode 100644 tests/f_rebuild_csum_rootdir/image.gz create mode 100644 tests/f_rebuild_csum_rootdir/name create mode 100644 tests/f_recnect_bad/expect.1 create mode 100644 tests/f_recnect_bad/expect.2 create mode 100644 tests/f_recnect_bad/image.gz create mode 100644 tests/f_recnect_bad/name create mode 100644 tests/f_reconnect/expect.1 create mode 100644 tests/f_reconnect/expect.2 create mode 100644 tests/f_reconnect/image.gz create mode 100644 tests/f_reconnect/name create mode 100644 tests/f_rehash_dir/expect.1 create mode 100644 tests/f_rehash_dir/expect.2 create mode 100644 tests/f_rehash_dir/image.gz create mode 100644 tests/f_rehash_dir/name create mode 100644 tests/f_rehash_dir/script create mode 100644 tests/f_resize_inode/expect create mode 100644 tests/f_resize_inode/script create mode 100644 tests/f_salvage_dir/expect.1 create mode 100644 tests/f_salvage_dir/expect.2 create mode 100644 tests/f_salvage_dir/image.gz create mode 100644 tests/f_salvage_dir/name create mode 100644 tests/f_sb_extra_isize/expect.1 create mode 100644 tests/f_sb_extra_isize/expect.2 create mode 100644 tests/f_sb_extra_isize/image.gz create mode 100644 tests/f_sb_extra_isize/name create mode 100644 tests/f_selinux/expect.1 create mode 100644 tests/f_selinux/expect.2 create mode 100644 tests/f_selinux/image.gz create mode 100644 tests/f_selinux/name create mode 100644 tests/f_short_encrypted_dirent/expect.1 create mode 100644 tests/f_short_encrypted_dirent/expect.2 create mode 100644 tests/f_short_encrypted_dirent/image.gz create mode 100644 tests/f_short_encrypted_dirent/name create mode 100644 tests/f_special_ea/expect.1 create mode 100644 tests/f_special_ea/image.gz create mode 100644 tests/f_special_ea/name create mode 100644 tests/f_special_ea/script create mode 100644 tests/f_summary_counts/expect.1 create mode 100644 tests/f_summary_counts/expect.2 create mode 100644 tests/f_summary_counts/image.gz create mode 100644 tests/f_summary_counts/name create mode 100644 tests/f_summary_counts/script create mode 100644 tests/f_super_bad_csum/expect.1 create mode 100644 tests/f_super_bad_csum/expect.2 create mode 100644 tests/f_super_bad_csum/image.bz2 create mode 100644 tests/f_super_bad_csum/name create mode 100755 tests/f_super_bad_csum/script create mode 100644 tests/f_toobig_extent_dir/expect.1 create mode 100644 tests/f_toobig_extent_dir/expect.2 create mode 100644 tests/f_toobig_extent_dir/image.gz create mode 100644 tests/f_toobig_extent_dir/name create mode 100644 tests/f_trunc_dirent_header/expect.1 create mode 100644 tests/f_trunc_dirent_header/expect.2 create mode 100644 tests/f_trunc_dirent_header/image.gz create mode 100644 tests/f_trunc_dirent_header/name create mode 100644 tests/f_uninit_cat/expect create mode 100644 tests/f_uninit_cat/image.gz create mode 100644 tests/f_uninit_cat/name create mode 100755 tests/f_uninit_cat/script create mode 100644 tests/f_uninit_dir/expect.1 create mode 100644 tests/f_uninit_dir/expect.2 create mode 100644 tests/f_uninit_dir/image.gz create mode 100644 tests/f_uninit_dir/name create mode 100644 tests/f_uninit_ext_past_eof/expect.1 create mode 100644 tests/f_uninit_ext_past_eof/expect.2 create mode 100644 tests/f_uninit_ext_past_eof/image.gz create mode 100644 tests/f_uninit_ext_past_eof/name create mode 100644 tests/f_uninit_ext_past_eof2/expect.1 create mode 100644 tests/f_uninit_ext_past_eof2/expect.2 create mode 100644 tests/f_uninit_ext_past_eof2/image.gz create mode 100644 tests/f_uninit_ext_past_eof2/name create mode 100644 tests/f_uninit_last_uninit/expect.1 create mode 100644 tests/f_uninit_last_uninit/expect.2 create mode 100644 tests/f_uninit_last_uninit/name create mode 100644 tests/f_uninit_last_uninit/script create mode 100644 tests/f_unsorted_EAs/expect.1 create mode 100644 tests/f_unsorted_EAs/expect.2 create mode 100644 tests/f_unsorted_EAs/image.gz create mode 100644 tests/f_unsorted_EAs/name create mode 100644 tests/f_unused_itable/expect.1 create mode 100644 tests/f_unused_itable/expect.2 create mode 100644 tests/f_unused_itable/image.gz create mode 100644 tests/f_unused_itable/name create mode 100644 tests/f_valid_ea_in_inode/expect.1 create mode 100644 tests/f_valid_ea_in_inode/image.gz create mode 100644 tests/f_valid_ea_in_inode/name create mode 100644 tests/f_valid_ea_in_inode/script create mode 100644 tests/f_write_ea_no_extra_isize/expect.1 create mode 100644 tests/f_write_ea_no_extra_isize/expect.2 create mode 100644 tests/f_write_ea_no_extra_isize/image.gz create mode 100644 tests/f_write_ea_no_extra_isize/name create mode 100644 tests/f_write_ea_toobig_extra_isize/expect.1 create mode 100644 tests/f_write_ea_toobig_extra_isize/expect.2 create mode 100644 tests/f_write_ea_toobig_extra_isize/image.gz create mode 100644 tests/f_write_ea_toobig_extra_isize/name create mode 100644 tests/f_write_ea_toosmall_extra_isize/expect.1 create mode 100644 tests/f_write_ea_toosmall_extra_isize/expect.2 create mode 100644 tests/f_write_ea_toosmall_extra_isize/image.gz create mode 100644 tests/f_write_ea_toosmall_extra_isize/name create mode 100644 tests/f_yes/expect create mode 100644 tests/f_yes/script create mode 100644 tests/f_yesall/expect create mode 100644 tests/f_yesall/image.gz create mode 100644 tests/f_yesall/script create mode 100644 tests/f_yesthenall/expect create mode 100644 tests/f_yesthenall/script create mode 100644 tests/f_yesthenno/expect create mode 100644 tests/f_yesthenno/script create mode 100644 tests/f_zero_group/expect.1 create mode 100644 tests/f_zero_group/expect.2 create mode 100644 tests/f_zero_group/image.gz create mode 100644 tests/f_zero_group/name create mode 100644 tests/f_zero_inode_size/expect.1 create mode 100644 tests/f_zero_inode_size/expect.2 create mode 100644 tests/f_zero_inode_size/image.gz create mode 100644 tests/f_zero_inode_size/name create mode 100644 tests/f_zero_super/expect.1 create mode 100644 tests/f_zero_super/expect.2 create mode 100644 tests/f_zero_super/image.gz create mode 100644 tests/f_zero_super/name create mode 100644 tests/f_zero_xattr/expect.1 create mode 100644 tests/f_zero_xattr/image.gz create mode 100644 tests/f_zero_xattr/name create mode 100644 tests/f_zero_xattr/script create mode 100644 tests/f_zeroed_ext_header/expect.1 create mode 100644 tests/f_zeroed_ext_header/expect.2 create mode 100644 tests/f_zeroed_ext_header/image.gz create mode 100644 tests/f_zeroed_ext_header/name create mode 100644 tests/filter.sed create mode 100644 tests/i_bad_csum/expect create mode 100644 tests/i_bad_csum/image.gz create mode 100644 tests/i_bad_csum/name create mode 100644 tests/i_bad_csum/script create mode 100644 tests/i_qcow/i_qcow.crc create mode 100644 tests/i_qcow/image1024.orig.bz2 create mode 100644 tests/i_qcow/image2048.orig.bz2 create mode 100644 tests/i_qcow/image4096.orig.bz2 create mode 100644 tests/i_qcow/script create mode 100644 tests/j_corrupt_commit_csum/expect create mode 100644 tests/j_corrupt_commit_csum/image.gz create mode 100644 tests/j_corrupt_commit_csum/name create mode 100644 tests/j_corrupt_commit_csum/script create mode 100644 tests/j_corrupt_commit_tid/expect create mode 100644 tests/j_corrupt_commit_tid/image.gz create mode 100644 tests/j_corrupt_commit_tid/name create mode 100644 tests/j_corrupt_commit_tid/script create mode 100644 tests/j_corrupt_descr_csum/expect create mode 100644 tests/j_corrupt_descr_csum/image.gz create mode 100644 tests/j_corrupt_descr_csum/name create mode 100644 tests/j_corrupt_descr_csum/script create mode 100644 tests/j_corrupt_descr_tid/expect create mode 100644 tests/j_corrupt_descr_tid/image.gz create mode 100644 tests/j_corrupt_descr_tid/name create mode 100644 tests/j_corrupt_descr_tid/script create mode 100644 tests/j_corrupt_ext_jnl_sb_block/expect create mode 100644 tests/j_corrupt_ext_jnl_sb_block/image.tar.bz2 create mode 100644 tests/j_corrupt_ext_jnl_sb_block/name create mode 100644 tests/j_corrupt_ext_jnl_sb_block/script create mode 100644 tests/j_corrupt_ext_jnl_sb_csum/expect create mode 100644 tests/j_corrupt_ext_jnl_sb_csum/image.tar.bz2 create mode 100644 tests/j_corrupt_ext_jnl_sb_csum/name create mode 100644 tests/j_corrupt_ext_jnl_sb_csum/script create mode 100644 tests/j_corrupt_journal_block/expect create mode 100644 tests/j_corrupt_journal_block/image.gz create mode 100644 tests/j_corrupt_journal_block/name create mode 100644 tests/j_corrupt_journal_block/script create mode 100644 tests/j_corrupt_revoke_block/expect create mode 100644 tests/j_corrupt_revoke_block/image.gz create mode 100644 tests/j_corrupt_revoke_block/name create mode 100644 tests/j_corrupt_revoke_block/script create mode 100644 tests/j_corrupt_revoke_csum/expect create mode 100644 tests/j_corrupt_revoke_csum/image.gz create mode 100644 tests/j_corrupt_revoke_csum/name create mode 100644 tests/j_corrupt_revoke_csum/script create mode 100644 tests/j_corrupt_revoke_rcount/expect.1 create mode 100644 tests/j_corrupt_revoke_rcount/expect.2 create mode 100644 tests/j_corrupt_revoke_rcount/image.gz create mode 100644 tests/j_corrupt_revoke_rcount/name create mode 100644 tests/j_corrupt_sb_csum/expect create mode 100644 tests/j_corrupt_sb_csum/image.gz create mode 100644 tests/j_corrupt_sb_csum/name create mode 100644 tests/j_corrupt_sb_csum/script create mode 100644 tests/j_corrupt_sb_magic/expect create mode 100644 tests/j_corrupt_sb_magic/image.gz create mode 100644 tests/j_corrupt_sb_magic/name create mode 100644 tests/j_corrupt_sb_magic/script create mode 100644 tests/j_ext_dumpe2fs/expect create mode 100644 tests/j_ext_dumpe2fs/image.gz create mode 100644 tests/j_ext_dumpe2fs/name create mode 100644 tests/j_ext_dumpe2fs/script create mode 100644 tests/j_ext_long_revoke_trans/expect create mode 100644 tests/j_ext_long_revoke_trans/name create mode 100644 tests/j_ext_long_revoke_trans/script create mode 100644 tests/j_ext_long_trans/expect create mode 100644 tests/j_ext_long_trans/name create mode 100644 tests/j_ext_long_trans/script create mode 100644 tests/j_long_revoke_trans/expect create mode 100644 tests/j_long_revoke_trans/name create mode 100644 tests/j_long_revoke_trans/script create mode 100644 tests/j_long_revoke_trans_mcsum_32bit/expect create mode 100644 tests/j_long_revoke_trans_mcsum_32bit/name create mode 100644 tests/j_long_revoke_trans_mcsum_32bit/script create mode 100644 tests/j_long_revoke_trans_mcsum_64bit/expect create mode 100644 tests/j_long_revoke_trans_mcsum_64bit/name create mode 100644 tests/j_long_revoke_trans_mcsum_64bit/script create mode 100644 tests/j_long_trans/expect create mode 100644 tests/j_long_trans/name create mode 100644 tests/j_long_trans/script create mode 100644 tests/j_long_trans_mcsum_32bit/expect create mode 100644 tests/j_long_trans_mcsum_32bit/name create mode 100644 tests/j_long_trans_mcsum_32bit/script create mode 100644 tests/j_long_trans_mcsum_64bit/expect create mode 100644 tests/j_long_trans_mcsum_64bit/name create mode 100644 tests/j_long_trans_mcsum_64bit/script create mode 100644 tests/j_recover_csum2_32bit/expect.1 create mode 100644 tests/j_recover_csum2_32bit/expect.2 create mode 100644 tests/j_recover_csum2_32bit/image.bz2 create mode 100644 tests/j_recover_csum2_32bit/name create mode 100755 tests/j_recover_csum2_32bit/script create mode 100644 tests/j_recover_csum2_64bit/expect.1 create mode 100644 tests/j_recover_csum2_64bit/expect.2 create mode 100644 tests/j_recover_csum2_64bit/image.bz2 create mode 100644 tests/j_recover_csum2_64bit/name create mode 100755 tests/j_recover_csum2_64bit/script create mode 100644 tests/j_short_revoke_trans/expect create mode 100644 tests/j_short_revoke_trans/name create mode 100644 tests/j_short_revoke_trans/script create mode 100644 tests/j_short_revoke_trans_mcsum_64bit/expect create mode 100644 tests/j_short_revoke_trans_mcsum_64bit/name create mode 100644 tests/j_short_revoke_trans_mcsum_64bit/script create mode 100644 tests/j_short_trans/expect create mode 100644 tests/j_short_trans/name create mode 100644 tests/j_short_trans/script create mode 100644 tests/j_short_trans_64bit/expect create mode 100644 tests/j_short_trans_64bit/name create mode 100644 tests/j_short_trans_64bit/script create mode 100644 tests/j_short_trans_mcsum_64bit/expect create mode 100644 tests/j_short_trans_mcsum_64bit/name create mode 100644 tests/j_short_trans_mcsum_64bit/script create mode 100644 tests/j_short_trans_old_csum/expect create mode 100644 tests/j_short_trans_old_csum/name create mode 100644 tests/j_short_trans_old_csum/script create mode 100644 tests/j_short_trans_open_recover/expect create mode 100644 tests/j_short_trans_open_recover/name create mode 100644 tests/j_short_trans_open_recover/script create mode 100644 tests/j_short_trans_recover/expect create mode 100644 tests/j_short_trans_recover/name create mode 100644 tests/j_short_trans_recover/script create mode 100644 tests/j_short_trans_recover_mcsum_64bit/expect create mode 100644 tests/j_short_trans_recover_mcsum_64bit/name create mode 100644 tests/j_short_trans_recover_mcsum_64bit/script create mode 100644 tests/j_short_uncommitted_trans/expect create mode 100644 tests/j_short_uncommitted_trans/name create mode 100644 tests/j_short_uncommitted_trans/script create mode 100644 tests/j_short_uncommitted_trans_mcsum_64bit/expect create mode 100644 tests/j_short_uncommitted_trans_mcsum_64bit/name create mode 100644 tests/j_short_uncommitted_trans_mcsum_64bit/script create mode 100644 tests/m_64bit_flexbg/expect.1 create mode 100644 tests/m_64bit_flexbg/script create mode 100644 tests/m_bigjournal/expect.1 create mode 100644 tests/m_bigjournal/script create mode 100644 tests/m_dasd_bs/expect.1 create mode 100644 tests/m_dasd_bs/script create mode 100644 tests/m_desc_size_128/expect.1 create mode 100644 tests/m_desc_size_128/script create mode 100644 tests/m_devdir/script create mode 100644 tests/m_error_behavior/expect create mode 100755 tests/m_error_behavior/script create mode 100644 tests/m_extent_journal/expect.1 create mode 100644 tests/m_extent_journal/script create mode 100644 tests/m_hugefile/expect create mode 100644 tests/m_hugefile/name create mode 100644 tests/m_hugefile/script create mode 100644 tests/m_hugefile_slack/expect create mode 100644 tests/m_hugefile_slack/name create mode 100644 tests/m_hugefile_slack/script create mode 100644 tests/m_large_file/expect.1 create mode 100644 tests/m_large_file/script create mode 100644 tests/m_mcsum_extjournal/expect create mode 100644 tests/m_mcsum_extjournal/name create mode 100644 tests/m_mcsum_extjournal/script create mode 100644 tests/m_meta_bg/expect.1 create mode 100644 tests/m_meta_bg/script create mode 100644 tests/m_minrootdir/expect create mode 100644 tests/m_minrootdir/output.sed create mode 100644 tests/m_minrootdir/script create mode 100644 tests/m_mkfs_overhead/expect create mode 100644 tests/m_mkfs_overhead/script create mode 100644 tests/m_mmp/expect.1 create mode 100644 tests/m_mmp/script create mode 100644 tests/m_mmp_bad_csum/expect create mode 100644 tests/m_mmp_bad_csum/image.gz create mode 100644 tests/m_mmp_bad_csum/name create mode 100644 tests/m_mmp_bad_csum/script create mode 100644 tests/m_mmp_bad_magic/.log create mode 100644 tests/m_mmp_bad_magic/expect create mode 100644 tests/m_mmp_bad_magic/image.gz create mode 100644 tests/m_mmp_bad_magic/name create mode 100644 tests/m_mmp_bad_magic/script create mode 100644 tests/m_no_opt/expect.1 create mode 100644 tests/m_no_opt/script create mode 100755 tests/m_offset/script create mode 100644 tests/m_quota/expect.1 create mode 100644 tests/m_quota/script create mode 100644 tests/m_raid_opt/expect.1 create mode 100644 tests/m_raid_opt/script create mode 100644 tests/m_root_owner/expect.1 create mode 100644 tests/m_root_owner/script create mode 100644 tests/m_rootdir/expect create mode 100644 tests/m_rootdir/output.sed create mode 100644 tests/m_rootdir/script create mode 100644 tests/m_std/expect.1 create mode 100644 tests/m_std/script create mode 100644 tests/m_uninit/expect.1 create mode 100644 tests/m_uninit/script create mode 100644 tests/mke2fs.conf.in create mode 100644 tests/progs/Makefile.in create mode 100644 tests/progs/crcsum.c create mode 100644 tests/progs/hold_inode.c create mode 100644 tests/progs/random_exercise.c create mode 100644 tests/progs/test_data/bma.setup create mode 100644 tests/progs/test_data/expect.brel create mode 100644 tests/progs/test_data/expect.icount create mode 100644 tests/progs/test_data/expect.irel create mode 100644 tests/progs/test_data/ima.setup create mode 100644 tests/progs/test_data/normal.setup create mode 100644 tests/progs/test_data/opt.setup create mode 100644 tests/progs/test_data/test.brel create mode 100644 tests/progs/test_data/test.icount create mode 100644 tests/progs/test_data/test.irel create mode 100644 tests/progs/test_icount.c create mode 100644 tests/progs/test_icount.h create mode 100644 tests/progs/test_icount_cmds.ct create mode 100644 tests/progs/test_rel.c create mode 100644 tests/progs/test_rel.h create mode 100644 tests/progs/test_rel_cmds.ct create mode 100644 tests/r_1024_small_bg/script create mode 100644 tests/r_32to64bit/expect create mode 100644 tests/r_32to64bit/name create mode 100644 tests/r_32to64bit/script create mode 100644 tests/r_32to64bit_expand_full/expect create mode 100644 tests/r_32to64bit_expand_full/name create mode 100644 tests/r_32to64bit_expand_full/script create mode 100644 tests/r_32to64bit_meta/expect create mode 100644 tests/r_32to64bit_meta/name create mode 100644 tests/r_32to64bit_meta/script create mode 100644 tests/r_32to64bit_move_itable/expect create mode 100644 tests/r_32to64bit_move_itable/name create mode 100644 tests/r_32to64bit_move_itable/script create mode 100644 tests/r_64bit_big_expand/script create mode 100644 tests/r_64to32bit/expect create mode 100644 tests/r_64to32bit/name create mode 100644 tests/r_64to32bit/script create mode 100644 tests/r_64to32bit_meta/expect create mode 100644 tests/r_64to32bit_meta/name create mode 100644 tests/r_64to32bit_meta/script create mode 100644 tests/r_bigalloc_big_expand/script create mode 100644 tests/r_expand_full/expect create mode 100644 tests/r_expand_full/name create mode 100644 tests/r_expand_full/script create mode 100644 tests/r_ext4_big_expand/script create mode 100644 tests/r_ext4_small_bg/script create mode 100644 tests/r_fixup_lastbg/expect create mode 100755 tests/r_fixup_lastbg/script create mode 100644 tests/r_fixup_lastbg_big/expect create mode 100755 tests/r_fixup_lastbg_big/script create mode 100644 tests/r_inline_xattr/expect create mode 100644 tests/r_inline_xattr/image.gz create mode 100644 tests/r_inline_xattr/name create mode 100644 tests/r_inline_xattr/script create mode 100644 tests/r_meta_bg_shrink/script create mode 100644 tests/r_min_itable/expect create mode 100644 tests/r_min_itable/image.gz create mode 100644 tests/r_min_itable/name create mode 100644 tests/r_min_itable/script create mode 100644 tests/r_move_itable/expect create mode 100644 tests/r_move_itable/name create mode 100644 tests/r_move_itable/script create mode 100644 tests/r_resize_inode/expect create mode 100644 tests/r_resize_inode/name create mode 100644 tests/r_resize_inode/script create mode 100644 tests/run_e2fsck create mode 100644 tests/run_mke2fs create mode 100755 tests/scripts/mkdup create mode 100755 tests/scripts/resize_test create mode 100644 tests/t_change_uuid/expect create mode 100755 tests/t_change_uuid/script create mode 100644 tests/t_change_uuid_mcsum/expect create mode 100755 tests/t_change_uuid_mcsum/script create mode 100644 tests/t_change_uuid_mcsum_mounted/expect create mode 100755 tests/t_change_uuid_mcsum_mounted/script create mode 100644 tests/t_change_uuid_mcsum_seed_mounted/expect create mode 100755 tests/t_change_uuid_mcsum_seed_mounted/script create mode 100644 tests/t_change_uuid_mounted/expect create mode 100755 tests/t_change_uuid_mounted/script create mode 100644 tests/t_dangerous/expect create mode 100644 tests/t_dangerous/name create mode 100644 tests/t_dangerous/script create mode 100644 tests/t_disable_changed_csum_seed/expect create mode 100755 tests/t_disable_changed_csum_seed/script create mode 100644 tests/t_disable_changed_csum_seed_mounted/expect create mode 100755 tests/t_disable_changed_csum_seed_mounted/script create mode 100644 tests/t_disable_csum_seed/expect create mode 100755 tests/t_disable_csum_seed/script create mode 100644 tests/t_disable_mcsum/expect create mode 100644 tests/t_disable_mcsum/name create mode 100644 tests/t_disable_mcsum/script create mode 100644 tests/t_disable_mcsum_noinitbg/expect create mode 100644 tests/t_disable_mcsum_noinitbg/name create mode 100644 tests/t_disable_mcsum_noinitbg/script create mode 100644 tests/t_disable_mcsum_yesinitbg/expect create mode 100644 tests/t_disable_mcsum_yesinitbg/name create mode 100644 tests/t_disable_mcsum_yesinitbg/script create mode 100644 tests/t_disable_meta_csum_and_seed/expect create mode 100755 tests/t_disable_meta_csum_and_seed/script create mode 100644 tests/t_enable_csum_seed/expect create mode 100755 tests/t_enable_csum_seed/script create mode 100644 tests/t_enable_mcsum/expect create mode 100644 tests/t_enable_mcsum/name create mode 100644 tests/t_enable_mcsum/script create mode 100644 tests/t_enable_mcsum_ext3/expect create mode 100644 tests/t_enable_mcsum_ext3/name create mode 100644 tests/t_enable_mcsum_ext3/script create mode 100644 tests/t_enable_mcsum_initbg/expect create mode 100644 tests/t_enable_mcsum_initbg/name create mode 100644 tests/t_enable_mcsum_initbg/script create mode 100644 tests/t_ext_jnl_fail/expect create mode 100644 tests/t_ext_jnl_fail/name create mode 100644 tests/t_ext_jnl_fail/script create mode 100644 tests/t_ext_jnl_rm/script create mode 100644 tests/t_format_csum_seed/expect create mode 100755 tests/t_format_csum_seed/script create mode 100644 tests/t_iexpand_full/expect create mode 100644 tests/t_iexpand_full/name create mode 100644 tests/t_iexpand_full/script create mode 100644 tests/t_iexpand_mcsum/expect create mode 100644 tests/t_iexpand_mcsum/name create mode 100644 tests/t_iexpand_mcsum/script create mode 100644 tests/t_mmp_1on/name create mode 100644 tests/t_mmp_1on/script create mode 100644 tests/t_mmp_2off/name create mode 100644 tests/t_mmp_2off/script create mode 100644 tests/t_quota_1on/name create mode 100644 tests/t_quota_1on/script create mode 100644 tests/t_quota_2off/name create mode 100644 tests/t_quota_2off/script create mode 100644 tests/t_replay_and_set/expect create mode 100644 tests/t_replay_and_set/name create mode 100644 tests/t_replay_and_set/script create mode 100644 tests/t_uninit_bg_rm/expect create mode 100644 tests/t_uninit_bg_rm/script create mode 100644 tests/test_config create mode 100644 tests/test_one.in create mode 100755 tests/test_post create mode 100644 tests/test_script.in create mode 100644 tests/u_compound_bad_rollback/script create mode 100644 tests/u_compound_rollback/script create mode 100644 tests/u_corrupt_blk_csum/script create mode 100644 tests/u_corrupt_blk_csum_force/script create mode 100644 tests/u_corrupt_hdr_csum/script create mode 100644 tests/u_corrupt_key_csum/script create mode 100644 tests/u_debugfs_opt/script create mode 100644 tests/u_dryrun/script create mode 100644 tests/u_e2fsck_opt/script create mode 100644 tests/u_errorout/script create mode 100644 tests/u_force/script create mode 100644 tests/u_force_dryrun/script create mode 100644 tests/u_incomplete/script create mode 100644 tests/u_mke2fs/script create mode 100644 tests/u_mke2fs_opt/script create mode 100644 tests/u_mke2fs_opt_oddsize/script create mode 100644 tests/u_mke2fs_opt_offset/script create mode 100644 tests/u_not_undo/script create mode 100644 tests/u_offset/script create mode 100644 tests/u_onefile_bad/script create mode 100644 tests/u_resize2fs_opt/script create mode 100644 tests/u_revert_64bitmcsum_onefile/script create mode 100644 tests/u_revert_all_onefile/script create mode 100644 tests/u_revert_upgrade_to_64bitmcsum/script create mode 100644 tests/u_tune2fs/script create mode 100644 tests/u_tune2fs_opt/script create mode 100644 tests/u_undo_undo/script create mode 100644 tests/u_wrong_fs/script create mode 100644 util/Makefile.in create mode 100644 util/all.exclude create mode 100644 util/android-README.version.in create mode 100644 util/android_config.h create mode 100644 util/android_types.h create mode 100644 util/copy_sparse.c create mode 100644 util/gcc-wall-cleanup create mode 100755 util/gen-android-files create mode 100755 util/gen-sample-fs create mode 100644 util/gen-tarball.in create mode 100755 util/get-ver create mode 100644 util/install-symlink.in create mode 100644 util/libecho.c create mode 100644 util/static-analysis-cleanup create mode 100644 util/subset.exclude create mode 100644 util/subst.c create mode 100644 util/subst.conf.in create mode 100644 util/symlinks.c create mode 100644 version.h create mode 100644 wordwrap.pl diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..baf9b1a --- /dev/null +++ b/.gitignore @@ -0,0 +1,217 @@ +autom4te.cache +build +build.profiled +build.static +FILES +^core +*~ +patches +Makefile +*.bak +*.diff +*.dSYM +*.o +*.a +*.orig +*.patch +*.pc +*.rej +*.swp +00[0-9][1-9]*.patch +MCONFIG +asm_types.h +config.log +config.status +debugfs/extent_cmds.c +debugfs/debug_cmds.c +debugfs/debugfs +debugfs/debugfs.8 +debugfs/extent_cmds.c +doc/libext2fs.aux +doc/libext2fs.cp +doc/libext2fs.dvi +doc/libext2fs.fn +doc/libext2fs.fns +doc/libext2fs.info +doc/libext2fs.ky +doc/libext2fs.log +doc/libext2fs.pg +doc/libext2fs.toc +doc/libext2fs.tp +doc/libext2fs.vr +e2fsck/crc32table.h +e2fsck/e2fsck +e2fsck/e2fsck.8 +e2fsck/e2fsck.conf.5 +e2fsck/e2fsck.shared +e2fsck/e2fsck.static +e2fsck/gen_crc32table +e2fsck/prof_err.c +e2fsck/prof_err.h +e2fsck/tst_crc32 +e2fsck/tst_problem +e2fsck/tst_refcount +e2fsck/tst_region +e2fsprogs.spec +ext2ed/ext2ed.conf +ext2ed/ext2ed.8 +intl/charset.alias +intl/libgnuintl.h +intl/libintl.a +intl/libintl.h +intl/ref-add.sed +intl/ref-del.sed +lib/blkid/blkid.h +lib/blkid/blkid.pc +lib/blkid/blkid_types.h +lib/blkid/libblkid.3 +lib/blkid/subdirs +lib/blkid/test_probe +lib/blkid/tests/*.ok +lib/blkid/tests/*.out +lib/blkid/tests/tmp +lib/blkid/tst_cache +lib/blkid/tst_dev +lib/blkid/tst_devname +lib/blkid/tst_devno +lib/blkid/tst_getsize +lib/blkid/tst_probe +lib/blkid/tst_read +lib/blkid/tst_resolve +lib/blkid/tst_save +lib/blkid/tst_tag +lib/blkid/tst_types +lib/config.h +lib/dirpaths.h +lib/e2p/e2p.pc +lib/e2p/subdirs +lib/e2p/tst_feature +lib/e2p/tst_ostype +lib/et/com_err.pc +lib/et/compile_et +lib/et/subdirs +lib/ext2fs/crc32c_table.h +lib/ext2fs/debug_cmds.c +lib/ext2fs/ext2_err.c +lib/ext2fs/ext2_err.et +lib/ext2fs/ext2_err.h +lib/ext2fs/ext2_types.h +lib/ext2fs/ext2fs.pc +lib/ext2fs/extent_cmds.c +lib/ext2fs/gen_crc32ctable +lib/ext2fs/subdirs +lib/ext2fs/tst_badblocks +lib/ext2fs/tst_bitmaps +lib/ext2fs/tst_bitmaps_cmd.c +lib/ext2fs/tst_bitmaps_out +lib/ext2fs/tst_bitops +lib/ext2fs/tst_cmds.c +lib/ext2fs/tst_csum +lib/ext2fs/tst_crc32c +lib/ext2fs/tst_icount +lib/ext2fs/tst_inline +lib/ext2fs/tst_inode_size +lib/ext2fs/tst_iscan +lib/ext2fs/tst_libext2fs +lib/ext2fs/tst_super_size +lib/ext2fs/tst_types +lib/quota/subdirs +lib/ss/mk_cmds +lib/ss/ss.pc +lib/ss/ss_err.c +lib/ss/ss_err.h +lib/ss/std_rqs.c +lib/ss/subdirs +lib/ss/test.diff +lib/ss/test_cmd.c +lib/ss/test_out +lib/ss/test_ss +lib/uuid/subdirs +lib/uuid/tst_uuid +lib/uuid/uuid.3 +lib/uuid/uuid.h +lib/uuid/uuid.pc +lib/uuid/uuid_clear.3 +lib/uuid/uuid_compare.3 +lib/uuid/uuid_copy.3 +lib/uuid/uuid_generate.3 +lib/uuid/uuid_is_null.3 +lib/uuid/uuid_parse.3 +lib/uuid/uuid_time +lib/uuid/uuid_time.3 +lib/uuid/uuid_types.h +lib/uuid/uuid_unparse.3 +misc/badblocks +misc/badblocks.8 +misc/base_device +misc/base_device.out +misc/blkid +misc/blkid.8 +misc/chattr +misc/chattr.1 +misc/default_profile.c +misc/dumpe2fs +misc/dumpe2fs.8 +misc/e2freefrag +misc/e2freefrag.8 +misc/e2fuzz +misc/e2image +misc/e2image.8 +misc/e2initrd_helper +misc/e2label.8 +misc/e2undo +misc/e2undo.8 +misc/e4defrag +misc/e4defrag.8 +misc/ext4.5 +misc/filefrag +misc/filefrag.8 +misc/findfs.8 +misc/findsuper +misc/fsck +misc/fsck.8 +misc/logsave +misc/logsave.8 +misc/lsattr +misc/lsattr.1 +misc/mke2fs +misc/mke2fs.8 +misc/mke2fs.conf.5 +misc/mke2fs.conf +misc/mklost+found +misc/mklost+found.8 +misc/prof_err.c +misc/prof_err.h +misc/profile.h +misc/tune2fs +misc/tune2fs.8 +misc/uuidd +misc/uuidd.8 +misc/uuidgen +misc/uuidgen.1 +parse-types.log +po/Makefile.in +po/POTFILES +public_config.h +resize/resize2fs +resize/resize2fs.8 +resize/test_extent +resize/test_extent.out +tags +TAGS +tests/progs/test_icount +tests/progs/test_icount_cmds.c +tests/progs/crcsum +tests/*.ok +tests/*.failed +tests/*.log +tests/*.tmp +tests/mke2fs.conf +tests/test_script +tests/test_one +util/dirpaths.h +util/gen-tarball +util/install-symlink +util/subst +util/subst.conf +Meta diff --git a/.missing-copyright b/.missing-copyright new file mode 100644 index 0000000..d99cb32 --- /dev/null +++ b/.missing-copyright @@ -0,0 +1,4 @@ +#!/bin/sh + +find . -type f \! -name \*~ \! -exec grep -q Begin-Header \{\} \; -print \ + | grep -v ^./build diff --git a/.release-checklist b/.release-checklist new file mode 100644 index 0000000..414265c --- /dev/null +++ b/.release-checklist @@ -0,0 +1,19 @@ +1) Do "make depend" if necessary + +2) "make check"!!! + +3) Use "git log" to assemble release notes. + +4) Run "(cd po; make e2fsprogs.pot-update)" to update the translation template. + +5) Update files which contain version information + version.h + README + RELEASE-NOTES + e2fsprogs.lsm + doc/libext2fs.texinfo (three places) + +6) Make source distribution + +7) Adjust sizes in e2fsprogs-VER.lsm; rebuild source files; rebuild RPM files + diff --git a/ABOUT-NLS b/ABOUT-NLS new file mode 100644 index 0000000..d528f9c --- /dev/null +++ b/ABOUT-NLS @@ -0,0 +1,435 @@ +Notes on the Free Translation Project +************************************* + + Free software is going international! The Free Translation Project +is a way to get maintainers of free software, translators, and users all +together, so that will gradually become able to speak many languages. +A few packages already provide translations for their messages. + + If you found this `ABOUT-NLS' file inside a distribution, you may +assume that the distributed package does use GNU `gettext' internally, +itself available at your nearest GNU archive site. But you do _not_ +need to install GNU `gettext' prior to configuring, installing or using +this package with messages translated. + + Installers will find here some useful hints. These notes also +explain how users should proceed for getting the programs to use the +available translations. They tell how people wanting to contribute and +work at translations should contact the appropriate team. + + When reporting bugs in the `intl/' directory or bugs which may be +related to internationalization, you should tell about the version of +`gettext' which is used. The information can be found in the +`intl/VERSION' file, in internationalized packages. + +Quick configuration advice +========================== + + If you want to exploit the full power of internationalization, you +should configure it using + + ./configure --with-included-gettext + +to force usage of internationalizing routines provided within this +package, despite the existence of internationalizing capabilities in the +operating system where this package is being installed. So far, only +the `gettext' implementation in the GNU C library version 2 provides as +many features (such as locale alias, message inheritance, automatic +charset conversion or plural form handling) as the implementation here. +It is also not possible to offer this additional functionality on top +of a `catgets' implementation. Future versions of GNU `gettext' will +very likely convey even more functionality. So it might be a good idea +to change to GNU `gettext' as soon as possible. + + So you need _not_ provide this option if you are using GNU libc 2 or +you have installed a recent copy of the GNU gettext package with the +included `libintl'. + +INSTALL Matters +=============== + + Some packages are "localizable" when properly installed; the +programs they contain can be made to speak your own native language. +Most such packages use GNU `gettext'. Other packages have their own +ways to internationalization, predating GNU `gettext'. + + By default, this package will be installed to allow translation of +messages. It will automatically detect whether the system already +provides the GNU `gettext' functions. If not, the GNU `gettext' own +library will be used. This library is wholly contained within this +package, usually in the `intl/' subdirectory, so prior installation of +the GNU `gettext' package is _not_ required. Installers may use +special options at configuration time for changing the default +behaviour. The commands: + + ./configure --with-included-gettext + ./configure --disable-nls + +will respectively bypass any pre-existing `gettext' to use the +internationalizing routines provided within this package, or else, +_totally_ disable translation of messages. + + When you already have GNU `gettext' installed on your system and run +configure without an option for your new package, `configure' will +probably detect the previously built and installed `libintl.a' file and +will decide to use this. This might be not what is desirable. You +should use the more recent version of the GNU `gettext' library. I.e. +if the file `intl/VERSION' shows that the library which comes with this +package is more recent, you should use + + ./configure --with-included-gettext + +to prevent auto-detection. + + The configuration process will not test for the `catgets' function +and therefore it will not be used. The reason is that even an +emulation of `gettext' on top of `catgets' could not provide all the +extensions of the GNU `gettext' library. + + Internationalized packages have usually many `po/LL.po' files, where +LL gives an ISO 639 two-letter code identifying the language. Unless +translations have been forbidden at `configure' time by using the +`--disable-nls' switch, all available translations are installed +together with the package. However, the environment variable `LINGUAS' +may be set, prior to configuration, to limit the installed set. +`LINGUAS' should then contain a space separated list of two-letter +codes, stating which languages are allowed. + +Using This Package +================== + + As a user, if your language has been installed for this package, you +only have to set the `LANG' environment variable to the appropriate +`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code, +and `CC' is an ISO 3166 two-letter country code. For example, let's +suppose that you speak German and live in Germany. At the shell +prompt, merely execute `setenv LANG de_DE' (in `csh'), +`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). +This can be done from your `.login' or `.profile' file, once and for +all. + + You might think that the country code specification is redundant. +But in fact, some languages have dialects in different countries. For +example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The +country code serves to distinguish the dialects. + + The locale naming convention of `LL_CC', with `LL' denoting the +language and `CC' denoting the country, is the one use on systems based +on GNU libc. On other systems, some variations of this scheme are +used, such as `LL' or `LL_CC.ENCODING'. You can get the list of +locales supported by your system for your country by running the command +`locale -a | grep '^LL''. + + Not all programs have translations for all languages. By default, an +English message is shown in place of a nonexistent translation. If you +understand other languages, you can set up a priority list of languages. +This is done through a different environment variable, called +`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' +for the purpose of message handling, but you still need to have `LANG' +set to the primary language; this is required by other parts of the +system libraries. For example, some Swedish users who would rather +read translations in German than English for when Swedish is not +available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. + + In the `LANGUAGE' environment variable, but not in the `LANG' +environment variable, `LL_CC' combinations can be abbreviated as `LL' +to denote the language's main dialect. For example, `de' is equivalent +to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' +(Portuguese as spoken in Portugal) in this context. + +Translating Teams +================= + + For the Free Translation Project to be a success, we need interested +people who like their own language and write it well, and who are also +able to synergize with other translators speaking the same language. +Each translation team has its own mailing list. The up-to-date list of +teams can be found at the Free Translation Project's homepage, +`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams" +area. + + If you'd like to volunteer to _work_ at translating messages, you +should become a member of the translating team for your own language. +The subscribing address is _not_ the same as the list itself, it has +`-request' appended. For example, speakers of Swedish can send a +message to `sv-request@li.org', having this message body: + + subscribe + + Keep in mind that team members are expected to participate +_actively_ in translations, or at solving translational difficulties, +rather than merely lurking around. If your team does not exist yet and +you want to start one, or if you are unsure about what to do or how to +get started, please write to `translation@iro.umontreal.ca' to reach the +coordinator for all translator teams. + + The English team is special. It works at improving and uniformizing +the terminology in use. Proven linguistic skill are praised more than +programming skill, here. + +Available Packages +================== + + Languages are not equally supported in all packages. The following +matrix shows the current state of internationalization, as of August +2002. The matrix shows, in regard of each package, for which languages +PO files have been submitted to translation coordination, with a +translation percentage of at least 50%. + + Ready PO files be bg ca cs da de el en eo es et fi fr + +----------------------------------------+ + a2ps | [] [] [] [] | + ap-utils | | + bash | [] [] [] [] | + bfd | [] [] | + binutils | [] [] | + bison | [] [] [] [] | + clisp | | + clisp | [] [] [] [] | + clisplow | | + cpio | [] [] [] [] | + darkstat | () | + diffutils | [] [] [] [] [] [] | + enscript | [] [] | + error | [] [] [] | + fetchmail | [] () [] [] [] () | + fileutils | [] [] [] [] [] | + findutils | [] [] [] [] [] [] | + flex | [] [] [] [] [] | + gas | [] [] | + gawk | [] [] [] | + gcal | [] [] | + gcc | [] [] | + gettext | [] [] [] [] [] | + gnupg | [] [] [] [] [] [] [] | + gprof | [] [] | + gpsdrive | () () () () () | + grep | [] [] [] [] [] [] [] [] | + gretl | [] | + gthumb | () () () | + hello | [] [] [] [] [] [] [] [] [] | + id-utils | [] [] [] | + indent | [] [] [] [] [] | + jpilot | () [] [] [] | + jwhois | [] [] | + kbd | [] [] [] | + ld | [] [] | + libc | [] [] [] [] [] [] [] [] | + libiconv | [] [] [] [] | + lifelines | () () | + lilypond | [] [] | + lingoteach | [] [] | + lingoteach_lessons| () () | + lynx | [] [] [] [] [] | + m4 | [] [] [] [] [] | + make | [] [] [] [] | + man-db | [] () () [] () () | + mysecretdiary | [] [] [] | + nano | [] () [] [] [] [] | + nano_1_0 | [] () [] [] [] [] | + opcodes | [] [] [] | + parted | [] [] [] [] [] | + ptx | [] [] [] [] [] [] [] | + python | | + recode | [] [] [] [] [] [] | + sed | [] [] [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] [] | + sharutils | [] [] [] [] [] [] [] | + sketch | () [] () | + soundtracker | [] [] [] | + sp | [] | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] [] [] | + textutils | [] [] [] [] [] | + util-linux | [] [] [] [] [] [] | + vorbis-tools | [] | + wastesedge | | + wdiff | [] [] [] [] [] [] | + wget | [] [] [] [] [] [] [] [] [] [] | + +----------------------------------------+ + be bg ca cs da de el en eo es et fi fr + 0 2 19 10 30 44 9 1 12 44 17 6 53 + + gl he hr hu id it ja ko lv nb nl nn + +-------------------------------------+ + a2ps | () () [] | + ap-utils | | + bash | [] | + bfd | [] | + binutils | [] | + bison | [] [] [] [] | + clisp | | + clisp | [] | + clisplow | | + cpio | [] [] [] [] | + darkstat | | + diffutils | [] [] [] [] [] | + enscript | [] [] | + error | [] | + fetchmail | [] | + fileutils | [] [] [] | + findutils | [] [] [] [] [] [] [] [] | + flex | [] | + gas | | + gawk | [] | + gcal | | + gcc | [] | + gettext | [] [] | + gnupg | [] [] [] [] | + gprof | [] | + gpsdrive | [] () () | + grep | [] [] [] [] [] [] [] | + gretl | | + gthumb | () () | + hello | [] [] [] [] [] [] [] [] [] [] [] [] | + id-utils | [] [] | + indent | [] [] [] [] | + jpilot | () () | + jwhois | [] [] | + kbd | | + ld | | + libc | [] [] [] [] | + libiconv | [] [] [] | + lifelines | | + lilypond | [] | + lingoteach | [] | + lingoteach_lessons| | + lynx | [] [] [] [] | + m4 | [] [] [] [] | + make | [] [] [] [] [] [] | + man-db | () () | + mysecretdiary | [] | + nano | [] [] [] [] | + nano_1_0 | [] [] [] [] [] | + opcodes | [] [] | + parted | [] [] [] | + ptx | [] [] [] [] [] | + python | | + recode | [] [] [] | + sed | [] [] [] [] [] [] [] [] | + sh-utils | [] [] [] | + sharutils | [] [] [] | + sketch | () | + soundtracker | [] [] | + sp | | + tar | [] [] [] [] [] [] | + texinfo | [] [] [] | + textutils | [] [] [] [] | + util-linux | () [] | + vorbis-tools | [] | + wastesedge | | + wdiff | [] [] [] | + wget | [] [] [] [] [] [] | + +-------------------------------------+ + gl he hr hu id it ja ko lv nb nl nn + 23 9 12 19 16 13 26 9 1 7 19 3 + + no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW + +----------------------------------------------+ + a2ps | () () () [] [] [] [] [] | 10 + ap-utils | () | 0 + bash | [] | 6 + bfd | [] [] | 5 + binutils | [] [] | 5 + bison | [] [] [] [] | 12 + clisp | | 0 + clisp | | 5 + clisplow | | 0 + cpio | [] [] [] [] | 12 + darkstat | [] [] () () | 2 + diffutils | [] [] [] [] [] [] | 17 + enscript | [] [] [] [] | 8 + error | [] [] [] | 7 + fetchmail | () () [] | 6 + fileutils | [] [] [] [] [] [] | 14 + findutils | [] [] [] [] [] [] [] | 21 + flex | [] [] [] | 9 + gas | [] | 3 + gawk | [] [] | 6 + gcal | [] [] | 4 + gcc | [] | 4 + gettext | [] [] [] [] [] [] | 13 + gnupg | [] [] [] | 14 + gprof | [] [] | 5 + gpsdrive | [] [] | 3 + grep | [] [] [] [] [] | 20 + gretl | | 1 + gthumb | () () [] | 1 + hello | [] [] [] [] [] [] [] | 28 + id-utils | [] [] [] [] | 9 + indent | [] [] [] [] [] | 14 + jpilot | () () [] [] | 5 + jwhois | [] () () [] [] | 7 + kbd | [] [] | 5 + ld | [] [] | 4 + libc | [] [] [] [] [] [] | 18 + libiconv | [] [] [] [] [] | 12 + lifelines | [] | 1 + lilypond | [] | 4 + lingoteach | [] [] | 5 + lingoteach_lessons| () | 0 + lynx | [] [] [] [] | 13 + m4 | [] [] [] [] | 13 + make | [] [] [] [] [] | 15 + man-db | | 3 + mysecretdiary | [] [] [] | 7 + nano | [] [] [] [] | 13 + nano_1_0 | [] [] [] [] | 14 + opcodes | [] [] [] | 8 + parted | [] [] [] [] | 12 + ptx | [] [] [] [] [] [] [] | 19 + python | | 0 + recode | [] [] [] [] [] [] | 15 + sed | [] [] [] [] [] [] | 24 + sh-utils | [] [] | 9 + sharutils | [] [] [] [] | 14 + sketch | [] () [] | 4 + soundtracker | [] | 6 + sp | | 1 + tar | [] [] [] [] [] [] [] | 19 + texinfo | [] [] | 10 + textutils | [] [] [] [] [] | 14 + util-linux | [] [] [] | 10 + vorbis-tools | [] | 3 + wastesedge | | 0 + wdiff | [] [] [] [] [] | 14 + wget | [] [] [] [] [] [] [] [] | 24 + +----------------------------------------------+ + 37 teams no pl pt pt_BR ru sk sl sv tr uk zh_CN zh_TW + 68 domains 4 15 2 28 28 12 10 49 43 4 1 9 609 + + Some counters in the preceding matrix are higher than the number of +visible blocks let us expect. This is because a few extra PO files are +used for implementing regional variants of languages, or language +dialects. + + For a PO file in the matrix above to be effective, the package to +which it applies should also have been internationalized and +distributed as such by its maintainer. There might be an observable +lag between the mere existence a PO file and its wide availability in a +distribution. + + If August 2002 seems to be old, you may fetch a more recent copy of +this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date +matrix with full percentage details can be found at +`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'. + +Using `gettext' in new packages +=============================== + + If you are writing a freely available program and want to +internationalize it you are welcome to use GNU `gettext' in your +package. Of course you have to respect the GNU Library General Public +License which covers the use of the GNU `gettext' library. This means +in particular that even non-free programs can use `libintl' as a shared +library, whereas only free software can use `libintl' as a static +library or use modified versions of `libintl'. + + Once the sources are changed appropriately and the setup can handle +to use of `gettext' the only thing missing are the translations. The +Free Translation Project is also available for packages which are not +developed inside the GNU project. Therefore the information given above +applies also for every other Free Software Project. Contact +`translation@iro.umontreal.ca' to make the `.pot' files available to +the translation teams. + diff --git a/Android.mk b/Android.mk new file mode 100644 index 0000000..5053e7d --- /dev/null +++ b/Android.mk @@ -0,0 +1 @@ +include $(call all-subdir-makefiles) diff --git a/CleanSpec.mk b/CleanSpec.mk new file mode 100644 index 0000000..ded4ceb --- /dev/null +++ b/CleanSpec.mk @@ -0,0 +1,51 @@ +# Copyright (C) 2007 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# If you don't need to do a full clean build but would like to touch +# a file or delete some intermediate files, add a clean step to the end +# of the list. These steps will only be run once, if they haven't been +# run before. +# +# E.g.: +# $(call add-clean-step, touch -c external/sqlite/sqlite3.h) +# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates) +# +# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with +# files that are missing or have been moved. +# +# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory. +# Use $(OUT_DIR) to refer to the "out" directory. +# +# If you need to re-do something that's already mentioned, just copy +# the command and add it to the bottom of the list. E.g., if a change +# that you made last week required touching a file and a change you +# made today requires touching the same file, just copy the old +# touch step and add it to the end of the list. +# +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +# For example: +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates) +#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates) +#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f) +#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*) + +# ************************************************ +# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST +# ************************************************ + +$(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/SHARED_LIBRARIES/libext2_uuid_intermediates) diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..b5afd2f --- /dev/null +++ b/INSTALL @@ -0,0 +1,69 @@ + To install the second extended file system management programs, +just follow the steps: + +1) Change directory into the top of the e2fsprogs source tree + +2) Create a build directory and cd into it: + + mkdir build; cd build + +3) Run the configure script + + ../configure + + If you wish to turn on ELF shared libraries, add the option +--enable-elf-shlibs. If you wish to build profiling libraries, add +the option --enable-profile. + + Note that if you are building on an older system (i.e., a 2.4 +kernel and/or glibc 2.2), the use of thread local storage will probably +cause programs that use the uuid library to core dump. To disable +thread local storage, use the configure option --disable-tls. + +4) Compile the programs + + make + +5) Check to make sure the installation built correctly: + + make check + +6) Install the programs + + Run `make install' + +7) Install the include files and libraries + + You can run `make install-libs' to install the include files and +libraries. Please note that this installation is not needed for the +programs to work. It is only needed if you expect to develop other +programs using the libraries or if you want to compile other program +using these libraries (like the 4.4BSD dump and restore port). + +8) Remove any pre-formatted man pages. + + Some distributions will have pre-formatted manual pages which +will always be displayed in preference to newer man pages in /usr/man. +If this is the case, you may need to manually remove them in order to +see the correct manual pages. The shell script in +install-utils/remove_preformat_manpages may be helpful in doing so. + +9) Make sure your /etc/fstab file is correct. + + Some distributions install an /etc/fstab which is missing the +fifth and sixth field of filesystem entry, which are the dump +frequency, and the fsck pass number, respectively. The problem with +this is that the getmntent() library routine interprets those missing +fields as "0", and a pass number of 0 is documented as meaning that +fsck should not check that particular filesystem. If your entries in +your /etc/fstab file look liks this: + +/dev/hda4 / ext2 defaults + +you should add "1 1" at the end of each line, so that they look like this: + +/dev/hda4 / ext2 defaults 1 1 + + There is a script in install-utils/convfstab (donated by +Michael Weller) that may help you correct your /etc/fstab file. + diff --git a/INSTALL.elfbin b/INSTALL.elfbin new file mode 100644 index 0000000..3f54aa1 --- /dev/null +++ b/INSTALL.elfbin @@ -0,0 +1,53 @@ +NOTE: This is the ELF version of the binary distribution. If you have +a DLL system, please compile e2fsprogs from sources yourself. (In +fact, in general you're better off compiling e2fsprogs from sources +instead of using precompiled binaries.) + +Also please note that these binaries assume the use of the GNU Libc. +If you're still using libc5, you'll need build e2fsprogs from source. + + To install the binary distribution of the second extended file +system management programs, just follow the steps: + +1) Install this tar file using the following command: + + gunzip < e2fsprogs-1.13-elfbin.tar.gz | (cd /; tar Sxvpf - ) + +2) Run ldconfig to update the shared library pointers. + + As root, type /sbin/ldconfig. This will update the links to +the shared libraries included in the distribution. You can then remove +the old versions of the libraries from /lib. + +3) Remove any pre-formatted man pages. + + Some distributions will have pre-formatted manual pages which +will always be displayed in preference to newer man pages in /usr/man. +If this is the case, you may need to manually remove them in order to +see the correct manual pages. The shell script in +install-utils/remove_preformat_manpages may be helpful in doing so. + +4) Make sure your /etc/fstab file is correct. + + Some distributions install an /etc/fstab which is missing the +fifth and sixth field of filesystem entry, which are the dump +frequency, and the fsck pass number, respectively. The problem with +this is that the getmntent() library routine interprets those missing +fields as "0", and a pass number of 0 is documented as meaning that +fsck should not check that particular filesystem. If your entries in +your /etc/fstab file look liks this: + +/dev/hda4 / ext2 defaults + +you should add "1 1" at the end of each line, so that they look like this: + +/dev/hda4 / ext2 defaults 1 1 + + There is a script in install-utils/convfstab (donated by +Michael Weller) that may help you correct your /etc/fstab file. + +5) Cleanup files from the installation. + + When you're done with the installation, you will probably want +to remove /INSTALL (this file), /README, and /install-utils from your +root directory diff --git a/MCONFIG.in b/MCONFIG.in new file mode 100644 index 0000000..e82963d --- /dev/null +++ b/MCONFIG.in @@ -0,0 +1,312 @@ +# Beginning of file MCONFIG + +all:: + +check:: + +SHELL = /bin/sh + +COMPRESS_EXT = gz bz2 bz Z + +prefix = @prefix@ +root_prefix = @root_prefix@ +exec_prefix = @exec_prefix@ +root_bindir = @root_bindir@ +root_sbindir = @root_sbindir@ +root_libdir = @root_libdir@ +datarootdir = @datarootdir@ +bindir = @bindir@ +sbindir = @sbindir@ +libdir = @libdir@ +datadir= @datadir@ +localedir = $(datadir)/locale +root_sysconfdir= @root_sysconfdir@ +includedir = @includedir@ +mandir = @mandir@ +man1dir = $(mandir)/man1 +man3dir = $(mandir)/man3 +man5dir = $(mandir)/man5 +man8dir = $(mandir)/man8 +infodir = @infodir@ +datadir = @datadir@ +pkgconfigdir = $(libdir)/pkgconfig + +@SET_MAKE@ + +@ifGNUmake@ V = +@ifGNUmake@ ifeq ($(strip $(V)),) +@ifGNUmake@ # E = @echo +@ifGNUmake@ # ES = echo +@ifGNUmake@ # Q = @ +@ifGNUmake@ E = @E@ +@ifGNUmake@ ES = @ES@ +@ifGNUmake@ Q = @Q@ +@ifGNUmake@ else +@ifGNUmake@ E = @\# +@ifGNUmake@ ES = \# +@ifGNUmake@ Q = +@ifGNUmake@ endif + +@ifNotGNUmake@ E = @E@ +@ifNotGNUmake@ ES = @ES@ +@ifNotGNUmake@ Q = @Q@ + +@ifGNUmake@ CHECK=sparse +@ifGNUmake@ CHECK_OPTS=-Wsparse-all -Wno-transparent-union -Wno-return-void -Wno-undef -Wno-non-pointer-null +@ifGNUmake@ CPPCHECK=cppcheck +@ifGNUmake@ CPPCHECK_OPTS=--force --enable=all --quiet +@ifGNUmake@ ifeq ("$(C)", "2") +@ifGNUmake@ CHECK_CMD=$(CHECK) $(CHECK_OPTS) -Wbitwise -D__CHECK_ENDIAN__ +@ifGNUmake@ CPPCHECK_CMD=$(CPPCHECK) $(CPPCHECK_OPTS) +@ifGNUmake@ else +@ifGNUmake@ ifeq ("$(C)", "1") +@ifGNUmake@ CHECK_CMD=$(CHECK) $(CHECK_OPTS) +@ifGNUmake@ CPPCHECK_CMD=$(CPPCHECK) $(CPPCHECK_OPTS) +@ifGNUmake@ else +@ifGNUmake@ CHECK_CMD=@true +@ifGNUmake@ CPPCHECK_CMD=@true +@ifGNUmake@ endif +@ifGNUmake@ endif + +@ifNotGNUmake@ CHECK_CMD=true +@ifNotGNUmake@ CPPCHECK_CMD=true + +CC = @CC@ +BUILD_CC = @BUILD_CC@ +CFLAGS = @CFLAGS@ +CFLAGS_SHLIB = @CFLAGS_SHLIB@ +CFLAGS_STLIB = @CFLAGS_STLIB@ +CPPFLAGS = @INCLUDES@ +ALL_CFLAGS = $(CPPFLAGS) $(CFLAGS) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS) +ALL_CFLAGS_SHLIB = $(CPPFLAGS) $(CFLAGS_SHLIB) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS) +ALL_CFLAGS_STLIB = $(CPPFLAGS) $(CFLAGS_STLIB) $(CFLAGS_WARN) @DEFS@ $(LOCAL_CFLAGS) +LDFLAGS = @LDFLAGS@ +LDFLAGS_SHLIB = @LDFLAGS_SHLIB@ +ALL_LDFLAGS = $(LDFLAGS) @LDFLAG_DYNAMIC@ +LDFLAGS_STATIC = @LDFLAGS_STATIC@ +BUILD_CFLAGS = @BUILD_CFLAGS@ +BUILD_LDFLAGS = @BUILD_LDFLAGS@ +RDYNAMIC = @RDYNAMIC@ +LINK_BUILD_FLAGS = @LINK_BUILD_FLAGS@ +LINK_INSTALL_FLAGS = @LINK_INSTALL_FLAGS@ +RM = @RM@ +LN = @LN@ +LN_S = @LN_S@ +MV = @MV@ +CP = @CP@ +CHMOD = @CHMOD@ +AR = @AR@ +AWK = @AWK@ +SED = @SED@ +PERL = @PERL@ +RANLIB = @RANLIB@ +STRIP = @STRIP@ +LD = $(PURE) @CC@ +ARUPD = $(AR) r +ARGEN = $(AR) rc +LDCONFIG = @LDCONFIG@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +MKINSTALLDIRS = @MKINSTALLDIRS@ + +# +# Library definitions +# +LIB = $(top_builddir)/lib +LIBSS = $(LIB)/libss@LIB_EXT@ @PRIVATE_LIBS_CMT@ @DLOPEN_LIB@ +LIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@ @PRIVATE_LIBS_CMT@ @SEM_INIT_LIB@ +LIBE2P = $(LIB)/libe2p@LIB_EXT@ +LIBEXT2FS = $(LIB)/libext2fs@LIB_EXT@ +LIBUUID = @LIBUUID@ @SOCKET_LIB@ +LIBMAGIC = @MAGIC_LIB@ +LIBFUSE = @FUSE_LIB@ +LIBSUPPORT = $(LIBINTL) $(LIB)/libsupport@STATIC_LIB_EXT@ +LIBBLKID = @LIBBLKID@ @PRIVATE_LIBS_CMT@ $(LIBUUID) +LIBINTL = @LIBINTL@ +SYSLIBS = @LIBS@ +DEPLIBSS = $(LIB)/libss@LIB_EXT@ +DEPLIBCOM_ERR = $(LIB)/libcom_err@LIB_EXT@ +DEPLIBUUID = @DEPLIBUUID@ +DEPLIBSUPPORT = $(LIB)/libsupport@STATIC_LIB_EXT@ +DEPLIBBLKID = @DEPLIBBLKID@ @PRIVATE_LIBS_CMT@ $(DEPLIBUUID) +TESTENV = LD_LIBRARY_PATH="$(LIB):$${LD_LIBRARY_PATH}" DYLD_LIBRARY_PATH="$(LIB):$${DYLD_LIBRARY_PATH}" + +STATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@ @DLOPEN_LIB@ +STATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@ @SEM_INIT_LIB@ +STATIC_LIBE2P = $(LIB)/libe2p@STATIC_LIB_EXT@ +STATIC_LIBEXT2FS = $(LIB)/libext2fs@STATIC_LIB_EXT@ +STATIC_LIBUUID = @STATIC_LIBUUID@ @SOCKET_LIB@ +STATIC_LIBSUPPORT = $(LIBINTL) $(LIBSUPPORT) +STATIC_LIBBLKID = @STATIC_LIBBLKID@ $(STATIC_LIBUUID) +DEPSTATIC_LIBSS = $(LIB)/libss@STATIC_LIB_EXT@ +DEPSTATIC_LIBCOM_ERR = $(LIB)/libcom_err@STATIC_LIB_EXT@ +DEPSTATIC_LIBUUID = @DEPSTATIC_LIBUUID@ +DEPSTATIC_LIBSUPPORT = $(DEPLIBSUPPORT) +DEPSTATIC_LIBBLKID = @DEPSTATIC_LIBBLKID@ $(DEPSTATIC_LIBUUID) + +PROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@ @DLOPEN_LIB@ +PROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@ @SEM_INIT_LIB@ +PROFILED_LIBE2P = $(LIB)/libe2p@PROFILED_LIB_EXT@ +PROFILED_LIBEXT2FS = $(LIB)/libext2fs@PROFILED_LIB_EXT@ +PROFILED_LIBUUID = @PROFILED_LIBUUID@ @SOCKET_LIB@ +PROFILED_LIBSUPPORT = $(LIBINTL) $(LIB)/libsupport@PROFILED_LIB_EXT@ +PROFILED_LIBBLKID = @PROFILED_LIBBLKID@ $(PROFILED_LIBUUID) +DEPPROFILED_LIBSS = $(LIB)/libss@PROFILED_LIB_EXT@ +DEPPROFILED_LIBCOM_ERR = $(LIB)/libcom_err@PROFILED_LIB_EXT@ +DEPPROFILED_LIBUUID = @PROFILED_LIBUUID@ +DEPPROFILED_LIBSUPPORT = $(PROFILED_LIBSUPPORT) +DEPPROFILED_LIBBLKID = @PROFILED_LIBBLKID@ $(DEPPROFILED_LIBUUID) + +# +# A fast substitution command for fixing up man pages, shell scripts, etc. +# +SUBST_CONF=$(top_builddir)/util/subst.conf +SUBSTITUTE= $(top_builddir)/util/subst -f $(SUBST_CONF) +SUBSTITUTE_UPTIME= $(top_builddir)/util/subst -t -f $(SUBST_CONF) +DEP_SUBSTITUTE= $(top_builddir)/util/subst $(SUBST_CONF) + +$(top_builddir)/util/subst: + cd $(top_builddir)/util ; $(MAKE) subst + +# +# Script for installing symlinks (for shared libraries) +# +$(top_builddir)/util/install-symlink: $(top_srcdir)/util/install-symlink.in \ + $(top_builddir)/config.status + cd $(top_builddir); CONFIG_FILES=util/install-symlink ./config.status + chmod +x $(top_builddir)/util/install-symlink + +$(top_builddir)/util/symlinks: + cd $(top_builddir)/util ; $(MAKE) symlinks + +INSTALL_SYMLINK = /bin/sh $(top_builddir)/util/install-symlink \ + @SYMLINK_RELATIVE@ \ + --symlinks=$(top_builddir)/util/symlinks +DEP_INSTALL_SYMLINK = $(top_builddir)/util/install-symlink \ + $(top_builddir)/util/symlinks + +# +# Warning flags +# +# Run make gcc-wall to do a build with warning messages. +# +# +WFLAGS= -std=gnu99 -D_XOPEN_SOURCE=600 -D_GNU_SOURCE \ + -pedantic $(WFLAGS_EXTRA) \ + -Wall -W -Wwrite-strings -Wpointer-arith \ + -Wcast-qual -Wcast-align -Wno-variadic-macros \ + -Wstrict-prototypes -Wmissing-prototypes \ + -Wformat-security -Wformat-nonliteral \ + -Wmissing-format-attribute -O2 -Wstrict-aliasing \ + -Wnested-externs -Winline -DNO_INLINE_FUNCS -Wshadow \ + -UENABLE_NLS + +gcc-wall-new: + ($(MAKE) CFLAGS_WARN="$(WFLAGS)" > /dev/null) 2>&1 | sed -f $(top_srcdir)/util/gcc-wall-cleanup + +gcc-wall: + $(MAKE) clean > /dev/null + $(MAKE) gcc-wall-new + +static-check: + ($(MAKE) C=1 V=1 CFLAGS="$(ALL_CFLAGS) $(WFLAGS)") 2>&1 | sed -f $(top_srcdir)/util/static-analysis-cleanup + +static-check-all: + $(MAKE) clean > /dev/null + $(MAKE) static-check + +# +# 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 + +# +# Autoconf magic... +# + +DEP_LIB_MAKEFILES = $(top_srcdir)/lib/Makefile.library \ + $(top_srcdir)/lib/Makefile.elf-lib \ + $(top_srcdir)/lib/Makefile.bsd-lib \ + $(top_srcdir)/lib/Makefile.darwin-lib \ + $(top_srcdir)/lib/Makefile.solaris-lib \ + $(top_srcdir)/lib/Makefile.profile + +$(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/config.h: $(top_srcdir)/lib/config.h.in \ + $(top_builddir)/config.status + cd $(top_builddir); CONFIG_FILES=lib/config.h ./config.status + +$(top_builddir)/lib/dirpaths.h: $(DEP_SUBSTITUTE) $(top_srcdir)/lib/dirpaths.h.in + $(E) " SUBST $@" + $(Q) $(SUBSTITUTE) $(top_srcdir)/lib/dirpaths.h.in $@ + +$(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 + +$(top_builddir)/util/subst.conf: $(top_srcdir)/util/subst.conf.in \ + $(top_builddir)/config.status + cd $(top_builddir); CONFIG_FILES=util/subst.conf ./config.status + +Makefile: $(srcdir)/Makefile.in $(top_builddir)/MCONFIG \ + $(DEP_MAKEFILE) $(top_builddir)/config.status + cd $(top_builddir); CONFIG_FILES=$(my_dir)/Makefile ./config.status + +@MAINTAINER_CMT@$(top_srcdir)/configure: $(top_srcdir)/configure.ac +@MAINTAINER_CMT@ cd $(top_srcdir) && autoheader && autoconf + +coverage.txt: Makefile $(SRCS) + if test -n "$(SRCS)"; then \ + gcov -s $(top_srcdir) -o . $(SRCS) > coverage.txt 2>&1 ; \ + fi + +clean:: + $(RM) -f *.gcda *.gcov *.gcno coverage.txt + +# +# Make depend magic... +# + +.depend: Makefile $(SRCS) $(top_srcdir)/depfix.sed $(top_srcdir)/wordwrap.pl + if test -n "$(SRCS)" ; then \ + $(CC) -M $(ALL_CFLAGS) $(DEPEND_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' \ + -e '/^ *\\$$/d' | \ + $(PERL) $(top_srcdir)/wordwrap.pl > .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; \ + if cmp -s $(srcdir)/Makefile.in $(srcdir)/Makefile.in.new ; then \ + $(RM) $(srcdir)/Makefile.in.new ; \ + else \ + $(MV) $(srcdir)/Makefile.in $(srcdir)/Makefile.in.old; \ + $(MV) $(srcdir)/Makefile.in.new $(srcdir)/Makefile.in; \ + fi ; else :; fi + +# End of file MCONFIG diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..7da9ad7 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,153 @@ +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +top_builddir = . +my_dir = . +INSTALL = @INSTALL@ + +@MCONFIG@ + +% : %.sh + +@RESIZER_CMT@RESIZE_DIR= resize +@DEBUGFS_CMT@DEBUGFS_DIR= debugfs +@UUID_CMT@UUID_LIB_SUBDIR= lib/uuid +@BLKID_CMT@BLKID_LIB_SUBDIR= lib/blkid +SUPPORT_LIB_SUBDIR= lib/support + +LIB_SUBDIRS=lib/et lib/ss lib/e2p $(UUID_LIB_SUBDIR) $(BLKID_LIB_SUBDIR) $(SUPPORT_LIB_SUBDIR) lib/ext2fs intl +PROG_SUBDIRS=e2fsck $(DEBUGFS_DIR) misc $(RESIZE_DIR) tests/progs po +SUBDIRS=util $(LIB_SUBDIRS) $(PROG_SUBDIRS) tests + +SUBS= util/subst.conf lib/config.h $(top_builddir)/lib/dirpaths.h \ + lib/ext2fs/ext2_types.h lib/blkid/blkid_types.h lib/uuid/uuid_types.h + +TAR=tar + +all:: subs + $(MAKE) libs + $(MAKE) progs + $(MAKE) docs + +subs: $(DEP_SUBSTITUTE) + @for i in $(SUBS) ; do if test -d `dirname $$i` ; \ + then $(MAKE) $$i || exit $$? ; fi ; done + @(if test -d lib/et ; then cd lib/et && $(MAKE) compile_et; fi) + @(if test -d lib/ext2fs ; then cd lib/ext2fs && $(MAKE) ext2_err.h; fi) + @(if test -d lib/support ; then cd lib/support && $(MAKE) prof_err.h; fi) + +progs: all-progs-recursive +libs: all-libs-recursive +all-progs-recursive all-libs-recursive: subs + +e2fsprogs.spec: $(DEP_SUBSTITUTE) e2fsprogs.spec.in + cd $(top_builddir); CONFIG_FILES=./e2fsprogs.spec ./config.status + +rpm: e2fsprogs.spec + sh contrib/build-rpm + +docs: + -@test -d doc && cd doc && $(MAKE) libext2fs.info + +install-doc-libs: + -@test -d doc && cd doc && $(MAKE) install-doc-libs + +uninstall-doc-libs: + -@test -d doc && cd doc && $(MAKE) uninstall-doc-libs + +clean-doc: + -@test -d doc && cd doc && $(MAKE) clean + +distclean-doc: + -test -d doc && cd doc && $(MAKE) distclean + +install: subs all-libs-recursive install-progs-recursive \ + install-shlibs-libs-recursive install-doc-libs + if test ! -d e2fsck && test ! -d debugfs && test ! -d misc && test ! -d ext2ed ; then $(MAKE) install-libs ; fi + +install-strip: subs all-libs-recursive install-strip-progs-recursive \ + install-shlibs-strip-libs-recursive install-doc-libs + +uninstall: uninstall-progs-recursive uninstall-shlibs-libs-recursive uninstall-doc-libs + +install-libs: install-libs-recursive + +uninstall-libs: uninstall-libs-recursive + +coverage.txt: coverage.txt-recursive + +check-recursive: all + +TAGS clean-recursive distclean-recursive depend-recursive check-recursive \ + mostlyclean-recursive realclean-recursive coverage.txt-recursive: + @for subdir in $(SUBDIRS); do \ + if test -d $$subdir ; then \ + target=`echo $@|$(SED) 's/-recursive//'`; \ + echo making $$target in $$subdir; \ + (cd $$subdir && $(MAKE) $$target) || exit 1; \ + fi ; \ + done + +all-progs-recursive install-progs-recursive install-strip-progs-recursive \ + uninstall-progs-recursive coverage.txt-progs-recursive: all-libs-recursive + @for subdir in $(PROG_SUBDIRS); do \ + if test -d $$subdir ; then \ + target=`echo $@|$(SED) 's/-progs-recursive//'`; \ + echo making $$target in $$subdir; \ + (cd $$subdir && $(MAKE) $$target) || exit 1; \ + fi ; \ + done + +all-libs-recursive install-libs-recursive install-strip-libs-recursive \ + uninstall-libs-recursive install-shlibs-libs-recursive \ + install-shlibs-strip-libs-recursive uninstall-shlibs-libs-recursive \ + coverage.txt-libs-recursive: + @for subdir in $(LIB_SUBDIRS); do \ + if test -d $$subdir ; then \ + target=`echo $@|$(SED) 's/-libs-recursive//'`; \ + echo making $$target in $$subdir; \ + (cd $$subdir && $(MAKE) $$target) || exit 1; \ + fi ; \ + done + +mostlyclean: mostlyclean-recursive mostlyclean-local + +clean:: clean-recursive clean-local clean-doc + $(RM) -f $(SUBS) + +distclean: distclean-doc distclean-recursive + $(RM) -rf autom4te.cache e2fsprogs.spec ext2ed/Makefile po/stamp-po \ + asm_types.h config.log public_config.h parse-types.log + $(MAKE) distclean-local + +realclean: realclean-recursive realclean-local + +depend:: depend-recursive + +lib/ext2fs/ext2_types.h: $(DEP_SUBSTITUTE) asm_types.h \ + $(srcdir)/lib/ext2fs/ext2_types.h.in + cd $(top_builddir); CONFIG_FILES=./lib/ext2fs/ext2_types.h ./config.status + +lib/blkid/blkid_types.h: $(DEP_SUBSTITUTE) asm_types.h \ + $(srcdir)/lib/blkid/blkid_types.h.in + cd $(top_builddir); CONFIG_FILES=./lib/blkid/blkid_types.h ./config.status + +lib/uuid/uuid_types.h: $(DEP_SUBSTITUTE) asm_types.h \ + $(srcdir)/lib/uuid/uuid_types.h.in + cd $(top_builddir); CONFIG_FILES=./lib/uuid/uuid_types.h ./config.status + +mostlyclean-local: + $(RM) -f \#* *~ *.orig core MAKELOG + +clean-local: mostlyclean-local + +distclean-local: clean-local + $(RM) -f $(SUBS) $(SUBST_CONF) \ + config.status config.log config.cache MCONFIG Makefile \ + $(srcdir)/TAGS $(srcdir)/Makefile.in.old + +realclean-local: distclean-local + $(RM) -f configure + +check:: all check-recursive + diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..dd1227b --- /dev/null +++ b/NOTICE @@ -0,0 +1,849 @@ +This package, the EXT2 filesystem utilities, are made available under +the GNU Public License version 2, with the exception of the lib/ext2fs +and lib/e2p libraries, which are made available under the GNU Library +General Public License Version 2, the lib/uuid library which is made +available under a BSD-style license and the lib/et and lib/ss +libraries which are made available under an MIT-style license. Please +see lib/uuid/COPYING for more details for the license for the files +comprising the libuuid library, and the source file headers of the +libet and libss libraries for more information. + +The most recent officially distributed version can be found at +http://e2fsprogs.sourceforge.net. If you need to make a distribution, +that's the one you should use. If there is some reason why you'd like +a more recent version that is still in ALPHA testing (i.e., either +using the "WIP" test distributions or one from the hg or git +repository from the development branch, please contact me +(tytso@mit.edu) before you ship. The release schedules for this +package are flexible, if you give me enough lead time. + + + Theodore Ts'o + 23-June-2007 + +---------------------------------------------------------------------- + + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. + +---------------------------------------------------------------------- + + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + , 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/README b/README new file mode 100644 index 0000000..096e3f4 --- /dev/null +++ b/README @@ -0,0 +1,19 @@ + This is the new version (1.43.4) of the second extended file +system management programs. + + From time to time, I release new versions of e2fsprogs, to fix +bugs and to make the utilities more robust. You can always find +information about the latest version at the the e2fsprogs web page, +which is: + + http://e2fsprogs.sourceforge.net + + The INSTALL file has instructions on building and installing +e2fsprogs. Provisions for building Red Hat RPMs and Debian dpkg files +are supplied as well. + + In case of bugs in these programs, please contact Ted Ts'o at +tytso@mit.edu or tytso@alum.mit.edu. See the e2fsck man page for +suggestions of what sort of information to include when submitting bug +reports for these programs. + diff --git a/RELEASE-NOTES b/RELEASE-NOTES new file mode 100644 index 0000000..fcbe8db --- /dev/null +++ b/RELEASE-NOTES @@ -0,0 +1,8415 @@ +E2fsprogs 1.43.4 (January 31, 2017) +=================================== + +Fix e2fsck to require that the system.data extended attribute is +always present even for files smaller than 60 bytes, to be consistent +with the kernel. + +Fix a bug which was causing mke2fs -d and fuse2fs to improperly handle +Posix ACL's. + +Fix a bug which could cause mke2fs -d to fail if there is an +zero-length file in source directory tree. + +Clarify the default for the "proceed?" question printed by mke2fs and +tune2fs. (Addresses Debian Bug: #852727) + +Debugfs will now display project quota information. + +Debugfs's do_set_xattr now uses C strings to parse extended attribute +values, and will print the extended attributes using either C strings +or hex bytes when using debugfs's do_get_xattr command. It will now +allow developers to see the contents of the system.data extended +attribute. + +Fix a bug in mke2fs where I/O errors weren't getting properly reported +to the user. + +Fix multiblock writes in the unaligned Direct I/O fallback code. +(Which is rarely needed on Linux systems, but which is required on +Freebsd systems.) + +Make sure the default mke2fs.conf file includes the uninit_bg feature +flag. (Which was accidentally dropped in v1.43). + +Fix a bug in resize2fs when operating on very large file systems which +have a block size different from the VM page size. + +If the reported device size is absurdly large, mke2fs will now report +an error instead looping forever or crashing. + +Fix various Coverity warnings and other memory leaks in fuse2fs and +extended attribute manipulation functions. + +Replace a test file but which had a "non-commercial use-only" +copyright permission file with a newer version from the Cyrus imapd +package which now has a 4-clause BSD license, which was making some +lawyers nervous, even though the test file in question was only used +in lib/et's regression testing and was never included in any compiled +binary. (Addresses Debian Bug: #840733) + +Stop installing mkfs.ext4dev and fsck.ext4dev + +Update Chinese, Czech, Polish, Serbian, and Spanish translations and +add the Finnish and Malay translation. (Addresses-Debian-Bug: #774379) + +Update various man pages (Addresses-Debian-Bug: #852726) + +Programming notes +----------------- + +Fix more FreeBSD-11 compatibility bugs, including some unmasked by +FreeBSD 11-rc2. + +Fix the Mac build. + +Fix build failure on RHEL 5.x systems caused by an old version of +libmagic. + +Fix a number of bugs reported by ASAN that can cause some (mostly +harmless) memory dereferences beyond allocated memory. + + +E2fsprogs 1.43.3 (September 4, 2016) +==================================== + +Fix e2fsck's handling of timestamps on 32-bit systems. + +E2fsck will now check, and if necessary repair the extra isize fields +in the inode and superblock. + +Fix crashes on architectures such as sparc64 that are sensitive to +unaligned pointer derferences in the journal recovery code when +journal checksums are enabled. + +Programming notes +----------------- + +Support reproducible builds by not capturing the build directory into +the mk_cmds and compile_et scripts. Also fix debian build rules to +ensure build reproducibility. + +Fix debian build rules to ensure build reproducibility and to avoid +hiding the linker flags for e2fsck.static so the build hardening log +scanner can properly audit the build. + +Fix compatibility with FreeBSD's pmake and teach the configure script +to force the creation of pmake-compatible Makefiles if the +FORCE_NATIVE_MAKE environment variable is set to a non-empty value. + + +E2fsprogs 1.43.2 (September 1, 2016) +==================================== + +Fix resize2fs so it will not crash if there is an extended attribute +block but it doesn't need to migate any blocks during an off-line +resize + +Fix a crash when mke2fs or debugfs tries to copy in a directory +hierarchy containing an empty directory + +Mke2fs will now use a larger journal by default for filesystems +greater than 128 GB. (1GB instead of 128 MB.) + +Fix an alignment bug in e2fsck which caused sparc64 architectures to +crash when replaying the journal on file systems with a 64-bit block +number. + +Clarify the message printed by tune2fs message when the user needs to +run e2fsck so it's clear that the -f flag to e2fsck is needed to +force a full e2fsck scan. (Addresses Debian Bug: #828022) + +Fix a bug in e2fsck caused by a power failure during e2fsck's journal +replay could leave the file system in a state where if the file system +is mounted without doing a full e2fsck scan, the file system could get +corrupted + +Fix the logic in e2fsck which decides when to repair legacy negative +timestamp encodings. + +Add a command to debugfs to copy the inode structure from one inode to +another. + +Fix a typo in debugfs's stat command when printing out the dtime field +on file systems with an extended timestamp. + +Fix big endian bugs in the e2undo program. (Addresses Red Hat Bug +#1344636) + +Debugfs's logdump can now properly handle journals larger than 2GB. + +Avoid installing the man page for fuse2fs if it has not been built. + +Update the Catalan, Chinese, Danish, Dutch, French, German, Polish, +Swedish, Ukrainian translations and added new translations for +Hugarian and Serbian. + + +Programming notes +----------------- + +Fix portability problems in fuse2fs. Previously it wouldn't build on +systems with older glibc versions where clock_gettime() is only +available in the librt library, and if libintl is not bundled into the +C library. + +Remove complicated logic which caused a static code analyzer to flag a +false positive. (A static code analyzer also found a valid bug in +deciding when to repair a legacy negative timestamp encoding, so +eliminating false positives is important.) + +Fixed a bug where the ext2fs library cloud provoke when a +extfs2_zero_blocks() is used (via fallocation, initializing a file +system, uninitialized uninitialized inode table blocks) after a +different file system which also used ext2fs_zero_blocks(). + +Enable the unix_io manager in the ext2fs library so it can accept the +use of a file descriptor. This is helpful in cases where the file +descriptor comes from temporary file created using O_TMPFILE, or +passed in from a unix domain socket. + +Fix a Windows64 portability bug. + + +E2fsprogs 1.43.1 (June 8, 2016) +=============================== + +Fixed e2fsck so that it would correctly update the project quota usage +when deleting a corrupted and inode, and fixed mke2fs so it wouldn't +dereference memory beyond the small inode structure (which was wrong, +but worked mostly by accident unless hardening or some security malloc +was in use). + +Fixed a large number of FreeBSD portability problems. (To build on +FreeBSD, however, we still need to use GNU Make and redirect dd to use +GNU dd.) + +The configure script now supports --enable-hardening, which enables +stack protection, fortify, read-only relocation tables, immediate +dynamic symbol binding, and text segment ASLR (if the kernel has +userspace ASLR support enabled) by enabling position independent +executable code. (Distributions who want to do their own special +thing can set CFLAGS, CFLAGS_SHLIB, CLFAGS_STLIB, LDFLAGS, +LDFLAGS_SHLIB and LDFLAGS_STATIC as appropriate.) + +The configure script now supports --disable-tdb since on 64-bit +systems, it's much faster to just enable additional swap space. The +scratch_files feature in e2fsck.conf is mostly only useful on 32-bit +systems. + +Fixed the Direct I/O fallback codepath in the Unix I/O manager so that +read/modify/write worked correctly. Fortunately in practice (with the +exception of the Undo handler when running on FreeBSD) used this buggy +codepath. so file systems weren't getting corrupted. + +Mke2fs will now warn if the user provides a label which is too long. +(Addresses Debian Bug: #791630) + +Debugfs's rdump command now works correctly when dumping the root +directory of a file system. (Addresses Debian Bug: #766125) + +Fixed a bug in debugfs so it would correctly calculate a block group's +checksum field field on 64-bit ssystems. + +E2fsck now has a much more understandable error message when the +journal superblock is corrupt and the user declines to fix it. +(Addresses Debian Bug: #768162) + +Fixed support of extended timestamps on 64-bit systems. + +Updated/fixed various man pages. (Addresses Debian Bugs: #766379, +#761144, #770750, #428361, #766127) + +Fixed various Debian Packaging Issues. (Addresses Debian Bug: #825868) + + +Programming notes +----------------- + +Fixed coverity, sparse, gcc -Wall, and clang warnings/nits. + +Fixed Android build makefiles (which was missing a newly added file in +lib/support). + +In general, checks on s_creator_os have been removed in favor of +feature flag specific checks; if there is something that can't be +checked via the presence of a feature flag, we will simply check +whether the creator OS is *not* EXT2_OS_HURD which is the one +operating system where there has been extensive abuse of the +s_creator_os flag. + +The libmagic libary has been suppressed when running the regression +test suite to avoid false test failures caused by differences between +versions of libmagic (and/or the magic number database). + +The tests/test_script progam now accepts the --failed option, which +will run those tests that had previously failed. + +Fixed tests build on those systems which require LDFLAGS to be set. + +Fixed the regression test suite so it will properly filter out version +numbers with two components (such as 1.43) from log files before +comparing them with the expected golden output. + + +E2fsprogs 1.43 (May 17, 2016) +============================= + +Add support for the ext4 metadata checksum, checksum seed, inline +data, encryption, project quota, and read-only features. + +Support for the very old, experimental, and never-added-to-mainline +compression feature has been removed. + +Mke2fs will now create file systems with the metadata_csum and 64bit +features enabled by default. + +The mke2fs program will now support multiple -O options (instead of +just ignoring all but the last -O option). + +Mke2fs will now correctly determine the size of a file system and +handle the discard operation correctly when the "-E offset=NNN" is +used. (Addresses Debian Bug: #803629) + +The tune2fs program will ask the user for confirmation before starting +dangerous operations if the terminal is available, and it will replay +the journal if necessary. + +Add an ext2/3/4 FUSE server + +Debugfs can now modify extended attributes and journal transactions. + +Debugfs now can properly display and set extended timestamps. + +E2fsck will offer to fix extended timestamps that were incorrectly +encoded by older kernels. + +Fix miscellaneous MMP bugs in debugfs. + +Fix sparse_super2 bugs in mke2fs and resize2fs. + +Fix or improve offset support in mke2fs, e2undo, and libext2fs. + +The resize2fs command can now convert file systems between 64-bit and +32-bit mode. + +Fix potential out-of-bounds memory access in resize2fs when doing a +large off-line file system grow operation. + +We now use a new e2undo file format which is much more efficient and +faster than the old tdb-based scheme. Since it so much faster, +e2fsck, tune2fs, debugfs, and resize2fs now also can support using +creating an undo file. + +The mke2fs command can now set the error behavior when initializing +the file system (so the administrator doesn't have to issue a separate +tune2fs -e command). + +Teach mke2fs to parse a human-readable argument for -i option. + +Teach mke2fs to automatically handle creating file systems > 500T by +automatically enable the meta_bg feature. + +Mke2fs will now prompt for user verification before rewriting a file +system's superblock using the -S option. + +Mke2fs no longer complains if the user tries to create a file system +using the entire block device (e.g., without using a partition). The +minor number convention is not used by all block devices, and it's +quite normal in some circumstances to create a file system on /dev/sdc +instead of /dev/sdc1. + +Fix an "mke2fs -d" bug which could create inodes with invalid +extended attribute blocks + +E2fsck is now much more paranoid about not freeing or corrupting +critical metadata blocks, such as inode table blocks, even if +corrupted indirect blocks or extent trees point at these blocks. + +E2fsck now prints block ranges in pass1b instead of listing all of the +blocks exhaustively. + +E2fsck will try to expand the root directory if the lost+found can't +be linked to the root directory. Also, offer to use the root +directory if lost+found can't be created. + +E2fsck is now more paranoid handling corrupted extent trees as well as +corrupted journals. + +E2fsck can now rebuild extent trees, either (a) to optimize them, (b) +to recover from a corrupted extent tree, or (c) to convert +block-mapped inodes to use extents. + +E2fsck now has a readahead mechanism which can significantly speed its +performance, especially on RAID arrays. + +E2fsck now has a "yes to all" option which the user can give if she is +tired of answering 'y' to a very large number of questions. + +E2fsck will now ignore the badblocks inode if the contents of the +badblocks inode indicate that the portion inode table containing the +badblocks inode is bad. (We must go deeper...) + +E2fsck can now correctly fix directory with holes on bigalloc file +systems. + +E2fsck will now check for extent mapped inodes with no extent header +and clear them if found. + +E2fsck now checks to make sure the extended attribute header doesn't +result in the xattr extending beyond the bounds of the inode + +Fixed a bug in e2fsck to avoid overrunning a buffer containing jbd2 +revoke records if the journal is corrupted. + +Fixed a bug in e2fsck which could cause it loop forever if a special +inode has too many invalid block mappings. + +Fixed a bug in e2fsck which could cause pass1b/c/d processing to get +confused if an attempt to allocate a block can't find any free space +in the file system. + +E2fsck will no longer try to force rewrite blocks located beyond the +file system. + +The e2fsck program will no longer update the quota inodes when it is +interrupted. + +Fix a bug which in rare cases would cause e2fsck -fD to corrupt an +extent-mapped directory. + +Fixed a bug in resize2fs which could lead to resize2fs crashing or a +corrupted file system if the file system is almost completely full +when trying grow a file system and we need to allocate blocks to grow +the block group descriptors. + +Fixed a bug in resize2fs which could cause it to get fooled trying to +determinthe the RAID array's stride when flex_bg is enabled. + +Fix resize2fs bug that could leave block allocation bitmaps +uninitialized. + +The dumpe2fs output has been improved so it is cleaner and always fits +within 80 columns. Also added a more easily machine-parsable output +of dumpe2fs. + +The mke2fs program can now pre-populate a file system from a directory +hierarchy using the -d option. + +The mke2fs program now skips zeroing inode table blocks if they were +already zeroed using the discard feature. + +Check to make sure file system features which can not be supported by +HURD are not enabled if the file system is created to be +HURD-compatible. + +Added a new e2fuzz command that will fuzz an ext4 image for testing +purposes. + +The debugfs logdump command can now deal with 64-bit revoke tables +correctly. Also, "logdump -O" will print the old log contents (before +the journal was replayed). + +The debugfs bmap command can now be used to set or allocate a physical +block. + +Fixed a bug so "filefrag -B -e -v" does not return a separate entry +for each block. + +The filefrag program now accounts for holes in sparse files created by +the file punch operation as an expected/optimal mapping. + +The file I/O functions now correctly handle inodes containing +uninitialized blocks. + +Fix a bug in tune2fs so that removing uninit_bg feature on a bigalloc +file system won't result in corrupted block bitmaps. + +Updated/fixed various man pages. (Addresses Debian Bug: #798425) + + +Programmer's Notes +------------------ + +Fixed coverity, sparse gcc -Wall, and clang warnings/nits. + +Added Android build files so that e2fsprogs can be built in the +Android source tree. + +Reduce the use of libc functions in libext2fs that may not be present +in the boot loader environment, at least for those functions that are +needed by boot loadsers such as yaboot. + +Developers can now overide the debugging and optimization flags by +redefining the CFLAGS makefile macro. + +The libext2fs library now has support for fallocate. + +The mke2fs command will now ask the user for confirmation if block +device or image file contains an existing file system image, and +stdout and stdin are connected to a tty. + +The libext2fs library now picks a more intelligent goal block when +doing block allocations. + +The libext2fs library will now automatically set the BLOCK_UNINT flag +if all of the blocks in a block group are free, to speed up future +e2fsck and dumpe2fs operations on the file system. + +Add two new functions ext2fs_new_range() and ext2fs_alloc_range() to +libext2fs. + +The ext2fs_zero_blocks() command will use FALLOC_FL_ZERO_RANGE for +file-based images. + +The ext2fs_bmap() function supports new flags BMAP_UNINIT and +BMAP_ZERO. + +The ext2fs_new_block2() function will now call the alloc_block hook +before checking fs->block_map. + +Support for the MMP feature can now be disabled at compile time. + +Added support to manipulate extended attributes to libext2fs. + +Added a lot of new regression tests. + +Added endian annotations so it's possible to scan e2fsprogs for endian +problems using a static code analyzer. + +Fixed memory leaks in libext2fs. + +The e2fsck jbd2 handling code has been resynced with the 3.16 kernel. +There is now a script in the contrib directory which automates most of +the resync process. + +The build system will now run cppcheck (a static code analysis tool) +via "make C=1" + + +E2fsprogs 1.42.13 (May 17, 2015) +================================ + +Fixed a potential buffer overflow while closing a file system in +libext2fs. (CVE-2015-1572, Addresses Debian Bug: #778948) + +Fixed a bug which could cause e2fsck to corrupt Hurd file systems. +(Addresses Debian Bug: #760275) + +Fixed a deadlock which occurs when using systemd and e2fsck.conf's +logging feature. (Addresses Debian Bug: #775234) + +Fixed a bug which could cause programs using libext2's inode table +scanning functions from crashing on certain corrupted file systems. +(Addresses Debian Bug: #773795) + +Fixed dumpe2fs so it won't crash if the user doesn't specify a block +device (file system). (Addresses Debian Bug: #764293) + +Fixed e2fsck so if it notices unexpected HTREE blocks in pass 2, it +will report the correct directory inode containing the inconsistency. + +If e2fsck fails to grow the dir_info structure due realloc(3) not +having enough memory, it will now fail with explanatory message +instead of staggering on failing with a confusing internal error +messages. + +The tune2fs program will zero out the superblock journal backup +information when removing a journal from a file system. + +The mke2fs program now enables the large_file feature by default. + +Fixed a bug which could cause badblocks to crash if there are millions +and millions of bad blocks. + +Fixed some use-after-free bug in resize2fs and e2fsck. + +Fixed a memory leak in tune2fs. + +Fixed some bigendian bugs that had crept into both indirect and extent +handling inside libext2fs. + +Updated/fixed various man pages. + +Update Esperanto, German, and Spanish translations. Added Danish +translation. + +Programmer's Notes +------------------ + +Fixed coverity, sparce gcc -Wall, and clang warnings/nits. + +Clean up some build system problems (build failures with various +configure options, fix Posix portability issues, etc.) + +The functions ext2fs_inode_alloc_stats[2]() and +ext2fs_block_alloc_stats[2]() now check the inode and block numbers +passed to them, to avoid crashes caused by buggy callers. + +The libext2fs directory iterator will now check for an invalid +directory entry length instead of possibly walking off the end of the +directory buffer. + + +E2fsprogs 1.42.12 (August 25, 2014) +=================================== + +Fix various e2fsck bugs when trying to repair bigalloc file systems. + +E2fsck can now repair a file system with an overly large +s_first_meta_bg field, which had previously caused all e2fsprogs +programs to crash when trying to open such a file system. + +Fix e2fsck so that it can correctly fix a number of rare file system +corruptions that were discovered when using a file system fuzzer. + +Fix e2fsck so it does not try to write back block group descriptors if +they have not been modified. + +Mke2fs program will now place metadata blocks in the last flex_bg so +they are contiguous. This reduces free space fragmentation in a +freshly created file system, as well as allowing mke2fs commands which +request extremely large flex_bg size to succeed. + +Mke2fs now creates hugefiles more efficiently (with fewer extent tree +blocks). + +Fix a 32/64-bit overflow bug that could cause resize2fs to loop +forever. (Addresses-Launchpad-Bug: #1321958) + +The resize2fs program will now use much less memory when resizing very +large file systems. + +Fix a bug which could cause resize2fs to get confused and produce a +corrupted file system when shrinking a file system that had been +previously expanded and converted to use the meta_bg file system +format, but which no longer needs to use the meta_bg file system +format any longer. This typically happened with large (> 16TB) file +systems. (Addresses Debian Bug: #756922) + +The e4defrag program will now defrag backwards-allocated files. + +Fix tune2fs updating UUID's when manipulating file systems with +external journals (both the file system and journal UUID). + +Fix tune2fs so it can remove an external journal for file systems with +a 1k block size. + +Add a new debugfs command, "inode_dump", which prints the inode in hex +and ASCII format. + +The debugfs's "set_inode_field" will now automatically allocate blocks +for indirect blocks and extent tree blocks. + +Fix debugfs's "set_inode_field" so can properly handle +"block[IND|DIND|TIND]". + +The debugfs "rdump" command will now take multiple source arguments. + +Fixed a double close(2) bug in "rdump" and "rdump -p". + +Fix debugfs's argument parsing for the freefrag command. + +Fix filefrag to properly handle using the FIBMAP ioctl (with -B). +(Addresses Launchpad Bug: #1356496) + +Clarified messages that were confusing users in debugfs, e2fsck, +mke2fs, and resize2fs (Addresses Debian Bugs: #758029, #757543, +#757544) + +Dumpe2fs will now complain if extra arguments are given to it. +(Addresses Debian Bug: #758074) + +Updated/fixed various man pages. (Addresses-Debian-Bug: #726760) + +Update Czech, Dutch, French, Polish, Spanish, Sweedish, Ukrainian, and +Vietnamese translations. + +Programmer's Notes +------------------ + +The Unix I/O layer will now use pread[64]/pwrite[64] to reduce the +number of system calls issued. + +Fixed profiled build. + +The libext2fs library will now more efficiently split an extent tree +index block when appending to an end of a file. + +Fixed free block accounting for 64-bit file systems. + +Add a new function ext2s_inode_size_set() which takes care of all of +the required feature flag modifications. + +The regression tests no longer require the presence of the md5sum +program. + +Fix build failure on MIPS platforms on Debian (Addresses Debian Bug: +#754605) + +Fix various Coverity warnings (#1225003, #1229243, #1252003) + + +E2fsprogs 1.42.11 (July 9, 2014) +================================ + +Add support so that mke2fs can create hugefiles so that they are +aligned relative to the beginning of the disk, instead of relative to +the beginning of the partition, using the mke2fs.conf configuration +parameter "hugefiles_align_disk". + +Fix a bug which causes e2fsck to abort a journal replay on a file +system with bigalloc enabled. (Addresses Debian Bug: #744953) + +Add sanity checks so that mke2fs will refuse insanely large flex_bg +counts specified by the -G option. Insanely large flex_bg sizes can +result in a file system which can't be unmounted, or with extremely +pessimal metadata layouts. + +The mke2fs program will provide a better metadata layout for +moderately large (but believable) flex_bg counts, such as 133,072. + +The mke2fs progam will also check the kernel version number to +determine whether the lazy_itable_init option is supported, so that +lazy inode table initialization can be used even if the ext4 is +compiled as a module which isn't loaded at the time that mke2fs is +run. + +Add description of ext4's mount options to the ext4 section 5 man +page. + +Improve the chattr man page and clean up the chattr usage message. + +E2fsck will now automatically fix a last mount time or last write time +which is in the future in preen mode, instead of aborting the fsck +check. + +Mke2fs will now check the file system revision number requested by the +command line, and reject it if it is too large. A file system with an +unsupported revision number will not be accepted by any of the other +file system tools, and this command line option is rarely used, so +let's try to help the user not shoot their own foot off. + +The debugfs progam can now set the error count and associated +first_error and last_error fields in the superblock using the +set_super_value command. + +Resize2fs will not try to calculate the minimum size of a file system +if it contains errors. Otherwise a very badly corrupted file system +image can cause the minimum size calculation to loop forwever. Since +resize2fs will not allow a file system marked as containing errors to +be resized. It's pointless to calculate the minimum size, so just +skip it. + +Fixed a typo in one of mke2fs's error message. + +If filefrag runs into an error, it will continue processing the rest +of the files specified on thec ommand line, but then exit with an +error code. + +Filefrag now prints some additional new flags (such as +FIEMAP_EXTENT_ENCODED), and print unknown flags as hex values. + +Fixed support in filefrag for files with > 2**32 blocks on 32-bit +platforms. + +Fixed a file descriptor leak in debugfs when copying files. + +Fixed a regression introduced in 1.42.10 which caused mke2fs to fail +to create file systems larger than 2GB on 32-bit platforms. +(Addresses Red Hat Bugzilla: #1099892, Debian Bug: #752107) + +Add Esparanto and Ukrainian translations, and update Czech, Dutch, +French, German, Italian, Polish, Sweedish, and Vietnamese +translations. + +Fixed various compiler warnings. + + +Programmer's Notes +------------------ + +The gcc "-checker" option has been long deprecated, so remove support +from e2fsprogs. It was causing a few people to be confused when they +tried enabling the configure option. + +Update to the latest version of the config.status and config.rpath +files, as well as newer versions of the autoconf files in aclocal.m4. +Also, move the e2fsprogs-specific macros to acinclude.m4, which allows +people who want to use autoreconf to do so. + +Make the use of strptime() function in debugfs to be more portable to +fix regression test failures for FreeBSD and MacOS. + +A few miscellaneous changes designed to make life easier for +translators. + +Fix the f_quota test and some Makefile dependencies if quota support +is not enabled. + +Fix cross-compilation support, which got broken in 1.42.10. +(Addresses Debian Bug: #753375) + +Delete lib/ext2_types.h on a make clean, and build it as necessary. + +Add a debug program used for libext2fs unit tests. + +Clean up the tests so that it avoids using GNU-specific behaviour in +mktemp. Make sure the temporary files are cleaned up if the tests are +interrupted. + +Add a new ext2fs_close_free() helper function which automatically +takes care of freeing the ext2_filsys structure even if ext2fs_close() +returns an error. + + +E2fsprogs 1.42.10 (May 18, 2014) +================================ + +Mke2fs now creates file systems in regular files (which is very often +used when maintaining virtual machine images) without requiring the +user to use the force option. In addition, the mke2fs output has been +made much less verbose and only displays information that users will +be more likely to find useful by default. + +Mke2fs now will ask the user to confirm that they want to continue +before wiping out a pre-existing file system, partition table, or LVM +physical volume. + +Mke2fs now has the ability to create file systems where all the +metadata is located at the very beginning of the device. This can be +useful for flash devices which have SLC flash at the beginning of the +disk, for FAT compatibility, for example. As part of this, mke2fs and +tune2fs can control the location of the data blocks used by the +journal inode. In addition, the new sparse_super2 feature allows for +even fewer (anywhere from zero to two) backup superblocks. + +Mke2fs now uses much less CPU when allocating the blocks used for very +large file systems. + +Mke2fs can now support creating a file system at an offset. This can +be useful when creating a disk image for virtual machines (Addresses +Debian Bug: #497984) + +Previously, e2fsck had a number of very serious bugs when checking a +file system wich used the new the quota file system option (where the +quota inodes were stored in hidden inodes) and the quota inode was +inconsistent with the actual usage data. This problem was documented +in https://ext4.wiki.kernel.org/index.php/Quota. These problems have +been fixed in 1.42.10, so the quota should be safe to use with +e2fsprogs 1.42.10. + +Fixed in a bug in resize2fs which could cause shrink operation fail in +the unlikely situation when the inode table needs to be moved to a +location before the current location. + +Resize2fs now has a much more accurate (and less conservative) +estimation of how far the file system can be shrunk. This allows a +mostly empty filesystem which is a few terabytes, to be shrunk to a +few megabytes in a single resize2fs -M operation. + +E2fsck will now force a full file system check if there are any file +system inconsistencies detected in the super block. + +The filefrag program will now display hte shared extent flag, which is +used by file systems such as btrfs. + +If the number of inodes in the file systems is larger than the time +that file sytem was created (as measured by the number of seconds +since January 1, 1970) e2fsck would print a scary (but otherwise +harmless) warning of file system corruption for each inode in the +orphan list. This false positive has been fixed. + +The e4defrag program has been fixed so it will no longer refuse with +filesystem with the 64-bit or the bigalloc feature enabled. + +The logsave progam will print a much less scary message which could +lead users to believe something has gone very wrong with e2fsck exits +with a non-zero exit status (since this is normal after e2fsck has +automatically fixed a file system corruption during a preen +operation). (Addresses Debian Bug: #468821) + +When creating a file system which is larger than 16TB, the +resize_inode option must be disabled -- since the resize_inode simply +doesn't support reserving metadata block numbers which is larger than +32 bits. The mke2fs program does this automatically if the file +system size is determined automatically. It will now also do this if +the file size is specified explicitly. + +Fixed bugs associated with resize2fs and shrinking bigalloc file +systems. + +The e2fsck program will no longer try to add a UUID on a mounted file +system with checksums enabled, since this could leave the file system +checksums broken. + +Tune2fs will allow the removal of an external journal from file system +which is marked as needing the journal replayed when the force ("-f") +option is given twice. (Addresses Debian Bug: #559301) + +Tune2fs will no longer support enabling sparse_super if the meta_bg +file system feature is enabled, since it could result in data loss. +In practice, all modern file systems have sparse_super is enabled, so +it's not worth trying to change how tune2fs handles enabling the +sparse_super feature. + +Fixed support for 1k block file systems with the meta_bg feature. + +When the superblock is corrupt, e2fsck can't figure out the location +of the alternate superblock. Unfortunately, the routine that +calculates the location of the alternate superblock uses 8193 if it +can't figure this out, so the message printed by e2fsck always +suggests using "e2fsck -b 8193". This message has been fixed to +suggest both the superblock location of 8193 and and 32768. +(Addresses Debian Bug: #719185) + +The lookback mount detection code that was introduced in 1.42.9 wasn't +actually compiled in due to an autoconf oops, so it's fixed now in +1.42.10. (Addresses Debian Bug: #497984) + +A bug introduced in 1.42.9 would cause debugfs to print two error +messages if it found an error while parsing a user-supplied block +number. This has been fixed in 1.42.10. + +Update Czech, Dutch, French, German, Polish, Spanish, Sweedish, and +Vietnamese translations. (Addresses Debian Bug: #703048) + +Updated/fixed various man pages. (Addresses Debian Bugs: #719189, +#719184) + +Fixed various Debian Packaging Issues. (Addresses Debian Bug: #718725) + + +Programmer's Notes +------------------ + +Fixed a lot of coverity, sparce gcc -Wall, and clang warnings/nits. + +Allow the location of pkg-config files to be specified independent of +the libdir location via a makefile variable. + +Fixed parse-types.sh not to complain when cross-compiling and the +sizes of types are different between the target architecture and the +architecture of the build system + +Allow the regression test suite to work correctly on systems which do +not have the "truncate" or "mksawp" programs. + +Allow e2fsck to build correctly on systems (such as Android) that do +not have the signal.h file. + +E2fsprogs now has code coverage testing which can be enbled using +"configure --enable-gcov". + +The libe2p.h header file can now be used included by C++ programs. + +The profile/config file used by e2fsck and mke2fs will interpret +numbers with a leading 0 character to mean that they should be +interpreted as an octal integer. + +The extent handling functions in libext2fs have been improved so they +have proper rollback when there is an error splitting an extent. Also +fix a number of bugs when punching holes in files, and fix an +off-by-one bug when inserting an extent into an empty inode. + +The libext2fs library now handles the support of BLOCK_UNINIT by +clearing the portion of block bitmap when it is loaded, instead of +when it is used. This reduces the chances of bugs, and and simplifies +the code. It also means that debugfs will properly show that blocks +in uninitialized block groups as being unused when using the testb +command. + +The e4defrag program will try to use fadvise64 or posix_fadvise64() if +it is present, which allows 64-bit offsets on 32-bit systems. + + +E2fsprogs 1.42.9 (December 28, 2013) +==================================== + +Mke2fs will detect an attempt to create a file system on a loop +mounted file and complain without the -FF option. Also fixed mke2fs +so it allows the creation of a file system on a mounted device with +two -F options, as documented in the man page, instead of three -F +options. + +Fixed a large number of bugs in resize2fs, e2fsck, debugfs, and +libext2fs to correctly handle bigalloc and 64-bit file systems. There +were many corner cases that had not been noticed in previous uses of +these file systems, since they are not as common. Some of the bugs +could cause file system corruption or data loss, so users of 64-bit or +bigalloc file systems are strongly urged to upgrade to e2fsprogs +1.42.9. + +The tune2fs program will now not allow changing the uuid on a mounted +file system which has the uninit_bg feature enabled. This avoids a +nasty race where the kernel and tune2fs are both retrying rewrite the +group descriptors at the same time, with different ideas about what +the UUID should be. + +When e2fsck is rehashing an extent-mapped directory, it's possible +(although very rare) that an extent block will need to be allocated; +fix e2fsck to make sure that the block gets marked as used. + +Mke2fs will now properly set the LARGE_FILE feature when creating a +journal >= 2GB --- which can happen when using 64k block size. + +Fixed debugfs so that its freei command will correctly handle a request +to free a range of consecutive inodes. + +Fixed 2fsck so it will not erroneously complain that an external journal +is invalid if it is exactly 2**32 blocks. + +Fixed e2fsck so it won't try checking for, and adding, a missing +lost+found directory when running in read-only mode. + +Fixed e2image so that progress information won't get leaked to stdout. +(Addresses Red Hat Bugzilla: #1327329) + +Fixed e2image to avoid some buffer overruns which would cause it to when +creating a "standard (non-raw, non-qcow2) image file. Standard +e2image files are actually very rarely used, so we didn't notice when +the changes to enable the qcow2 format broke this e2image mode. + +Fixed mke2fs so that the extended option "-E resize=NNN" will not turn +on the resize_inode feature when the meta_bg feature is set, since +these two features can not be set at the same time. + +Fixed tune2fs so that when it disables the quota feature, it updates all +of the backup superblocks. + +Fixed dumpe2fs that would cause it to abort when run using an image file +when trying to print the journal information (which is not present in +an e2image created image file). + +Fixed a potential integer overflow in e2reefrag. +(Addresses-Debian-Bug: #718205) + +Enhance debugfs so that when copying a sparse file from a native file +system into the file system image using the "write" command, it will +create a sparse file into the destination file system. + +Enhanced debugfs so it can support a command line which is up to 8k +long. + +E2image will refuse (unless the -f option is specified to force the +issue) to create a raw or qcow image using a mounted file system, +unless the -f option is specified to force the issue. + +E2image has been optimized for using it to efficiently copy a file +system by only copying the allocated blocks, by using the options -ra. +New options (-o and -O) have been added so that a source and +destination offset can be given. The -p option will print progress +information so the user will know how far along the copy is going. +And finally, the new option -c is useful for updating a file system on +an SSD, by avoiding unnecessary writes. E2image can also shift a file +system image by doing an in place move. + +Fix a regression introduced in 1.42.8 which would cause e2fsck to +erroneously report uninitialized extents past the EOF (as determined by +i_size) to be invalid. + +Fixed resize2fs so under a corner case when an inode has a complex +extent tree, it will not corrupt an interior node in the extent tree. + +Fixed resize2fs which would sometimes corrupt a file system when +shrinking a file system to a minimum size using resize2fs -M. +(Addresses Debian Bug: #660793) + +Fixed resize2fs so that it will relocate inode table blocks if this +becomes necessary when shrinking the file system. + +Fixed resize2fs and e2fsck so they will not crash when hit a failure +while operating on a file system with the MMP feature enabled. + +Fixed a bug in debugfs which caused it create an invalid inode when +trying to write a zero-length file. + +E2fsck will no longer crash if it tries to delete an invalid +extent-mapped symlink. + +E2fsck will no longer crash if it comes across an directory which is +larger than 2GB (which is not allowed in valid file systems). + +Fixed debugfs's help texts to fully document all options and otherwise +be more helpful. + +Updated/fixed various man pages. (Addresses Debian Bugs: #586218, +#669730, #698076) + +Fixed various Debian Packaging Issues (#698879, #721365) + + +Programmer's Notes +------------------ + +Fix sparse, gcc -Wall and clang nits. + +Update config.{guess,sub} to the latest version + +Fixed various memory and file descriptor leaks on various error paths, +as well as some missing error return checks, which were found using +Coverity. + +Run sparse against source files when building e2fsprogs with 'make +C=1'. If instead C=2, it configures basic ext2 types for bitwise +checking with sparse, which can help find the (many many) spots where +conversion errors are (possibly) happening. + +Allow the regression test to be run in chrooted environments where +/etc/mtab might be missing. + +The ext2fs_punch() function, which was introduced in 1.42, was broken +in many ways, but this was never noticed since it wasn't used for +anything significant. Some of the bugs include failing when trying to +punch a completely sparse file, failing when punching an extent-mapped +inode when the starting block was at the beginning of the inode, and +not being able to punch a single block (where start_blk == end_block). +It also didn't handle being passed an invalid, too-large ending block +number, and didn't handle properly terminate at the right place when +operating on an indirect-mapped inode. + +Fixed some minor typo's in the error catalog for libext2fs. + +Fixed ext2fs_file_set_size2() so that if it truncates an inode by +setting the file size, to zero the rest of the block to the end of the +file, so that if an ext4 FUSE driver tries to extended the file, that +we don't avoid stale data from being returned. + +Fixed ext2fs_bmap() to disallow clients from trying to map or set +logical blocks which are larger than what an extent-mapped or indirect +block-mapped inode can allow. + +If debugfs (or some userspace program using libext2fs) creates a file +which is larger than 2GB, make sure the large_file feature flag gets +set. + +Fix a bug in ext2fs_link() where if there is multiple empty slots in the +directory which are large enough, the directory entry could get +inserted more than once in the directory. + +If quota support is disabled (which is the default), make sure that +all traces of the quota support is removed from usage messages, man +pages, and tune2fs must not be able to enable the quota file system +feature. (Addresses Red Hat Bugzilla: #1010709) + +The ext2fs_file_write() now updates i_size on a successful write, +instead of only updating i_size wen the file is closed via +ext2fs_file_close(). + +Added a shell script, populate-extfs.sh which uses debugfs to populate +an ext2/3/4 file system image from a given directory. It is similar +to the genext2fs program, but it supports ext3 and ext4 file system. + +Add changes to the libext2fs library to support block group +descriptors larger than 64 bytes (for future compatibility). + +Fixed an off-by-one bug in ext2fs_file_set_size2() so that it will not +leave an extra block in the file when truncating the file down to +size. + +The html version info pages are now built using makeinfo --html +instead of the unmaintained and now-obsolete texi2html program. + + +E2fsprogs 1.42.8 (June 20, 2013) +================================ + +As a part of mke2fs's option parsing cleanup, the use of the -R option +will give a warning that it is depreated (it has been so documented +since 2005) and -E should be used instead. + +Mke2fs will not give warnings about the bigalloc and quota options in +quiet mode. + +If an invalid journal size is given to mke2fs, it will now complain +and exit sooner. + +Debugfs was erroneously giving spurious error messages for certain +extent_inode subcommands which take arguments (split_node, +replace_node, and insert_node). This has been fixed. + +Fix the parsing of the 's' (sectors) in parse_num_blocks2, which among +other programs is used by mke2fs. + +Change mke2fs so that it does not set the root directory to the real +uid/gid of the mke2fs process. Add the extended option root_owner to +override this behavior. + +Fix resize2fs when shrinking file systems to make sure that bitmap +blocks aren't left outside the bounds of the shrunken file system. +This could happen with flex_bg file systems that were grown using +the old online resizing algorithm. + +E2fsck will now detect and repair corrupted extent trees which contain +invalid extents at the end of the extent tree leaf block. + +E2fsck will now longer complain about zero length extended attribute +values. + +Fix a regression introduced in e2fsprogs v1.42 which caused e2image -s +to crash. + +Add safety check so tune2fs will not attempt to set the inode size to +be larger than the block size. + +Fix e2fsck so it can check a read-only root file system with an +external journal. (Addresses Debian Bug: #707030 + +Fix off-line resizing of file systems with flex_bg && !resize_inode +(Addresses Debian Bug: #696746) + +Fix e2image with large (> 32-bit) file systems (Addresses Debian Bug: +#703067) + +Enhance chattr to allow clearing the extent flag if the kernel allows +migrating extent based files to use indirect blocks. + +Update German translation. + +Updated/fixed various man pages. (Addresses Debian Bugs: #712429, +#712430, #707609) + +Fixed various Debian Packaging Issues (Addresses Debian Bug #708307) + +Programmer's Notes +------------------ + +Use secure_getenv() in preference to __secure_getenv(). + +Optimize CPU utilization of ext2fs_bg_has_super(). + +Fix ext2fs_llseek() on 32-bit i386 systems to work correctly when +SEEK_CUR is used with large files. + +The ext2fs_read_inode_full() function will no longer use +fs->read_inode() if the caller has requested more than the base 128 +byte inode structure and the inode size is greater than 128 bytes. + +Fix build failure with --enable-jbd-debug. + +Clean up filtering of outputs for the regression tests by using a +common sed script. + +Fix gcc -Wall and clang nits. + + +E2fsprogs 1.42.7 (January 21, 2013) +=================================== + +Add warnings to mke2fs, resize2fs, and tune2fs that the bigalloc and +quota features are still under development. For more information +please see: + * https://ext4.wiki.kernel.org/index.php/Bigalloc + * https://ext4.wiki.kernel.org/index.php/Quota + +Add some new options to filefrag from Lustre's patches to e2fsprogs: + * add -k option to print extents in kB-sized units (like df -k) + * add -b {blocksize} to print extents in blocksize units + * add -e option to print extent format, even when FIBMAP is used + * add -X option to print extents in hexadecimal format + +Fix resize2fs so that it can handle off-line resizes of file systems +with the flex_bg feature but without a resize_inode (or if we run out +of reserved gdt blocks). This also fixes a problem where if the user +creates a filesystem with a restricted number of reserved gdt blocks, +an off-line resize which grows the file system could potentially +result in file system corruption. + +Fix a resize2fs bug which could cause it to corrupt bigalloc file +systems when doing an off-line resize. + +Further optimize resize2fs so it doesn't use quite as much CPU when +resizing very large file systems. + +Fixed 32-bit overflow bugs which could cause resize2fs to fail and +possibly corrupt the file system while resizing 64-bit file systems. + +Fix a bug in mke2fs where parsing "-E resize=NNN" will result in a +mke2fs crash due to a divide-by-zero if the 64bit file system feature +is enabled. + +Add better error checking to mke2fs to check for invalid parameters +when creating bigalloc file system. + +When creating bigalloc filesystems, the -g option to mke2fs will now +specify the number of clusters per block group. + +Add to debugfs the functionality to corrupt a specific file system +block via the "zap_block" command. + +Add to debugfs the functionality to print out a hex dump of a block in +the file system via the "block_dump" command. + +Add to debugfs the functionality to manipulate the extent tree +directly via the "extent_open" command. + +Fixed debugfs's mknod command so that it updates the block group +statistics. + +Fix e2fsck so it can detect and fix inconsistencies in the interior +nodes of an inode's extent tree. + +Fix a potential memory corruption failure in e2fsck's error path if +the call to ext2fs_open2() fails. + +Fix e2fsck if its logging function is enabled in e2fsck.conf, and the +resulting file name for the log file is longer than 100 bytes, that it +properly handles this situation instead of crashing. + +E2fsck will now report the amount of memory that it attempted to +allocate when a memory allocation request fails, to make it easier to +track down the problem. + +Fix mke2fs's handling of the mmp_update_interval option. (Addresses +Lustre Bug: LU-1888) + +E2image can now include all data blocks in the e2image output file +when the user specifies the -a option. + +If e2fsprogs is compiled without --enable-quota, make sure that +tune2fs can not turn on the feature for new-style quota support, since +afterwards, none of the e2fsprogs tools will be willing to touch that +file system. + +Optimize e2fsck's so that it uses much less CPU for large file +systems. This can result in significant speedups, especially on +CPU-constrained systems. This was primarily done by optimizing +libext2fs's bitmap functions. (Addresses Google Bug: #7534813) + +Fix debugfs's htree command so that all its messages are sent through +the pager. + +Fixed debugfs's "dump_file" and "cat" functions work correctly +on file systems whose block size is greater than 8k. + +Fix e2freefrag so it works on 64-bit file systems, and so it uses much +less memory. (Addresses Google Bug: 7269948) + +Update the spd_readdir.c file in the contrib directory to include some +additions which were made in 2008 that didn't get folded into the +version which we checked into the e2fsprogs source tree. These +enhancements include thread safety, support for readdir64_r(), and +safe_getenv() support in case spd_readdir.so is used for setuid binaries. + +Update Czech, Dutch, French, German, Polish, Sweedish, and Vietnamese +translations + +Add a command to debugfs to create symlinks. + +Document the bigalloc feature in the mke2fs man page. (Addresses +Debian Bug: #669730) + + +Programmer's Notes +------------------ + +Fix gcc -Wall nits. + +Fix a spelling typo in the libext2fs texinfo documentation. + +Change the output from "make check" so that tools such as emacs's "M-x +compile" does not mistake the output as containing a compiler error. + +Export two new functions from libext2fs: ext2fs_extent_node_split() +and ext2fs_extent_goto2(). + +The ext2fs_extents_fix_parents() was fixed so it does not modify the +location of the extent handle if its current location is at an +interior node, rather than a leaf node of an inode's extent tree. + +Add a regression test to assure that e2fsck can correctly fix an +inconsistent interior node in an inode's extent tree. + +The ext2fs_{mark,unmark,test}_block_bitmap_range2() functions now +correctly support bigalloc file systems which use store block usage +information in units of clusters. + +Fixed the help text in the configure script for --enable-quota. + +The m68k-specific bitops code has been removed since they were +incorrectly treating bit numbers with the high bit set as signed +integers. Furthermore, modern compilers do a good enough job +optimizing the generic code there is no point in having the m68k +specific asm statements. + +Fixed how we link the test programs so they always use the static +libraries, so that we test using the libraries which we have just +built. + +Update config.guess and config.sub to the latest versions from the GNU +project. + +Fixed the com_err.texinfo file so that it can produce a valid +postscript/pdf printed output. + +Add a regression test which checks debugfs's ability to create +symlinks, named FIFO's, and device nodes. + +Add a function ext2fs_symlink(), which creates symlinks to the +libext2fs library. + +Add debugging code so we can test old kernel interfaces for online +resize to resize2fs. This backwards compatibility checking is keyed +off of the RESIZE2FS_KERNEL_VERSION, which is designed to allow us to +test the functionality of the kernel's older resize ioctls without +needing to install an old version of resize2fs, and to also test a +modern resize2fs's ability to work with older kernels without having +to install an older version of the kernel. + + +E2fsprogs 1.42.6 (September 21, 2012) +===================================== + +When mke2fs creates file systems with lazy itable initialization, the +progress updates for writing the inode table happens so quickly that +on a serial console, the time to write the progress updates can be the +bottleneck. So mke2fs will now only update its progress indicators +once a second. + +Resize2fs will skip initializing the inode tables if the kernel +supports lazy_itable_init, which speeds up growing off-line growth of +uninit_bg file systems significantly. Resize2fs will now also +correctly set the itable_unused field in the block group descriptor to +speed up the first e2fsck after the file system is grown. + +Resize2fs has been fixed so that on-line resizing of meta_bg file +systems work correctly. This is needed to grow file system which are +larger than 16T. + +Resize2fs will now correctly handle resizing file systems to 16TB on +32-bit file systems when "16TB" is specified on the command line. + +Fix mke2fs so that it will be careful to set the reserved blocks ratio +larger than 50%; this can happen when creating small file systems and +when the last block group is dropped because there are not enough +blocks to support the metadata blocks in the last block group. + +Fixed spelling mistake in debugfs's help message. + +Fixed a potential seg fault in e2fsck when there is an I/O error while +reading the superblock. + +Fixed various Debian Packaging Issues (Addresses Debian Bug #677497) + +Updated/fixed various man pages. (Addresses Sourceforge Bug: +#3559210) + +Programmer's Notes +------------------ + +The configure option --enable-relative-symlink was broken so that it +needed to be --enable-symlink-relative-symlinks. We will support both +for at least two years, but then the worng configure option will be +removed. + +Fixed a regression introduced in 1.42.5 so the link order for +e2fsprogs' libraries will be correct for both static and shared +linking. (Addresses Sourceforge Bug: #3554345) + +Add support for e2fsprogs to be compiled using clang/LLVM. + +Fix portability problems on non-Linux systems: avoid compile failures +on systems that don't have malloc.h + +Fix f_mmp regression test suite so that debugfs gets killed if the +test is interrupted. + + + +E2fsprogs 1.42.5 (July 29, 2012) +================================ + +Fixed a bug with mke2fs where if there is only 8 inodes per block +group, the calculation of the number of uninitialized inodes in the +first block group would go negative. This resulted in "mke2fs -N 256 +-t ext4 /tmp/foo.img 256m" trying to write so many blocks that /tmp +would run out of space. (Addresses Sourceforge Bug: #3528892) + +Fixed a bug in how e2fsck would uniquify directory entry names. +(AddressesSourceforge Bug: #3540545) + +Previously, e2fsck would only allow a mounted file system to be +checked if it was the root file system and it was mounted read-only. +Now it will allow any file system mounted read-only to be checked if +the -f option is specified. This makes it easier to test how e2fsck +handles checking file systems which are mounted without having to test +on the root file system. + +Fixed a problem if e2fsck where if the root file system is mounted +read-only, e2fsck would not clear an error indication in the journal +superblock. Combined with a kernel bug, this would cause the e2fsck +to check the file system after every single boot. + +The e4defrag program can now handle device symlinks, such as +/dev/mapper/testvg-testlv, instead of insisting on a less +human-friendly name such as /dev/dm-2. (Addresses Red Hat Bugzilla: +#707209) + +Fixed filefrag so it will not crash with a segfault on files from a +virtual file system such as /proc. (e.g., "filefrag +/proc/partitions") + +Fixed filefrag so that it correctly reports the number of extents. +(Addresses Red Hat Bugzilla: #840848) + +Fixed a file descriptor leak in logsave which could cause it to hang. +(Addresses Debian Bug: #682592) + +Fixed e2fsck so that the file system is marked as containing an error +if the user chooses not to fix the quota usage information. + +Fixed tune2fs so that it correctly removes the quota feature when the +last quota inode is removed. + +Fix tune2fs so that after removing a quota inode, the block bitmap is +updated; otherwise, e2fsck would complain after running 'tune2fs -O +^quota '. + +Fix tune2fs so that when converting a file system from using legacy +quota files to the new quota file system feature with hidden quota +files, the accounting for these files is handled correctly so that +e2fsck doesn't complain. + +Improved e2fsck's verbose reporting statistics, and allow the more +verbose reporting to be enabled via /etc/e2fsck.conf. + +Fixed various Debian Packaging Issues (Addresses Debian Bug #678395) + +Updated/fixed various man pages. (Addresses Debian Bugs: #680114) + + +Programmer's Notes +------------------ + +Fixed portability problems on other operating systems (e.g., Hurd and +FreeBsd) caused by the attempted inclusion of . + +Make sure that shared libraries link with the shared libraries built +in the build tree, instead of the system provided libraries. +Previously, libraries and executables were linked with the system +libraries if present, and possibly using static archives instead of +shared libraries. This was also problematic since if libext2fs.so is +linked with a static libcom_err.a from system, the build system would +attempt to link without -lpthread. (Addresses Sourceforge Bug: +#3542572) + + +E2fsprogs 1.42.4 (June 12, 2012) +================================ + +Fixed more 64-bit block number bugs (which could end up corrupting +file systems!) in e2fsck, debugfs, and libext2fs. + +Fixed e2fsck's handling of the journal's s_errno field. E2fsck was +not properly propagating the journal's s_errno field to the superblock +field; it was not checking this field if the journal had already been +replayed, and if the journal *was* being replayed, the "error bit" +wasn't getting flushed out to disk. + +Fixed a false positive complaint by e2fsck if all of the extents in +the last extent tree block are uninitalized and located after the end +of the file as defined by i_size. + +The dumpe2fs will now display the journal's s_errno field if it is +non-zero, and it will also display the journal's 64-bit feature flag +if present. + +Fix e2fsck so that it always opens the device file in exclusive mode +when it might need to modify the file system, and never if the -n +option is specified. (Previously, there were a few corner cases where +it might get things wrong in either direction.) + +E2fsck now correctly truncates or deallocates extent-mapped inodes on +the orphan list. The root cause was a bug in libext2fs's block +iterator which could end up skipping an extent when the last block in +an extent is removed, causing the current extent to be removed from +the extent tree. + +E2fsck now correctly sets the global free block and inode counts when +truncating or removing inodes on the orphan list in preen mode. +Previously, it would leave these values would be set incorrectly, +which is largely a cosmetic issue since the kernel no longer pays +attention to those fields, but it can cause spurious complaints in +subsequent e2fsck runs. + +Fix i_blocks accounting when the libext2fs library needs to add or +remove an extent tree block on bigalloc file systems. + +The lsattr and chattr programs now support the No_COW flag for the +benefit of btrfs. + +Debugfs now interprets date strings of the form @ddd as ddd seconds +after the beginning of the epoch. This is handy when setting an inode +number into the d_time field when debugging orphan list handling. + +Fix a precedence bug with built-in quota support which might result in +e2fsck paying attention to the quota inode field even if the built-in +quota feature flag is not set. Fortunately, in practice that +superblock field should be zero for non-built-in quota file systems, +so it's unlikely this bug would have caused problems. + +Updated/fixed various man pages. (Addresses Debian Bugs: #674453, +#674694) + +Programmer's Notes +------------------ + +The regression test suite can now run the integration tests in the +tests directory in parallel, via "make -jN check". + +Add new test, f_zero_extent_length which tests e2fsck's handling of +the case where all of the extents in the last extent tree block are +uninitialized extents after i_size. + +Add a new test, f_jnl_errno, which checks handling of an error +indication set in the journal superblock. + +Fix the test f_jnl_64bit so that it properly checks e2fsck's handling +of a 64-bit journal. + +Add two tests, f_orphan_indirect_inode and f_orphan_extent_inode which +tests e2fsck's handling of orphan inodes in preen mode, and truncation +of extent inodes on the orphan list. + +Fixed more OS X portability issues. + + +E2fsprogs 1.42.3 (May 14, 2012) +=============================== + +Fix a bug in the Unix I/O manager which could cause corruption of file +systems with more than 16TB when e2fsprogs is compiled in 32-bit mode +(i.e., when unsigned long is 32-bits). Also fix a bug which caused +dumpe2fs to incorrectly display block numbers > 32-bits. + +Improve the support for integrated quota files (where quota is a first +class supported feature using hidden files in the ext4 file system). +Previously the quota file was getting rewritten even when it was not +necessary, and e2fsck would erroneously try to hide quota files which +were already hidden. + +Quiet complaints in e2fsck when the total free blocks or inodes are +incorrect in the superblock after an system crash, since we don't +update nor depend on the superblock summaries at each commit boundary. + +Fixed a regression introduced in 1.42.2 which would cause applications +outside of e2fsprogs which did not pass the EXT2_FLAG_64BIT (and so +would were still using the legacy 32-bit bitmaps) to crash. This was +due to missing 32-bit compat code in side the function +ext2fs_find_first_zero_generic_bmap(). (Addresses Red Hat Bugzilla: +#808421) + +Fix a bug which would cause mke2fs to fail creating the journal if +/etc/mtab and /proc/mounts are missing. (Addresses Sourceforge Bug: +#3509398) + +Updated/fixed various man pages. + +Update Czech, Dutch, French, German, Polish, Sweedish, and Vietnamese +translations + +Fixed various Debian Packaging issues. + + +Programmer's Notes +------------------ + +Change the nonsensically wrong types in the function signature of the +inline function ext2fs_find_first_zero_block_bitmap2(). This was +caused by a cut and paste error; fortunately no code in e2fsprogs used +this inline function, and there are any users of this functions +outside of e2fsprogs. + +Add support for systems which have valloc(), but which do have +posix_memalign() nor memalign() (such as MacOS 10.5). + +Refactor and clean up the allocation of aligned buffers for Direct I/O +support. Previously some allocations were requesting a greater +alignment factor that what was strictly necessary. Also optimize +reading and writing bitmaps using Direct I/O when the size of the +bitmap did not fully cover the file system blocksize. + +Reserve the codepoints for the INCOMPAT features LARGEDATA and +INLINEDATA. + +Improved the regression test suite by adding some new integration +tests (f_jnl_32bit, f_jnl_64bit) which detect breakage of the on-disk +jbd2 format, as well as f_eofblocks which tests the new handling of +uninitialized and initialized blocks beyond i_size. Also add a new +unit test which verifies 32-bit bitmaps support and the new +find_first_zero primitives. + +Add a few dependencies to fix parallel (make -j) builds. + +Removed bash'isms which were breaking the regression test suite on +systems where /bin/sh is not bash. + +The config.guess and config.sub have been updated to the 2012-02-10 +version. + +Fix a portability problem caused by assuming the present of mntent.h +means that setmntent() exists. Instead, explicitly test for this in +the configure script. + +If the sys/signal.h header file does not exist, don't try to include +it, since it's not available on all systems. + +Add support for systems that do not support getpwuid_r() + +The configure script now supports a new option, +--enable-relative-symlinks, which will install relative symlinks for +the ELF shared library files. (Addresses Sourceforge Bug: #3520767). + +When building BSD shared libraries make sure the LDFLAGS variable is +passed to the linker. Fixing this allows, for example, e2fsprogs to +be built in 32-bit mode on Mac OS X Lion (Addresses Sourceforge Bug: +#3517272) + +Fix gcc -Wall nitpicks + + +E2fsprogs 1.42.2 (March 27, 2012) +================================= + +The resize2fs program uses much less CPU and is much faster for very +large file systems. (Addresses Debian Bug: #663237) + +The seti and freei commands in debugfs can now take an optional length +argument to set and clear a contiguous range of inodes. + +E2fsck will now make explicit checks for the EOFBLOCKS_FL, since we +plan to remove support for it from the kernel file system driver. It +really wasn't very useful and was causing more problems than it +solves. Since e2fsck will complain if inodes that should have +EOFBLOCKS_FL do not have the flag set, we are going to remove this +check from e2fsprogs first, and then only remove the flag from the +kernel much later. + +The mke2fs program can now use direct I/O via "mke2fs -D". This will +slow down the mke2fs, but it makes it more polite on a loaded server +by limiting the amount of memory that gets dirtied by mke2fs when it +is using buffered I/O. + +E2fsck was needlessly closing and re-opening the file system as a side +effect of adding Multiple Mount Protection (MMP). This isn't +necessary for non-MMP file systems, so drop it. + +Print errors returned by ext2fs_open2() and ext2fs_check_desc() so we +can more easily diagnose memory allocation failures caused by +insufficient memory. E2fsck will now abort if there are memory +allocation failures when the file system is initially opened and +during the block group descriptor checks. (Addresses Google Bug: +#6208183) + +If there are incorrect block group checks, e2fsck will now report the +incorrect and corrected checksum values. + +The e2fsck progam can now write log files containing the details of +the problems that were found and fixed directly, via configuration +parameters in /etc/e2fsck.conf. + +Added the ability to limit the number of messages reported by e2fsck +for a given problem type. This avoids a potential bottleneck if there +is a serial console which can cause a boot sequence to take a long +time if e2fsck needs to report many, many file system errors. + +The dumpe2fs, debugfs, and tune2fs now use rbtree bitmaps, which cause +them to use much less memory for large file systems. + +The dumpe2fs program will now print the expected block group checksum +if it is incorrect. This helps to diagnose problems caused by +incorrect block group checksums. + +E2fsck now checks for extents with a zero length, since the kernel +will oops if it comes accross such a corrupted data structure. (See +https://bugzilla.kernel.org/show_bug.cgi?id=42859) + +E2fsck has a number of bugs relating to discard that have been fixed. +(1) Fixed a bug which could cause e2fsck to discard portions of the +inode table which were actually in use. (2) E2fsck will now avoid +using discard if the block device doesn't zero data on discard, since +otherwise this could cause problems if the file system gets corrupted +in the future. (3) E2fsck will now avoid using discard when it is run +in read-only mode. (4) Fixed a bug which caused e2fsck to not issue +discards in the last block group. + +E2fsck's CPU utilization in pass 5 has been optimized, which will +speed up e2fsck slightly. + +E2image will now skip copying uninitialized bitmap and inode table +blocks. + +Fixed mke2fs -S so it does not corrupt the first block group's +information. + +E2fsck will now check the new sysfs interface to determine if we are +using the battery or AC mains. (Addresses SourceForge Bug: #3439277) + +Updated/fixed various man pages. (Addresses Debian Bug: #665427) + +Fixed various Debian Packaging issues. (Addresses Debian Bug: #665885) + +Programmer's Notes +------------------ + +Fixed various portability issues for non-Linux systems, particularly +MacOS X, as well as Linux systems running with the just-released glibc +2.15. + +Fix file descriptor leak in ext2fs_close() if the file system with +uninit_bg is opened read/only with a backup superblock. (Addresses +SourceForge Bug: #3444351) + +Fixed an invalid return in a non-void function in the quota code. +(Addresses SourceForge Bug: #3468423) + +Fixed the debian rules file so that the calls to dpkg-buildflags works +when the shell is dash. + +The debian package build now uses V=1 so that there is more +information about potential build failures in debian buildd logs. + +If the uninit flags get cleared by functions such as +ext2fs_new_inode() or ext2fs_new_block2(), we now make sure the +superblock is marked dirty and the block group descriptor checksum is +updated if necessary. + +The debian rules file will now try to load debian/rules.custom of it +exists. This flie can skip various builds for speed reasons if there +is no need for the e2fsck-static or udeb packages. Available +customizations in the rules file includes SKIP_STATIC=yes, +SKIP_BF=yes, and SKIP_DIETLIBC=yes. + +In addition, if the file misc/mke2fs.conf.custom.in exists in the +source tree, it will be used instead of the standard misc.conf file in +the upstream sources. This makes it easier for Debian-derived systems +to distribute a custom mke2fs.conf file without having to worry about +merge issues if future versions of e2fsprogs makes changes in the +upstream default version of mke2fs.conf. + + +E2fsprogs 1.42.1 (February 17, 2012) +=================================== + +The mke2fs and e2fsck now use significantly less memory when creating +or checking very large file systems. This was enabled by adding +extent-based bitmaps which are stored using a red-block tree, since +block and inode allocations tend to be contiguous. + +The command mke2fs -S is used as a last ditch recovery command to +write new superblock and block group descriptors, but _not_ to destroy +the inode table in hopes of recovering from a badly corrupted file +system. So if the uninit_bg feature is enabled, mke2fs -S will now +set the unused inodes count field to zero. Otherwise, e2fsck -fy +after using mke2fs -S would leave the file system completely empty. + +Since mke2fs recognizes mke3fs in argv[0] to mean "mkfs.ext3", also +honor "mke4fs" to work the same as "mke2fs.ext4", since RHEL5 has +installed an mke2fs binary using that name. + +The usage and help messages for the -G, -t and -T options in mke2fs +have been fixed. + +If e2fsck needs to use the backup group descriptors, the +ext2fs_open2() function clears the UNINIT bits to ensure all of the +inodes in the file systems get scanned. However, the code which reset +the UNINIT flags did not also recalculate the checksum, which produced +many spurious (and scary) e2fsck messages. This has been fixed by +resetting cheksums when the UNINIT bits are cleared. + +Relax a check in e2fsck which required that the block bitmap to be +initialized when the inode bitmap is in use. This will allow us to +eventually eliminate code from the kernel which forcibly initialized +the block bitmap when the inode bitmap is first used, requiring an +extra journal credit and disk write. (Addresses Google Bug: #5944440) + +Make sure rdebugfs (which may be installed setuid or setgid disk) does +not honor environment variables if euid != uid or egid != gid. + +Debugfs's ncheck command has been optimized and now is much more +robust with faced with corrupted file systems. The ncheck command +also now has a -c option which will verify the file type information +in the directory entry to see if matches the inode's mode bits. This +is extremely useful when trying to use debugsfs to determine which +parts of the file system metadata can be trusted. + +E2image will try to use ftruncate64() to set the i_size for raw +images, instead of writing a single null byte. This avoid allocating +an extra block to the raw image, for those file systems and/or +operating systems that support this. (Linux does.) In addition, fix +a logic bug that caused the file to not be properly extended if the +size of the last hole was exactly an multiple of a megabyte. + +Fixed a bug in resize2fs where for 1k and 2k file systems, where +s_first_data_block is non-zero, this wasn't taken into account when +calculate the minimum file system size for use with the -M option. + +Fixed the badblocks program to honor the -s flag when in read-only -t +mode. (Addresses Debian Bug #646629) + +Update Czech, Dutch, French, Polish, and Sweedish translation from the +Translation Project. + +Fixed various Debian Packaging issues so that dpkg-buildflags is used +if present, which allows e2fsprogs to be built with security hardening +flags. (Addresses Debian Bugs: #654457) + +Programmer's Notes +------------------ + +Fix a bug in ext2fs_clear_generic_bmap() when used for 32-bit bitmaps. +This was only an issue for programs compiled against e2fsprogs 1.41 +that manipulate bitmaps directly. (Addresses Sourceforge Bugs: +#3451486) + +The libext2fs library now uses sysconf() to fetch the page size, instead +of the deprecated getpagesize(). + +The ext2fs_get_pathname() function will return a partial path if an a +directory in the path is not a directory, displaying it as an inode +number in angle brackets instead of giving up and displaying an error. +This is much more helpful when a user is trying to debug a corrupted +file system. + +Codepoints for the RO_COMPAT_REPLICA feature has been reserved. + +Added a new library function, ext2fs_file_get_inode_num(), for use by +fuse2fs. + +Fixed a bug in ext2fs_file_set_size2() so that when it is truncating a +file, it actually works. + +The block iterator now properly honors the BLOCK_ABORT flag for +extent-based flags. Previously, it didn't, which generally made code +be less efficient, but it could cause bugs in ext2fs_link(), for +example, by causing it to insert multiple directory entries. + +Fixed an (harmless other than causing a compiler warning) use of an +uninitialized variable in e2fsck's MMP code. + + +E2fsprogs 1.42 (November 29, 2011) +================================== + +This release of e2fsprogs has support for file systems > 16TB. Online +resize requires kernel support which will hopefully be in Linux +version 3.2. Offline support is not yet available for > 16TB file +systems, but will be coming. + +This release of e2fsprogs has support for clustered allocation. This +reduces the number of block (now cluster) bitmaps by allocating and +deallocating space in contiguous power-of-2 collections of blocks, +which are called clustered. This is a file system level feature, +called 'bigalloc', which must be enabled when the file system is +initially formatted. It is not backwards compatible with older +kernels. + +Added support for the Multi-Mount Protection (MMP) feature. + +E2fsck more efficiently uses scratch files for really big file +systems. (This is a feature that has to be turned on explicitly; see +[scratch_files] in the e2fsck.conf man page.) + +Fix a bug in e2fsck where if the free blocks and inodes counts are +incorrect, e2fsck would fix them without printing an error message. +This would cause a "*** FILE SYSTEM WAS MODIFIED ***" message without +any explanation of what was fixed. + +E2fsck will no longer attempt to clone an extended attribute block in +pass1b handling if the file system does not support extended +attributes. + +E2fsck will be more careful accidentally asking the user to continue +if the file system is mounted, so that an escape sequence won't cause +a false positive. (Addresses Debian Bug: #619859) + +E2fsck now uses less cpu time in pass 5 when large portions of the +bitmaps are uninitialized. + +E2fsck will no longer segault when a corrupted file system has a bad +extent, and removing it leads to a block needing to be deallocated. +(Addresses SourceForge Bug: #2971800) + +E2fsck will catch termination signals (segfaults, bus errors, sigfpe) +and print debugging information to make it easier to find potential +problems. + +E2fsck will check to see if the bad block inode looks insane, and will +skip trying to use if it certain fields which should be zero look +non-zero. This is to avoid a corrupted bad block inode causing e2fsck +to get confused and do more harm than good. + +If e2fsck modifies certain superblock fields which the kernel doesn't +look at, it will now mark the superblock as dirty without marking the +file system as changed. This avoids signalling the init scripts that +a reboot is necessary, since the kernel isn't going to look at those +fields, so it won't care if they have been changed. + +Fixed a bug in the libext2fs library (in the binary search routine of +the icount abstraction) that could (very, very rarely) cause e2fsck to +die in the middle of pass 1 or pass 2 processing. + +E2fsck will not try to do a discard operation if the -n option was +specified on the command line. + +E2fsck now supports an extended "discard" option which will cause +e2fsck to attempt discard all unused blocks after a full, successful +file system check. + +E2fsck will check for the bad block inode to make sure it looks sane +before trusting it, to avoid causing more harm than good to the file +system. + +E2fsck now returns additional status bits in its exit code if it +aborts early in the e2fsck run. + +E2fsck now correctly calculates the maximum file size in the case of +the huge_file file system feature enabled without extents. + +The mke2fs and e2fsck programs now tries to use the punch hole command +as a "discard" when operating on normal files. + +The e2image program now supports the qcow2 format, which is a more +efficient way of capturing file system dumps. + +Mke2fs now supports the [devices] stanza in mke2fs.conf which allows +per-device defaults to be specified in the configuration file. + +Mke2fs now supports the reserved_ratio relation in the [defaults] and +[fs_types] section in mke2fs.conf. + +Mke2fs now creates extent-mapped directories for the root and +lost+found directories. + +Mke2fs will skip zero'ing the journal if the extended option +"lazy_journal_init" is specified. This can save a lot of time, but it +does add a small amount of risk if the system crashes before the +journal is overwritten entirely once. It is epsecially useful for +testing. + +Mke2fs will now create file systems that enable user namespace +extended attributes and with time- and mount count-based file +system checks disabled. + +Mke2fs will not set a stride or strip size of one block based on block +device attributes obtained from sysfs. + +Mke2fs now displays a progress report during the discard process. + +Mke2fs now handles extreme file system parameters correctly which +previously caused the inodes per group to drop below 8, leading to a +segfault. (The inodes per group must be a multiple of 8, but the code +didn't correctly deal with an inodes per group count less than 8.) + +Mke2fs and tune2fs previously would give an error if the user tried +setting the stride and stripe-width parameters to zero; but this is +necessary to disable the stride and stripe-width settings. So allow +setting these superblock fields to zero. (Addresses Google Bug: +#4988557) + +Mke2fs now gives a warning if the auto-detected block size exceeds the +system's page size. + +If the enable_periodic_fsck option is false in /etc/mke2fs.conf (which +is the default), mke2fs will now set the s_max_mnt_count superblock +field to -1, instead of 0. Kernels older then 3.0 will print a +spurious message on each mount then they see a s_max_mnt_count set to +0, which will annoy users. (Addresses Debian Bug: #632637) + +The default mke2fs.conf now has entries for "big" and "huge", which +are needed for very big file systems. + +The resize2fs program now has support for a new online resize ioctl +that can support file systems > 16TB, once it arrives in v3.x kernels. + +Fixed bug which caused resize2fs to fail when shrinking an empty file +system down to its minimal size. (Addresses Sourceforge Bug #3404051) + +Fixed tune2fs's mount options parsing. (Addresses Debian Bug: #641667) + +Allow tune2fs to remove external journals if the device can not be +found. + +Debugfs's icheck will now correctly find inodes which use the +searched-for block as an extended attribute block. + +Debugfs now has a new "punch" command which remove blocks from the +middle of an inode. + +Debugfs now has a new "e2freefrag" command which analyzes the free +space fragmentation of the file system, using the same code as the +e2freefrag program. + +Debugfs now has a "filefrag" command which displays information about +a file's fragmentation. + +Add support to build a metadata-only, read-only, stripped-down version +of debugfs called rdebugfs. + +Fixed a potential stack overrun bug in debugfs. + +The badblocks program now correctly recovers from I/O errors when +direct I/O is being used. The badblocks command now also supports a +-B option which forces the use of buffered I/O, and the -v option will +provide a more detailed breakdown of read, write, and failed +comparison errors. + +Added e4defrag tool which uses the EXT4_IOC_MOVE_EXT ioctl. + +Added support for journals larger than 2GB. + +Support using both hard links and symlinks when installing e2fsprogs. + +Add overflow checking to tune2fs -i's fsck interval, which must fit in +a 32-bit field. + +The debugfs command now has a new 'blocks' command which prints out +data blocks of a particular inode in a format which is useful for +scripting. + +Filefrag will report 0 extents correctly in verbose mode. (Addresses +RedHat Bugzilla: #653234) + +Filefrag has been fixed so its -v report prints the correct expected +block number (previously there had been an off-by-one error). In +addition, it will now display the number of contiguous extents when -v +is not specified. This makes it consistent with the number of extents +printed when the -v option was specified. In addition, the number of +contiguous extents is far more interesting/useful than the number of +physical extents for very large files. (Addresses Debian Bug: +#631498, #644792) + +Logsave's usage message has been fixed. (Addresses Debian Bug: +#619788) + +Avoid an infinite loop in ext2fs_find_block_device() if there are +symlink loops in /dev caused by a buggy udev. + +Added a useful "fallocate" program to the contrib directory. + +Fixed an ABI compatibility problem in libext2fs which broke the dump +program. Also added back some macros which dump needed so it could +compile against the latest version of ext2_fs.h (Addresses Debian Bug: +#636418) + +Fixed parsing of MNTOPT_ options for tune2fs and debugfs (Addresses +Debian Bug: #641667) + +Added internationalization support for libcom_err error table strings. + +Fixed various spelling mistakes found in various output strings found +by I18N translators. + +Update translations: French, Chinese, Germany, Indonesian, Swedish, +Vietnamese, Polish, Dutch, Czech. (Addresses Debian Bugs: #520985, +#620659) + +Fixed various Debian Packaging issues. (Addresses Debian Bugs: +#614662, #632169, #641838, #627535, #629355) + +Updated/clarified man pages. (Addresses Debian Bugs: #639411, +#642193, #634883) + +Programmer's Notes +------------------ + +Initial support for quota as an integrated feature, where the quota +files are hidden system files that are automatically maintained by +e2fsck is present, although disabled by default. It must be enabled +by using the configure option --enable-quota. + +Reserved the on-disk fields for the metadata checksum and snapshot +features, which are currently in development. + +The ext2fs library now has the new functions ext2fs_punch(), +ext2fs_get_memzero() and ext2fs_file_get_inode(). + +The ext2fs library now has support for calculating the crc32c checksum +(via the new functions ext2fs_crc32c_be and ext2fs_crc32c_le). + +The I/O manager now supports the discard operation. + +Reserved file system code points for new 1st class quota feature. + +Shortened the compilation lines by moving the autoconf defines to +a config.h header file. + +Fixed a potential free of an unitialized pointer in +ext2fs_update_bb_inode(). + +Fixed miscellaneous gcc -Wall and coverity warnings. + +Fixed portability issues for Mac OS X, Hurd, and FreeBSD. + +Fixed a build failure when OMIT_COM_ERR is defined. + +Improved error checking and fixed memory leaks caused by error return +paths. + +Add ext2fs_flush2() and ext2fs_close2() which takes a flag to allow +the fsync() to be skipped. + +Added a test for extent-mapped journals by mke2fs and tune2fs. + +Added a test for creating a large (over 4GB) journal using mke2fs. + +Added a test to make sure the inode size remains constant. + +The regression test script now prints the list of which tests failed. + +The regression test system now uses /tmp for its scratch files, which +is often a tmpfs mounted file system and hence much faster. + +The i_e2image test was fixed so it works with valgrind. + +Tests that rely on debugfs are now skipped if debugfs wasn't built. + +Fixed the dependencies for "make check" so all required dependencies +are built before running the gression tests. + +A link to com_err.h is installed in $(includedir) during a "make install". + +The po/*.gmo files are automatically rebuilt if they are missing or +out of date. This helps out Debian packaging. + +Allow ext2fs_get_memalign() to compile on systems that don't have +posix_memalign(). + +Fixed a namespace leak in libext2fs (tdb_null). + + +E2fsprogs 1.41.14 (December 22, 2010) +===================================== + +Fix spurious complaint in mke2fs where it would complain if the file +system type "default" is not defined in mke2fs.conf. + +The resize2fs program will no longer clear the resize_inode feature +when the number reserved group descriptor blocks reaches zero. This +allows for subsequent shrinks of the file system to work cleanly for +flex_bg file systems. + +The resize2fs program now handles devices which are exactly 16T; +previously it would give an error saying that the file system was too +big. + +E2fsck (and the libext2fs library) will not use the extended rec_len +encoding for file systems whose block size is less than 64k, for +consistency with the kernel. + +Programming notes +----------------- + +E2fsprogs 1.41.13 would not compile on big-endian systems. This has +been fixed. (Addresses Sourceforge Bug: #3138115) + +The ext2fs_block_iterator2() function passed an incorrect ref_offset +to its callback function in the case of sparse files. (Addresses +Sourceforge Bug: #3081087) + +Fix some type-punning warnings generated by newer versions of gcc. + + +E2fsprogs 1.41.13 (December 13, 2010) +===================================== + +E2fsck now supports the extended option "-E journal_only", which +causes it to only do a journal replay. This is useful for scripts +that want to first replay the journal and then check to see if it +contains errors. + +E2fsck will now support UUID= and LABEL= specifiers for the -j option +(which specifies where to find the external journal). (Addresses +Debian Bug #559315) + +E2fsck now has support for the problems//force_no +configuration option in e2fsck.conf, which forces a problem to not be +fixed. + +Dumpe2fs will now avoid printing large negative offsets for the bitmap +blocks and instead print a message which is a bit more helpful for +flex_bg file systems. + +Mke2fs will now check the file system type (specified with the -t +option) to make sure it is defined in the mke2fs.conf file; if it is +not, it will print an error and abort. If the usage type (specified +with the -T option) is not defined in mke2fs.conf, mke2fs will print a +warning but will continue. (Addresses Debian Bug #594609) + +Clarified error message from resize2fs clarifying that on-line +shrinking is not supported at all. (Addresses Debian Bug #599786) + +Fix an e2fsck bug that could cause a PROGRAMMING BUG error to be +displayed. (Addresses Debian Bug #555456) + +E2fsck will open the external journal in exclusive mode, to prevent +the journal from getting truncated while it is in use due to a user +accidentally trying to run e2fsck on a snapshotted file system volume. +(Addresses Debian Bug #587531) + +Fix a bug in e2fsck so it has the correct test for the EOFBLOCKS_FL +flag. + +The tune2fs program can now set the uninit_bg feature without +requiring an fsck. + +The tune2fs, dumpe2fs, and debugfs programs now support the new ext4 +default mount options settings which were added in 2.6.35. + +The e2fsck and dumpe2fs programs now support the new ext4 superblock +fields which track where and when the first and most recent file +system errors occurred. These fields are displayed by dumpe2fs and +cleared by e2fsck. These new superblock fields were added in 2.6.36. + +Debugfs now uses a more concicse format for listing extents in its +stat command. This format also includes the interior extent tree +blocks, which previously was missing from stat's output for +extent-based files. + +Debugfs has a new option, -D, which will request Direct I/O access of +the file system. + +Mke2fs will skip initializing the inode table if a device supports +discard and the discard operation will result in zero'ed blocks. + +Badblocks will now correctly backspace over UTF-8 characters when +displaying its progress bar. (Addresses Gentoo Bug #309909; Addresses +Debian Bugs #583782 and #587834) + +E2freefrag will now display the total number of free extents. + +Resize2fs -P no longer requires a freshly checked filesystem before +printing the minimum resize size. + +Fixed a floating point precision error in a binary tree search routine +that can lead to seg fault in e2fsck and resize2fs. + +Fixed a bug in e2fsck where if both the original and backup superblock +are invalid in some way, e2fsck will fail going back to the original +superblock because it didn't close the backup superblock first, and +the exclusive open prevented the file system from being reopened. + +Fixed a big in e2freefrag which caused getopt parsing to fail on +architectures with unsigned chars. (Addresses Gentoo Bug: #299386) + +Clarified an mke2fs error message so a missed common in an -E option +(i.e., mke2fs -t ext4 -E stride=128 stripe-width=512 /dev/sda1") +results in a more understandable explanation to the user. + +Mke2fs now displays the correct valid inode ratio range when +complaining about an invalid inode ratio specified by the user. + +Mke2fs now understands the extended option "discard" and "nodiscard", +and the older option -K is deprecated. The default of whether +discards are enabled by default can be controled by the mke2fs.conf +file. + +Mke2fs's handling of logical and physical sector sizes has been +improved to reflect the fact that there will be some SSD's with 8k and +16k physical sectors arriving soon. Mke2fs will no longer force block +size to be the physical sector size, since there will be devices where +the physical sector size is larger than the system's page size, and +hence larger than the maximal supported block size. In addition, if +the minimal and optimal io size are not exported by the device, and +the physical sector size is larger than the block size, the physical +sector size will be used to set the Raid I/O optimization hints in the +superblock. + +E2fsck will now display a better, more specific error message when the +user enters a typo'ed device name, instead of blathering on about +alternate superblocks. + +Fixed various Debian Packaging Issues + +Updated/clarified man pages (Addresses Debian Bugs: #580236, #594004, +#589345, #591083; Addresses Launchpad Bug: #505719) + +Update the Chinese, Chzech, Dutch, French, Germany, Indonesian, +Polish, Swedish, and Vietnamese translations. + + +Programmer's Notes +------------------ + +Fix a dependency definition for the static and profiled blkid +libraries which could cause compile failures in some configurations. +(Addresses Debian Bug: #604629) + +Add support for Direct I/O in the Unix I/O access layer. + +Fixed a memory leak in the Unix I/O layer when changing block sizes. + +Fixed minor memory leaks in mke2fs. + +Added a new function to the ext2fs library, ext2fs_get_memalign(). + +The tst_super_size test program will check to make sure the superblock +fields are correctly aligned and will print them out so they can be +manually checked for correctness. + +Fixed some makefile dependencies for test programs in lib/ext2fs. + +Reserved the feature flags and superblock fields needed for the Next3 +snapshot feature. + +Reserved the feature flags for EXT4_FEATURE_INCOMPAT_DIRDATA and +EXT4_INCOMPAT_EA_INODE. + + +E2fsprogs 1.41.12 (May 17, 2010) +================================ + +Mke2fs now gives a correct error message if the external journal +device is not found. (Addresses Red Hat Bug #572935) + +Resize2fs -P will now refuse to print a minimum size if the file +system is not clean. Previously it would go ahead and print a minimum +size anyway, which might not be correct, leading to user confusion. + +E2fsck now tests for extents that begin at physical block 0 and +rejects them as invalid. (Addresses Google Bug: #2573806) + +Fixed a bug in e2fsck which could cause it to crash when trying to +remove an invalid extent and the block bitmaps hadn't yet been loaded. +(Addresses SourceForge Bug: #2971800) + +E2fsck now will completely skip time-based checks if the system clock +looks insane or the option broken_system_clock is set in +/etc/e2fsck.conf. + +E2fsck would previously report an i_blocks corruption for a 4T file +created using posix_fallocate; this bug has been fixed. + +E2fsck will now correctly mark a sparse journal as invalid and will +delete and recreate the journal to address the problem. + +E2fsck would previously incorrectly ask the user whether she would +like to abort the file system check after finding a problem --- and +then abort regardless of the user's answer. This is annoying, and +has been fixed. + +E2fsck can now continue even if it fails to recreate the resize +inode; previously it would just abort the file system check +altogether. + +E2fsck could potentially remove directory entries for inodes found in +the unused region of the inode table; this would generally happen on +ext4 file systems that do not use journaling. This bug has been fixed +by not clearing these directory entries once it has been established +that bg_unused_inodes may not be trustworthy; once pass #2 has been +completed, e2fsck will restart the file system check from the +beginning, and then it will be safe to delete any directory entries +pointing to inodes that appear to be deleted. (Addresses Google Bug: +#2642165) + +E2fsck will not try to set the block group checksums if the user +cancels the fsck with a control-C. It's a bad idea to set the +checksums if e2fsck hasn't been completed, and it often results an the +error message, "Inode bitmap not loaded while setting block group +checksum info". (Addresses Launchpad Bug: #582035) + +The mke2fs program now queries the kernel for the physical as well as +the logical sector size, and will not allow a blocksize below the +logical, and will strongly encourage a blocksize at least as big as +the physical blocksize. This is needed for 4k sector drives that +emulate 512 byte sector sizes. + +Mke2fs will now allow a flex_bg size of 1. This is unusual, and +rarely needed, but it is a legal value. + +E2fsck will check for cases where the EOFBLOCKS_FL is set when it is +not needed, and offer to clear it; this is a sign of a kernel bug, but +more importantly, some released kernels may crash when this situation +is encountered on ext4 file systems. (Addresses Google Bug: #2604224) + +E2fsck will use the EOFBLOCKS_FL flag exclusively to check whether +i_size is correct. (Kernels starting with 2.6.34 will set +EOFBLOCKS_FL.) + +The com_err library will now only output ^M (a CR character) when the +tty is in raw mode. + +Update the Czech, Chinese, Dutch, French, Germany, Indonesian, Polish, +and Vietnamese translations. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #571247, #563487) + + +Programmer's Notes +------------------ + +The regression test suite now uses its own mke2fs.conf file, so that +downstream distributions want change the mke2fs.conf file which is +distributed in the RPM or dpkg file, without worrying about screwing +up the regression test results. + +Always build namei.o so that building with configure --disable-debugfs +works correctly. Long-term, if we care about reduced e2fsprogs +builds, we need a more general solution for deciding what .o files are +needed for a particular build. Given that install floppies are going +(gone?) the way the dodo bird, we probably don't care, though. +(Addresses Sourceforge Bug: #2911433) + +Add configure options --enable-symlink-build and +--enable-symlink-install, which allow e2fsprogs be built using +symlinks instad of hard links, and to be installed using symlinks +instead of hard links, respectively. It is useful when the file +system where the build is taking place, or the file system where +e2fsprogs is installed, can't handle hard links for some reason. +(Addresses Sourceforge Bug: #1436294) + +Fixed compile warning in mke2fs.c. + + +E2fsprogs 1.41.11 (March 14, 2010) +================================== + +E2fsck will no longer give a fatal error and abort if the physical +device has been resized beyond 2**32 blocks. (Addresses Launchpad +Bug: #521648) + +Debugfs has a bug fixed so that "logdump -b " now properly shows +the allocation status of the block . (Addresses Debian Bug: +#564084) + +E2fsck now prints a much more emphatic and hopefully scary message +when a file system is detected as mounted while doing a read/write +check of the filesystem. Hopefully this will dissuade users from +thinking, "surely that message doesn't apply to *me*" :-( + +E2fsck -n will now always open the file system read-only. We now +disallow certain combination of options which previously were manual +exceptions; this is bad because it causes users to think they are +smarter than they really are. So "-n -c", "-n -l", "-n -L", and "-n +-D" are no longer supported. (Addresses Launchpad Bug: #537483) + +In e2fsprogs 1.41.10, mke2fs would ask for confirmation to proceed if +it detected a badly aligned partition. Unfortunately, this broke some +distribution installation scripts, so it now just prints the warning +message and proceeds. (Addresses Red Hat Bug: #569021. Addresses +Launchpad Bug: #530071) + +Mke2fs would take a long time to create very large journal files for +ext4. This was caused by a bug in ext2fs_block_iterate2(), which is +now fixed. + +E2fsck now understands the EOFBLOCKS_FL flag which will be used in +2.6.34 kernels to make e2fsck not complain about blocks deliberately +fallocated() beyond an inode's i_size. + +E2fsprogs 1.41.10 introduced a regression (in commit b71e018) where +e2fsck -fD can corrupt non-indexed directories when are exists one or +more file names which alphabetically sort before ".". This can happen +with ext2 filesystems or for small directories (take less than a lock) +which contain filenames that begin with a space or some other +punctuation mark. (Addresses Debian Bug: #573923, Addresses Launchpad +Bug: #525114) + + +Programmer's Notes +------------------ + +Add new test, f_rehash_dir, which checks to make sure e2fsck -D works +correctly. + +The libcom_err function now has support for Heimdal's com_right_r +function(). (Addresses Sourceforge Bug: #2963865, Addresses Debian +Bug: #558910) + + +E2fsprogs 1.41.10 (February 7, 2010) +==================================== + +Fix resize2fs bug which causes it to access invalid memory. + +Add libss support for libreadline.so.6. + +Fix e2fsck's check for extent-mapped directory with an incorrect file +type. + +Add new e2fsck.conf configuration option, default/broken_system_clock +to support systems with broken CMOS hardware clocks. Also, since too +many distributions seem to have broken virtualization scripts now, +e2fsck will by default accept dates which are off by up to 24 hours by +default. (Addresses Debian Bugs: #559776, #557636) + +Fix a bug where mke2fs may not use the best placement of the inode +table when there is only room for a single block group in the last +flex_bg. + +E2fsck is now smarter when it needs to allocate blocks in the course +of fixing file system problems. This reduces the number of spurious +differences found in pass #5. + +E2fsck will no longer rehash directories which fit in a single +directory block. + +E2fsck now correctly handles holes in extent-mapped directories (i.e., +sparse directories which use extents). + +Fix big-endian problems with ext2fs_bmap() and ext2fs_bmap2(). + +Fix a bug in filefrag where on platforms which can allow file systems +with 8k blocks, that it doesn't core dump when it sees a file system +with 8k block sizes. (Thanks to Mikulas Patocka for pointing this +out.) + +E2fsck will correctly fix directories that are have an inaccurate +i_size as well as other problems in a single pass, instead of +requiring two e2fsck runs before the file system is fully fixed. + +Fix e2fsck so it will correctly find and detect duplicate directory +entries for non-indexed directories. ( Addresses Sourceforge Bug: +#2862551) + +Mke2fs will use BLKDISCARD to pre-discard all blocks on an SSD or +thinly-provisioned storage device. This can be disabled using the -K +option. + +Enhance libext2fs so it works around bug in Linux version 2.6.19 +and earlier where the /proc/swaps file was missing the header on +the first line. + +Fix bug in Linux version 2.6.19 and earlier where the /proc/swaps file +was missing the header on the first line. + +Fix some big-endian bugs in e2fsck and libext2fs. + +Fix resize2fs so it works correctly on file systems with external +journals instead of failing early with the error "Illegal inode +number". + +Fix libss so that it does not seg fault when using a readline library +which does not supply a readline_shutdown() function. + +Updated dumpe2fs's usage message so it correctly gives the right +arguments summary for "-o superblock=" and "-o blocksize=". +(Addresses Launchpad Bug: #448099) + +Teach libext2fs to ignore the high 32 bits of the i_blocks field +when huge_file file system feature is set, but the inode does not +have the HUGE_FILE_FL flag set. + +Fix e2fsck's handling of 64-bit i_blocks fields. + +E2fsck will now print "Illegal indirect block", "Illegal +double-indirect block", etc., instead of "Illegal block #-1" or +"Illegal block #-2", etc. This makes it easier for users to +understand what has gone wrong. (Addresses SourceForge Bug: #2871782) + +Mke2fs now will obtain get device topology information from blkid and +use it to populate the superblock stride and stripe sizes. It will +also warn if the block device is misaligned + +Fix file descriptor leaks in fsck and debugfs. (Addresses Novell Bug: +##524526) + +Fix the libext2fs library code to round up the bitmap size to a 4-byte +boundary, to prevent spurious seg faults caused by the x86 +architecture. This doesn't affect Linux systems, but was a major +problem on a number of *BSD systems. (Addresses Sourceforge Bug: +#2328708) + +Fix resize2fs's minimum size required for a file system so it doesn't +fail when "resize2fs -M" is run. (Addresses RedHat Bugzilla: #519131) + +Dumpe2fs now prints summary information about the contents of the +journal. + +Avoid printing scary error messages when e2fsck starts running +problems on low-memory systems, as it tends to panic and mislead the +user. (Addresses Debian Bug: #509529) + +Fix blkid's modules.dep parser so it handles compressed (.ko.gz) +modules files. (Address Red Hat Bug: #518572) + +Fix tune2fs so it can add a journal when an extent-enabled file system +is mounted. (Addresses Launchpad bug: #416648) + +Update Czech, Indonesian, Polish and Vietnamese translations (from the +Translation Project). + +Update/clarify man pages. (Addresses Sourceforge Bug: #2822186) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #540111) + +Programmer's Notes +------------------ + +The configure script supports the --with-cc, --with-ccopts, and +--with-ldopts options. Instead, the more standard use of CC=, +CCFLAGS=, and LDFLAGS= in the configure command line is used instead. +Also, --with-ld, which never worked, was also removed. +(Addresses Sourceforge Bug: #2843248) + +The in-tree header files are only used if the in-tree uuid or blkid +libraries are used. Otherwise, use the system-provided uuid or blkid +header files if using the system-provided libraries. + +Fix some build failures caused by --disable-* configure options. + +Work around a bug in autoconf 2.64. + + +E2fsprogs 1.41.9 (August 22, 2009) +================================== + +Fix a bug in e2fsck routines for reallocating an inode table which +could cause it to loop forever on an ext4 filesystem with the FLEX_BG +filesystem feature with a relatively rare (and specific) filesystem +corruption. This fix causes e2fsck to try to find space for a new +portion of the inode table in the containing flex_bg, and if that +fails, the new portion of the inode table will be allocated in any +free space available in the filesystem. + +Make e2fsck less annoying by only asking for permission to relocate a +block group's inode table once, instead of for every overlapping +block. Similarly, only ask once to recompute the block group +checksums, instead of once for each corrupted block group's checksum. + +Fix filefrag to avoid print the extent header if the FIEMAP ioctl is +not present, and it needs to fall back to using the FIBMAP ioctl. + +Fix filefrag to correctly print the number of extents for zero-length +files. (Addresses Debian Bug: #540376) + +Filefrag now has a -B option which forces the use of the FIBMAP ioctl +to more easily debug the FIBMAP code. + +Fixed filefrag for non-extent based files. + +Add a new program, e2freefrag, which displays information about the +free space fragmentation in an ext2/3/4 filesystem. + +Fix inode resizing via tune2fs -I so that it works correctly in the +face of non-empty bad blocks inodes, and if the filesystem was +formatted using the "mke2fs -E stride=N" option for RAID arrays. + +Fix regression in ext2fs_extent_set_bmap() caused e2fsck -fD to fail +and corrupt large directories if the directory needs to shrink by more +than one block. (Addresses Debian Bug: #537510) + +Fix e2fsck's buggy_init_scritps=1 so that the if the last write and/or +last mount times are in the future, they are corrected even if +buggy_init_scripts is set. This is needed because otherwise resize2fs +will refuse to resize the filesystem, even after running "e2fsck -f". +(Addresses Launchpad bug: #373409) + +E2fsck will now print much fuller information when the last mount time +or last written time is in the future, since most people can't seem to +believe their distribution has buggy init scripts, or they have a +failed CMOS/RTS clock battery. + +Enhance dumpe2fs to dump the extent information via the 'stat' +command, and more detailed extent information via the new command +'dump_extents'. + +Update French, Polish, Czech, and Sweedish translation from the +Translation Project. + +Fixed various Debian packaging issues --- see debian/changelog for +details. + +Programmer's Notes +------------------ + +Fixed miscellaneous gcc -Wall warnings. + +Fixed memory leak in error path in ext2fs_block_iterate2() + +Fixed non-Linux build of the intl directory by adding support for the +E/Q/V macros. + +The bitmap read/write functions now treat uninitialized bitmaps as +unallocated; this fixes a number of problems in all e2fsprogs for ext4 +filesystems when there is a need to allocate new blocks or inodes, and +there aren't any free blocks or inodes in the already-used block +groups. + +Improve ext2fs_extent_set_bmap() to avoid creating new extents which +get inserted into the extent tree when they are not needed. + + +E2fsprogs 1.41.8 (July 11, 2009) +================================ + +Fix resize2fs's online resizing, fixing a regression which in +e2fpsrogs 1.41.7. (Addresses Debian Bug: #535452) + +Fix potential filesystem corruptions caused by using resize2fs to +shrinking ext4 filesystems with extents enabled. (Addresses Red Hat +Bug: #510379) + +Optimize uuid_generate() to avoid running uuidd if it is not setuid or +setgid and the currently running program doesn't have write access to +the uuidd work directory. + +Add safety checks (for non-Linux systems) so that uuidd isn't run with +file descriptors 0, 1, and 2 closed; and if they are closed, uuidd +will be careful not to close the file descriptor for its unix domain +socket when it detaches itself from the controlling tty. Also add +safety checks so that if the unix domain socket between the uuid +library and uuidd program is closed for any reason, both the library +and the uuidd will return an appropriate error code instead of looping +in an infinite loop. + +The e2croncheck script, which creates an LVM snapshot and then checks +the ext3/4 filesystem via the LVM snapshot, has been added to the +contrib directory. + +Fix filefrag program for files that have more than 144 extents. + +Update French, Polish, Czech, Indonsian, and Sweedish translation from +the Translation Project. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bug #535530) + +Update/clarify man pages. + +Programmer's Notes +------------------ + +Fix compilation problem when configured with --disable-uuid. + +Don't build uuidgen if configured with --disable-uuid. + +Add the new library function ext2fs_test_inode_bitmap_range(), and +optimized ext2fs_test_block_bitmap_range(), which will be needed for +future optimizations for e2fsck. + +Fix makefile dependencies for libcom_err so that the Makefiles work +well on non-GNU make program. (Addresses Sourceforge Patches: #2813809) + +Enhance the build system so that the full set of commands executed by +the Makefiles are displayed, instead of the Linux kernel summary +output, if the build was configured with --enable-verbose-makecmds, or +if GNU make is in use and the V variable is non-null, i.e., via "make +V=1". + + +E2fsprogs 1.41.7 (June 29, 2009) +================================ + +Fix a bug in libext2fs which can cause e2fsck and resize2fs to write +uninitalized data into the portion of the inode beyond the first 128 +bytes when operating on inodes mapped via extents; potentially +corrupting filesystems. + +Fix memory leaks in e2fsprogs, including a very large memory leak +which can cause e2fsck to run out of memory when checking very large +filesystems using extents. + +The logsave program will now filter out the ^A and ^B characters when +writing to the console. + +Harden ext2fs_validate_entry() so that lsdel will not read beyond the +end of the block even if the directory block is corrupted. + +Fix debugfs from core dumping if the logdump command fails to open the +output file. + +Enhance badblocks to print the currently tested block number when +interrupted with ^C. + +Fix lsattr to exit with a non-zero status when it encounters errors. +(Addresses RedHat Bugzilla #489841) + +Fix e2fsprogs to use the same encoding for rec_len in 64k (and larger) +filesystems as the kernel when encoding rec_len >= 64k. For 64k +filesystems (currently all that is supported by e2fsprogs, this is +only a minor corner case). + +Resize2fs will now update the journal backup fileds in the sup0erblock +if the journal is moved; this avoids an unnecessary full fsck after +resizing the filesystem. (Addresses RedHat Bugzilla: #505339) + +Fix libext2fs to properly initialize i_extra_size when creating the +journal and resize inodes. + +Change badblocks to allow block sizes larger than 4k. + +Fix filefrag progam so it correctly checks for errors from the fiemap ioctl. + +Update Chinese and Czech translation from the Translation Project. + +Clean up various man pages. (Addresses Debian Bug #531385 and #523063) + + +Programmer's Notes +------------------ + +Add --disable-libuuid option to configure which uses an in-system +installed version of libuuid; the private version is enabled by +default. + +Add --valgrind-leakcheck option to the test_script program which runs +valgrind with the appropriate options to find memory leaks. + + +E2fsprogs 1.41.6 (May 30, 2009) +=============================== + +Fix a critical regression in e2fsck introduced version 1.41.5 which +can undo updates to the block group descriptors after a journal replay. + +If e2fsck receives an I/O error while replaying the journal, prompt +the user whether they want to ignore the error or not; if e2fsck is +run in preen mode, force fsck to abort the preen pass. + +Fix a bug which would cause e2fsck to core dump if the filesystem +contains a corrupt extent header, and the user declines to clear the +inode. (Addresses Sourceforge Bug: #2791794) + +Fix e2fsck to restart only once in the case of multiple block groups +which inodes in use that are in the uninitialized part of the block +group's inode table. + +To reduce user confusion, if the /etc/mtab file is missing +ext2fs_check_mount_point and ext2fs_check_if_mounted will return a +new, explicit error code to indicate this case. This will cause +e2fsck to give a clearer error message when the user is using buggy +rescue CD's that don't properly set up /etc/mtab. (Addresses Debian +Bug: #527859) + +Fix e2fsck so that if the primary group descriptors are corrupted, but +the backup superblock is entirely invalid, to go back to using (and +fixing) the priary group descriptors instead of completely giving up +on the filesystem. (Addresses Debian Bug: #516820) + +Change e2fsck to not abort a preen pass if an inode is found to have +i_file_acl_hi non-zero. Ext3 filesystems don't care, and newer +kernels (post 2.6.29) will ignore this field. So let's fix it +automatically during the preen pass instead of forcing the user to fix +this up manually. (Addresses Debian Bug: #526524) + +Add resource tracking for e2fsck passes 1b through 1d. + +Speed up e2fsck by eliminating unnecessary journal checks if the +filesystem is already mounted and doesn't need recovery (since the +kernel would have run the journal when the filesystem was mounted.) +Also speed up e2fsck by avoiding unnecessary block group descriptor +updates in ext2fs_close(). + +Add support to chattr to migrate inodes from using direct/indirect +blocks to extents. + +Avoid corrupting the filesystem if there is an attempt to shrink a +filesystem using resize2fs smaller than posible by making +ext2fs_set_bmap() more careful not to delete the old block until the +new block can be inserted. In addition, fix a bug in how the minimum +size of the filesystem (plus a safety margin) is calculated, and +modify resize2fs to refuse to shrink the filesystem below that minimum +size without the force flag. + +Teach blkid to try to figure out DM device names using take advantage +of information in sysfs when running on kernels (2.6.29 and later) +which provide this information in /sys/block/dm-/dm/name; this is +much faster than scanning for the devncie number in /dev/mapper. + +Fix blkid to prefer /dev/mapper/ device names instad of the +private /dev/dm-X names. + +Add an -a option to debugfs's close_filesys command which writes any +changes to the superblock or block group descriptors to all of the +backup superblock locations. + +Add support to the filefrag program to use the FIEMAP ioctl. + +Update Chinese translation from the Translation Project. + +Clean up various man pages. (Addresses Red Hat Bugzilla: #502971 and +Launchpad Bug: #381854) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bug #506064) + + +Programmer's Notes +------------------ + +Add test code to make sure e2fsck's problem.c doesn't have two problem +codes assigned to duplicate values. + +Avoid using a hard-coded path for /bin/rm in block's test_probe.in. +(Addresses Sourceforge Bug: #2780205) + +Clean up e2fsck by removing #ifdef RESOURCE_TRACK by adding an empty +function declaration for init_resource_track() and +print_resource_track() when RESOURCE_TRACK is not defined. + +The test code which is used to build the tst_csum progam has been +moved from from tst_csum.c into csum.c under an #ifdef DEBUG to to +avoid compile problems caused by not having a prototype for +ext2fs_group_desc_csum(). (Addresses Sourceforge Bug #2484331) + +Update the config.guess and config.sub file to the latest from the +FSF, to allow e2fsprogs to build on the avr32 platform. (Addresses +Debian Bug: #528330) + +Add a new function, ext2fs_extent_open2(), which behaves like +pext2fs_extent_open(), but uses the user-supplied inode structure +when opening an extent instead of reading the inode from disk. + + +E2fsprogs 1.41.5 (April 23, 2009) +================================= + +Fix a number of filesystem corruption bugs in resize2fs when growing +or shrinking ext4 filesystems off-line (i.e., when the ext4 filesystem +is not mounted). + +Debugfs can now set i_file_acl_high via the set_inodes_field command, +and print a 64-bit file acl. This is useful for debugging filesystem +corruptions where the high bits of i_file_acl_high are set. E2fsck +will detect and fix non-zero i_file_acl_high on 32-bit filesystems +since some Linux kernel versions pay attention to this field even when +they shouldn't. + +Speed up e2fsck when checking clean filesystems by avoiding +unnecessary block reads, and coalescing the block group descriptor +blocks so they are read using a single read operation. + +The libuuid library will now close all file descriptors before running +uuidd. This avoids problems when the calling program has open sockets +which then never get closed because uuidd is a long-running helper +daeomn. (Addresses Launchpad bug: #305057) + +In order to avoid unnecessary full filesystem checks by e2fsck after +an on-line resize, e2fsck will ignore the NEEDS_RECOVERY flag set on +the backup superblocks. (Addresses Red Hat Bugzilla: #471925) + +Mke2fs will avoid trying to create the journal when run in +superblock-only mode (mke2fs -S), since the left-over journal in the +inode table will cause mke2fs to fail. + +Fix a bug in libext2fs functions that check to see if a particular +device or filesystem image is mounted, which would cause these +functions to report that a file identical to the (relative) pathname +used by a pseudo-filesystem was mounted when in fact it was not. + +Update Czech translation from the Translation Project. + +Add Chinese (simplified) translation from the Translation Project. + +Fix support for external journals (which was broken in e2fsprogs +1.41.4). + +Fix a regression in debugfs where the "stat" command when no +filesystem was open would cause debugfs to crash with a segmentation +violation. + +Starting in the 2.6.29 linux kernel, the ext4 filesystem driver can be +used to support filesystems without a journal. Update the blkid +library so it understands this. + +The blkid library will remove an entry from the blkid cache +representing the entire disk if partitions are found, since presuambly +the device previously had no partition table, but has now transitioned +to using a partition table. + +Add a check to mke2fs and tune2fs that the argument to the -m option +(which specifies the reserved ratio) must be greater than zero. +(Addresses Debian Bug: #517015) + +Add support for tracking the number kilobytes written to the +filesystem via the superblock field s_kbytes_written. It will be +updated by the kernel as well as by e2fsprogs programs which write to +the filesystem. This is useful for tracking the wear to filesystems +on Solid Sstate Drives. + +Fix compatibility issue in the libext2fs info file and makeinfo +version 4.12. (Addresses Red Hat Bugzilla: #481620) + +Update/clarify man pages. (Addresses Debian Bug: #515693, #365619) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bug: #506279) + +Programmer's Notes +------------------ + +Fix Hurd compilation problem in e2fsck and tune2fs (Addresses Debian +Bug: #521602) + +Fix various gcc compilation warnings and other programming cleanups. +(Addresses Red Hat Bugzilla: #486997) + +Add support for building the blkid command statically. + +Add support for disabling the built-in blkid library in favor of a +system-installed blkid implementation via the configure option +--disable-libblkid. + + +E2fsprogs 1.41.4 (January 27, 2009) +=================================== + +Fixed a bug which could sometimes cause blkid to return an exit value +of zero for a non-existent device (Addresses Debian Bug: #502541) + +Blkid will now recognize ext3 filesystems that have the test_fs flag +set as ext3 filesystems. + +The blkid library will now recognize btrfs filesystems and swap +devices currently used by user-level software suspend. + +Tune2fs now updates the block group checksums when changing the UUID +to avoid causing e2fsck to complain vociferously at the next reboot. + +Tune2fs's inode size resizing algorithms have been fixed so it is not +vastly inefficient for moderate-to-large filesystems, due to some +O(n**2) and O(n*m) algorithms that didn't scale well at all. + +Fix tune2fs's inode resizing algorithm so it will not corrupt +filesystems laid out for RAID filesystems; in addition, tune2fs will +refuse to change the inode size for filesystems that have the flex_bg +feature enabled. (This is a limitation in the current implementation +of tune2fs -I.) + +E2fsprogs 1.41 broke debugfs's logdump command for normal ext3/4 +filesystems with 32-bit block numbers, when the headers for 64-bit +block numbers was added. This regression has been fixed. + +Debugfs's ncheck command has been fixed to avoid printing garbage +characters at the end of file names. + +Fix resize2fs for ext4 filesystems. Some blocks that that need moving +when shrinking filesystems with uninit_bg feature would not be moved. +In addition, blocks and inode table blocks were not being correctly +freed when shrinking filesystems with the flex_bg feable, which caused +resize2fs -M to fail. Finally, when blocks are moved, make sure the +uninitialized flag in extents is preserved. + +Fix bug which caused dumpe2fs to abort with an error if run on a +filesystem that contained an external journal. + +Some distributions used "mke3fs" as an alias for "mkfs.ext3"; check +for this in argv[0] to provide better legacy support for these +distributions. This is a practice that should NOT be continued, +however. + +Mke2fs now has a new option -U, which allows the user to specify the +UUID that should be used for the new filesystem. + +Mke2fs will treat devices that are exactly 16TB as if they were 16TB +minus one block. This allows users who have read that ext3 supports +up to 16TB filesystems and who create a 16TB LVM to not get confused, +since the true limit is really 16TB minus one block. + +E2fsck will no longer abort an fsck run if block group has an errant +INODE_UNINIT flag. + +E2fsck now distinguishes between fragmented directories and fragmented +files in verbose mode statistics and in the fragcheck report. + +Fix a bug in e2fsck which casued it double count non-contiguous +extent-based inodes. + +E2fsck will leave some slack space when repacking directories to allow +room for a few directory entries to be added without causing leaf +nodes to be split right away. + +Fix a bug which caused e2fsck to crash when it comes across a +corrupted interior node in an extent tree with the error message: +"Error1: Corrupt extent header on inode XXXXXX" + +E2fsck problem descriptions involving the journal are no longer +referred to as "ext3" problems, since ext4 filesystems also have +journals. + +Fix a long-standing bug in e2fsck which would cause it to crash when +replying journals for filesystems with block sizes greater than 8k. + +Update Catalan translation from the Translation Project. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #503057, #502323, #511207) + +Programmer's Notes +------------------ + +Fix build of e2fsck.profiled, and add support for building profiled +binaries in the misc directory if configured with --enable-profile. + +The ext2fs_open() function now performs more sanity checks on the +superblock to avoid potential divide by zero errors by other parts of +library. + +The ext2fs_read_inode_full() function now has a safety check to avoid +a segmentation fault on corrupted filesystems. + +The ext2fs_new_inode() function now has a sanity check so that if the +s_first_inode field in the superblock is insane, it will return +EXT2_ET_INODE_ALLOC_FAIL instead of returning an invalid inode number. + +To avoid segmentation faults, ext2fs_block_alloc_stats() and +ext2fs_inode_alloc_stats() now validates the passed inode or block +number to avoid overrunning an array boundary. + +Various signed/unsigned errors for variables containing block numbers +have been fixed. + +Accomodations for gcc's stupidity in not realizing that constant +strings that do not contain a '%' character are safe to use in format +strings have been made so that distributions that want to compile +e2fsprogs with -Werror=format-security have an easier time doing so. + +Added a new 64-bit getsize interface, ext2fs_get_device_size2(). + +Added the utility make-sparse.c to the contrib directory. + +The ext2fs_block_iterate2() function now reflects errors from +ext2fs_extent_set_bmap() to the caller, if the callback tries to +change a block on an extent-based file, and ext2fs_extent_set_bmap() +fails for some reason (for example, there isn't enough disk space to +split a node and expand the extent tree. + +The ext2fs_block_iterate2() function will preserve the uninit flag in +extents when the callback function modifies a block in an extent-based +file. + +E2fsck will now flag filesystems that have an insane s_first_ino field +in their superblock, and attempt to use a backup superblock to repair +the filesystem. + + +E2fsprogs 1.41.3 (October 12, 2008) +=================================== + +E2fsck has been fixed so it prints the correct inode number for +uinit_bg related problems. + +E2fsck will now offer to clear the test_fs flag if the ext4 filesystem +is available on linux. This can be disabled via a configuration +option in /etc/e2fsck.conf. + +Fix a file descriptor leak in libblkid when checking to see if an ext4 +or ext4dev module exists. + +Fix a bug in e2fsck where in preen mode, if there are disk I/O errors +while trying to close a filesystem can lead to infinite loops. +(Addresses Red Hat Bugzilla #465679) + +Fix a bug in resize2fs where passing in a bogus new size of 0 blocks +will cause resize2fs to drop into an infinite loop. (Addresses Red +Hat Bugzilla: #465984) + +Add a check in the Unix I/O functions in libext2fs so that when a +device is opened read/write, return an error if the device is +read-only using the BLKROGET ioctl. + +Fix debugfs's ncheck command so that it prints all of the names of +hardlinks in the same directory. + +Fix a bug in libblkid so it correctly detects whether the ext4 and +ext4dev filesystems are available, so that the ext4dev->ext4 +fallback code works correctly. + +Programmer's Notes +------------------ + +Fix a parallel build problem by making sure util/subst is built before +trying to build the lib/et directory. (Addresses Sourceforge Bug: +#2143281) + +Updated "make depend" information for crc16.o + + +E2fsprogs 1.41.2 (October 2, 2008) +================================== + +Fix e2fsck's automatic blocksize detection. This fixes a regression +from e2fsprogs 1.40.7 which caused e2fsck to fail if the user +specifies a block number using the -b option if the blocksize option +isn't also specified using -B. Unfortunately, users very commonly +invoke e2fsck using "e2fsck -b 32768 /dev/hdXXX" to use the backup +superblock; in fack e2fsck will often suggest this kind of command +line. Oops. + +Enhance the debugfs's "ncheck" command so it will print all of the +pathnames for the specified inodes. (Previously, in some cases ncheck +might not print a pathname for an inode at all if some of the other +inodes had multiple hard links.) + +Enhance debugfs's "hash" command so the hash seed can be specified via +a command-line option. In addition, allow the hash algorithm to be +specified by name instead of just by number. + +Fix e2fsck so that we don't accidentally print the translation file's +header when asking the user a custom question so there is no prompt +defined for a particular problem record. For example, the question +"Run journal anyway" will get the PO header tacked on because e2fsck +erroneously passed the null string to _(). (Addresses Launchpad Bug: +#246892) + +Enhance badblocks so that it can test a normal file which is greater +than 2GB. + +Enhance the badblocks command so that it displays the time and +percentage complete when in verbose mode. (Addresses Debian Bug: +#429739) + +Fix a potential memory leak in a error handling path in debugfs's +ncheck function. + +Fix a potential memory corruption problem if a memory allocation fails +in resize2fs. + +Fix the usage message for debugfs's logdump command to be consistent +with its man manpage. + +Update Polish, French, Vietnamese, Dutch, Indonesian, German, Czech, +and Sweedish translation from the Translation Project. + +Add documentation for the file I/O functions to the libext2fs.texinfo +file. (Addresses Debian Bug: #484877) + +Update and clarified various man pages. (Addresses Launchpad Bug +#275272; Addresses Debian Bugs: #498100, #498101, #498102, #498103) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bug: #497619) + +Programmer's Notes +------------------ + +Fix a potential file descriptor leack in libcom_err by setting the +close-on-exec flag for a fd used for debugging. (Addresses Red Hat +Bugzilla #464689) + +Fix a potential race in libcom_err by using sem_post/sem_init. SuSE +has been carrying a patch for a long time to prevent a largely +theoretical race condition if a multi-threaded application adds and +removes error tables in multiple threads. Unfortunately SuSE's +approach breaks compatibility by forcing applications to link and +compile with the -pthread option; using pthread mutexes has +historically been problematic. We fix this by using sem_post/sem_init +instead. + +Fix e2fsprogs-libs build failure due to 'subs' target. (Addresses +Sourceforge Bug: #2087502) + +Avoid linking e2initrd_helper, debugfs, blkid, and fsck with unneeded +libraries when using ELF shared libraries. + +Fix ELF shared library when building on systems that don't already +have the e2fsprogs shared libraries already installed. (Addresses +Sourceforge Bug: #2088537) + +Fix the pkg-config files so they work correctly when linking with +static libraries and fix the include directory so programs don't have +to use #include , but can use #include +instead. (Addresses Sourceforge Bug: #2089537) + +Make sure ext2fs_swab64() is compiled for all platforms, and not just +for x86. (Addresses Debian Bug: #497515) + +Remove the unused ext2fs_find_{first,ext}_bit_set() functions for all +non-x86 platforms. (They had been removed for x86 earlier.) + +Fix diet libc compilation support, which had bitrotted due to lack of +TLC. Fixing this improves general portability. + +When installing the link library when using ELF shared libraries, +avoid using absolute pathnames if the link library and the shared +library are installed in the same directory. (Addresses Sourceforge +Bug: #1782913) + +Fix gen-tarball so it will work even if the top-level directory has +been renamed to something other than "e2fsprogs". Also make +gen-tarball print the size of the resulting tar.gz file. + + +E2fsprogs 1.41.1 (September 1, 2008) +==================================== + +Many people are forgetting to update their mke2fs.conf file, and this +causes ext3, ext4, and ext4dev filesystems won't get created with the +proper features enabled. We address this in two ways. First, mke2fs +will issue a warning if there is not definition for an ext3, ext4, or +ext4dev filesystem and the user is trying to create such a filesystem +type. Secondly, when installing from a source build, "make install" +will provide basic configuration file handling for /etc/mke2fs.conf. +If it exists, and does not mention ext4dev, it will be moved aside to +/etc/mke2fs.conf.e2fpsrogs-old and the new /etc/mke2fs.conf file will +be installed. If the existing /etc/mke2fs.conf file does mention +ext4dev, then "make install" will install official mke2fs.conf file as +/etc/mke2fs.conf.e2fsprogs-new and issue a message to the user that +they should look to see if any changes need to be merged. + +The mke2fs program will now create the journal in the middle of the +filesystem, since this minimizes seek times on average for fsync-heavy +workloads. In addition, mke2fs will now create journals using extents +for filesystems that support them. This results in a more efficient +encoding for the journal since it eliminates the need for using +indirect blocks. + +The mke2fs program will avoid allocating an extra block to the +journal. (Addresses Sourceforge Bug: #1483791) + +Mke2fs will correctly enforce the prohibition against features +(specifically read-only features) in revision 0 filesystems. (Thanks +to Benno Schulenberg for noticing this problem.) + +Mke2fs previously would occasionaly create some slightly non-optimally +placed inode tables; this bug has been fixed. + +The mke2fs and tune2fs programs now print the correct usage message +describing the maximum journal size. (Addresses Debian Bug: #491620) + +Add support for setting the default hash algorithm used in b-tree +directories in tune2fs (from a command-line option) or mke2fs (via +mke2fs.conf). In addition, change the default hash algorithm to +half_md4, since it is faster and better. + +The blkid library will now recognize MacOS hfsx filesystems, and +correctly extract the label and uuid for hfs, hfsx, and hfsplus +filesystems. (Addresses Sourceforge Feature Requests: #2060292) + +The blkid library has improved detection of JFS and HPFS filesystems. +(Addresses Launchpad Bug: #255255) + +The blkid library is now much more efficiently handling devicemapper +devices, mainly by no longer using the devicemapper library. This can +speed up access for systems with a large number of device mapper +devices. + +Blkid had a number of cache validation bugs in libblkid that have been +fixed. (Addresses Debian Bug: #493216) + +Resize2fs will now properly close out the "updating inode references" +progress bar so there is a newline printed before printing the final +"resize is successful" message. + +Resize2fs will now correctly handle filesystems with extents and/o +uninitialized block groups correctly when file/directory blocks need +to relocated (i.e., when shrinking a filesystem or if the resize_inode +is not present). To support this, the ext2fs library now supports +initializing inode and block bitmaps that are not yet initialized when +allocating them using ext2fs_new_block() and ext2fs_new_inode(). In +addition, e2fs_block_iterate2() can now support changing the location +of interior nodes of an extent tree, and ext2fs_extent_set_bmap() has +been optimized to avoid creating unnecessary new extents when updating +the location of blocks in the extent tree. This will also help out +e2fsck's recovery of obscurely corrupted filesystems with extents, +when blocks are claimed by multiple inodes. + +Add support for on-line resizing ext4 filesystem with the flex_bg +filesystem feature. The method for doing so is not optimal, but to do +a better job will require kernel support. + +E2fsprogs 1.41.0 intrduced a bug in libext2fs which casued e2image and +debugfs programs to not be able to read e2image files; the signed +vs. unsigned bug in the code which read bitmaps from the e2image has +been fixed. (Addresses Debian Bug: #495830) + +Resize2fs is now correctly managing the directory in-use counts when +shrinking filesystems and directory inodes needed to be moved from one +block group to another. This bug has been around since e2fsprogs +1.26, and is largely harmless, but does cause a filesystem corruption +which will be flagged by e2fsck after the filesystem has been shrunk. + +E2fsck will no longer issue spurious complaints about the inode size +caused by very large extent-based files, and by blocks reallocated +using fallocate() with the FALLOC_FL_KEEP_SIZE option. (Addresses +Kernel Bugzilla: #11341) + +Mke2fs will now set the creation timestamp on the lost+found directory +and the root directory. (More generally, all new inodes created using +the ext2fs library will correctly set the creation timestamp.) + +E2fsck now correctly calculates ind/dind/tind statistics in the +presence of extent-based files. In addition, "e2fsck -v" will report +statistics of the depth of extent trees in the filesystem. E2fsck can +also give an inode fragmentation report using "e2fsck -E fragcheck" +which can be useful when debugging the kernel block allocation +routines. + +Fix support for empty directory blocks in ext4 filesystems with 64k +blocksize filesystems. + +E2fsck will now print the depth of corrupt htree directories. + +Debugfs's htree command now correctly understands extent-based +directories. It will also print out the minor hash as well as the +major hash. + +Debugfs has a new command which will print the supported features of +e2fsprogs, to enable scripts to know whether the installed version of +e2fsprogs can support a specific feature. + +Debugfs will now write files using extents for filesystems that +support them. + +The error message printed by "tune2fs -I" if the inode size was too +small was rather confusing, so it has been improved. Also, we won't +try to create an undo log until we know that command-line-specified +parameters such as "tune2fs -I " are valid. + +Given some filesystems found "in the wild" that had non-zero block +group checksums even though the uninit_bg/gdt_sum feature was not +enabled, e2fsck would issue spurious error messages. Teach +ext2fs_group_desc_csum_verify() to ignore the block group checksum +entirely if the feature flag is not set. (Addresses Debian Bug: +#490637) + +The blkid program will now print out a user-friendly listing of all of +the block devices in the system and what they contain when given the +-L option. (Addresses Debian Bug: #490527) + +The filefrag program now has a more accurate calculation for the +number of ideal extents. (Addresses Debian Bug: #458306) + +The test I/O manager is now enabled by default, but its overhead is +only incurred when it would be enabled via the TEST_IO_FLAGS or +TEST_IO_BLOCK environment variables. + +Typographical errors in various program strings and usage messages +have been fixed; most of these were pointed out by the e2fsprogs +message catalog translators. (Thanks, translators!) + +Update and clarified various man pages, as well as some typographical +errors in the libext2fs texinfo file. + +Fixed various Debian packaging issues --- see debian/changelog for +details. + +Add Indonesian and update French, Polish, Dutch, German, Sweedish, +Czech, and Vietnamese Translations. (Addresses Debian Bugs: #313697, +#401092) + +Programmer's Notes +------------------ + +Fix portability problem with the badblocks group; for systems that +don't have nanosleep(), try using usleep() instead. + +The "make check" target in the e2fsck directory now sets +LD_LIBRARY_PATH before running the various e2fsck internal library +regression tests. + +The crc32 regression test in the e2fsck library is now portable to +greater varienty of environments, including big-endian systems and +when cross-building e2fsprogs for embedded systems. (Addresses +Sourceforge Bug: #2019287) + +The ext2fs_extent_set_bmap() had some bugs when setting the first +block in a file, or when replacing a single block extent. Those cases +fortunately were came up relatively rarely when e2fsck was checking +files, but caused some problems when resize2fs was shrinking +extent-based files. + +Fix a potential core-dumping bug in libe2p's iterate_on_dir() +function. + +Various ext2fs library functions --- ext2fs_block_iterate2(), +ext2fs_initialize() and ext2fs_extent_open() --- now correctly free +allocated memory to avoid memory leaks in all of their error return +paths. + +Ext2ed was failing to build because masix support had been removed in +the rest of e2fsprogs, so ext2ed no longer has masix support, either. + +The configure script now respects the LDFLAGS environment variable if +it is set when configure is called. (Addresses Sourceforge Feature +Request: #1937287) + +Libuuid is now more portable to the Windows platform. (Addresses +Sourceforge Feature Request: #1937287) + +The configure script now uses AC_MSG_{RESULT,WARN,ERROR} instead of +bare echo commands so that configure flags such as --quiet work +correctly. (Addresses Sourceforge Patches: #2058794) + +A few uses of sprintf have been removed from the ext2fs library to +make life easier for bootloaders with a limited libc environment. +(Addresses Sourceforge Bug: #2049120) + +The ext2fs_read_inode() checks the validity of the inode number passed +to it earlier, to avoid doing some needless work when it would fail +anyway. + +The ext2fs_open() checks the validity of the blocksize parameter +passed to it earlier, to avoid doing some needless work when it would +fail anyway. + +Disable a very annoying automatic "%.sh -> %" GNU make rule in the +top-level Makefile. That automatic rule is used to better support +SCCS, but it caused problems for a particular niche distribution which +likes to use configure.sh files to store the configure options used to +build a package. Unfortuntaely GNU make will use the configure.sh to +replace the configure script, resulting in a self-inflicted fork bomb +leading to an out-of-memory crash. + +To support old GNU C compilers don't use C99/C++ comments, but only +K&R style comments, and don't try to use __builtin_expect if __GNUC__ +is less than 3. (__builtin_expect is only supported for gcc versions +2.96 and up, and it's tricky to check for gcc 2.95 vs gcc 2.96; since +this is an optimization, we only try to use __builtin_expect for gcc 3 +and up.) + +In e2fsck's crc routines, make sure we use WORDS_BIGENDIAN instead of +__LITTLE_ENDIAN, which are only defined by glibc's header files and +hence isn't portable. + +For the convenience for some distributions that need a static tune2fs, +the Makefile for misc/ now has a tune2fs.static target. + +The ext2fs_block_iterate2() function now supports BLOCK_FLAG_APPEND +for extent-based files + +The ext2fs_bmap() function now supports BMAP_ALLOC for extent-based +files. + +All source files no longer have any trailing white space. + +The io_channel_read_blk64() and io_channel_write_blk64() functions are +now functions instead of C preprocessor macros to provide better +forward compatibility. + +The e2fpsrogs translation template now expands the @x abbrevation. + +Various namespace leackages in libblkid, libe2p, and libext2fs have +been fixed. + +Fix a parallel build problem in e2fsprogs. + +E2fsprogs is now more portable to Solaris. + * blkid no longer assumes that the TIOCGSIZE and TIOCGWINSZ ioctl's + are always present. + * Scripts do not assume that /bin/true is always in /bin + * Don't use __FUNCTION__ since Solaris's C99 doesn't support it. + * Flush stdio handles before calling setbuf(), since Solaris will + discard any pending output to the stream. + * Define _XOPEN_SOURCE to 600 since Solaris's header files are very + picky about which C compiler can beused for SUSv3 conformance. + Use of C99 is not compatible with SUSv2 (_XOPEN_SOURCE=500), + and C89 is not compatible with SUSv3 (_XOPEN_SOURCE=600). + Since we need some SUSv3 functions, consistently use SUSv3 so + that e2fsprogs will build on Solaris using c99. + * Solaris C99 does not support varargs C preprocessor macros + * Solaris header files pollute the C namespace if in/netinet.h + is included, which conflicts with e2fsprogs' use of the kmem_cache_t + typedef. + * Solaris ships with a pathetically ancient shell in /bin/sh so we + avoid the use of various more avanced shell constructs such as $(). + +The "make rpm" command will now take some extra configure optiosn from +the build environment without needing to patch the source tree. + +The ext2fs_add_dir_block() function will now grow the dblist more +aggressively as an optimization to avoid copying the array too often. + +The e2fsck_write_bitmaps() will write the block and inode bitmaps +together instead of in two passes. + + +E2fsprogs 1.41 (July 10, 2008) +============================== + +Add support for ext4 filesystem features, in particular extents, +uninit_bg, flex_bg, huge_file, and dir_nlink features. Also add +support for checking journal checksums. Debugfs will print new +superblock and inode fields that were defined for ext4. For example, +the nanosecond and i_version fields of an inode, and the +s_min_extra_isize and s_wanted_extra_isize fields from the superblock. +Note: Resize2fs doesn't currently support the combination of flex_bg +and !resize_inode. (Addresses Debian Bug: #388452, #425477) + +Tune2fs can support migrating a filesystem from using 128 byte inodes +to 256 byte inodes, so it can take advantage of the full features of +ext4. + +Add support for "undo" support. E2fsck and mke2fs can optionally +record an undo log which can replayed by the program e2undo. + +E2fsck could damage a filesystem by trying to relocate inode tables +due to corrupted block group descriptors, where the attempted inode +table relocation would do far more harm than good. E2fsck has been +fixed to detect this these sorts of corrupted block group descriptors +much earlier in e2fsck processing, so it can try to use the backup +superblock and block group descriptors first. This should be a much +better strategy for recovering these types of corrupted filesystems. +(Addresses Sourceforge Bug: #1840291) + +E2fsck will display a more understandable message when the last check +field in the superblock is in the future. (Addresses Debian Bug: +#446005). + +E2fsck now performs more extensive and careful checks of extended +attributes stored in the inode. + +Enhance mke2fs to print a more explanatory error message when +ext2fs_get_device_size() returns EFBIG. (Addresses Debian Bug: +#488663) + +Fix mke2fs to use a default block size of 4k when formatting an +external journal device. This is done by using a fixed filesystem +type list that consists only of the single filesystem type "journal" +when looking up configuration keys in /etc/mke2fs.conf. (Addresses +Debian Bug: #488663) + +Speed up how mke2fs writes the journal data blocks by writing the disk +blocks in larger chunks. + +Fix blkid handling of stale devices. Fix a bug which could cause a +core dump while garbage collecting the blkid cache, and assure that +blkid_find_dev_with_tag() never returns a non-existent device. Also, +if a filesystem is found at a new /dev location, eliminate any +duplicate stale entries which can not be verified. +(Addresses Debian Bugs: #487758, #487783) + +Add more paranoid checks for LVM volumes and swap partitions in +blkid's probe function, to reduce the chances of false positives. + +The mke2fs program now has a much more sophisticated system for +controlling configuration parameters of a newly created filesystem +based on a split filesystem and usage type system. The -t option to +mke2fs was a deprecated alias to -c; it now specifies a filesystem +type (ext2, ext3, ext4, etc.), while the -T option can now be a comma +separated usage list. The filesystem type information and type +information is used to extract configuration parameters from the +/etc/mke2fs.conf file. + +The mke2fs program will no longer complain and request the -f option +when the user tries to create a filesystem with greater than 2**31 +blocks. + +When creating a filesystem for the GNU Hurd use a fs-type of Hurd and +adjust the mke2fs.conf file so filesystems for the Hurd are created +with a blocksize of 4096 and inode size of 128, which is all it knows +how to handle. (Addresses Debian Bug: #471977) + +Mke2fs will always make sure that lost+found always has at least 2 +blocks, even for filesystems with very large blocksizes (i.e., 64kb). + +Resize2fs will now print the minimum needed filesystem size if given +the -P option, and will resize the filesystem to the smallest possible +size if given the -M option. + +Fix resize2fs to clean up the resize_inode if all of the reserved gdt +blocks are consumed during an off-line resize. + +The "ls" command in debugfs now supports the -p option, which causes +it to quote the filenames so that spaces or tabs in directory entries +are easily visible. (Addresses Red Hat Bugzilla: #149480; Addresses +Sourceforge Feature Request: #1201667) + +Fix a potential off-by-one buffer oveflow in the fs_device_name in an +e2image file. + +The chattr program will return a non-zero exit code in case of +failures, and error messages can be suppressed with the -f option. +(Addresses Red Hat Bugzilla: #180596) + +Fix a bug in badblocks which caused it to overrun an array and likely +crash if more than 8 test patterns are specified using the -t option. +(Addresses Debian Bug: #487298) + +Add support to badblocks to limit how quickly it reads from the disk +drive (so it can be used for background scrubbing), and so it will +abort after finding a given number of errors. + +Remove support for the legacy big-endian filesystem format which only +existed on extremely long-dead PowerPC kernels almost a decade ago. + +Remove MASIX support from e2fsprogs. + +Add I/O statistics reporting to e2fsck. + +Update Vietnamese, Polish, French, Spanish, German, Catalan, Dutch, +Czech translations. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #487443, #487675, #490003) + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Debian Bugs: #393313, #487849, #440983, #440981) + +Programmer's Notes +------------------ + +Factor out bitmap code in preparation for adding 64-bit new-style +bitmaps. + +Fix gcc -Wall warnings + +Fix the pkg-config files so that private librares are specified in +"Libs.private:". + +Fix the libext2fs.texinfo manual so it builds with modern versions of +texinfo. + +Silence the makefile from showing the awk command used to build the + +Clean up the badblocks group so to make it more portable and robust. + +Avoid using predictable filenames in /tmp in blkid's regression test +suite. Also remove bashism's in the regression test script. + +If the configure script is given --with-diet-libc, don't use thread +local storage, since diet libc doesn't support TLS. (Addresses +Sourceforge Bug: #2000654) + +Fix the blkid regression test suite to tolerate older versions of +mkswap that don't support the -U option. + +A few library routines have been converted to support 64-bit block +numbers; in particular, the I/O manager functions, the test_io, +inode_io, and unix_io managers have all be converted to support 64-bit +operation. + +Debugfs can now be extended for use by test programs. See +lib/ext2fs/extents.c for an example for how it can be used. The test +program links against the debugfs object files, and provides +additional commands by defining an auxiliary libss command table. + +The lazy_bg filesystem feature, which was only used by developer's +testing, has been removed since it has been largely supplanted by +uninit_bg. This also simplifies the code. + + +E2fsprogs 1.40.11 (June 17, 2008) +================================= + +Mke2fs, tune2fs, and resize2fs now use floating point to calculate the +percentage of reserved blocks. (Addresses Debian Bug: #452639) + +Updated Spanish and Catalan translations. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #483962, #483023) + +Add detection for ZFS volumes to the libblkid library. + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Debian Bug: #486463) + +Programmer's notes: +------------------- + +Fix marginal C code in probe_lvm2() function to the blkid library more +portable for older compilers. + +Fix build problems on MacOS X. (Addresses Sourceforge Bug: #1972473) + +Fix ext2fs_swap{16,32,64} functions so they can be used by external +applications on big-endian machines. (Addresses Debian Bug: #484879) + + +E2fsprogs 1.40.10 (May 21, 2008) +================================ + +When deciding whether or not to revalidate a blkid cache entry, if the +device's mtime is newer than the last time the cached entry was +validated, force a revalidation. + +Fix a potential data corruption bug in e2fsck in the journal replay. +The chances of this is happening is extremely remote, especially the +default data=ordered or data=writeback modes. However, if a block +which has been journalled starts with the first four bytes 0xc03b3998, +when e2fsck replays the journal, those four bytes will be replaced +with zero's. Fortunately, it is highly, highly unlikely for e2fsck +metadata to begin with those fatal 4 byte sequence, and unless +data=ordered mode is in use, data blocks are never journaled. + +Updated German, Dutch, Sweedish, and Vietnamese translations. + +Programmer's notes: +------------------- + +Fixed various Debian packaging issues --- see debian/changelog for +details. + +Remove default sizes of types when cross compiling, since autoconf +2.50 can figure this out automatically now. + + +E2fsprogs 1.40.9 (April 27, 2008) +================================= + +SuSE's security team audited uuidd and came up with a few minor +issues. None of them are serious given that uuidd runs setuid as a +unprivileged user which has no special access other than libuuid +directory, but it's good to get them fixed. + +One additional fix in ext2fs_swap_inode_full() needed for resize2fs to +work correctly with in-inode extended attributes. + +Updated German, Czech, Dutch, French, Polish, Sweedish, and Vietnamese +translations. + +Debugfs will avoid using a pager if the standard output is not a tty. + +Fix debugfs and tune2fs to correctly handle daylight savings time when +parsing a time string. + +Fixed spelling mistakes, typos, and otherwise clarified man pages. + +Fix fsck completion bars when multiple filesystems were being checked +in parallel. (Addresses Debian Bug: #432865, Addresses Launchpad Bug: +#203323, Addresses Sourceforge Bug: #1926023) + +Fix fsck so that progress information is sent back correctly when +multiple filesystems are being check and the output of fsck is being +redirected to a file descriptor. Also, include the device name (w/o +spaces) in the progress information sent back via a file descriptor. +(Addresses Launchpad Bug: #203323, Addresses Sourceforge Bug: +#1926023) + +Teach fsck to treat "ext4" and "ext4dev" as ext* filesystems. + +If logsave receives a SIGTERM or SIGINT signal, it will now pass that +signal to its child process. + +Fix mke2fs's creation of are resize inode when there is a non-standard +s_first_data_block setting. + +Fix bug in blkid when run by an unprivileged user; most devices were +not reported correctly. 9Addresses Launchpad Bug: #220275) + +Mke2fs will not allow the logically incorect combination of +resize_inode and meta_bg, which had previously caused mke2fs to create +a corrupt fileystem. + +Fix fsck in German locales so that a 'j' means yes. +(Addresses Sourceforge Bug: #1947683) + + +Programmer's notes: +------------------- + +Fixed various Debian packaging issues --- see debian/changelog for +details. + +Update valgrind options in test_script to work with valgrind 3.2.3 + +Update texinfo.tex to a much newer version from the FSF. + +Remove bashism for configure script and from the lib/ss Makefile. +Addresses Sourceforge Bug: 1921969 + +Fix some silently broken tests: m_no_opt, m_meta_bg, and m_raid_opt. + +Fix build system so that if texinfo is not installed, it won't print a +(harmless) error message. + + +E2fsprogs 1.40.8 (March 13, 2008) +================================= + +Fixed e2image -I so it works on image files which are larger than 2GB. + +Fixed e2fsck's handling of directory inodes with a corrupt size field. If +the size is larger than the number of blocks found in the inode, don't +try to allocate extra empty blocks at the end of the directory to make +up the difference; there's no point to doing that. In addition, if +the size is not a multiple of a blocksize, always fix it. + +E2fsck handled a pass 2 "should never happen error" by not giving +enough information and then core dumping. Unfortunately, it was all +too easy to trigger the "should never happen" situation if a +directory's inode size was not correct. This has been fixed, but +e2fsck has also been taught how to handle this situation more +gracefully, by simply removing the inode hash tree information, so +that it can be rebuilt again after e2fsck's pass 3. (Addresses +Launchpad Bug: #129395) + +Resize2fs had a bug resizing large inodes with extended attributes +that was fixed in 1.40.6; unfortunately, it turned out it wasn't fixed +completely on big-endian systems such as PowerPC. The bug should be +completely fixed now. Yay for regression test suites. (Addresses Red +Hat Bugzilla: #434893) + +Updated German, Czech, Dutch, Polish, Sweedish, and Vietnamese +translations. Many thanks to Philipp Thomas from Novell for stepping +up to become the new German translation maintainer! (Addresses Debian +Bugs: #302512, #370247, #401092, #412882). + +When e2fsck is clearing a corrupt inode's HTREE directory information, +make it clear that it is just clearing the HTREE information, not the +entire inode. + +Fixed spelling mistakes, typos, and otherwise clarified man pages. + +Programmer's notes +------------------ + +Add new functions, ext2fs_dblist_get_last() and +ext2fs_dblist_drop_last(), which allows the caller to examine the last +directory block entry added to the list, and to drop if it necessary. + +Fixed a portability problem in libblkid with DJGPP. + +Fix an obvious typo in an "internal error" message in e2fsck. Thanks +to Philipp Thomas for pointing this out. + +If the info files are not built, change "make install" so it doesn't +fail with an error code. + + +E2fsprogs 1.40.7 (February 28, 2008) +==================================== + +Remove support for clearing the SPARSE_SUPER feature from tune2fs, and +depreciate the -s option, since it can result in filesystems which +e2fsck can't fix easily. There are very good reasons for wanting to +disable sparse_super; users who wants to turn off sparse_super can use +debugfs. (Addresses Sourceforge Bug: #1840286) + +Add missing options to mke2fs's usage message. (Addresses Sourceforge +Bug: #1751393) + +Fix bug in resize2fs when large (greater than 128 byte) inodes are +moved when a filesystem is shrunk; it was only moving the first 128 +bytes, so extended attributes were not getting moved. (Addresses Red +Hat Bugzilla: #434893) + +E2fsck now prints an explicit message when the bad block inode is +updated, to avoid confusion about why the filesystem was modified. +(Addresses Sourceforge Bug: #756460) + +Allow mke2fs and tune2fs manipulate the large_file feature. +Previously we just let the kernel and e2fsck do this automatically, +but e2fsck will no longer automatically clear the large_file feature. +It still isn't really necessary to worry about this feature flag +explicitly, but some users seem to care. (Addresses Red Hat Bugzilla: +#258381) + +Suppress message about an old-style fstab if the fstab file is empty. +(Addresses Debian Bug: #468176) + +Fix (really minor) bug in debugfs's find_free_block so it avoids +reporting a free block more than once if there are too few free blocks +in the filesystem. (Addresses Sourceforge Bug: #1096315) + +Change e2fsck to no longer clear the LARGE_FILES feature flag +automatically, when there are no more > 2GB files in the filesystem. +It's been almost a decade since there have been kernels that don't +support this flag, and e2fsck clears it quietly without telling the +user why the filesystem has been changed. + +Fix bug which could cause libblkid to seg fault if a device mapper +volume disappears while it is being probed. (Addresses RedHat +Bugzilla: #433857) + +Inhance e2fsck's reporting of unsupported filesystem feature flags. +(Addresses Sourceforge Feature Request: #1175808) + +Fix option syntax in dumpe2fs for explicit superblock and blocksize +parameters. What was currently documented in the man page has been +broken for some time, due to getopt() implementation changes. The +option sytax has been changed to one which is can be more portable +supported and which is consistent with the format for extended options +in mke2fs and tune2fs. (Addresses Sourceforge Bug: #1830994) + +Add support to tune2fs to clear the resize_inode feature. This +requires an fsck afterwards. (Addresses Red Hat Bugzilla: #167816) + +Teach blkid to detect LVM2 physical volumes. (Addresses Red Hat +Bugzilla: #409321) + +Add support for setting RAID stride and stripe-width via mke2fs and +tune2fs. Teach dumpe2fs to print the RAID parameters. + +Add support for setting new superblock fields to debugfs's +set_super_value. + +Add support for printing "mostly-printable" extended attributes in +Debugfs. + +Add support for the -M option to fsck, which causes it to ignore +mounted filesystem. + +Fix uuidd so that it creates the pid file with the correct pid number. +(Addresses Sourceforge Bug: #1893244) + +Fix various gcc -Wall warnings. + +Update Czech, Dutch, Polish, Sweedish, and Vietnamese translations + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Sourceforge Patch: #1399325) + + +Programmer's notes: +------------------- + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bug: #466929) + +Add new flag EXT2_FLAG_NONFREE_ON_ERROR ext2fs_open2() which returns a +partially filled-in filesystem object on an error, so that e2fsck can +print more intelligent error messages. + +Add a new function e2p_edit_feature2() which allows the caller to +specify which feature flags are OK to set or clear, and which returns +more specific information about feature flags which are not allowed to +be set/cleared. + +Set the C locale in the test_script driver since it uses [A-Za-z]. +(Addresses Sourceforge Bug: #1890526) + +Use fcntl locking instead of lockf in libuuid since Cygwin doesn't +support lockf(). + +Change configure.in to avoid using the 'dc' command unless it is +absolutely needed. (i.e., when using parsing a WIP-style version +number) (Addresses Sourceforge Bug: #1893024) + +Add portability checks to support compilation under DJGPP. + +Update to the latest samba tdb code before the LGPLv3 change, which +fixes a realloc() leak on failure. + +Fix memory leak in ext2fs_alloc_block(). + +Fix makefile dependency issues for various install targets. +(Addresses-Sourceforge-Patches: #1903484, #1903466, #1903456) + +Improve descriptions for the r_move_itable and r_resize_inode tests. + + +E2fsprogs 1.40.6 (February 9, 2008) +=================================== + +Add support for returning labels for UDF filesystems in the blkid +library. + +Fix bug in the blkid library where cached filesystems was not being +flushed when opening USB devices returned the error ENOMEDIUM. +(Addresses Debian Bug: #463787) + +Added logic to the blkid library to automatically choose whether a +filesystem should be mounted as ext4 or ext4dev, as appropriate. + +Allow tune2fs to set and clear the test_fs flag on ext4 filesystems. + +Fix a bug in e2fsck which caused it to core dump if e2fsprogs had been +configured with --enable-jbd-debug. + +Document the BLKID_FILE environment variable in the libblkid man page + +Programmer's Notes: +------------------- + +Update e2fsprogs translation template and Vietnamese and Czech translations + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #436058) + +Don't try to create $DESTDIR/etc/init.d as part of make install as we +don't install the init.d script (and it's not the recommended way to +start uuidd anyway). (Addresses Sourceforge Bug: #1885085) + +Use thread local storage to fix a theoretical race condition if two +threads try to format an unknown error code at the same time in the +com_err library. + + +E2fsprogs 1.40.5 (January 27, 2008) +=================================== + +Fix a potential overflow big in e2image if the device name is too +long. + +Mke2fs will now create new filesystems with 256 byte inodes and the +ext_attr feature flag by default. This allows for much better future +compatibity with ext4 and speeds up extended attributes even on ext3 +filesystems. + +Teach e2fsck to ignore certain "safe" filesystem features which are +set automatically by the kernel. Having the kernel set features +automagically behind the user's back is a bad idea, and we should try +to break the kernel of this habit, especially for the newer ext4 +feature flags. But for now, we will try to avoid needless full checks +which can annoy users who are doing fresh installs. + +Add support in tune2fs and mke2fs for making a filesystem as being "ok +to be used with test kernel code". This will be needed for using test +filesystems with the latest ext4 kernel code. + +Change e2fsck -fD so that it sorts non-htree directories by inode +numbers instead of by name, since that optimizes performances much +more significantly. (Addresses-Sourceforge-Feature-Request: #532439) + +If e2image fills the disk, fix it so it exits right away instead of +spewing large numbers of error messages. +(Addresses-Sourceforge-Feature-Request: #606508) + +If ftruncate64() is not available for resize2fs, let it use ftrucate() +instead, but have it check to see if the size would get truncated, and +skip calling ftruncate in that case. + +Add support for detecting HFS+ filesystems in the blkid library. + +Add supprt in the blkid library for ext4/ext4dev filesystems. + +Fix a bug in blkid where it could die on a floating point exception +when presented with a corrupt reiserfs image. + +Fix blkid's handling of ntfs UUID's so that leading zeros are printed +such that UUID string is a fixed length. + +Add sample python bindings for the uuid library to the contrib +directory. (Addresses-Sourceforge-Patches: #778817) + +Fix debugfs's 'lsdel' command so it uses ext2fs_block_iterate2 so it +will work with large files. (Addresses Sourceforge Feature Request: +#1257500 and Sourceforge Support Request: #1253511) + +Allow the debugfs 'undel' command to undelete an inode without linking +it to a specific destination directory, since this might require +allocating blocks that could overwrite some yet-to-be-recovered +deleted files. (Addresses-Sourceforge-Feature-Request: #967141) + +Update Swedish translations from the Translation Project. + +Programmer's Notes: +------------------- + +Fix configure handling of --sbindir (which should rarely be used, but +someone did complain, so let's fix it). (Addresses Sourceforge Bug: +#498381) + +Updated e2fsprogs.spec file to include a new uuidd package + +Use pkg-config to determine where to find the devmapper library so we +can find out where it is located on different distributions. + +Fix Makefile race so that "make -j3 distclean" works correctly + +Fix portability problems on non-Linux/non-Hurd/non-Masix systems, +especially on MacOS X systems. (Addresses Sourceforge Bugs: #1861633, +#1819034, #1863819) + +Fixed spelling mistakes, typos, and otherwise clarified man pages. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #459403, #459475, #459614) + +Remove the --enable-dynamic-static configure option, and build e2fsck +dynamically by default. If the user wants e2fsck.static, he/she will +need to build it via "make -C e2fsck e2fsck.static" + +Fix various build warnings due to missing prototypes. +(Addresses Sourceforge Patch: #1861663, #1861659) + + +E2fsprogs 1.40.4 (December 31, 2007) +==================================== + +Improve time-based UUID generation. A new daemon uuidd, is started +automatically by libuuid if necessary. This daemon is setuid to allow +updates to /var/lib/libuuid, so the clock sequence number can be +stored and so if the clock is set backwards, it can be detected. +(Addresses Sourceforge Bug: #1529672, Addresses Red Hat Bugzilla: +#233471) + +Filter out the NEEDS_RECOVERY feature flag when writing out the backup +superblocks. This avoids e2fsck from concluding that a full +filesystem check is required before backing up the superblock due to +changes in the feature flags. (Addresses Debian Bug: #454926) + +Fix fsck to only treat the '#' character as a comment at the beginning +of the line in /etc/fstab. Otherwise fstabs for the fuse filesystem +will cause fsck to issue an bogus warning message. +(Addresses Gentoo bug: #195405, Addresses Sourceforge bug: #1826147) + +Format control characters and characters with the high eighth bit set +when printing the contents of the blkid cache, to prevent filesystems +with garbage labels from sending escape sequences to the user's screen +that might, for example place it in graphics mode. (Addresses Ubuntu +Bug: #78087) + +Fix sign-extension problem on 64-bit systems in in the com_err +library. (Addresses Sourceforge Bug: #1809658) + +Avoid division by zero error when probing an invalid FAT filesystem in +the blkid library. (Addresses Sourceforge Bug: #1831627) + +Update Dutch, Polish, and Vietnamese translations from the Translation +Project. Remove the Rwandan translation upon advice of the +Translation Project. + +Programmer's Notes: +------------------- + +Fix the libss "make check" regression test so that it works if the +current directory is not in the user's path or if the libss shared +library is not installed. (Addresses Sourceforge Bug: #1848974) + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Debian Bugs: #444883, #441872) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs: #437720, #451172, #458017) + +Fix build failure on non-Linux/non-Hurd/non-Masix systems. +(Addresses Sourceforge Bug: #1859778) + +Fix Hurd portability issues. (Addresses Debian Bug: #437720) + + +E2fsprogs 1.40.3 (December 5, 2007) +=================================== + +Fix a potential security vulnerability where an untrusted filesystem +can be corrupted in such a way that a program using libext2fs will +allocate a buffer which is far too small. This can lead to either a +crash or potentially a heap-based buffer overflow crash. No known +exploits exist, but main concern is where an untrusted user who +possesses privileged access in a guest Xen environment could corrupt a +filesystem which is then accessed by the pygrub program, running as +root in the dom0 host environment, thus allowing the untrusted user to +gain privileged access in the host OS. Thanks to the McAfee AVERT +Research group for reporting this issue. (Addresses CVE-2007-5497.) + +Fix hueristics in blkid which could cause a disk without partitions to +be incorrectly skipped when a loopback device is present. (Addresses +Red Hat Bugzilla #400321.) + +Fix e2image so that in raw mode it does not create an image file which +is one byte too large. + +Change mke2fs's usage message so it recommends the preferred -E option +instead of the deprecated -R option. + +Enhance the blkid library so it will recognize squashfs filesystems. +(Addresses Red Hat Bugzilla #305151.) + +Enhance e2fsck so it will force the backup superblocks to be backed up +if the filesystem is consistent and key constants have been changed +(i.e., by an on-line resize) or by e2fsck in the course of its +operations. + +Enhance blkid's detection of FAT filesystems; so that USB disks with +only a single bootable partition will not get missed. + +E2fsck will no longer mark a filesystem as invalid if it has time +errors (i.e., if superblock mount time or last write time is in the +future) and the user refuses to fix the problem. + +The Ubuntu init scripts don't properly set the system time correctly +from hardware clock if the hardware clock is configured to tick local +time instead of GMT time. Work around this as best as we can by +providing an option, buggy_init_scripts, in /etc/e2fsck.conf which can +be set on Ubuntu systems. (Addresses Debian Bug #441093, and Ubuntu +Bug #131201.) + +Fix fsck to ignore /etc/fstab entries for bind mounts. (Addresses Red +Hat Bugzilla #151533.) + +Fix e2fsck so that if the superblock is corrupt, but still looks +vaguely like an ext2/3/4 superblock, that it automatically tries to +fall back to the backup superblock, instead of failing with a hard +error. + +Make the e2fsprogs program more robust so that they will not crash +when opening a corrupt filesystem where s_inode_size is zero. + +Change e2fsck so it uses sscanf() instead of atoi() so it non-numeric +arguments are detected as such and the parse error is reported to the +user. (Addresses Debian Bug #435381.) + +Change e2fsck so it will not complain if a file has blocks reallocated +up to the next multiple of a system's page size. + +Fix bug in ext2fs_check_desc() which will cause e2fsck to complain +about (valid) filesystems where the inode table extends to the last +block of the block group. (Addresses Red Hat Bugzilla #214765.) + +Fix a bug in ext2fs_initialize() which causes mke2fs to fail while +allocating inode tables for some relatively rare odd disk sizes. +(Addresses Red Hat Bugzilla #241767.) + +Add Catalan translation and update Dutch and Swedish translations +from the Translation Project. + +Fix big-endian byte-swapping bug in ext2fs_swap_inode_full(). We +still had an issue when trying to figure out whether we need to +byte-swap fast symlinks that contained extended attributes. + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses SourceForge Bug #1821333.) + + +Programmer's Notes: +------------------- + +Fix mke2fs tests to avoid needing any significant ^M (CR) characters + +Add "make check" to the RPM spec file + +Fix "make install" and 'make unstall" in misc/Makefile.in so that it +works correctly when the prefix is not the root directory. + +Fix the resize2fs tests, r_move_itable and r_resize_inode, so they +clena up after themselves by deleting the test.img temporary file +after completing the test. + +Fixed a corner case bug ext2fs_unlink() when trying to delete the +first directory entry in a directory block and the last directory +entry in the previous directory block is not in use. Fortunately +ext2fs_unlink() is only used by debugfs and e2fsck, and in e2fsck in +places where it is extremely unlikely to run into this corner case. + +Fix missing dependency which would cuase parallel builds to fail. +(Addresses Sourceforge Bug #1842331.) + +Fix a build error on newer gcc caused by lib/ext2fs/ismounted.c +calling open(O_CREATE) with a missing mode parameter. + +Fix the test_ss.c in lib/ss so it can be used as an example +application program for the library as well as a regression test +suite. + +Fix ext2fs_dblist_dir_iterate() so that error codes and abort codes +are properly passed back up through the call stack. + +E2fsprogs 1.40.2 (July 12, 2007) +================================ + +A recent change to e2fsck_add_dir_info() to use tdb files to check +filesystems with a very large number of filesystems had a typo which +caused us to resize the wrong data structure. This would cause a +array overrun leading to malloc pointer corruptions and segfaults. +Since we normally can very accurately predict how big the the dirinfo +array needs to be, this bug only got triggered on very badly corrupted +filesystems. + +Fix a bug in e2fsck which caused it to incorrectly salvange +directories when the last entry's rec_len is bogusly too big. This +resulted in a nonsense filesystem corruption to be reported, and +required a second run of e2fsck to fully fix up the directory. + +Update tune2fs man page to include more discussion of reserved blocks +(Addresses Launchpad bug #47817) + +Update Turkish, Polish, Dutch, and Vietnamese PO files from the +Translation Project + + +E2fsprogs 1.40.1 (July 7, 2007) +=============================== + +Fix bug which could cause libblkid to loop forever. When revalidating +a partition where there is obsolete information in /etc/blkid.tab, we +end up freeing a the type tag without clearing dev->bid_type, causing +blkid_verify() to loop forever. (Addresses Debian Bug: #432052) + +The Turkish translation has a bug in it where it has the translation +of "E@e '%Dn' in %p (%i)" to "E@E". This causes @E to be expanded at +@E, recursively, forever, until the stack fills up and e2fsck core +dumps. We fix this by making e2fsck stop @-expansions after a +recursive depth of 10, which is far more than we need. +(Addresses Sourceforge Bug: #1646081) + +Compile the default mke2fs.conf into mke2fs program. People are +getting surprised by mke2fs creating filesystems with different +defaults than earlier versions of mke2fs if mke2fs.conf is not +present. So we now create a built in version of mke2fs.conf file +which is used by mke2fs if the /etc/mke2fs.conf is not present. +(Addresses SourceforgeBug: #1745818) + +Improve the config/parse_types.sh helper script. Fix a potential +security problem if e2fsprogs is built as root (as Gentoo does!). In +addition fix the script and how it is called from the configure script +so that it does the right thing when cross-compiling. (Fixes Gentoo +bug: #146903) + +Update Vietnamese, French, and Dutch PO files from the Translation +Project. Also created a new e2fsprogs.pot file for translator. + +Fix bogus strip permission errors when building under Debian. When +building the e2fsprogs dpkg's, the dh_strip command emits a large +number of error messages caused by the permissions not being right. +So run dh_fixperms before running dh_strip. + +Programmer's Notes: +------------------- + +Add new function: profile_set_default(). This function sets the value +of the pseudo file "". If the file "" had +previously been passed to profile_init(), then def_string parameter +will be parsed and used as the profile information for the "" +file. + +Fix mk_cmds's error reporting so that it is unambiguous that it is the +mk_cmds script which is generating the error. (Obviates Gentoo patch: +e2fsprogs-1.32-mk_cmds-cosmetic.patch) + +Fix the test suite to use LC_ALL instead of LANG. LC_ALL is the "high +priority" environment variable that overrides all others, where as +LANG is the lowest priorty environment variable. If LC_ALL is set, it +doesn't matter whether LANG, LANGUAGE, LC_COLLATE, LC_MESSAGES, and +the all the rest are set. This will assure that the locale when +running the test suites is the "C" locale. (Obviates Gentoo patch: +e2fsprogs-1.38-tests-locale.patch) + + +E2fsprogs 1.40 (June 29, 2007) +============================== + +Fix divide by zero error in blkid's NTFS probing logic. + +Add new blkid -g option which causes the blkid cache to be garbage +collected. + +Fix a bug in libblkid which could cause the internal field bid_type to +become corrupted. Fortunately bid_type isn't used much, and bid_label +and bid_uuid is only used by debugging code, so the impact of this bug +was very minor. + +Mke2fs will now store the RAID stride value when a filesystem is +created with a requested RAID stride, and then use it automatically in +resize2fs. + +Mke2fs has a sanity check added to make sure (inode_size * num_inodes) +isn't too big. In some cases Lustre users have tried specifying an +inode size of 4096 bytes, while keeping an inode ratio of one inode +per 4096 bytes. + +Improve sanity check in e2fsck's algorithm for finding a backup +superblock, so that it won't accidentally find a superblock that was +located in the journal, and then later reject it as being not a valid +backup superblock. + +Fix e2fsck get_size logic so that it will work with the Linux floppy +driver. The Linux floppy driver is a bit different from the other +block device drivers, in that if the device has been opened with +O_EXCL, it disallows another open(), even if the second open() does +not have the O_EXCL flag. (Addresses Debian Bug: #410569) + +Fix error checking of badblock's last-block and start-block arguments. +(Addresses Debian Bug: #416477) + +Fix e2fsck so that it doesn't overwrite the backup superblocks when +recovering a journal until the master superblock has been confirmed as +being sane. + +Change the blkid library to be much more paranoid about concluding +that a partition contains an NTFS filesystem, and fetch the UUID and +LABEL information from NTFS filesystems. (Addresses Launchpad Bug: +#110138) + +Factor out the code which sets the default journal size and move it +into libext2fs. + +Enhance e2fsck so it will recreate the ext3 journal if the original +journal inode was cleared to due it being corrupt after finishing the +filesystem check. + +Fix e2fsck so that it updates the journal inode if it is corrupted and +the backup journal information from the superblock was successfully +used to recover the filesystem. + +Fix e2fsck so that it checks all of the blocks in the journal inode +for validity. The original code only checked the direct blocks to +make sure the journal inode was sane. Unfortunately, if some or all +of the indirect or doubly indirect blocks were corrupted, this would +not be caught. + +Add support in blkid to detect LUKS encrypted partitions. + +Add extra sanity checks for extended attributes in the case where the +size is zero but the offset is very large. + +Fix byte-swapping issues for large inodes in ext2fs_read_inode_full() +and ext2fs_get_next_inode_full(). + +Clarify the copyright licenses used by the various libraries in +the top-level COPYING file (Red Hat Bugzilla: 166058) + +Make mke2fs's defaults when /etc/mke2fs.conf doesn't exist more sane. + +Fix mke2fs and debugfs to support large (> 16 bit) uid's and gid's. + +Remove check in e2fsck which requires EA's in inodes to be sorted; +they don't need to be sorted, and e2fsck was previously wrongly +clearing unsorted EA's stored in the inode structure. + +Allow mke2fs or tune2fs to create a substantially larger journal (up +to 10,240,000 blocks). + +Fix MD superblock detection, and make sure the correct UUID is +reported from the MD superblock. + +Fix a signed vs. unsigned bug in debugfs. + +Enhance debugfs's date parser so that it accepts integer values. + +Fix e2fsck's pass1c accounting so it doesn't terminate too early if a +file with multiply claimed blocks is hard linked. or not at all if the +root directory contains shared blocks + +Enhance debugfs so it can modify the block group descriptors using the +command set_block_group_descriptor. + +Improve e2fsck's reporting of I/O errors so it's clearer what it was +trying to do when an error happens + +Fix a bug in in how e2fsprogs byte swaps inodes containing fast +symlinks that have extended attributes. (Addresses Red Hat Bugzilla: +#232663 and LTC Bugzilla: #27634) + +Fix potential file descriptor leak in ext2fs_get_device_size() in an +error case. + +Add libreadline.so.5 support to libss. + +Impove badblocks -n/-w exclusive usage message. + +Fix dump_unused segfault in debugfs when a filesystem is not open + +Fix memory leak in blkid library. (Addresses Debian Bug: #413661) + +Allow the debugfs lcd command to work w/o a filesystem being open. +(Addresses LTC Bugzilla #27513) + +Fix e2fsck to clear i_size for special devices with a bogus i_blocks +field on the first pass. + +Fix e2fsck to set the file type of the '..' entry when connecting +a directory to lost+found. (Addresses Lustre Bug: #11645) + +Enhance e2fsck to recover directories whose modes field were corrupted +to look like special files. This is probably only useful in +artificial test cases, but it will be useful if we ever do the "inodes +in directory" idea for ext4. + +Allow debugfs to dump (and rdump) > 2GB files. (Addresses Debian Bug: +#412614) + +Fix resize2fs parsing of size parameter (in sector units). This was +actually a bug in libe2p's parse_num_blocks() function. When handling +the 's' suffix, it was ignoring the blocksize information passed in +from the caller and always interpreting the number in terms of a 1k +blocksize. (Addresses Debian Bug: #408298) + +There was a floating point precision error which could cause e2fsck to +loop forever on really big filesystems with a large inode count. +(Addresses Debian Bug: #411838) + +Fix memory leak in ext2fs_write_new_inode() + +Add support for using a scratch files directory to reduce e2fsck's +memory utilization on really big filesystems. This uses the TDB +library. See the [scratch_files] section of the e2fsck.conf man page +for more details. + +Fixed type-punning bug which caused dumpe2fs to crash on the Arm +platform (Addresses Debian Bug: #397044) + +Add explanatory message to badblocks that -n and -w are mutually exclusive +(Addresses Debian Bug: #371869) + +Allow debugfs and dumpe2fs to support fs features under development. + +Add support for the new flag EXT2_FLAG_SOFTSUPP_FEATURES flag to +ext2fs_open() , which allows application to open filesystes with features +which are currently only partially supported by e2fsprogs. + +Allow unix_io to support offsets greater than 2G (Addresses +SourceForge Bug: #1547922) + +Fixed overflow and signed/unsigned problems caused by the number of +blocks or inodes exceeding 2**31 or being close to 2**32-1. + +Add support for unsigned directory hash calculations with hints in the +superblock to fix cross-architectural portability for htree +directories with filenames where the high 8th bit is set. (Addresses +Debian: #389772) + +Fix resize2fs so that it gives user-intelligible error messages if the +filesystem or the kernel does not support on-line resizing. +(Addresses Debian Bug: #380548) + +Require mke2fs -F -F for really dangerous operations, since -F is +needed for less dangerous operations such as creating filesystems +images in regular files, or creating filesystems on whole block +devices. These relatively innocuous usages should NOT be confused +with running mke2fs on an apparently-mounted or in-use filesystem. + +Allow the default inode size to be specified into the mke2fs.conf +file. + +Make the smallest default journal size is big enough so that on-line +resizing should always work. + +Fix silly spelling error in e2fsck. (Addresses SourceForge bug: +#1531372) + +Fix debugfs coredump when lsdel is run without an open filesystem +(Addresses Debian Bug: #378335) + +Fix debugfs display bug us that bytes that have the high bit set are +displayed as "ec" instead of "ffffffec". + +Add support in lsattr so it will display the EXT4_EXTENTS_FL flag. + +Device mapper scanning wasn't working in the blkid library because the +pathnames had an extra "/dev" when they were being probed. + +Add GFS/GFS2 support to the blkid library. + +Fix blkid support of empty FAT filesystem labels. + +Avoid recursing forever (or for a long time) when the blkid library +searches for a device and there are symlinks to directories in /dev. + +Avoid unaligned halfword access in blkid when accessing FAT +superblocks, as this will cause Sparc/Solaris systems to throw a +SIGBUS error. + +The latest devmapper libraries requires pthreads, add -lpthreads to +the static link libraries for e2fsck.static if devmapper is enabled. +(Addresses Debian bug: #388718) + +Improve the (non-installed, for experts only) findsuper program by +printing the uuid and label from the superblocks, as well as the +starting and ending offsets of the filesystem given the information in +the superblock. Omit by default printing superblocks that are likely +found in located in an ext3 journal unless an explicit -j option is +given. + +Updated Spanish, French and Dutch translations and added Catalan +translation. (Addresses Debian bug: #411562) + +Use FreeBSD's DIOCGMEDIASIZE and DIOCGDINFO ioctls if available when +determining a partition's size, since binary searching to determine +the device doesn't work on FreeBSD. + +Documentation about UUID's is available in enough places, and it's +awkward to deal with debian-legal's insanities. So I'm caving in the +"more-lunatic-than-RMS" wing of Debian by removing RFC-4122 so we +don't have do the dfsg tarball. Also remove the rule that only tried +to install RFC-4122 on Ubuntu, since Ubuntu seems to want to fetch +e2fsprogs exclusively from Debian. (Addresses Debian Bug: #407107) + +Fix the info-dir line so that the menu name does not contain a .info +prefix. First of all, it's ugly, secondly, it causes the install-info +command to fail to remove the com_err info file from the +/usr/share/info/dir file when the comerr-dev package is removed and +purged. (Addresses Debian Bug: #401711) + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Debian Bug: #369761, #373004, #379695) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs #389554, #390664, #413208, #419605, +#408352, #415560, #399155) + + +Programmer's notes: +------------------- + +E2fsck now supports the %It expansion when printing a problem report. +It will print the type of the inode in the problem context. + +Fix misc/Makefile.in so that it builds even if e2fsck hasn't been built yet +(Addresses Sourceforge Bug: #1565561) + +Remove unused variables and other lint/gcc -Wall cleanups + +Add check to ext2fs_get_device_size() so it will return EFBIG for for +filesystems contained in regular files where the filesystem image size +is returned by stat64(). + +Set local environment variables to C so mk_cmds and compile_et always +work. (Addresses SourceForge Bug: #1532177) + +Added the 64-bit byte swapping function ext2fs_swab64(). + +Added two new helper functions to prevent 2**31/2**32-1 overflow +problems: ext2fs_div_ceil() and e2p_percent(). + +Create new ext2fs library inline functions ext2fs_group_first_block() +and ext2fs_group_last_block() in order to calculate the starting and +ending blocks in a block group. + +Create the generated files read-only to remind developers not to edit them. + +Add support for autoconf 2.60 (with backwards compatibility for older +versions of autoconf). + +Added an "make rpm" target to top-level Makefile + +Added various FreeBSD portability fixes. + +Exclude mercurial files from the RPM build tree to speed up copy/build. + +Use root_sysconfdir to define the locations of mke2fs.conf and +e2fsck.conf instead of using a hard-coded /etc pathname. + +Prevent e2fsck.h and ext2_ext_attr.h from getting included multiple times. + +Fixed "make clean" in blkid's Makefile.in file from removing tst_*.c files. + +If diff -u is supported, use it to report test failures. + +Updates/improvements to RPM spec file + +Add on-disk format definitions for the following new features: +EXT4_FEATURE_RO_COMPAT_HUGE_FILE, EXT4_FEATURE_RO_COMPAT_GDT_CSUM, +EXT4_FEATURE_RO_COMPAT_DIR_NLINK, EXT4_FEATURE_INCOMPAT_64BIT, +EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE + +Add a new make target "checked-failed" in the tests directory which +reruns any failed tests + +Update draft-leach-uuids-guids-01.txt with rfc4122.txt + +Fix miscellaneous bugs reported by Coverity: Dead code, potential nul +pointer dereferences, memory leaks, etc. None were security-criticial +problems. + +Fix up usage and decrement error messages in the test_icount program + +Add debugging code to the com_err library; if the environment variable +COMERR_DEBUG is set to 1, print out debugging messages as error tables +are added and removed from the com_err library. If the +COMERR_DEBUG_FILE environment variable is set (and the process is not +setuid) the debugging messages may be redirected to a file. + +Change all of the e2fsprogs programs to use the newer add_error_table() +and remove_error_table() interfaces instead of the much older +initialize_*_error_table() function. + +Add TDB support into the ext2fs library. This allows us to have a +guaranteed library we can count on always being present so we can +store data in an on-disk database. + +Add support for using TDB to store the icount data, so we don't run out +of memory when checking really large filesystems. + +Change the regression test suite so that it skips empty test directories. + +Define the l_i_iversion field in ext2_inode. The l_i_version field is +now defined from the old l_i_reserved1 field in the ext2 inode. This +field will be used to store high 32 bits of the 64-bit inode version +number. + +Add Makefile production rule for e2fsprogs.spec in case it gets +deleted. + +Add new function profile_get_uint() to allow for a clean way to fetch +unsigned integers from the context. + +Add test to make sure the ext2 superblock structure is 1024 bytes. + +Fix typo in name of f_dup4 regression test + +Add new function blkid_gc_cache() which performs a garbage collection +pass on the /etc/blkid.tab file. + +The ext2fs_open() function now sets EXT2_FLAG_MASTER_SB_ONLY. In +general, only e2fsck (after the filesystem is clean), tune2fs, and +resize2fs should change the backup superblocks by default. Most +callers of ext2fs_open() should not be touching any superblock fields +which require the backups to be touched. + +Add new function to libext2fs, ext2fs_default_journal_size(), which +returns the default journal size. + + +E2fsprogs 1.39 (May 29, 2006) +============================= + +Fix 32-bit cleanliness in e2fsprogs so that we can support filesystems +between 2**31 and 2**32 blocks. + +Change mke2fs to use /etc/mke2fs.conf as a configuration file to +configure the filesystem features, blocksize, and inode_ratio for +different filesystem types. + +Mke2fs will now create filesystems hash trees and on-line resizing +enabled by default, based on the new /etc/mke2fs.conf file. + +The e2fsprogs tools (resize2fs, e2fsck, mke2fs) will open the +filesystem device node in exclusive mode to prevent accidents by +system administrators. In the case of resize2fs and mke2fs, it will +only use exclusive mode if the filesystem is not mounted. + +Fixed a bug in mke2fs which caused it to to fail when creating the +resize inode for large filesystems. (Addresses Debian Bug #346580) + +When allocating space for the RAID filesystems with the stride +parameter, mke2fs will now place each portion of the group's inode +table right up after the superblock (if present) in order to minimize +fragmentation of the freespace. + +Speed up mke2fs and e2fsck by writing inode and block bitmaps more +efficiently by writing the inode and block bitmaps in one pass, thus +reducing the number of disk seeks required. + +Add support for on-line resizing to resize2fs. + +Fix blkid library so that logic to determine whether or not a device's +cached information in /etc/blkid.tab needs to be verified or not +doesn't get confused by a system clock which is insane (for example, +if the battery is dead on a Macintosh running PPC Linux. (Addresses +Red Hat Bug: #182188) + +The blkid library will now store the UUID of the external journal used +by ext3 filesystems, so that in the future, the userspace mount binary +can use this to find the location of the external journal and pass +this information to the kernel. + +E2fsck will now consult a configuration file, /etc/e2fsck.conf to +control how various options should be handled. See the e2fsck.conf +man page for more details. (Addresses Debian Bug: #150295) + +E2fsck now prints an explanatory message when delaying a filesystem +check when the system is running on battery. (Addresses Debian Bug: +#350306) + +E2fsck will detect if the superblock's last mount field or last write +field is in the future, and offer to fix if so. (Addresses Debian Bug +#327580) These problems will be fixed automatically in preen mode +since Debian's boot sequence bogusly doesn't set the time correctly +until potentially very late in the bootup process, and this can cause +false positives which will cause users' systems to fail to boot. +(Addresses Debian Bugs #343662 and #343645) + +E2fsck now checks to see if the superblock hint for the location of +the external journal is incorrect, and if so, offer to update it. +(Addresses Debian Bug: #355644) + +Fix e2fsck from segfaulting on disconnected inodes that contain one or +more extended attributes. (Addresses Debian Bug: #316736, #318463) + +E2fsck will stop and print a warning if the user tries running a +read/write badblocks test on a read-only mounted root filesystem. + +Fix a memory leak in e2fsck's error paths. (Thanks to Michael +C. Thompson for pointing these out; they were originally found using +Coverity.) + +When resizing a file containing a filesystem, resize2fs will expand or +truncate a file as necessary. (Addresses Debian Bug: #271607) + +Resize2fs will now automatically determine the RAID stride parameter that +had been used to create the filesystem, and use that for newly created +block groups. The RAID stride parameter may also be manually specified +on the command line using the new -S option to resize2fs. + +Fix mke2fs so that it correctly creates external journals on +big-endian machines (such as a S/390). + +Fix a bug in the e2p library which could cause dumpe2fs to (rarely) +fail to print out the journal or hash seed UUID. (Thanks to Guillaume +Chambraud for pointing this out.) + +Dumpe2fs will now print the size of the journal (if present). + +Fix debugfs's set_inode_field command so it can properly set the frag, +fsize, uid_high, gid_high, and author fields in the inode instead of +silently failing, and so that setting the i_size actually sets i_size +correctly. + +Add a new debugfs command, set_current_time, which sets fs->now so +that regression test suites can repeatedly modify the filesystem's +last_write fields. + +Fix a bug in debugfs's icheck which would incorrectly report the owner +of an extended attribute block. + +Fix the debugfs commands htree_dump, dx_hash, and list_dir so they print a +print a usage message when an illegal option character is given. + +Fix debugfs's dump_unsued command on filesystems with a 64k blocksize +so it won't core dump. (Addresses SourceForge bug #1424311) + +Fix mklost+found so that it creates a full-sized directory on +filesystems with larger block sizes. + +Fix a file descriptor leak in blkid library. + +Fix a display bug in "badblocks -sv" so that the done message properly +clears the block number at the end of the test. (Addresses Debian Bug +#322231) + +Allow fractional percentages to the -m option in mke2fs and tune2fs +(Addresses Debian Bug: #80205) + +Use fstat/fstat64 in getsize.c if the the target is a regular file, +instead of attempting to do a binary search. Fix some fd leaks in +error cases. + +Add support for device mapper library to the blkid library to ensure +that the "best" (i.e., leaf) device is probed by the blkid library. + +Fix the blkid library so that it notices when an ext2 filesystem is +upgraded to ext3. + +Improve the blkid's library VFAT/FAT detection; it now understands +labels stored in the root directory, and is more paranoid about +checking the FAT superblock values. + +Fixed a fd leak in the uuid library which was causing problems for the +LVM tools. (Addresses Debian Bug: #345832) + +Add support for the reiser4 and software suspend partitions to the +blkid library. Also add support for extract the label from iso9660 +filesystems. + +Fix a compile_et bug which miscount the number of error messages if +continuations are used in the .et file. + +Add extra sanity checks to protect users from unusual cirucmstances +where /etc/mtab may not be sane, by checking to see if the device is +reported busy (works on Linux 2.6) kernels. (Addresses Debian Bug +#319002) + +Updated French, Dutch, Polish, and Swedish translations. (Addresses Debian +Bug: #343149, #341911, #300871, #316604, #316782, #330789) + +Fix use-after-free bug in e2fsck when finishing up the use of the +e2fsck context structure. + +Fixed spelling mistakes, typos, and otherwise clarified man pages and +documentation. (Addresses Debian Bugs: #329859, #322188, #316811, +#312515, #351268, #357951, #347295, #316040, #368392, #368393, #368394, +#368179) + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs #317862, #320389, #290429, #310950, +#310428, #330737, #330736, #329074, #356293, #360046, #366017, #364516, +#362544, #362970) + + +Programmer's notes: +------------------- + +Update config.guess and config.sub to latest version (2006-02-23) from +FSF. + +Fix asm_types.h type conflicts on AMD 64 platforms. (Addresses Debian +Bugs: #360661, #360317) + +Fixed the Makefile so that they work correctly on newer versions of +GNU make (i.e., 3.81). + +Add valgrind support to the regression test suites, and eliminate +false positives from valgrind. + +Add a regression test suite for the blkid library. + +Fix a fencepost error in resize2fs caught by valgrind. + +Fix compiler warnings about missing memcpy prototypes. + +We no longer have the sparc assembly code in the header file any more, +so we shouldn't set _EXT2_HAVE_HAS_BITOPS_ for the sparc. This would +break compiles on the sparc architectures when using gcc. + +In the libext2fs library, add the new field fs->now which if non-zero +is used instead of the system time when setting various filesystem +fields (last modified time, last write time, etc.) + +Fix gcc 4.01 complaints by adding a missing #include to +ext2fs.h which is needed since the inline functions use memcpy(). +(Addresses Sourceforge Bug #1251062) + +Use BUILD_CFLAGS and BUILD_LDFLAGS instead of CFLAGS and LDFLAGS in +the build system when building files in the util directory which are +needed during the build process. This avoids potential problems when +cross-compiling and some of the options specified in CFLAGS or LDFLAGS +are not recognized as valid by the host compiler. (Addresses +Sourceforge Bug #1261547) + +Clean up the blkid library by making the superblock and generic i/o +functions to be more generic. Clean up interface to the probe +function, and fix memory leak. Finallly, remove an unneeded reference +to probe.h in the lib/blkid/resolve.c + +Add an ext2fs_read_bb_FILE regression test to confirm proper detection +of invalid block #'s. + +The x86 asm constraints for ext2fs_{set/clear}_bit have been fixed to +indicate that the the function read/writes the memory location. + +Fix various gcc -Wall complaints. + +Add a dependency to make sure that the subdirectories are created +before creating all of the object files, in order to address parallel +build problem in the library Makefiles. (Addresses Sourceforge Bug: +#1261553) + +Add $(LDFLAGS) to the command line argument when generating an ELF or +Solaris shared library, to allow cross-compile and other builds that +might need to specify -L paths to needed libraries. (Addresses +Sourceforge Bug #1261549) + +Add a new feature, EXT2_FEATURE_COMPAT_LAZY_BG, which is initially +intended for testing purposes. It allows an ext2/ext3 developer to +create very large filesystems using sparse files where most of the +block groups are not initialized and so do not require much disk +space. Eventually it could be used as a way of speeding up mke2fs and +e2fsck for large filesystem, but that would be best done by adding an +RO_COMPAT extension to the filesystem to allow the inode table to be +lazily initialized on a per-block basis, instead of being entirely +initialized or entirely unused on a per-blockgroup basis. + +Fix backwards compatibility so e2fsprogs will better compile on Linux +2.0.35 systems. + +Make test scripts more robust against locale-related environment variables + +Fix type warning problem with sizeof() in ext2fs_open2(). + +Fix type warning problem with time_t in debugfs. + + +E2fsprogs 1.38 (June 30, 2005) +============================== + +Fix blkid's test programs (built with "make check") compile correctly +even without "configure --enable-blkid-debug". + +Fix ia64 core dump bug caused by e2fsprogs running afoul of C99 strict +type aliasing rules on newer gcc compilers. (Addresses Red Hat +Bugzilla ##161183.) + +Fix com_err library to make it more compatible with recent changes +made to the com_err library in MIT Kerberos V5 version 1.4. +(Addresses Sourcefroge Bug #1150146) + +General cleanup of messages printed by e2fsprogs programs for grammar, +consistency, and to make life easier for translators. Fixed a few +strings containing English that had not been marked as needing +translations. Removed strings that do not need to be translated, to +make life easier for translators. + +Mke2fs and badblocks will take advantage of a feature in Linux 2.6 to +test to see if a device appears to be in use instead of just relying +on /proc/mounts and /etc/mtab. (Addresses Debian Bug #308594). + +Fix portability problem in the filefrag program affecting platforms +where the size of an integer is smaller than the size of a long. +(Addresses Debian Bug #309655) + +Mke2fs will now use a larger journal by default for filesystems +greater than 4GB. (128 MB instead of 32MB). + +Mke2fs will refuse to create filesystems greater than 2**31-1 blocks, +unless forced. This is to avoid signed vs. unsigned kernel bugs in +block numbers that still need to be fixed. + +The blkid program has a new option which will more efficiently search +for device when it is known (or expected) that only one matching +device will be found in the system, such as when doing a lookup by +UUID. + +Debian's e2fsprogs-specific initrd fragment will avoid including +unnecessary libraries into the initrd ramdisk by unsetting LD_PRELOAD +and LD_LIBRARY_PATH, and filtering out libraries found in +/etc/ld.so.preload. (Addresses Debian Bug: #304003) + +Fixed a potential portability issue in the blkid programs for +architectures where the char type is unsigned. (Addresses Sourceforge +Bug: #1180585) + +Fix a bug in filefrag so that it doesn't falsely count an extra +discontinuity when the first block found is an indirect block. +(Addresses Debian Bug #307607). + +Fix blkid's recognition of cramfs filesystems, and enhance it to be +able to handle cramfs labels. + +Fix debugfs's stat command to not core dump when a filesystem is not +open. + +Fix e2fsck's handling of error conditions caused by the resize inode +claiming blocks that are also used by other inodes, a filesystem +corruption which was commonly caused by a bug in Fedora Core 3's +resize2fs program. + +Fixed bug in filefrag which caused it to fail on non-ext2/3 +filesystems. (Addresses Debian Bug: #303509) + +If the superblock last mount time indicates that the system clock may +not be accurate, then e2fsck will omit checking inodes' deletion time +field for indications of a potential corrupted orphaned inode list. +(Previously e2fsck only ommited these LOW_DTIME checks when the +superblock's last write time looked insane.) + +Fixed a IA64 core dump bug in the e2p library which affected dumpe2fs. +(Addresses Debian bug #302200) + +Make the blkid library more paranoid about being run from setgid +programs, and to use __secure_getenv() from libc if it is available. + +Fixed spelling mistakes, typos, and otherwise clarified man pages. +(Addresses Debian Bugs: #304591, #304592, #304594, #304597, #304593 +and Sourceforge Bug: #1189803) + +Updated and fixed translations. + +Fixed various Debian packaging issues --- see debian/changelog for +details. + +Programmer's notes: +------------------- + +Ext2fs_set_bit(), ext2fs_clear_bit(), and ext2fs_test_bit( have been +changed to take an unsigned int for the bit number. Negative bit +numbers were never allowed (and didn't make any sense), so this should +be a safe change. This is needed to allow safe use of block numbers +greater than or equal to 2**31. + +The compile_et program will avoid recreating generated foo_err.c and +foo_err.h files if no changes are necessary. The compile_et program +will also atomically replace these files to avoid a potential parallel +build race problem on SMP systems. (Addresses Sourceforge Bug: +#1157933) + +Added a new function to the blkid library, blkid_probe_all_new(), +which only probes newly added disk devices, and change +blkid_find_dev_with_tag() to use this function so that when a +requested tag is not found, devices that were previously not checked +are searched before searching all devices in the system. + +Added new functions to the blkid library, blkid_dev_set_search() and +blkid_dev_has_tag(). + +E2fsck's problem strings can now use @m and @n as abbrevations for +"multiply-claimed" and "invalid", respectively. + +The e2fsprog.pot file now has an explanation of how the @-expansion +and %-expansion works, and strings in e2fsck/problem.c which contain @ +characters now have comments in e2fsprogs.pot with the @-expansion to +make life easier for translators. + +Fixed missing return values in the ext2fs library which could cause it +to return random garbage in certain error conditions. + +Allow the current time to be overriden via the E2FSCK_TIME environment +variable for use in regression tests. + +The test scrpit driver program now exits with a non-zero status if +there any of its test that it ran failed. + +Fixed problems with parabuilds on SMP systems. (Addresses Sourceforge +Bug: #1157933) + +Fixed "make check" so that it compiles correctly even when e2fsprogs' +header files have not be installed in the system include directories. +(Addresses Sourceforge Bug: #1180572) + +Fixed gcc -Wall nits. + + +E2fsprogs 1.37 (March 21, 2005) +=============================== + +Add support for checking the validity of Extended Attributes stored in +inodes to e2fsck. + +Add support for dumping the contents of large inodes to debugfs, +including the extended attributes stored in inodes. + +Fix mke2fs, e2fsck, debugfs, and the ext2fs_mkdir function so that +when we create a new inode we make sure that the extra information in +the inode (any extra fields in a large inode and any ea-in-inode +information) is initialized correctly. This can take place when +mke2fs creates the root and lost+found directory, when e2fsck creates +a new root inode or a new lost+found directory, and when the user uses +the debugfs write, mknod, or mkdir commands. Otherwise, the newly +create inode could inherit garbage (or old EA information) from a +previously deleted inode. + +Fixed a bug in e2fsck so it would notice if a file with an extended +attribute block was exactly 2**32 blocks, such that i_blocks wrapped +to zero. + +Added support to filefrag to detect files which are using the new +experimental file extents format, and use the non-ext2 algorithm in +that case. Fixed a bug to avoid reporting a false discontinuity if +there is one or more unallocated blocks at the beginning of a file. + +Duplicated a check for noticing whether or not the number of blocks +(given a certain blocksize) is greater than 2**32 when the +BLKGETSIZE64 ioctl is not available to ext2fs_get_device_size(). This +allows mke2fs to automatically use a larger blocksize when creating a +filesystem on a very large device when run on systems that do not +support BLKGETSIZE64. + +Fix the I18N build which was broken in e2fsprogs 1.36 because the +build system had been switched to treat the .gmo files as shipped +files (for backwards compatibility with systems that have older GNU +I18N tools installed), but the gen_tarball.in script was still +removing the .gmo files from the official source distribution. + +Fixed various Debian packaging issues --- see debian/changelog for +details. (Addresses Debian Bugs ##296769, #299341) + +Programmer's notes: +------------------- + +Added new functions to the e2p library which convert between a string +and os_type: e2p_os2string() and e2p_string2os(), and used them to +make the generated binaries more compact. + +Fixed a compile-time error on Darwin systems. + +Cleaned up the lib/ext2fs Makefile slightly. + + +E2fsprogs 1.36 (February 4, 2005) +================================= + +All of the patches that were applied to Fedore Core 3's +e2fsprogs-1.35-11.2 have been integrated, although sometimes with a +lot of bug fixes first. Users of Fedora Core 3 are strongly +encouraged to upgrade to e2fsprogs 1.36 as soon as possible. + +Add support for filesystem with the online resizing via resize inode +feature. Fixed numerous bugs from the Fedora patches. The Fedora +patches also didn't bother to do any consistency checking on the +resize inode, or add any tests to the regression test suite. The "-R +resize=4g" option to mke2fs was a no-op in the Fedora patches, despite +being listed in mke2fs's usage message. All of these shortcomings +have been corrected. + +E2fsck can also also fix filesystems trashed by Fedora's resize2fs +program. In order to do this, the user must run the commands: + + debugfs -w /dev/hdXXX -R "features ^resize_inode" + e2fsck -f /dev/hdXXX + +Optionally, the ext2prepare command can be used to re-enable online +resizing after the filesystem has been fixed. + +The fsck program will now accept an optional filedescriptor argument +to the -C option. (The Fedora version of this patch would sometimes +cause fsck to ignore a parameter on fsck's command line in some rare +cases, sigh.) + +Make sure e2fsprogs doesn't write garbage into the reserved portion of +large inodes. + +Make sure resize2fs releases the blocks belonging to the old inode +table blocks when moving the inode table. (Addresses Debian Bug: +#290894) + +Skip the r_resize_inode test if resize2fs is not compiled (due to +configure --disable-resizer) + +E2fsck now checks the summary filesystem accounting information, and +if any of the information is obviously wrong, it will force a full +filesystem check. (Addresses Debian Bug #291571) + +Fix e2fsck to not complain when the resize_inode feature is enabled, +s_reserved_gdt_blocks is zero, and there is no DIND block allocated in +the resize inode. + +Fix e2fsck to note delete symlinks that contain an extended attribute +after the ext_attr feature flag has been cleared. (Addresses Red Hat +Bugzilla #146284). + +Add new utility program, copy_sparse.c, which is very useful +for dealing with large sparse files (such as e2image files). + +Add support for jnl_blocks[] for debugfs's set_super_value. + +Fix filefrag so that it works correctly with sparse files. + +Filefrag -v will print first and last blocks. + +Add interpretation of OS Creator values for FreeBSD and Lites in mke2fs +and dumpe2fs. + +Add mke2fs support so that it can support filesystems larger than 4TB +automatically, by retrying with a 4k blocksize if the device size is +too big to be expressed using a 1k blocksize. (Addresses Sourceforge +bug #1106631) + +Change blkid to test for NTFS first because Windows sometimes doesn't +clear enough of the parition to confuse the probing routines into +thinking the old filesystem type is still valid. (Addresses Debian +Bug #291990) + +Add support for swap partition label and uuid's in the blkid library. + +Add support to the blkid library to recognize Oracle ASM volumes. + +Make blkid -t display all devices that match the specified criteria, +not just the first one, and work more consistently when the blkid +cache file is not available or set to /dev/null. (Addresses Debian +Bug #290530 and #292425) + +Badblocks will now correctly display block numbers greater than +999,999,999 in its progress display. + +The tune2fs program will not allow the user from setting a ridiculous +number of reserved blocks which would cause e2fsck to assume the +superblock was corrupt. E2fsck's standards for what is a ridiculous +number of reserved block has also been relaxed to 50% of the blocks in +the filesystem. + +The blkid library will return vfat in preference to msdos, and ext3 in +preference to ext2 (if the journalling flag is set) so that mount will +do the right thing. (Addresses Debian bug #287455) + +Mke2fs will now use the -E option for extended options; the old -R +(raid options) option is still accepted for backwards compatibility. +Fix a double-free problem in resize2fs. (Red Hat Bugzilla #132707) + +Mke2fs will now accept a size in megabytes, gigabytes, and other units +(via "32m" or "4g" on the command line) if the user finds this more +convenient than specifying a block count. + +Fix an obscure, hard-to find bug in "e2fsck -S" caused by an inode +cache conherency problem. + +Debugfs now supports a new command, set_inode_field, which allows a +user to manually set a specific inode field more conveniently, as well +as set entries in the indirect block map. + +Debugfs's set_super_value command has been enhanced so that the user +can set most superblock fields, including the date/time fields and +some of the more newsly added superblock fields. + +E2fsprogs programs now accept an offset to be passed to the file +specifiers, via the syntax: "/tmp/test.img?offset=1024". + +E2fsprogs programs will now accept blocksizes up to 65536; kernel +support on the x86 doesn't exist for now, but it can be useful on +other architectures with page sizes greater than 4k. There are 2.6 +kernel patches out there which enable this, but they are of this +writing still experimental. + +The e2image command now takes the -s option which will scramble +directory entries for raw image files. + +Fix a file descriptor leak in the filefrag program. + +Make sure e2fsck doesn't crash when /proc/acpi/ac_adapter is not +present. + +Fix bug in debugfs where kill_file would lead to errors when deleting +devices and symlinks. (Sourceforge Bugs #954741 and #957244) + +Fix bug in the blkid library when detecting the ocfs1 filesystem + +Remove obsolete EVMS 1.x and a.out DLL support. + +E2fsck will attempt to recover from a journal containing illegal blocks. + +Fixed two potential ordering constraint problems in e2fsck which might +cause the filesystem to be corrupted if e2fsck is interrupted during a +(extremely narrow) race window. Thanks to Junfeng Yang from the +Stanford Metacompilation group for pointing this out. + +Fixed bug in e2fsck where it would not accurately detect whether or +not the system is running on adaptor if the ACPI device representing +the AC adapter didn't correspond to the what was used on IBM +Thinkpads. + +Change e2fsck to accept directories greater than 32MB. + +Fix e2fsck so that a checkinterval of zero disables a time-based check +of the filesystem. + +Debugfs will check the DEBUGFS_PAGER enviroment variable in preference +to the PAGER environment variable. (Addresses Debian Bug #239547) + +Tune2fs will not mark rewrite the superblock if the feature bitmasks +are not modified. + +The debugfs program will set the filetype information when creating a +link. + +Add debugfs -d option to use a separate source of data blocks when +reading from an e2image file. + +Add e2image -I option which allows the e2image metadata to be +installed into a filesystem. + +Fixed bug in the badblocks program which caused "done" to always +appear in english even when a translation was available. (Addresses +Debian Bug #252836) + +The blkid program has a new option -o which controls the output format +of the blkid program; this is makes blkid more convenient to use in +shell scripts. + +Fix a minor bug in uuid library, which was not using the full 14 bits +of clock sequence when generating UUID's. + +Fix a Y8.8888K problem in the uuid library. + +Logsave now creates a new session id for itself to avoid getting +killed by init whan transitioning between init levels. + +Change the licensing of the UUID library to be the 3-clause BSD-style +license; this allows Apple to use the uuid library in Darwin. + +Add ocfs and ocfs2 probe support into the blkid library. + +Fix a memory and file descriptor leak in the blkid library. + +The blkid library will revalidate the device if the system time is +earlier than last verification time of the device, since that +indicates that the system time is probably nottrustworthy. + +The blkid library will override the default location of the blkid.tab +file by the BLKID_FILE environment variable, if it is available. + +Change the getsize functions to use the BLKGETSIZE64 ioctl on Linux 2.6. + +Add various portability fixes for lame new versions of glibc, Darwin +and GNU/KFreeBSD, as well as removing XSI:ism's. (Addresses Debian +Bugs #239934, #264630, #269044, #255589, #289133) + +Add support for Windows 9x/NT under Cygwin. + +Updated and clarified various man pages. (Addresses Debian Bugs #236383, + #241940, #238741, #242995, #256669, #268148, #256760, #273679) + +Updated and fixed translations. (Addresses Debian bugs #244105, #262836) + +Update the rpm spec files so that it works better with Fedora core 2 +and RH9. + +Fixed various Debian packaging issues (see debian/changelog). In +particular, fixed the Debian initrd scripts. (#241183, #248050, +#253595, #247775) + + +Programmer's notes: +------------------- + +Fixed various gcc -Wall warnings. + +The uuid library now has new functions uuid_unparse_upper() and +uuid_unparse_lower() which forces the case of the hex digits to be +upper case, or lower case. + +The build process has been speeded up by enhancing the subst program +to update the modtime on the generated files even when the generated +file hasn't changed. + +The uuid library now uses C99 stdint.h types instead of custom types. + +Updated config.guess and config.sub with newer versions from the FSF. + +Removed out of date .cvsignore files from the source distribution. + +The ext2fs_unlink() function will return an error if both the name and +inode number are unspecified, to avoid doing something surprising +(such as unconditionally deleting the first directory entry). +Directory entries are now deleted by coalescing them with the previous +directory entry if possible, to avoid directory fragmentation. This +is not an issue with the e2fsprogs suite, but may be a problem for +some of the users of libext2fs, such as e2tools. + +Add support for version numbers of the form "1.36-rc1". + +Fix build of mke2fs.static. + +Add basic ext2fs library support for large (EA in inode) inodes. + +The test_io mechanism can now abort after n reads or writes to a +particular block. The block is specified by TEST_IO_BLOCK environment +variable, and the read/write count by the TEST_IO_READ_ABORT and +TEST_IO_WRITE_ABORT environment variables. The block data is now only +dumped if the 0x10 bit is set in TEST_IO_FLAGS. + +UUID_DEFINE() in the uuid library now creates a static variable, with +__attribute__ ((unused)) if we are using GCC, so that UUID_DEFINE can +be used in header files. + +Add support for the install-strip and install-shlibs-strip targets, as +suggested by the GNU coding guielines. "make install" no longer +strips the binaries which are installed. + +Remove support for the --enable-old-bitops configure option which was +only for very old sparc systems. + +Remove support for --enable-clear-htree; this was only needed during +the early development of the htree patch. + +Use Linux-kernel-style makefile output so it is easier to see compiler +warnings. + +Update gettext files to version 0.14.1. + +Update to use autoconf 2.5x. + +Improved support for compiling e2fsprogs under dietlibc. + +Make e2fsprogs portable to Solaris and FreeBSD systems. + +Add blkid_verify(), blkid_get_library_version(), and +blkid_parse_version_string() functions to the blkid library. + +Add pkg-config files for e2fsprogs's libraries. + +Fix "make uninstall" to so that it removes everything that is installed. + +Add a configure --enable-maintainer-mode option which enables the +makefile rules to rebuild the configure script from configure.in, and +to reubuild the .gmo files in po directory. + +Drop the sparc assembly bitwise operations; it's less efficient +than the GCC 3.4 compile code and triggers compiler warnings on +sparc64. Thanks to Matthias Andree for his analysis and suggestions. +(Addresses Debian Bug #232326) + + +E2fsprogs 1.35 (February 28, 2004) +================================== + +E2fsck has a new -k option, which in conjunction with the -c options, +preserves the existing badblocks list. + +Cleaned up e2fsck's preen-mode messages during the passes 1b, 1c, and 1d. + +E2fsprogs will now deal correctly with symlinks that contain +extended attribute information, which can be created using SE Linux. +(Addresses Debian Bug #232328) + +Remove a double longjump into an invalid stack frame bug in e2fsck. +(This was during an abort sequence, which normally worked on Linux and +caused a core dump on other operating systems.) + +Fix NLS bug in e2fsck, by avoiding trying to expand an empty string +(the NLS library will replace "" with the .po header information). + +Fix a bug in mke2fs which caused -T largefile or -T largefile4 to core +dump due to a division by zero error. (Addresses Debian bug #207082) + +Fixed a bug in e2fsck which caused it to incorrectly fix a filesystem +when reconnecting a directory requires creating a lost+found +directory. (Addresses Debian bug #219640). + +Fixed a bug where e2fsck would bomb out if a journal needed to be +replayed when using an alternate superblock. + +E2fsck will give an extra grace period before actually forcing a check +if the laptop is running on battery. The next time fsck runs while +the system is on the AC mains, or after the grace period is exceeded, +the filesystem will be checked. (Addresses Debian bug #205177) + +E2fsck will inform the user when there are 5 or fewer mounts before a +filesystem check will be forced. (Addresses Debian bug #157194) + +Fix e2fsck's handling of corrupted indirect blocks in the bad block. +We now correctly handle the case where there is an overlap between a +block group descriptor or a superblock and a bad block indirect block. +In the case where the indirect block is corrupted, we now suggest +"e2fsck -c". + +Fix byte swap bugs in e2fsck that caused the journal backup location +in the superblock and symlinks created by SE Linux to be cleared +by e2fsck on big-endian machines. (Addresses Debian bug #228723) + +E2fsck -c now replaces the current list of bad blocks with the ones +found by badblocks. + +Fix bugs in e2fsck and tune2fs which could cause a core dump if a +non-existent LABEL or UUID specifier is to e2fsck or tune2fs. + +Fix a potential bug in e2fsck which could cause it to core dump when +trying to print the location of the backup superblock. + +Protect against a potential core dump in e2fsck when printing a +message about backup superblocks. + +Add support for backing up the journal inode location in the +superblock. E2fsck will automatically save the journal information in +the superblock if it is not there already, and will use it if the +journal inode appears to be corrupted. ext2fs_add_journal_inode() +will also save the backup information, so that new filesystems created +by mke2fs and filesystems that have journals added via tune2fs will +also have journal location written to the superblock as well. +Debugfs's logdump command has been enhanced so that it can use the +journal information in the superblock. + +E2fsck will now update all superblocks when moving the journal inode. + +Shrink the size of the e2fsck executable by moving some initialized +variables to the BSS segment. + +E2fsck will avoid printing the ^A and ^B characters which bracket the +progress bar when stdout and stdin are a tty device instead of a pipe +to another program. (Addresses Debian bug #204137) + +Debugfs's mkdir command will automatically expand the directory if +necessary. (Addresses Debian Bug: #217892) + +Fixed a bug in debugfs so that copying a file from /dev/null uses the +correct mode bits. (Addresses Debian Bug: #217456) + +If the environment variables DEBUFS_PAGER and PAGER are not set, +debugfs now searches for the appropriate pager to use, beginning with +/usr/bin/pager, and then falling back to 'more' and 'less'. +(Addresses Debian bug #221977) + +Debugfs will now support 2.6 device numbers where the major or minor +number may be larger than 255. (Addresses Sourceforge bug #865289) + +Fix debugging printf in resize2fs. (Addresses Debian Bug #271605) + +Chattr now stops processing options when it sees '--'. (Addresses +Debian bug #225188) + +Fix regression tests so they work correctly when e2fsprogs is compiled +with configure --disable-htree. + +Fix bug in uuid library when there is no network card and the library +is generating a time-based uuid. The random MAC address was not +correctly generated to be a multicast address. + +Add compile_et extensions from Heimdall that were missed the first time +around. + +Fix bug in badblocks when using O_DIRECT; we need to make sure that +we're reading from an offset which is page aligned. For read-only and +read-write tests, we try to recover after an error so that we can +continue reading on page-aligned boundaries. (Addresses Debian Bug +#203713) + +Badblocks now checks 64 blocks at a time instead of 16. (Addresses +Debian bug #232240) + +Updated and clarified various man pages. (Addresses Debian Bug +#206845, #222606, #214920, #232406) + +Updated and fixed translations. (Addresses Debian bugs #200086, #214633) + +Fixed various Debian packaging issues (see debian/changelog). + +Programmer's notes: +------------------- + +Fixed a build problem so that e2fsprogs would compile with the +--enable-profile option to configure selected. (Addresses Sourceforge +bug #811408) + +Fixed C++ problems with the ext2fs.h header. (Addresses Red Hat +Bugzilla Bug #112448) + +Centralize code which calculates the location of the superblock +and block group descriptors so that it is in a single library routine. + +Added two new functions, ext2fs_file_open2() and +ext2fs_inode_io_intern2() which take a pointer to an inode structure. + +Fix compile_et to output the correct prototype for +initialize_xxx_err_table_r() in the header file. (Addresses Debian +bug #204332) + +In the lib/et makefile, make sure com_err.info is deleted on "make clean". + +Fix 64-bit warnings in e2fsprogs pass1b by using inttypes.h if +present. This is for when we try stuffing an int into void * pointer. + +Fix type-punning which can cause gcc 3.x to miscompile code by getting +confused about pointer aliasing. ext2fs_getmem(), ext2fs_free_mem(), +and ext2fs_resize_mem() all now take a 'void *' instead of a 'void +**'. The EVMS code uses an ugly union approach since we don't want to +modify the EVMS interfaces. + +Make sure all Makefiles use $(MAKE) rather than hardcoded "make", to +aid build process on systems can use invoke GNU make as "gmake". + +Added regression testing for mke2fs. + +Fixed gcc -Wall nitpicks. + +Fixed various compiler warnings. + +Add portability fixes for FreeBSD and for using fsctl under Darwin to +support ext2 ioctl's. + + +E2fsprogs 1.34 (July 25, 2003) +=============================== + +Fixed a bug introduced in E2fsprogs 1.30 which caused fsck to spin in +a tight loop while waiting for a child fsck to exit in some cases. +This burns CPU times which slows down the low-level filesystem check. + +Added code to mke2fs to assure that the default block size for a +filesystem is at least as big as the sector size of the device, if it +can be determined. + +Changed mke2fs and resize2fs to round the default size of a filesystem +to be an even multiple of the VM pagesize in order to avoid a Linux +kernel bug introduced when the storage of the buffer cache was moved +into the page cache. + +Mke2fs will warn the user when creating a filesystem with journaling +and a blocksize greater than 4096. (Addresses Debian bug #193773) + +Fixed a bug in resize2fs which caused it to fail on filesystems with a +non-empty bad block list. Resize2fs now discards any blocks on the +badblock list which are no longer part of the filesystem as the result +of a filesystem shrink. (Note: this means that shrinking and then +enlarging a filesystem is no longer a reversible operation; +information about bad blocks in the part of the filesystem which is to +be chopped off will be lost.) + +Changed resize2fs so the user can use prefixes to specify the units of +the new filesystem size (sectors, kilobytes, megabytes, or gigabytes), +and to make the error and informational messages explicitly display +the blocksize used by the filesystem, in order to avoid confusion. +(Addresses Debian bug: #189814) + +Added a new debugfs command, dump_unused, which dumps the contents of +all unused blocks to stdout. (Useful as an emergency try-to-find +deleted data command.) + +Added a new debugfs command, imap, which prints the location of a +specified inode in the inode table. + +Fixed a bug in the badblocks program which caused it to use one bit of +randomness in its non-destructive read/write test, instead of using a +full 8 bits of randomness. + +Added a new option (-t) to badblocks, which allows the user to control +the test pattern(s) used when checking a disk. + +The blkid probe function now more correctly detects UDF filesystems. + +Fixed a bug in the blkid library which caused it to not update its +cache if a filesystem changes from having a label to not having a +label. + +Fixed a bug in the blkid library wihch could avoid an infinite loop +in blkid_find_dev_with_tag() if /proc is not mounted and there the +/etc/blkid.tab file has not yet been created. + +Fixed the badblocks program so that the destructive read/write test +honors the -c option, and to use O_DIRECT when possible to avoid +thrashing the system block buffer cache. + +Fixed various NLS issues. + - Added Czech and Swedish translations + - Removed testing NYC translation + - Fixed NLS support for message abbrevations in e2fsck + - Remove de-utf.po, since we shouldn't have two versions using different + charset encodings. + - Used ngettext() (abbreivated with the macro P_(str1, str2, n)) to + simplify the statistics reporting in e2fsck. + +Changed configure.in so that its defaults for *BSD systems no longer +build an fsck wrapper, and not to install in /usr/local by default. + +Fixed some minor spelling errors/typo's in e2fsck and the configure +script. + +Fixed various Debian packaging issues (see debian/changelog). + +Updated and clarified man pages. (Addresses Debian Bug #195616) + +Programmer's notes: +------------------- + +Fix gcc -Wall nitpicks. + +Updated gettext implementation used by e2fsprogs to 0.11.5, and enable +NLS support by default. (Added partial workaround for gettext/Darwin +incompatibility problems.) + +Added full MIT KRB5 and Himdall compaibility support to the com_err +library and the compile_et program. (Addresses Debian bug #191900) + +Added the blkid_known_fstype() function to the blkid library, which +returns true if it is passed a filesystem type which is recognized by +the blkid probing functions. + +Improved the documentation for the blkid library. + +Added the ext2fs_get_device_sectsize() function the the ext2fs library, which +returns the hardware sector size of a device, if it is available. + +Added a dependency in the blkid library's .so file to the uuid +library, since the former uses the latter. (Addresses Debian bug +#194094) + +Added --with-diet-libc and --disable-evms to the configure script. + +Fixed a minor memory leak in the badblocks program. + +Fixed a portability problem in tune2fs --- not all systems have strptime(). + +Fixed a portability problem in debugfs with the use of getopt() more +than once. Old-style BSD, new-style BSD, and Linux C libraries all do +things differently. + +Add support Windows support to ext2fs_get_device_size(). + +Added (normally disabled) debugging code to the Unix I/O manager which +causes it to disable all userspace caching if the NO_IO_CACHE is +defined. + +Changed the test I/O manager so it can always be linked into e2fsck, +mke2fs, and tune2fs if enabled via --enable-test-io-debug to the +configure script. The test I/O manager will only print any debugging +information if the TEST_IO_FLAGS or TEST_IO_BLOCK environment +variables are set, which specifies which I/O operations are logged and +a block number to watch, respectively. The log messages are sent to +stderr by default, unless a filename is specified via the +TEST_IO_LOGFILE environment variable. + + +E2fsprogs 1.33 (April 21, 2003) +=============================== + +Added a new utility program, logsave, which captures the output of a +command in a log file, even if the containing directory hasn't been +mounted yet (in which case the it saves the output in memory until it +can write out the logfile). This is useful for capturing the +output of fsck during the boot sequence. + +Fixed some portability problems that were causing problems under +the Cygwin32 environment. + +Mke2fs now interprets a negative number to the -b option as a minimum +block size. + +Fixed a bug in mke2fs which was incorrectly checking the argument to +the -g option if the default block size was used. (Addresses Debian +bug #188319) + +Fsck now explicitly ignores tmpfs and devpts, and it will complain if +it can not find filesystem checkers for jfs, reseirfs, and xfs. + +E2fsck now updates the global free block and inode counters from the +block group specific counters quietly. This is needed for an +experimental patch which eliminates locking the entire filesystem when +allocating blocks or inodes; if the filesystem is not unmounted +cleanly, the global counts may not be accurate. + +Imported bug fixes to the EVMS plugin from the EVMS 2.0 tree. (EVMS +2.0 is not yet supported; this only pulled in the bug fixes: fixed +possible hangs caused by bugs in calling waitpid, and not setting the +pipe to non-blocking mode; also fixed a file descriptor leak; made +sure all functions call log entry/exit functions.) + +Badblocks now flushes its output file as bad blocks are discovered. + +The uuid library is now more paranoid about assuming the correctness +of the /dev/random device; it mixes in a stream of bytes from +random/srandom, just in case. + +Update Debian files to reflect the fact that I am now the Debian +maintainer of e2fsprogs. Other various Debian-specific packaging +cleanups. + +Move the source tarball generation functions from the top-level +makefile to the util/gen-tarball script. + +Updated the Turkish .po translation file. + +Added Heimdal and MIT krb5 extensions to the com_err library to make +it more compatible with com_err libraries from those distributions. + +Changed dumpe2fs to always display the superblock fields relating to +the journalling and/or directory indexing feature even if those +features are not enabled. + +Updated and clarify copyright statement vis-a-vis alpha releases of +e2fsprogs. + +The ss library will now try to dynamically link to the readline +library and use it if it is present in the system. This means that +the debugfs program now has line editing and history features. The +SS_READLINE_PATH environment variable is used to find a readline or +readline-compatible library. + +E2fsck now finds most duplicate filenames (all when rebuilding all +directories via the -D option) and offers to delete or rename +duplicate filenames/directory entries. (Addresses Debian Bug #176814). + +Fix bug in e2image. When writing out a raw image file, include data +blocks from symlinks that do not store the symlink within the inode. + +Fix bug in resize2fs which incorrectly moved the block and inode +bitmaps for sparse superblock filesystems and incorrectly marked +blocks as in use. (Addresses Debian bug #174766) + +Added a new shared library, the blkid library, which efficiently +allows fsck, mke2fs, e2fsck, and tune2fs to be able to look up LABEL +and UUID filesystem specifiers without needing to search all of the +devices in the system. Instead, the device is looked up in a cache +file, and then verified to make sure the blkid cache is correct. + +Tune2fs and e2label will accept LABEL=xxx and UID=yyy specifiers for +the device name, using the blkid library. (Addresses Debian bugs +#166048, #179671) + +Fsck now supports backslash escapes in /etc/fstab so that \040 can be +used for spaces in device labels. + +Removed 32-bit limitations for debugfs's dump command. + +If the user specifies a large number of inodes, Mke2fs will +automatically adjust the number of blocks per group to find a valid +set of filesystem parameters. + +Add workaround to detect broken MD devices where when some of the +underlying devices are marked read-only, writes to the MD device are +silently dropped. E2fsck will detect if there is an attempt to run +the journal twice, and abort with an error if this is the case. +(Addresses IBM Bugzilla bug #1226) + +E2fsck will print an error if more than one of the -p/-a, -n or -y +options are specified. + +E2fsck will fix HTREE corruptions in preen mode, without stopping the +boot process. This is needed because the 2.4 ext2 filesystem +accidentally had the INDEX_FL backwards compatibility code removed. + +Mke2fs no longer creates filesystems with the dir_index flag set by +default; the user has to specifically request it. + +Update and clarified various man pages. (Addresses Debian bugs +#173612, #175233, #175113, and #170497, #185945, #188318) + +Created man page for the mk_cmds program (from the libss library). + +Programmer's notes: +------------------- + +Fix various gcc -Wall nits. + +Fixed a lot of portability problems that caused e2fsprogs not to build +successfully under Solaris and Apple/Darwin. + +Fixed a Makefile dependency to allow building e2fsprogs using parallel +make jobs. + +Changes to create a subset distribution which consists only of the +et, ss, uuid, and blkid libraries. The configure script and top-level +makefile were changed to support working with a subset distribution. + +Removed EXT2_FEATURE_RO_COMPAT_BTREE_DIR mention of since it's not +actually used, and might people who are looking for +EXT2_FEATURE_COMPAT_DIR_INDEX, which is in use. + +Updated debian files to fix a number of Lintian warnings. + +Updated config.guess and config.sub with newer versions from the FSF. + +Removed unnecessary libraries from being linked into the fsck, lsattr, +chattr, and blkid executables. + +E2fsprogs 1.32 (Nomvember 9, 2002) +================================== + +Fixed a bug in the Unix I/O routines which caused needless writebacks +of clean blocks from the unix_io cache (they were erroneously marked +as being dirty, so they were getting written back to disk before +getting evicted from the disk cache). This was harmless, but it +significantly slowed down e2fsck. + +Made some other minor optimizations to the Unix I/O routines to save a +small amount of CPU time. + +Updated internationalization files. + + +E2fsprogs 1.31 (Nomvember 8, 2002) +================================== + +Update EVMS ext2fsim plugin with EVMS 1.2. (We still support +compiling the fsim plugin with EVMS 1.0 and 1.1.) Add better error +handling for child process that die unexpectly. Add a hack to force +mkfs to create filesystems that won't cause problems with hardware +that has 2k or 4k minimum blocksize requirements. Read from child +processes in non-blocking mode, so that the GUI continues to update. + +Fix e2fsck so that it returns the appropriate exit code when the root +filesystem has been changed, so that system's rc scripts will be told that +the system needs to be rebooted. + +Fix a bug in ext2fs_flush/ext2fs_close; when the MASTER_SB_ONLY flag +was set, some of the descriptor blocks that should have been written +out were getting skipped. + +Changed e2fsck to force out changes to the backup copies of the +superblock and block group descriptors when important changes are made +to those data structures. + +Fix a bug where e2fsck could erroneously mark a filesystem as being +clean if a check of dirty filesystem is interrupted with a ^C. (Bug +introduced in e2fsprogs 1.28.) + +If journal debuging is enabled using --enable-jbd-debug, the debugging +level is now set via the E2FSCK_JBD_DEBUG environment variable. + +If byteswapping support is disabled using configure --disable-swapfs, +skip the tests which depend on byte-swapping, so that "make check" +won't bomb out. + +Lshattr will now display the indexed directory flag. Also, some of +the more esoteric compression flags are supressed unless compression +support has been enabled. + +Update man pages. + + +E2fsprogs 1.30 (October 31, 2002) +================================= + +When resizing a filesystem, and inodes need to moved, resize2fs will +update the inode's ctime field, and the mtime field of the containing +directories, so that incremental backups using dump/restore will work +correctly. + +In order to avoid spurious errors, e2fsck wil check the last +superblock write time to determine whether or not it can safely use +the LOW_DTIME checks to determine if there are inodes on the orphan +inode linked list that had somehow gotten disconnected. (Addresses +Sourceforge bug #620980) + +Partition in /proc/partitions that being with the string "lvm" are +considered real partitions even if they do not end with a number. + +Fixed a bug in the the uuid generation function, where if /dev/urandom +is not present, but /dev/random is, and there isn't sufficient +entropy, the get_random_byte function could spin a loop forever. + +E2fsck, mke2fs, etc. will now reliably notice when image files are +mounted using the loopback interface. (Addresses Sourceforge bug +#619119) + +When flushing buffers (as is done by badblocks, for example) check to +see if the BLKFLSBUF ioctl succeeds, and if so, avoid using the +FDFLUSH ioctl which causes the MD device driver which causes confusing +syslog messages about obselete ioctl messages. (Addresses Sourceforge +bug #545832). + +Debugfs's write command now checks to see if the destination filename +exists before creating it. (Addresses Sourceforge bug #478195.) + +When installing man pages, search for compressed man pages using all +commonly used compression extensions (i.e., .Z, .gz, .bz2, etc.) + +Fixed a bug in fsck where multiple filesystems specified on the +command were not being checked in parallel due to a logic bug +introduced to support the FSCK_MAX_INST environment variable. + +We have added a new superblock field, s_mkfs_time, which indicates +when a filesystem was created. It is set via mke2fs, and printed out +by dumpe2fs, but is not actually touched by the kernel. + +Dumpe2fs has been made more robust by not aborting if there is an +error reading the block/inode bitmaps; instead it will still print out +the location of the block/inode bitmaps and inode table. + +Add support for the an alternative block group descriptor layout which +allows for on-line resizing without needing to prepare the filesystem +in advance. (This is the incomat feature flag meta_bg.) + +Add support for storing default mount options in the superblock, so +that the filesystem can be mounted with specific mount options without +needing to specify them on the mount command line or in the /etc/fstab +file. + +Add support for a new inode flag, which is to be used for indicating +the top of directory hierarchies for the Orlov block allocator. + +Fix e2fsck so that if it creates the lost+found directory, it does so +with the more apporpriate permissions of 0700. Also change +mklost+found so that it also creates the directory 0700. + +Fixed format bug in e2fsck if NLS is in use. + +Add a German translation for e2fsprogs's NLS support. + +Fixed e2fsck so that it more handles BAD_BLOCK_IN_INODE_TABLE even at +the beginning of the inode table. This won't matter much, since if +there is a bad block at the beginning of the inode table, the root +directory won't be available. But at least e2fsck won't crash in this +case. + +Fixed endian problems in the htree code for e2fsck and debugfs. + +When byte-swapping a filesystem on a PPC architecture, byte-swap the +bitmaps since the historical big-endian ext2 variant had byte-swapped +bitmaps, and the ext2fs library assumes this. This fixes the +regression test suite on PPC machines. + +Fix e2image so that it handles a bad block in the inode table +appropriately. + +E2fsck now uses a more sophisticated algorithm to salvage corrupted +directories that recovers more information in the corrupted directory +block. + +E2fsck now performs additional consistency checks on indexed (HTREE) +directories. + +Fix bug where efsck might get confused about whether a completely +empty directory block is an empty leaf block or an interior htree +node. This could cause e2fsck to get confused into think that a valid +indexed directory was corrupted. + +E2fsck no longer creates an empty directory entry at the end of a +directory block when optimizing a directory. This would cause some +earlier versions of the dxdir kernel code to corrupt the directory +when attempting to split a node containing an empty directory entry. + +E2fsck could sometimes in rare circumstances leave the indexed flag +set after a small directory was optimized by compressing it instead of +indexing it. (This should never happen in real life, since +directories that small wouldn't have been indexed, but better safe +than sorry.) + +E2fsck now only updates the master superblock in all cases. This +slightly shortens its run time. + +Ext2ed can deal with directory entries of length 0; previously it +would get stuck in an infinite loop. + +Fsck now has support for reiserfs volumes when parsing LABEL= and UUID= +specifiers. (Sourceforge patch #613447) + +Badblocks will now work correctly on read-only devices such as +CD-ROM's. (Sourceforge patch #600451) + +Updated and clarified man pages. (Addresses Debian bug #167108) + + +E2fsprogs 1.29 (September 24, 2002) +=================================== + +Fixed a bug in e2fsck which could corrupt a directory when optimizing +it (via the -D option) or rebuiliding the hash tree index with a 1 in +512 probability, due to a fence post error. + +Fixed a bug in the LVM support code which caused LABEL='xxx' not to +work correctly. + +Mke2fs now enables the directory indexing flag by default. (Since +this is a compatible feature flag, it's safe to do so.) + +Tune2fs will support setting the directory indexing feature flag. It +will automatically set up the default hash algorithm and hash seed +fields in the superblock. + +If the bone-headed user enters the root filesystem twice in +/etc/fstab, the -R option which skips the root filesystem will skip +all of them. (Addresses Debian bug #159423). Note! This is not a +precedent for dealing intelligently with any other kind of doubled +entry in /etc/fstab! + + +Programmer's notes: +------------------- + +Removed perror declaration in lib/et/internal.h. All modern systems +can be expected to define perror() these days. Besides, the lib/et +code wasn't using perror at all anyway. :-) + + +E2fsprogs 1.28 (August 31, 2002) +================================ + +Add support for the Hashed-Tree Directory Indexing to e2fsck. Support +for setting the htree flag is not included yet, although it can be +manually turned on via the debugfs program. + +Clarified e2fsck error message which is printed when it cannot find +sufficient contiguous block when relcating filesystem metadata. + +Added support for building an EVMS plugin module for ext2/3. This +module is substantially the same as the EVMS module shipping with EVMS +1.1, with one or two bugfixes. E2fsprogs can also build this plugin +for use with EVMS 1.0 (which did not include the ext2 plugin module), +if the configure --enable-old-evms flag is given. + +Fsck will search through EVMS volumes when trying to resolve +filesystem specifications such as LABEL=xxx or UUID=xxx. + +Added a new utility program, /sbin/findfs, which will return +filesystem specifications such as LABEL=xxx or UUID=xxx, and prints +the device name. + +Update and clarified various man pages. (addresses Debian Bug #145044, +#146437, #131350, #151990, #144621, #141938) + +If there are no filesystems specified on fsck's command line, fsck now +treat that as if the -As options were given. Previously it would +simply do nothing. (Addresses Debian Bug #153102) + +Mke2fs no longer treats a failure to be able to clear the MD signature +at the end of the filesystem as a fatal error. (Addresses Debian Bug +#155007) + +The e2p library functions (which are used by lsattr and chattr) now +double check to make sure the file is a regular file or directory +before attempting to use the ext2 ioctls. Some device drivers +unfortunately respond to the ext2 ioctl's with unknown behaviour. +(Addresses Debian Bug #152029). + +The extended attribute handling has been updated to correspond with +the latest V2 bestbits ACL code. + +Fixed bug in e2fsck which caused it to not clear the dtime field when +processing truncated inodes on the orphan list. This could cause data +loss(!) if a filesystem is rebooted before a truncate has been +committed. + +E2fsck now uses red/black trees in pass1b, which removes some O(n**2) +algorithms. This makes e2fsck much faster in the case of severely +corrupted filesystems where a large number of blocks are claimed by a +large number of inodes. (Thanks to the 2.5 IDE device driver for +inspiring this work.) + +Resize2fs has been significantly sped up when shrinking and expanding +a filesystem by a very small number of blocks (for example, when EVMS +is converting a partition to be an EVMS legacy volume). + +Added a new option to e2fsck, -D, which will optimize or compress all +of the directories in the filesystem. + +E2fsck now catches SIGINT and SIGTERM to make sure it will can +properly clean up and only exit at safe points. Fsck will pass +SIGINT/SIGTERM to its child processes, and wait until they have all +exited before it exits. + +The uuid parsing code in the uuid library now properly complains when +an illegally formated uuid is presented to it. (Addresses Debian bug +#152891) + +Restrict use of the 2.4 setrlimit ABI f*ckup to kernels between 2.4.10 +and 2.4.17, since the workaround can cause problems when using a 2.4 +kernel with an old version of glibc built with the 2.2 headers. + +Fixed a bug in mke2fs where it wasn't properly clearing the initial +superblock used by other filesystems. (Addresses Debian bug #147256.) + +Added support for the synchronous directory feature written by Andrew +Morton. + +The debugfs program can delete directories using the rmdir command. + +Add support for 8k and 16k filesystems (for systems with page sizes +that are greater or equal to 8k or 16k, respectively). Note that +these filesystems can not be mounted on x86 systems, or other systems +with only 4k page sizes, due to limitations in the current Linux VM +code. + +Resize2fs requires that the filesystem state be valid and have no +errors; otherwise, e2fsck -f must be run first. (Previously it simply +required that the last fsck time be greater than the last mount time.) + +Configure now defaults the man pages directory to /usr/share/man on +Linux systems. + +E2fsck now offers to truncate inodes which contain too many blocks (so +that i_blocks would overflow. Also fixed handling of large sparse +files. + +E2fsck now more completely checks for symlink validity, including +requiring NULL termination and length checks. + +E2fsck will offer to try forcing a disk write to remap a bad block +after finding a read error when reading a filesystem metadata block. + +Fixed a bug in debugfs which caused the -b and -s options to crash +debugfs, as well as breaking the testb, setb, and clearb functions. + +Added a bmap command to debugfs which calculates the logical to +physical block mapping for a particular inode. + +Fixed a bug in code which checked to see if a device was mounted which +sometimes (rarely) failed in the case of a plain file. + +Fixed a bug in resize2fs where when it reported an error, it would +print a message erroneously indicating that the filesystem had been +resized before it aborted. + +When resizing a plain file which is smaller than the requested size, +resize2fs will attempt to extended the file so that programs like +e2fsck will not complain that the file is too small. + +Resize2fs will print the actual new size of the filesystem when it is +finished resizing. + +Fixed a bug in debugfs where "ls -l" would report incorrectl file type +information on big-endian systems. + + +Programmer's notes: +------------------- + +Fixed collisions with C++ reserved words. + +Added portability fixes for building e2fsprogs on the HURD and AIX. + +Added the ext2ed program for creation of test cases. (ext2ed has many +limitations and bugs which make it unsuitable for production use.) + +The ext2fs_read_dir_block2 and ext2fs_write_dir_block now take a new +flag, EXT2_DIRBLOCK_V2_STRUCT, which will will reverse when the +name_len field is byte swampped on big-endian machines, since in the +V2 structure, name_len is a char field which is doesn't need to be +byte swapped --- except if an old-style kernel had byte-swapped the +name_len field as part of the V1 structure. + + +E2fsprogs 1.27 (March 8, 2002) +============================== + +The warning messages for mke2fs now go to standard error. + +Fixed to make sure "make check" runs all of the test programs with +LD_LIBRARY_PATH set, so that we test the libraries in the build tree. + +The mke2fs program checks the boot sector for the BSD disk label, and +avoids erasing it if it is there. + +Fixed a bug in e2fsck which caused it to core dump if the journal +inode was missing when it was supposed to be there. + +E2fsck now prints ranges in pass 5 when printing deltas for the block +and inode bitmaps. + +Debugfs's "ls -l" command now will print out the file type information +in the directory entry. + +Create man pages and hard links for fsck.ext3 and mkfs.ext3. If +mke2fs is invoked as mkfs.ext3, create the filesystem with a journal. + +Debugfs can now examine the experimental directory indexing +information. + +Fixed bug in debugfs which caused it to core dump if modify_inode is +called without an open filesystem. + +The debugfs lsdel command now runs its output through a pager first. + +When installing manual pages, remove the compressed manual pages first. + +Synchronized with Debian's packaging information for e2fsprogs-1.26-1. + +Fix the 2.4 resource limitation workaround introduced in 1.26 which +actually broke things on mips32, sparc32, and Alpha platforms. + +Updated the I18N code so that calls to setlocate(LC_CTYPE, 0) are made +(which is required by the newer libintl libraries). + +Programmer's notes: +------------------- + +Fixed various gcc -Wall complaints. + +Fixed a few memory leaks in the e2fsck journaling code, and in the +ismounted code checking for a swap device. + +Add new inode I/O abstraction interface which exports an inode as +an I/O object. + +Exported ext2_file_flush as a public interface. + +In ext2_file_write, we now mark the buffer void * argument as a const, since ext2_file_write doesn't modify the buffer. + +Lots of small random portability fixes to make e2fsprogs build under +AIX --- even without the 5L compatibility toolkit, and even using the +uber-crippled AIX native C compiler. + + +E2fsprogs 1.26 (February 3, 2002) +================================= + +Dumpe2fs will keep going now if the bad block inode can't be read. +(Previously it stopped with a fatal error.) + +E2fsck will now give an opportunity to run the journal even if the +recovery flag is not set. This is the default behaviour if e2fsck is +using a backup superblock, since the needs_recovery flag will never be +set in the backup superblock copies. + +E2fsck now automatically finds the backup superblock/group descriptors +even when the primary superblock is completely destroyed for 2k and 4k +filesystems. (Previously it just guessed/assumed that we were dealing +with a 1k filesystem in that case, and users had to manually specify +the backup superblock number.) + +Fixed a bug in e2fsck where it dereferences a null pointer when there +is a problem opening a filesystem in preen mode. + +E2fsck now handles external journals correctly; previously it trashed +the external journal device if the journal needed to be replayed. + +Work around ulimit incompatibility problem caused by recent 2.4 +kernels; the unix IO module will automatically try to set any resource +limits to be infinite on startup. + +Fixed a bug in e2fsck where it wasn't allocating a new block or inode +bitmap if it wasn't present and the blocksize was 2k or 4k. + (Addresses Debian Bug #116975) + +E2fsck will check and fix botched ext3 V1 to V2 superblock updates by +clearing the new V2 fields if they do not make sense or if the ext3 +superblock is version 1 superblock. + +E2fsck will automatically relocate the ext3 journal from a visible +file (i.e., /.journal) to an hidden inode if the filesystem has been +opened read/write. This allows the users to add a journal while the +filesystem is mounted, but the next time the system is rebooted, the +journal file will disappear. This avoids problems with backups, +stupid operators with superuser bits, etc. + +Fix a bug in fsck where it would not support a filesystem type of +"auto" if the device was specified in terms of LABEL=xxx or UUID=xxx. + +Fsck now supports fstab entries of the form "ext3,ext2". It will also +automatically identify reiserfs filesystems. + +The number of processes spawned by fsck can now be limited using the +FSCK_MAX_INST environment variable. + +Fsck now searchs the LVM proc hierarchy to find logical volumes which +should be searched for UUID and label information. + +Work around a bug in 2.4.10+ kernels by trying to unset the filesize +limit if at all possible, when opening a block device. (The filesize +limit shouldn't be applied against writes to a block device.) + +In mke2fs and e2fsck, specifying the -c option twice will now do +a read/write test on the disk. Update the man pages to encourage +using the -c option, and to discouraging running badblocks separately, +since users tend to forget to set the blocksize when running +badblocks. + +Mke2fs now automatically clears the immutable attribute on a +pre-existing .journal file left over from a previous failed attempt to +add a journal to an alreadyy-mounted filesystem. + +Fixed mke2fs's exit codes to consistently indicate when the mke2fs +operation failed. + +Mke2fs now creates the lost+found directory with permissions of 0700, +so that files that had previously lived in protected directory are +safe if they get dropped in lost+found and the system administrator +doesn't deal with immediately. (Addresses Debian #bug 118443) + +Mke2fs and e2fsck (and all programs that use the +ext2fs_check_if_mounted function) will now properly identify that a +device is mounted, even in cases where devfs has confused things with +multiple devices names with the same identity, or if a dim-witted +system administrator has done something stupid like creating device +file aliases in their home directory. Also now checks for swap devices +by using /proc/swaps. (Addresses Debian bug #106622) + +Added a new option (-T) to tune2fs which sets the time a filesystem +was last checked. + +Speed up e2image when creating sparse raw image files by optimizing +away excess lseek() system calls. + +Fix support of large (> 2GB) files when used as a filesystem in +mke2fs, tune2fs, debugfs, and findsuper. + +Debugfs's stat and icheck commands now properly deals with large (> +2GB) files. + +Debugfs's set_super_value command now prints out the list of valid +superblock fields which can be set using the command. + +Debugfs's rm and kill_file command now updates the superblock free block +and inode counts, thus keeping the filesystem consistent. + +Debugfs's lsdel command now takes an optional argument which allows +the user to only see the most recently deleted files. + +A new command (undel) was added to debugfs which automates +undeleting a deleted inode and linking it back to a directory. + +Debugfs's ls command now takes a new option, -d, which lists +deleted directory entries. + +Debugfs's testb, freeb, setb, and find_free_block commands now take an +optional count argument. + +Add support for a new ext2 file attribute, EXT2_NOTAIL_FL, which will +be used to signal that a particular inode should not be eligible for +tail-merging --- this is needed for programs like LILO. + +The findsuper (an unreleased, uninstalled utility program) has been +improved to add extra validity checks and to add a progress meter. +(It is still an unsupported program; the officially supported way to +recover from a trashed partition table is to use gpart; findsuper is +for wizards only. :-) + +Debugfs was fixed to compile with "configure --disable-swapfs". + +Cleaned up various manual pages. (Addresses Debian bug #119624, #120171) + +Added new translation file for Turkish. + +Programmer's notes: +------------------- + +Fix general gcc -Wall complaints. + +E2fsprogs (mostly) works with the dietlibc. + +The programming texinfo file has been expanded to include description +of additional libext2fs functions. (Still not compeltely done, but a +lot of the more important functions have been documented.) + +Added a umask structure to struct_ext2_filsys, which currently only +modifies the behaviour of ext2fs_mkdir(), but if we add any file +creation functions to libext2fs, we should also make sure they respect +the umask setting. + +The build-rpm script was fixed to be a bit more safe. + +The tests' Makefile now has a way of automating test case creation +for e2fsck, using "make testnew". + +Created a new function, ext2fs_dir_iterate2 which passes more +information to the callback function (identical to the one used by +ext2fs_dblist_dir_iterate). The directory iterator functions take a +new flag, DIRENT_FLAG_INCLUDE_REMOVED, which will return deleted +directory entries. If the directory entry is deleted, the callback +function will be called with the entry paraemter set to +DIRENT_DELETED_FILE. + +Added new functions, ext2fs_inode_alloc_stats and +ext2fs_block_alloc_stats, which takes updates block/inode allocation +statistics in the bitmaps, block group descriptors, and superblock +when inodes or blocks are allocated or deallocated. + + +E2fsprogs 1.25 (September 20, 2001) +=================================== + +This is primarily a bug-fix release; no new features were added, but +there are a number of embarassing bug fixes and cleanups applied. + +Fix a bug mke2fs which causes stack garbage to be written to disk when +zapping disk sectors. (This bug could cause mke2fs to core dump for +some kernels, I suspect with security enhancement patches.) + +Remove unneeded #include of which was breaking +building e2fsprogs on the Hurd. (Addresses Debian bug #112414.) + +Updated tune2fs man page to reflect the fact that adding or removing a +journal doesn't require running e2fsck. + +Remove use of AC_REQUIRE from autoconf which had been used to prevent +AC_CANONICAL_HOST from being called twice; unfortunately this causes +recent autoconf to bomb out since they don't allow AC_REQUIRE to be +used outside of autoconf macros. Fortunately, it doesn't seem to be +necessary any more, anyway. + +E2fsck will now not fall back to an alternate superblock if the user +specifies the superblock location explicitly on the command-line. +This allows easier recovery from a situation where the primary +superblock and block groups are slightly corrupted, but the backup +superblocks are completely broken. + +Fix problem which caused compile_et and mk_cmds to blow up if +e2fsprogs was in a directory with a pathname that contained spaces. + +We are now more paranoid about checking the entry in /etc/mtab to make +sure the filesystem is really mounted, since some broken distributions +(read: Slackware) don't initialize /etc/mtab before checking non-root +filesystems. (Slackware also doesn't check the root filesystem +separately, and reboot if the root filesystem had changes applied to +it, which is dangerous and broken, but there's nothing I can do about +that.) + +Make UUID library C++ friendly by adding appropriate extern "C" +declarations and using const in the function declarations. + +Fix up the com_err texinfo file so that it can product a valid info +file (previously, it could only be used to generate paper +documentation using texinfo.tex). + + +E2fsprogs 1.24a (September 2, 2001) +=================================== + +Fix brown-paper bug in mke2fs which caused it to segfault when +printing the version string. + + +E2fsprogs 1.24 (August 30, 2001) +================================ + +Revert the BLKGETSIZE64 support, since for some distributions, this +ioctl has been used by an unofficial kernel patch to update the last +sector on the disk, and this was causing disk corruption problems as a +result. + +Mke2fs is now more careful about zapping swap space signatures and +other filesystem/raid superblock magic values so that programs like +mount who try to use hueristics to determine the filesystem type of a +partition are less likely to be confused. + +E2fsck will no longer complain if the the mode of EXT2_RESIZE_INO is a +regular file (since Andreas Dilger's on-line resizing tools will set +its mode bits). + +Fixed some minor texinfo, man pages nits for spelling errors, +texinfo warnings, etc. (Addresses Debian bug #110621.) + +E2fsprogs program no longer print the filesystem version number +(i.e. 0.5b), since it only confuses people and doesn't serve any real +purpose. + +E2fsck will once again compile under libc5, since it will supply its +own version of strnlen if necesssary. + +mke2fs and tune2fs will allow the use of UUID= or LABEL= specifiers +when specifying the external journal device. tune2fs will also search +devices looking for the externla journal debice when removing. + +E2fsprogs 1.23 (August 15, 2001) +================================ + +Add initial support for extended attributes (EA); e2fsck will +correctly handle a filesystem with EA's and check the EA blocks for +corruptions. + +E2fsck's symlink sanity checking has been cleaned up. It now checks +the i_size value of fast symlinks, and checks for immutable flags +being set of symlinks, etc. + +E2fsck now offers to clear inodes which are special files that have a +non-zero i_blocks or i_size field. (The i_size field check was in the +previous version of the code, but due to a bug it didn't offer to +clear the inode unless i_size and i_size_high were both non-zero.) + +E2image can now create "raw" image files, which only contain the +filesystem metadata placed in a spare file so that e2fsck, dumpe2fs, +debugfs, etc., can be run directly on the raw image file. + +Add support for the 64-bit block device patches. + +Fixed bugs in creating external journals with a 1k blocksize. + +Add initial support for external journals (so long as the external +journal only supports a single filesystem) in e2fsck. + +Remove requirement for needing to run fsck on a filesystem after +removing a journal (either internal or external). + +The man pages now document how to create and manage external journals. + +Speed up the check of an ext3 filesystems by avoiding a needless flush +of all of the superblock and block group descriptors. + +Speed up creating an internal journal using tune2fs in the case where +the filesystem has a lot blocks already allocated. + +Tune2fs has been fixed to make sure that only error messages go to +stderr, and normal message go to stdout. (Addresses Debian bug #108555) + +Fixed a minor bug in mke2fs; if -O none is passed to mke2fs, it will +now not set the sparse_super feature. (Addresses Debian bug #108165) + +Add support in fsck for the filesystem type "auto". + +Fsck -A will not try to interpret device names for filesystems which +have a pass number is 0. (Addresses Debian bug #106696). + +Fsck prints a warning message if now valid filesystems are passed to +it. (Addresses Debian Bug #107458.) + +E2fsck now gives an explicit warning if there filesystem still has +errors at the end of the run. (Addresses Debian bug #104502) + +E2fsck will set the EXT2_ERROR_FS flag if the journal superblock +reflects an error. E2fsck will also not run the orphan list if the +filesystem contains errors, since the orphan list might be corrupted. + +E2fsck now prints the number of large files when given the -v option. + +Fixed minor memory leaks in e2fsck. + +Some minor man pages updates. (Addresses Debian bug #30833, #108174) + + +E2fsprogs 1.22 (June 22, 2001) +============================== + +Fixed a bug in e2fsck's handling of orphan inodes which are special +files (i.e., block/character device files, named FIFO's, etc.). + +Fixed a bug accidentally introduced in e2fsprogs 1.21 which caused +tune2fs to fail at adding a journal to a mounted filesystem. + +Fixed a few big-endian bugs in e2fsprogs + * The directory block functions were accidentally reporting + some directories as corrupted when they weren't. + * If e2fsprogs is compiled --disable-swapfs, the C language + equivalents weren't being included for big-endian platforms. + (Fixes Debian bug #101686). + +Fixed a Hurd compilation problem. (Addresses Debian bug #101361) + +Programmer's notes: +------------------- + +Use platform independent method of defining the BLKFLSBUF and FDFLUSH +ioctls, and allow them to be defined for non-i386 platforms. + +The uuid.h header file is now protected against multiple inclusions. + +E2fsprogs is now being developed using BitKeeper. Changed the test +scripts to deal with BK's stripping CR characgters from text files, +and changed the top-level Makefile.in to avoid including BitKeeper +files when generating the source tarball. + + +E2fsprogs 1.21 (June 15, 2001) +============================== + +Added new configure flags which allow a subset e2fsprogs to be built; +this is most useful for boot floopies, since the resulting shared +libraries and programs are slimmed down by removing features that +aren't necessary for a boot floppy. The new flags that were added +are: --disable-swapfs, which removes support for byte swapping old +legacy PPC/68k filesystems, --disable-debugfs, which removes support +for debugfs from the libext2fs library, --disable-imager, which +removes support for the e2image program, and --disable-resizer, which +removes support for resize2fs. + +E2fsck now prints the number of mounts or days elapsed since the last +check when e2fsck is forced to check an otherwise clean filesystem. + +Tune2fs now prints an informative message about how often a filesystem +will be checked when adding a journal to the filesystem, to remind the +user that he/she may want to adjust those parameters using tune2fs +-c/-i. + +Worked around hurd brain-damage which causes e2fsck to sometimes +believe a filesystem is the root filesystem based on device numbers +(since Hurd doesn't have dev_t's, which is arguably a POSIX.1 +violation). + +Fixed a bug introduced in 1.20 which caused e2fsck to abort with an +erroneous error with the -F option was specified. + +Fixed a ext3 recovery bug in the revoke handling; synchronized with +ext3 0.7a. + +Fixed two bugs in e2fsck's handling of dup block handling, dealing +with relatively uncommon edge cases: a directory with an indirect +block which is claimed by another file, and when the last inode in the +filesystem has blocks claimed by another file. + +E2fsck now checks to see if the i_size field of a fast symlink is too +big, and offers to clear the symlink if so. + +E2fsck now checks to see if i_size_high of special files is non-zero, +and offers to clear i_size_high. + +Fix e2fsck's handling of incompatible journal flags so that the user +has chance to abort, and then has the option to clear out the journal +entirely. (Addresses Debian bug #98527.) + +Fixed a bug in fsck which could cause it to core dump if a mix of +standard and non-standard device names are used in /etc/fstab. +(Debian bug #100559) + +Fixed a bug in debugfs which caused read errors when copying a file to +not be noticed. + +The debugfs set_super_value command can now modify the s_lastcheck field. + +Fixed a bug in lsattr and chattr which was accidentally introduced in +1.20 to support > 2GB files; both lsattr and chattr wasn't reading +directories correctly because the change modified the layout of struct +dirent to be incompatible with the libe2p shared library. + +Cleaned up the mke2fs manual page and included a discussion about why +it's good to periodically check the filesystem even when journaling is +enabled. + +Programmer's notes: +------------------- + +Fix general gcc -Wall complaints. + +The types needed by the ext2 header files are now provided by +lib/ext2fs/ext2_types.h, instead of include/asm/types.h. + +Integers are now preferred to longs when trying to find a 32-bit type +in ext2_types.h. Also, if linux/types.h has already been defined, +don't try to redefine the types. + +Fixed make depend script so that it automatically corrects the +pathname cleanups performed by make -M, so I don't have to fix them up +by hand. + +Fixed the d_loaddump test case to be more robust, and not depend on +bash'isms. + +Removed debugfs's dependence on pread(), which was accidentally +intrudced in e2fsprogs 1.20 + +Fixed a performance bug in the libext2fs's icount routine; the size +estimate of the icount array was incorrectly being calculated. + +Removed use of the badblocks compatibility functions in the e2fsprogs +programs. + +Added paranoia code which protects against strange cases where /etc +isn't on the root filesystem, or if /etc/mtab doesn't exist. + +The header file ext2_types.h is now installed. + +Autoconf is used to determine when we are on big-endian machines, +instead of doing run-time tests, to save a few bytes of code. + +The ext2fs_mark_generic_bitmap and ext2fs_unmark_generic_bitmap +functions are no longer inline functions, which saves space and +doesn't really cost any real performance. + +The ext2fs library no longer depends on the e2p library. (What need +there was of it --- namely, fsetflags, was coded in-line). + +Fixed the makefile so that lib/ext2fs/ext2_types.h is generated even +when the user is stupid and tries compiling the package using "make +install" as root. + +Miscellaneous code cleanups: + * Added missing files from Makefile.in's SRCS file, so that + their dependencies would be properly calculated. + * Removed redundant code + * Fixed comments in code + * Removed no-longer unneeded argsused #pragma. + + +E2fsprogs 1.20 (May 20, 2001) +============================= + +Add support for replaying the ext3 journal purely in user mode, +including handling the orphaned inode list. Used code contributed by +Andreas Dilger, with bug fixes and the orphaned inode handling done +by Theodore Ts'o. + +The mke2fs and tune2fs programs can create or modify a filesystem to +include an ext3 journal. Tune2fs also can be used to remove an ext3 +journal from a filesystem. + +E2fsck will now check for the existence of a linked list of orphan +inodes in the superblock, and clear those inodes before starting the +rest of the filesystem check (but after the journal playback). + +E2fsck now validates the file descriptor passed to the -C option, +which saves against the completion bar getting written to an +unexpected location, such as the disk being checked. (Debian +bug/wishlist #55220) + +E2fsck will now bump the filesystem revision number from zero to one +if any of the compatibility bits are set. + +Fixed a bug where a badly corrupted directory on a big endian system +could cause e2fsck to die with a bus error. The +ext2fs_read_dir_block() and ext2fs_process_dir_block() functions in +the ext2 library now does alignment sanity checks on the rec_len field +of the directory entry before using it. + +The ext2 library has been enhanced to make tune2fs safe to run on +mounted filesystems. (Users could usually get away with using tune2fs +on mounted filesystems before, but with the advent of ext3 and +journaling, it became important to make tune2fs was *really* safe for +use even when the filesystem being modified is mounted.) E2label is +now implemented by tune2fs using an argv[0] dispatch, so that e2label +is also now safe for use on mounted filesystems. + +Added a new program, e2image, which creates a backup of critical ext2 +filesystem data structures. The generated image file can be examined +using dumpe2fs and debugfs. In the future, e2fsck will be able to use +the image file to help recover very badly damaged filesystems. + +Fixed a number of LFS bugs in e2fsck; very, very large (> 2**42) files +no longer cause e2fsck to bomb out. Also treat files > 2GB as being +large file when deciding whether or not the filesystem has large files. + +Fixed lsattr and chattr so that they work correctly on large files. +(Fixes Debian bug #72690.) + +Removed limitation in get_device_size() which imposed a one terrabyte +filesystem limitation. (Most 2.2 kernels still have a signed int +problem which cause 1 TB block device limitation. Fortunately, the +kernel patches to fix this are much easier than fixing the 2TB +limitation in the kernel. :-) + +A max_mount_count of zero is now treated as if no mount count were +set. (Previously, no mount count was indicated by using -1, and a +mount count of zero caused e2fsck to always be run.) + +Mke2fs supports two new filesystem types largefile and largefile4. + +Mke2fs now adds some randomness in s_max_mount_count so that multiple +filesystems won't be all checked at the same time under normal +operations. + +Fixed bug in the progress bar printing code which could cause e2fsck +to core dump on an illegal filesystem. + +Fixed bug in fsck which could allow more than one instance of e2fsck +to be printing a progress bar. (Debian bug #65267) + +Fsck using a UUID or a LABEL specifier will work even if devfs is +compiled into the kernel and not mounted. If the pathnames in +/proc/partitions are incorrect, fsck will search /dev for the correct +device (using the new ext2fs_find_block_device library function). +Fsck now also checks the RAID devices first so that they are properly +found when they are in use. Support has also been added to support +additional IDE disks and the DAC 960 device names. (Debian bug #94159) + +Fixed a bug in fsck which caused it not deal properly with 16 +byte long filesystem labels. + +Fsck's -t option has been made a lot more flexible. The semantics for +what happens if a comma-separated list to fsck has been regularized, +and it is now possible to filter what filesystems will get checked +based what is in the filesystem's fstab entry's option field. (Debian +bug #89483.) + +The dumpe2fs program can now print out the group description +information in hex, and also prints the location of the superblock and +block group descriptor for those block groups that have them. + +Mke2fs now clears the ext2 superblock before it starts creating a +filesystem, so that the superblock magic number is only written if the +filesystem creation process successfully completes. + +The debugfs program's stat command now pretty-prints the blocks used +by an inode so that it's more compact and informative. + +The debugfs stats command now uses the same libe2p code (which is used +by dumpe2fs) to print the superblock header information. This is more +complete, and it avoids a bit of code duplication. + +Added a new debugfs command, set_super_value (ssv) which allows the +user to set arbitrary superblock fields. + +Debugfs was extended to support inode numbers in hex (by prefixing +them with 0x), and so that modify_inode can set the inode generation +number. Also, there is now a new function command called logdump +which will dump an ext3 journal. + +Fixed a bug in debugfs so that quitting out of the pager doesn't kill +debugfs. + +Debugfs's dump command now stops immediately upon reporting a disk +read error. (Fixed a bug in ext2fs_file_read library routine which +caused debugfs not to stop.) (Debian bug #79163) + +On systems with /proc/mounts (mainly Linux systems), /proc/mounts is +checked before /etc/mtab is used, since /proc/mounts is more likely to +be accurate. + +Added portability fixes for Solaris and Linux/ia64. + +Various manual pages were clarified and cleaned up. (Fixed debian +bugs #63442, #67446, and #87216) + + +Programmer's notes: +------------------- + +The e2fsck message printer now supports %Iu and %Ig, which will print +out the inode's user and group owners, respectively. + +E2fsprogs now includes its own version of include/linux/ext2_fs.h, so +that no longer dependent on the system having the correct version of +the kernel header files. + +Added a new function to libext2, ext2fs_find_block_device(), which +searches the system (i.e., /dev, /devfs, /devices) for a pathname to a +device given its device number. + +Added a new function to libext2, ext2fs_sync_device, which centralizes +all of the places which might try to use the BLKFLSBUF or FDFLUSH +ioctls (and usually failing to define them since the system header +files don't usually do this for us, and we're trying to avoid usage of +kernel include files now). + +Added new utility programs in tests/progs: random_exercise and +hold_inode. They aren't built by default; they're useful for +exercising ext3 filesystem code. + +Added a new ext2 filesystem flag, EXT2_FLAG_SUPER_ONLY, which causes +the filesystem close functions to only update the superblock, and to +not touch the block group descriptors. Needed by tune2fs when +modifying a mounted filesystem. + +Got rid of struct ext2fs_sb and replaced it with the standard struct +ext2_super_block from include/linux/ext2_fs.h. Note: this may break +source (but not binary) compatibility of some users of the ext2 +library. Those applications should just simply do a global search and +replace of struct ext2fs_sb with struct ext2_super_block, and include +the new header file which defines it. + +The ino_t type has been renamed ext2_ino_t to protect applications +that attempt to compile -D_FILE_OFFSET_BITS=64, since this +inexplicably changes ino_t(!?). So we use ext2_ino_t to avoid an +unexpected ABI change. + +The Makefiles have been reworked so that "make check" can be run from +the top-level Makefile. + +Fix general gcc -Wall complaints and removed dead code. + +Remove use of NOARGS, because we assume everyone does ANSI C these +days. + +Added build-rpm script from sct. + +New functions ext2fs_image_{inode,super,bitmap}_{read,write} added +to support e2image. + +New function ext2fs_flush_icache which must be called if the +application program modifies the inode table blocks without going +through ext2fs_write_inode() interface. + +New ext2fs_check_mount_point() function, which will return the mount +point of a device if mounted. + +The io_channel abstraction now has an optional interface, +io_channel_write_range, which allows specific byte ranges to be +written. + +The unix_io IO channel now supports write-through caching, so that +journal creation is more efficient. + +Added x86 assembly language routines to support byte swapping, to +reduce executable size. + +Fixed bug in the utility program subst so that it's possible to +replace a substitution variable with a zero-length string. + +Fixed numbering e2fsck pass1 problem numbers; an extra zero had +slipped into some of the problem number. + +E2fsprogs 1.19 (July 13, 2000) +============================== + +Release the resize2fs program since the timeout before it could +be released under the GPL has finally expired. + +Add experimental support needed for the ext2 compression patches. +This requires compiling e2fsprogs with the --enable-compression flag +to the configure script. + +Added ext3 journalling support. E2fsck will run the journal (if +necessary) by temporarily mounting the filesystem. /sbin/fsck.ext3 is +installed as a symlink to e2fsck. Fsck has been taught about ext3, +and treats it the same as ext2 in terms of the progress bar logic. +Dumpe2fs will display the superblock journaling information if the +filesystem has a journal. The ext2 library will now permit opening an +ext3 filesystem with the recovery flag set. This is necessary for +on-line dump's to work correctly, but there may be issues with this +working well since ext3 is much less agressive about syncing blocks to +the filesystem, since they're safe on the journal. + +Tune2fs and e2fsck have been changed to allow the mount_count check to +be disabled by setting max_mount_count to -1. (This was already +supported by the kernel.) + +Create a symbolic link for fsck.ext3, since the e2fsprogs utilities +are used for ext3 as well. + +Added internationalization support for e2fsprogs; must be enabled +by passing --enable-nls to configure. + +Always use the provided ext2fs header files to insulate ourselves from +kernel version changes. Which include files are used by e2fsprogs +have also been cleaned up to improve portability. + +Limit the number of times that e2fsck updates the progress bar so that +people who are booting using a 9600 baud console don't get swampped by +too many updates. + +Improved the loop detection algorithm in e2sck's pass #3 so that it is +much, much faster for large filesystems with a large number of +directories. + +The memory footprint for e2fsck is now slightly smaller than before. + +E2fsck now checks if special devices have a non-zero size, and offers +to clear the size field if it finds such an inode. + +E2fsck now checks if special devices have the append-only flag set, +and offers to clear the inode. + +E2fsck now properly handles some "should never fail" cases during a +bitmap copy in pass5. + +E2fsck now properly prints control characters in filenames as ^A .. ^Z. + +E2fsck now calculates the correct location of the backup superblock in +the case of filesystem blocksizes > 1k. + +Fixed a bug in e2fsck's calculation of the number of inodes_per_block +which normally didn't cause problems under most filesystem parameters, +but could cause a valid superblock to be rejected in extreme cases. +Other checks for validating superblock values were made more +stringent. + +Added non-destructive write testing to the badblocks program, courtesy +of David Beattie. The badblocks also now has an option to input the +current set of bad blocks, so that known bad blocks are skipped to +speed up the badblocks test. There is also a persistent rescan +feature which causes badblocks to run until it has completed some +number of passes without discovering any new bad blocks. + +Badblocks now checks to see if the device is mounted and refuses to do +the tests involving writing to the device if it is mounted. Also, +badblocks now allows the number of blocks to be checked to be +defaulted to the size of the partition. + +Fixed a bug in fsck which didn't allow non-root users to be able to +check filesystems if there were any LABEL= or UUID= entries in +/etc/fstab. + +The Hurd doesn't support the filetype filesystem feature. The mke2fs +program now makes sure that for the Hurd, the filestype feature is +turned off. E2fsck will check to see if the filetype feature is +turned on for Hurd filesystems, and offer to turn off the feature. + +Mke2fs now has a safety check to make sure the number of blocks do not +exceed 32 bits even on a 64 bit platform. + +Really fixed a bug in fsck to allow "fsck -As" to run interactive +fsck's. (For those people who like to do interactive fsck's in the +/etc/rc scripts!?!) + +Debugfs has a few new features: the rdump command, which will do a +recursive dump of a directory and all of its contents, and the lcd +command which does a local chdir (much like the ftp command of the +same name). In addition, the debugfs program and the open_filesystem +command now takes three new options: -b and -s, which allows the +blocksize and superblock location to be specified, and the -c option +which is used in catastrophic situations where the block group +descriptors are corrupt. If the -c option is specified, debugfs will +skip trying to read in the block and inode bitmaps. + +Debufs's lsdel command was fixed to handle bad blocks in the inode +table. + +A Y2K bug in debugfs's "ls -l" handling was fixed by switching to use +4 digit years. + +General improvements in error messages + + - Mke2fs prints a sane error message if the partition size is zero + (usually because the partition table wasn't reread by the + kernel due to the partition being busy), instead of "invalid + argument passed to ext2 library while initializing superblock". + + - Fsck now prints more self-explanatory message if an invalid UUID= + or LABEL= specification is passed to it. + +UUID library changed to use the LGPL. + +Fixed a bug in the UUID library where very rapid calls to the +time-based UUID generator could cause duplicate UUID's to be returned. +This was not a problem for e2fsprogs, but it could be a problem for +other users of the library. + +Make the UUID library more robust in the face of missing or an +improper /dev/urandom or /dev/random files. + +Added some random portability fixes for Solaris. + +Some minor man page updates. + +Fixed a memory leak in the ss library. + + +Programmer's notes: +------------------- + +We now try to use lseek64 and open64 from the LFS if possible. + +The 3rd parameter in e2p's print_flags is now a flags word, instead of +a boolean option. + +The mark and unmark bitmap functions now return the previous state of +the bit that was being changed, which is useful for some speed +optimizations. + +The following functions have been added to enhance the badblocks list +handling in libext2fs: ext2fs_write_bb_FILE, ext2fs_read_bb_FILE2, and +ext2fs_badblocks_equal. + +The ext2 header files now have the latest journalling fields to the +superblock. + +The ext2fs_mkdir function in libext2fs now properly backs out of error +conditions robustly. + +Cleaned up makefiles: + - to cleanly compile with the -j flag. + - so distclean removes all generated files. + - so in case of an error while installing header files, the make aborts. + +Fix test_script so that it works correctly when compiling in the +source directory. + +The random UUID generation routine has been made slightly better in +the case where /dev/random doesn't exist. (Use of randomly-based UUID +is still not recommended if /dev/random doesn't exist, however; it's +better to use the time/ethernet MAC address UUID in this case.) + +Clean up the build process so it's more friendly in case of missing +directories. + +The ext2fs header file can now be #include'd into C++ programs. + +The e2p.h header file is now installed. + +Added workaround to a gawk 3.0.5 bug in lib/ss/mk_cmds. + + + +E2fsprogs 1.18 (November 10, 1999) +================================== + +Fix a core dumping bug in e2fsck if an imagic inode is present or +(more rarely) if the filesystem is badly corrupted enough that e2fsck +has to restart pass 1 processing. E2fsck now closes the filesystem +before freeing a large number of its data structures, so in the case +of future memory faults, at least the fixed filesystem will be fully +written out. + +If a filesystem doesn't support imagic inodes, and e2fsck discovers an +imagic inode, it will offer to clear the imagic flag. + +E2fsck will now offer to clear the immutable flag on special files +(device/socket/fifos) when running it in non-preen mode. + +E2fsck will now set the filetype when creating /lost+found, and when +connected orphaned inodes to /lost+found. + +Debugfs's ncheck and icheck commands now handles the case where there +are bad blocks in the inode table without bombing out. + +The badblocks list processing code has been made more efficiently for +appending a large number of (ordered) badblocks to the badblocks list. + +Some minor man page updates. + +Fsck now allows interactive e2fsck's when using fsck -As (not a common +mode, but some people like to do this in boot scripts for silly reasons). + +Programmer's notes: +------------------- + +The internal e2fsck problem code for PR_2_SPLIT_DOT was fixed to meet +with the problem code convention. + +The badblocks list regression test program has been updated to work +with previously made API name changes. + +The ext2fs_free() command now uses the new badblocks API to avoid +using the compatibility layer. + +Added new regression test cases; the run_e2fsck test script now +supports the ability for a test case to run a prepratory command +before running e2fsck. + +E2fsprogs 1.17 (October 26, 1999) +================================= + +Fixed nasty typo in fsck which caused parallelized fsck's to go into an +infinite loop. + +Fixed a bug in fsck where it used strncmp to compare a binary UUID, +thus potentially causing problems if a binary UUID contained a NULL +character. + +E2fsck now uses stricter checks for directory entries in pass 2: +zero-length filenames are not allowed; neither are 8 byte long +directory entries. + +The debugfs "dirty" command now clears the filesystem valid bit. +(Previously this just set the dirty-as-in-needs-writing-out-to-disk +bit in the in-core superblock image. The new functionality is more +what the user expects, and is more useful.) + +Added a debugging hook to test parallel fsck; if the environment +variable FSCK_FORCE_ALL_PARALLEL, then filesystems on the same drive +will be checked in parallel when they normally would not be. + +Programmer's notes: +------------------- + +Fixed some #ifdef's for compilation under the Hurd OS. + +Fixed minor W2K compatibility problems. + +Fixed some miscellaneous GCC warnings. + + +E2fsprogs 1.16 (October 22, 1999) +================================= + +Fixed a race condition bug in fsck; when printing a progress bar, if +checking multiple filesystems in parallel, it was possible for fsck to +send e2fsck a SIGUSR1 signal before e2fsck had installed its signal +handler, which would cause it to terminate with a signal 10. + +E2fsck now properly handles filesystems that have the +INCOMPAT_FILETYPE feature turned on. It can be used to convert a +filesystem into using or not using FILETYPE feature. + +E2fsck now properly handles filesystems that have the IMAGIC feature +turned on (this is used on Linux AFS servers). + +The mke2fs program now creates filesystems that have the filetype and +sparse_superblock features enabled by default, unless it is run on a +pre-2.2 kernel. These features are not supported by a pre-2.2 kernel, +so there is now a new flag -O which allows the user to specify with +which features she would like to create the filesystem; "mke2fs -O +none" will create a filesystsem compatible with 2.0 kernels. + +The tune2fs program now has a -O option which allows the user to set +and reset "safe" filesystem features. Currently, the only ones which +allows to be modified are the filetype and sparse_superblock features. +Note setting or clearing either feature will require running e2fsck on +the filesystem afterwards. (n.b. Clearing the sparse_superblock feature +requires that there is enough free space on the filesystem for the +extra superblocks which will be created by e2fsck.) + +Debugfs can now set and print filesystem features in the superblock +using the "features" command. Dumpe2fs will print out the complete +set of features when listing the superblock. + +Dumpe2fs has new options -f (force) and -h (header-only). + +Fixed a bug in e2fsck which could cause the PROGRAMMING ERROR/bonehead +message to come up. This could happen when decrementing or +incrementing a link count could result in an overflow. + +Fixed a bug in e2fsck where the block count on the lost+found +directory would not be properly incremented when the directory was +expanded to the point where an indirect block needed to be allocated. + +E2fsck now makes some additional sanity checks on the superblock to +avoid crashing or giving a memory allocation error if some of the +values in the superblock are unresonable (but the superblock otherwise +looks valid). + +Fixed a bug in e2fsck where a very badly corrupted filesystem might +require two passes to completely fix the filesystem. This happened if +an inode claimed blocks that was part of the filesystem metadata +(typically, when garbage was written into an inode table or indirect +block, since this kind of filesystem corruption normally doesn't +happen otherwise). + +On the Alpha, glibc declares st_flags although it isn't actually used; +the configure script was improved to detect this case so that +e2fsprogs can avoid using the non-functional stat field. + +The manual pages were updated to use a more consistent formatting +style consistent with standard Unix man pages. Mke2fs's man page +added documentation for a few previously undocumented options. + +Fixed minor display bugs in tune2fs and mke2fs. + +Programmer's notes: +------------------- + +Improved portability of e2fsprogs to non-Unix systems (in particular, NT). + +Added features to parse and print feature strings into the e2p library. +(e2p_feature2string, e2p_string2feature, e2p_edit_feature). + +ext2fs_mkdir() and ext2fs_new_dir_block() now creates directories +whose directory entries contain proper filetype information if the +filesystem supports it. + +ext2fs_link() now uses the low 3 bits of its flags parameter to pass +the directory entry filetype information. This is used to set the +directory entry filetype information if the filesystem supports it. + +Fixed a bug in ext2fs_expand_dir() where the block count in a +directory's inode would not be properly incremented when the directory +was expanded to the point where an indirect block needed to be +allocated. + + +E2fsprogs 1.15 (July 18, 1999) +============================== + +Add configuration checks so that e2fsprogs will compile cleanly on +Linux 2.3 kernels that have renamed i_version to i_generation. + +E2fsck now prints a progress/completion bar (and not just a simple +spinner) if the -C0 option is requested or if it receives a SIGUSR1 +signal. Fsck will automatically manage the (potentially muliple) +e2fsck processes to print completion bars if it is given a -C option, +with the right thing happening if multiple filesystems are being +checked in parallel. + +Mke2fs now has better automatic hueristics to determine the filesystem +parameters to be used for a particular filesystem. Added a new option +-T which allows the user to specify how the filesystem is to be used, +which helps mke2fs do a better job selecting the filesystem parameters. + +Mke2fs now creates revision 1 filesystems by default, and with the +sparse superblock feature enabled. The sparse superblock feature is +not understood by Linux 2.0 kernels, so they will only allow read-only +mounts of filesystems with this sparse superblocks. + +Fix bug where if /dev/null couldn't be opened (should never happen), +e2fsck would hang in a tight loop. + +Make e2fsck handle the case where /lost+found isn't a directory. + +E2fsck now uses mallinfo if it exists to get accurate statistics about +its memory usage. + +Fix bug in e2fsck where it wouldn't check to see if a disconnected +inode had any problems before connecting it to /lost+found. + +Add check to e2fsck so it makes sure that total number of inodes in +the filesystem is a sane number. + +Fix fencepost error when clearing an the end of the block bitmap which +caused the last block in the bitmap not to get cleared. + +Cleaned up a number of messages in e2fsck: + * The message "Group's #'s copy of the group descriptor..." + was fixed so that the correct number would be displayed. + * Added missing space in the "disk write-protected" error messsage + * Cleaned up the error message printed when a non-interactive + e2fsck needs to abort a check because the filesystem + appears to be mounted. + +Added a new command-line utility, uuidgen, which will create and print +a UUID. + +Make debugfs's icheck command more robust by checking to make sure an +inode has valid blocks before interarting over the inode's blocks. + +UUID generation now uses a random-based scheme whenever possible to +prevent potential privacy problems. + +Man pages for all of the UUID functions in the lirbary were added. + +Fixed bug in fsck so it won't coredump if a filesystem not in +/etc/fstab is given to it. + +Fsck now understands the UUID=xxxx and LABEL=yyyy forms in /etc/fstab +that most of the other mount utilities understands. + +Mke2fs will make a filesystem even if it appears mounted if the force +option is given. + +Dumpe2fs has new command-line options which allow a filesystem expert +to specify the superblock and blocksize when opening a filesystem. +This is mainly useful when examining the remains of a toasted +filesystem. + +The badblocks program has been updated to display correctly on disks +with large block numbers. + +The badblocks program no longer gives spurious errors when errors +occur on non-block boundaries, which is common if the blocksize is +larger than 1k. + +Mke2fs will sync the disk device every MKE2FS_SYNC block groups if the +MKE2FS_SYNC environment variable is set. This is to work around a VM +bug in the 2.0 kernel. I've heard a report that a RAID user was able +to trigger it even using a 2.2 kernel, but hopefully it will not be +needed for most Linux 2.2 users. + +Fixed miscellaneous documentation and man pages. + +Programmer's notes: +------------------- + +Cleaned up functions such as pass1_get_blocks, pass1_read_inode which +in e2fsck's pass1.c really should have been static. + +The return value of the uuid_compare() function was changed to make it +match with the convetions used by strcmp, memcmp, and Paul Leach's +UUID sample document. + +The "make depend" process has now been made more automated; it now +automatically word-wraps the dependencies, and only replaces source +Makefile.in if there has been a change in the dependencies. Also, a +top-level "make depend" now recurses through all the subdirectories +automatically. + +The Makefile in .../util has been changed so that subst is built using +the native C compiler during a cross-compilation, since the subst +program is only used during the build process. Also add an explicit +rule to build util/subst by cd'ing to the correct directory and +running Makefile. + +The man directories are defined in terms mandir, so that the configure +script can override the location of the manual pages. + +The config files have been updated to recognize new machine types for +both the i386 and alpha families. + +Fsck has been modified so that it will accurately create an +fsck_instance even when the noexecute flag is set. This allows for +accurate debugging of the fsck pass structure. Also, when the verbose +flag is given twice, fsck will print debugging information about when +fsck is waiting for jobs to finish. + + +E2fsprogs 1.14 (January 9, 1999) +================================ + +Fix the fstab parsing code so that it can handle blank lines and +comment characters. Also, missing pass numbers need to be treated as +zero. + +Fixed a bug in e2fsck where under some circumstances (when e2fsck +needs to restart processing after fixing an egregious inconsistency) +it would try to access already freed memory. + +E2fsck now prints non-printable characters in directory entries and +pathnames using '^' and 'M-' notation. + +Fixed chattr so that it will ignore symbolic links when doing +recursive descent traversals. For both chattr and lsattr, no longer +print the version string unless the -V option is given. + +Allow the system administrator to directly specify the number of +inodes desired in the filesystem, for some special cases where this is +necessary. + +Fix portability problems so that e2fsprogs can be compiled under Linux +1.2 systems and Solaris systems. + +Update the config.guess file with a more recent version that will +identify newer Linux platforms. + +Programmer's notes +------------------ + +Ext2fs_read_inode and ext2fs_write_inode will now return an error if +an inode number of zero is passed to them. + +E2fsprogs 1.13 (December 15, 1998) +================================== + +Fixed a bug in debugfs where an error messages weren't getting printed +when the ext2 library routines to read inodes returned errors in the +stat, cmri and rm commands. + +Fixed a bug in mke2fs so that if a ridiculous inode ratio parameter is +provided, it won't create an inode table smaller than the minimum +number of inodes required for a proper ext2 filesystem. + +Fsck now parses the /etc/fstab file directly (instead of using +getmntent()), so that it can distinguish between a missing pass number +field and pass number field of zero. This caused problems for +diskless workstations where all of the filesystems in /etc/fstab have +an explicit pass number of zero, and fsck could not distinguish this +from a /etc/fstab file with missing pass numbers. + +E2fsck will create a /lost+found directory if there isn't one in the +filesystem, since it's safer to create the lost+found directory before +it's needed. + +Fixed e2fsck so that it would detect bogus immutable inodes which +happen to be sockets and FIFO files, and offer to clear them. + +If a filesystem has multiple reasons why it needs to be checked, and +one of the reasons is that it is uncleanly mounted, e2fsck will print +that as the reason why the filesystem is being checked. + +Cleaned up the output routines of mke2fs so that it doesn't overflow +an 80 column display when formating really big filesystems. + +Added a sanity check to e2fsck to make sure that file descriptors 0, +1, 2 are open before opening the hard disk. This avoids a problem +where a broken program might exec e2fsck with those file descriptors +closed, which would cause disastrous results if the kernel returns a +file descriptor for the block device which is also used by FILE * +stdout. + +Fixed up the e2fsck progress reporting functions so that the values +reliably reach 100% at the completion of all of the e2fsck passes. + +Fixed minor documentation bugs in man pages and usage messages. + +Programmer's notes: +------------------- + +Fixed a number of lint warnings in the ext2fs library and potential +portability problems from other OS's header files that might define +CPP macros for names like "max" and "min". + +ext2fs_badblocks_list_add() has been made more efficient when it needs +to grow the bad blocks list. + +Fixed a bug in e2fsck which caused it to dereference a freed pointer +just before exiting. + +Fixed the substition process for generating the mk_cmds and compile_et +scripts so that they will work outside of the build tree. + +Add sanity check to e2fsck so that if an internal routine +(ext2fs_get_dir_info) returns NULL, avoid dereferencing the pointer +and causing a core dump. This should never happen, but... + +E2fsprogs 1.12 (July 9, 1998) +================================== + +E2fsprogs now works with glibc (at least with the version shipped wtih +RedHat 5.0). The ext2fs_llseek() function should now work even with +i386 ELF shared libraries and if llseek() is not present. We also +explicitly do a configure test to see if (a) llseek is in libc, and +(b) if llseek is declared in the system header files. (See standard +complaints about libc developers don't understand the concept of +compatibility with previous versions of libc.) + +The ext2fs library now writes out the block group number in each of +the superblock copies. This makes it easier to automatically +determine the starting block group of the filesystem when the block +group information is trashed. + +Added support for the EXT2_FEATURE_INCOMPAT_FILETYPE feature, +which means that e2fsprogs will ignore the high 8 bits of the +directory entry's name_len field, so that it can be used for other +purposes. + +Added support for the EXT2_FEATURE_RO_COMPAT_LARGE_FILE feature. +E2fsprogs will now support filesystems with 64-bit sized files. + +Added support for the EXT2_FEATURE_COMPAT_DIR_PREALLOC feature. + +Added new program "e2label", contributed by Andries Brouwer. E2label +provides an easy-to-use interface to modify the filesystem label. + +Fixed bug so that lsattr -v works instead of producing a core dump. + +Fixed a minor bug in mke2fs so that all groups with bad superblock +backup blocks are printed (not just the first one). + +Mke2fs will check the size of the device, and if the user specifies a +filesystem size larger than the apparent size of the device it will +print a warning message and ask if the user wants to proceed. + +E2fsck has a new option -C, which sends completion information to the +specified file descriptor. For the most part, this is intended for +programs to use, although -C 0 will print a spinning character to the +stdout device, which may be useful for users who want to see something +happening while e2fsck goes about its business. + +Fixed a bug in e2fsck which could cause a core dump when it needs to +expand the /lost+found directory, and sometimes the bitmaps haven't +been merged in. Also fixed a related bug where ext2fs_write_dir_block +was used to write out a non-directory block. (Which would be bad on a +non-Intel platform with byte swapping going on.) + +Fixed bug in e2fsck where it would print a "programming error" message +instead of correctly identifying where a bad block was in used when +the bad block was in a non-primary superblock or block group +descriptor. Also fixed a related bug when sparse superblocks are in +use and there is a bad block where a superblock or block group +descriptor would have been in a group that doesn't include a +superblock. + +Fixed a bug in e2fsck (really in libext2fs's dblist function) where if +the block group descriptor table is corrupt, it was possible to try to +allocate a huge array, fail, and then abort e2fsck. +ext2fs_get_num_dirs() now sanity checks the block group descriptor, +and subsitutes reasonable values if the descriptors are obviously bogus. + +If e2fsck finds a device file which has the immutable flag set and the +i_blocks beyond the normal device number are non-zero, e2fsck will +offer to remove it, since it's probably caused by garbage in the inode +table. + +When opening a filesystem, e2fsck specially checks for the EROFS error +code, and prints a specific error message to the user which is more +user friendly. + +If the filesystem revision is too high, change the e2fsck to print +that this is either because e2fsck is out of date, or because the +superblock is corrupt. + +E2fsck now checks for directories that have duplicate '.' and '..' +entries, and fixes this corruption. + +E2fsck no longer forces a sync of the filesystem (with attendant sleep +calls) at all times. The ext2fs_flush() function now performs a sync +only if it needed to write data blocks to disk. + +Fixed a minor bug in e2fsck's pass1b's file cloning function, where +certain errors would not be properly reported. + +Updated and expanded a few points in the man pages which users +complained wheren't explicit enough. + +Added special case byte-swapping code if compiling on the PowerPC, to +accomodate the strange big-endian variant of the ext2 filesystem that +was previously used on the PowerPC port. + + +Programmer's notes: +------------------- + +Removed C++ keywords from the ext2fs libraries so that it could be +compiled with C++. + +E2fsck's internal organization has now been massively reorganized so +that pass*.c don't have any printf statements. Instead, all problems +are reported through the fix_problem() abstraction interface. E2fsck +has also been revamped so that it can be called as a library from a +application. + +Added new fileio primitives in libext2fs for reading and writing +files on an unmounted ext2 filesystem. This interface is now used by +debugfs. + +Added a new libext2fs function for mapping logical block numbers of +a file to a physical block number. + +Added a new libext2fs function, ext2fs_alloc_block(), which allocates +a block, zeros it, and updates the filesystem accounting records +appropriately. + +Added a new libext2fs function, ext2fs_set_bitmap_padding(), which +sets the padding of the bitmap to be all one's. Used by e2fsck pass 5. + +The libext2fs functions now use a set of memory allocation wrapper +functions: ext2fs_get_mem, ext2fs_free_mem, and ext2fs_resize_mem, +instead of malloc, free, and resize. This makes it easier for us to +be ported to strange environments where malloc, et. al. aren't +necessarily available. + +Change the libext2fs fucntion to return ext2-specific error codes +(EXT2_DIR_EXISTS and EXT2_DB_NOT_FOUND, for example) instead of using +and depending on the existence of system error codes (such as EEXIST +and ENOENT). + +Renamed io.h to ext2_io.h to avoid collision with other OS's header +files. + +Add protection against ext2_io.h and ext2fs.h being included multiple +times. + +The types used for memory lengths, etc. have been made more portable. +In generla, the code has been made 16-bit safe. Added Mark +Habersack's contributed DOS disk i/o routines. + +Miscellaneous portability fixes, including not depending on char's +being signed. + +The io_channel structure has a new element, app_data, which is +initialized by the ext2fs routines to contain a copy of the filesystem +handle. + +ext2fs_check_directory()'s callback function may now return the error +EXT2_ET_CALLBACK_NOTHANDLED if it wishes ext2fs_check_directory() to +really do the checking, despite the presence of the callback function. + + +E2fsprosg 1.11 (June 17, 1997) +============================== + +Fixed e2fsck to detect (previously ignored) conflicts between the +superblock or block group descriptors and block bitmaps, inode +bitmaps, and inode tables. + +Fixed bug in e2fsck so that when the message printed out when a block +or inode bitmap conflicts with other data, it has the correct group +number. + +Fixed bug in e2fsck and mke2fs where the blocksize wasn't being passed +to badblocks. This meant that not all of the filesystem was being +tested for bad blocks! + +Fixed an array boundary overrun case which cropped up in +ext2fs_badblocks_list_test when a user tried running "mke2fs -c +-b 4096". + +Adjusted the number of columns printed by mke2fs when displaying the +superblock backups to avoid running over 80 columns when making a +really big filesystem. + +Fixed up the man pages for e2fsck, debugfs, badblocks, chattr, +dumpe2fs, fsck, mke2fs, and tune2fs (typos and other minor grammar +fixes), thanks to some suggestions from Bill Hawes (whawes@star.net). + +Programmer's notes: +------------------- + +Fixed install rule in lib/ss so that ss_err.h is actually getting +installed. + +Fixed bug in ext2fs_copy_bitmap; the destination bitmap wasn't getting +bassed back to the caller. + +Fixed bug in ext2fs_inode_scan_goto_blockgroup; it had not been +setting the current inode number (which meant this function wasn't +working at all). + +Fixed bug in ext2fs_resize_generic_bitmap; it had not be zeroing all +blocks in the bitmap when increasing the size of the bitmap. + +Changed the initial number of blocks allocated by ext2fs_init_dblist() +to be more realistic. + +Added a new function ext2fs_allocate_group_table, which sets up the +group descriptor information (and allocates inode and block bitmaps, +and inode tables for a particular group). The function was created by +factoring out code form ext2fs_allocate_tables(). + +Added a new function ext2fs_move_blocks which takes a bitmap of the +blocks to be moved, and moves them to another location on the +boardboard. + +Make the unix_io channel's io_channel_flush implementation calls sync() +to to flush the kernel buffers to disk. + +Added a new function ext2fs_dblist_count returns the number of +directory blocks in dblist. + + +E2fsprogs 1.10 (April 24, 1997) +=============================== + +Mke2fs once again defaults to creating revision #0 filesystems, since +people were complaining about breaking compatibility with 1.2 kernels. +Warning messages were added to the mke2fs and tune2fs man pages that +the sparse superblock option isn't supported by most kernels yet (1.2 +and 2.0 both don't support parse superblocks.) + +Added new flag to mke2fs, -R , which allows the user to +tell mke2fs about the RAID configuration of the filesystem. Currently +the only supported raid option is "stride" which specifies the width +of the RAID stripe. + +Fixed bug in e2fsck where pass1b would bomb out if there were any +blocks marked bad in the inode table. + +Fixed rare bug in mke2fs where if the user had a very unlucky number +of blocks in a filesystem (probability less than .002) the resulting +filesystem would be corrupt in the last block group. + +Fixed bug where if e2fsck tried to allocate a block to fix a +filesystem corruption problem and the filesystem had no free blocks, +ext2fs_new_block() would loop forever. + +The configure script now checks explicitly to see if "-static" works, +since that can't be assumed to be true --- RedHat doesn't install +libc-static by default. + +Fixed bug in libext2's block iterator functions where under some +cirmcustances, file with holes would cause the bcount parameter to the +callback function to be incorrect. This bug didn't affect any of +e2fsprogs programs, but it was discovered by Paul Mackerras, the +author of the PPC boot loader. + +Removed use of static variables to store the inode cache in libext2fs. +This caused problems if more than one filesystem was accessed via +libext2fs (static variables in libraries are generally a bad idea). +Again, this didn't affect e2fsprogs programs, but it was discovered by +Paul Mackerras. + +Fixed minor bugs and version code drift to assure that e2fsprogs 1.10 +will compile cleanly with 1.2.13 kernels (even with a.out shared +libraries!) + +Programmer's notes: +------------------- + +Added new functions to duplicate an ext2 filesystem handle, and its +associated substructure. New functions: ext2fs_dup_handle(), +ext2fs_copy_dblist(), ext2fs_badblocks_copy(), ext2fs_copy_bitmap(). +Other structures, such as the io_channel and the inode_cache, now have +a ref count so that they only get freed when they are no longer used +by any filesystem handle. (These functions were added as part of the +development effort for an ext2 resizer). + +E2fsprogs 1.09 (April 14, 1997) +=============================== + +Fixed bug in mke2fs (really in lib/ext2fs/initialize.c) which was +accidentally introduced in the 1.08 release. The overhead calculation +was accidentally removed, which caused ext2fs_initialize() to not +notice when the filesystem size needed to be adjusted down because +there wasn't enough space in the last block group. + +Fixed bug in version parsing library routine; it was always parsing +the library version string, instead of using the passed-in string. + +Clarified chattr man page. + +E2fsprogs 1.08 (April 10, 1997) +=============================== + +E2fsck 1.07 was very slow when checking very large filesystems with a +lot of files that had hard links (i.e., news spools). This was fixed +by seriously revamping the icount abstraction. Added a formal test +suite for the icount abstraction. + +Debugfs now has a "-l" option to the "ls" command, which lists the +inode number, permissions, owner, group, size, and name of the files +in the directory. + +Fix a bug in e2fsck where when a directory had its blocks moved to +another location during the pass 1b processing, the directory block +list wasn't updated, so pass 2 wouldn't check (and correct) the +correct directory block. + +E2fsck will now treat inodes which contain blocks which are claimed by +the filesystem metadata by treating them as multiply claimed blocks. +This way, the data in those blocks can be copied to a new block during +the pass 1b--1d processing. + +E2fsck will attempt to determine the correct superblock number and +display it in the diagnostic and warning messages if possible. + +Add support for a new (incompatible) feature, "sparse_super". This +feature reduces the number of blocks which contain copies of backup +superblocks and block group descriptors. (It is only an incompatible +feature because of a bug in ext2_free_blocks.) mke2fs and tune2fs now +support a new -s option; e2fsck will recognize filesystems built with +this feature turned on. + +E2fsck now checks the library to make sure is the correct version, +using new library functions. (This helps to diagnose incorrectly +installed e2fsprogs distributions.) + +Dumpe2fs now prints more information; its now prints the the +filesystem revision number, the filesystem sparse_super feature (if +present), the block ranges for each block group, and the offset from +the beginning of the block group. + +Mke2fs now distributes the inode and block bitmap blok so that the +won't be concentrated in one or two disks in RAID/striping setups. +Also, if the user chooses a 2k or 4k block group, mke2fs will try to +choose the largest blocks per group that be chosen. (For 2k blocks, +you can have up to 16384 blocks/group; for 4k blocks, you can have up +to 32768 blocks/group.) Previously mke2fs would not allow +specification of more than 8192 blocks per group, even if you were +using a 2k or 4k block group. + +Programmer's notes: +------------------- + +Added a new function ext2fs_create_icount2() which takes a "hint" +argument. This hint argument presets the icount array with the list +of inodes which actually need to be in the icount array. This really +helps to speed up e2fsck. + +Added a new function ext2fs_icount_validate() which checks the rep +invariant for the icount structure. This is used mostly for testing. + +The error mesasage given when a bad inode number is passed to +test_generic_bitmap to reflect EXT2FS_TEST_ERROR (instead of +EXT2FS_UNMARK_ERROR). + +Added a new function ext2fs_set_dir_block which sets the block of a +dblist entry, given the directory inode and blockcnt. + +Added a new function ext2fs_get_library_version() which returns the +current library version, and ext2fs_parse_version_string() which +returns a version number based on a e2fsprogs version string. + +The icount functions will return EINVAL if the passed in inode number +is out of bounds. + +E2fsprogs 1.07 (March 9, 1997) +============================== + +E2fsck is now uses much less memory when checking really large +filesystems (or rather, filesystems with a large number of inodes). +Previously a filesystem with 1 million inodes required 4 megabytes of +memory to store inode count statistics; that storage requirement has +now been reduced to roughly half a megabyte. + +E2fsck can now properly deal with bad blocks appearing inside the +inode table. Instead of trying to relocate the inode table (which +often failed because there wasn't enough space), the inodes in the bad +block are marked as in use. + +E2fsck will automatically try to use the backup superblocks if the +primary superblocks have a bad magic number or have missing meta-data +blocks (or meta-data blocks which are out of range). + +E2fsck's pass 3 has been made more efficient; most noticeable on +filesystems with a very large number of directories. + +Completely revamped e2fsck's system of printing problem reports. It +is now table driven, to make them more easily customizeable and +extendable. Error messages which can be printed out during preen mode +are now one line long. + +Fixed e2fsck's filesystem swapping code so that it won't try to swap +fast symbolic links or deleted files. + +Fixed e2fsck core dumping when fixing a filesystem which has no +directories (not even a root directory). + +Added a check to e2fsck to make sure that the length of every +directory entry is a multiple of 4 (since the kernel complains if it +isn't). + +Added a check to e2fsck to make sure that a directory entry isn't a +link to the root directory, since that isn't allowed. + +Added a check to e2fsk to now make sure the '.' and '..' directory +entries are null terminated, since the 2.0 kernel requires it. + +Added check to write_bitmaps() to make sure the superblock doesn't get +trashed if the inode or block bitmap is marked as being block zero. + +Added checking of the new feature set fields in the superblock, to +avoid dealing with new filesystem features that this package wasn't +set up to handle. + +Fixed a fencepost error in ext2fs_new_block() which would occasionally +try to allocate a block beyond the end of a filesystem. + +When the UUID library picks a random IEEE 802 address (because it +can't find one from a network card), it sets the multicast bit, to +avoid conflicting with a legitimate IEEE 802 address. + +Mke2fs now sets the root directory's owner to be the real uid of the +user running mke2fs. If the real uid is non-zero, it also sets +the group ownership of the root directory to be the real group-id of +the user running mke2fs. + +Mke2fs now has more intelligent error checking when it is given a +non-existent device. + +When badblocks is given the -vv option, it now updates the block that +it is currently testing on every block. + +Fixed a bug in fsck where it wouldn't modify the PATH envirnoment +currently correctly if PATH wasn't already set. + +Shared libraries now built with dependencies. This allows the shared +library files to be used with dlopen(); it also makes the transition +to libc 6 easier, since ld.so can tell which libc a particular shared +library expects to use. + +Programmer's notes: +------------------- + +Added new abstraction (defined in dblist.c) for maintaining a list of +blocks which belongs to directories. This is used in e2fsck and other +programs which need to iterate over all directories. + +Added new functions which test to see if a contiguous range of blocks +(or inodes) are available. (ext2fs_*_bitmap_range). + +Added new function (ext2_inode_has_valid_blocks) which returns true if +an inode has valid blocks. (moved from e2fsck code). + +Added new function (ext2fs_allocate_tables) which allocates the +meta-data blocks as part of initializing a filesystem. (moved from +mke2fs code). + +Added a new I/O manager for testing purposes. It will either allow a +program to intercept I/O requests, or print debugging messages to +trace the activity of a program using the I/O manager. + +The badblocks_list functions now store the bad blocks in a sorted +order, and use a binary search to speed up badblocks_list_test. + +The inode scan function ext2fs_get_next_inode() may now return a soft +error returns: MISSING_INODE_TABLE and BAD_BLOCK_IN_INODE_TABLE in +those cases where part of an inode table is missing or there is a bad +block in the inode table. + +Added a new function (ext2fs_block_iterate2) which adds new arguments to +the callback function to return a pointer (block and offset) to the +reference of the block. + +Added new function (ext2fs_inode_scan_goto_blockgroup) which allows an +application to jump to a particular block group while doing an inode +scan. + +The badblocks list functions were renamed from badblocks_* to +ext2fs_badblocks_*. Backwards compatibility functions are available +for now, but programs should be modified to use the new interface. + +Some of the library functions were reorganized into separate files to +reduce the size of some programs which statically link against the +ext2 library. + +Put in some miscellaneous fixes for the Alpha platform. + + +E2fsprogs 1.06 (October 7, 1996) +================================ + +Fixed serious bug in e2fsck: if the block descriptors are bad, don't +smash the backup copies in ext2fs_close(). (The problem was that when +e2fsck -p discovered the problem, while it was closing the filesystem +and exiting, it was also blowing away the backup superblocks on the +disk, which was less than friendly.) We now make it the case that we +only write out the backup superblock and the back block descriptors if +the filesystem is completely free from problems. + +Fixed a bug in block_interate in the lib/ext2fs library which caused +e2fsck to fail on GNU Hurd-created filesystems. + +Add support for Linux/FT's bootloader, which actually uses +EXT2_BOOT_LOADER, and sets its mode bits which caused e2fsck to want +to clear the inode. + +Add support for the "A" (no atime update) attribute. (Note: this +attribute is not yet in production kernels.) + +The test suite is not automatically run when doing a "make all" from +the top level directory. Users should manually run "make check" if +they wish to run the test suite. + +Upon a preenhalt(), make the printed message more explicit that +running e2fsck "MANAULLY" means without the -p or -a options. + +In e2fsck, if a disconnected inode is zero-length, offer to clear it +instead of offering to connect it to lost+found. + +In e2fsck, if a filesystem was just unmounted uncleanly, and needs +e2fsck to be run over it, change e2fsck to explicitly display this +fact. + +For dumpe2fs and e2fsck, cause the -V option to print out which +version of the ext2fs library is actually getting used. (This will +help detect mismatches of using a 1.06 utility with a 1.05 library, +etc.) + +Programmers' notes: +------------------- + +EXT2_SWAP_BYTES was changed to EXT2_FLAG_SWAP_BYTES, which better fits +the naming convention. + +In ext2fs_initialize(), make sure the description for the inode bitmap +is correctly initialize. + +Fixed minor type typo in ext2fs_allocate_generic_bitmap(); + +E2fsprogs 1.05 (September 7, 1996) +================================== + +Add support for new fields in the ext2 superblock --- volume name, +volume UUID, and last mounted field. Dumpe2fs displays these fields, +tune2fs and mke2fs allows you to set them. E2fsck will automatically +generate a UUID for those volumes that don't have them. + +Put in support for e2fsck to recognize HURD specific ext2 features --- +most notably, the translator block. The e2fsprogs tools will now use +the creator_os field in the superblock to correctly handle different +OS-specific variants of the ext2 filesystem. + +E2fsck now fixes inodes which have a the deletion time set, but which +have a non-zero i_link_count field by offering to clear the deletion +time. Previously e2fsck assumed that the inode was deleted (per 0.3c +ext2 kernel behavior) and offered to unlink the file. + +If e2fsck sets the clean bit, but nothing else, set the exit code +FSCK_NONDESTRUCT. After all, e2fsck did fix a filesystem error --- it +set the filesystem valid bit when it was previously cleared. :-) This +was needed to make the HURD fsck driver happy. + +If the user refuses to attach an unattached inode, e2fsck will no +longer set the inode's link count. Otherwise, the inode would end up +getting marked as unused, which might cause loss of data later. + +Make the message issued by e2fsck when the superblock is corrupt less +confusing for users. It now mentions that another reason for the +"corrupt superblock" message might be that the partition might not be +an ext2 filesystem at all (it might swap, msdos filesystem, ufs, etc.) + +Make the libext2 library more robuest so that e2fsck won't coredump on +an illegal superblock where the blocksize is zero. (f_crashdisk is +the test case). + +By default, create filesystems where the default checkinterval is 6 +months (180 days). Linux servers can be robust enough that 20 reboots +can be a long, long time. + +Added configure flag --enable-old-bitops, which forces the bitops to +use the old (native) bitmask operations. By default on the sparc +platform, the standard ext2 bit ordering is now used. + +Added a new feature to e2fsck to byte-swap filesystems; this can be +used to convert old m68k filesystems to use the standard byte-order +storage for the superblock, inodes, and directory blocks. This +function is invoked by using the '-s' option to e2fsck. + +Debugfs's "dump" command has been enhanced so that it writes out the +exact size of the file so that the nulls at the end of the file are +eliminated. The command also accept a new "-p" option which will +attempt preserve to preserve the ownernship, permissions, and +file modification/access times. + +Debugfs has two new options, -f and -R. The -R option allows the user +to execute a single debugfs command from the command line. The -f +option allows the user to specify a "command file" containing debugfs +commands which will get executed. + +Dumpe2fs now pretty prints the check interval, instead of just +printing the check interval as a number of seconds. + +Fix bugs in debugfs: the params command when no filesystem is opened +no longer causes a core dump. It is now possible to unlink a file +when a pathame containing a '/' is specified. + +Tune2fs has a new -C option which sets the number of times the +filesystem has been mounted. + +Fix the chattr '-v' option so that it actually works. Chattr was +being buggy about the -v option parsing. + +Programmers' notes: +------------------- + +The directory lib/uuid contains a set of library routines to generate +DCE compatible UUIDs. + +Extended ext2fs_namei() to handle symbolic links. Added new function +ext2fs_nami_follow() which will follow last symbolic link in the case +where the pathname points to a sym link. + +The ext2fs_block_iterate function will now return the HURD translator +block, if present. The new flag BLOCK_FLAG_DATA_ONLY will cause the +iterator to return data blocks only. The ext2fs.h file now defines +constants BLOCK_COUNT_IND, BLOCK_COUNT_DIND, BLOCK_COUNT_TIND, and +BLOCK_COUNT_TRANSLATOR, which are the magic values passed in the block +count field of the iterator callback function. + +The test script driver now takes an optional second argument, which is +the test case to be run. This allows you to run a test case without +needing to run the entire test suite. + +On Linux ELF systems, install the .so files in the correct places +(/usr/lib). The .so files must be stored in the same directory as the +.a files. + +Fixed miscellaneous HURD compilation issues with header file being +included in the right order. + +Fixed debugfs so that it resets optind to zero, not one, since setting +optind to zero is more correct. + + +E2fsprogs 1.04 (May 16, 1996) +============================= + +First "official" (1.03 was a limited release only) to support building +e2fsprogs under Linux 2.0 kernels (as well as late model 1.3 and 1.99 +kernels). + +This package includes a RPM specs file, that it can be built using the +RedHat Package Manager. + +E2fsck now prints a hint that if there are lots of incorrectly located +inode bitmaps, block bitmaps, and inode table blocks, the user might +want to try using e2fsck -b 8193 first, to see if that fares any +better. + +For ext2 filesystem written with the hurd, debugfs will now print out +the translator field when printing an inode structure. + +Lots of miscellaneous linking/installation cleanups: + + Libraries are now linked using a relative pathname, instead of + relying on -L working correct. It doesn't, in many cases, including + current versions of GNU ld. This guarantees that the build tree is + linking with the right libraries, instead of the ones installed in + /usr/lib. + + Header files, man pages, and the et/ss shell scripts are now + generated using a custom substitution script, instead of relying on + the configure script. This prevents needless recompilation of + files; in addition, the custom substitution script is much faster. + + e2fsck may now be linked dynamically, by using the + --enable-dynamic-e2fsck flag to configure. This is not recommended, + since it increases e2fsck's dependence on other files, but some + people need to save disk space, and other critical programs on their + systems were being linked dynamically anyway. + + Programs such as fsck which didn't need to be linked against + libext2fs (or mke2fs which didn't need to be linked against libe2p) + only link against libraries they actually need. Otherwise, those + programs would require the presense of libraries that otherwise + could be removed from a rescuse diskette. + + The ss include files are now installed correctly so they can + actually be used by another package. + + If the profiling libraries are built, they are now installed on a + "make install-libs". + + +E2fsprogs 1.03 (March 27, 1996) +=============================== + +Change the m68k bit numbering for bitmasks to match the bit numbering +used by all other ext2 implementations. (This change was requested by +the m68k kernel development team.) + +Support (in-development) filesystem format revision which supports +(among other things) dynamically sized inodes. + +Fixed a bug in the ext2 library so that an intelligent error is +returned if mke2fs is run with a ridiculously small number of blocks +for a partition. + +Fixed a bug in the ext2 library which required that the device be +openable in read/write mode in order to determine its size. This +caused e2fsck -n to require read/write access when it was not +previously necessary. + +Fixed a bug in e2fsck which casued it to occasionally fail the test +suite depending on which version of the floating point library it was +using. + +Fixed a bug in e2fsck so that it now halts with a fatal error when +certain superblock consistency checks fail. Previously it continued +running e2fsck, with some potential confusing/damaging consequences. + +Added new flag to fsck which allows the root to be checked in parallel +with other filesytems. This is not the safest thing in the world to +do, but some system administrators really wanted it. + +Fixed -Wall flames in lib/ss. + + +E2fsprogs 1.02 (January 16, 1996) +================================= + +Fix to allow e2fsprogs to be compiled on recent 1.3 (pl45+) kernels. + +Change e2fsck to print statistics of how many non-contiguous files are +on the system. Note that a file which is larger than 8k blocks, it is +guaranteed to be non-contiguous. + +In mke2fs, print a warning message if a user tries to format a whole +disk (/dev/hda versus /dev/hda1). If a user really wants to format a +whole disk, the -F (force) option forces mke2fs to format a whole disk +as a filesytem. + +Fix a bug in fsck where in some cases it might start checking +partitions in the next pass before it finishes checking partitions in +the current pass. This still won't cause two partitions on the same +disk will be checked, so it's rarely a problem in real life. + +Patch lsattr so that it won't hang when checking a named pipe. + +Minor compilation fixes: + * Fix the order of libraries that were linked in debugfs. + * Allow the sources to be compiled with -ansi turned on. diff --git a/SHLIBS b/SHLIBS new file mode 100644 index 0000000..2fcbbc3 --- /dev/null +++ b/SHLIBS @@ -0,0 +1,35 @@ +Library:libcom_err.o +Description: Common error code library +Maintainer: Theodore Ts'o +Email: tytso@mit.edu +Start: 0x66800000 +End: 0x6687ffff + +Library:libss.o +Description: Generic Subsystem library (Simple tty UI) +Maintainer: Theodore Ts'o +Email: tytso@mit.edu +Start: 0x66880000 +End: 0x668fffff + +Library:libext2fs.so +Description: The ext2fs (raw interface) library +Maintainer: Theodore Ts'o +Email: tytso@mit.edu +Start: 0x66900000 +End: 0x6697ffff + +Library:libe2p.so +Description: The e2p (ext2fs's programmers) library +Maintainer: Theodore Ts'o +Email: tytso@mit.edu +Start: 0x66980000 +End: 0x669fffff + +Library:libuuid.so +Description: DCE Universally Unique ID (UUID) library +Maintainer: Theodore Ts'o +Email: tytso@mit.edu +Start: 0x67900000 +End: 0x679fffff + diff --git a/SUBMITTING-PATCHES b/SUBMITTING-PATCHES new file mode 100644 index 0000000..189deb3 --- /dev/null +++ b/SUBMITTING-PATCHES @@ -0,0 +1,39 @@ + +Like the Linux kernel, submitted e2fsprogs patches now require the +following "sign-off" procedure: + +The sign-off is a simple line at the end of the explanation for the +patch, which certifies that you wrote it or otherwise have the right to +pass it on as a open-source patch. The rules are pretty simple: if you +can certify the below: + + Developer's Certificate of Origin 1.1 + + By making a contribution to this project, I certify that: + + (a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + + (b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + + (c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + + (d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. + +then you just add a line saying + + Signed-off-by: Random J Developer + diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..912383a --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,153 @@ +# from http://autoconf-archive.cryp.to/ax_tls.html +# +# This was licensed under the GPL with the following exception: +# +# As a special exception, the respective Autoconf Macro's copyright +# owner gives unlimited permission to copy, distribute and modify the +# configure scripts that are the output of Autoconf when processing +# the Macro. You need not follow the terms of the GNU General Public +# License when using or distributing such scripts, even though +# portions of the text of the Macro appear in them. The GNU General +# Public License (GPL) does govern all other use of the material that +# constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the +# Autoconf Macro released by the Autoconf Macro Archive. When you make +# and distribute a modified version of the Autoconf Macro, you may +# extend this special exception to the GPL to apply to your modified +# version as well. +# +AC_DEFUN([AX_TLS], [ + AC_MSG_CHECKING(for thread local storage (TLS) class) + AC_CACHE_VAL(ac_cv_tls, [ + ax_tls_keywords="__thread __declspec(thread) none" + for ax_tls_keyword in $ax_tls_keywords; do + case $ax_tls_keyword in + none) ac_cv_tls=none ; break ;; + *) + AC_TRY_COMPILE( + [#include + static void + foo(void) { + static ] $ax_tls_keyword [ int bar; + exit(1); + }], + [], + [ac_cv_tls=$ax_tls_keyword ; break], + ac_cv_tls=none + ) + esac + done +]) + + if test "$ac_cv_tls" != "none"; then + dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here]) + AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here]) + fi + AC_MSG_RESULT($ac_cv_tls) +]) + +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/check_gnu_make.html +# =========================================================================== +# +# SYNOPSIS +# +# CHECK_GNU_MAKE() +# +# DESCRIPTION +# +# This macro searches for a GNU version of make. If a match is found, the +# makefile variable `ifGNUmake' is set to the empty string, otherwise it +# is set to "#". This is useful for including a special features in a +# Makefile, which cannot be handled by other versions of make. The +# variable _cv_gnu_make_command is set to the command to invoke GNU make +# if it exists, the empty string otherwise. +# +# Here is an example of its use: +# +# Makefile.in might contain: +# +# # A failsafe way of putting a dependency rule into a makefile +# $(DEPEND): +# $(CC) -MM $(srcdir)/*.c > $(DEPEND) +# +# @ifGNUmake@ ifeq ($(DEPEND),$(wildcard $(DEPEND))) +# @ifGNUmake@ include $(DEPEND) +# @ifGNUmake@ endif +# +# Then configure.in would normally contain: +# +# CHECK_GNU_MAKE() +# AC_OUTPUT(Makefile) +# +# Then perhaps to cause gnu make to override any other make, we could do +# something like this (note that GNU make always looks for GNUmakefile +# first): +# +# if ! test x$_cv_gnu_make_command = x ; then +# mv Makefile GNUmakefile +# echo .DEFAULT: > Makefile ; +# echo \ $_cv_gnu_make_command \$@ >> Makefile; +# fi +# +# Then, if any (well almost any) other make is called, and GNU make also +# exists, then the other make wraps the GNU make. +# +# LICENSE +# +# Copyright (c) 2008 John Darrington +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. +# +# Note: Modified by Ted Ts'o to add @ifNotGNUMake@ + +AC_DEFUN( + [CHECK_GNU_MAKE], [ AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command, + _cv_gnu_make_command='' ; +dnl Search all the common names for GNU make + if test -n "$FORCE_NATIVE_MAKE" ; then + MAKES="make" + else + MAKES="make gmake gnumake" + fi + for a in "$MAKE" $MAKES ; do + if test -z "$a" ; then continue ; fi ; + if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then + _cv_gnu_make_command=$a ; + break; + fi + done ; + ) ; +dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise + if test "x$_cv_gnu_make_command" != "x" ; then + ifGNUmake='' ; + ifNotGNUmake='#' ; + else + ifGNUmake='#' ; + ifNotGNUmake='' ; + AC_MSG_RESULT("Not found"); + fi + AC_SUBST(ifGNUmake) + AC_SUBST(ifNotGNUmake) +] ) +# was originally from nls.m4 serial 1 (gettext-0.12) +AC_DEFUN([AM_MKINSTALLDIRS], +[ + dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly + dnl find the mkinstalldirs script in another subdir but $(top_srcdir). + dnl Try to locate it. + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + case "$ac_aux_dir" in + /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; + *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; + esac + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + AC_SUBST(MKINSTALLDIRS) +]) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..4cf123a --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,4330 @@ +# generated automatically by aclocal 1.14.1 -*- Autoconf -*- + +# Copyright (C) 1996-2013 Free Software Foundation, Inc. + +# This file is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) +# codeset.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2006, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_LANGINFO_CODESET], +[ + AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[char* cs = nl_langinfo(CODESET); return !cs;]])], + [am_cv_langinfo_codeset=yes], + [am_cv_langinfo_codeset=no]) + ]) + if test $am_cv_langinfo_codeset = yes; then + AC_DEFINE([HAVE_LANGINFO_CODESET], [1], + [Define if you have and nl_langinfo(CODESET).]) + fi +]) + +dnl 'extern inline' a la ISO C99. + +dnl Copyright 2012-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_EXTERN_INLINE], +[ + AH_VERBATIM([extern_inline], +[/* Please see the Gnulib manual for how to use these macros. + + Suppress extern inline with HP-UX cc, as it appears to be broken; see + . + + Suppress extern inline with Sun C in standards-conformance mode, as it + mishandles inline functions that call each other. E.g., for 'inline void f + (void) { } inline void g (void) { f (); }', c99 incorrectly complains + 'reference to static identifier "f" in extern inline function'. + This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. + + Suppress the use of extern inline on Apple's platforms, as Libc at least + through Libc-825.26 (2013-04-09) is incompatible with it; see, e.g., + . + Perhaps Apple will fix this some day. */ +#if ((__GNUC__ \ + ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ + : (199901L <= __STDC_VERSION__ \ + && !defined __HP_cc \ + && !(defined __SUNPRO_C && __STDC__))) \ + && !defined __APPLE__) +# define _GL_INLINE inline +# define _GL_EXTERN_INLINE extern inline +#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ + && !defined __APPLE__) +# if __GNUC_GNU_INLINE__ + /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ +# define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) +# else +# define _GL_INLINE extern inline +# endif +# define _GL_EXTERN_INLINE extern +#else +# define _GL_INLINE static _GL_UNUSED +# define _GL_EXTERN_INLINE static _GL_UNUSED +#endif + +#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) +# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ +# define _GL_INLINE_HEADER_CONST_PRAGMA +# else +# define _GL_INLINE_HEADER_CONST_PRAGMA \ + _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") +# endif + /* Suppress GCC's bogus "no previous prototype for 'FOO'" + and "no previous declaration for 'FOO'" diagnostics, + when FOO is an inline function in the header; see + . */ +# define _GL_INLINE_HEADER_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ + _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ + _GL_INLINE_HEADER_CONST_PRAGMA +# define _GL_INLINE_HEADER_END \ + _Pragma ("GCC diagnostic pop") +#else +# define _GL_INLINE_HEADER_BEGIN +# define _GL_INLINE_HEADER_END +#endif]) +]) + +# fcntl-o.m4 serial 4 +dnl Copyright (C) 2006, 2009-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Written by Paul Eggert. + +# Test whether the flags O_NOATIME and O_NOFOLLOW actually work. +# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. +# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. +AC_DEFUN([gl_FCNTL_O_FLAGS], +[ + dnl Persuade glibc to define O_NOATIME and O_NOFOLLOW. + dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes + dnl AC_GNU_SOURCE. + m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], + [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], + [AC_REQUIRE([AC_GNU_SOURCE])]) + + AC_CHECK_HEADERS_ONCE([unistd.h]) + AC_CHECK_FUNCS_ONCE([symlink]) + AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], + [AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include + #if HAVE_UNISTD_H + # include + #else /* on Windows with MSVC */ + # include + # include + # defined sleep(n) _sleep ((n) * 1000) + #endif + #include + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + ]], + [[ + int result = !constants; + #if HAVE_SYMLINK + { + static char const sym[] = "conftest.sym"; + if (symlink ("/dev/null", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + if (unlink (sym) != 0 || symlink (".", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_RDONLY | O_NOFOLLOW); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + unlink (sym); + } + #endif + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + if (fd < 0) + result |= 8; + else + { + struct stat st0; + if (fstat (fd, &st0) != 0) + result |= 16; + else + { + char c; + sleep (1); + if (read (fd, &c, 1) != 1) + result |= 24; + else + { + if (close (fd) != 0) + result |= 32; + else + { + struct stat st1; + if (stat (file, &st1) != 0) + result |= 40; + else + if (st0.st_atime != st1.st_atime) + result |= 64; + } + } + } + } + } + return result;]])], + [gl_cv_header_working_fcntl_h=yes], + [case $? in #( + 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac], + [gl_cv_header_working_fcntl_h=cross-compiling])]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], + [Define to 1 if O_NOATIME works.]) + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], + [Define to 1 if O_NOFOLLOW works.]) +]) + +# gettext.m4 serial 66 (gettext-0.18.2) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2006, 2008-2010. + +dnl Macro to add for using GNU gettext. + +dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). +dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The +dnl default (if it is not specified or empty) is 'no-libtool'. +dnl INTLSYMBOL should be 'external' for packages with no intl directory, +dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. +dnl If INTLSYMBOL is 'use-libtool', then a libtool library +dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, +dnl depending on --{enable,disable}-{shared,static} and on the presence of +dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library +dnl $(top_builddir)/intl/libintl.a will be created. +dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext +dnl implementations (in libc or libintl) without the ngettext() function +dnl will be ignored. If NEEDSYMBOL is specified and is +dnl 'need-formatstring-macros', then GNU gettext implementations that don't +dnl support the ISO C 99 formatstring macros will be ignored. +dnl INTLDIR is used to find the intl libraries. If empty, +dnl the value '$(top_builddir)/intl/' is used. +dnl +dnl The result of the configuration is one of three cases: +dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled +dnl and used. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 2) GNU gettext has been found in the system's C library. +dnl Catalog format: GNU --> install in $(datadir) +dnl Catalog extension: .mo after installation, .gmo in source tree +dnl 3) No internationalization, always use English msgid. +dnl Catalog format: none +dnl Catalog extension: none +dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. +dnl The use of .gmo is historical (it was needed to avoid overwriting the +dnl GNU format catalogs when building on a platform with an X/Open gettext), +dnl but we keep it in order not to force irrelevant filename changes on the +dnl maintainers. +dnl +AC_DEFUN([AM_GNU_GETTEXT], +[ + dnl Argument checking. + ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , + [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT +])])])])]) + ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], + [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) + ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , + [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT +])])])]) + define([gt_included_intl], + ifelse([$1], [external], + ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), + [yes])) + define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) + gt_NEEDS_INIT + AM_GNU_GETTEXT_NEED([$2]) + + AC_REQUIRE([AM_PO_SUBDIRS])dnl + ifelse(gt_included_intl, yes, [ + AC_REQUIRE([AM_INTL_SUBDIR])dnl + ]) + + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Sometimes libintl requires libiconv, so first search for libiconv. + dnl Ideally we would do this search only after the + dnl if test "$USE_NLS" = "yes"; then + dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT + dnl the configure script would need to contain the same shell code + dnl again, outside any 'if'. There are two solutions: + dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. + dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. + dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not + dnl documented, we avoid it. + ifelse(gt_included_intl, yes, , [ + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + ]) + + dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. + gt_INTL_MACOSX + + dnl Set USE_NLS. + AC_REQUIRE([AM_NLS]) + + ifelse(gt_included_intl, yes, [ + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + ]) + LIBINTL= + LTLIBINTL= + POSUB= + + dnl Add a version number to the cache macros. + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + dnl If we use NLS figure out what method + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + ifelse(gt_included_intl, yes, [ + AC_MSG_CHECKING([whether included gettext is requested]) + AC_ARG_WITH([included-gettext], + [ --with-included-gettext use the GNU gettext library included here], + nls_cv_force_use_gnu_gettext=$withval, + nls_cv_force_use_gnu_gettext=no) + AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + ]) + dnl User does not insist on using GNU NLS library. Figure out what + dnl to use. If GNU gettext is available we use this. Else we have + dnl to fall back to GNU NLS library. + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +changequote(,)dnl +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +changequote([,])dnl +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + ]])], + [eval "$gt_func_gnugettext_libc=yes"], + [eval "$gt_func_gnugettext_libc=no"])]) + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + dnl Sometimes libintl requires libiconv, so first search for libiconv. + ifelse(gt_included_intl, yes, , [ + AM_ICONV_LINK + ]) + dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL + dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) + dnl because that would add "-liconv" to LIBINTL and LTLIBINTL + dnl even if libiconv doesn't exist. + AC_LIB_LINKFLAGS_BODY([intl]) + AC_CACHE_CHECK([for GNU gettext in libintl], + [$gt_func_gnugettext_libintl], + [gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + dnl Now see whether libintl exists and does not depend on libiconv. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ]])], + [eval "$gt_func_gnugettext_libintl=yes"], + [eval "$gt_func_gnugettext_libintl=no"]) + dnl Now see whether libintl exists and depends on libiconv. + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + ]], + [[ +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + ]])], + [LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + ]) + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS"]) + fi + + dnl If an already present or preinstalled GNU gettext() is found, + dnl use it. But if this macro is used in GNU gettext, and GNU + dnl gettext is already preinstalled in libintl, we update this + dnl libintl. (Cf. the install rule in intl/Makefile.in.) + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + dnl Reset the values set by searching for libintl. + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + ifelse(gt_included_intl, yes, [ + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + dnl GNU gettext is not found in the C library. + dnl Fall back on included GNU gettext library. + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions used to generate GNU NLS library. + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" + LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Mark actions to use GNU gettext tools. + CATOBJEXT=.gmo + fi + ]) + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + dnl Some extra flags are needed during linking. + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + AC_DEFINE([ENABLE_NLS], [1], + [Define to 1 if translation of program messages to the user's native language + is requested.]) + else + USE_NLS=no + fi + fi + + AC_MSG_CHECKING([whether to use NLS]) + AC_MSG_RESULT([$USE_NLS]) + if test "$USE_NLS" = "yes"; then + AC_MSG_CHECKING([where the gettext function comes from]) + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + AC_MSG_RESULT([$gt_source]) + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + AC_MSG_CHECKING([how to link with libintl]) + AC_MSG_RESULT([$LIBINTL]) + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) + fi + + dnl For backward compatibility. Some packages may be using this. + AC_DEFINE([HAVE_GETTEXT], [1], + [Define if the GNU gettext() function is already present or preinstalled.]) + AC_DEFINE([HAVE_DCGETTEXT], [1], + [Define if the GNU dcgettext() function is already present or preinstalled.]) + fi + + dnl We need to process the po/ directory. + POSUB=po + fi + + ifelse(gt_included_intl, yes, [ + dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL + dnl to 'yes' because some of the testsuite requires it. + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + dnl Make all variables we use known to autoconf. + AC_SUBST([BUILD_INCLUDED_LIBINTL]) + AC_SUBST([USE_INCLUDED_LIBINTL]) + AC_SUBST([CATOBJEXT]) + + dnl For backward compatibility. Some configure.ins may be using this. + nls_cv_header_intl= + nls_cv_header_libgt= + + dnl For backward compatibility. Some Makefiles may be using this. + DATADIRNAME=share + AC_SUBST([DATADIRNAME]) + + dnl For backward compatibility. Some Makefiles may be using this. + INSTOBJEXT=.mo + AC_SUBST([INSTOBJEXT]) + + dnl For backward compatibility. Some Makefiles may be using this. + GENCAT=gencat + AC_SUBST([GENCAT]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + AC_SUBST([INTLOBJS]) + + dnl Enable libtool support if the surrounding package wishes it. + INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix + AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) + ]) + + dnl For backward compatibility. Some Makefiles may be using this. + INTLLIBS="$LIBINTL" + AC_SUBST([INTLLIBS]) + + dnl Make all documented variables known to autoconf. + AC_SUBST([LIBINTL]) + AC_SUBST([LTLIBINTL]) + AC_SUBST([POSUB]) +]) + + +dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. +m4_define([gt_NEEDS_INIT], +[ + m4_divert_text([DEFAULTS], [gt_needs=]) + m4_define([gt_NEEDS_INIT], []) +]) + + +dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) +AC_DEFUN([AM_GNU_GETTEXT_NEED], +[ + m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) +]) + + +dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) +AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) + +# glibc2.m4 serial 3 +dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2013 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.0 or newer. +# From Bruno Haible. + +AC_DEFUN([gt_GLIBC2], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library 2 or newer], + [ac_cv_gnu_library_2], + [AC_EGREP_CPP([Lucky GNU user], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + ], + [ac_cv_gnu_library_2=yes], + [ac_cv_gnu_library_2=no]) + ] + ) + AC_SUBST([GLIBC2]) + GLIBC2="$ac_cv_gnu_library_2" + ] +) + +# glibc21.m4 serial 5 +dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2013 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +# Test for the GNU C Library, version 2.1 or newer, or uClibc. +# From Bruno Haible. + +AC_DEFUN([gl_GLIBC21], + [ + AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], + [ac_cv_gnu_library_2_1], + [AC_EGREP_CPP([Lucky], + [ +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif +#ifdef __UCLIBC__ + Lucky user +#endif + ], + [ac_cv_gnu_library_2_1=yes], + [ac_cv_gnu_library_2_1=no]) + ] + ) + AC_SUBST([GLIBC21]) + GLIBC21="$ac_cv_gnu_library_2_1" + ] +) + +# iconv.m4 serial 18 (gettext-0.18.2) +dnl Copyright (C) 2000-2002, 2007-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], +[ + dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([iconv]) +]) + +AC_DEFUN([AM_ICONV_LINK], +[ + dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and + dnl those with the standalone portable GNU libiconv installed). + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + + dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV + dnl accordingly. + AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) + + dnl Add $INCICONV to CPPFLAGS before performing the following checks, + dnl because if the user has installed libiconv and not disabled its use + dnl via --without-libiconv-prefix, he wants to use it. The first + dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. + am_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) + + AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_func_iconv=yes]) + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd);]])], + [am_cv_lib_iconv=yes] + [am_cv_func_iconv=yes]) + LIBS="$am_save_LIBS" + fi + ]) + if test "$am_cv_func_iconv" = yes; then + AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ + dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, + dnl Solaris 10. + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include +int main () +{ + int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +}]])], + [am_cv_func_iconv_works=yes], + [am_cv_func_iconv_works=no], + [ +changequote(,)dnl + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac +changequote([,])dnl + ]) + LIBS="$am_save_LIBS" + ]) + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + AC_DEFINE([HAVE_ICONV], [1], + [Define if you have the iconv() function and it works.]) + fi + if test "$am_cv_lib_iconv" = yes; then + AC_MSG_CHECKING([how to link with libiconv]) + AC_MSG_RESULT([$LIBICONV]) + else + dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV + dnl either. + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + AC_SUBST([LIBICONV]) + AC_SUBST([LTLIBICONV]) +]) + +dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to +dnl avoid warnings like +dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". +dnl This is tricky because of the way 'aclocal' is implemented: +dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. +dnl Otherwise aclocal's initial scan pass would miss the macro definition. +dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. +dnl Otherwise aclocal would emit many "Use of uninitialized value $1" +dnl warnings. +m4_define([gl_iconv_AC_DEFUN], + m4_version_prereq([2.64], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [m4_ifdef([gl_00GNULIB], + [[AC_DEFUN_ONCE( + [$1], [$2])]], + [[AC_DEFUN( + [$1], [$2])]])])) +gl_iconv_AC_DEFUN([AM_ICONV], +[ + AM_ICONV_LINK + if test "$am_cv_func_iconv" = yes; then + AC_MSG_CHECKING([for iconv declaration]) + AC_CACHE_VAL([am_cv_proto_iconv], [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + ]], + [[]])], + [am_cv_proto_iconv_arg1=""], + [am_cv_proto_iconv_arg1="const"]) + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) + am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + AC_MSG_RESULT([ + $am_cv_proto_iconv]) + AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], + [Define as const if the declaration of iconv() needs const.]) + dnl Also substitute ICONV_CONST in the gnulib generated . + m4_ifdef([gl_ICONV_H_DEFAULTS], + [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) + if test -n "$am_cv_proto_iconv_arg1"; then + ICONV_CONST="const" + fi + ]) + fi +]) + +# intdiv0.m4 serial 6 (gettext-0.18.2) +dnl Copyright (C) 2002, 2007-2008, 2010-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gt_INTDIV0], +[ + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + + AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], + gt_cv_int_divbyzero_sigfpe, + [ + gt_cv_int_divbyzero_sigfpe= +changequote(,)dnl + case "$host_os" in + macos* | darwin[6-9]* | darwin[1-9][0-9]*) + # On Mac OS X 10.2 or newer, just assume the same as when cross- + # compiling. If we were to perform the real test, 1 Crash Report + # dialog window would pop up. + case "$host_cpu" in + i[34567]86 | x86_64) + gt_cv_int_divbyzero_sigfpe="guessing yes" ;; + esac + ;; + esac +changequote([,])dnl + if test -z "$gt_cv_int_divbyzero_sigfpe"; then + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#include + +static void +sigfpe_handler (int sig) +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (2); +} +]])], + [gt_cv_int_divbyzero_sigfpe=yes], + [gt_cv_int_divbyzero_sigfpe=no], + [ + # Guess based on the CPU. +changequote(,)dnl + case "$host_cpu" in + alpha* | i[34567]86 | x86_64 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac +changequote([,])dnl + ]) + fi + ]) + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value], + [Define if integer division by zero raises signal SIGFPE.]) +]) + +# intl.m4 serial 25 (gettext-0.18.3) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2009. + +AC_PREREQ([2.60]) + +dnl Checks for all prerequisites of the intl subdirectory, +dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, +dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. +AC_DEFUN([AM_INTL_SUBDIR], +[ + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([gt_GLIBC2])dnl + AC_REQUIRE([AC_PROG_RANLIB])dnl + AC_REQUIRE([gl_VISIBILITY])dnl + AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl + AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl + AC_REQUIRE([gt_TYPE_WCHAR_T])dnl + AC_REQUIRE([gt_TYPE_WINT_T])dnl + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gt_TYPE_INTMAX_T]) + AC_REQUIRE([gt_PRINTF_POSIX]) + AC_REQUIRE([gl_GLIBC21])dnl + AC_REQUIRE([gl_XSIZE])dnl + AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl + AC_REQUIRE([gt_INTL_MACOSX])dnl + AC_REQUIRE([gl_EXTERN_INLINE])dnl + + dnl Support for automake's --enable-silent-rules. + case "$enable_silent_rules" in + yes) INTL_DEFAULT_VERBOSITY=0;; + no) INTL_DEFAULT_VERBOSITY=1;; + *) INTL_DEFAULT_VERBOSITY=1;; + esac + AC_SUBST([INTL_DEFAULT_VERBOSITY]) + + AC_CHECK_TYPE([ptrdiff_t], , + [AC_DEFINE([ptrdiff_t], [long], + [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) + ]) + AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h]) + AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \ + snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) + + dnl Use the _snprintf function only if it is declared (because on NetBSD it + dnl is defined as a weak alias of snprintf; we prefer to use the latter). + AC_CHECK_DECLS([_snprintf, _snwprintf], , , [#include ]) + + dnl Use the *_unlocked functions only if they are declared. + dnl (because some of them were defined without being declared in Solaris + dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built + dnl on Solaris 2.5.1 to run on Solaris 2.6). + AC_CHECK_DECLS([getc_unlocked], , , [#include ]) + + case $gt_cv_func_printf_posix in + *yes) HAVE_POSIX_PRINTF=1 ;; + *) HAVE_POSIX_PRINTF=0 ;; + esac + AC_SUBST([HAVE_POSIX_PRINTF]) + if test "$ac_cv_func_asprintf" = yes; then + HAVE_ASPRINTF=1 + else + HAVE_ASPRINTF=0 + fi + AC_SUBST([HAVE_ASPRINTF]) + if test "$ac_cv_func_snprintf" = yes; then + HAVE_SNPRINTF=1 + else + HAVE_SNPRINTF=0 + fi + AC_SUBST([HAVE_SNPRINTF]) + if test "$ac_cv_func_newlocale" = yes; then + HAVE_NEWLOCALE=1 + else + HAVE_NEWLOCALE=0 + fi + AC_SUBST([HAVE_NEWLOCALE]) + if test "$ac_cv_func_wprintf" = yes; then + HAVE_WPRINTF=1 + else + HAVE_WPRINTF=0 + fi + AC_SUBST([HAVE_WPRINTF]) + + AM_LANGINFO_CODESET + gt_LC_MESSAGES + + dnl Compilation on mingw and Cygwin needs special Makefile rules, because + dnl 1. when we install a shared library, we must arrange to export + dnl auxiliary pointer variables for every exported variable, + dnl 2. when we install a shared library and a static library simultaneously, + dnl the include file specifies __declspec(dllimport) and therefore we + dnl must arrange to define the auxiliary pointer variables for the + dnl exported variables _also_ in the static library. + if test "$enable_shared" = yes; then + case "$host_os" in + mingw* | cygwin*) is_woe32dll=yes ;; + *) is_woe32dll=no ;; + esac + else + is_woe32dll=no + fi + WOE32DLL=$is_woe32dll + AC_SUBST([WOE32DLL]) + + dnl On mingw and Cygwin, we can activate special Makefile rules which add + dnl version information to the shared libraries and executables. + case "$host_os" in + mingw* | cygwin*) is_woe32=yes ;; + *) is_woe32=no ;; + esac + WOE32=$is_woe32 + AC_SUBST([WOE32]) + if test $WOE32 = yes; then + dnl Check for a program that compiles Windows resource files. + AC_CHECK_TOOL([WINDRES], [windres]) + fi + + dnl Determine whether when creating a library, "-lc" should be passed to + dnl libtool or not. On many platforms, it is required for the libtool option + dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool + dnl in the *.la files - makes it impossible to create multithreaded programs, + dnl because libtool also reorders the -lc to come before the -pthread, and + dnl this disables pthread_create() . + case "$host_os" in + hpux*) LTLIBC="" ;; + *) LTLIBC="-lc" ;; + esac + AC_SUBST([LTLIBC]) + + dnl Rename some macros and functions used for locking. + AH_BOTTOM([ +#define __libc_lock_t gl_lock_t +#define __libc_lock_define gl_lock_define +#define __libc_lock_define_initialized gl_lock_define_initialized +#define __libc_lock_init gl_lock_init +#define __libc_lock_lock gl_lock_lock +#define __libc_lock_unlock gl_lock_unlock +#define __libc_lock_recursive_t gl_recursive_lock_t +#define __libc_lock_define_recursive gl_recursive_lock_define +#define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized +#define __libc_lock_init_recursive gl_recursive_lock_init +#define __libc_lock_lock_recursive gl_recursive_lock_lock +#define __libc_lock_unlock_recursive gl_recursive_lock_unlock +#define glthread_in_use libintl_thread_in_use +#define glthread_lock_init_func libintl_lock_init_func +#define glthread_lock_lock_func libintl_lock_lock_func +#define glthread_lock_unlock_func libintl_lock_unlock_func +#define glthread_lock_destroy_func libintl_lock_destroy_func +#define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded +#define glthread_rwlock_init_func libintl_rwlock_init_func +#define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded +#define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func +#define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded +#define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func +#define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded +#define glthread_rwlock_unlock_func libintl_rwlock_unlock_func +#define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded +#define glthread_rwlock_destroy_func libintl_rwlock_destroy_func +#define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded +#define glthread_recursive_lock_init_func libintl_recursive_lock_init_func +#define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded +#define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func +#define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded +#define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func +#define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded +#define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func +#define glthread_once_func libintl_once_func +#define glthread_once_singlethreaded libintl_once_singlethreaded +#define glthread_once_multithreaded libintl_once_multithreaded +]) +]) + + +dnl Checks for the core files of the intl subdirectory: +dnl dcigettext.c +dnl eval-plural.h +dnl explodename.c +dnl finddomain.c +dnl gettextP.h +dnl gmo.h +dnl hash-string.h hash-string.c +dnl l10nflist.c +dnl libgnuintl.h.in (except the *printf stuff) +dnl loadinfo.h +dnl loadmsgcat.c +dnl localealias.c +dnl log.c +dnl plural-exp.h plural-exp.c +dnl plural.y +dnl Used by libglocale. +AC_DEFUN([gt_INTL_SUBDIR_CORE], +[ + AC_REQUIRE([AC_C_INLINE])dnl + AC_REQUIRE([AC_TYPE_SIZE_T])dnl + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_REQUIRE([AC_FUNC_ALLOCA])dnl + AC_REQUIRE([AC_FUNC_MMAP])dnl + AC_REQUIRE([gt_INTDIV0])dnl + AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl + AC_REQUIRE([gt_INTTYPES_PRI])dnl + AC_REQUIRE([gl_LOCK])dnl + + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]], + [[]])], + [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], + [Define to 1 if the compiler understands __builtin_expect.])]) + + AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h]) + AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ + stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \ + argz_stringify argz_next __fsetlocking]) + + dnl Use the *_unlocked functions only if they are declared. + dnl (because some of them were defined without being declared in Solaris + dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built + dnl on Solaris 2.5.1 to run on Solaris 2.6). + AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include ]) + + AM_ICONV + + dnl intl/plural.c is generated from intl/plural.y. It requires bison, + dnl because plural.y uses bison specific features. It requires at least + dnl bison-1.26 because earlier versions generate a plural.c that doesn't + dnl compile. + dnl bison is only needed for the maintainer (who touches plural.y). But in + dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put + dnl the rule in general Makefile. Now, some people carelessly touch the + dnl files or have a broken "make" program, hence the plural.c rule will + dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not + dnl present or too old. + AC_CHECK_PROGS([INTLBISON], [bison]) + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + dnl Found it, now check the version. + AC_MSG_CHECKING([version of bison]) +changequote(<<,>>)dnl + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) +changequote([,])dnl + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + AC_MSG_RESULT([$ac_prog_version]) + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi +]) + +# intlmacosx.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2004-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Checks for special options needed on Mac OS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in Mac OS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + [gt_cv_func_CFPreferencesCopyAppValue], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFPreferencesCopyAppValue(NULL, NULL)]])], + [gt_cv_func_CFPreferencesCopyAppValue=yes], + [gt_cv_func_CFPreferencesCopyAppValue=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], + [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in Mac OS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[CFLocaleCopyCurrent();]])], + [gt_cv_func_CFLocaleCopyCurrent=yes], + [gt_cv_func_CFLocaleCopyCurrent=no]) + LIBS="$gt_save_LIBS"]) + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], + [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + AC_SUBST([INTL_MACOSX_LIBS]) +]) + +# intmax.m4 serial 6 (gettext-0.18.2) +dnl Copyright (C) 2002-2005, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether the system has the 'intmax_t' type, but don't attempt to +dnl find a replacement if it is lacking. + +AC_DEFUN([gt_TYPE_INTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif + ]], + [[intmax_t x = -1; + return !x;]])], + [gt_cv_c_intmax_t=yes], + [gt_cv_c_intmax_t=no])]) + if test $gt_cv_c_intmax_t = yes; then + AC_DEFINE([HAVE_INTMAX_T], [1], + [Define if you have the 'intmax_t' type in or .]) + fi +]) + +# inttypes-pri.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1997-2002, 2006, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_PREREQ([2.53]) + +# Define PRI_MACROS_BROKEN if exists and defines the PRI* +# macros to non-string values. This is the case on AIX 4.3.3. + +AC_DEFUN([gt_INTTYPES_PRI], +[ + AC_CHECK_HEADERS([inttypes.h]) + if test $ac_cv_header_inttypes_h = yes; then + AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], + [gt_cv_inttypes_pri_broken], + [ + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#ifdef PRId32 +char *p = PRId32; +#endif + ]], + [[]])], + [gt_cv_inttypes_pri_broken=no], + [gt_cv_inttypes_pri_broken=yes]) + ]) + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1], + [Define if exists and defines unusable PRI* macros.]) + PRI_MACROS_BROKEN=1 + else + PRI_MACROS_BROKEN=0 + fi + AC_SUBST([PRI_MACROS_BROKEN]) +]) + +# inttypes_h.m4 serial 10 +dnl Copyright (C) 1997-2004, 2006, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_INTTYPES_H], +[ + AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[uintmax_t i = (uintmax_t) -1; return !i;]])], + [gl_cv_header_inttypes_h=yes], + [gl_cv_header_inttypes_h=no])]) + if test $gl_cv_header_inttypes_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) + +# lcmessage.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1995-2002, 2004-2005, 2008-2013 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995. + +# Check whether LC_MESSAGES is available in . + +AC_DEFUN([gt_LC_MESSAGES], +[ + AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], + [AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[return LC_MESSAGES]])], + [gt_cv_val_LC_MESSAGES=yes], + [gt_cv_val_LC_MESSAGES=no])]) + if test $gt_cv_val_LC_MESSAGES = yes; then + AC_DEFINE([HAVE_LC_MESSAGES], [1], + [Define if your file defines LC_MESSAGES.]) + fi +]) + +# lib-ld.m4 serial 6 +dnl Copyright (C) 1996-2003, 2009-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl Subroutines of libtool.m4, +dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid +dnl collision with libtool.m4. + +dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], +[# I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 /dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL([acl_cv_path_LD], +[if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 = 1.10 to complain if config.rpath is missing. + m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE([rpath], + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_FROMPACKAGE(name, package) +dnl declares that libname comes from the given package. The configure file +dnl will then not have a --with-libname-prefix option but a +dnl --with-package-prefix option. Several libraries can come from the same +dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar +dnl macro call that searches for libname. +AC_DEFUN([AC_LIB_FROMPACKAGE], +[ + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_frompackage_]NAME, [$2]) + popdef([NAME]) + pushdef([PACK],[$2]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + define([acl_libsinpackage_]PACKUP, + m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) + popdef([PACKUP]) + popdef([PACK]) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found +dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) + pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) + pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) + dnl Autoconf >= 2.61 supports dots in --with options. + pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_ARG_WITH(P_A_C_K[-prefix], +[[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib + --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + LIB[]NAME[]_PREFIX= + dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been + dnl computed. So it has to be reset here. + HAVE_LIB[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + dnl The same code as in the loop below: + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + dnl First look for a shared library. + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + dnl Then look for a static library. + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$acl_hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = '$1'; then + LIB[]NAME[]_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi + popdef([P_A_C_K]) + popdef([PACKLIBS]) + popdef([PACKUP]) + popdef([PACK]) + popdef([NAME]) +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +dnl For those cases where a variable contains several -L and -l options +dnl referring to unknown libraries and directories, this macro determines the +dnl necessary additional linker options for the runtime path. +dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) +dnl sets LDADDVAR to linker options needed together with LIBSVALUE. +dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, +dnl otherwise linking without libtool is assumed. +AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], +[ + AC_REQUIRE([AC_LIB_RPATH]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + $1= + if test "$enable_rpath" != no; then + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode directories into the resulting + dnl binary. + rpathdirs= + next= + for opt in $2; do + if test -n "$next"; then + dir="$next" + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= + else + case $opt in + -L) next=yes ;; + -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` + dnl No need to hardcode the standard /usr/lib. + if test "X$dir" != "X/usr/$acl_libdirstem" \ + && test "X$dir" != "X/usr/$acl_libdirstem2"; then + rpathdirs="$rpathdirs $dir" + fi + next= ;; + *) next= ;; + esac + fi + done + if test "X$rpathdirs" != "X"; then + if test -n ""$3""; then + dnl libtool is used for linking. Use -R options. + for dir in $rpathdirs; do + $1="${$1}${$1:+ }-R$dir" + done + else + dnl The linker is used for linking directly. + if test -n "$acl_hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user + dnl must pass all path elements in one option. + alldirs= + for dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="$flag" + else + dnl The -rpath options are cumulative. + for dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + $1="${$1}${$1:+ }$flag" + done + fi + fi + fi + fi + fi + AC_SUBST([$1]) +]) + +# lib-prefix.m4 serial 7 (gettext-0.18) +dnl Copyright (C) 2001-2005, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_PREPARE_MULTILIB creates +dnl - a variable acl_libdirstem, containing the basename of the libdir, either +dnl "lib" or "lib64" or "lib/64", +dnl - a variable acl_libdirstem2, as a secondary possible value for +dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or +dnl "lib/amd64". +AC_DEFUN([AC_LIB_PREPARE_MULTILIB], +[ + dnl There is no formal standard regarding lib and lib64. + dnl On glibc systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine + dnl the compiler's default mode by looking at the compiler's library search + dnl path. If at least one of its elements ends in /lib64 or points to a + dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. + dnl Otherwise we use the default, namely "lib". + dnl On Solaris systems, the current practice is that on a system supporting + dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under + dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or + dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. + AC_REQUIRE([AC_CANONICAL_HOST]) + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment + dnl . + dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." + dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the + dnl symlink is missing, so we set acl_libdirstem2 too. + AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], + [AC_EGREP_CPP([sixtyfour bits], [ +#ifdef _LP64 +sixtyfour bits +#endif + ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) + ]) + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" +]) + +# lock.m4 serial 13 (gettext-0.18.2) +dnl Copyright (C) 2005-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_LOCK], +[ + AC_REQUIRE([gl_THREADLIB]) + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + AC_CHECK_TYPE([pthread_rwlock_t], + [AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], + [Define if the POSIX multithreading library has read/write locks.])], + [], + [#include ]) + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[#include ]], + [[ +#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ + && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) +error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif + ]])], + [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], + [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) + fi + gl_PREREQ_LOCK +]) + +# Prerequisites of lib/glthread/lock.c. +AC_DEFUN([gl_PREREQ_LOCK], [:]) + +# longlong.m4 serial 17 +dnl Copyright (C) 1999-2007, 2009-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_LONG_LONG_INT if 'long long int' works. +# This fixes a bug in Autoconf 2.61, and can be faster +# than what's in Autoconf 2.62 through 2.68. + +# Note: If the type 'long long int' exists but is only 32 bits large +# (as on some very old compilers), HAVE_LONG_LONG_INT will not be +# defined. In this case you can treat 'long long int' like 'long int'. + +AC_DEFUN([AC_TYPE_LONG_LONG_INT], +[ + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], + [ac_cv_type_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. + dnl If cross compiling, assume the bug is not important, since + dnl nobody cross compiles for this platform as far as we know. + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[@%:@include + @%:@ifndef LLONG_MAX + @%:@ define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + @%:@ define LLONG_MAX (HALF - 1 + HALF) + @%:@endif]], + [[long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0;]])], + [], + [ac_cv_type_long_long_int=no], + [:]) + fi + fi]) + if test $ac_cv_type_long_long_int = yes; then + AC_DEFINE([HAVE_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'long long int'.]) + fi +]) + +# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. +# This fixes a bug in Autoconf 2.61, and can be faster +# than what's in Autoconf 2.62 through 2.68. + +# Note: If the type 'unsigned long long int' exists but is only 32 bits +# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT +# will not be defined. In this case you can treat 'unsigned long long int' +# like 'unsigned long int'. + +AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], +[ + AC_CACHE_CHECK([for unsigned long long int], + [ac_cv_type_unsigned_long_long_int], + [ac_cv_type_unsigned_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + AC_LINK_IFELSE( + [_AC_TYPE_LONG_LONG_SNIPPET], + [], + [ac_cv_type_unsigned_long_long_int=no]) + fi]) + if test $ac_cv_type_unsigned_long_long_int = yes; then + AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], + [Define to 1 if the system has the type 'unsigned long long int'.]) + fi +]) + +# Expands to a C program that can be used to test for simultaneous support +# of 'long long' and 'unsigned long long'. We don't want to say that +# 'long long' is available if 'unsigned long long' is not, or vice versa, +# because too many programs rely on the symmetry between signed and unsigned +# integer types (excluding 'bool'). +AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], +[ + AC_LANG_PROGRAM( + [[/* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63;]], + [[/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull));]]) +]) + +# nls.m4 serial 5 (gettext-0.18) +dnl Copyright (C) 1995-2003, 2005-2006, 2008-2013 Free Software Foundation, +dnl Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.50]) + +AC_DEFUN([AM_NLS], +[ + AC_MSG_CHECKING([whether NLS is requested]) + dnl Default is enabled NLS + AC_ARG_ENABLE([nls], + [ --disable-nls do not use Native Language Support], + USE_NLS=$enableval, USE_NLS=yes) + AC_MSG_RESULT([$USE_NLS]) + AC_SUBST([USE_NLS]) +]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# serial 1 (pkg-config-0.24) +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) +m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) +AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) +AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=m4_default([$1], [0.9.0]) + AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + PKG_CONFIG="" + fi +fi[]dnl +])# PKG_PROG_PKG_CONFIG + +# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# +# Check to see whether a particular set of modules exists. Similar +# to PKG_CHECK_MODULES(), but does not set variables or print errors. +# +# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +# only at the first occurence in configure.ac, so if the first place +# it's called might be skipped (such as if it is within an "if", you +# have to call PKG_CHECK_EXISTS manually +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_EXISTS], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +if test -n "$PKG_CONFIG" && \ + AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then + m4_default([$2], [:]) +m4_ifvaln([$3], [else + $3])dnl +fi]) + +# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) +# --------------------------------------------- +m4_define([_PKG_CONFIG], +[if test -n "$$1"; then + pkg_cv_[]$1="$$1" + elif test -n "$PKG_CONFIG"; then + PKG_CHECK_EXISTS([$3], + [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` + test "x$?" != "x0" && pkg_failed=yes ], + [pkg_failed=yes]) + else + pkg_failed=untried +fi[]dnl +])# _PKG_CONFIG + +# _PKG_SHORT_ERRORS_SUPPORTED +# ----------------------------- +AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG]) +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi[]dnl +])# _PKG_SHORT_ERRORS_SUPPORTED + + +# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], +# [ACTION-IF-NOT-FOUND]) +# +# +# Note that if there is a possibility the first call to +# PKG_CHECK_MODULES might not happen, you should be sure to include an +# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac +# +# +# -------------------------------------------------------------- +AC_DEFUN([PKG_CHECK_MODULES], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl +AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl + +pkg_failed=no +AC_MSG_CHECKING([for $1]) + +_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) +_PKG_CONFIG([$1][_LIBS], [libs], [$2]) + +m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS +and $1[]_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details.]) + +if test $pkg_failed = yes; then + AC_MSG_RESULT([no]) + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + m4_default([$4], [AC_MSG_ERROR( +[Package requirements ($2) were not met: + +$$1_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +_PKG_TEXT])[]dnl + ]) +elif test $pkg_failed = untried; then + AC_MSG_RESULT([no]) + m4_default([$4], [AC_MSG_FAILURE( +[The pkg-config script could not be found or is too old. Make sure it +is in your PATH or set the PKG_CONFIG environment variable to the full +path to pkg-config. + +_PKG_TEXT + +To get pkg-config, see .])[]dnl + ]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + $3 +fi[]dnl +])# PKG_CHECK_MODULES + + +# PKG_INSTALLDIR(DIRECTORY) +# ------------------------- +# Substitutes the variable pkgconfigdir as the location where a module +# should install pkg-config .pc files. By default the directory is +# $libdir/pkgconfig, but the default can be changed by passing +# DIRECTORY. The user can override through the --with-pkgconfigdir +# parameter. +AC_DEFUN([PKG_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([pkgconfigdir], + [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, + [with_pkgconfigdir=]pkg_default) +AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +]) dnl PKG_INSTALLDIR + + +# PKG_NOARCH_INSTALLDIR(DIRECTORY) +# ------------------------- +# Substitutes the variable noarch_pkgconfigdir as the location where a +# module should install arch-independent pkg-config .pc files. By +# default the directory is $datadir/pkgconfig, but the default can be +# changed by passing DIRECTORY. The user can override through the +# --with-noarch-pkgconfigdir parameter. +AC_DEFUN([PKG_NOARCH_INSTALLDIR], +[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) +m4_pushdef([pkg_description], + [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) +AC_ARG_WITH([noarch-pkgconfigdir], + [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, + [with_noarch_pkgconfigdir=]pkg_default) +AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) +m4_popdef([pkg_default]) +m4_popdef([pkg_description]) +]) dnl PKG_NOARCH_INSTALLDIR + + +# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, +# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# ------------------------------------------- +# Retrieves the value of the pkg-config variable for the given module. +AC_DEFUN([PKG_CHECK_VAR], +[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl +AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl + +_PKG_CONFIG([$1], [variable="][$3]["], [$2]) +AS_VAR_COPY([$1], [pkg_cv_][$1]) + +AS_VAR_IF([$1], [""], [$5], [$4])dnl +])# PKG_CHECK_VAR + +# po.m4 serial 21 (gettext-0.18.3) +dnl Copyright (C) 1995-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1995-2000. +dnl Bruno Haible , 2000-2003. + +AC_PREREQ([2.60]) + +dnl Checks for all prerequisites of the po subdirectory. +AC_DEFUN([AM_PO_SUBDIRS], +[ + AC_REQUIRE([AC_PROG_MAKE_SET])dnl + AC_REQUIRE([AC_PROG_INSTALL])dnl + AC_REQUIRE([AC_PROG_MKDIR_P])dnl + AC_REQUIRE([AC_PROG_SED])dnl + AC_REQUIRE([AM_NLS])dnl + + dnl Release version of the gettext macros. This is used to ensure that + dnl the gettext macros and po/Makefile.in.in are in sync. + AC_SUBST([GETTEXT_MACRO_VERSION], [0.18]) + + dnl Perform the following tests also if --disable-nls has been given, + dnl because they are needed for "make dist" to work. + + dnl Search for GNU msgfmt in the PATH. + dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. + dnl The second test excludes FreeBSD msgfmt. + AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, + [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) + + dnl Test whether it is GNU msgfmt >= 0.15. +changequote(,)dnl + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([MSGFMT_015]) +changequote(,)dnl + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac +changequote([,])dnl + AC_SUBST([GMSGFMT_015]) + + dnl Search for GNU xgettext 0.12 or newer in the PATH. + dnl The first test excludes Solaris xgettext and early GNU xgettext versions. + dnl The second test excludes FreeBSD xgettext. + AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, + [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], + :) + dnl Remove leftover from FreeBSD xgettext call. + rm -f messages.po + + dnl Test whether it is GNU xgettext >= 0.15. +changequote(,)dnl + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac +changequote([,])dnl + AC_SUBST([XGETTEXT_015]) + + dnl Search for GNU msgmerge 0.11 or newer in the PATH. + AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, + [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) + + dnl Installation directories. + dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we + dnl have to define it here, so that it can be used in po/Makefile. + test -n "$localedir" || localedir='${datadir}/locale' + AC_SUBST([localedir]) + + dnl Support for AM_XGETTEXT_OPTION. + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) + + AC_CONFIG_COMMANDS([po-directories], [[ + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done]], + [# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + ]) +]) + +dnl Postprocesses a Makefile in a directory containing PO files. +AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], +[ + # When this code is run, in config.status, two variables have already been + # set: + # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, + # - LINGUAS is the value of the environment variable LINGUAS at configure + # time. + +changequote(,)dnl + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + + # Find a way to echo strings without interpreting backslash. + if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='echo' + else + if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then + gt_echo='printf %s\n' + else + echo_func () { + cat < "$ac_file.tmp" + tab=`printf '\t'` + if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` + cat >> "$ac_file.tmp" < /dev/null; then + # Add dependencies that cannot be formulated as a simple suffix rule. + for lang in $ALL_LINGUAS; do + frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` + cat >> "$ac_file.tmp" <> "$ac_file.tmp" < +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +}]])], + [gt_cv_func_printf_posix=yes], + [gt_cv_func_printf_posix=no], + [ + AC_EGREP_CPP([notposix], [ +#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ + notposix +#endif + ], + [gt_cv_func_printf_posix="guessing no"], + [gt_cv_func_printf_posix="guessing yes"]) + ]) + ]) + case $gt_cv_func_printf_posix in + *yes) + AC_DEFINE([HAVE_POSIX_PRINTF], [1], + [Define if your printf() function supports format strings with positions.]) + ;; + esac +]) + +# progtest.m4 serial 7 (gettext-0.18.2) +dnl Copyright (C) 1996-2003, 2005, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. +dnl +dnl This file can can be used in projects which are not available under +dnl the GNU General Public License or the GNU Library General Public +dnl License but which still want to provide support for the GNU gettext +dnl functionality. +dnl Please note that the actual code of the GNU gettext library is covered +dnl by the GNU Library General Public License, and the rest of the GNU +dnl gettext package package is covered by the GNU General Public License. +dnl They are *not* in the public domain. + +dnl Authors: +dnl Ulrich Drepper , 1996. + +AC_PREREQ([2.50]) + +# Search path for a program which passes the given test. + +dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, +dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) +AC_DEFUN([AM_PATH_PROG_WITH_TEST], +[ +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "$2", so it can be a program name with args. +set dummy $2; ac_word=[$]2 +AC_MSG_CHECKING([for $ac_word]) +AC_CACHE_VAL([ac_cv_path_$1], +[case "[$]$1" in + [[\\/]]* | ?:[[\\/]]*) + ac_cv_path_$1="[$]$1" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in ifelse([$5], , $PATH, [$5]); do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD + if [$3]; then + ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" +dnl If no 4th arg is given, leave the cache variable unset, +dnl so AC_PATH_PROGS will keep looking. +ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" +])dnl + ;; +esac])dnl +$1="$ac_cv_path_$1" +if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then + AC_MSG_RESULT([$][$1]) +else + AC_MSG_RESULT([no]) +fi +AC_SUBST([$1])dnl +]) + +# size_max.m4 serial 10 +dnl Copyright (C) 2003, 2005-2006, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +AC_DEFUN([gl_SIZE_MAX], +[ + AC_CHECK_HEADERS([stdint.h]) + dnl First test whether the system already has SIZE_MAX. + AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ + gl_cv_size_max= + AC_EGREP_CPP([Found it], [ +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif +], [gl_cv_size_max=yes]) + if test -z "$gl_cv_size_max"; then + dnl Define it ourselves. Here we assume that the type 'size_t' is not wider + dnl than the type 'unsigned long'. Try hard to find a definition that can + dnl be used in a preprocessor #if, i.e. doesn't contain a cast. + AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], + [#include +#include ], [size_t_bits_minus_1=]) + AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], + [#include ], [fits_in_uint=]) + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + dnl Even though SIZE_MAX fits in an unsigned int, it must be of type + dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + extern size_t foo; + extern unsigned long foo; + ]], + [[]])], + [fits_in_uint=0]) + fi + dnl We cannot use 'expr' to simplify this expression, because 'expr' + dnl works only with 'long' integers in the host environment, while we + dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + dnl Shouldn't happen, but who knows... + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + ]) + if test "$gl_cv_size_max" != yes; then + AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], + [Define as the maximum value of type 'size_t', if the system doesn't define it.]) + fi + dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after + dnl . Remember that the #undef in AH_VERBATIM gets replaced with + dnl #define by AC_DEFINE_UNQUOTED. + AH_VERBATIM([SIZE_MAX], +[/* Define as the maximum value of type 'size_t', if the system doesn't define + it. */ +#ifndef SIZE_MAX +# undef SIZE_MAX +#endif]) +]) + +dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. +dnl Remove this when we can assume autoconf >= 2.61. +m4_ifdef([AC_COMPUTE_INT], [], [ + AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) +]) + +# stdint_h.m4 serial 9 +dnl Copyright (C) 1997-2004, 2006, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +# Define HAVE_STDINT_H_WITH_UINTMAX if exists, +# doesn't clash with , and declares uintmax_t. + +AC_DEFUN([gl_AC_HEADER_STDINT_H], +[ + AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + #include ]], + [[uintmax_t i = (uintmax_t) -1; return !i;]])], + [gl_cv_header_stdint_h=yes], + [gl_cv_header_stdint_h=no])]) + if test $gl_cv_header_stdint_h = yes; then + AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], + [Define if exists, doesn't clash with , + and declares uintmax_t. ]) + fi +]) + +# threadlib.m4 serial 10 (gettext-0.18.2) +dnl Copyright (C) 2005-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl gl_THREADLIB +dnl ------------ +dnl Tests for a multithreading library to be used. +dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO +dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the +dnl default is 'no', otherwise it is system dependent. In both cases, the user +dnl can change the choice through the options --enable-threads=choice or +dnl --disable-threads. +dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, +dnl USE_PTH_THREADS, USE_WINDOWS_THREADS +dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use +dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with +dnl libtool). +dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for +dnl programs that really need multithread functionality. The difference +dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak +dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread". +dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for +dnl multithread-safe programs. + +AC_DEFUN([gl_THREADLIB_EARLY], +[ + AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) +]) + +dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. + +AC_DEFUN([gl_THREADLIB_EARLY_BODY], +[ + dnl Ordering constraints: This macro modifies CPPFLAGS in a way that + dnl influences the result of the autoconf tests that test for *_unlocked + dnl declarations, on AIX 5 at least. Therefore it must come early. + AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl + AC_BEFORE([$0], [gl_ARGP])dnl + + AC_REQUIRE([AC_CANONICAL_HOST]) + dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. + dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes + dnl AC_GNU_SOURCE. + m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], + [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], + [AC_REQUIRE([AC_GNU_SOURCE])]) + dnl Check for multithreading. + m4_ifdef([gl_THREADLIB_DEFAULT_NO], + [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], + [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) + AC_ARG_ENABLE([threads], +AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ +AC_HELP_STRING([--disable-threads], [build without multithread safety])]), + [gl_use_threads=$enableval], + [if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else +changequote(,)dnl + case "$host_os" in + dnl Disable multithreading by default on OSF/1, because it interferes + dnl with fork()/exec(): When msgexec is linked with -lpthread, its + dnl child process gets an endless segmentation fault inside execvp(). + dnl Disable multithreading by default on Cygwin 1.5.x, because it has + dnl bugs that lead to endless loops or crashes. See + dnl . + osf*) gl_use_threads=no ;; + cygwin*) + case `uname -r` in + 1.[0-5].*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + ;; + *) gl_use_threads=yes ;; + esac +changequote([,])dnl + fi + ]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # For using : + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks . cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in . + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi +]) + +dnl The guts of gl_THREADLIB. Needs to be expanded only once. + +AC_DEFUN([gl_THREADLIB_BODY], +[ + AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + dnl Check whether the compiler and linker support weak declarations. + AC_CACHE_CHECK([whether imported symbols can be declared weak], + [gl_cv_have_weak], + [gl_cv_have_weak=no + dnl First, test whether the compiler accepts it syntactically. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[extern void xyzzy (); +#pragma weak xyzzy]], + [[xyzzy();]])], + [gl_cv_have_weak=maybe]) + if test $gl_cv_have_weak = maybe; then + dnl Second, test whether it actually works. On Cygwin 1.7.2, with + dnl gcc 4.3, symbols declared weak always evaluate to the address 0. + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +#pragma weak fputs +int main () +{ + return (fputs == NULL); +}]])], + [gl_cv_have_weak=yes], + [gl_cv_have_weak=no], + [dnl When cross-compiling, assume that only ELF platforms support + dnl weak symbols. + AC_EGREP_CPP([Extensible Linking Format], + [#ifdef __ELF__ + Extensible Linking Format + #endif + ], + [gl_cv_have_weak="guessing yes"], + [gl_cv_have_weak="guessing no"]) + ]) + fi + ]) + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. + AC_CHECK_HEADER([pthread.h], + [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[#include ]], + [[pthread_mutex_lock((pthread_mutex_t*)0); + pthread_mutexattr_init((pthread_mutexattr_t*)0);]])], + [gl_have_pthread=yes]) + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + AC_CHECK_LIB([pthread], [pthread_kill], + [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + case "$host_os" in + solaris* | hpux*) + AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], + [Define if the pthread_in_use() detection is hard.]) + esac + ]) + else + # Some library is needed. Try libpthread and libc_r. + AC_CHECK_LIB([pthread], [pthread_kill], + [gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + AC_CHECK_LIB([c_r], [pthread_kill], + [gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + AC_DEFINE([USE_POSIX_THREADS], [1], + [Define if the POSIX multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], + [Define if references to the POSIX multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM( + [[ +#include +#include + ]], + [[thr_self();]])], + [gl_have_solaristhread=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_SOLARIS_THREADS], [1], + [Define if the old Solaris multithreading library can be used.]) + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], + [Define if references to the old Solaris multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_LINKFLAGS([pth]) + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBPTH" + AC_LINK_IFELSE( + [AC_LANG_PROGRAM([[#include ]], [[pth_self();]])], + [gl_have_pth=yes]) + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + AC_DEFINE([USE_PTH_THREADS], [1], + [Define if the GNU Pth multithreading library can be used.]) + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + AC_DEFINE([USE_PTH_THREADS_WEAK], [1], + [Define if references to the GNU Pth multithreading library should be made weak.]) + LIBTHREAD= + LTLIBTHREAD= + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + case "$gl_use_threads" in + yes | windows | win32) # The 'win32' is for backward compatibility. + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=windows + AC_DEFINE([USE_WINDOWS_THREADS], [1], + [Define if the native Windows multithreading API can be used.]) + fi + ;; + esac + fi + fi + AC_MSG_CHECKING([for multithread API to use]) + AC_MSG_RESULT([$gl_threads_api]) + AC_SUBST([LIBTHREAD]) + AC_SUBST([LTLIBTHREAD]) + AC_SUBST([LIBMULTITHREAD]) + AC_SUBST([LTLIBMULTITHREAD]) +]) + +AC_DEFUN([gl_THREADLIB], +[ + AC_REQUIRE([gl_THREADLIB_EARLY]) + AC_REQUIRE([gl_THREADLIB_BODY]) +]) + + +dnl gl_DISABLE_THREADS +dnl ------------------ +dnl Sets the gl_THREADLIB default so that threads are not used by default. +dnl The user can still override it at installation time, by using the +dnl configure option '--enable-threads'. + +AC_DEFUN([gl_DISABLE_THREADS], [ + m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) +]) + + +dnl Survey of platforms: +dnl +dnl Platform Available Compiler Supports test-lock +dnl flavours option weak result +dnl --------------- --------- --------- -------- --------- +dnl Linux 2.4/glibc posix -lpthread Y OK +dnl +dnl GNU Hurd/glibc posix +dnl +dnl FreeBSD 5.3 posix -lc_r Y +dnl posix -lkse ? Y +dnl posix -lpthread ? Y +dnl posix -lthr Y +dnl +dnl FreeBSD 5.2 posix -lc_r Y +dnl posix -lkse Y +dnl posix -lthr Y +dnl +dnl FreeBSD 4.0,4.10 posix -lc_r Y OK +dnl +dnl NetBSD 1.6 -- +dnl +dnl OpenBSD 3.4 posix -lpthread Y OK +dnl +dnl Mac OS X 10.[123] posix -lpthread Y OK +dnl +dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK +dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK +dnl +dnl HP-UX 11 posix -lpthread N (cc) OK +dnl Y (gcc) +dnl +dnl IRIX 6.5 posix -lpthread Y 0.5 +dnl +dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK +dnl +dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK +dnl -lpthread (gcc) Y +dnl +dnl Cygwin posix -lpthread Y OK +dnl +dnl Any of the above pth -lpth 0.0 +dnl +dnl Mingw windows N OK +dnl +dnl BeOS 5 -- +dnl +dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is +dnl turned off: +dnl OK if all three tests terminate OK, +dnl 0.5 if the first test terminates OK but the second one loops endlessly, +dnl 0.0 if the first test already loops endlessly. + +# uintmax_t.m4 serial 12 +dnl Copyright (C) 1997-2004, 2007-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Paul Eggert. + +AC_PREREQ([2.13]) + +# Define uintmax_t to 'unsigned long' or 'unsigned long long' +# if it is not already defined in or . + +AC_DEFUN([gl_AC_TYPE_UINTMAX_T], +[ + AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) + AC_REQUIRE([gl_AC_HEADER_STDINT_H]) + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) + test $ac_cv_type_unsigned_long_long_int = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type], + [Define to unsigned long or unsigned long long + if and don't define.]) + else + AC_DEFINE([HAVE_UINTMAX_T], [1], + [Define if you have the 'uintmax_t' type in or .]) + fi +]) + +# visibility.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2005, 2008, 2010-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. + +dnl Tests whether the compiler supports the command-line option +dnl -fvisibility=hidden and the function and variable attributes +dnl __attribute__((__visibility__("hidden"))) and +dnl __attribute__((__visibility__("default"))). +dnl Does *not* test for __visibility__("protected") - which has tricky +dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on +dnl Mac OS X. +dnl Does *not* test for __visibility__("internal") - which has processor +dnl dependent semantics. +dnl Does *not* test for #pragma GCC visibility push(hidden) - which is +dnl "really only recommended for legacy code". +dnl Set the variable CFLAG_VISIBILITY. +dnl Defines and sets the variable HAVE_VISIBILITY. + +AC_DEFUN([gl_VISIBILITY], +[ + AC_REQUIRE([AC_PROG_CC]) + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + dnl First, check whether -Werror can be added to the command line, or + dnl whether it leads to an error because of some other option that the + dnl user has put into $CC $CFLAGS $CPPFLAGS. + AC_MSG_CHECKING([whether the -Werror option is usable]) + AC_CACHE_VAL([gl_cv_cc_vis_werror], [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM([[]], [[]])], + [gl_cv_cc_vis_werror=yes], + [gl_cv_cc_vis_werror=no]) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_vis_werror]) + dnl Now check whether visibility declarations are supported. + AC_MSG_CHECKING([for simple visibility declarations]) + AC_CACHE_VAL([gl_cv_cc_visibility], [ + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + dnl We use the option -Werror and a function dummyfunc, because on some + dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning + dnl "visibility attribute not supported in this configuration; ignored" + dnl at the first function definition in every compilation unit, and we + dnl don't want to use the option in this case. + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + ]], + [[]])], + [gl_cv_cc_visibility=yes], + [gl_cv_cc_visibility=no]) + CFLAGS="$gl_save_CFLAGS"]) + AC_MSG_RESULT([$gl_cv_cc_visibility]) + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + AC_SUBST([CFLAG_VISIBILITY]) + AC_SUBST([HAVE_VISIBILITY]) + AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], + [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) +]) + +# wchar_t.m4 serial 4 (gettext-0.18.2) +dnl Copyright (C) 2002-2003, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wchar_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WCHAR_T], +[ + AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[#include + wchar_t foo = (wchar_t)'\0';]], + [[]])], + [gt_cv_c_wchar_t=yes], + [gt_cv_c_wchar_t=no])]) + if test $gt_cv_c_wchar_t = yes; then + AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) + fi +]) + +# wint_t.m4 serial 5 (gettext-0.18.2) +dnl Copyright (C) 2003, 2007-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +dnl From Bruno Haible. +dnl Test whether has the 'wint_t' type. +dnl Prerequisite: AC_PROG_CC + +AC_DEFUN([gt_TYPE_WINT_T], +[ + AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], + [AC_COMPILE_IFELSE( + [AC_LANG_PROGRAM( + [[ +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0';]], + [[]])], + [gt_cv_c_wint_t=yes], + [gt_cv_c_wint_t=no])]) + if test $gt_cv_c_wint_t = yes; then + AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) + fi +]) + +# xsize.m4 serial 5 +dnl Copyright (C) 2003-2004, 2008-2013 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_XSIZE], +[ + dnl Prerequisites of lib/xsize.h. + AC_REQUIRE([gl_SIZE_MAX]) + AC_CHECK_HEADERS([stdint.h]) +]) + +m4_include([acinclude.m4]) diff --git a/config/config.guess b/config/config.guess new file mode 100755 index 0000000..c4bd827 --- /dev/null +++ b/config/config.guess @@ -0,0 +1,1456 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2016 Free Software Foundation, Inc. + +timestamp='2016-05-15' + +# This file is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, see . +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). +# +# Originally written by Per Bothner; maintained since 2000 by Ben Elliston. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess +# +# Please send patches to . + + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright 1992-2016 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" >&2 + exit 1 ;; + * ) + break ;; + esac +done + +if test $# != 0; then + echo "$me: too many arguments$help" >&2 + exit 1 +fi + +trap 'exit 1' 1 2 15 + +# CC_FOR_BUILD -- compiler used by this script. Note that the use of a +# compiler to aid in system detection is discouraged as it requires +# temporary files to be created and, as you can see below, it is a +# headache to deal with in a portable fashion. + +# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still +# use `HOST_CC' if defined, but it is deprecated. + +# Portable tmp directory creation inspired by the Autoconf team. + +set_cc_for_build=' +trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; +trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; +: ${TMPDIR=/tmp} ; + { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || + { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; +dummy=$tmp/dummy ; +tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; +case $CC_FOR_BUILD,$HOST_CC,$CC in + ,,) echo "int x;" > $dummy.c ; + for c in cc gcc c89 c99 ; do + if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then + CC_FOR_BUILD="$c"; break ; + fi ; + done ; + if test x"$CC_FOR_BUILD" = x ; then + CC_FOR_BUILD=no_compiler_found ; + fi + ;; + ,,*) CC_FOR_BUILD=$CC ;; + ,*,*) CC_FOR_BUILD=$HOST_CC ;; +esac ; set_cc_for_build= ;' + +# This is needed to find uname on a Pyramid OSx when run in the BSD universe. +# (ghazi@noc.rutgers.edu 1994-08-24) +if (test -f /.attbin/uname) >/dev/null 2>&1 ; then + PATH=$PATH:/.attbin ; export PATH +fi + +UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown +UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown +UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown +UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown + +case "${UNAME_SYSTEM}" in +Linux|GNU|GNU/*) + # If the system lacks a compiler, then just pick glibc. + # We could probably try harder. + LIBC=gnu + + eval $set_cc_for_build + cat <<-EOF > $dummy.c + #include + #if defined(__UCLIBC__) + LIBC=uclibc + #elif defined(__dietlibc__) + LIBC=dietlibc + #else + LIBC=gnu + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` + ;; +esac + +# Note: order is significant - the case branches are not exclusive. + +case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in + *:NetBSD:*:*) + # NetBSD (nbsd) targets should (where applicable) match one or + # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, + # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently + # switched to ELF, *-*-netbsd* would select the old + # object file format. This provides both forward + # compatibility and a consistent mechanism for selecting the + # object file format. + # + # Note: NetBSD doesn't particularly care about the vendor + # portion of the name. We always set it to "unknown". + sysctl="sysctl -n hw.machine_arch" + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` + case "${UNAME_MACHINE_ARCH}" in + armeb) machine=armeb-unknown ;; + arm*) machine=arm-unknown ;; + sh3el) machine=shl-unknown ;; + sh3eb) machine=sh-unknown ;; + sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently (or will in the future) and ABI. + case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; + arm*|i386|m68k|ns32k|sh3*|sparc|vax) + eval $set_cc_for_build + if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ELF__ + then + # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). + # Return netbsd for either. FIX? + os=netbsd + else + os=netbsdelf + fi + ;; + *) + os=netbsd + ;; + esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac + # The OS release + # Debian GNU/NetBSD machines have a different userland, and + # thus, need a distinct triplet. However, they do not need + # kernel version information, so it can be replaced with a + # suitable tag, in the style of linux-gnu. + case "${UNAME_VERSION}" in + Debian*) + release='-gnu' + ;; + *) + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` + ;; + esac + # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: + # contains redundant information, the shorter form: + # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. + echo "${machine}-${os}${release}${abi}" + exit ;; + *:Bitrig:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} + exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit ;; + *:SolidBSD:*:*) + echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} + exit ;; + macppc:MirBSD:*:*) + echo powerpc-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; + alpha:OSF1:*:*) + case $UNAME_RELEASE in + *4.0) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac + # According to Compaq, /usr/sbin/psrinfo has been available on + # OSF/1 and Tru64 systems produced since 1995. I hope that + # covers most systems running today. This code pipes the CPU + # types through head -n 1, so we only detect the type of CPU 0. + ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` + case "$ALPHA_CPU_TYPE" in + "EV4 (21064)") + UNAME_MACHINE=alpha ;; + "EV4.5 (21064)") + UNAME_MACHINE=alpha ;; + "LCA4 (21066/21068)") + UNAME_MACHINE=alpha ;; + "EV5 (21164)") + UNAME_MACHINE=alphaev5 ;; + "EV5.6 (21164A)") + UNAME_MACHINE=alphaev56 ;; + "EV5.6 (21164PC)") + UNAME_MACHINE=alphapca56 ;; + "EV5.7 (21164PC)") + UNAME_MACHINE=alphapca57 ;; + "EV6 (21264)") + UNAME_MACHINE=alphaev6 ;; + "EV6.7 (21264A)") + UNAME_MACHINE=alphaev67 ;; + "EV6.8CB (21264C)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8AL (21264B)") + UNAME_MACHINE=alphaev68 ;; + "EV6.8CX (21264D)") + UNAME_MACHINE=alphaev68 ;; + "EV6.9A (21264/EV69A)") + UNAME_MACHINE=alphaev69 ;; + "EV7 (21364)") + UNAME_MACHINE=alphaev7 ;; + "EV7.9 (21364A)") + UNAME_MACHINE=alphaev79 ;; + esac + # A Pn.n version is a patched version. + # A Vn.n version is a released version. + # A Tn.n version is a released field test version. + # A Xn.n version is an unreleased experimental baselevel. + # 1.2 uses "1.2" for uname -r. + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + # Reset EXIT trap before exiting to avoid spurious non-zero exit code. + exitcode=$? + trap '' 0 + exit $exitcode ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm*:riscos:*:*|arm*:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH=i386 + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH=x86_64 + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[4567]) + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else + IBM_ARCH=powerpc + fi + if [ -x /usr/bin/lslpp ] ; then + IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | + awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = hppa2.0w ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH=hppa2.0w + else + HP_ARCH=hppa64 + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + UNAME_PROCESSOR=`/usr/bin/uname -p` + case ${UNAME_PROCESSOR} in + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW64*:*) + echo ${UNAME_MACHINE}-pc-mingw64 + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + *:MSYS*:*) + echo ${UNAME_MACHINE}-pc-msys + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit ;; + *:GNU/*:*:*) + # other systems with GNU libc and userland + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit ;; + aarch64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + aarch64_be:Linux:*:*) + UNAME_MACHINE=aarch64_be + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arc:Linux:*:* | arceb:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + arm*:Linux:*:*) + eval $set_cc_for_build + if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_EABI__ + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + else + if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ + | grep -q __ARM_PCS_VFP + then + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi + else + echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf + fi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + cris:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + crisv32:Linux:*:*) + echo ${UNAME_MACHINE}-axis-linux-${LIBC} + exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + frv:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + hexagon:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + mips:Linux:*:* | mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=${UNAME_MACHINE}el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=${UNAME_MACHINE} + #else + CPU= + #endif + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` + test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } + ;; + openrisc*:Linux:*:*) + echo or1k-unknown-linux-${LIBC} + exit ;; + or32:Linux:*:* | or1k*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-${LIBC} + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-${LIBC} + exit ;; + parisc:Linux:*:* | hppa:Linux:*:*) + # Look for CPU level + case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; + PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; + *) echo hppa-unknown-linux-${LIBC} ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-${LIBC} + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-${LIBC} + exit ;; + ppc64le:Linux:*:*) + echo powerpc64le-unknown-linux-${LIBC} + exit ;; + ppcle:Linux:*:*) + echo powerpcle-unknown-linux-${LIBC} + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux-${LIBC} + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + tile*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-${LIBC} + exit ;; + x86_64:Linux:*:*) + echo ${UNAME_MACHINE}-pc-linux-${LIBC} + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configure will decide that + # this is a cross-build. + echo i586-pc-msdosdjgpp + exit ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit ;; + i860:*:4.*:*) # i860-SVR4 + if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then + echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 + else # Add other i860-SVR4 vendors below as they are discovered. + echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 + fi + exit ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit ;; + M68*:*:R3V[5678]*:*) + test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; + 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) + OS_REL='' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4; exit; } ;; + NCR*:*:4.2:* | MPRAS*:*:4.2:*) + OS_REL='.3' + test -r /etc/.relid \ + && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && { echo i486-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } + /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ + && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit ;; + *:SINIX-*:*:*) + if uname -p 2>/dev/null >/dev/null ; then + UNAME_MACHINE=`(uname -p) 2>/dev/null` + echo ${UNAME_MACHINE}-sni-sysv4 + else + echo ns32k-sni-sysv + fi + exit ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit ;; + *:*:*:FTX*) + # From seanf@swdc.stratus.com. + echo i860-stratus-sysv4 + exit ;; + i*86:VOS:*:*) + # From Paul.Green@stratus.com. + echo ${UNAME_MACHINE}-stratus-vos + exit ;; + *:VOS:*:*) + # From Paul.Green@stratus.com. + echo hppa1.1-stratus-vos + exit ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit ;; + R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) + if [ -d /usr/nec ]; then + echo mips-nec-sysv${UNAME_RELEASE} + else + echo mips-unknown-sysv${UNAME_RELEASE} + fi + exit ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit ;; + BePC:Haiku:*:*) # Haiku running on Intel PC compatible. + echo i586-pc-haiku + exit ;; + x86_64:Haiku:*:*) + echo x86_64-unknown-haiku + exit ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit ;; + SX-7:SUPER-UX:*:*) + echo sx7-nec-superux${UNAME_RELEASE} + exit ;; + SX-8:SUPER-UX:*:*) + echo sx8-nec-superux${UNAME_RELEASE} + exit ;; + SX-8R:SUPER-UX:*:*) + echo sx8r-nec-superux${UNAME_RELEASE} + exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit ;; + *:Darwin:*:*) + UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown + eval $set_cc_for_build + if test "$UNAME_PROCESSOR" = unknown ; then + UNAME_PROCESSOR=powerpc + fi + if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + case $UNAME_PROCESSOR in + i386) UNAME_PROCESSOR=x86_64 ;; + powerpc) UNAME_PROCESSOR=powerpc64 ;; + esac + fi + fi + elif test "$UNAME_PROCESSOR" = i386 ; then + # Avoid executing cc on OS X 10.9, as it ships with a stub + # that puts up a graphical alert prompting to install + # developer tools. Any system running Mac OS X 10.7 or + # later (Darwin 11 and later) is required to have a 64-bit + # processor. This is not true of the ARM version of Darwin + # that Apple uses in portable devices. + UNAME_PROCESSOR=x86_64 + fi + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit ;; + *:procnto*:*:* | *:QNX:[0123456789]*:*) + UNAME_PROCESSOR=`uname -p` + if test "$UNAME_PROCESSOR" = x86; then + UNAME_PROCESSOR=i386 + UNAME_MACHINE=pc + fi + echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} + exit ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit ;; + NEO-?:NONSTOP_KERNEL:*:*) + echo neo-tandem-nsk${UNAME_RELEASE} + exit ;; + NSE-*:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = 386; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; + x86_64:VMkernel:*:*) + echo ${UNAME_MACHINE}-unknown-esx + exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; +esac + +cat >&2 </dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/config.rpath b/config/config.rpath new file mode 100755 index 0000000..b625621 --- /dev/null +++ b/config/config.rpath @@ -0,0 +1,684 @@ +#! /bin/sh +# Output a system dependent set of variables, describing how to set the +# run time search path of shared libraries in an executable. +# +# Copyright 1996-2014 Free Software Foundation, Inc. +# Taken from GNU libtool, 2001 +# Originally by Gordon Matzigkeit , 1996 +# +# This file is free software; the Free Software Foundation gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# The first argument passed to this file is the canonical host specification, +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld +# should be set by the caller. +# +# The set of defined variables is at the end of this script. + +# Known limitations: +# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer +# than 256 bytes, otherwise the compiler driver will dump core. The only +# known workaround is to choose shorter directory names for the build +# directory and/or the installation directory. + +# All known linkers require a '.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a +shrext=.so + +host="$1" +host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + +# Code taken from libtool.m4's _LT_CC_BASENAME. + +for cc_temp in $CC""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` + +# Code taken from libtool.m4's _LT_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + mingw* | cygwin* | pw32* | os2* | cegcc*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + ecc*) + wl='-Wl,' + ;; + icc* | ifort*) + wl='-Wl,' + ;; + lf95*) + wl='-Wl,' + ;; + nagfor*) + wl='-Wl,-Wl,,' + ;; + pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + xl* | bgxl* | bgf* | mpixl*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ F* | *Sun*Fortran*) + wl= + ;; + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + newsos6) + ;; + *nto* | *qnx*) + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + case $cc_basename in + f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) + wl='-Qoption ld ' + ;; + *) + wl='-Wl,' + ;; + esac + ;; + sunos4*) + wl='-Qoption ld ' + ;; + sysv4 | sysv4.2uw2* | sysv4.3*) + wl='-Wl,' + ;; + sysv4*MP*) + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + wl='-Wl,' + ;; + unicos*) + wl='-Wl,' + ;; + uts4*) + ;; + esac +fi + +# Code taken from libtool.m4's _LT_LINKER_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; +esac + +ld_shlibs=yes +if test "$with_gnu_ld" = yes; then + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + # Unlike libtool, we use -rpath here, not --rpath, since the documented + # option of GNU ld is called -rpath, not --rpath. + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + case "$host_os" in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32* | cegcc*) + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + haiku*) + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + netbsd*) + ;; + solaris*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' + else + ld_shlibs=no + fi + ;; + esac + ;; + sunos4*) + hardcode_direct=yes + ;; + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + esac + if test "$ld_shlibs" = no; then + hardcode_libdir_flag_spec= + fi +else + case "$host_os" in + aix3*) + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + else + aix_use_runtimelinking=no + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + fi + hardcode_direct=yes + hardcode_libdir_separator=':' + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && \ + strings "$collect2name" | grep resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + fi + # Begin _LT_AC_SYS_LIBPATH_AIX. + echo 'int main () { return 0; }' > conftest.c + ${CC} ${LDFLAGS} conftest.c -o conftest + aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } +}'` + fi + if test -z "$aix_libpath"; then + aix_libpath="/usr/lib:/lib" + fi + rm -f conftest.c conftest + # End _LT_AC_SYS_LIBPATH_AIX. + if test "$aix_use_runtimelinking" = yes; then + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + else + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + fi + fi + ;; + amigaos*) + case "$host_cpu" in + powerpc) + ;; + m68k) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + libext=lib + ;; + darwin* | rhapsody*) + hardcode_direct=no + if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then + : + else + ld_shlibs=no + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd2.[01]*) + hardcode_direct=yes + hardcode_minus_L=yes + ;; + freebsd* | dragonfly*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + hpux9*) + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + hpux10*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + hpux11*) + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + ;; + *) + hardcode_direct=yes + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + irix5* | irix6* | nonstopux*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + netbsd*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + newsos6) + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + *nto* | *qnx*) + ;; + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + else + case "$host_os" in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + osf3*) + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + osf4* | osf5*) + if test "$GCC" = yes; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + # Both cc and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + hardcode_libdir_separator=: + ;; + solaris*) + hardcode_libdir_flag_spec='-R$libdir' + ;; + sunos4*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + ;; + sysv4) + case $host_vendor in + sni) + hardcode_direct=yes # is this really true??? + ;; + siemens) + hardcode_direct=no + ;; + motorola) + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + ;; + sysv4.3*) + ;; + sysv4*MP*) + if test -d /usr/nec; then + ld_shlibs=yes + fi + ;; + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + ;; + sysv5* | sco3.2v5* | sco5v6*) + hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' + hardcode_libdir_separator=':' + ;; + uts4*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + *) + ld_shlibs=no + ;; + esac +fi + +# Check dynamic linker characteristics +# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. +# Unlike libtool.m4, here we don't care about _all_ names of the library, but +# only about the one the linker finds when passed -lNAME. This is the last +# element of library_names_spec in libtool.m4, or possibly two of them if the +# linker has special search rules. +library_names_spec= # the last element of library_names_spec in libtool.m4 +libname_spec='lib$name' +case "$host_os" in + aix3*) + library_names_spec='$libname.a' + ;; + aix[4-9]*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + case "$host_cpu" in + powerpc*) + library_names_spec='$libname$shrext' ;; + m68k) + library_names_spec='$libname.a' ;; + esac + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32* | cegcc*) + shrext=.dll + library_names_spec='$libname.dll.a $libname.lib' + ;; + darwin* | rhapsody*) + shrext=.dylib + library_names_spec='$libname$shrext' + ;; + dgux*) + library_names_spec='$libname$shrext' + ;; + freebsd[23].*) + library_names_spec='$libname$shrext$versuffix' + ;; + freebsd* | dragonfly*) + library_names_spec='$libname$shrext' + ;; + gnu*) + library_names_spec='$libname$shrext' + ;; + haiku*) + library_names_spec='$libname$shrext' + ;; + hpux9* | hpux10* | hpux11*) + case $host_cpu in + ia64*) + shrext=.so + ;; + hppa*64*) + shrext=.sl + ;; + *) + shrext=.sl + ;; + esac + library_names_spec='$libname$shrext' + ;; + interix[3-9]*) + library_names_spec='$libname$shrext' + ;; + irix5* | irix6* | nonstopux*) + library_names_spec='$libname$shrext' + case "$host_os" in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; + *) libsuff= shlibsuff= ;; + esac + ;; + esac + ;; + linux*oldld* | linux*aout* | linux*coff*) + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + library_names_spec='$libname$shrext' + ;; + knetbsd*-gnu) + library_names_spec='$libname$shrext' + ;; + netbsd*) + library_names_spec='$libname$shrext' + ;; + newsos6) + library_names_spec='$libname$shrext' + ;; + *nto* | *qnx*) + library_names_spec='$libname$shrext' + ;; + openbsd*) + library_names_spec='$libname$shrext$versuffix' + ;; + os2*) + libname_spec='$name' + shrext=.dll + library_names_spec='$libname.a' + ;; + osf3* | osf4* | osf5*) + library_names_spec='$libname$shrext' + ;; + rdos*) + ;; + solaris*) + library_names_spec='$libname$shrext' + ;; + sunos4*) + library_names_spec='$libname$shrext$versuffix' + ;; + sysv4 | sysv4.3*) + library_names_spec='$libname$shrext' + ;; + sysv4*MP*) + library_names_spec='$libname$shrext' + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + library_names_spec='$libname$shrext' + ;; + tpf*) + library_names_spec='$libname$shrext' + ;; + uts4*) + library_names_spec='$libname$shrext' + ;; +esac + +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' +escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` +shlibext=`echo "$shrext" | sed -e 's,^\.,,'` +escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` +escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` + +LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that +# program. This Exception is an additional permission under section 7 +# of the GNU General Public License, version 3 ("GPLv3"). + + +# Please send patches to . +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub + +# This file is supposed to be the same for all GNU packages +# and recognize all the CPU types, system types and aliases +# that are meaningful with *any* GNU software. +# Each package is responsible for reporting which valid configurations +# it does not support. The user should be able to distinguish +# a failure to support a valid configuration from a meaningless +# configuration. + +# The goal of this file is to map all the various variations of a given +# machine specification into a single specification in the form: +# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM +# or in some cases, the newer four-part form: +# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM +# It is wrong to echo any other type of specification. + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright 1992-2016 Free Software Foundation, Inc. + +This is free software; see the source for copying conditions. There is NO +warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + +help=" +Try \`$me --help' for more information." + +# Parse command line +while test $# -gt 0 ; do + case $1 in + --time-stamp | --time* | -t ) + echo "$timestamp" ; exit ;; + --version | -v ) + echo "$version" ; exit ;; + --help | --h* | -h ) + echo "$usage"; exit ;; + -- ) # Stop option processing + shift; break ;; + - ) # Use stdin as input. + break ;; + -* ) + echo "$me: invalid option $1$help" + exit 1 ;; + + *local*) + # First pass through any local machine types. + echo $1 + exit ;; + + * ) + break ;; + esac +done + +case $# in + 0) echo "$me: missing argument$help" >&2 + exit 1;; + 1) ;; + *) echo "$me: too many arguments$help" >&2 + exit 1;; +esac + +# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). +# Here we must recognize all the valid KERNEL-OS combinations. +maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` +case $maybe_os in + nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ + linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + android-linux) + os=-linux-android + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown + ;; + *) + basic_machine=`echo $1 | sed 's/-[^-]*$//'` + if [ $basic_machine != $1 ] + then os=`echo $1 | sed 's/.*-/-/'` + else os=; fi + ;; +esac + +### Let's recognize common machines as not being operating systems so +### that things like config.sub decstation-3100 work. We also +### recognize some manufacturers as not being operating systems, so we +### can provide default operating systems below. +case $os in + -sun*os*) + # Prevent following clause from handling this invalid input. + ;; + -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ + -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ + -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ + -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ + -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ + -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ + -apple | -axis | -knuth | -cray | -microblaze*) + os= + basic_machine=$1 + ;; + -bluegene*) + os=-cnk + ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=-vxworks + basic_machine=$1 + ;; + -chorusos*) + os=-chorusos + basic_machine=$1 + ;; + -chorusrdb) + os=-chorusrdb + basic_machine=$1 + ;; + -hiux*) + os=-hiuxwe2 + ;; + -sco6) + os=-sco5v6 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5) + os=-sco3.2v5 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco4) + os=-sco3.2v4 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2.[4-9]*) + os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco3.2v[4-9]*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco5v6*) + # Don't forget version if it is 3.2v4 or newer. + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -sco*) + os=-sco3.2v2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -isc) + os=-isc2.2 + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -clix*) + basic_machine=clipper-intergraph + ;; + -isc*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; + -lynx*178) + os=-lynxos178 + ;; + -lynx*5) + os=-lynxos5 + ;; + -lynx*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | aarch64 | aarch64_be \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arceb \ + | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ + | avr | avr32 \ + | ba \ + | be32 | be64 \ + | bfin \ + | c4x | c8051 | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | hexagon \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | k1om \ + | le32 | le64 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64octeon | mips64octeonel \ + | mips64orion | mips64orionel \ + | mips64r5900 | mips64r5900el \ + | mips64vr | mips64vrel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mips64vr5900 | mips64vr5900el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa32r6 | mipsisa32r6el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64r6 | mipsisa64r6el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipsr5900 | mipsr5900el \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nds32 | nds32le | nds32be \ + | nios | nios2 | nios2eb | nios2el \ + | ns16k | ns32k \ + | open8 | or1k | or1knd | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pyramid \ + | riscv32 | riscv64 \ + | rl78 | rx \ + | score \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ + | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ + | spu \ + | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ + | visium \ + | we32k \ + | x86 | xc16x | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + c54x) + basic_machine=tic54x-unknown + ;; + c55x) + basic_machine=tic55x-unknown + ;; + c6x) + basic_machine=tic6x-unknown + ;; + leon|leon[3-9]) + basic_machine=sparc-$basic_machine + ;; + m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-unknown + ;; + + strongarm | thumb | xscale) + basic_machine=arm-unknown + ;; + xgate) + basic_machine=$basic_machine-unknown + os=-none + ;; + xscaleeb) + basic_machine=armeb-unknown + ;; + + xscaleel) + basic_machine=armel-unknown + ;; + + # We use `pc' rather than `unknown' + # because (1) that's what they normally are, and + # (2) the word "unknown" tends to confuse beginning users. + i*86 | x86_64) + basic_machine=$basic_machine-pc + ;; + # Object if more than one company name word. + *-*-*) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; + # Recognize the basic CPU types with company name. + 580-* \ + | a29k-* \ + | aarch64-* | aarch64_be-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | ba-* \ + | be32-* | be64-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* \ + | c8051-* | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | e2k-* | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | hexagon-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | k1om-* \ + | le32-* | le64-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | microblaze-* | microblazeel-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64octeon-* | mips64octeonel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64r5900-* | mips64r5900el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mips64vr5900-* | mips64vr5900el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa32r6-* | mipsisa32r6el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64r6-* | mipsisa64r6el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipsr5900-* | mipsr5900el-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nds32-* | nds32le-* | nds32be-* \ + | nios-* | nios2-* | nios2eb-* | nios2el-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | open8-* \ + | or1k*-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pyramid-* \ + | riscv32-* | riscv64-* \ + | rl78-* | romp-* | rs6000-* | rx-* \ + | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ + | sparclite-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ + | tahoe-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile*-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ + | vax-* \ + | visium-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + asmjs) + basic_machine=asmjs-unknown + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + blackfin) + basic_machine=bfin-unknown + os=-linux + ;; + blackfin-*) + basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; + c54x-*) + basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c55x-*) + basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c6x-*) + basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + cegcc) + basic_machine=arm-unknown + os=-cegcc + ;; + convex-c1) + basic_machine=c1-convex + os=-bsd + ;; + convex-c2) + basic_machine=c2-convex + os=-bsd + ;; + convex-c32) + basic_machine=c32-convex + os=-bsd + ;; + convex-c34) + basic_machine=c34-convex + os=-bsd + ;; + convex-c38) + basic_machine=c38-convex + os=-bsd + ;; + cray | j90) + basic_machine=j90-cray + os=-unicos + ;; + craynv) + basic_machine=craynv-cray + os=-unicosmp + ;; + cr16 | cr16-*) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + leon-*|leon[3-9]-*) + basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze*) + basic_machine=microblaze-xilinx + ;; + mingw64) + basic_machine=x86_64-pc + os=-mingw64 + ;; + mingw32) + basic_machine=i686-pc + os=-mingw32 + ;; + mingw32ce) + basic_machine=arm-unknown + os=-mingw32ce + ;; + miniframe) + basic_machine=m68000-convergent + ;; + *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; + mips3*-*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` + ;; + mips3*) + basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + moxiebox) + basic_machine=moxie-unknown + os=-moxiebox + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + msys) + basic_machine=i686-pc + os=-msys + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + nacl) + basic_machine=le32-unknown + os=-nacl + ;; + ncr3000) + basic_machine=i486-ncr + os=-sysv4 + ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-rebel + os=-linux + ;; + news | news700 | news800 | news900) + basic_machine=m68k-sony + os=-newsos + ;; + news1000) + basic_machine=m68030-sony + os=-newsos + ;; + news-3600 | risc-news) + basic_machine=mips-sony + os=-newsos + ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; + next | m*-next ) + basic_machine=m68k-next + case $os in + -nextstep* ) + ;; + -ns2*) + os=-nextstep2 + ;; + *) + os=-nextstep3 + ;; + esac + ;; + nh3000) + basic_machine=m68k-harris + os=-cxux + ;; + nh[45]000) + basic_machine=m88k-harris + os=-cxux + ;; + nindy960) + basic_machine=i960-intel + os=-nindy + ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; + nonstopux) + basic_machine=mips-compaq + os=-nonstopux + ;; + np1) + basic_machine=np1-gould + ;; + neo-tandem) + basic_machine=neo-tandem + ;; + nse-tandem) + basic_machine=nse-tandem + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc | ppcbe) basic_machine=powerpc-unknown + ;; + ppc-* | ppcbe-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle) + basic_machine=powerpcle-unknown + ;; + ppcle-* | powerpclittle-*) + basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64) basic_machine=powerpc64-unknown + ;; + ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppc64le | powerpc64little) + basic_machine=powerpc64le-unknown + ;; + ppc64le-* | powerpc64little-*) + basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ps2) + basic_machine=i386-ibm + ;; + pw32) + basic_machine=i586-unknown + os=-pw32 + ;; + rdos | rdos64) + basic_machine=x86_64-pc + os=-rdos + ;; + rdos32) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + strongarm-* | thumb-*) + basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + sun2) + basic_machine=m68000-sun + ;; + sun2os3) + basic_machine=m68000-sun + os=-sunos3 + ;; + sun2os4) + basic_machine=m68000-sun + os=-sunos4 + ;; + sun3os3) + basic_machine=m68k-sun + os=-sunos3 + ;; + sun3os4) + basic_machine=m68k-sun + os=-sunos4 + ;; + sun4os3) + basic_machine=sparc-sun + os=-sunos3 + ;; + sun4os4) + basic_machine=sparc-sun + os=-sunos4 + ;; + sun4sol2) + basic_machine=sparc-sun + os=-solaris2 + ;; + sun3 | sun3-*) + basic_machine=m68k-sun + ;; + sun4) + basic_machine=sparc-sun + ;; + sun386 | sun386i | roadrunner) + basic_machine=i386-sun + ;; + sv1) + basic_machine=sv1-cray + os=-unicos + ;; + symmetry) + basic_machine=i386-sequent + os=-dynix + ;; + t3e) + basic_machine=alphaev5-cray + os=-unicos + ;; + t90) + basic_machine=t90-cray + os=-unicos + ;; + tile*) + basic_machine=$basic_machine-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + xscale-* | xscalee[bl]-*) + basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* | -plan9* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -linux-newlib* | -linux-musl* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -nacl*) + ;; + -ios) + ;; + -none) + ;; + *) + # Get rid of the `-' at the beginning of $os. + os=`echo $os | sed 's/[^-]*-//'` + echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 + exit 1 + ;; +esac +else + +# Here we handle the default operating systems that come with various machines. +# The value should be what the vendor currently ships out the door with their +# machine or put another way, the most popular os provided with the machine. + +# Note that if you're going to try to match "-MANUFACTURER" here (say, +# "-sun"), then you have to tell the case statement up towards the top +# that MANUFACTURER isn't an operating system. Otherwise, code above +# will signal an error saying that MANUFACTURER isn't an operating +# system, and we'll never get to this point. + +case $basic_machine in + score-*) + os=-elf + ;; + spu-*) + os=-elf + ;; + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + c4x-* | tic4x-*) + os=-coff + ;; + c8051-*) + os=-elf + ;; + hexagon-*) + os=-elf + ;; + tic54x-*) + os=-coff + ;; + tic55x-*) + os=-coff + ;; + tic6x-*) + os=-coff + ;; + # This must come before the *-dec entry. + pdp10-*) + os=-tops20 + ;; + pdp11-*) + os=-none + ;; + *-dec | vax-*) + os=-ultrix4.2 + ;; + m68*-apollo) + os=-domain + ;; + i386-sun) + os=-sunos4.0.2 + ;; + m68000-sun) + os=-sunos3 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config/install-sh b/config/install-sh new file mode 100755 index 0000000..89fc9b0 --- /dev/null +++ b/config/install-sh @@ -0,0 +1,238 @@ +#! /bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. +# + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +tranformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff --git a/config/mkinstalldirs b/config/mkinstalldirs new file mode 100755 index 0000000..4f58503 --- /dev/null +++ b/config/mkinstalldirs @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.13 1999/01/05 03:18:55 bje Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff --git a/config/parse-types.sh b/config/parse-types.sh new file mode 100755 index 0000000..24d2a99 --- /dev/null +++ b/config/parse-types.sh @@ -0,0 +1,127 @@ +#!/bin/sh + +cat > sed.script << "EOF" +/^#/d +/^$/d +s/__extension__ // +s/typedef \(.*\) __u\([1-9]*\);/#define __U\2_TYPEDEF \1/ +s/typedef \(.*\) __s\([1-9]*\);/#define __S\2_TYPEDEF \1/ +EOF + +if test -z "$CC"; then + CC=gcc +fi + +if test -z "$CPP"; then + CPP="$CC -E" +fi + +/bin/echo -n "checking for __uNN types... " +# can't check [ -f /usr/include/asm/types.h ] directly, since +# the include path might be different if cross-compiling +if echo '#include ' | $CPP - 2> parse-types.log | \ + sed -f sed.script | grep '^#' > asm_types.h; then + echo "using " +else + echo "using generic types" +fi + +rm sed.script + +cp asm_types.h asm_types.c + +cat >> asm_types.c < +#include +int main(int argc, char **argv) +{ +#ifdef __U8_TYPEDEF + if (sizeof(__U8_TYPEDEF) != 1) { + printf("Sizeof(__U8__TYPEDEF) is %d should be 1\n", + (int) sizeof(__U8_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __U8_TYPEDEF not defined +#endif +#ifdef __S8_TYPEDEF + if (sizeof(__S8_TYPEDEF) != 1) { + printf("Sizeof(_S8__TYPEDEF) is %d should be 1\n", + (int) sizeof(__S8_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __S8_TYPEDEF not defined +#endif +#ifdef __U16_TYPEDEF + if (sizeof(__U16_TYPEDEF) != 2) { + printf("Sizeof(__U16__TYPEDEF) is %d should be 2\n", + (int) sizeof(__U16_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __U16_TYPEDEF not defined +#endif +#ifdef __S16_TYPEDEF + if (sizeof(__S16_TYPEDEF) != 2) { + printf("Sizeof(__S16__TYPEDEF) is %d should be 2\n", + (int) sizeof(__S16_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __S16_TYPEDEF not defined +#endif + +#ifdef __U32_TYPEDEF + if (sizeof(__U32_TYPEDEF) != 4) { + printf("Sizeof(__U32__TYPEDEF) is %d should be 4\n", + (int) sizeof(__U32_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __U32_TYPEDEF not defined +#endif +#ifdef __S32_TYPEDEF + if (sizeof(__S32_TYPEDEF) != 4) { + printf("Sizeof(__S32__TYPEDEF) is %d should be 4\n", + (int) sizeof(__S32_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __S32_TYPEDEF not defined +#endif + +#ifdef __U64_TYPEDEF + if (sizeof(__U64_TYPEDEF) != 8) { + printf("Sizeof(__U64__TYPEDEF) is %d should be 8\n", + (int) sizeof(__U64_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __U64_TYPEDEF not defined +#endif +#ifdef __S64_TYPEDEF + if (sizeof(__S64_TYPEDEF) != 8) { + printf("Sizeof(__S64__TYPEDEF) is %d should be 8\n", + (int) sizeof(__S64_TYPEDEF)); + exit(1); + } +#elif defined(__linux__) +#warning __S64_TYPEDEF not defined +#endif + return 0; +} +EOF + +${BUILD_CC-${CC-gcc}} -o asm_types asm_types.c +if ./asm_types +then + true +else + if [ "${CROSS_COMPILE}" != "1" ]; then + echo "Problem detected with asm_types.h" + echo "" > asm_types.h + fi +fi +rm asm_types.c asm_types + diff --git a/configure b/configure new file mode 100755 index 0000000..5f7b429 --- /dev/null +++ b/configure @@ -0,0 +1,15344 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.69. +# +# +# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# +# +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +# Use a proper internal environment variable to ensure we don't fall + # into an infinite loop, continuously re-executing ourselves. + if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then + _as_can_reexec=no; export _as_can_reexec; + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +as_fn_exit 255 + fi + # We don't want this to propagate to other subprocesses. + { _as_can_reexec=; unset _as_can_reexec;} +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1 +test -x / || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in #( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + export CONFIG_SHELL + # We cannot yet assume a decent shell, so we have to provide a +# neutralization value for shells without unset; and this also +# works around shells that cannot unset nonexistent variables. +# Preserve -v and -x to the replacement shell. +BASH_ENV=/dev/null +ENV=/dev/null +(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV +case $- in # (((( + *v*x* | *x*v* ) as_opts=-vx ;; + *v* ) as_opts=-v ;; + *x* ) as_opts=-x ;; + * ) as_opts= ;; +esac +exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} +# Admittedly, this is quite paranoid, since all the known shells bail +# out after a failed `exec'. +$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, +$0: including any error possibly output before this +$0: message. Then install a modern shell, or manually run +$0: the script under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # If we had to re-execute with $CONFIG_SHELL, we're ensured to have + # already done that, so ensure we don't try to do so again and fall + # in an infinite loop. This has already happened in practice. + _as_can_reexec=no; export _as_can_reexec + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIBOBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= +PACKAGE_URL= + +ac_unique_file="version.h" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +gt_needs= +ac_header_list= +gl_use_threads_default= +ac_func_list= +ac_subst_vars='LTLIBOBJS +LIBOBJS +LDFLAGS_SHLIB +CFLAGS_STLIB +CFLAGS_SHLIB +BUILD_LDFLAGS +BUILD_CFLAGS +MKINSTALLDIRS +INCLUDES +DO_TEST_SUITE +LDFLAGS_STATIC +root_sysconfdir +root_libdir +root_sbindir +root_bindir +root_prefix +UNIX_CMT +CYGWIN_CMT +LINUX_CMT +UNI_DIFF_OPTS +SEM_INIT_LIB +FUSE_CMT +FUSE_LIB +CLOCK_GETTIME_LIB +MAGIC_LIB +SOCKET_LIB +SIZEOF_TIME_T +SIZEOF_OFF_T +SIZEOF_LONG_LONG +SIZEOF_LONG +SIZEOF_INT +SIZEOF_SHORT +BUILD_CC +MAKEINFO +STRIP +AR +LDCONFIG +PERL +AWK +CHMOD +RM +CP +MV +LN_S +LN +ifNotGNUmake +ifGNUmake +BINARY_TYPE +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +INTL_LIBTOOL_SUFFIX_PREFIX +INTLOBJS +GENCAT +INSTOBJEXT +DATADIRNAME +CATOBJEXT +USE_INCLUDED_LIBINTL +BUILD_INCLUDED_LIBINTL +LTLIBC +WINDRES +WOE32 +WOE32DLL +HAVE_WPRINTF +HAVE_NEWLOCALE +HAVE_SNPRINTF +HAVE_ASPRINTF +HAVE_POSIX_PRINTF +INTL_DEFAULT_VERBOSITY +INTL_MACOSX_LIBS +GLIBC21 +INTLBISON +LTLIBICONV +LIBICONV +LTLIBMULTITHREAD +LIBMULTITHREAD +LTLIBTHREAD +LIBTHREAD +LIBPTH_PREFIX +LTLIBPTH +LIBPTH +PRI_MACROS_BROKEN +ALLOCA +HAVE_VISIBILITY +CFLAG_VISIBILITY +RANLIB +GLIBC2 +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +SED +MKDIR_P +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +SET_MAKE +VERSION +PACKAGE +GETTEXT_PACKAGE +TDB_MAN_COMMENT +TDB_CMT +UUIDD_CMT +E2INITRD_MAN +E2INITRD_PROG +FSCK_MAN +FSCK_PROG +DEFRAG_CMT +RESIZER_CMT +IMAGER_CMT +DEBUGFS_CMT +BLKID_CMT +DEPPROFILED_LIBBLKID +PROFILED_LIBBLKID +DEPSTATIC_LIBBLKID +STATIC_LIBBLKID +DEPLIBBLKID +LIBBLKID +UUID_CMT +DEPPROFILED_LIBUUID +PROFILED_LIBUUID +DEPSTATIC_LIBUUID +STATIC_LIBUUID +DEPLIBUUID +LIBUUID +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG +TEST_IO_CMT +PRIVATE_LIBS_CMT +LDFLAG_DYNAMIC +PROFILED_LIB_EXT +STATIC_LIB_EXT +LIB_EXT +PROFILE_CMT +BSDLIB_CMT +ELF_CMT +Q +ES +E +LINK_BUILD_FLAGS +SYMLINK_RELATIVE +LINK_INSTALL_FLAGS +MAINTAINER_CMT +EGREP +GREP +CPP +RDYNAMIC +DLOPEN_LIB +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +E2FSPROGS_PKGVER +E2FSPROGS_VERSION +E2FSPROGS_DAY +E2FSPROGS_MONTH +E2FSPROGS_YEAR +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +runstatedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='MCONFIG +MAKEFILE_ELF +MAKEFILE_BSDLIB +MAKEFILE_PROFILE +MAKEFILE_LIBRARY +ASM_TYPES_HEADER +PUBLIC_CONFIG_HEADER' +ac_user_opts=' +enable_option_checking +with_diet_libc +with_cc +with_ccopts +with_ldopts +with_root_prefix +enable_maintainer_mode +enable_symlink_install +enable_relative_symlinks +enable_symlink_relative_symlinks +enable_symlink_build +enable_verbose_makecmds +enable_elf_shlibs +enable_bsd_shlibs +enable_profile +enable_gcov +enable_hardening +enable_jbd_debug +enable_blkid_debug +enable_testio_debug +enable_libuuid +enable_libblkid +enable_backtrace +enable_debugfs +enable_imager +enable_resizer +enable_defrag +enable_fsck +enable_e2initrd_helper +enable_tls +enable_uuidd +enable_mmp +enable_tdb +enable_bmap_stats +enable_bmap_stats_ops +enable_nls +enable_threads +with_gnu_ld +enable_rpath +with_libpth_prefix +with_libiconv_prefix +with_included_gettext +with_libintl_prefix +enable_fuse2fs +with_multiarch +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir runstatedir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-maintainer-mode enable makefile rules useful for maintainers + --enable-symlink-install use symlinks when installing instead of hard links + --enable-relative-symlinks use relative symlinks when installing + + --enable-symlink-build use symlinks while building instead of hard links + --enable-verbose-makecmds enable verbose make command output + --enable-elf-shlibs select ELF shared libraries + --enable-bsd-shlibs select BSD shared libraries + --enable-profile build profiling libraries + --enable-gcov build for coverage testing using gcov + --enable-hardening build for coverage testing using gcov + --enable-jbd-debug enable journal debugging + --enable-blkid-debug enable blkid debugging + --disable-testio-debug disable the use of the test I/O manager for debugging + --enable-libuuid build and use private uuid library + --enable-libblkid build and use private blkid library + --disable-backtrace disable use backtrace + --disable-debugfs disable support of debugfs program + --disable-imager disable support of e2image program + --disable-resizer disable support of e2resize program + --disable-defrag disable support of e4defrag program + --enable-fsck build fsck wrapper program + --enable-e2initrd-helper build e2initrd-helper program + --disable-tls disable use of thread local support + --disable-uuidd disable building the uuid daemon + --disable-mmp disable support mmp, Multi Mount Protection + --disable-tdb disable tdb support + --disable-bmap-stats disable collection of bitmap stats. + --enable-bmap-stats-ops enable collection of additional bitmap stats + --disable-nls do not use Native Language Support + --enable-threads={posix|solaris|pth|windows} + specify multithreading API + --disable-threads build without multithread safety + --disable-rpath do not hardcode runtime library paths + --disable-fuse2fs do not build fuse2fs + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-diet-libc use diet libc + --with-cc no longer supported, use CC= instead + --with-ccopts no longer supported, use CFLAGS= instead + --with-ldopts no longer supported, use LDFLAGS= instead + --with-root-prefix=PREFIX override prefix variable for files to be placed in the root + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib + --without-libpth-prefix don't search for libpth in includedir and libdir + --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib + --without-libiconv-prefix don't search for libiconv in includedir and libdir + --with-included-gettext use the GNU gettext library included here + --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib + --without-libintl-prefix don't search for libintl in includedir and libdir + --with-multiarch=ARCH specify the multiarch triplet + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CPP C preprocessor + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to the package provider. +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +configure +generated by GNU Autoconf 2.69 + +Copyright (C) 2012 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +# ac_fn_c_try_compile LINENO +# -------------------------- +# Try to compile conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_compile + +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists, giving a warning if it cannot be compiled using +# the include files in INCLUDES and setting the cache variable VAR +# accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval \${$3+:} false; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_try_run LINENO +# ---------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes +# that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +# ------------------------------------------------------- +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +#include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_header_compile + +# ac_fn_c_check_type LINENO TYPE VAR INCLUDES +# ------------------------------------------- +# Tests whether TYPE exists after having included INCLUDES, setting cache +# variable VAR accordingly. +ac_fn_c_check_type () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof ($2)) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +if (sizeof (($2))) + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + eval "$3=yes" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_type + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES +# --------------------------------------------- +# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR +# accordingly. +ac_fn_c_check_decl () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + as_decl_name=`echo $2|sed 's/ *(.*//'` + as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +$as_echo_n "checking whether $as_decl_name is declared... " >&6; } +if eval \${$3+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +#ifndef $as_decl_name +#ifdef __cplusplus + (void) $as_decl_use; +#else + (void) $as_decl_name; +#endif +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_decl + +# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES +# -------------------------------------------- +# Tries to find the compile-time value of EXPR in a program that includes +# INCLUDES, setting VAR accordingly. Returns whether the value could be +# computed +ac_fn_c_compute_int () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if test "$cross_compiling" = yes; then + # Depending upon the size, compute the lo and hi bounds. +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=0 ac_mid=0 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid; break +else + as_fn_arith $ac_mid + 1 && ac_lo=$as_val + if test $ac_lo -le $ac_mid; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) < 0)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=-1 ac_mid=-1 + while :; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) >= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_lo=$ac_mid; break +else + as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val + if test $ac_mid -le $ac_hi; then + ac_lo= ac_hi= + break + fi + as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + done +else + ac_lo= ac_hi= +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +# Binary search between lo and hi bounds. +while test "x$ac_lo" != "x$ac_hi"; do + as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +int +main () +{ +static int test_array [1 - 2 * !(($2) <= $ac_mid)]; +test_array [0] = 0; +return test_array [0]; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_hi=$ac_mid +else + as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +done +case $ac_lo in #(( +?*) eval "$3=\$ac_lo"; ac_retval=0 ;; +'') ac_retval=1 ;; +esac + else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +static long int longval () { return $2; } +static unsigned long int ulongval () { return $2; } +#include +#include +int +main () +{ + + FILE *f = fopen ("conftest.val", "w"); + if (! f) + return 1; + if (($2) < 0) + { + long int i = longval (); + if (i != ($2)) + return 1; + fprintf (f, "%ld", i); + } + else + { + unsigned long int i = ulongval (); + if (i != ($2)) + return 1; + fprintf (f, "%lu", i); + } + /* Do not output a trailing newline, as this causes \r\n confusion + on some platforms. */ + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + echo >>conftest.val; read $3 &5 +$as_echo_n "checking for $2.$3... " >&6; } +if eval \${$4+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$5 +int +main () +{ +static $2 ac_aggr; +if (sizeof ac_aggr.$3) +return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$4=yes" +else + eval "$4=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$4 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_member +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +gt_needs="$gt_needs " +as_fn_append ac_header_list " stdlib.h" +as_fn_append ac_header_list " unistd.h" +as_fn_append ac_header_list " sys/param.h" +as_fn_append ac_func_list " symlink" +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + +ac_config_headers="$ac_config_headers lib/config.h" + + +MCONFIG=./MCONFIG + +BINARY_TYPE=bin +E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h \ + | awk '{print $3}' | tr \" " " | awk '{print $1}'` +DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \ + | tr \" " "` +E2FSPROGS_DAY=$(echo $DATE | awk -F- '{print $1}' | sed -e '/^[1-9]$/s/^/0/') +MONTH=`echo $DATE | awk -F- '{print $2}'` +YEAR=`echo $DATE | awk -F- '{print $3}'` + +if expr $YEAR ">" 1900 > /dev/null ; then + E2FSPROGS_YEAR=$YEAR +elif expr $YEAR ">" 90 >/dev/null ; then + E2FSPROGS_YEAR=19$YEAR +else + E2FSPROGS_YEAR=20$YEAR +fi + +case $MONTH in +Jan) MONTH_NUM=01; E2FSPROGS_MONTH="January" ;; +Feb) MONTH_NUM=02; E2FSPROGS_MONTH="February" ;; +Mar) MONTH_NUM=03; E2FSPROGS_MONTH="March" ;; +Apr) MONTH_NUM=04; E2FSPROGS_MONTH="April" ;; +May) MONTH_NUM=05; E2FSPROGS_MONTH="May" ;; +Jun) MONTH_NUM=06; E2FSPROGS_MONTH="June" ;; +Jul) MONTH_NUM=07; E2FSPROGS_MONTH="July" ;; +Aug) MONTH_NUM=08; E2FSPROGS_MONTH="August" ;; +Sep) MONTH_NUM=09; E2FSPROGS_MONTH="September" ;; +Oct) MONTH_NUM=10; E2FSPROGS_MONTH="October" ;; +Nov) MONTH_NUM=11; E2FSPROGS_MONTH="November" ;; +Dec) MONTH_NUM=12; E2FSPROGS_MONTH="December" ;; +*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unknown month $MONTH??" >&5 +$as_echo "$as_me: WARNING: Unknown month $MONTH??" >&2;} ;; +esac + +base_ver=`echo $E2FSPROGS_VERSION | \ + sed -e 's/-WIP//' -e 's/pre-//' -e 's/-PLUS//'` + +date_spec=${E2FSPROGS_YEAR}.${MONTH_NUM}.${E2FSPROGS_DAY} + +case $E2FSPROGS_VERSION in +*-WIP|pre-*) + E2FSPROGS_PKGVER="$base_ver~WIP.$date_spec" + ;; +*) + E2FSPROGS_PKGVER="$base_ver" + ;; +esac + +unset DATE MONTH YEAR base_ver pre_vers date_spec +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION" >&5 +$as_echo "Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&5 +$as_echo "Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}" >&6; } + + + + + +WITH_DIET_LIBC= + +# Check whether --with-diet-libc was given. +if test "${with_diet_libc+set}" = set; then : + withval=$with_diet_libc; CC="diet cc -nostdinc" +WITH_DIET_LIBC=yes +if test -z "$LIBS" +then + LIBS="-lcompat" +else + LIBS="$LIBS -lcompat" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: CC=$CC" >&5 +$as_echo "CC=$CC" >&6; } +fi +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if ${ac_cv_build+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if ${ac_cv_host+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +DLOPEN_LIB='' +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if ${ac_cv_objext+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if ${ac_cv_lib_dl_dlopen+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = xyes; then : + DLOPEN_LIB=-ldl +fi + + + +# Check whether --with-cc was given. +if test "${with_cc+set}" = set; then : + withval=$with_cc; as_fn_error $? "--with-cc no longer supported; use CC= instead" "$LINENO" 5 +fi + + +# Check whether --with-ccopts was given. +if test "${with_ccopts+set}" = set; then : + withval=$with_ccopts; as_fn_error $? "--with-ccopts no longer supported; use CFLAGS= instead" "$LINENO" 5 +fi + + +# Check whether --with-ldopts was given. +if test "${with_ldopts+set}" = set; then : + withval=$with_ldopts; as_fn_error $? "--with-ldopts no longer supported; use LDFLAGS= instead" "$LINENO" 5 +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if ${ac_cv_c_compiler_gnu+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if ${ac_cv_prog_cc_g+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if ${ac_cv_prog_cc_c89+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +struct stat; +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +if test "$GCC" = yes; then + RDYNAMIC="-rdynamic" + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if ${ac_cv_prog_CPP+:} false; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __STDC__ +# include +#else +# include +#endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for additional special compiler flags" >&5 +$as_echo_n "checking for additional special compiler flags... " >&6; } +if test "$GCC" = yes +then + case "$host_cpu" in + alpha) addcflags="-mieee" ;; + esac +fi +if test "x$addcflags" != x +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $addcflags" >&5 +$as_echo "$addcflags" >&6; } + CFLAGS="$addcflags $CFLAGS" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: (none)" >&5 +$as_echo "(none)" >&6; } +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if ${ac_cv_path_GREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if ${ac_cv_header_stdc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "#define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" +if test "x$ac_cv_header_minix_config_h" = xyes; then : + MINIX=yes +else + MINIX= +fi + + + if test "$MINIX" = yes; then + +$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h + + +$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h + + +$as_echo "#define _MINIX 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 +$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } +if ${ac_cv_safe_to_define___extensions__+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +# define __EXTENSIONS__ 1 + $ac_includes_default +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_safe_to_define___extensions__=yes +else + ac_cv_safe_to_define___extensions__=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 +$as_echo "$ac_cv_safe_to_define___extensions__" >&6; } + test $ac_cv_safe_to_define___extensions__ = yes && + $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h + + $as_echo "#define _ALL_SOURCE 1" >>confdefs.h + + $as_echo "#define _GNU_SOURCE 1" >>confdefs.h + + $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h + + $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h + + +LIB_EXT=.a +STATIC_LIB_EXT=.a +PROFILED_LIB_EXT=.a + +# Check whether --with-root-prefix was given. +if test "${with_root_prefix+set}" = set; then : + withval=$with_root_prefix; root_prefix=$withval +else + root_prefix=NONE +fi +# Check whether --enable-maintainer-mode was given. +if test "${enable_maintainer_mode+set}" = set; then : + enableval=$enable_maintainer_mode; if test "$enableval" = "no" +then + MAINTAINER_CMT=# + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling maintainer mode" >&5 +$as_echo "Disabling maintainer mode" >&6; } +else + MAINTAINER_CMT= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling maintainer mode" >&5 +$as_echo "Enabling maintainer mode" >&6; } +fi + +else + MAINTAINER_CMT=# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling maintainer mode by default" >&5 +$as_echo "Disabling maintainer mode by default" >&6; } + +fi + + +# Check whether --enable-symlink-install was given. +if test "${enable_symlink_install+set}" = set; then : + enableval=$enable_symlink_install; if test "$enableval" = "no" +then + LINK_INSTALL_FLAGS=-f + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling symlinks for install" >&5 +$as_echo "Disabling symlinks for install" >&6; } +else + LINK_INSTALL_FLAGS=-sf + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling symlinks for install" >&5 +$as_echo "Enabling symlinks for install" >&6; } +fi + +else + LINK_INSTALL_FLAGS=-f +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling symlinks for install by default" >&5 +$as_echo "Disabling symlinks for install by default" >&6; } + +fi + + +relative_symlink_defined= +# Check whether --enable-relative-symlinks was given. +if test "${enable_relative_symlinks+set}" = set; then : + enableval=$enable_relative_symlinks; if test "$enableval" = "no" +then + SYMLINK_RELATIVE= + relative_symlink_defined=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling relative symlinks for install" >&5 +$as_echo "Disabling relative symlinks for install" >&6; } +else + SYMLINK_RELATIVE=--relative + relative_symlink_defined=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling relative symlinks for install" >&5 +$as_echo "Enabling relative symlinks for install" >&6; } +fi +fi + +# Check whether --enable-symlink-relative-symlinks was given. +if test "${enable_symlink_relative_symlinks+set}" = set; then : + enableval=$enable_symlink_relative_symlinks; if test "$enableval" = "no" +then + SYMLINK_RELATIVE=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling relative symlinks for install" >&5 +$as_echo "Disabling relative symlinks for install" >&6; } +else + SYMLINK_RELATIVE=--relative + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling relative symlinks for install" >&5 +$as_echo "Enabling relative symlinks for install" >&6; } +fi + +else + if test -z "$relative_symlink_defined" +then + SYMLINK_RELATIVE= +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling relative symlinks for install by default" >&5 +$as_echo "Disabling relative symlinks for install by default" >&6; } +fi + +fi + + +# Check whether --enable-symlink-build was given. +if test "${enable_symlink_build+set}" = set; then : + enableval=$enable_symlink_build; if test "$enableval" = "no" +then + LINK_BUILD_FLAGS= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling symlinks for build" >&5 +$as_echo "Disabling symlinks for build" >&6; } +else + LINK_BUILD_FLAGS=-s + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling symlinks for build" >&5 +$as_echo "Enabling symlinks for build" >&6; } +fi + +else + LINK_BUILD_FLAGS= +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling symlinks for build by default" >&5 +$as_echo "Disabling symlinks for build by default" >&6; } + +fi + + +# Check whether --enable-verbose-makecmds was given. +if test "${enable_verbose_makecmds+set}" = set; then : + enableval=$enable_verbose_makecmds; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling verbose make commands" >&5 +$as_echo "Disabling verbose make commands" >&6; } + E=@echo + ES=echo + Q=@ +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling verbose make commands" >&5 +$as_echo "Enabling verbose make commands" >&6; } + E=@\\# + ES=\\# + Q= +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling verbose make commands" >&5 +$as_echo "Disabling verbose make commands" >&6; } +E=@echo +ES=echo +Q=@ + +fi + + + + +E2_PKG_CONFIG_STATIC=--static +LDFLAG_DYNAMIC= +PRIVATE_LIBS_CMT= +# Check whether --enable-elf-shlibs was given. +if test "${enable_elf_shlibs+set}" = set; then : + enableval=$enable_elf_shlibs; if test "$enableval" = "no" +then + ELF_CMT=# + MAKEFILE_ELF=/dev/null + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling ELF shared libraries" >&5 +$as_echo "Disabling ELF shared libraries" >&6; } +else + E2_PKG_CONFIG_STATIC= + ELF_CMT= + MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib + case "$host_os" in + solaris2.*) + MAKEFILE_ELF=$srcdir/lib/Makefile.solaris-lib + ;; + esac + BINARY_TYPE=elfbin + LIB_EXT=.so + PRIVATE_LIBS_CMT=# + LDFLAG_DYNAMIC='-Wl,-rpath-link,$(top_builddir)/lib' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling ELF shared libraries" >&5 +$as_echo "Enabling ELF shared libraries" >&6; } +fi + +else + MAKEFILE_ELF=/dev/null +ELF_CMT=# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling ELF shared libraries by default" >&5 +$as_echo "Disabling ELF shared libraries by default" >&6; } + +fi + + + +# Check whether --enable-bsd-shlibs was given. +if test "${enable_bsd_shlibs+set}" = set; then : + enableval=$enable_bsd_shlibs; if test "$enableval" = "no" +then + BSDLIB_CMT=# + MAKEFILE_BSDLIB=/dev/null + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling BSD shared libraries" >&5 +$as_echo "Disabling BSD shared libraries" >&6; } +else + E2_PKG_CONFIG_STATIC= + BSDLIB_CMT= + MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib + LIB_EXT=.so + case "$host_os" in + darwin*) + MAKEFILE_BSDLIB=$srcdir/lib/Makefile.darwin-lib + LIB_EXT=.dylib + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling BSD shared libraries" >&5 +$as_echo "Enabling BSD shared libraries" >&6; } +fi + +else + MAKEFILE_BSDLIB=/dev/null +BSDLIB_CMT=# +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling BSD shared libraries by default" >&5 +$as_echo "Disabling BSD shared libraries by default" >&6; } + +fi + + + +# Check whether --enable-profile was given. +if test "${enable_profile+set}" = set; then : + enableval=$enable_profile; if test "$enableval" = "no" +then + PROFILE_CMT=# + MAKEFILE_PROFILE=/dev/null + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling profiling libraries" >&5 +$as_echo "Disabling profiling libraries" >&6; } +else + PROFILE_CMT= + MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile + PROFILED_LIB_EXT=_p.a + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building profiling libraries" >&5 +$as_echo "Building profiling libraries" >&6; } +fi + +else + PROFILE_CMT=# +MAKEFILE_PROFILE=/dev/null +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling profiling libraries by default" >&5 +$as_echo "Disabling profiling libraries by default" >&6; } + +fi + + + +# Check whether --enable-gcov was given. +if test "${enable_gcov+set}" = set; then : + enableval=$enable_gcov; if test "$enableval" = "yes" +then + CFLAGS="-g -fprofile-arcs -ftest-coverage" + LDFLAGS="-fprofile-arcs -ftest-coverage" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling gcov support" >&5 +$as_echo "Enabling gcov support" >&6; } +fi + +fi + +CFLAGS_SHLIB="${CFLAGS_SHLIB:-$CFLAGS}" +CFLAGS_STLIB="${CFLAGS_STLIB:-$CFLAGS}" +LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS} +LDFLAGS_STATIC=${LDFLAGS_STATIC:-$LDFLAGS} +# Check whether --enable-hardening was given. +if test "${enable_hardening+set}" = set; then : + enableval=$enable_hardening; if test "$enableval" = "yes" +then + HARDEN_CFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" + HARDEN_LDFLAGS="-Wl,-z,relro -Wl,-z,now" + CFLAGS="$CFLAGS $HARDEN_CFLAGS -fPIE" + CFLAGS_SHLIB="$CFLAGS_SHLIB $HARDEN_CFLAGS" + CFLAGS_STLIB="$CFLAGS_STLIB $HARDEN_CFLAGS -fPIE" + LDFLAGS="$LDFLAGS $HARDEN_LDFLAGS -fPIE -pie" + LDFLAGS_STATIC="$LDFLAGS_STATIC $HARDEN_LDFLAGS" + LDFLAGS_SHLIB="$LDFLAGS_SHLIB $HARDEN_LDFLAGS" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling hardening support" >&5 +$as_echo "Enabling hardening support" >&6; } +fi + +fi + + + + + + +# Check whether --enable-jbd-debug was given. +if test "${enable_jbd_debug+set}" = set; then : + enableval=$enable_jbd_debug; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling journal debugging" >&5 +$as_echo "Disabling journal debugging" >&6; } +else + +$as_echo "#define CONFIG_JBD_DEBUG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling journal debugging" >&5 +$as_echo "Enabling journal debugging" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling journal debugging by default" >&5 +$as_echo "Disabling journal debugging by default" >&6; } + +fi + +# Check whether --enable-blkid-debug was given. +if test "${enable_blkid_debug+set}" = set; then : + enableval=$enable_blkid_debug; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling blkid debugging" >&5 +$as_echo "Disabling blkid debugging" >&6; } +else + +$as_echo "#define CONFIG_BLKID_DEBUG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling blkid debugging" >&5 +$as_echo "Enabling blkid debugging" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling blkid debugging by default" >&5 +$as_echo "Disabling blkid debugging by default" >&6; } + +fi + +# Check whether --enable-testio-debug was given. +if test "${enable_testio_debug+set}" = set; then : + enableval=$enable_testio_debug; +if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling testio debugging" >&5 +$as_echo "Disabling testio debugging" >&6; } + TEST_IO_CMT="#" +else + TEST_IO_CMT= + $as_echo "#define CONFIG_TESTIO_DEBUG 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling testio debugging" >&5 +$as_echo "Enabling testio debugging" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling testio debugging by default" >&5 +$as_echo "Enabling testio debugging by default" >&6; } +$as_echo "#define CONFIG_TESTIO_DEBUG 1" >>confdefs.h + +TEST_IO_CMT= + +fi + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi +LIBUUID= +DEPLIBUUID= +STATIC_LIBUUID= +DEPSTATIC_LIBUUID= +PROFILED_LIBUUID= +DEPPROFILED_LIBUUID= +UUID_CMT= +# Check whether --enable-libuuid was given. +if test "${enable_libuuid+set}" = set; then : + enableval=$enable_libuuid; if test "$enableval" = "no" +then + if test -z "$PKG_CONFIG"; then + as_fn_error $? "pkg-config not installed; please install it." "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if ${ac_cv_lib_uuid_uuid_generate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = xyes; then : + LIBUUID=`$PKG_CONFIG --libs uuid`; + STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid` +else + as_fn_error $? "external uuid library not found" "$LINENO" 5 +fi + + PROFILED_LIBUUID=$LIBUUID + UUID_CMT=# + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling private uuid library" >&5 +$as_echo "Disabling private uuid library" >&6; } +else + LIBUUID='$(LIB)/libuuid'$LIB_EXT + DEPLIBUUID=$LIBUUID + STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT + DEPSTATIC_LIBUUID=$STATIC_LIBUUID + PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT + DEPPROFILED_LIBUUID=$PROFILED_LIBUUID + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private uuid library" >&5 +$as_echo "Enabling private uuid library" >&6; } +fi + +else + if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 +$as_echo_n "checking for uuid_generate in -luuid... " >&6; } +if ${ac_cv_lib_uuid_uuid_generate+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char uuid_generate (); +int +main () +{ +return uuid_generate (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_uuid_uuid_generate=yes +else + ac_cv_lib_uuid_uuid_generate=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_uuid_uuid_generate" >&5 +$as_echo "$ac_cv_lib_uuid_uuid_generate" >&6; } +if test "x$ac_cv_lib_uuid_uuid_generate" = xyes; then : + LIBUUID=`$PKG_CONFIG --libs uuid`; + STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid` +fi + +fi +if test -n "$LIBUUID"; then + PROFILED_LIBUUID=$LIBUUID + UUID_CMT=# + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using system uuid by default" >&5 +$as_echo "Using system uuid by default" >&6; } +else + LIBUUID='$(LIB)/libuuid'$LIB_EXT + DEPLIBUUID=$LIBUUID + STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT + DEPSTATIC_LIBUUID=$STATIC_LIBUUID + PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT + DEPPROFILED_LIBUUID=$PROFILED_LIBUUID + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private uuid library by default" >&5 +$as_echo "Enabling private uuid library by default" >&6; } +fi + +fi + + + + + + + + + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +$as_echo "$PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +$as_echo "$ac_pt_PKG_CONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.9.0 + { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + PKG_CONFIG="" + fi +fi +LIBBLKID= +DEPLIBBLKID= +STATIC_LIBBLKID= +DEPSTATIC_LIBBLKID= +PROFILED_LIBBLKID= +DEPPROFILED_LIBBLKID= +BLKID_CMT= + +# Check whether --enable-libblkid was given. +if test "${enable_libblkid+set}" = set; then : + enableval=$enable_libblkid; if test "$enableval" = "no" +then + if test -z "$PKG_CONFIG"; then + as_fn_error $? "pkg-config not installed; please install it." "$LINENO" 5 + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_get_cache in -lblkid" >&5 +$as_echo_n "checking for blkid_get_cache in -lblkid... " >&6; } +if ${ac_cv_lib_blkid_blkid_get_cache+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lblkid -luuid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char blkid_get_cache (); +int +main () +{ +return blkid_get_cache (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_blkid_blkid_get_cache=yes +else + ac_cv_lib_blkid_blkid_get_cache=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_get_cache" >&5 +$as_echo "$ac_cv_lib_blkid_blkid_get_cache" >&6; } +if test "x$ac_cv_lib_blkid_blkid_get_cache" = xyes; then : + LIBBLKID=`$PKG_CONFIG --libs blkid`; + STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid` +else + as_fn_error $? "external blkid library not found" "$LINENO" 5 +fi + + BLKID_CMT=# + PROFILED_LIBBLKID=$LIBBLKID + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling private blkid library" >&5 +$as_echo "Disabling private blkid library" >&6; } +else + LIBBLKID='$(LIB)/libblkid'$LIB_EXT + DEPLIBBLKID=$LIBBLKID + STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT + DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID + PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT + DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID + $as_echo "#define CONFIG_BUILD_FINDFS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private blkid library" >&5 +$as_echo "Enabling private blkid library" >&6; } +fi + +else + if test -n "$PKG_CONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for blkid_get_cache in -lblkid" >&5 +$as_echo_n "checking for blkid_get_cache in -lblkid... " >&6; } +if ${ac_cv_lib_blkid_blkid_get_cache+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lblkid $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char blkid_get_cache (); +int +main () +{ +return blkid_get_cache (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_blkid_blkid_get_cache=yes +else + ac_cv_lib_blkid_blkid_get_cache=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_blkid_blkid_get_cache" >&5 +$as_echo "$ac_cv_lib_blkid_blkid_get_cache" >&6; } +if test "x$ac_cv_lib_blkid_blkid_get_cache" = xyes; then : + LIBBLKID=`$PKG_CONFIG --libs blkid`; + STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid` +fi + +fi +if test -n "$LIBBLKID"; then + BLKID_CMT=# + PROFILED_LIBBLKID=$LIBBLKID + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using system blkid library by default" >&5 +$as_echo "Using system blkid library by default" >&6; } +else + LIBBLKID='$(LIB)/libblkid'$LIB_EXT + DEPLIBBLKID=$LIBBLKID + STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT + DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID + PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT + DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID + $as_echo "#define CONFIG_BUILD_FINDFS 1" >>confdefs.h + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling private blkid library by default" >&5 +$as_echo "Enabling private blkid library by default" >&6; } +fi + +fi + + + + + + + + + +# Check whether --enable-backtrace was given. +if test "${enable_backtrace+set}" = set; then : + enableval=$enable_backtrace; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling use of backtrace" >&5 +$as_echo "Disabling use of backtrace" >&6; } + $as_echo "#define DISABLE_BACKTRACE 1" >>confdefs.h + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling use of backtrace" >&5 +$as_echo "Enabling use of backtrace" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling use of backtrace by default" >&5 +$as_echo "Enabling use of backtrace by default" >&6; } + +fi + +# Check whether --enable-debugfs was given. +if test "${enable_debugfs+set}" = set; then : + enableval=$enable_debugfs; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling debugfs support" >&5 +$as_echo "Disabling debugfs support" >&6; } + DEBUGFS_CMT="#" +else + DEBUGFS_CMT= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling debugfs support" >&5 +$as_echo "Enabling debugfs support" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling debugfs support by default" >&5 +$as_echo "Enabling debugfs support by default" >&6; } +DEBUGFS_CMT= + +fi + + +# Check whether --enable-imager was given. +if test "${enable_imager+set}" = set; then : + enableval=$enable_imager; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling e2image support" >&5 +$as_echo "Disabling e2image support" >&6; } + IMAGER_CMT="#" +else + IMAGER_CMT= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2image support" >&5 +$as_echo "Enabling e2image support" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2image support by default" >&5 +$as_echo "Enabling e2image support by default" >&6; } +IMAGER_CMT= + +fi + + +# Check whether --enable-resizer was given. +if test "${enable_resizer+set}" = set; then : + enableval=$enable_resizer; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling e2resize support" >&5 +$as_echo "Disabling e2resize support" >&6; } + RESIZER_CMT="#" +else + RESIZER_CMT= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2resize support" >&5 +$as_echo "Enabling e2resize support" >&6; } +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e2resize support by default" >&5 +$as_echo "Enabling e2resize support by default" >&6; } +RESIZER_CMT= + +fi + + +# Check whether --enable-defrag was given. +if test "${enable_defrag+set}" = set; then : + enableval=$enable_defrag; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling e4defrag support" >&5 +$as_echo "Disabling e4defrag support" >&6; } + DEFRAG_CMT="#" +else + DEFRAG_CMT= + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e4defrag support" >&5 +$as_echo "Enabling e4defrag support" >&6; } +fi + +else + if test -z "$WITH_DIET_LIBC" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling e4defrag support by default" >&5 +$as_echo "Enabling e4defrag support by default" >&6; } + DEFRAG_CMT= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling e4defrag support by default" >&5 +$as_echo "Disabling e4defrag support by default" >&6; } + DEFRAG_CMT="#" +fi + +fi + + +# Check whether --enable-fsck was given. +if test "${enable_fsck+set}" = set; then : + enableval=$enable_fsck; if test "$enableval" = "no" +then + FSCK_PROG='' FSCK_MAN='' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building fsck wrapper" >&5 +$as_echo "Not building fsck wrapper" >&6; } +else + FSCK_PROG=fsck FSCK_MAN=fsck.8 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building fsck wrapper" >&5 +$as_echo "Building fsck wrapper" >&6; } +fi + +else + case "$host_os" in + gnu*) + FSCK_PROG='' FSCK_MAN='' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building fsck wrapper by default" >&5 +$as_echo "Not building fsck wrapper by default" >&6; } + ;; + *) + FSCK_PROG=fsck FSCK_MAN=fsck.8 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building fsck wrapper by default" >&5 +$as_echo "Building fsck wrapper by default" >&6; } +esac + +fi + + + +# Check whether --enable-e2initrd-helper was given. +if test "${enable_e2initrd_helper+set}" = set; then : + enableval=$enable_e2initrd_helper; if test "$enableval" = "no" +then + E2INITRD_PROG='' E2INITRD_MAN='' + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building e2initrd helper" >&5 +$as_echo "Not building e2initrd helper" >&6; } +else + E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building e2initrd helper" >&5 +$as_echo "Building e2initrd helper" >&6; } +fi + +else + E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8 +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: Building e2initrd helper by default" >&5 +$as_echo "Building e2initrd helper by default" >&6; } + +fi + + + +# Check whether --enable-tls was given. +if test "${enable_tls+set}" = set; then : + enableval=$enable_tls; if test "$enableval" = "no" +then + try_tls="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling thread local support" >&5 +$as_echo "Disabling thread local support" >&6; } +else + try_tls="yes" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling thread local support" >&5 +$as_echo "Enabling thread local support" >&6; } +fi + +else + if test -n "$WITH_DIET_LIBC" +then + try_tls="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Diet libc does not support thread local support" >&5 +$as_echo "Diet libc does not support thread local support" >&6; } +else + try_tls="yes" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Try using thread local support by default" >&5 +$as_echo "Try using thread local support by default" >&6; } +fi + +fi + +if test "$try_tls" = "yes" +then + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for thread local storage (TLS) class" >&5 +$as_echo_n "checking for thread local storage (TLS) class... " >&6; } + if ${ac_cv_tls+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_tls_keywords="__thread __declspec(thread) none" + for ax_tls_keyword in $ax_tls_keywords; do + case $ax_tls_keyword in + none) ac_cv_tls=none ; break ;; + *) + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + static void + foo(void) { + static $ax_tls_keyword int bar; + exit(1); + } +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_tls=$ax_tls_keyword ; break +else + ac_cv_tls=none + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + esac + done + +fi + + + if test "$ac_cv_tls" != "none"; then + +cat >>confdefs.h <<_ACEOF +#define TLS $ac_cv_tls +_ACEOF + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_tls" >&5 +$as_echo "$ac_cv_tls" >&6; } + +fi + +# Check whether --enable-uuidd was given. +if test "${enable_uuidd+set}" = set; then : + enableval=$enable_uuidd; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Not building uuidd" >&5 +$as_echo "Not building uuidd" >&6; } + UUIDD_CMT="#" +else + $as_echo "#define USE_UUIDD 1" >>confdefs.h + + UUIDD_CMT="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd" >&5 +$as_echo "Building uuidd" >&6; } +fi + +else + $as_echo "#define USE_UUIDD 1" >>confdefs.h + +if test -z "$UUID_CMT" +then + UUIDD_CMT="" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Building uuidd by default" >&5 +$as_echo "Building uuidd by default" >&6; } +else + UUIDD_CMT="#" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling uuidd by default" >&5 +$as_echo "Disabling uuidd by default" >&6; } +fi + +fi + + + +# Check whether --enable-mmp was given. +if test "${enable_mmp+set}" = set; then : + enableval=$enable_mmp; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling mmp support" >&5 +$as_echo "Disabling mmp support" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support" >&5 +$as_echo "Enabling mmp support" >&6; } + $as_echo "#define CONFIG_MMP 1" >>confdefs.h + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support by default" >&5 +$as_echo "Enabling mmp support by default" >&6; } +$as_echo "#define CONFIG_MMP 1" >>confdefs.h + + +fi + + +# Check whether --enable-tdb was given. +if test "${enable_tdb+set}" = set; then : + enableval=$enable_tdb; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling tdb support" >&5 +$as_echo "Disabling tdb support" >&6; } + TDB_CMT="#" + TDB_MAN_COMMENT='.\"' +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling tdb support" >&5 +$as_echo "Enabling tdb support" >&6; } + $as_echo "#define CONFIG_TDB 1" >>confdefs.h + + TDB_CMT="" + TDB_MAN_COMMENT="" +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling mmp support by default" >&5 +$as_echo "Enabling mmp support by default" >&6; } +$as_echo "#define CONFIG_TDB 1" >>confdefs.h + +TDB_CMT="" +TDB_MAN_COMMENT="" + +fi + + + + +# Check whether --enable-bmap-stats was given. +if test "${enable_bmap_stats+set}" = set; then : + enableval=$enable_bmap_stats; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling bitmap statistics support" >&5 +$as_echo "Disabling bitmap statistics support" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling bitmap statistics support" >&5 +$as_echo "Enabling bitmap statistics support" >&6; } + $as_echo "#define ENABLE_BMAP_STATS 1" >>confdefs.h + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling bitmap statistics support by default" >&5 +$as_echo "Enabling bitmap statistics support by default" >&6; } +$as_echo "#define ENABLE_BMAP_STATS 1" >>confdefs.h + + +fi + + +# Check whether --enable-bmap-stats-ops was given. +if test "${enable_bmap_stats_ops+set}" = set; then : + enableval=$enable_bmap_stats_ops; if test "$enableval" = "no" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling additional bitmap statistics" >&5 +$as_echo "Disabling additional bitmap statistics" >&6; } +else + if test "x${enable_bmap_stats}" = "xno"; then : + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Error --enable-bmap-stats-ops requires bmap-stats +See \`config.log' for more details" "$LINENO" 5; } +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling additional bitmap statistics" >&5 +$as_echo "Enabling additional bitmap statistics" >&6; } + $as_echo "#define ENABLE_BMAP_STATS_OPS 1" >>confdefs.h + +fi + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling additional bitmap statistics by default" >&5 +$as_echo "Disabling additional bitmap statistics by default" >&6; } + +fi + +MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library + +GETTEXT_PACKAGE=e2fsprogs +PACKAGE=e2fsprogs +VERSION="$E2FSPROGS_VERSION" +VERSION=0.14.1 + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if ${ac_cv_path_install+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in #(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if ${ac_cv_path_mkdir+:} false; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_SED" || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 +$as_echo_n "checking whether NLS is requested... " >&6; } + # Check whether --enable-nls was given. +if test "${enable_nls+set}" = set; then : + enableval=$enable_nls; USE_NLS=$enableval +else + USE_NLS=yes +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + + + + + GETTEXT_MACRO_VERSION=0.18 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgfmt", so it can be a program name with args. +set dummy msgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGFMT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" + ;; +esac +fi +MSGFMT="$ac_cv_path_MSGFMT" +if test "$MSGFMT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 +$as_echo "$MSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + # Extract the first word of "gmsgfmt", so it can be a program name with args. +set dummy gmsgfmt; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_GMSGFMT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $GMSGFMT in + [\\/]* | ?:[\\/]*) + ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" + ;; +esac +fi +GMSGFMT=$ac_cv_path_GMSGFMT +if test -n "$GMSGFMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 +$as_echo "$GMSGFMT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; + *) MSGFMT_015=$MSGFMT ;; + esac + + case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; + *) GMSGFMT_015=$GMSGFMT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "xgettext", so it can be a program name with args. +set dummy xgettext; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_XGETTEXT+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$XGETTEXT" in + [\\/]* | ?:[\\/]*) + ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && + (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then + ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" + ;; +esac +fi +XGETTEXT="$ac_cv_path_XGETTEXT" +if test "$XGETTEXT" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 +$as_echo "$XGETTEXT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + rm -f messages.po + + case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in + '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; + *) XGETTEXT_015=$XGETTEXT ;; + esac + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +# Find out how to test for executable files. Don't use a zero-byte file, +# as systems may use methods other than mode bits to determine executability. +cat >conf$$.file <<_ASEOF +#! /bin/sh +exit 0 +_ASEOF +chmod +x conf$$.file +if test -x conf$$.file >/dev/null 2>&1; then + ac_executable_p="test -x" +else + ac_executable_p="test -f" +fi +rm -f conf$$.file + +# Extract the first word of "msgmerge", so it can be a program name with args. +set dummy msgmerge; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MSGMERGE+:} false; then : + $as_echo_n "(cached) " >&6 +else + case "$MSGMERGE" in + [\\/]* | ?:[\\/]*) + ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. + ;; + *) + ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$ac_save_IFS" + test -z "$ac_dir" && ac_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then + echo "$as_me: trying $ac_dir/$ac_word..." >&5 + if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then + ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" + break 2 + fi + fi + done + done + IFS="$ac_save_IFS" + test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" + ;; +esac +fi +MSGMERGE="$ac_cv_path_MSGMERGE" +if test "$MSGMERGE" != ":"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 +$as_echo "$MSGMERGE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$localedir" || localedir='${datadir}/locale' + + + test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= + + + ac_config_commands="$ac_config_commands po-directories" + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 +$as_echo_n "checking whether we are using the GNU C Library 2 or newer... " >&6; } +if ${ac_cv_gnu_library_2+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ >= 2) && !defined __UCLIBC__ + Lucky GNU user + #endif +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky GNU user" >/dev/null 2>&1; then : + ac_cv_gnu_library_2=yes +else + ac_cv_gnu_library_2=no +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5 +$as_echo "$ac_cv_gnu_library_2" >&6; } + + GLIBC2="$ac_cv_gnu_library_2" + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + + + + CFLAG_VISIBILITY= + HAVE_VISIBILITY=0 + if test -n "$GCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 +$as_echo_n "checking whether the -Werror option is usable... " >&6; } + if ${gl_cv_cc_vis_werror+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Werror" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_vis_werror=yes +else + gl_cv_cc_vis_werror=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 +$as_echo "$gl_cv_cc_vis_werror" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 +$as_echo_n "checking for simple visibility declarations... " >&6; } + if ${gl_cv_cc_visibility+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -fvisibility=hidden" + if test $gl_cv_cc_vis_werror = yes; then + CFLAGS="$CFLAGS -Werror" + fi + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern __attribute__((__visibility__("hidden"))) int hiddenvar; + extern __attribute__((__visibility__("default"))) int exportedvar; + extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); + extern __attribute__((__visibility__("default"))) int exportedfunc (void); + void dummyfunc (void) {} + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_cc_visibility=yes +else + gl_cv_cc_visibility=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS="$gl_save_CFLAGS" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 +$as_echo "$gl_cv_cc_visibility" >&6; } + if test $gl_cv_cc_visibility = yes; then + CFLAG_VISIBILITY="-fvisibility=hidden" + HAVE_VISIBILITY=1 + fi + fi + + + +cat >>confdefs.h <<_ACEOF +#define HAVE_VISIBILITY $HAVE_VISIBILITY +_ACEOF + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if ${ac_cv_c_inline+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_inline=no +for ac_kw in inline __inline__ __inline; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __cplusplus +typedef int foo_t; +static $ac_kw foo_t static_foo () {return 0; } +$ac_kw foo_t foo () {return 0; } +#endif + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_inline=$ac_kw +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + test "$ac_cv_c_inline" != no && break +done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 +$as_echo "$ac_cv_c_inline" >&6; } + +case $ac_cv_c_inline in + inline | yes) ;; + *) + case $ac_cv_c_inline in + no) ac_val=;; + *) ac_val=$ac_cv_c_inline;; + esac + cat >>confdefs.h <<_ACEOF +#ifndef __cplusplus +#define inline $ac_val +#endif +_ACEOF + ;; +esac + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = xyes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 +$as_echo_n "checking for stdint.h... " >&6; } +if ${gl_cv_header_stdint_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_stdint_h=yes +else + gl_cv_header_stdint_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 +$as_echo "$gl_cv_header_stdint_h" >&6; } + if test $gl_cv_header_stdint_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H_WITH_UINTMAX 1 +_ACEOF + + fi + +# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works +# for constant arguments. Useless! +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 +$as_echo_n "checking for working alloca.h... " >&6; } +if ${ac_cv_working_alloca_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +char *p = (char *) alloca (2 * sizeof (int)); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_working_alloca_h=yes +else + ac_cv_working_alloca_h=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 +$as_echo "$ac_cv_working_alloca_h" >&6; } +if test $ac_cv_working_alloca_h = yes; then + +$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 +$as_echo_n "checking for alloca... " >&6; } +if ${ac_cv_func_alloca_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __GNUC__ +# define alloca __builtin_alloca +#else +# ifdef _MSC_VER +# include +# define alloca _alloca +# else +# ifdef HAVE_ALLOCA_H +# include +# else +# ifdef _AIX + #pragma alloca +# else +# ifndef alloca /* predefined by HP cc +Olibcalls */ +void *alloca (size_t); +# endif +# endif +# endif +# endif +#endif + +int +main () +{ +char *p = (char *) alloca (1); + if (p) return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_func_alloca_works=yes +else + ac_cv_func_alloca_works=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 +$as_echo "$ac_cv_func_alloca_works" >&6; } + +if test $ac_cv_func_alloca_works = yes; then + +$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h + +else + # The SVR3 libPW and SVR4 libucb both contain incompatible functions +# that cause trouble. Some versions do not even contain alloca or +# contain a buggy version. If you still want to use their alloca, +# use ar to extract alloca.o from them instead of compiling alloca.c. + +ALLOCA=\${LIBOBJDIR}alloca.$ac_objext + +$as_echo "#define C_ALLOCA 1" >>confdefs.h + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 +$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } +if ${ac_cv_os_cray+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined CRAY && ! defined CRAY2 +webecray +#else +wenotbecray +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "webecray" >/dev/null 2>&1; then : + ac_cv_os_cray=yes +else + ac_cv_os_cray=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 +$as_echo "$ac_cv_os_cray" >&6; } +if test $ac_cv_os_cray = yes; then + for ac_func in _getb67 GETB67 getb67; do + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + +cat >>confdefs.h <<_ACEOF +#define CRAY_STACKSEG_END $ac_func +_ACEOF + + break +fi + + done +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 +$as_echo_n "checking stack direction for C alloca... " >&6; } +if ${ac_cv_c_stack_direction+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_c_stack_direction=0 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +find_stack_direction (int *addr, int depth) +{ + int dir, dummy = 0; + if (! addr) + addr = &dummy; + *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; + dir = depth ? find_stack_direction (addr, depth - 1) : 0; + return dir + dummy; +} + +int +main (int argc, char **argv) +{ + return find_stack_direction (0, argc + !argv + 20) < 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_stack_direction=1 +else + ac_cv_c_stack_direction=-1 +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 +$as_echo "$ac_cv_c_stack_direction" >&6; } +cat >>confdefs.h <<_ACEOF +#define STACK_DIRECTION $ac_cv_c_stack_direction +_ACEOF + + +fi + + + + + for ac_header in $ac_header_list +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + + + + + + + +for ac_func in getpagesize +do : + ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" +if test "x$ac_cv_func_getpagesize" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_GETPAGESIZE 1 +_ACEOF + +fi +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 +$as_echo_n "checking for working mmap... " >&6; } +if ${ac_cv_func_mmap_fixed_mapped+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_mmap_fixed_mapped=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + const char *cdata2; + int i, pagesize; + int fd, fd2; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 2; + if (write (fd, data, pagesize) != pagesize) + return 3; + close (fd); + + /* Next, check that the tail of a page is zero-filled. File must have + non-zero length, otherwise we risk SIGBUS for entire page. */ + fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd2 < 0) + return 4; + cdata2 = ""; + if (write (fd2, cdata2, 1) != 1) + return 5; + data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); + if (data2 == MAP_FAILED) + return 6; + for (i = 0; i < pagesize; ++i) + if (*(data2 + i)) + return 7; + close (fd2); + if (munmap (data2, pagesize)) + return 8; + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 9; + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 10; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 11; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 12; + if (read (fd, data3, pagesize) != pagesize) + return 13; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 14; + close (fd); + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_mmap_fixed_mapped=yes +else + ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +$as_echo "#define HAVE_MMAP 1" >>confdefs.h + +fi +rm -f conftest.mmap conftest.txt + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5 +$as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; } +if ${gt_cv_int_divbyzero_sigfpe+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gt_cv_int_divbyzero_sigfpe= + case "$host_os" in + macos* | darwin[6-9]* | darwin[1-9][0-9]*) + # On Mac OS X 10.2 or newer, just assume the same as when cross- + # compiling. If we were to perform the real test, 1 Crash Report + # dialog window would pop up. + case "$host_cpu" in + i[34567]86 | x86_64) + gt_cv_int_divbyzero_sigfpe="guessing yes" ;; + esac + ;; + esac + if test -z "$gt_cv_int_divbyzero_sigfpe"; then + if test "$cross_compiling" = yes; then : + + # Guess based on the CPU. + case "$host_cpu" in + alpha* | i[34567]86 | x86_64 | m68k | s390*) + gt_cv_int_divbyzero_sigfpe="guessing yes";; + *) + gt_cv_int_divbyzero_sigfpe="guessing no";; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +static void +sigfpe_handler (int sig) +{ + /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ + exit (sig != SIGFPE); +} + +int x = 1; +int y = 0; +int z; +int nan; + +int main () +{ + signal (SIGFPE, sigfpe_handler); +/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ +#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) + signal (SIGTRAP, sigfpe_handler); +#endif +/* Linux/SPARC yields signal SIGILL. */ +#if defined (__sparc__) && defined (__linux__) + signal (SIGILL, sigfpe_handler); +#endif + + z = x / y; + nan = y / y; + exit (2); +} + +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gt_cv_int_divbyzero_sigfpe=yes +else + gt_cv_int_divbyzero_sigfpe=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 +$as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; } + case "$gt_cv_int_divbyzero_sigfpe" in + *yes) value=1;; + *) value=0;; + esac + +cat >>confdefs.h <<_ACEOF +#define INTDIV0_RAISES_SIGFPE $value +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 +$as_echo_n "checking for inttypes.h... " >&6; } +if ${gl_cv_header_inttypes_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +uintmax_t i = (uintmax_t) -1; return !i; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gl_cv_header_inttypes_h=yes +else + gl_cv_header_inttypes_h=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 +$as_echo "$gl_cv_header_inttypes_h" >&6; } + if test $gl_cv_header_inttypes_h = yes; then + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H_WITH_UINTMAX 1 +_ACEOF + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 +$as_echo_n "checking for unsigned long long int... " >&6; } +if ${ac_cv_type_unsigned_long_long_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_type_unsigned_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + /* For now, do not test the preprocessor; as of 2007 there are too many + implementations with broken preprocessors. Perhaps this can + be revisited in 2012. In the meantime, code should not expect + #if to work with literals wider than 32 bits. */ + /* Test literals. */ + long long int ll = 9223372036854775807ll; + long long int nll = -9223372036854775807LL; + unsigned long long int ull = 18446744073709551615ULL; + /* Test constant expressions. */ + typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) + ? 1 : -1)]; + typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 + ? 1 : -1)]; + int i = 63; +int +main () +{ +/* Test availability of runtime routines for shift and division. */ + long long int llmax = 9223372036854775807ll; + unsigned long long int ullmax = 18446744073709551615ull; + return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) + | (llmax / ll) | (llmax % ll) + | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) + | (ullmax / ull) | (ullmax % ull)); + ; + return 0; +} + +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +else + ac_cv_type_unsigned_long_long_int=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 +$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } + if test $ac_cv_type_unsigned_long_long_int = yes; then + +$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h + + fi + + + + + if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then + + test $ac_cv_type_unsigned_long_long_int = yes \ + && ac_type='unsigned long long' \ + || ac_type='unsigned long' + +cat >>confdefs.h <<_ACEOF +#define uintmax_t $ac_type +_ACEOF + + else + +$as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h + + fi + + + for ac_header in inttypes.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H 1 +_ACEOF + +fi + +done + + if test $ac_cv_header_inttypes_h = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 +$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } +if ${gt_cv_inttypes_pri_broken+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef PRId32 +char *p = PRId32; +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_inttypes_pri_broken=no +else + gt_cv_inttypes_pri_broken=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 +$as_echo "$gt_cv_inttypes_pri_broken" >&6; } + fi + if test "$gt_cv_inttypes_pri_broken" = yes; then + +cat >>confdefs.h <<_ACEOF +#define PRI_MACROS_BROKEN 1 +_ACEOF + + PRI_MACROS_BROKEN=1 + else + PRI_MACROS_BROKEN=0 + fi + + + + + + + + # Check whether --enable-threads was given. +if test "${enable_threads+set}" = set; then : + enableval=$enable_threads; gl_use_threads=$enableval +else + if test -n "$gl_use_threads_default"; then + gl_use_threads="$gl_use_threads_default" + else + case "$host_os" in + osf*) gl_use_threads=no ;; + cygwin*) + case `uname -r` in + 1.[0-5].*) gl_use_threads=no ;; + *) gl_use_threads=yes ;; + esac + ;; + *) gl_use_threads=yes ;; + esac + fi + +fi + + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # For using : + case "$host_os" in + osf*) + # On OSF/1, the compiler needs the flag -D_REENTRANT so that it + # groks . cc also understands the flag -pthread, but + # we don't use it because 1. gcc-2.95 doesn't understand -pthread, + # 2. putting a flag into CPPFLAGS that has an effect on the linker + # causes the AC_LINK_IFELSE test below to succeed unexpectedly, + # leading to wrong values of LIBTHREAD and LTLIBTHREAD. + CPPFLAGS="$CPPFLAGS -D_REENTRANT" + ;; + esac + # Some systems optimize for single-threaded programs by default, and + # need special flags to disable these optimizations. For example, the + # definition of 'errno' in . + case "$host_os" in + aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; + solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; + esac + fi + + + + + + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" + + + +# Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which + # contains only /bin. Note that ksh looks also at the FPATH variable, + # so we have to set that as well for the test. + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ + || PATH_SEPARATOR=';' + } +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` + while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if ${acl_cv_path_LD+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$acl_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if ${acl_cv_prog_gnu_ld+:} false; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$acl_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$acl_cv_prog_gnu_ld + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 +$as_echo_n "checking for shared library run path origin... " >&6; } +if ${acl_cv_rpath+:} false; then : + $as_echo_n "(cached) " >&6 +else + + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 +$as_echo "$acl_cv_rpath" >&6; } + wl="$acl_cv_wl" + acl_libext="$acl_cv_libext" + acl_shlibext="$acl_cv_shlibext" + acl_libname_spec="$acl_cv_libname_spec" + acl_library_names_spec="$acl_cv_library_names_spec" + acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + acl_hardcode_direct="$acl_cv_hardcode_direct" + acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" + # Check whether --enable-rpath was given. +if test "${enable_rpath+set}" = set; then : + enableval=$enable_rpath; : +else + enable_rpath=yes +fi + + + + + acl_libdirstem=lib + acl_libdirstem2= + case "$host_os" in + solaris*) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 +$as_echo_n "checking for 64-bit host... " >&6; } +if ${gl_cv_solaris_64bit+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#ifdef _LP64 +sixtyfour bits +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "sixtyfour bits" >/dev/null 2>&1; then : + gl_cv_solaris_64bit=yes +else + gl_cv_solaris_64bit=no +fi +rm -f conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 +$as_echo "$gl_cv_solaris_64bit" >&6; } + if test $gl_cv_solaris_64bit = yes; then + acl_libdirstem=lib/64 + case "$host_cpu" in + sparc*) acl_libdirstem2=lib/sparcv9 ;; + i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; + esac + fi + ;; + *) + searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` + if test -n "$searchpath"; then + acl_save_IFS="${IFS= }"; IFS=":" + for searchdir in $searchpath; do + if test -d "$searchdir"; then + case "$searchdir" in + */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; + */../ | */.. ) + # Better ignore directories of this form. They are misleading. + ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + fi + ;; + esac + test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" + + + + gl_threads_api=none + LIBTHREAD= + LTLIBTHREAD= + LIBMULTITHREAD= + LTLIBMULTITHREAD= + if test "$gl_use_threads" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 +$as_echo_n "checking whether imported symbols can be declared weak... " >&6; } +if ${gl_cv_have_weak+:} false; then : + $as_echo_n "(cached) " >&6 +else + gl_cv_have_weak=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +extern void xyzzy (); +#pragma weak xyzzy +int +main () +{ +xyzzy(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_cv_have_weak=maybe +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test $gl_cv_have_weak = maybe; then + if test "$cross_compiling" = yes; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifdef __ELF__ + Extensible Linking Format + #endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : + gl_cv_have_weak="guessing yes" +else + gl_cv_have_weak="guessing no" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#pragma weak fputs +int main () +{ + return (fputs == NULL); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_have_weak=yes +else + gl_cv_have_weak=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 +$as_echo "$gl_cv_have_weak" >&6; } + if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then + # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that + # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. + ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = xyes; then : + gl_have_pthread_h=yes +else + gl_have_pthread_h=no +fi + + + if test "$gl_have_pthread_h" = yes; then + # Other possible tests: + # -lpthreads (FSU threads, PCthreads) + # -lgthreads + gl_have_pthread= + # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist + # in libc. IRIX 6.5 has the first one in both libc and libpthread, but + # the second one only in libpthread, and lock.c needs it. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pthread_mutex_lock((pthread_mutex_t*)0); + pthread_mutexattr_init((pthread_mutexattr_t*)0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_have_pthread=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + # Test for libpthread by looking for pthread_kill. (Not pthread_self, + # since it is defined as a macro on OSF/1.) + if test -n "$gl_have_pthread"; then + # The program links fine without libpthread. But it may actually + # need to link with libpthread in order to create multiple threads. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread + # On Solaris and HP-UX, most pthread functions exist also in libc. + # Therefore pthread_in_use() needs to actually try to create a + # thread: pthread_create from libc will fail, whereas + # pthread_create will actually create a thread. + case "$host_os" in + solaris* | hpux*) + +$as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h + + esac + +fi + + else + # Some library is needed. Try libpthread and libc_r. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 +$as_echo_n "checking for pthread_kill in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_pthread_kill=yes +else + ac_cv_lib_pthread_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 +$as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } +if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : + gl_have_pthread=yes + LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread + LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread +fi + + if test -z "$gl_have_pthread"; then + # For FreeBSD 4. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 +$as_echo_n "checking for pthread_kill in -lc_r... " >&6; } +if ${ac_cv_lib_c_r_pthread_kill+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lc_r $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pthread_kill (); +int +main () +{ +return pthread_kill (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_c_r_pthread_kill=yes +else + ac_cv_lib_c_r_pthread_kill=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 +$as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } +if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : + gl_have_pthread=yes + LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r + LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r +fi + + fi + fi + if test -n "$gl_have_pthread"; then + gl_threads_api=posix + +$as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h + + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +$as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + fi + if test -z "$gl_have_pthread"; then + if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then + gl_have_solaristhread= + gl_save_LIBS="$LIBS" + LIBS="$LIBS -lthread" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +thr_self(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_have_solaristhread=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + if test -n "$gl_have_solaristhread"; then + gl_threads_api=solaris + LIBTHREAD=-lthread + LTLIBTHREAD=-lthread + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + +$as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h + + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +$as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + fi + fi + fi + fi + if test "$gl_use_threads" = pth; then + gl_save_CPPFLAGS="$CPPFLAGS" + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 +$as_echo_n "checking how to link with libpth... " >&6; } +if ${ac_cv_libpth_libs+:} false; then : + $as_echo_n "(cached) " >&6 +else + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libpth-prefix was given. +if test "${with_libpth_prefix+set}" = set; then : + withval=$with_libpth_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBPTH= + LTLIBPTH= + INCPTH= + LIBPTH_PREFIX= + HAVE_LIBPTH= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='pth ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'pth'; then + LIBPTH_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'pth'; then + LIBPTH_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBPTH; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" + ;; + esac + done + fi + else + LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" + done + fi + + + + + + + ac_cv_libpth_libs="$LIBPTH" + ac_cv_libpth_ltlibs="$LTLIBPTH" + ac_cv_libpth_cppflags="$INCPTH" + ac_cv_libpth_prefix="$LIBPTH_PREFIX" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 +$as_echo "$ac_cv_libpth_libs" >&6; } + LIBPTH="$ac_cv_libpth_libs" + LTLIBPTH="$ac_cv_libpth_ltlibs" + INCPTH="$ac_cv_libpth_cppflags" + LIBPTH_PREFIX="$ac_cv_libpth_prefix" + + for element in $INCPTH; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + + + HAVE_LIBPTH=yes + + + + gl_have_pth= + gl_save_LIBS="$LIBS" + LIBS="$LIBS $LIBPTH" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +pth_self(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gl_have_pth=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gl_save_LIBS" + if test -n "$gl_have_pth"; then + gl_threads_api=pth + LIBTHREAD="$LIBPTH" + LTLIBTHREAD="$LTLIBPTH" + LIBMULTITHREAD="$LIBTHREAD" + LTLIBMULTITHREAD="$LTLIBTHREAD" + +$as_echo "#define USE_PTH_THREADS 1" >>confdefs.h + + if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then + if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then + +$as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h + + LIBTHREAD= + LTLIBTHREAD= + fi + fi + else + CPPFLAGS="$gl_save_CPPFLAGS" + fi + fi + if test -z "$gl_have_pthread"; then + case "$gl_use_threads" in + yes | windows | win32) # The 'win32' is for backward compatibility. + if { case "$host_os" in + mingw*) true;; + *) false;; + esac + }; then + gl_threads_api=windows + +$as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h + + fi + ;; + esac + fi + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 +$as_echo_n "checking for multithread API to use... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 +$as_echo "$gl_threads_api" >&6; } + + + + + + + + + + + + if test "$gl_threads_api" = posix; then + # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the + # pthread_rwlock_* functions. + ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include +" +if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : + +$as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h + +fi + + # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + #include +int +main () +{ + +#if __FreeBSD__ == 4 +error "No, in FreeBSD 4.0 recursive mutexes actually don't work." +#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ + && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) +error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." +#else +int x = (int)PTHREAD_MUTEX_RECURSIVE; +return !x; +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +$as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + : + + + + + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libiconv-prefix was given. +if test "${with_libiconv_prefix+set}" = set; then : + withval=$with_libiconv_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + HAVE_LIBICONV= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='iconv ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'iconv'; then + LIBICONV_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBICONV; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" + ;; + esac + done + fi + else + LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" + done + fi + + + + + + + + + + + + + am_save_CPPFLAGS="$CPPFLAGS" + + for element in $INCICONV; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 +$as_echo_n "checking for iconv... " >&6; } +if ${am_cv_func_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_cv_func_iconv="no, consider installing GNU libiconv" + am_cv_lib_iconv=no + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if test "$am_cv_func_iconv" != yes; then + am_save_LIBS="$LIBS" + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include + +int +main () +{ +iconv_t cd = iconv_open("",""); + iconv(cd,NULL,NULL,NULL,NULL); + iconv_close(cd); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_lib_iconv=yes + am_cv_func_iconv=yes +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$am_save_LIBS" + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 +$as_echo "$am_cv_func_iconv" >&6; } + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 +$as_echo_n "checking for working iconv... " >&6; } +if ${am_cv_func_iconv_works+:} false; then : + $as_echo_n "(cached) " >&6 +else + + am_save_LIBS="$LIBS" + if test $am_cv_lib_iconv = yes; then + LIBS="$LIBS $LIBICONV" + fi + if test "$cross_compiling" = yes; then : + + case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +int main () +{ + int result = 0; + /* Test against AIX 5.1 bug: Failures are not distinguishable from successful + returns. */ + { + iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); + if (cd_utf8_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\342\202\254"; /* EURO SIGN */ + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_utf8_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 1; + iconv_close (cd_utf8_to_88591); + } + } + /* Test against Solaris 10 bug: Failures are not distinguishable from + successful returns. */ + { + iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); + if (cd_ascii_to_88591 != (iconv_t)(-1)) + { + static const char input[] = "\263"; + char buf[10]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_ascii_to_88591, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res == 0) + result |= 2; + iconv_close (cd_ascii_to_88591); + } + } + /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304"; + static char buf[2] = { (char)0xDE, (char)0xAD }; + const char *inptr = input; + size_t inbytesleft = 1; + char *outptr = buf; + size_t outbytesleft = 1; + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) + result |= 4; + iconv_close (cd_88591_to_utf8); + } + } +#if 0 /* This bug could be worked around by the caller. */ + /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ + { + iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); + if (cd_88591_to_utf8 != (iconv_t)(-1)) + { + static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; + char buf[50]; + const char *inptr = input; + size_t inbytesleft = strlen (input); + char *outptr = buf; + size_t outbytesleft = sizeof (buf); + size_t res = iconv (cd_88591_to_utf8, + (char **) &inptr, &inbytesleft, + &outptr, &outbytesleft); + if ((int)res > 0) + result |= 8; + iconv_close (cd_88591_to_utf8); + } + } +#endif + /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is + provided. */ + if (/* Try standardized names. */ + iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) + /* Try IRIX, OSF/1 names. */ + && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) + /* Try AIX names. */ + && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) + /* Try HP-UX names. */ + && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) + result |= 16; + return result; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + am_cv_func_iconv_works=yes +else + am_cv_func_iconv_works=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + LIBS="$am_save_LIBS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 +$as_echo "$am_cv_func_iconv_works" >&6; } + case "$am_cv_func_iconv_works" in + *no) am_func_iconv=no am_cv_lib_iconv=no ;; + *) am_func_iconv=yes ;; + esac + else + am_func_iconv=no am_cv_lib_iconv=no + fi + if test "$am_func_iconv" = yes; then + +$as_echo "#define HAVE_ICONV 1" >>confdefs.h + + fi + if test "$am_cv_lib_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 +$as_echo_n "checking how to link with libiconv... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 +$as_echo "$LIBICONV" >&6; } + else + CPPFLAGS="$am_save_CPPFLAGS" + LIBICONV= + LTLIBICONV= + fi + + + + if test "$am_cv_func_iconv" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 +$as_echo_n "checking for iconv declaration... " >&6; } + if ${am_cv_proto_iconv+:} false; then : + $as_echo_n "(cached) " >&6 +else + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +extern +#ifdef __cplusplus +"C" +#endif +#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) +size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); +#else +size_t iconv(); +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + am_cv_proto_iconv_arg1="" +else + am_cv_proto_iconv_arg1="const" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" +fi + + am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` + { $as_echo "$as_me:${as_lineno-$LINENO}: result: + $am_cv_proto_iconv" >&5 +$as_echo " + $am_cv_proto_iconv" >&6; } + +cat >>confdefs.h <<_ACEOF +#define ICONV_CONST $am_cv_proto_iconv_arg1 +_ACEOF + + + fi + + + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; } +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +$as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + for ac_header in argz.h inttypes.h limits.h unistd.h sys/param.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \ + stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \ + argz_stringify argz_next __fsetlocking +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include +" +if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include +" +if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl +_ACEOF + + + + + for ac_prog in bison +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_INTLBISON+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$INTLBISON"; then + ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_INTLBISON="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +INTLBISON=$ac_cv_prog_INTLBISON +if test -n "$INTLBISON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 +$as_echo "$INTLBISON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$INTLBISON" && break +done + + if test -z "$INTLBISON"; then + ac_verc_fail=yes + else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 +$as_echo_n "checking version of bison... " >&6; } + ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` + case $ac_prog_version in + '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; + 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) + ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; + *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 +$as_echo "$ac_prog_version" >&6; } + fi + if test $ac_verc_fail = yes; then + INTLBISON=: + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 +$as_echo_n "checking for long long int... " >&6; } +if ${ac_cv_type_long_long_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_type_long_long_int=yes + if test "x${ac_cv_prog_cc_c99-no}" = xno; then + ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int + if test $ac_cv_type_long_long_int = yes; then + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #ifndef LLONG_MAX + # define HALF \ + (1LL << (sizeof (long long int) * CHAR_BIT - 2)) + # define LLONG_MAX (HALF - 1 + HALF) + #endif +int +main () +{ +long long int n = 1; + int i; + for (i = 0; ; i++) + { + long long int m = n << i; + if (m >> i != n) + return 1; + if (LLONG_MAX / 2 < m) + break; + } + return 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_type_long_long_int=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 +$as_echo "$ac_cv_type_long_long_int" >&6; } + if test $ac_cv_type_long_long_int = yes; then + +$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 +$as_echo_n "checking for wchar_t... " >&6; } +if ${gt_cv_c_wchar_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + wchar_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wchar_t=yes +else + gt_cv_c_wchar_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 +$as_echo "$gt_cv_c_wchar_t" >&6; } + if test $gt_cv_c_wchar_t = yes; then + +$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 +$as_echo_n "checking for wint_t... " >&6; } +if ${gt_cv_c_wint_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include + wint_t foo = (wchar_t)'\0'; +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_wint_t=yes +else + gt_cv_c_wint_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 +$as_echo "$gt_cv_c_wint_t" >&6; } + if test $gt_cv_c_wint_t = yes; then + +$as_echo "#define HAVE_WINT_T 1" >>confdefs.h + + fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 +$as_echo_n "checking for intmax_t... " >&6; } +if ${gt_cv_c_intmax_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +#if HAVE_STDINT_H_WITH_UINTMAX +#include +#endif +#if HAVE_INTTYPES_H_WITH_UINTMAX +#include +#endif + +int +main () +{ +intmax_t x = -1; + return !x; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + gt_cv_c_intmax_t=yes +else + gt_cv_c_intmax_t=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 +$as_echo "$gt_cv_c_intmax_t" >&6; } + if test $gt_cv_c_intmax_t = yes; then + +$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h + + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5 +$as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; } +if ${gt_cv_func_printf_posix+:} false; then : + $as_echo_n "(cached) " >&6 +else + + if test "$cross_compiling" = yes; then : + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ + notposix +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "notposix" >/dev/null 2>&1; then : + gt_cv_func_printf_posix="guessing no" +else + gt_cv_func_printf_posix="guessing yes" +fi +rm -f conftest* + + +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#include +/* The string "%2$d %1$d", with dollar characters protected from the shell's + dollar expansion (possibly an autoconf bug). */ +static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; +static char buf[100]; +int main () +{ + sprintf (buf, format, 33, 55); + return (strcmp (buf, "55 33") != 0); +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gt_cv_func_printf_posix=yes +else + gt_cv_func_printf_posix=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 +$as_echo "$gt_cv_func_printf_posix" >&6; } + case $gt_cv_func_printf_posix in + *yes) + +$as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h + + ;; + esac + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 +$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } +if ${ac_cv_gnu_library_2_1+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#ifdef __GNU_LIBRARY__ + #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) + Lucky GNU user + #endif +#endif +#ifdef __UCLIBC__ + Lucky user +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Lucky" >/dev/null 2>&1; then : + ac_cv_gnu_library_2_1=yes +else + ac_cv_gnu_library_2_1=no +fi +rm -f conftest* + + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 +$as_echo "$ac_cv_gnu_library_2_1" >&6; } + + GLIBC21="$ac_cv_gnu_library_2_1" + + + + for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 +$as_echo_n "checking for SIZE_MAX... " >&6; } +if ${gl_cv_size_max+:} false; then : + $as_echo_n "(cached) " >&6 +else + + gl_cv_size_max= + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +#if HAVE_STDINT_H +#include +#endif +#ifdef SIZE_MAX +Found it +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "Found it" >/dev/null 2>&1; then : + gl_cv_size_max=yes +fi +rm -f conftest* + + if test -z "$gl_cv_size_max"; then + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include +#include "; then : + +else + size_t_bits_minus_1= +fi + + if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : + +else + fits_in_uint= +fi + + if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then + if test $fits_in_uint = 1; then + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + extern size_t foo; + extern unsigned long foo; + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + fits_in_uint=0 +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $fits_in_uint = 1; then + gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" + else + gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" + fi + else + gl_cv_size_max='((size_t)~(size_t)0)' + fi + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 +$as_echo "$gl_cv_size_max" >&6; } + if test "$gl_cv_size_max" != yes; then + +cat >>confdefs.h <<_ACEOF +#define SIZE_MAX $gl_cv_size_max +_ACEOF + + fi + + + + + for ac_header in stdint.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" +if test "x$ac_cv_header_stdint_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDINT_H 1 +_ACEOF + +fi + +done + + + + + + for ac_func in $ac_func_list +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 +$as_echo_n "checking for working fcntl.h... " >&6; } +if ${gl_cv_header_working_fcntl_h+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + gl_cv_header_working_fcntl_h=cross-compiling +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + #if HAVE_UNISTD_H + # include + #else /* on Windows with MSVC */ + # include + # include + # defined sleep(n) _sleep ((n) * 1000) + #endif + #include + #ifndef O_NOATIME + #define O_NOATIME 0 + #endif + #ifndef O_NOFOLLOW + #define O_NOFOLLOW 0 + #endif + static int const constants[] = + { + O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, + O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY + }; + +int +main () +{ + + int result = !constants; + #if HAVE_SYMLINK + { + static char const sym[] = "conftest.sym"; + if (symlink ("/dev/null", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + if (unlink (sym) != 0 || symlink (".", sym) != 0) + result |= 2; + else + { + int fd = open (sym, O_RDONLY | O_NOFOLLOW); + if (fd >= 0) + { + close (fd); + result |= 4; + } + } + unlink (sym); + } + #endif + { + static char const file[] = "confdefs.h"; + int fd = open (file, O_RDONLY | O_NOATIME); + if (fd < 0) + result |= 8; + else + { + struct stat st0; + if (fstat (fd, &st0) != 0) + result |= 16; + else + { + char c; + sleep (1); + if (read (fd, &c, 1) != 1) + result |= 24; + else + { + if (close (fd) != 0) + result |= 32; + else + { + struct stat st1; + if (stat (file, &st1) != 0) + result |= 40; + else + if (st0.st_atime != st1.st_atime) + result |= 64; + } + } + } + } + } + return result; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + gl_cv_header_working_fcntl_h=yes +else + case $? in #( + 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( + 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( + 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( + *) gl_cv_header_working_fcntl_h='no';; + esac +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 +$as_echo "$gl_cv_header_working_fcntl_h" >&6; } + + case $gl_cv_header_working_fcntl_h in #( + *O_NOATIME* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOATIME $ac_val +_ACEOF + + + case $gl_cv_header_working_fcntl_h in #( + *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( + *) ac_val=1;; + esac + +cat >>confdefs.h <<_ACEOF +#define HAVE_WORKING_O_NOFOLLOW $ac_val +_ACEOF + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + + + + + case "$enable_silent_rules" in + yes) INTL_DEFAULT_VERBOSITY=0;; + no) INTL_DEFAULT_VERBOSITY=1;; + *) INTL_DEFAULT_VERBOSITY=1;; + esac + + + ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" +if test "x$ac_cv_type_ptrdiff_t" = xyes; then : + +else + +$as_echo "#define ptrdiff_t long" >>confdefs.h + + +fi + + for ac_header in features.h stddef.h stdlib.h string.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + for ac_func in asprintf fwprintf newlocale putenv setenv setlocale \ + snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + + + ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include +" +if test "x$ac_cv_have_decl__snprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNPRINTF $ac_have_decl +_ACEOF +ac_fn_c_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include +" +if test "x$ac_cv_have_decl__snwprintf" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL__SNWPRINTF $ac_have_decl +_ACEOF + + + ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include +" +if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : + ac_have_decl=1 +else + ac_have_decl=0 +fi + +cat >>confdefs.h <<_ACEOF +#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl +_ACEOF + + + case $gt_cv_func_printf_posix in + *yes) HAVE_POSIX_PRINTF=1 ;; + *) HAVE_POSIX_PRINTF=0 ;; + esac + + if test "$ac_cv_func_asprintf" = yes; then + HAVE_ASPRINTF=1 + else + HAVE_ASPRINTF=0 + fi + + if test "$ac_cv_func_snprintf" = yes; then + HAVE_SNPRINTF=1 + else + HAVE_SNPRINTF=0 + fi + + if test "$ac_cv_func_newlocale" = yes; then + HAVE_NEWLOCALE=1 + else + HAVE_NEWLOCALE=0 + fi + + if test "$ac_cv_func_wprintf" = yes; then + HAVE_WPRINTF=1 + else + HAVE_WPRINTF=0 + fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 +$as_echo_n "checking for nl_langinfo and CODESET... " >&6; } +if ${am_cv_langinfo_codeset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +char* cs = nl_langinfo(CODESET); return !cs; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + am_cv_langinfo_codeset=yes +else + am_cv_langinfo_codeset=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 +$as_echo "$am_cv_langinfo_codeset" >&6; } + if test $am_cv_langinfo_codeset = yes; then + +$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h + + fi + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 +$as_echo_n "checking for LC_MESSAGES... " >&6; } +if ${gt_cv_val_LC_MESSAGES+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return LC_MESSAGES + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_val_LC_MESSAGES=yes +else + gt_cv_val_LC_MESSAGES=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 +$as_echo "$gt_cv_val_LC_MESSAGES" >&6; } + if test $gt_cv_val_LC_MESSAGES = yes; then + +$as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h + + fi + + + if test "$enable_shared" = yes; then + case "$host_os" in + mingw* | cygwin*) is_woe32dll=yes ;; + *) is_woe32dll=no ;; + esac + else + is_woe32dll=no + fi + WOE32DLL=$is_woe32dll + + + case "$host_os" in + mingw* | cygwin*) is_woe32=yes ;; + *) is_woe32=no ;; + esac + WOE32=$is_woe32 + + if test $WOE32 = yes; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. +set dummy ${ac_tool_prefix}windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_WINDRES+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WINDRES"; then + ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_WINDRES="${ac_tool_prefix}windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WINDRES=$ac_cv_prog_WINDRES +if test -n "$WINDRES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 +$as_echo "$WINDRES" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_WINDRES"; then + ac_ct_WINDRES=$WINDRES + # Extract the first word of "windres", so it can be a program name with args. +set dummy windres; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_WINDRES"; then + ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_WINDRES="windres" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES +if test -n "$ac_ct_WINDRES"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 +$as_echo "$ac_ct_WINDRES" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_WINDRES" = x; then + WINDRES="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + WINDRES=$ac_ct_WINDRES + fi +else + WINDRES="$ac_cv_prog_WINDRES" +fi + + fi + + case "$host_os" in + hpux*) LTLIBC="" ;; + *) LTLIBC="-lc" ;; + esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFPreferencesCopyAppValue(NULL, NULL) + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFPreferencesCopyAppValue=yes +else + gt_cv_func_CFPreferencesCopyAppValue=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 +$as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } + if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then + +$as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h + + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 +$as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } +if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +CFLocaleCopyCurrent(); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + gt_cv_func_CFLocaleCopyCurrent=yes +else + gt_cv_func_CFLocaleCopyCurrent=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LIBS="$gt_save_LIBS" +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 +$as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } + if test $gt_cv_func_CFLocaleCopyCurrent = yes; then + +$as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h + + fi + INTL_MACOSX_LIBS= + if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then + INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" + fi + + + + + + + BUILD_INCLUDED_LIBINTL=no + USE_INCLUDED_LIBINTL=no + + LIBINTL= + LTLIBINTL= + POSUB= + + case " $gt_needs " in + *" need-formatstring-macros "*) gt_api_version=3 ;; + *" need-ngettext "*) gt_api_version=2 ;; + *) gt_api_version=1 ;; + esac + gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" + gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" + + if test "$USE_NLS" = "yes"; then + gt_use_preinstalled_gnugettext=no + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 +$as_echo_n "checking whether included gettext is requested... " >&6; } + +# Check whether --with-included-gettext was given. +if test "${with_included_gettext+set}" = set; then : + withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval +else + nls_cv_force_use_gnu_gettext=no +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 +$as_echo "$nls_cv_force_use_gnu_gettext" >&6; } + + nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" + if test "$nls_cv_force_use_gnu_gettext" != "yes"; then + + + if test $gt_api_version -ge 3; then + gt_revision_test_code=' +#ifndef __GNU_GETTEXT_SUPPORTED_REVISION +#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) +#endif +typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; +' + else + gt_revision_test_code= + fi + if test $gt_api_version -ge 2; then + gt_expression_test_code=' + * ngettext ("", "", 0)' + else + gt_expression_test_code= + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 +$as_echo_n "checking for GNU gettext in libc... " >&6; } +if eval \${$gt_func_gnugettext_libc+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern int *_nl_domain_bindings; + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libc=yes" +else + eval "$gt_func_gnugettext_libc=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$gt_func_gnugettext_libc + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then + + + + + + + + + use_additional=yes + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + +# Check whether --with-libintl-prefix was given. +if test "${with_libintl_prefix+set}" = set; then : + withval=$with_libintl_prefix; + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + else + additional_includedir="$withval/include" + additional_libdir="$withval/$acl_libdirstem" + if test "$acl_libdirstem2" != "$acl_libdirstem" \ + && ! test -d "$withval/$acl_libdirstem"; then + additional_libdir="$withval/$acl_libdirstem2" + fi + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + HAVE_LIBINTL= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='intl ' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" + else + : + fi + else + found_dir= + found_la= + found_so= + found_a= + eval libname=\"$acl_libname_spec\" # typically: libname=lib$name + if test -n "$acl_shlibext"; then + shrext=".$acl_shlibext" # typically: shrext=.so + else + shrext= + fi + if test $use_additional = yes; then + dir="$additional_libdir" + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$acl_shlibext"; then + if test -f "$dir/$libname$shrext"; then + found_dir="$dir" + found_so="$dir/$libname$shrext" + else + if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then + ver=`(cd "$dir" && \ + for f in "$libname$shrext".*; do echo "$f"; done \ + | sed -e "s,^$libname$shrext\\\\.,," \ + | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ + | sed 1q ) 2>/dev/null` + if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then + found_dir="$dir" + found_so="$dir/$libname$shrext.$ver" + fi + else + eval library_names=\"$acl_library_names_spec\" + for f in $library_names; do + if test -f "$dir/$f"; then + found_dir="$dir" + found_so="$dir/$f" + break + fi + done + fi + fi + fi + if test "X$found_dir" = "X"; then + if test -f "$dir/$libname.$acl_libext"; then + found_dir="$dir" + found_a="$dir/$libname.$acl_libext" + fi + fi + if test "X$found_dir" != "X"; then + if test -f "$dir/$libname.la"; then + found_la="$dir/$libname.la" + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + if test "$enable_rpath" = no \ + || test "X$found_dir" = "X/usr/$acl_libdirstem" \ + || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + if test "$acl_hardcode_direct" = yes; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" + fi + if test "$acl_hardcode_minus_L" != no; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" + fi + fi + additional_includedir= + case "$found_dir" in + */$acl_libdirstem | */$acl_libdirstem/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + */$acl_libdirstem2 | */$acl_libdirstem2/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` + if test "$name" = 'intl'; then + LIBINTL_PREFIX="$basedir" + fi + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INCINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + if test -n "$found_la"; then + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ + && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ + || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then + if test -n "$GCC"; then + case $host_os in + linux* | gnu* | k*bsd*-gnu) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIBINTL; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" + ;; + esac + done + fi + else + LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$acl_hardcode_libdir_separator"; then + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" + done + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + else + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$acl_hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + for found_dir in $ltrpathdirs; do + LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" + done + fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 +$as_echo_n "checking for GNU gettext in libintl... " >&6; } +if eval \${$gt_func_gnugettext_libintl+:} false; then : + $as_echo_n "(cached) " >&6 +else + gt_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $INCINTL" + gt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBINTL" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$gt_func_gnugettext_libintl=yes" +else + eval "$gt_func_gnugettext_libintl=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then + LIBS="$LIBS $LIBICONV" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include +$gt_revision_test_code +extern int _nl_msg_cat_cntr; +extern +#ifdef __cplusplus +"C" +#endif +const char *_nl_expand_alias (const char *); + +int +main () +{ + +bindtextdomain ("", ""); +return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBINTL="$LIBINTL $LIBICONV" + LTLIBINTL="$LTLIBINTL $LTLIBICONV" + eval "$gt_func_gnugettext_libintl=yes" + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + fi + CPPFLAGS="$gt_save_CPPFLAGS" + LIBS="$gt_save_LIBS" +fi +eval ac_res=\$$gt_func_gnugettext_libintl + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + fi + + if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ + || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ + && test "$PACKAGE" != gettext-runtime \ + && test "$PACKAGE" != gettext-tools; }; then + gt_use_preinstalled_gnugettext=yes + else + LIBINTL= + LTLIBINTL= + INCINTL= + fi + + + if test "$gt_use_preinstalled_gnugettext" != "yes"; then + nls_cv_use_gnu_gettext=yes + fi + fi + + if test "$nls_cv_use_gnu_gettext" = "yes"; then + BUILD_INCLUDED_LIBINTL=yes + USE_INCLUDED_LIBINTL=yes + LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV $LIBTHREAD" + LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV $LTLIBTHREAD" + LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` + fi + + CATOBJEXT= + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + CATOBJEXT=.gmo + fi + + + if test -n "$INTL_MACOSX_LIBS"; then + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" + LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" + fi + fi + + if test "$gt_use_preinstalled_gnugettext" = "yes" \ + || test "$nls_cv_use_gnu_gettext" = "yes"; then + +$as_echo "#define ENABLE_NLS 1" >>confdefs.h + + else + USE_NLS=no + fi + fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 +$as_echo_n "checking whether to use NLS... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 +$as_echo "$USE_NLS" >&6; } + if test "$USE_NLS" = "yes"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 +$as_echo_n "checking where the gettext function comes from... " >&6; } + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + gt_source="external libintl" + else + gt_source="libc" + fi + else + gt_source="included intl directory" + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 +$as_echo "$gt_source" >&6; } + fi + + if test "$USE_NLS" = "yes"; then + + if test "$gt_use_preinstalled_gnugettext" = "yes"; then + if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 +$as_echo_n "checking how to link with libintl... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 +$as_echo "$LIBINTL" >&6; } + + for element in $INCINTL; do + haveit= + for x in $CPPFLAGS; do + + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + eval x=\"$x\" + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" + + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" + fi + done + + fi + + +$as_echo "#define HAVE_GETTEXT 1" >>confdefs.h + + +$as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h + + fi + + POSUB=po + fi + + + if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then + BUILD_INCLUDED_LIBINTL=yes + fi + + + + + + nls_cv_header_intl= + nls_cv_header_libgt= + + DATADIRNAME=share + + + INSTOBJEXT=.mo + + + GENCAT=gencat + + + INTLOBJS= + if test "$USE_INCLUDED_LIBINTL" = yes; then + INTLOBJS="\$(GETTOBJS)" + fi + + + INTL_LIBTOOL_SUFFIX_PREFIX= + + + + INTLLIBS="$LIBINTL" + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU make" >&5 +$as_echo_n "checking for GNU make... " >&6; } +if ${_cv_gnu_make_command+:} false; then : + $as_echo_n "(cached) " >&6 +else + _cv_gnu_make_command='' ; + if test -n "$FORCE_NATIVE_MAKE" ; then + MAKES="make" + else + MAKES="make gmake gnumake" + fi + for a in "$MAKE" $MAKES ; do + if test -z "$a" ; then continue ; fi ; + if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then + _cv_gnu_make_command=$a ; + break; + fi + done ; + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_cv_gnu_make_command" >&5 +$as_echo "$_cv_gnu_make_command" >&6; } ; + if test "x$_cv_gnu_make_command" != "x" ; then + ifGNUmake='' ; + ifNotGNUmake='#' ; + else + ifGNUmake='#' ; + ifNotGNUmake='' ; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: \"Not found\"" >&5 +$as_echo "\"Not found\"" >&6; }; + fi + + + +# Extract the first word of "ln", so it can be a program name with args. +set dummy ln; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LN+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LN in + [\\/]* | ?:[\\/]*) + ac_cv_path_LN="$LN" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LN="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_LN" && ac_cv_path_LN="ln" + ;; +esac +fi +LN=$ac_cv_path_LN +if test -n "$LN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LN" >&5 +$as_echo "$LN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# Extract the first word of "mv", so it can be a program name with args. +set dummy mv; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_MV+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $MV in + [\\/]* | ?:[\\/]*) + ac_cv_path_MV="$MV" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_MV="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_MV" && ac_cv_path_MV="mv" + ;; +esac +fi +MV=$ac_cv_path_MV +if test -n "$MV"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MV" >&5 +$as_echo "$MV" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "cp", so it can be a program name with args. +set dummy cp; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CP+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CP in + [\\/]* | ?:[\\/]*) + ac_cv_path_CP="$CP" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CP="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_CP" && ac_cv_path_CP="cp" + ;; +esac +fi +CP=$ac_cv_path_CP +if test -n "$CP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CP" >&5 +$as_echo "$CP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "rm", so it can be a program name with args. +set dummy rm; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_RM+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $RM in + [\\/]* | ?:[\\/]*) + ac_cv_path_RM="$RM" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_RM="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_RM" && ac_cv_path_RM="rm" + ;; +esac +fi +RM=$ac_cv_path_RM +if test -n "$RM"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RM" >&5 +$as_echo "$RM" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "chmod", so it can be a program name with args. +set dummy chmod; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_CHMOD+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $CHMOD in + [\\/]* | ?:[\\/]*) + ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_CHMOD="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_CHMOD" && ac_cv_path_CHMOD=":" + ;; +esac +fi +CHMOD=$ac_cv_path_CHMOD +if test -n "$CHMOD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHMOD" >&5 +$as_echo "$CHMOD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AWK+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if ${ac_cv_path_EGREP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +# Extract the first word of "sed", so it can be a program name with args. +set dummy sed; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_SED+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $SED in + [\\/]* | ?:[\\/]*) + ac_cv_path_SED="$SED" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_SED="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_SED" && ac_cv_path_SED="sed" + ;; +esac +fi +SED=$ac_cv_path_SED +if test -n "$SED"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SED" >&5 +$as_echo "$SED" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "perl", so it can be a program name with args. +set dummy perl; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_PERL+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $PERL in + [\\/]* | ?:[\\/]*) + ac_cv_path_PERL="$PERL" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="perl" + ;; +esac +fi +PERL=$ac_cv_path_PERL +if test -n "$PERL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 +$as_echo "$PERL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# Extract the first word of "ldconfig", so it can be a program name with args. +set dummy ldconfig; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_path_LDCONFIG+:} false; then : + $as_echo_n "(cached) " >&6 +else + case $LDCONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_path_LDCONFIG="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + test -z "$ac_cv_path_LDCONFIG" && ac_cv_path_LDCONFIG=":" + ;; +esac +fi +LDCONFIG=$ac_cv_path_LDCONFIG +if test -n "$LDCONFIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LDCONFIG" >&5 +$as_echo "$LDCONFIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_AR+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="ar" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_STRIP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +# Extract the first word of "makeinfo", so it can be a program name with args. +set dummy makeinfo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_MAKEINFO+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$MAKEINFO"; then + ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_MAKEINFO="makeinfo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +MAKEINFO=$ac_cv_prog_MAKEINFO +if test -n "$MAKEINFO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 +$as_echo "$MAKEINFO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +if test "_$MAKEINFO" = "_"; then + MAKEINFO="echo Makeinfo is missing. Info documentation will not be built." +else + case "$MAKEINFO" in + */missing.*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: +*** Makeinfo is missing. Info documentation will not be built." >&5 +$as_echo "$as_me: WARNING: +*** Makeinfo is missing. Info documentation will not be built." >&2;} + ;; + *) + ;; + esac +fi + + +# See if we need a separate native compiler. +if test $cross_compiling = no; then + BUILD_CC="$CC" + +else + for ac_prog in gcc cc +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_BUILD_CC+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$BUILD_CC"; then + ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_BUILD_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +BUILD_CC=$ac_cv_prog_BUILD_CC +if test -n "$BUILD_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BUILD_CC" >&5 +$as_echo "$BUILD_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$BUILD_CC" && break +done + +fi +for ac_header in dirent.h errno.h execinfo.h getopt.h malloc.h mntent.h paths.h semaphore.h setjmp.h signal.h stdarg.h stdint.h stdlib.h termios.h termio.h unistd.h utime.h attr/xattr.h linux/falloc.h linux/fd.h linux/major.h linux/loop.h net/if_dl.h netinet/in.h sys/acl.h sys/disklabel.h sys/disk.h sys/file.h sys/ioctl.h sys/key.h sys/mkdev.h sys/mman.h sys/mount.h sys/prctl.h sys/resource.h sys/select.h sys/socket.h sys/sockio.h sys/stat.h sys/syscall.h sys/sysctl.h sys/sysmacros.h sys/time.h sys/types.h sys/un.h sys/wait.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + +for ac_header in net/if.h +do : + ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" " +#if HAVE_SYS_TYPES_H +#include +#endif +#if HAVE_SYS_SOCKET +#include +#endif + +" +if test "x$ac_cv_header_net_if_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_NET_IF_H 1 +_ACEOF + +fi + +done + +for ac_func in vprintf +do : + ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" +if test "x$ac_cv_func_vprintf" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VPRINTF 1 +_ACEOF + +ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" +if test "x$ac_cv_func__doprnt" = xyes; then : + +$as_echo "#define HAVE_DOPRNT 1" >>confdefs.h + +fi + +fi +done + + +ac_fn_c_check_member "$LINENO" "struct dirent" "d_reclen" "ac_cv_member_struct_dirent_d_reclen" "#include +" +if test "x$ac_cv_member_struct_dirent_d_reclen" = xyes; then : + +$as_echo "#define HAVE_RECLEN_DIRENT 1" >>confdefs.h + +fi + +ac_fn_c_check_member "$LINENO" "struct stat" "st_atim" "ac_cv_member_struct_stat_st_atim" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_atim" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_ATIM 1 +_ACEOF + + +fi + +ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "#include +" +if test "x$ac_cv_type_ssize_t" = xyes; then : + +$as_echo "#define HAVE_TYPE_SSIZE_T 1" >>confdefs.h + +fi + +ac_fn_c_check_decl "$LINENO" "llseek" "ac_cv_have_decl_llseek" "#include +" +if test "x$ac_cv_have_decl_llseek" = xyes; then : + +$as_echo "#define HAVE_LLSEEK_PROTOTYPE 1" >>confdefs.h + +fi + +ac_fn_c_check_decl "$LINENO" "lseek64" "ac_cv_have_decl_lseek64" "#define _LARGEFILE_SOURCE + #define _LARGEFILE64_SOURCE + #include +" +if test "x$ac_cv_have_decl_lseek64" = xyes; then : + +$as_echo "#define HAVE_LSEEK64_PROTOTYPE 1" >>confdefs.h + +fi + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of short" >&5 +$as_echo_n "checking size of short... " >&6; } +if ${ac_cv_sizeof_short+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (short))" "ac_cv_sizeof_short" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_short" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (short) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_short=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_short" >&5 +$as_echo "$ac_cv_sizeof_short" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_SHORT $ac_cv_sizeof_short +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5 +$as_echo_n "checking size of int... " >&6; } +if ${ac_cv_sizeof_int+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_int" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (int) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_int=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5 +$as_echo "$ac_cv_sizeof_int" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_INT $ac_cv_sizeof_int +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long" >&5 +$as_echo_n "checking size of long... " >&6; } +if ${ac_cv_sizeof_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long))" "ac_cv_sizeof_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long" >&5 +$as_echo "$ac_cv_sizeof_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG $ac_cv_sizeof_long +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of long long" >&5 +$as_echo_n "checking size of long long... " >&6; } +if ${ac_cv_sizeof_long_long+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (long long))" "ac_cv_sizeof_long_long" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_long_long" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (long long) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_long_long=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_long_long" >&5 +$as_echo "$ac_cv_sizeof_long_long" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_LONG_LONG $ac_cv_sizeof_long_long +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of off_t" >&5 +$as_echo_n "checking size of off_t... " >&6; } +if ${ac_cv_sizeof_off_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (off_t))" "ac_cv_sizeof_off_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_off_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (off_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_off_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_off_t" >&5 +$as_echo "$ac_cv_sizeof_off_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_OFF_T $ac_cv_sizeof_off_t +_ACEOF + + +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +$as_echo_n "checking size of time_t... " >&6; } +if ${ac_cv_sizeof_time_t+:} false; then : + $as_echo_n "(cached) " >&6 +else + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "$ac_includes_default"; then : + +else + if test "$ac_cv_type_time_t" = yes; then + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (time_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_time_t=0 + fi +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +$as_echo "$ac_cv_sizeof_time_t" >&6; } + + + +cat >>confdefs.h <<_ACEOF +#define SIZEOF_TIME_T $ac_cv_sizeof_time_t +_ACEOF + + +SIZEOF_SHORT=$ac_cv_sizeof_short +SIZEOF_INT=$ac_cv_sizeof_int +SIZEOF_LONG=$ac_cv_sizeof_long +SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long +SIZEOF_OFF_T=$ac_cv_sizeof_off_t +SIZEOF_TIME_T=$ac_cv_sizeof_time_t + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5 +$as_echo_n "checking whether byte ordering is bigendian... " >&6; } +if ${ac_cv_c_bigendian+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_c_bigendian=unknown + # See if we're dealing with a universal compiler. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#ifndef __APPLE_CC__ + not a universal capable compiler + #endif + typedef int dummy; + +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + + # Check for potential -arch flags. It is not universal unless + # there are at least two -arch flags with different values. + ac_arch= + ac_prev= + for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do + if test -n "$ac_prev"; then + case $ac_word in + i?86 | x86_64 | ppc | ppc64) + if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then + ac_arch=$ac_word + else + ac_cv_c_bigendian=universal + break + fi + ;; + esac + ac_prev= + elif test "x$ac_word" = "x-arch"; then + ac_prev=arch + fi + done +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + if test $ac_cv_c_bigendian = unknown; then + # See if sys/param.h defines the BYTE_ORDER macro. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \ + && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \ + && LITTLE_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + #include + +int +main () +{ +#if BYTE_ORDER != BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # See if defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN) + bogus endian macros + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + # It does; now see whether it defined to _BIG_ENDIAN or not. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +int +main () +{ +#ifndef _BIG_ENDIAN + not big endian + #endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_c_bigendian=yes +else + ac_cv_c_bigendian=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + fi + if test $ac_cv_c_bigendian = unknown; then + # Compile a test program. + if test "$cross_compiling" = yes; then : + # Try to guess by grepping values from an object file. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +short int ascii_mm[] = + { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 }; + short int ascii_ii[] = + { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 }; + int use_ascii (int i) { + return ascii_mm[i] + ascii_ii[i]; + } + short int ebcdic_ii[] = + { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 }; + short int ebcdic_mm[] = + { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 }; + int use_ebcdic (int i) { + return ebcdic_mm[i] + ebcdic_ii[i]; + } + extern int foo; + +int +main () +{ +return use_ascii (foo) == use_ebcdic (foo); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then + ac_cv_c_bigendian=yes + fi + if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then + if test "$ac_cv_c_bigendian" = unknown; then + ac_cv_c_bigendian=no + else + # finding both strings is unlikely to happen, but who knows? + ac_cv_c_bigendian=unknown + fi + fi +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* Are we little or big endian? From Harbison&Steele. */ + union + { + long int l; + char c[sizeof (long int)]; + } u; + u.l = 1; + return u.c[sizeof (long int) - 1] == 1; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_c_bigendian=no +else + ac_cv_c_bigendian=yes +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5 +$as_echo "$ac_cv_c_bigendian" >&6; } + case $ac_cv_c_bigendian in #( + yes) + $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h +;; #( + no) + ;; #( + universal) + +$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h + + ;; #( + *) + as_fn_error $? "unknown endianness + presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; + esac + +if test $cross_compiling = no; then + BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh +else + CROSS_COMPILE="1" BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh +fi +ASM_TYPES_HEADER=./asm_types.h + +echo "/* These defines are needed for the public ext2fs.h header file */" \ + > public_config.h +if grep HAVE_SYS_TYPES_H confdefs.h > tmp_config.$$; then + uniq tmp_config.$$ >> public_config.h +else + echo "#undef HAVE_SYS_TYPES_H" >> public_config.h +fi +if grep WORDS_BIGENDIAN confdefs.h > tmp_config.$$; then + uniq tmp_config.$$ >> public_config.h +else + echo "#undef WORDS_BIGENDIAN" >> public_config.h +fi +rm -f tmp_config.$$ +PUBLIC_CONFIG_HEADER=./public_config.h + +for ac_header in inttypes.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_inttypes_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_INTTYPES_H 1 +_ACEOF + +fi + +done + +ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default" +if test "x$ac_cv_type_intptr_t" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_INTPTR_T 1 +_ACEOF + + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct stat has a st_flags field" >&5 +$as_echo_n "checking whether struct stat has a st_flags field... " >&6; } +if ${e2fsprogs_cv_struct_st_flags+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +struct stat stat; stat.st_flags = 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + e2fsprogs_cv_struct_st_flags=yes +else + e2fsprogs_cv_struct_st_flags=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $e2fsprogs_cv_struct_st_flags" >&5 +$as_echo "$e2fsprogs_cv_struct_st_flags" >&6; } +if test "$e2fsprogs_cv_struct_st_flags" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether st_flags field is useful" >&5 +$as_echo_n "checking whether st_flags field is useful... " >&6; } + if ${e2fsprogs_cv_struct_st_flags_immut+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +struct stat stat; stat.st_flags |= UF_IMMUTABLE; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + e2fsprogs_cv_struct_st_flags_immut=yes +else + e2fsprogs_cv_struct_st_flags_immut=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $e2fsprogs_cv_struct_st_flags_immut" >&5 +$as_echo "$e2fsprogs_cv_struct_st_flags_immut" >&6; } + if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then + +$as_echo "#define HAVE_STAT_FLAGS 1" >>confdefs.h + + fi +fi +ac_fn_c_check_member "$LINENO" "struct sockaddr" "sa_len" "ac_cv_member_struct_sockaddr_sa_len" "#include + #include +" +if test "x$ac_cv_member_struct_sockaddr_sa_len" = xyes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_SA_LEN 1 +_ACEOF + +fi + +if test -n "$BLKID_CMT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing blkid_probe_all" >&5 +$as_echo_n "checking for library containing blkid_probe_all... " >&6; } +if ${ac_cv_search_blkid_probe_all+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char blkid_probe_all (); +int +main () +{ +return blkid_probe_all (); + ; + return 0; +} +_ACEOF +for ac_lib in '' blkid; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_blkid_probe_all=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_blkid_probe_all+:} false; then : + break +fi +done +if ${ac_cv_search_blkid_probe_all+:} false; then : + +else + ac_cv_search_blkid_probe_all=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_blkid_probe_all" >&5 +$as_echo "$ac_cv_search_blkid_probe_all" >&6; } +ac_res=$ac_cv_search_blkid_probe_all +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +fi + +fi +if test -n "$DLOPEN_LIB" ; then + ac_cv_func_dlopen=yes +fi +for ac_func in __secure_getenv add_key backtrace blkid_probe_get_topology blkid_probe_enable_partitions chflags dlopen fadvise64 fallocate fallocate64 fchown fdatasync fstat64 ftruncate64 futimes getcwd getdtablesize getmntinfo getpwuid_r getrlimit getrusage jrand48 keyctl llistxattr llseek lseek64 mallinfo mbstowcs memalign mempcpy mmap msync nanosleep open64 pathconf posix_fadvise posix_fadvise64 posix_memalign prctl pread pwrite pread64 pwrite64 secure_getenv setmntent setresgid setresuid snprintf srandom stpcpy strcasecmp strdup strnlen strptime strtoull sync_file_range sysconf usleep utime utimes valloc +do : + as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` +ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" +if eval test \"x\$"$as_ac_var"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +SOCKET_LIB='' +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 +$as_echo_n "checking for socket in -lsocket... " >&6; } +if ${ac_cv_lib_socket_socket+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsocket $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char socket (); +int +main () +{ +return socket (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_socket_socket=yes +else + ac_cv_lib_socket_socket=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 +$as_echo "$ac_cv_lib_socket_socket" >&6; } +if test "x$ac_cv_lib_socket_socket" = xyes; then : + SOCKET_LIB=-lsocket +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for magic_file in -lmagic" >&5 +$as_echo_n "checking for magic_file in -lmagic... " >&6; } +if ${ac_cv_lib_magic_magic_file+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lmagic $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char magic_file (); +int +main () +{ +return magic_file (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_magic_magic_file=yes +else + ac_cv_lib_magic_magic_file=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_magic_magic_file" >&5 +$as_echo "$ac_cv_lib_magic_magic_file" >&6; } +if test "x$ac_cv_lib_magic_magic_file" = xyes; then : + MAGIC_LIB=-lmagic +for ac_header in magic.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "magic.h" "ac_cv_header_magic_h" "$ac_includes_default" +if test "x$ac_cv_header_magic_h" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_MAGIC_H 1 +_ACEOF + +fi + +done + +fi + +if test "$ac_cv_func_dlopen" = yes ; then + MAGIC_LIB=$DLOPEN_LIB +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5 +$as_echo_n "checking for clock_gettime in -lrt... " >&6; } +if ${ac_cv_lib_rt_clock_gettime+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char clock_gettime (); +int +main () +{ +return clock_gettime (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_clock_gettime=yes +else + ac_cv_lib_rt_clock_gettime=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_clock_gettime" >&5 +$as_echo "$ac_cv_lib_rt_clock_gettime" >&6; } +if test "x$ac_cv_lib_rt_clock_gettime" = xyes; then : + CLOCK_GETTIME_LIB=-lrt +fi + + +FUSE_CMT= +FUSE_LIB= +# Check whether --enable-fuse2fs was given. +if test "${enable_fuse2fs+set}" = set; then : + enableval=$enable_fuse2fs; if test "$enableval" = "no" +then + FUSE_CMT="#" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling fuse2fs" >&5 +$as_echo "Disabling fuse2fs" >&6; } +else + for ac_header in pthread.h fuse.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29 +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Cannot find fuse2fs headers. +See \`config.log' for more details" "$LINENO" 5; } +fi + +done + + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define FUSE_USE_VERSION 29 +#ifdef __linux__ +#include +#include +#include +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Cannot find fuse2fs Linux headers. +See \`config.log' for more details" "$LINENO" 5; } +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 +$as_echo_n "checking for fuse_main in -losxfuse... " >&6; } +if ${ac_cv_lib_osxfuse_fuse_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-losxfuse $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char fuse_main (); +int +main () +{ +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_osxfuse_fuse_main=yes +else + ac_cv_lib_osxfuse_fuse_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_osxfuse_fuse_main" >&5 +$as_echo "$ac_cv_lib_osxfuse_fuse_main" >&6; } +if test "x$ac_cv_lib_osxfuse_fuse_main" = xyes; then : + FUSE_LIB=-losxfuse +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -lfuse" >&5 +$as_echo_n "checking for fuse_main in -lfuse... " >&6; } +if ${ac_cv_lib_fuse_fuse_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfuse $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char fuse_main (); +int +main () +{ +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_fuse_fuse_main=yes +else + ac_cv_lib_fuse_fuse_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fuse_fuse_main" >&5 +$as_echo "$ac_cv_lib_fuse_fuse_main" >&6; } +if test "x$ac_cv_lib_fuse_fuse_main" = xyes; then : + FUSE_LIB=-lfuse +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Cannot find fuse library. +See \`config.log' for more details" "$LINENO" 5; } +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling fuse2fs" >&5 +$as_echo "Enabling fuse2fs" >&6; } +fi + +else + for ac_header in pthread.h fuse.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29 +#ifdef __linux__ +# include +# include +# include +#endif +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +else + FUSE_CMT="#" +fi + +done + +if test -z "$FUSE_CMT" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -losxfuse" >&5 +$as_echo_n "checking for fuse_main in -losxfuse... " >&6; } +if ${ac_cv_lib_osxfuse_fuse_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-losxfuse $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char fuse_main (); +int +main () +{ +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_osxfuse_fuse_main=yes +else + ac_cv_lib_osxfuse_fuse_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_osxfuse_fuse_main" >&5 +$as_echo "$ac_cv_lib_osxfuse_fuse_main" >&6; } +if test "x$ac_cv_lib_osxfuse_fuse_main" = xyes; then : + FUSE_LIB=-losxfuse +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fuse_main in -lfuse" >&5 +$as_echo_n "checking for fuse_main in -lfuse... " >&6; } +if ${ac_cv_lib_fuse_fuse_main+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lfuse $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char fuse_main (); +int +main () +{ +return fuse_main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_fuse_fuse_main=yes +else + ac_cv_lib_fuse_fuse_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_fuse_fuse_main" >&5 +$as_echo "$ac_cv_lib_fuse_fuse_main" >&6; } +if test "x$ac_cv_lib_fuse_fuse_main" = xyes; then : + FUSE_LIB=-lfuse +else + FUSE_CMT="#" +fi + +fi + +fi +if test -z "$FUSE_CMT" +then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling fuse2fs by default." >&5 +$as_echo "Enabling fuse2fs by default." >&6; } +fi + +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for optreset" >&5 +$as_echo_n "checking for optreset... " >&6; } +if ${ac_cv_have_optreset+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "optreset" >/dev/null 2>&1; then : + ac_cv_have_optreset=yes +else + ac_cv_have_optreset=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_optreset" >&5 +$as_echo "$ac_cv_have_optreset" >&6; } +if test $ac_cv_have_optreset = yes; then + +$as_echo "#define HAVE_OPTRESET 1" >>confdefs.h + +fi + +SEM_INIT_LIB='' +ac_fn_c_check_func "$LINENO" "sem_init" "ac_cv_func_sem_init" +if test "x$ac_cv_func_sem_init" = xyes; then : + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lpthread" >&5 +$as_echo_n "checking for sem_init in -lpthread... " >&6; } +if ${ac_cv_lib_pthread_sem_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sem_init (); +int +main () +{ +return sem_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_sem_init=yes +else + ac_cv_lib_pthread_sem_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_sem_init" >&5 +$as_echo "$ac_cv_lib_pthread_sem_init" >&6; } +if test "x$ac_cv_lib_pthread_sem_init" = xyes; then : + $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h + + SEM_INIT_LIB=-lpthread +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lrt" >&5 +$as_echo_n "checking for sem_init in -lrt... " >&6; } +if ${ac_cv_lib_rt_sem_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lrt $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sem_init (); +int +main () +{ +return sem_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_rt_sem_init=yes +else + ac_cv_lib_rt_sem_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_sem_init" >&5 +$as_echo "$ac_cv_lib_rt_sem_init" >&6; } +if test "x$ac_cv_lib_rt_sem_init" = xyes; then : + $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h + + SEM_INIT_LIB=-lrt +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sem_init in -lposix4" >&5 +$as_echo_n "checking for sem_init in -lposix4... " >&6; } +if ${ac_cv_lib_posix4_sem_init+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lposix4 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char sem_init (); +int +main () +{ +return sem_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_posix4_sem_init=yes +else + ac_cv_lib_posix4_sem_init=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix4_sem_init" >&5 +$as_echo "$ac_cv_lib_posix4_sem_init" >&6; } +if test "x$ac_cv_lib_posix4_sem_init" = xyes; then : + $as_echo "#define HAVE_SEM_INIT 1" >>confdefs.h + + SEM_INIT_LIB=-lposix4 +fi + +fi + +fi + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for unified diff option" >&5 +$as_echo_n "checking for unified diff option... " >&6; } +if diff -u $0 $0 > /dev/null 2>&1 ; then + UNI_DIFF_OPTS=-u +else + UNI_DIFF_OPTS=-c +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $UNI_DIFF_OPTS" >&5 +$as_echo "$UNI_DIFF_OPTS" >&6; } + +case "$host_os" in +linux*) + +$as_echo "#define HAVE_EXT2_IOCTLS 1" >>confdefs.h + + ;; +esac +LINUX_CMT="#" +CYGWIN_CMT="#" +UNIX_CMT= +case "$host_os" in +linux*) + LINUX_CMT= + ;; +cygwin) + CYGWIN_CMT= + UNIX_CMT="#" + ;; +esac + + + +case "$host_os" in +linux* | gnu* | k*bsd*-gnu) + if test "$prefix" = NONE -a "$root_prefix" = NONE ; then + root_prefix=""; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: On $host_os systems, root_prefix defaults to ''" >&5 +$as_echo "On $host_os systems, root_prefix defaults to ''" >&6; } + fi + ;; +esac +case "$host_os" in +linux* | gnu* | k*bsd*-gnu) + if test "$prefix" = NONE ; then + prefix="/usr"; + { $as_echo "$as_me:${as_lineno-$LINENO}: result: On $host_os systems, prefix defaults to /usr" >&5 +$as_echo "On $host_os systems, prefix defaults to /usr" >&6; } + if test "$mandir" = '${prefix}/man' ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ...and mandir defaults to /usr/share/man" >&5 +$as_echo "...and mandir defaults to /usr/share/man" >&6; } + mandir=/usr/share/man + fi + fi +;; +esac +if test "$root_prefix" = NONE ; then + if test "$prefix" = NONE ; then + root_prefix="$ac_default_prefix" + else + root_prefix="$prefix" + fi + root_bindir=$bindir + root_sbindir=$sbindir + root_libdir=$libdir + root_sysconfdir=$sysconfdir +else + root_bindir='${root_prefix}/bin' + root_sbindir='${root_prefix}/sbin' + root_libdir='${root_prefix}/lib' + root_sysconfdir='${root_prefix}/etc' +fi +if test "$bindir" != '${exec_prefix}/bin'; then + root_bindir=$bindir + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_bindir to $root_bindir" >&5 +$as_echo "Setting root_bindir to $root_bindir" >&6; } +fi +if test "$sbindir" != '${exec_prefix}/sbin'; then + root_sbindir=$sbindir + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_sbindir to $root_sbindir" >&5 +$as_echo "Setting root_sbindir to $root_sbindir" >&6; } +fi +if test "$libdir" != '${exec_prefix}/lib'; then + root_libdir=$libdir + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_libdir to $root_libdir" >&5 +$as_echo "Setting root_libdir to $root_libdir" >&6; } +fi +if test "$sysconfdir" != '${prefix}/etc'; then + root_sysconfdir=$sysconfdir + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Setting root_sysconfdir to $root_sysconfdir" >&5 +$as_echo "Setting root_sysconfdir to $root_sysconfdir" >&6; } +fi + + + + + + +# Check whether --with-multiarch was given. +if test "${with_multiarch+set}" = set; then : + withval=$with_multiarch; if test "$withval" = "lib64"; then + libdir=/usr/lib64 + root_libdir=/lib64 +else + libdir=$libdir/$withval + root_libdir=$root_libdir/$withval +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can link with -static" >&5 +$as_echo_n "checking whether we can link with -static... " >&6; } +if ${ac_cv_e2fsprogs_use_static+:} false; then : + $as_echo_n "(cached) " >&6 +else + SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS_STATIC -static" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +fflush(stdout); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_e2fsprogs_use_static=yes +else + ac_cv_e2fsprogs_use_static=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LDFLAGS=$SAVE_LDFLAGS +fi + +case "$host_os" in +solaris2.*) + ac_cv_e2fsprogs_use_static=no +;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_e2fsprogs_use_static" >&5 +$as_echo "$ac_cv_e2fsprogs_use_static" >&6; } +if test $ac_cv_e2fsprogs_use_static = yes; then + LDFLAGS_STATIC="$LDFLAGS_STATIC -static" +fi + +case "$host_os" in +darwin*) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using Apple Darwin / GNU libintl workaround" >&5 +$as_echo "Using Apple Darwin / GNU libintl workaround" >&6; } + +$as_echo "#define _INTL_REDIRECT_MACROS 1" >>confdefs.h + + ;; +esac +if test "$cross_compiling" = yes ; then + DO_TEST_SUITE= +else + DO_TEST_SUITE=check +fi + +INCLUDES='-I. -I$(top_builddir)/lib -I$(top_srcdir)/lib' +if test -n "$CPPFLAGS" ; then + INCLUDES="$INCLUDES $CPPFLAGS" +fi +if test "$USE_INCLUDED_LIBINTL" = "yes" ; then + INCLUDES=$INCLUDES' -I$(top_builddir)/intl -I$(top_srcdir)/intl' +fi +if test -n "$WITH_DIET_LIBC" ; then + INCLUDES="$INCLUDES -D_REENTRANT" +fi + + + MKINSTALLDIRS= + if test -n "$ac_aux_dir"; then + case "$ac_aux_dir" in + /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; + *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; + esac + fi + if test -z "$MKINSTALLDIRS"; then + MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" + fi + + +if test $cross_compiling = no; then + BUILD_CFLAGS="$CFLAGS $CPPFLAGS $INCLUDES -DHAVE_CONFIG_H" + BUILD_LDFLAGS="$LDFLAGS" +fi + + +CFLAGS_SHLIB=${CFLAGS_SHLIB:-$CFLAGS} +CFLAGS_STLIB=${CFLAGS_STLIB:-$CFLAGS} +LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS} + + + +test -d lib || mkdir lib +test -d include || mkdir include +test -d include/linux || mkdir include/linux +test -d include/asm || mkdir include/asm +if test -z "$UUID_CMT" ; then + uuid_out_list="lib/uuid/Makefile lib/uuid/uuid.pc \ + lib/uuid/uuid_types.h" +fi +if test -z "$BLKID_CMT" ; then + blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \ + lib/blkid/blkid_types.h" +fi +for i in MCONFIG Makefile e2fsprogs.spec \ + util/Makefile util/subst.conf util/gen-tarball util/install-symlink \ + lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \ + lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \ + $uuid_out_list $blkid_out_list lib/support/Makefile \ + lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.pc lib/ext2fs/ext2fs.pc \ + misc/Makefile ext2ed/Makefile e2fsck/Makefile \ + debugfs/Makefile tests/Makefile tests/progs/Makefile \ + resize/Makefile doc/Makefile intl/Makefile \ + intl/libgnuintl.h po/Makefile.in ; do + if test -d `dirname ${srcdir}/$i` ; then + outlist="$outlist $i" + fi +done +ac_config_files="$ac_config_files $outlist" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + if test "x$cache_file" != "x/dev/null"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + if test ! -f "$cache_file" || test -h "$cache_file"; then + cat confcache >"$cache_file" + else + case $cache_file in #( + */* | ?:*) + mv -f confcache "$cache_file"$$ && + mv -f "$cache_file"$$ "$cache_file" ;; #( + *) + mv -f confcache "$cache_file" ;; + esac + fi + fi + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + + +: "${CONFIG_STATUS=./config.status}" +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in #( + *posix*) : + set -o posix ;; #( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in #( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +as_myself= +case $0 in #(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- +# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are +# provided, also output the error to LOG_FD, referencing LINENO. Then exit the +# script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} # as_fn_error + + +# as_fn_set_status STATUS +# ----------------------- +# Set $? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} # as_fn_set_status + +# as_fn_exit STATUS +# ----------------- +# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} # as_fn_exit + +# as_fn_unset VAR +# --------------- +# Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +# as_fn_append VAR VALUE +# ---------------------- +# Append the text in VALUE to the end of the definition contained in VAR. Take +# advantage of any shell optimizations that allow amortized linear growth over +# repeated appends, instead of the typical quadratic growth present in naive +# implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +# as_fn_arith ARG... +# ------------------ +# Perform arithmetic evaluation on the ARGs, and store the result in the +# global $as_val. Take advantage of shells that can avoid forks. The arguments +# must be portable across $(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in #((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -pR'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -pR' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -pR' + fi +else + as_ln_s='cp -pR' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +# as_fn_mkdir_p +# ------------- +# Create "$as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} # as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + + +# as_fn_executable_p FILE +# ----------------------- +# Test if FILE is an executable regular file. +as_fn_executable_p () +{ + test -f "$1" && test -x "$1" +} # as_fn_executable_p +as_test_x='test -x' +as_executable_p=as_fn_executable_p + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by $as_me, which was +generated by GNU Autoconf 2.69. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to the package provider." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +config.status +configured by $0, generated by GNU Autoconf 2.69, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2012 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +# Capture the value of obsolete ALL_LINGUAS because we need it to compute + # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it + # from automake < 1.5. + eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' + # Capture the value of LINGUAS because we need it to compute CATALOGS. + LINGUAS="${LINGUAS-%UNSET%}" + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "lib/config.h") CONFIG_HEADERS="$CONFIG_HEADERS lib/config.h" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "$outlist") CONFIG_FILES="$CONFIG_FILES $outlist" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= ac_tmp= + trap 'exit_status=$? + : "${ac_tmp:=$tmp}" + { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 +ac_tmp=$tmp + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + +if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then + ac_cs_awk_getline=: + ac_cs_awk_pipe_init= + ac_cs_awk_read_file=' + while ((getline aline < (F[key])) > 0) + print(aline) + close(F[key])' + ac_cs_awk_pipe_fini= +else + ac_cs_awk_getline=false + ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" + ac_cs_awk_read_file=' + print "|#_!!_#|" + print "cat " F[key] " &&" + '$ac_cs_awk_pipe_init + # The final `:' finishes the AND list. + ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' +fi +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$ac_tmp/subs1.awk" && +_ACEOF + +# Create commands to substitute file output variables. +{ + echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && + echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' && + echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && + echo "_ACAWK" && + echo "_ACEOF" +} >conf$$files.sh && +. ./conf$$files.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +rm -f conf$$files.sh + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + \$ac_cs_awk_pipe_init +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + if (nfields == 3 && !substed) { + key = field[2] + if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { + \$ac_cs_awk_read_file + next + } + } + print line +} +\$ac_cs_awk_pipe_fini +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$ac_tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_tt=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_tt"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$ac_tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$ac_tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | +if $ac_cs_awk_getline; then + $AWK -f "$ac_tmp/subs.awk" +else + $AWK -f "$ac_tmp/subs.awk" | $SHELL +fi \ + >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ + "$ac_tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$ac_tmp/stdin" + case $ac_file in + -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; + *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" + } >"$ac_tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$ac_tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "po-directories":C) + for ac_file in $CONFIG_FILES; do + # Support "outfile[:infile[:infile...]]" + case "$ac_file" in + *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; + esac + # PO directories have a Makefile.in generated from Makefile.in.in. + case "$ac_file" in */Makefile.in) + # Adjust a relative srcdir. + ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` + ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` + ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` + # In autoconf-2.13 it is called $ac_given_srcdir. + # In autoconf-2.50 it is called $srcdir. + test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" + case "$ac_given_srcdir" in + .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; + /*) top_srcdir="$ac_given_srcdir" ;; + *) top_srcdir="$ac_dots$ac_given_srcdir" ;; + esac + # Treat a directory as a PO directory if and only if it has a + # POTFILES.in file. This allows packages to have multiple PO + # directories under different names or in different locations. + if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then + rm -f "$ac_dir/POTFILES" + test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" + gt_tab=`printf '\t'` + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" + POMAKEFILEDEPS="POTFILES.in" + # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend + # on $ac_dir but don't depend on user-specified configuration + # parameters. + if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then + # The LINGUAS file contains the set of available languages. + if test -n "$OBSOLETE_ALL_LINGUAS"; then + test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" + fi + ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$ALL_LINGUAS_' + POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" + else + # The set of available languages was given in configure.in. + # Hide the ALL_LINGUAS assignment from automake < 1.5. + eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' + fi + # Compute POFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) + # Compute UPDATEPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) + # Compute DUMMYPOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) + # Compute GMOFILES + # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) + case "$ac_given_srcdir" in + .) srcdirpre= ;; + *) srcdirpre='$(srcdir)/' ;; + esac + POFILES= + UPDATEPOFILES= + DUMMYPOFILES= + GMOFILES= + for lang in $ALL_LINGUAS; do + POFILES="$POFILES $srcdirpre$lang.po" + UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" + DUMMYPOFILES="$DUMMYPOFILES $lang.nop" + GMOFILES="$GMOFILES $srcdirpre$lang.gmo" + done + # CATALOGS depends on both $ac_dir and the user's LINGUAS + # environment variable. + INST_LINGUAS= + if test -n "$ALL_LINGUAS"; then + for presentlang in $ALL_LINGUAS; do + useit=no + if test "%UNSET%" != "$LINGUAS"; then + desiredlanguages="$LINGUAS" + else + desiredlanguages="$ALL_LINGUAS" + fi + for desiredlang in $desiredlanguages; do + # Use the presentlang catalog if desiredlang is + # a. equal to presentlang, or + # b. a variant of presentlang (because in this case, + # presentlang can be used as a fallback for messages + # which are not translated in the desiredlang catalog). + case "$desiredlang" in + "$presentlang"*) useit=yes;; + esac + done + if test $useit = yes; then + INST_LINGUAS="$INST_LINGUAS $presentlang" + fi + done + fi + CATALOGS= + if test -n "$INST_LINGUAS"; then + for lang in $INST_LINGUAS; do + CATALOGS="$CATALOGS $lang.gmo" + done + fi + test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" + sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" + for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do + if test -f "$f"; then + case "$f" in + *.orig | *.bak | *~) ;; + *) cat "$f" >> "$ac_dir/Makefile" ;; + esac + fi + done + fi + ;; + esac + done ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + +if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..9da7b86 --- /dev/null +++ b/configure.ac @@ -0,0 +1,1475 @@ +AC_INIT(version.h) +AC_PREREQ(2.54) +AC_CONFIG_AUX_DIR(config) +AC_CONFIG_HEADERS([lib/config.h]) +AH_BOTTOM([#include ]) +MCONFIG=./MCONFIG +AC_SUBST_FILE(MCONFIG) +BINARY_TYPE=bin +dnl +dnl This is to figure out the version number and the date.... +dnl +E2FSPROGS_VERSION=`grep E2FSPROGS_VERSION ${srcdir}/version.h \ + | awk '{print $3}' | tr \" " " | awk '{print $1}'` +DATE=`grep E2FSPROGS_DATE ${srcdir}/version.h | awk '{print $3}' \ + | tr \" " "` +E2FSPROGS_DAY=$(echo $DATE | awk -F- '{print $1}' | sed -e '/^[[1-9]]$/s/^/0/') +MONTH=`echo $DATE | awk -F- '{print $2}'` +YEAR=`echo $DATE | awk -F- '{print $3}'` + +if expr $YEAR ">" 1900 > /dev/null ; then + E2FSPROGS_YEAR=$YEAR +elif expr $YEAR ">" 90 >/dev/null ; then + E2FSPROGS_YEAR=19$YEAR +else + E2FSPROGS_YEAR=20$YEAR +fi + +case $MONTH in +Jan) MONTH_NUM=01; E2FSPROGS_MONTH="January" ;; +Feb) MONTH_NUM=02; E2FSPROGS_MONTH="February" ;; +Mar) MONTH_NUM=03; E2FSPROGS_MONTH="March" ;; +Apr) MONTH_NUM=04; E2FSPROGS_MONTH="April" ;; +May) MONTH_NUM=05; E2FSPROGS_MONTH="May" ;; +Jun) MONTH_NUM=06; E2FSPROGS_MONTH="June" ;; +Jul) MONTH_NUM=07; E2FSPROGS_MONTH="July" ;; +Aug) MONTH_NUM=08; E2FSPROGS_MONTH="August" ;; +Sep) MONTH_NUM=09; E2FSPROGS_MONTH="September" ;; +Oct) MONTH_NUM=10; E2FSPROGS_MONTH="October" ;; +Nov) MONTH_NUM=11; E2FSPROGS_MONTH="November" ;; +Dec) MONTH_NUM=12; E2FSPROGS_MONTH="December" ;; +*) AC_MSG_WARN([Unknown month $MONTH??]) ;; +esac + +base_ver=`echo $E2FSPROGS_VERSION | \ + sed -e 's/-WIP//' -e 's/pre-//' -e 's/-PLUS//'` + +date_spec=${E2FSPROGS_YEAR}.${MONTH_NUM}.${E2FSPROGS_DAY} + +case $E2FSPROGS_VERSION in +*-WIP|pre-*) + E2FSPROGS_PKGVER="$base_ver~WIP.$date_spec" + ;; +*) + E2FSPROGS_PKGVER="$base_ver" + ;; +esac + +unset DATE MONTH YEAR base_ver pre_vers date_spec +AC_MSG_RESULT([Generating configuration file for e2fsprogs version $E2FSPROGS_VERSION]) +AC_MSG_RESULT([Release date is ${E2FSPROGS_MONTH}, ${E2FSPROGS_YEAR}]) +AC_SUBST(E2FSPROGS_YEAR) +AC_SUBST(E2FSPROGS_MONTH) +AC_SUBST(E2FSPROGS_DAY) +AC_SUBST(E2FSPROGS_VERSION) +AC_SUBST(E2FSPROGS_PKGVER) +dnl +dnl Use diet libc +dnl +WITH_DIET_LIBC= +AC_ARG_WITH([diet-libc], +[ --with-diet-libc use diet libc], +CC="diet cc -nostdinc" +WITH_DIET_LIBC=yes +if test -z "$LIBS" +then + LIBS="-lcompat" +else + LIBS="$LIBS -lcompat" +fi +AC_MSG_RESULT(CC=$CC))dnl +dnl +AC_CANONICAL_HOST +dnl +dnl Check to see if libdl exists for the sake of dlopen +dnl +DLOPEN_LIB='' +AC_CHECK_LIB(dl, dlopen,DLOPEN_LIB=-ldl) +AC_SUBST(DLOPEN_LIB) +dnl +AC_ARG_WITH([cc], +AC_HELP_STRING([--with-cc],[no longer supported, use CC= instead]), +AC_MSG_ERROR([--with-cc no longer supported; use CC= instead])) +dnl +AC_ARG_WITH([ccopts], +AC_HELP_STRING([--with-ccopts],[no longer supported, use CFLAGS= instead]), +AC_MSG_ERROR([--with-ccopts no longer supported; use CFLAGS= instead])) +dnl +AC_ARG_WITH([ldopts], +AC_HELP_STRING([--with-ldopts],[no longer supported, use LDFLAGS= instead]), +AC_MSG_ERROR([--with-ldopts no longer supported; use LDFLAGS= instead])) +dnl +AC_PROG_CC +if test "$GCC" = yes; then + RDYNAMIC="-rdynamic" + AC_SUBST(RDYNAMIC) +fi +AC_PROG_CPP +dnl +dnl Alpha computers use fast and imprecise floating point code that may +dnl miss exceptions by default. Force sane options if we're using GCC. +AC_MSG_CHECKING(for additional special compiler flags) +if test "$GCC" = yes +then + case "$host_cpu" in + alpha) addcflags="-mieee" ;; + esac +fi +if test "x$addcflags" != x +then + AC_MSG_RESULT($addcflags) + CFLAGS="$addcflags $CFLAGS" +else + AC_MSG_RESULT([[(none)]]) +fi +AC_USE_SYSTEM_EXTENSIONS +dnl +dnl Set default values for library extentions. Will be dealt with after +dnl parsing configuration opions, which may modify these +dnl +LIB_EXT=.a +STATIC_LIB_EXT=.a +PROFILED_LIB_EXT=.a +dnl +dnl Allow separate `root_prefix' to be specified +dnl +AC_ARG_WITH([root-prefix], +[ --with-root-prefix=PREFIX override prefix variable for files to be placed in the root], +root_prefix=$withval, +root_prefix=NONE)dnl +dnl +dnl handle --enable-maintainer-mode +dnl +AC_ARG_ENABLE([maintainer-mode], +[ --enable-maintainer-mode enable makefile rules useful for maintainers], +if test "$enableval" = "no" +then + MAINTAINER_CMT=# + AC_MSG_RESULT([Disabling maintainer mode]) +else + MAINTAINER_CMT= + AC_MSG_RESULT([Enabling maintainer mode]) +fi +, +MAINTAINER_CMT=# +AC_MSG_RESULT([Disabling maintainer mode by default]) +) +AC_SUBST(MAINTAINER_CMT) +dnl +dnl handle --enable-symlink-install +dnl +AC_ARG_ENABLE([symlink-install], +[ --enable-symlink-install use symlinks when installing instead of hard links], +if test "$enableval" = "no" +then + LINK_INSTALL_FLAGS=-f + AC_MSG_RESULT([Disabling symlinks for install]) +else + LINK_INSTALL_FLAGS=-sf + AC_MSG_RESULT([Enabling symlinks for install]) +fi +, +LINK_INSTALL_FLAGS=-f +AC_MSG_RESULT([Disabling symlinks for install by default]) +) +AC_SUBST(LINK_INSTALL_FLAGS) +dnl +dnl handle --enable-relative-symlinks +dnl +relative_symlink_defined= +AC_ARG_ENABLE([relative-symlinks], +[ --enable-relative-symlinks use relative symlinks when installing], +if test "$enableval" = "no" +then + SYMLINK_RELATIVE= + relative_symlink_defined=yes + AC_MSG_RESULT([Disabling relative symlinks for install]) +else + SYMLINK_RELATIVE=--relative + relative_symlink_defined=yes + AC_MSG_RESULT([Enabling relative symlinks for install]) +fi) +AC_ARG_ENABLE([symlink-relative-symlinks],, +if test "$enableval" = "no" +then + SYMLINK_RELATIVE=yes + AC_MSG_RESULT([Disabling relative symlinks for install]) +else + SYMLINK_RELATIVE=--relative + AC_MSG_RESULT([Enabling relative symlinks for install]) +fi +, +if test -z "$relative_symlink_defined" +then + SYMLINK_RELATIVE= +AC_MSG_RESULT([Disabling relative symlinks for install by default]) +fi +) +AC_SUBST(SYMLINK_RELATIVE) +dnl +dnl handle --enable-symlink-build +dnl +AC_ARG_ENABLE([symlink-build], +[ --enable-symlink-build use symlinks while building instead of hard links], +if test "$enableval" = "no" +then + LINK_BUILD_FLAGS= + AC_MSG_RESULT([Disabling symlinks for build]) +else + LINK_BUILD_FLAGS=-s + AC_MSG_RESULT([Enabling symlinks for build]) +fi +, +LINK_BUILD_FLAGS= +AC_MSG_RESULT([Disabling symlinks for build by default]) +) +AC_SUBST(LINK_BUILD_FLAGS) +dnl +dnl handle --enable-verbose-makecmds +dnl +AC_ARG_ENABLE([verbose-makecmds], +[ --enable-verbose-makecmds enable verbose make command output], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling verbose make commands]) + E=@echo + ES=echo + Q=@ +else + AC_MSG_RESULT([Enabling verbose make commands]) + E=@\\# + ES=\\# + Q= +fi +, +AC_MSG_RESULT([Disabling verbose make commands]) +E=@echo +ES=echo +Q=@ +) +AC_SUBST(E) +AC_SUBST(ES) +AC_SUBST(Q) +dnl +dnl This needs to be before all of the --enable-*-shlibs options +dnl +E2_PKG_CONFIG_STATIC=--static +LDFLAG_DYNAMIC= +PRIVATE_LIBS_CMT= +dnl +dnl handle --enable-elf-shlibs +dnl +AC_ARG_ENABLE([elf-shlibs], +[ --enable-elf-shlibs select ELF shared libraries], +if test "$enableval" = "no" +then + ELF_CMT=# + MAKEFILE_ELF=/dev/null + AC_MSG_RESULT([Disabling ELF shared libraries]) +else + E2_PKG_CONFIG_STATIC= + ELF_CMT= + MAKEFILE_ELF=$srcdir/lib/Makefile.elf-lib + [case "$host_os" in + solaris2.*) + MAKEFILE_ELF=$srcdir/lib/Makefile.solaris-lib + ;; + esac] + BINARY_TYPE=elfbin + LIB_EXT=.so + PRIVATE_LIBS_CMT=# + LDFLAG_DYNAMIC=['-Wl,-rpath-link,$(top_builddir)/lib'] + AC_MSG_RESULT([Enabling ELF shared libraries]) +fi +, +MAKEFILE_ELF=/dev/null +ELF_CMT=# +AC_MSG_RESULT([Disabling ELF shared libraries by default]) +) +AC_SUBST(ELF_CMT) +AC_SUBST_FILE(MAKEFILE_ELF) +dnl +dnl handle --enable-bsd-shlibs +dnl +AC_ARG_ENABLE([bsd-shlibs], +[ --enable-bsd-shlibs select BSD shared libraries], +if test "$enableval" = "no" +then + BSDLIB_CMT=# + MAKEFILE_BSDLIB=/dev/null + AC_MSG_RESULT([Disabling BSD shared libraries]) +else + E2_PKG_CONFIG_STATIC= + BSDLIB_CMT= + MAKEFILE_BSDLIB=$srcdir/lib/Makefile.bsd-lib + LIB_EXT=.so + [case "$host_os" in + darwin*) + MAKEFILE_BSDLIB=$srcdir/lib/Makefile.darwin-lib + LIB_EXT=.dylib + ;; + esac] + AC_MSG_RESULT([Enabling BSD shared libraries]) +fi +, +MAKEFILE_BSDLIB=/dev/null +BSDLIB_CMT=# +AC_MSG_RESULT([Disabling BSD shared libraries by default]) +) +AC_SUBST(BSDLIB_CMT) +AC_SUBST_FILE(MAKEFILE_BSDLIB) +dnl +dnl handle --enable-profile +dnl +AC_ARG_ENABLE([profile], +[ --enable-profile build profiling libraries], +if test "$enableval" = "no" +then + PROFILE_CMT=# + MAKEFILE_PROFILE=/dev/null + AC_MSG_RESULT([Disabling profiling libraries]) +else + PROFILE_CMT= + MAKEFILE_PROFILE=$srcdir/lib/Makefile.profile + PROFILED_LIB_EXT=_p.a + AC_MSG_RESULT([Building profiling libraries]) +fi +, +PROFILE_CMT=# +MAKEFILE_PROFILE=/dev/null +AC_MSG_RESULT([Disabling profiling libraries by default]) +) +AC_SUBST(PROFILE_CMT) +AC_SUBST_FILE(MAKEFILE_PROFILE) +dnl +dnl handle --enable-gcov +dnl +AC_ARG_ENABLE([gcov], +[ --enable-gcov build for coverage testing using gcov], +if test "$enableval" = "yes" +then + CFLAGS="-g -fprofile-arcs -ftest-coverage" + LDFLAGS="-fprofile-arcs -ftest-coverage" + AC_MSG_RESULT([Enabling gcov support]) +fi +) +dnl +dnl handle --enable-hardening +dnl +CFLAGS_SHLIB="${CFLAGS_SHLIB:-$CFLAGS}" +CFLAGS_STLIB="${CFLAGS_STLIB:-$CFLAGS}" +LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS} +LDFLAGS_STATIC=${LDFLAGS_STATIC:-$LDFLAGS} +AC_ARG_ENABLE([hardening], +[ --enable-hardening build for coverage testing using gcov], +if test "$enableval" = "yes" +then + HARDEN_CFLAGS="-D_FORTIFY_SOURCE=2 -fstack-protector-strong" + HARDEN_LDFLAGS=["-Wl,-z,relro -Wl,-z,now"] + CFLAGS="$CFLAGS $HARDEN_CFLAGS -fPIE" + CFLAGS_SHLIB="$CFLAGS_SHLIB $HARDEN_CFLAGS" + CFLAGS_STLIB="$CFLAGS_STLIB $HARDEN_CFLAGS -fPIE" + LDFLAGS="$LDFLAGS $HARDEN_LDFLAGS -fPIE -pie" + LDFLAGS_STATIC="$LDFLAGS_STATIC $HARDEN_LDFLAGS" + LDFLAGS_SHLIB="$LDFLAGS_SHLIB $HARDEN_LDFLAGS" + AC_MSG_RESULT([Enabling hardening support]) +fi +) +dnl +dnl Substitute library extensions +dnl +AC_SUBST(LIB_EXT) +AC_SUBST(STATIC_LIB_EXT) +AC_SUBST(PROFILED_LIB_EXT) +AC_SUBST(LDFLAG_DYNAMIC) +AC_SUBST(PRIVATE_LIBS_CMT) +dnl +dnl handle --enable-jbd-debug +dnl +AC_ARG_ENABLE([jbd-debug], +[ --enable-jbd-debug enable journal debugging], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling journal debugging]) +else + AC_DEFINE(CONFIG_JBD_DEBUG, 1, + [Define to 1 if debugging ext3/4 journal code]) + AC_MSG_RESULT([Enabling journal debugging]) +fi +, +AC_MSG_RESULT([Disabling journal debugging by default]) +) +dnl +dnl handle --enable-blkid-debug +dnl +AC_ARG_ENABLE([blkid-debug], +[ --enable-blkid-debug enable blkid debugging], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling blkid debugging]) +else + AC_DEFINE(CONFIG_BLKID_DEBUG, 1, + [Define to 1 if debugging the blkid library]) + AC_MSG_RESULT([Enabling blkid debugging]) +fi +, +AC_MSG_RESULT([Disabling blkid debugging by default]) +) +dnl +dnl handle --enable-testio-debug +dnl +AC_ARG_ENABLE([testio-debug], +[ --disable-testio-debug disable the use of the test I/O manager for debugging], +AH_TEMPLATE([CONFIG_TESTIO_DEBUG], + [Define to 1 if the testio I/O manager should be enabled]) +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling testio debugging]) + TEST_IO_CMT="#" +else + TEST_IO_CMT= + AC_DEFINE(CONFIG_TESTIO_DEBUG, 1) + AC_MSG_RESULT([Enabling testio debugging]) +fi +, +AC_MSG_RESULT([Enabling testio debugging by default]) +AC_DEFINE(CONFIG_TESTIO_DEBUG, 1) +TEST_IO_CMT= +) +AC_SUBST(TEST_IO_CMT) +dnl +dnl handle --disable-libuuid +dnl +PKG_PROG_PKG_CONFIG +LIBUUID= +DEPLIBUUID= +STATIC_LIBUUID= +DEPSTATIC_LIBUUID= +PROFILED_LIBUUID= +DEPPROFILED_LIBUUID= +UUID_CMT= +AC_ARG_ENABLE([libuuid], +[ --enable-libuuid build and use private uuid library], +if test "$enableval" = "no" +then + if test -z "$PKG_CONFIG"; then + AC_MSG_ERROR([pkg-config not installed; please install it.]) + fi + + AC_CHECK_LIB(uuid, uuid_generate, + [LIBUUID=`$PKG_CONFIG --libs uuid`; + STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`], + [AC_MSG_ERROR([external uuid library not found])]) + PROFILED_LIBUUID=$LIBUUID + UUID_CMT=# + AC_MSG_RESULT([Disabling private uuid library]) +else + LIBUUID='$(LIB)/libuuid'$LIB_EXT + DEPLIBUUID=$LIBUUID + STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT + DEPSTATIC_LIBUUID=$STATIC_LIBUUID + PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT + DEPPROFILED_LIBUUID=$PROFILED_LIBUUID + AC_MSG_RESULT([Enabling private uuid library]) +fi +, +if test -n "$PKG_CONFIG"; then + AC_CHECK_LIB(uuid, uuid_generate, + [LIBUUID=`$PKG_CONFIG --libs uuid`; + STATIC_LIBUUID=`$PKG_CONFIG --static --libs uuid`]) +fi +if test -n "$LIBUUID"; then + PROFILED_LIBUUID=$LIBUUID + UUID_CMT=# + AC_MSG_RESULT([Using system uuid by default]) +else + LIBUUID='$(LIB)/libuuid'$LIB_EXT + DEPLIBUUID=$LIBUUID + STATIC_LIBUUID='$(LIB)/libuuid'$STATIC_LIB_EXT + DEPSTATIC_LIBUUID=$STATIC_LIBUUID + PROFILED_LIBUUID='$(LIB)/libuuid'$PROFILED_LIB_EXT + DEPPROFILED_LIBUUID=$PROFILED_LIBUUID + AC_MSG_RESULT([Enabling private uuid library by default]) +fi +) +AC_SUBST(LIBUUID) +AC_SUBST(DEPLIBUUID) +AC_SUBST(STATIC_LIBUUID) +AC_SUBST(DEPSTATIC_LIBUUID) +AC_SUBST(PROFILED_LIBUUID) +AC_SUBST(DEPPROFILED_LIBUUID) +AC_SUBST(UUID_CMT) +dnl +dnl handle --disable-libblkid +dnl +PKG_PROG_PKG_CONFIG +LIBBLKID= +DEPLIBBLKID= +STATIC_LIBBLKID= +DEPSTATIC_LIBBLKID= +PROFILED_LIBBLKID= +DEPPROFILED_LIBBLKID= +BLKID_CMT= +AH_TEMPLATE([CONFIG_BUILD_FINDFS], [Define to 1 to compile findfs]) +AC_ARG_ENABLE([libblkid], +[ --enable-libblkid build and use private blkid library], +if test "$enableval" = "no" +then + if test -z "$PKG_CONFIG"; then + AC_MSG_ERROR([pkg-config not installed; please install it.]) + fi + + AC_CHECK_LIB(blkid, blkid_get_cache, + [LIBBLKID=`$PKG_CONFIG --libs blkid`; + STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`], + [AC_MSG_ERROR([external blkid library not found])], -luuid) + BLKID_CMT=# + PROFILED_LIBBLKID=$LIBBLKID + AC_MSG_RESULT([Disabling private blkid library]) +else + LIBBLKID='$(LIB)/libblkid'$LIB_EXT + DEPLIBBLKID=$LIBBLKID + STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT + DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID + PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT + DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID + AC_DEFINE(CONFIG_BUILD_FINDFS, 1) + AC_MSG_RESULT([Enabling private blkid library]) +fi +, +if test -n "$PKG_CONFIG"; then + AC_CHECK_LIB(blkid, blkid_get_cache, + [LIBBLKID=`$PKG_CONFIG --libs blkid`; + STATIC_LIBBLKID=`$PKG_CONFIG --static --libs blkid`]) +fi +if test -n "$LIBBLKID"; then + BLKID_CMT=# + PROFILED_LIBBLKID=$LIBBLKID + AC_MSG_RESULT([Using system blkid library by default]) +else + LIBBLKID='$(LIB)/libblkid'$LIB_EXT + DEPLIBBLKID=$LIBBLKID + STATIC_LIBBLKID='$(LIB)/libblkid'$STATIC_LIB_EXT + DEPSTATIC_LIBBLKID=$STATIC_LIBBLKID + PROFILED_LIBBLKID='$(LIB)/libblkid'$PROFILED_LIB_EXT + DEPPROFILED_LIBBLKID=$PROFILED_LIBBLKID + AC_DEFINE(CONFIG_BUILD_FINDFS, 1) + AC_MSG_RESULT([Enabling private blkid library by default]) +fi +) +AC_SUBST(LIBBLKID) +AC_SUBST(DEPLIBBLKID) +AC_SUBST(STATIC_LIBBLKID) +AC_SUBST(DEPSTATIC_LIBBLKID) +AC_SUBST(PROFILED_LIBBLKID) +AC_SUBST(DEPPROFILED_LIBBLKID) +AC_SUBST(BLKID_CMT) +dnl +dnl handle --disable-backtrace +dnl +AH_TEMPLATE([DISABLE_BACKTRACE], [Define to 1 to disable use of backtrace]) +AC_ARG_ENABLE([backtrace], +[ --disable-backtrace disable use backtrace], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling use of backtrace]) + AC_DEFINE(DISABLE_BACKTRACE, 1) +else + AC_MSG_RESULT([Enabling use of backtrace]) +fi +, +AC_MSG_RESULT([Enabling use of backtrace by default]) +) +dnl +dnl handle --enable-debugfs +dnl +AC_ARG_ENABLE([debugfs], +[ --disable-debugfs disable support of debugfs program], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling debugfs support]) + DEBUGFS_CMT="#" +else + DEBUGFS_CMT= + AC_MSG_RESULT([Enabling debugfs support]) +fi +, +AC_MSG_RESULT([Enabling debugfs support by default]) +DEBUGFS_CMT= +) +AC_SUBST(DEBUGFS_CMT) +dnl +dnl handle --enable-imager +dnl +AC_ARG_ENABLE([imager], +[ --disable-imager disable support of e2image program], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling e2image support]) + IMAGER_CMT="#" +else + IMAGER_CMT= + AC_MSG_RESULT([Enabling e2image support]) +fi +, +AC_MSG_RESULT([Enabling e2image support by default]) +IMAGER_CMT= +) +AC_SUBST(IMAGER_CMT) +dnl +dnl handle --enable-resizer +dnl +AC_ARG_ENABLE([resizer], +[ --disable-resizer disable support of e2resize program], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling e2resize support]) + RESIZER_CMT="#" +else + RESIZER_CMT= + AC_MSG_RESULT([Enabling e2resize support]) +fi +, +AC_MSG_RESULT([Enabling e2resize support by default]) +RESIZER_CMT= +) +AC_SUBST(RESIZER_CMT) +dnl +dnl handle --enable-defrag +dnl +AC_ARG_ENABLE([defrag], +[ --disable-defrag disable support of e4defrag program], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling e4defrag support]) + DEFRAG_CMT="#" +else + DEFRAG_CMT= + AC_MSG_RESULT([Enabling e4defrag support]) +fi +, +if test -z "$WITH_DIET_LIBC" +then + AC_MSG_RESULT([Enabling e4defrag support by default]) + DEFRAG_CMT= +else + AC_MSG_RESULT([Disabling e4defrag support by default]) + DEFRAG_CMT="#" +fi +) +AC_SUBST(DEFRAG_CMT) +dnl +dnl See whether to install the `fsck' wrapper program (that calls e2fsck) +dnl +AC_ARG_ENABLE([fsck], +[ --enable-fsck build fsck wrapper program], +[if test "$enableval" = "no" +then + FSCK_PROG='' FSCK_MAN='' + AC_MSG_RESULT([Not building fsck wrapper]) +else + FSCK_PROG=fsck FSCK_MAN=fsck.8 + AC_MSG_RESULT([Building fsck wrapper]) +fi] +, +[case "$host_os" in + gnu*) + FSCK_PROG='' FSCK_MAN='' + AC_MSG_RESULT([Not building fsck wrapper by default]) + ;; + *) + FSCK_PROG=fsck FSCK_MAN=fsck.8 + AC_MSG_RESULT([Building fsck wrapper by default]) +esac] +) +AC_SUBST(FSCK_PROG) +AC_SUBST(FSCK_MAN) +dnl +dnl See whether to install the `e2initrd-helper' program +dnl +AC_ARG_ENABLE([e2initrd-helper], +[ --enable-e2initrd-helper build e2initrd-helper program], +[if test "$enableval" = "no" +then + E2INITRD_PROG='' E2INITRD_MAN='' + AC_MSG_RESULT([Not building e2initrd helper]) +else + E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8 + AC_MSG_RESULT([Building e2initrd helper]) +fi] +, +E2INITRD_PROG=e2initrd_helper E2INITRD_MAN=e2initrd_helper.8 +AC_MSG_RESULT([Building e2initrd helper by default]) +) +AC_SUBST(E2INITRD_PROG) +AC_SUBST(E2INITRD_MAN) +dnl +dnl +dnl +AC_ARG_ENABLE([tls], +[ --disable-tls disable use of thread local support], +[if test "$enableval" = "no" +then + try_tls="" + AC_MSG_RESULT([Disabling thread local support]) +else + try_tls="yes" + AC_MSG_RESULT([Enabling thread local support]) +fi] +, +if test -n "$WITH_DIET_LIBC" +then + try_tls="" + AC_MSG_RESULT([Diet libc does not support thread local support]) +else + try_tls="yes" + AC_MSG_RESULT([Try using thread local support by default]) +fi +) +if test "$try_tls" = "yes" +then +AX_TLS +fi +dnl +dnl +dnl +AH_TEMPLATE([USE_UUIDD], [Define to 1 to build uuidd]) +AC_ARG_ENABLE([uuidd], +[ --disable-uuidd disable building the uuid daemon], +[if test "$enableval" = "no" +then + AC_MSG_RESULT([Not building uuidd]) + UUIDD_CMT="#" +else + AC_DEFINE(USE_UUIDD, 1) + UUIDD_CMT="" + AC_MSG_RESULT([Building uuidd]) +fi] +, +AC_DEFINE(USE_UUIDD, 1) +if test -z "$UUID_CMT" +then + UUIDD_CMT="" + AC_MSG_RESULT([Building uuidd by default]) +else + UUIDD_CMT="#" + AC_MSG_RESULT([Disabling uuidd by default]) +fi +) +AC_SUBST(UUIDD_CMT) +dnl +dnl handle --disable-mmp +dnl +AH_TEMPLATE([CONFIG_MMP], [Define to 1 to enable mmp support]) +AC_ARG_ENABLE([mmp], +[ --disable-mmp disable support mmp, Multi Mount Protection], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling mmp support]) +else + AC_MSG_RESULT([Enabling mmp support]) + AC_DEFINE(CONFIG_MMP, 1) +fi +, +AC_MSG_RESULT([Enabling mmp support by default]) +AC_DEFINE(CONFIG_MMP, 1) +) +dnl +dnl handle --disable-tdb +dnl +AH_TEMPLATE([CONFIG_TDB], [Define to 1 to enable tdb support]) +AC_ARG_ENABLE([tdb], +[ --disable-tdb disable tdb support], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling tdb support]) + TDB_CMT="#" + TDB_MAN_COMMENT='.\"' +else + AC_MSG_RESULT([Enabling tdb support]) + AC_DEFINE(CONFIG_TDB, 1) + TDB_CMT="" + TDB_MAN_COMMENT="" +fi +, +AC_MSG_RESULT([Enabling mmp support by default]) +AC_DEFINE(CONFIG_TDB, 1) +TDB_CMT="" +TDB_MAN_COMMENT="" +) +AC_SUBST(TDB_CMT) +AC_SUBST(TDB_MAN_COMMENT) +dnl +dnl handle --disable-bmap-stats +dnl +AH_TEMPLATE([ENABLE_BMAP_STATS], [Define to 1 to enable bitmap stats.]) +AC_ARG_ENABLE([bmap-stats], +[ --disable-bmap-stats disable collection of bitmap stats.], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling bitmap statistics support]) +else + AC_MSG_RESULT([Enabling bitmap statistics support]) + AC_DEFINE(ENABLE_BMAP_STATS, 1) +fi +, +AC_MSG_RESULT([Enabling bitmap statistics support by default]) +AC_DEFINE(ENABLE_BMAP_STATS, 1) +) +dnl +dnl handle --enable-bmap-stats-ops +dnl +AH_TEMPLATE([ENABLE_BMAP_STATS_OPS], [Define to 1 to enable bitmap stats.]) +AC_ARG_ENABLE([bmap-stats-ops], +[ --enable-bmap-stats-ops enable collection of additional bitmap stats], +if test "$enableval" = "no" +then + AC_MSG_RESULT([Disabling additional bitmap statistics]) +else + dnl There has to be a better way! + AS_IF([test "x${enable_bmap_stats}" = "xno"], + AC_MSG_FAILURE([Error --enable-bmap-stats-ops requires bmap-stats])) + + AC_MSG_RESULT([Enabling additional bitmap statistics]) + AC_DEFINE(ENABLE_BMAP_STATS_OPS, 1) +fi +, +AC_MSG_RESULT([Disabling additional bitmap statistics by default]) +) +dnl +dnl +dnl +MAKEFILE_LIBRARY=$srcdir/lib/Makefile.library +AC_SUBST_FILE(MAKEFILE_LIBRARY) +dnl +dnl Add internationalization support, using gettext. +dnl +GETTEXT_PACKAGE=e2fsprogs +PACKAGE=e2fsprogs +VERSION="$E2FSPROGS_VERSION" +VERSION=0.14.1 +AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [package name for gettext]) +AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [version for gettext]) +AC_SUBST(GETTEXT_PACKAGE) +AC_SUBST(PACKAGE) +AC_SUBST(VERSION) + +AM_GNU_GETTEXT +dnl +dnl End of configuration options +dnl +AC_SUBST(BINARY_TYPE) +AC_PROG_MAKE_SET +CHECK_GNU_MAKE +AC_PATH_PROG(LN, ln, ln) +AC_PROG_LN_S +AC_PATH_PROG(MV, mv, mv) +AC_PATH_PROG(CP, cp, cp) +AC_PATH_PROG(RM, rm, rm) +AC_PATH_PROG(CHMOD, chmod, :) +AC_PROG_AWK +AC_PROG_EGREP +AC_PATH_PROG(SED, sed, sed) +AC_PATH_PROG(PERL, perl, perl) +AC_PATH_PROG(LDCONFIG, ldconfig, :) +AC_CHECK_TOOL(AR, ar, ar) +AC_CHECK_TOOL(RANLIB, ranlib, :) +AC_CHECK_TOOL(STRIP, strip, :) +AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, ) +if test "_$MAKEINFO" = "_"; then + MAKEINFO="echo Makeinfo is missing. Info documentation will not be built." +else + case "$MAKEINFO" in + */missing.*) + AC_MSG_WARN([ +*** Makeinfo is missing. Info documentation will not be built.]) + ;; + *) + ;; + esac +fi +AC_SUBST(MAKEINFO) +AC_PROG_INSTALL +# See if we need a separate native compiler. +if test $cross_compiling = no; then + BUILD_CC="$CC" + AC_SUBST(BUILD_CC) +else + AC_CHECK_PROGS(BUILD_CC, gcc cc) +fi +AC_CHECK_HEADERS(m4_flatten([ + dirent.h + errno.h + execinfo.h + getopt.h + malloc.h + mntent.h + paths.h + semaphore.h + setjmp.h + signal.h + stdarg.h + stdint.h + stdlib.h + termios.h + termio.h + unistd.h + utime.h + attr/xattr.h + linux/falloc.h + linux/fd.h + linux/major.h + linux/loop.h + net/if_dl.h + netinet/in.h + sys/acl.h + sys/disklabel.h + sys/disk.h + sys/file.h + sys/ioctl.h + sys/key.h + sys/mkdev.h + sys/mman.h + sys/mount.h + sys/prctl.h + sys/resource.h + sys/select.h + sys/socket.h + sys/sockio.h + sys/stat.h + sys/syscall.h + sys/sysctl.h + sys/sysmacros.h + sys/time.h + sys/types.h + sys/un.h + sys/wait.h +])) +AC_CHECK_HEADERS(net/if.h,,, +[[ +#if HAVE_SYS_TYPES_H +#include +#endif +#if HAVE_SYS_SOCKET +#include +#endif +]]) +AC_FUNC_VPRINTF +dnl Check to see if dirent has member d_reclen. On cygwin those d_reclen +dnl is not decleared. +AC_CHECK_MEMBER(struct dirent.d_reclen,[AC_DEFINE(HAVE_RECLEN_DIRENT, 1, + [Define to 1 if dirent has d_reclen])],, + [#include ]) +AC_CHECK_MEMBERS([struct stat.st_atim]) +dnl Check to see if ssize_t was declared +AC_CHECK_TYPE(ssize_t,[AC_DEFINE(HAVE_TYPE_SSIZE_T, 1, + [Define to 1 if ssize_t declared])],, + [#include ]) +dnl +dnl Check to see if llseek() is declared in unistd.h. On some libc's +dnl it is, and on others it isn't..... Thank you glibc developers.... +dnl +AC_CHECK_DECL(llseek,[AC_DEFINE(HAVE_LLSEEK_PROTOTYPE, 1, + [Define to 1 if llseek declared in unistd.h])],, + [#include ]) +dnl +dnl Check to see if lseek64() is declared in unistd.h. Glibc's header files +dnl are so convoluted that I can't tell whether it will always be defined, +dnl and if it isn't defined while lseek64 is defined in the library, +dnl disaster will strike. +dnl +dnl Warning! Use of --enable-gcc-wall may throw off this test. +dnl +dnl +AC_CHECK_DECL(lseek64,[AC_DEFINE(HAVE_LSEEK64_PROTOTYPE, 1, + [Define to 1 if lseek64 declared in unistd.h])],, + [#define _LARGEFILE_SOURCE + #define _LARGEFILE64_SOURCE + #include ]) +dnl +dnl Word sizes... +dnl +AC_CHECK_SIZEOF(short) +AC_CHECK_SIZEOF(int) +AC_CHECK_SIZEOF(long) +AC_CHECK_SIZEOF(long long) +AC_CHECK_SIZEOF(off_t) +AC_CHECK_SIZEOF(time_t) +SIZEOF_SHORT=$ac_cv_sizeof_short +SIZEOF_INT=$ac_cv_sizeof_int +SIZEOF_LONG=$ac_cv_sizeof_long +SIZEOF_LONG_LONG=$ac_cv_sizeof_long_long +SIZEOF_OFF_T=$ac_cv_sizeof_off_t +SIZEOF_TIME_T=$ac_cv_sizeof_time_t +AC_SUBST(SIZEOF_SHORT) +AC_SUBST(SIZEOF_INT) +AC_SUBST(SIZEOF_LONG) +AC_SUBST(SIZEOF_LONG_LONG) +AC_SUBST(SIZEOF_OFF_T) +AC_SUBST(SIZEOF_TIME_T) +AC_C_BIGENDIAN +if test $cross_compiling = no; then + BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh +else + CROSS_COMPILE="1" BUILD_CC="$BUILD_CC" CPP="$CPP" /bin/sh $ac_aux_dir/parse-types.sh +fi +ASM_TYPES_HEADER=./asm_types.h +AC_SUBST_FILE(ASM_TYPES_HEADER) +dnl +dnl Save the configuration #defines needed for the public ext2fs.h +dnl header file +dnl +echo "/* These defines are needed for the public ext2fs.h header file */" \ + > public_config.h +if grep HAVE_SYS_TYPES_H confdefs.h > tmp_config.$$; then + uniq tmp_config.$$ >> public_config.h +else + echo "#undef HAVE_SYS_TYPES_H" >> public_config.h +fi +if grep WORDS_BIGENDIAN confdefs.h > tmp_config.$$; then + uniq tmp_config.$$ >> public_config.h +else + echo "#undef WORDS_BIGENDIAN" >> public_config.h +fi +rm -f tmp_config.$$ +PUBLIC_CONFIG_HEADER=./public_config.h +AC_SUBST_FILE(PUBLIC_CONFIG_HEADER) +dnl +dnl See if we have inttypes.h and if intptr_t is defined +dnl +AC_CHECK_HEADERS([inttypes.h]) +AC_CHECK_TYPES(intptr_t) +dnl +dnl See if struct stat has a st_flags field, in which case we can get file +dnl flags somewhat portably. Also check for the analogous setter, chflags(). +dnl +AC_MSG_CHECKING(whether struct stat has a st_flags field) +AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags, + AC_TRY_COMPILE([#include ], + [struct stat stat; stat.st_flags = 0;], + [e2fsprogs_cv_struct_st_flags=yes], + [e2fsprogs_cv_struct_st_flags=no])) +AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags) +if test "$e2fsprogs_cv_struct_st_flags" = yes; then + AC_MSG_CHECKING(whether st_flags field is useful) + AC_CACHE_VAL(e2fsprogs_cv_struct_st_flags_immut, + AC_TRY_COMPILE([#include ], + [struct stat stat; stat.st_flags |= UF_IMMUTABLE;], + [e2fsprogs_cv_struct_st_flags_immut=yes], + [e2fsprogs_cv_struct_st_flags_immut=no])) + AC_MSG_RESULT($e2fsprogs_cv_struct_st_flags_immut) + if test "$e2fsprogs_cv_struct_st_flags_immut" = yes; then + AC_DEFINE(HAVE_STAT_FLAGS, 1, + [Define to 1 if struct stat has st_flags]) + fi +fi +dnl +dnl Check for the presence of SA_LEN +dnl +AC_CHECK_MEMBER(struct sockaddr.sa_len, + AC_DEFINE_UNQUOTED(HAVE_SA_LEN,1, + [Define to 1 if if struct sockaddr contains sa_len]),, + [#include + #include ]) +dnl +dnl This will add -lblkid to the AC_CHECK_FUNCS search if we are using +dnl the system-provided blkid library +dnl +if test -n "$BLKID_CMT"; then + AC_SEARCH_LIBS([blkid_probe_all], [blkid]) +fi +dnl +if test -n "$DLOPEN_LIB" ; then + ac_cv_func_dlopen=yes +fi +AC_CHECK_FUNCS(m4_flatten([ + __secure_getenv + add_key + backtrace + blkid_probe_get_topology + blkid_probe_enable_partitions + chflags + dlopen + fadvise64 + fallocate + fallocate64 + fchown + fdatasync + fstat64 + ftruncate64 + futimes + getcwd + getdtablesize + getmntinfo + getpwuid_r + getrlimit + getrusage + jrand48 + keyctl + llistxattr + llseek + lseek64 + mallinfo + mbstowcs + memalign + mempcpy + mmap + msync + nanosleep + open64 + pathconf + posix_fadvise + posix_fadvise64 + posix_memalign + prctl + pread + pwrite + pread64 + pwrite64 + secure_getenv + setmntent + setresgid + setresuid + snprintf + srandom + stpcpy + strcasecmp + strdup + strnlen + strptime + strtoull + sync_file_range + sysconf + usleep + utime + utimes + valloc +])) +dnl +dnl Check to see if -lsocket is required (solaris) to make something +dnl that uses socket() to compile; this is needed for the UUID library +dnl +SOCKET_LIB='' +AC_CHECK_LIB(socket, socket, [SOCKET_LIB=-lsocket]) +AC_SUBST(SOCKET_LIB) +dnl +dnl See if libmagic exists +dnl +AC_CHECK_LIB(magic, magic_file, [MAGIC_LIB=-lmagic +AC_CHECK_HEADERS([magic.h])]) +if test "$ac_cv_func_dlopen" = yes ; then + MAGIC_LIB=$DLOPEN_LIB +fi +AC_SUBST(MAGIC_LIB) +dnl +dnl Check to see if librt is required for clock_gettime() (glibc < 2.17) +dnl +AC_CHECK_LIB(rt, clock_gettime, [CLOCK_GETTIME_LIB=-lrt]) +AC_SUBST(CLOCK_GETTIME_LIB) +dnl +dnl Check to see if the FUSE library is -lfuse or -losxfuse +dnl +FUSE_CMT= +FUSE_LIB= +dnl osxfuse.dylib supersedes fuselib.dylib +AC_ARG_ENABLE([fuse2fs], +[ --disable-fuse2fs do not build fuse2fs], +if test "$enableval" = "no" +then + FUSE_CMT="#" + AC_MSG_RESULT([Disabling fuse2fs]) +else + AC_CHECK_HEADERS([pthread.h fuse.h], [], +[AC_MSG_FAILURE([Cannot find fuse2fs headers.])], +[#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29]) + + AC_PREPROC_IFELSE( +[AC_LANG_PROGRAM([[#define FUSE_USE_VERSION 29 +#ifdef __linux__ +#include +#include +#include +#endif +]], [])], [], [AC_MSG_FAILURE([Cannot find fuse2fs Linux headers.])]) + + AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], + [AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], + [AC_MSG_FAILURE([Cannot find fuse library.])])]) + AC_MSG_RESULT([Enabling fuse2fs]) +fi +, +AC_CHECK_HEADERS([pthread.h fuse.h], [], [FUSE_CMT="#"], +[#define _FILE_OFFSET_BITS 64 +#define FUSE_USE_VERSION 29 +#ifdef __linux__ +# include +# include +# include +#endif]) +if test -z "$FUSE_CMT" +then + AC_CHECK_LIB(osxfuse, fuse_main, [FUSE_LIB=-losxfuse], +[AC_CHECK_LIB(fuse, fuse_main, [FUSE_LIB=-lfuse], [FUSE_CMT="#"])]) +fi +if test -z "$FUSE_CMT" +then + AC_MSG_RESULT([Enabling fuse2fs by default.]) +fi +) +AC_SUBST(FUSE_LIB) +AC_SUBST(FUSE_CMT) +dnl +dnl See if optreset exists +dnl +AC_MSG_CHECKING(for optreset) +AC_CACHE_VAL(ac_cv_have_optreset, +[AC_EGREP_HEADER(optreset, unistd.h, + ac_cv_have_optreset=yes, ac_cv_have_optreset=no)])dnl +AC_MSG_RESULT($ac_cv_have_optreset) +if test $ac_cv_have_optreset = yes; then + AC_DEFINE(HAVE_OPTRESET, 1, [Define to 1 if optreset for getopt is present]) +fi +dnl +dnl Test for sem_init, and which library it might require: +dnl +AH_TEMPLATE([HAVE_SEM_INIT], [Define to 1 if sem_init() exists]) +SEM_INIT_LIB='' +AC_CHECK_FUNC(sem_init, , + AC_CHECK_LIB(pthread, sem_init, + AC_DEFINE(HAVE_SEM_INIT, 1) + SEM_INIT_LIB=-lpthread, + AC_CHECK_LIB(rt, sem_init, + AC_DEFINE(HAVE_SEM_INIT, 1) + SEM_INIT_LIB=-lrt, + AC_CHECK_LIB(posix4, sem_init, + AC_DEFINE(HAVE_SEM_INIT, 1) + SEM_INIT_LIB=-lposix4))))dnl +AC_SUBST(SEM_INIT_LIB) +dnl +dnl Check for unified diff +dnl +AC_MSG_CHECKING(for unified diff option) +if diff -u $0 $0 > /dev/null 2>&1 ; then + UNI_DIFF_OPTS=-u +else + UNI_DIFF_OPTS=-c +fi +AC_MSG_RESULT($UNI_DIFF_OPTS) +AC_SUBST(UNI_DIFF_OPTS) +dnl +dnl We use the EXT2 ioctls only under Linux +dnl +case "$host_os" in +linux*) + AC_DEFINE(HAVE_EXT2_IOCTLS, 1, [Define to 1 if Ext2 ioctls present]) + ;; +esac +dnl +dnl OS-specific uncomment control +dnl +LINUX_CMT="#" +CYGWIN_CMT="#" +UNIX_CMT= +case "$host_os" in +linux*) + LINUX_CMT= + ;; +cygwin) + CYGWIN_CMT= + UNIX_CMT="#" + ;; +esac +AC_SUBST(LINUX_CMT) +AC_SUBST(CYGWIN_CMT) +AC_SUBST(UNIX_CMT) +dnl +dnl Linux and Hurd places root files in the / by default +dnl +case "$host_os" in +linux* | gnu* | k*bsd*-gnu) + if test "$prefix" = NONE -a "$root_prefix" = NONE ; then + root_prefix=""; + AC_MSG_RESULT([On $host_os systems, root_prefix defaults to '']) + fi + ;; +esac +dnl +dnl On Linux/hurd, force the prefix to be /usr +dnl +case "$host_os" in +linux* | gnu* | k*bsd*-gnu) + if test "$prefix" = NONE ; then + prefix="/usr"; + AC_MSG_RESULT([On $host_os systems, prefix defaults to /usr]) + if test "$mandir" = '${prefix}/man' ; then + AC_MSG_RESULT([...and mandir defaults to /usr/share/man]) + mandir=/usr/share/man + fi + fi +;; +esac +if test "$root_prefix" = NONE ; then + if test "$prefix" = NONE ; then + root_prefix="$ac_default_prefix" + else + root_prefix="$prefix" + fi + root_bindir=$bindir + root_sbindir=$sbindir + root_libdir=$libdir + root_sysconfdir=$sysconfdir +else + root_bindir='${root_prefix}/bin' + root_sbindir='${root_prefix}/sbin' + root_libdir='${root_prefix}/lib' + root_sysconfdir='${root_prefix}/etc' +fi +if test "$bindir" != '${exec_prefix}/bin'; then + root_bindir=$bindir + AC_MSG_RESULT([Setting root_bindir to $root_bindir]) +fi +if test "$sbindir" != '${exec_prefix}/sbin'; then + root_sbindir=$sbindir + AC_MSG_RESULT([Setting root_sbindir to $root_sbindir]) +fi +if test "$libdir" != '${exec_prefix}/lib'; then + root_libdir=$libdir + AC_MSG_RESULT([Setting root_libdir to $root_libdir]) +fi +if test "$sysconfdir" != '${prefix}/etc'; then + root_sysconfdir=$sysconfdir + AC_MSG_RESULT([Setting root_sysconfdir to $root_sysconfdir]) +fi +AC_SUBST(root_prefix) +AC_SUBST(root_bindir) +AC_SUBST(root_sbindir) +AC_SUBST(root_libdir) +AC_SUBST(root_sysconfdir) +dnl +dnl Allow specification of the multiarch arch +dnl +AC_ARG_WITH([multiarch], +[ --with-multiarch=ARCH specify the multiarch triplet], +if test "$withval" = "lib64"; then + libdir=/usr/lib64 + root_libdir=/lib64 +else + libdir=$libdir/$withval + root_libdir=$root_libdir/$withval +fi +)dnl +dnl +dnl See if -static works. This could fail if the linker does not +dnl support -static, or if required external libraries are not available +dnl in static form. +dnl +AC_MSG_CHECKING([whether we can link with -static]) +AC_CACHE_VAL(ac_cv_e2fsprogs_use_static, +[SAVE_LDFLAGS=$LDFLAGS; LDFLAGS="$LDFLAGS_STATIC -static" +AC_TRY_LINK([#include ],[fflush(stdout);], + ac_cv_e2fsprogs_use_static=yes, ac_cv_e2fsprogs_use_static=no) +LDFLAGS=$SAVE_LDFLAGS]) +dnl +dnl Regardless of how the test turns out, Solaris doesn't handle -static +dnl This is caused by the socket library requiring the nsl library, which +dnl requires the -dl library, which only works for dynamically linked +dnl programs. It basically means you can't have statically linked programs +dnl which use the network under Solaris. +dnl +case "$host_os" in +solaris2.*) + ac_cv_e2fsprogs_use_static=no +;; +esac +AC_MSG_RESULT($ac_cv_e2fsprogs_use_static) +if test $ac_cv_e2fsprogs_use_static = yes; then + LDFLAGS_STATIC="$LDFLAGS_STATIC -static" +fi +AC_SUBST(LDFLAGS_STATIC) +dnl +dnl Work around mysterious Darwin / GNU libintl problem +dnl (__asm__ redirection doesn't work for some mysterious reason. Looks like +dnl Apple hacked gcc somehow?) +dnl +case "$host_os" in +darwin*) + AC_MSG_RESULT([Using Apple Darwin / GNU libintl workaround]) + AC_DEFINE(_INTL_REDIRECT_MACROS, 1, + [Define to 1 if Apple Darwin libintl workaround is needed]) + ;; +esac +dnl +dnl Only try to run the test suite if we're not cross compiling. +dnl +if test "$cross_compiling" = yes ; then + DO_TEST_SUITE= +else + DO_TEST_SUITE=check +fi +AC_SUBST(DO_TEST_SUITE) +dnl +dnl Only include the intl include files if we're building with them +dnl +INCLUDES='-I. -I$(top_builddir)/lib -I$(top_srcdir)/lib' +if test -n "$CPPFLAGS" ; then + INCLUDES="$INCLUDES $CPPFLAGS" +fi +if test "$USE_INCLUDED_LIBINTL" = "yes" ; then + INCLUDES=$INCLUDES' -I$(top_builddir)/intl -I$(top_srcdir)/intl' +fi +if test -n "$WITH_DIET_LIBC" ; then + INCLUDES="$INCLUDES -D_REENTRANT" +fi +AC_SUBST(INCLUDES) +AM_MKINSTALLDIRS +dnl +dnl Build CFLAGS +dnl +if test $cross_compiling = no; then + BUILD_CFLAGS="$CFLAGS $CPPFLAGS $INCLUDES -DHAVE_CONFIG_H" + BUILD_LDFLAGS="$LDFLAGS" +fi +AC_SUBST(BUILD_CFLAGS) +AC_SUBST(BUILD_LDFLAGS) +dnl +dnl Define CFLAGS and LDFLAGS for shared libraries +dnl +CFLAGS_SHLIB=${CFLAGS_SHLIB:-$CFLAGS} +CFLAGS_STLIB=${CFLAGS_STLIB:-$CFLAGS} +LDFLAGS_SHLIB=${LDFLAGS_SHLIB:-$LDFLAGS} +AC_SUBST(CFLAGS_SHLIB) +AC_SUBST(CFLAGS_STLIB) +AC_SUBST(LDFLAGS_SHLIB) +dnl +dnl Make our output files, being sure that we create the some miscellaneous +dnl directories +dnl +test -d lib || mkdir lib +test -d include || mkdir include +test -d include/linux || mkdir include/linux +test -d include/asm || mkdir include/asm +if test -z "$UUID_CMT" ; then + uuid_out_list="lib/uuid/Makefile lib/uuid/uuid.pc \ + lib/uuid/uuid_types.h" +fi +if test -z "$BLKID_CMT" ; then + blkid_out_list="lib/blkid/Makefile lib/blkid/blkid.pc \ + lib/blkid/blkid_types.h" +fi +for i in MCONFIG Makefile e2fsprogs.spec \ + util/Makefile util/subst.conf util/gen-tarball util/install-symlink \ + lib/et/Makefile lib/ss/Makefile lib/e2p/Makefile \ + lib/ext2fs/Makefile lib/ext2fs/ext2_types.h \ + $uuid_out_list $blkid_out_list lib/support/Makefile \ + lib/ss/ss.pc lib/et/com_err.pc lib/e2p/e2p.pc lib/ext2fs/ext2fs.pc \ + misc/Makefile ext2ed/Makefile e2fsck/Makefile \ + debugfs/Makefile tests/Makefile tests/progs/Makefile \ + resize/Makefile doc/Makefile intl/Makefile \ + intl/libgnuintl.h po/Makefile.in ; do + if test -d `dirname ${srcdir}/$i` ; then + outlist="$outlist $i" + fi +done +AC_OUTPUT($outlist) +if test -f util/gen-tarball; then chmod +x util/gen-tarball; fi diff --git a/contrib/Android.mk b/contrib/Android.mk new file mode 100644 index 0000000..f8d74c3 --- /dev/null +++ b/contrib/Android.mk @@ -0,0 +1,80 @@ +LOCAL_PATH := $(call my-dir) + +########################################################################### +# Build fsstress +# +fsstress_src_files := \ + fsstress.c + +fsstress_c_includes := + +fsstress_cflags := -O2 -g -W -Wall + +fsstress_shared_libraries := + +fsstress_system_shared_libraries := libc + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(fsstress_src_files) +mke2fs_c_includesLOCAL_CFLAGS := $(fsstress_cflags) +LOCAL_SYSTEM_SHARED_LIBRARIES := $(fsstress_system_shared_libraries) +LOCAL_MODULE := fsstress +LOCAL_MODULE_TAGS := optional + +include $(BUILD_EXECUTABLE) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(fsstress_src_files) +LOCAL_CFLAGS := $(fsstress_cflags) +LOCAL_MODULE := fsstress_host +LOCAL_MODULE_STEM := fsstress +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_HOST_OS := linux + +include $(BUILD_HOST_EXECUTABLE) + +######################################################################### +# Build add_ext4_encrypt +# +include $(CLEAR_VARS) + +add_ext4_encrypt_src_files := \ + add_ext4_encrypt.c + +add_ext4_encrypt_c_includes := \ + external/e2fsprogs/lib + +add_ext4_encrypt_cflags := -O2 -g -W -Wall + +add_ext4_encrypt_shared_libraries := \ + libext2fs \ + libext2_com_err + +add_ext4_encrypt_system_shared_libraries := libc + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(add_ext4_encrypt_src_files) +LOCAL_C_INCLUDES := $(add_ext4_encrypt_c_includes) +LOCAL_CFLAGS := $(add_ext4_encrypt_cflags) +LOCAL_SHARED_LIBRARIES := $(add_ext4_encrypt_shared_libraries) +LOCAL_SYSTEM_SHARED_LIBRARIES := $(add_ext4_encrypt_system_shared_libraries) +LOCAL_MODULE := add_ext4_encrypt +LOCAL_MODULE_TAGS := optional + +include $(BUILD_EXECUTABLE) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(add_ext4_encrypt_src_files) +LOCAL_C_INCLUDES := $(add_ext4_encrypt_c_includes) +LOCAL_CFLAGS := $(add_ext4_encrypt_cflags) +LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(add_ext4_encrypt_shared_libraries)) +LOCAL_MODULE := add_ext4_encrypt_host +LOCAL_MODULE_STEM := add_ext4_encrypt +LOCAL_MODULE_TAGS := optional + +include $(BUILD_HOST_EXECUTABLE) + diff --git a/contrib/add_ext4_encrypt.c b/contrib/add_ext4_encrypt.c new file mode 100644 index 0000000..d4e7c8c --- /dev/null +++ b/contrib/add_ext4_encrypt.c @@ -0,0 +1,64 @@ +/* + * Basic progam to add ext4 encryption to a file system + * + * Copyright 2015, Google, Inc. + * + * %Begin-Header% + * This file may be redistributed under the terms of the GNU Public + * License. + * %End-Header% + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +int main (int argc, char *argv[]) +{ + errcode_t retval = 0; + ext2_filsys fs; + + setbuf(stdout, NULL); + setbuf(stderr, NULL); + initialize_ext2_error_table(); + + if (argc != 2) { + fprintf(stderr, "%s: Usage \n", argv[0]); + exit(1); + } + + retval = ext2fs_open(argv[1], EXT2_FLAG_RW, 0, 0, + unix_io_manager, &fs); + + if (retval) { + com_err(argv[0], retval, "while trying to open '%s'", + argv[1]); + exit(1); + } + if (!ext2fs_has_feature_encrypt(fs->super)) { + ext2fs_set_feature_encrypt(fs->super); + fs->super->s_encrypt_algos[0] = + EXT4_ENCRYPTION_MODE_AES_256_XTS; + fs->super->s_encrypt_algos[1] = + EXT4_ENCRYPTION_MODE_AES_256_CTS; + ext2fs_mark_super_dirty(fs); + printf("Ext4 encryption enabled on %s\n", argv[1]); + } else + printf("Ext4 encryption already enabled on %s\n", argv[1]); + + retval = ext2fs_close(fs); + if (retval) { + com_err(argv[0], retval, "while trying to close '%s'", + argv[1]); + exit(1); + } + return (0); +} + diff --git a/contrib/build-rpm b/contrib/build-rpm new file mode 100644 index 0000000..0b06071 --- /dev/null +++ b/contrib/build-rpm @@ -0,0 +1,45 @@ +#!/bin/sh + +# enable xtrace output if requested +if [ -n ${ENABLE_XTRACE:-''} ]; then + set -x +fi + +# Build an e2fsprogs RPM from cvs + +pwd=`pwd` +currdir=`basename $pwd` +pkgname=`grep Name: e2fsprogs.spec | awk '{print $2;}'` +pkgvers=`grep Version: e2fsprogs.spec | awk '{print $2;}'` +builddir=${pkgname}-${pkgvers} + +# ensure that $TMP is set to something +TMP=${TMP:-'/tmp'} + +cd .. +tmpdir=`mktemp -d ${RPM_TMPDIR:-$TMP}/rpmtmp.XXXXXX` + +# We need to build a tarball for the SRPM using $builddir as the +# directory name (since that's what RPM will expect it to unpack +# into). That may require a symlink. + +# Make a recursive-symlink copy of the source dir +cp -sR `pwd`/$currdir $tmpdir/$builddir || exit 1 + +# Remove any build files from the temporary tarball directory +[ -f $tmpdir/$builddir/Makefile ] && make -C $tmpdir/$builddir distclean + +EXCLUDE="--exclude .hg* --exclude .pc*" +(cd $tmpdir && tar czfh ${builddir}.tar.gz $EXCLUDE $builddir) + +[ "`rpmbuild --version 2> /dev/null`" ] && RPM=rpmbuild || RPM=rpm + +$RPM --define "_sourcedir $tmpdir" \ + --define "_topdir ${RPM_TOPDIR:-$(rpm -E %_topdir)}" \ + --define "_tmpdir ${RPM_TMPDIR:-$TMP}" \ + --define "extra_config_flags ${EXTRA_CONFIG_FLAGS:-''}" \ + -ba $currdir/e2fsprogs.spec + +rpm_exit=$? +rm -rf $tmpdir +exit $rpm_exit diff --git a/contrib/dconf b/contrib/dconf new file mode 100644 index 0000000..cef4cc6 --- /dev/null +++ b/contrib/dconf @@ -0,0 +1,118 @@ +#!/bin/sh +#$Id$ +# Create Adobe-PostScript file that graphically displays the output of +# dumpe2fs(8). Use "dumpe2fs | dconf" to create a PostScript file on stdout. +# Developed and tested for Linux 1.0. +# Copyright (c) 1994 +# Ulrich Windl +# ALte Regensburger Strasse 11a +# D-93149 Nittenau, Germany +# +SELF=`basename $0` +AWKFILE=/tmp/${SELF}.awk +TEMPFILE=/tmp/${SELF}.tmp +echo ' +BEGIN { + print "B" +} +/^Inode count:/ { + ic=$3; next +} +/^Block count:/ { + bc=$3; next +} +/^First block:/ { + fb=$3; next +} +/^Block size:/ { + bs=$3; next +} +/^Blocks per group:/ { + bpg=$4 + printf("BC %d\n", bpg) + printf("GC %d\n", (bc + bpg - 1) / bpg) + next +} +/^Inodes per group:/ { + ipg=$4; next +} +/^Last write time:/ { + lwtime=$0; gsub("Last write time:[ ]+", "", lwtime) + printf("T %s\n", lwtime) + next +} +/^Group [0-9]+:/ { + group=$2; gsub(":", "", group) + block="" + group_start=group*bpg+fb + group_end=group_start+bpg + printf("G %d : %d - %d\n", group, group_start, group_end) + next +} +/^[ ]+Free blocks: / { + for ( i=3; i < NF; ++i ) { + block=$i; gsub(",", "", block) + if ( index(block, "-") == 0 ) block=block "-" block + pos=index(block, "-") + printf("FB %d-%d\n", + substr(block, 0, pos) - group_start, + substr(block, pos + 1) - group_start) + } + if ( block == "" ) printf("Group %d is full\n", group) + print "----" + next +} +END { + printf("E %s\n", lwtime) +}' >$AWKFILE +awk -f $AWKFILE $* >$TEMPFILE +echo ' +BEGIN { + printf("%%!PS-Adobe\n") + printf("%%%%BoundingBox: 0 0 1 1\n") + printf("/rect {/y2 exch def /x2 exch def /y1 exch def /x1 exch def\n") + printf(" newpath x1 y1 moveto x2 y1 lineto x2 y2 lineto\n") + printf(" x1 y2 lineto closepath} def\n") + printf("/fb {rect gsave 1.0 setgray fill grestore} def\n") + printf("/dg {rect gsave gsave 0.0 setgray fill grestore\n") + printf(" 0.5 setgray stroke grestore} def\n") + printf("/textxy {moveto show} bind def\n") + printf("0.0001 setlinewidth\n") +} +$1 == "GC" && NF == 2 { + number_of_groups=$2 + printf("/Times-Roman findfont %g scalefont setfont\n", + 1.0 / number_of_groups) + next +} +$1 == "BC" && NF == 2 { + blocks_per_group=$2; next +} +$1 == "T" && NF > 1 { + printf("(%s) %g %g textxy\n", + substr($0, 2), 0, 1.02) + next +} +$1 == "G" && NF == 6 && $3 == ":" && $5 == "-" { + group_index=$2 + gs=$4 + ge=$6 + height=1.0 / number_of_groups + vstart=group_index * height + printf("%% group %d of %d:\n0 %g 1 %g dg\n", + group_index, number_of_groups, vstart, vstart + height) + printf("(Group %s) 1.02 %g textxy\n", group_index, vstart) + next +} +$1 == "FB" && NF == 2 { + pos = index($2, "-") + printf("%% hole %s\n%g %g %g %g fb\n", + $2, substr($2, 0, pos) / blocks_per_group, vstart, + (substr($2, pos + 1) + 1) / blocks_per_group, vstart + height) + next +} +END { + printf("%%%%EOF\n") +} +' >$AWKFILE +awk -f $AWKFILE $TEMPFILE diff --git a/contrib/dir2fs b/contrib/dir2fs new file mode 100755 index 0000000..abcecb3 --- /dev/null +++ b/contrib/dir2fs @@ -0,0 +1,66 @@ +#!/bin/sh + +dir="$1" +dev="$2" + +if [ "$1" = "--help" ] || [ ! -d "${dir}" ]; then + echo "Usage: $0 dir [mke2fs args] dev" + exit 1 +fi + +shift + +# Goal: Put all the files at the beginning (which mke2fs does) and minimize +# the number of free inodes given the minimum number of blocks required. +# Hence all this math to get the inode ratio just right. + +bytes="$(du -ks "${dir}" | awk '{print $1}')" +bytes="$((bytes * 1024))" +inodes="$(find "${dir}" -print0 | xargs -0 stat -c '%i' | sort -g | uniq | wc -l)" +block_sz=4096 +inode_sz=256 +sb_overhead=4096 +blocks_per_group="$((block_sz * 8))" +bytes_per_group="$((blocks_per_group * block_sz))" +inode_bytes="$((inodes * inode_sz))" + +# Estimate overhead with the minimum number of groups... +nr_groups="$(( (bytes + inode_bytes + bytes_per_group - 1) / bytes_per_group))" +inode_bytes_per_group="$((inode_bytes / nr_groups))" +inode_blocks_per_group="$(( (inode_bytes_per_group + (block_sz - 1)) / block_sz ))" +per_grp_overhead="$(( ((3 + inode_blocks_per_group) * block_sz) + 64 ))" +overhead="$(( sb_overhead + (per_grp_overhead * nr_groups) ))" +used_bytes="$((bytes + overhead))" + +# Then do it again with the real number of groups. +nr_groups="$(( (used_bytes + (bytes_per_group - 1)) / bytes_per_group))" +tot_blocks="$((nr_groups * blocks_per_group))" +tot_bytes="$((tot_blocks * block_sz))" + +ratio="$((bytes / inodes))" +mkfs_blocks="$((tot_blocks * 4 / 3))" + +mke2fs -i "${ratio}" -T ext4 -d "${dir}" -O ^resize_inode,sparse_super2,metadata_csum,64bit,^has_journal -E packed_meta_blocks=1,num_backup_sb=0 -b "${block_sz}" -I "${inodesz}" -F "${dev}" "${mkfs_blocks}" || exit + +e2fsck -fyD "${dev}" + +blocks="$(dumpe2fs -h "${dev}" 2>&1 | grep 'Block count:' | awk '{print $3}')" +while resize2fs -f -M "${dev}"; do + new_blocks="$(dumpe2fs -h "${dev}" 2>&1 | grep 'Block count:' | awk '{print $3}')" + if [ "${new_blocks}" -eq "${blocks}" ]; then + break; + fi + blocks="${new_blocks}" +done + +if [ ! -b "${dev}" ]; then + truncate -s "$((blocks * block_sz))" "${dev}" || (e2image -ar "${dev}" "${dev}.min"; mv "${dev}.min" "${dev}") +fi + +e2fsck -fy "${dev}" + +dir_blocks="$((bytes / block_sz))" +overhead="$((blocks - dir_blocks))" +echo "Minimized image overhead: $((100 * overhead / dir_blocks))%" + +exit 0 diff --git a/contrib/e2croncheck b/contrib/e2croncheck new file mode 100755 index 0000000..de0b41f --- /dev/null +++ b/contrib/e2croncheck @@ -0,0 +1,47 @@ +#!/bin/sh +# +# e2croncheck -- run e2fsck automatically out of /etc/cron.weekly +# +# This script is intended to be run by the system administrator +# periodically from the command line, or to be run once a week +# or so by the cron daemon to check a mounted filesystem (normally +# the root filesystem, but it could be used to check other filesystems +# that are always mounted when the system is booted). +# +# Make sure you customize "VG" so it is your LVM volume group name, +# "VOLUME" so it is the name of the filesystem's logical volume, +# and "EMAIL" to be your e-mail address +# +# Written by Theodore Ts'o, Copyright 2007, 2008, 2009. +# +# This file may be redistributed under the terms of the +# GNU Public License, version 2. +# + +VG=ssd +VOLUME=root +SNAPSIZE=100m +EMAIL=sysadmin@example.com + +TMPFILE=`mktemp ${TMPDIR:-/tmp}/e2fsck.log.XXXXXXXXXX` + +OPTS="-Fttv -C0" +#OPTS="-Fttv -E fragcheck" + +set -e +START="$(date +'%Y%m%d%H%M%S')" +lvcreate -s -L ${SNAPSIZE} -n "${VOLUME}-snap" "${VG}/${VOLUME}" +if nice logsave -as $TMPFILE e2fsck -p $OPTS "/dev/${VG}/${VOLUME}-snap" && \ + nice logsave -as $TMPFILE e2fsck -fy $OPTS "/dev/${VG}/${VOLUME}-snap" ; then + echo 'Background scrubbing succeeded!' + tune2fs -C 0 -T "${START}" "/dev/${VG}/${VOLUME}" +else + echo 'Background scrubbing failed! Reboot to fsck soon!' + tune2fs -C 16000 -T "19000101" "/dev/${VG}/${VOLUME}" + if test -n "$RPT-EMAIL"; then + mail -s "E2fsck of /dev/${VG}/${VOLUME} failed!" $EMAIL < $TMPFILE + fi +fi +lvremove -f "${VG}/${VOLUME}-snap" +rm $TMPFILE + diff --git a/contrib/fallocate.c b/contrib/fallocate.c new file mode 100644 index 0000000..a05b8f2 --- /dev/null +++ b/contrib/fallocate.c @@ -0,0 +1,190 @@ +/* + * fallocate - utility to use the fallocate system call + * + * Copyright (C) 2008 Red Hat, Inc. All rights reserved. + * Written by Eric Sandeen + * + * cvtnum routine taken from xfsprogs, + * Copyright (c) 2003-2005 Silicon Graphics, Inc. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _LARGEFILE_SOURCE +#define _LARGEFILE_SOURCE +#endif +#ifndef _LARGEFILE64_SOURCE +#define _LARGEFILE64_SOURCE +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +// #include +#define FALLOC_FL_KEEP_SIZE 0x01 +#define FALLOC_FL_PUNCH_HOLE 0x02 /* de-allocates range */ +#define FALLOC_FL_COLLAPSE_RANGE 0x08 +#define FALLOC_FL_ZERO_RANGE 0x10 + +void usage(void) +{ + printf("Usage: fallocate [-npt] [-o offset] -l length filename\n"); + exit(EXIT_FAILURE); +} + +#define EXABYTES(x) ((long long)(x) << 60) +#define PETABYTES(x) ((long long)(x) << 50) +#define TERABYTES(x) ((long long)(x) << 40) +#define GIGABYTES(x) ((long long)(x) << 30) +#define MEGABYTES(x) ((long long)(x) << 20) +#define KILOBYTES(x) ((long long)(x) << 10) + +long long +cvtnum(char *s) +{ + long long i; + char *sp; + int c; + + i = strtoll(s, &sp, 0); + if (i == 0 && sp == s) + return -1LL; + if (*sp == '\0') + return i; + if (sp[1] != '\0') + return -1LL; + + c = tolower(*sp); + switch (c) { + case 'k': + return KILOBYTES(i); + case 'm': + return MEGABYTES(i); + case 'g': + return GIGABYTES(i); + case 't': + return TERABYTES(i); + case 'p': + return PETABYTES(i); + case 'e': + return EXABYTES(i); + } + + return -1LL; +} + +int main(int argc, char **argv) +{ + int fd; + char *fname; + int opt; + loff_t length = -2LL; + loff_t offset = 0; + int falloc_mode = 0; + int error; + int tflag = 0; + + while ((opt = getopt(argc, argv, "npl:o:tzc")) != -1) { + switch(opt) { + case 'n': + /* do not change filesize */ + falloc_mode = FALLOC_FL_KEEP_SIZE; + break; + case 'p': + /* punch mode */ + falloc_mode = (FALLOC_FL_PUNCH_HOLE | + FALLOC_FL_KEEP_SIZE); + break; + case 'c': + /* collapse range mode */ + falloc_mode = (FALLOC_FL_COLLAPSE_RANGE | + FALLOC_FL_KEEP_SIZE); + break; + case 'z': + /* zero range mode */ + falloc_mode = (FALLOC_FL_ZERO_RANGE | + FALLOC_FL_KEEP_SIZE); + break; + case 'l': + length = cvtnum(optarg); + break; + case 'o': + offset = cvtnum(optarg); + break; + case 't': + tflag++; + break; + default: + usage(); + } + } + + if (length == -2LL) { + printf("Error: no length argument specified\n"); + usage(); + } + + if (length <= 0) { + printf("Error: invalid length value specified\n"); + usage(); + } + + if (offset < 0) { + printf("Error: invalid offset value specified\n"); + usage(); + } + + if (tflag && (falloc_mode & FALLOC_FL_KEEP_SIZE)) { + printf("-n and -t options incompatible\n"); + usage(); + } + + if (tflag && offset) { + printf("-n and -o options incompatible\n"); + usage(); + } + + if (optind == argc) { + printf("Error: no filename specified\n"); + usage(); + } + + fname = argv[optind++]; + + /* Should we create the file if it doesn't already exist? */ + fd = open(fname, O_WRONLY|O_LARGEFILE); + if (fd < 0) { + perror("Error opening file"); + exit(EXIT_FAILURE); + } + + if (tflag) + error = ftruncate(fd, length); + else + error = syscall(SYS_fallocate, fd, falloc_mode, offset, length); + + if (error < 0) { + perror("fallocate failed"); + exit(EXIT_FAILURE); + } + + close(fd); + return 0; +} diff --git a/contrib/fsstress.c b/contrib/fsstress.c new file mode 100644 index 0000000..2a98348 --- /dev/null +++ b/contrib/fsstress.c @@ -0,0 +1,2701 @@ +/* + * Copyright (c) 2000 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ + */ + +#define NO_XFS +#define HAVE_SYS_PRCTL_H +#define _LARGEFILE64_SOURCE + +#define MAXNAMELEN 1024 +struct dioattr { + int d_miniosz, d_maxiosz, d_mem; +}; + +#define MIN(a,b) ((a)<(b) ? (a):(b)) +#define MAX(a,b) ((a)>(b) ? (a):(b)) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifndef O_DIRECT +#define O_DIRECT 040000 +#endif + +#ifdef HAVE_SYS_PRCTL_H +# include +#endif + +#define XFS_ERRTAG_MAX 17 + +typedef enum { +#ifndef NO_XFS + OP_ALLOCSP, + OP_ATTR_REMOVE, + OP_ATTR_SET, + OP_BULKSTAT, + OP_BULKSTAT1, +#endif + OP_CHOWN, + OP_CREAT, + OP_DREAD, + OP_DWRITE, + OP_FDATASYNC, +#ifndef NO_XFS + OP_FREESP, +#endif + OP_FSYNC, + OP_GETDENTS, + OP_LINK, + OP_MKDIR, + OP_MKNOD, + OP_READ, + OP_READLINK, + OP_RENAME, +#ifndef NO_XFS + OP_RESVSP, +#endif + OP_RMDIR, + OP_STAT, + OP_SYMLINK, + OP_SYNC, + OP_TRUNCATE, + OP_UNLINK, +#ifndef NO_XFS + OP_UNRESVSP, +#endif + OP_WRITE, + OP_LAST +} opty_t; + +typedef void (*opfnc_t) (int, long); + +typedef struct opdesc { + opty_t op; + char *name; + opfnc_t func; + int freq; + int iswrite; + int isxfs; +} opdesc_t; + +typedef struct fent { + int id; + int parent; +} fent_t; + +typedef struct flist { + int nfiles; + int nslots; + int tag; + fent_t *fents; +} flist_t; + +typedef struct pathname { + int len; + char *path; +} pathname_t; + +#define FT_DIR 0 +#define FT_DIRm (1 << FT_DIR) +#define FT_REG 1 +#define FT_REGm (1 << FT_REG) +#define FT_SYM 2 +#define FT_SYMm (1 << FT_SYM) +#define FT_DEV 3 +#define FT_DEVm (1 << FT_DEV) +#define FT_RTF 4 +#define FT_RTFm (1 << FT_RTF) +#define FT_nft 5 +#define FT_ANYm ((1 << FT_nft) - 1) +#define FT_REGFILE (FT_REGm | FT_RTFm) +#define FT_NOTDIR (FT_ANYm & ~FT_DIRm) + +#define FLIST_SLOT_INCR 16 +#define NDCACHE 64 + +#define MAXFSIZE ((1ULL << 63) - 1ULL) +#define MAXFSIZE32 ((1ULL << 40) - 1ULL) + +void allocsp_f(int, long); +void attr_remove_f(int, long); +void attr_set_f(int, long); +void bulkstat_f(int, long); +void bulkstat1_f(int, long); +void chown_f(int, long); +void creat_f(int, long); +void dread_f(int, long); +void dwrite_f(int, long); +void fdatasync_f(int, long); +void freesp_f(int, long); +void fsync_f(int, long); +void getdents_f(int, long); +void link_f(int, long); +void mkdir_f(int, long); +void mknod_f(int, long); +void read_f(int, long); +void readlink_f(int, long); +void rename_f(int, long); +void resvsp_f(int, long); +void rmdir_f(int, long); +void stat_f(int, long); +void symlink_f(int, long); +void sync_f(int, long); +void truncate_f(int, long); +void unlink_f(int, long); +void unresvsp_f(int, long); +void write_f(int, long); + +opdesc_t ops[] = { +#ifndef NO_XFS + {OP_ALLOCSP, "allocsp", allocsp_f, 1, 1, 1}, + {OP_ATTR_REMOVE, "attr_remove", attr_remove_f, /* 1 */ 0, 1, 1}, + {OP_ATTR_SET, "attr_set", attr_set_f, /* 2 */ 0, 1, 1}, + {OP_BULKSTAT, "bulkstat", bulkstat_f, 1, 0, 1}, + {OP_BULKSTAT1, "bulkstat1", bulkstat1_f, 1, 0, 1}, +#endif + {OP_CHOWN, "chown", chown_f, 3, 1, 0}, + {OP_CREAT, "creat", creat_f, 4, 1, 0}, + {OP_DREAD, "dread", dread_f, 4, 0, 0}, + {OP_DWRITE, "dwrite", dwrite_f, 4, 1, 0}, + {OP_FDATASYNC, "fdatasync", fdatasync_f, 1, 1, 0}, +#ifndef NO_XFS + {OP_FREESP, "freesp", freesp_f, 1, 1, 1}, +#endif + {OP_FSYNC, "fsync", fsync_f, 1, 1, 0}, + {OP_GETDENTS, "getdents", getdents_f, 1, 0, 0}, + {OP_LINK, "link", link_f, 1, 1, 0}, + {OP_MKDIR, "mkdir", mkdir_f, 2, 1, 0}, + {OP_MKNOD, "mknod", mknod_f, 2, 1, 0}, + {OP_READ, "read", read_f, 1, 0, 0}, + {OP_READLINK, "readlink", readlink_f, 1, 0, 0}, + {OP_RENAME, "rename", rename_f, 2, 1, 0}, +#ifndef NO_XFS + {OP_RESVSP, "resvsp", resvsp_f, 1, 1, 1}, +#endif + {OP_RMDIR, "rmdir", rmdir_f, 1, 1, 0}, + {OP_STAT, "stat", stat_f, 1, 0, 0}, + {OP_SYMLINK, "symlink", symlink_f, 2, 1, 0}, + {OP_SYNC, "sync", sync_f, 1, 0, 0}, + {OP_TRUNCATE, "truncate", truncate_f, 2, 1, 0}, + {OP_UNLINK, "unlink", unlink_f, 1, 1, 0}, +#ifndef NO_XFS + {OP_UNRESVSP, "unresvsp", unresvsp_f, 1, 1, 1}, +#endif + {OP_WRITE, "write", write_f, 4, 1, 0}, +}, *ops_end; + +flist_t flist[FT_nft] = { + {0, 0, 'd', NULL}, + {0, 0, 'f', NULL}, + {0, 0, 'l', NULL}, + {0, 0, 'c', NULL}, + {0, 0, 'r', NULL}, +}; + +int dcache[NDCACHE]; +int errrange; +int errtag; +opty_t *freq_table; +int freq_table_size; +#ifndef NO_XFS +xfs_fsop_geom_t geom; +#endif +char *homedir; +int *ilist; +int ilistlen; +off64_t maxfsize; +char *myprog; +int namerand; +int nameseq; +int nops; +int nproc = 1; +int operations = 1; +int procid; +int rtpct; +unsigned long seed = 0; +ino_t top_ino; +int verbose = 0; +#ifndef NO_XFS +int no_xfs = 0; +#else +int no_xfs = 1; +#endif +sig_atomic_t should_stop = 0; + +void add_to_flist(int, int, int); +void append_pathname(pathname_t *, char *); +#ifndef NO_XFS +int attr_list_path(pathname_t *, char *, const int, int, attrlist_cursor_t *); +int attr_remove_path(pathname_t *, const char *, int); +int attr_set_path(pathname_t *, const char *, const char *, const int, int); +#endif +void check_cwd(void); +int creat_path(pathname_t *, mode_t); +void dcache_enter(int, int); +void dcache_init(void); +fent_t *dcache_lookup(int); +void dcache_purge(int); +void del_from_flist(int, int); +int dirid_to_name(char *, int); +void doproc(void); +void fent_to_name(pathname_t *, flist_t *, fent_t *); +void fix_parent(int, int); +void free_pathname(pathname_t *); +int generate_fname(fent_t *, int, pathname_t *, int *, int *); +int get_fname(int, long, pathname_t *, flist_t **, fent_t **, int *); +void init_pathname(pathname_t *); +int lchown_path(pathname_t *, uid_t, gid_t); +int link_path(pathname_t *, pathname_t *); +int lstat64_path(pathname_t *, struct stat64 *); +void make_freq_table(void); +int mkdir_path(pathname_t *, mode_t); +int mknod_path(pathname_t *, mode_t, dev_t); +void namerandpad(int, char *, int); +int open_path(pathname_t *, int); +DIR *opendir_path(pathname_t *); +void process_freq(char *); +int readlink_path(pathname_t *, char *, size_t); +int rename_path(pathname_t *, pathname_t *); +int rmdir_path(pathname_t *); +void separate_pathname(pathname_t *, char *, pathname_t *); +void show_ops(int, char *); +int stat64_path(pathname_t *, struct stat64 *); +int symlink_path(const char *, pathname_t *); +int truncate64_path(pathname_t *, off64_t); +int unlink_path(pathname_t *); +void usage(void); +void write_freq(void); +void zero_freq(void); + +void sg_handler(int signum) +{ + should_stop = 1; +} + +int main(int argc, char **argv) +{ + char buf[10]; + int c; + char *dirname = NULL; + int fd; + int i; + int cleanup = 0; + int loops = 1; + int loopcntr = 1; + char cmd[256]; +#ifndef NO_XFS + int j; +#endif + char *p; + int stat; + struct timeval t; +#ifndef NO_XFS + ptrdiff_t srval; +#endif + int nousage = 0; +#ifndef NO_XFS + xfs_error_injection_t err_inj; +#endif + struct sigaction action; + + errrange = errtag = 0; + umask(0); + nops = sizeof(ops) / sizeof(ops[0]); + ops_end = &ops[nops]; + myprog = argv[0]; + while ((c = getopt(argc, argv, "cd:e:f:i:l:n:p:rs:vwzHSX")) != -1) { + switch (c) { + case 'c': + /*Don't cleanup */ + cleanup = 1; + break; + case 'd': + dirname = optarg; + break; + case 'e': + sscanf(optarg, "%d", &errtag); + if (errtag < 0) { + errtag = -errtag; + errrange = 1; + } else if (errtag == 0) + errtag = -1; + if (errtag >= XFS_ERRTAG_MAX) { + fprintf(stderr, + "error tag %d too large (max %d)\n", + errtag, XFS_ERRTAG_MAX - 1); + exit(1); + } + break; + case 'f': + process_freq(optarg); + break; + case 'i': + ilist = realloc(ilist, ++ilistlen * sizeof(*ilist)); + ilist[ilistlen - 1] = strtol(optarg, &p, 16); + break; + case 'l': + loops = atoi(optarg); + break; + case 'n': + operations = atoi(optarg); + break; + case 'p': + nproc = atoi(optarg); + break; + case 'r': + namerand = 1; + break; + case 's': + seed = strtoul(optarg, NULL, 0); + break; + case 'v': + verbose = 1; + break; + case 'w': + write_freq(); + break; + case 'z': + zero_freq(); + break; + case 'S': + show_ops(0, NULL); + printf("\n"); + nousage = 1; + break; + case '?': + fprintf(stderr, "%s - invalid parameters\n", myprog); + /* fall through */ + case 'H': + usage(); + exit(1); + case 'X': + no_xfs = 1; + break; + } + } + + if (no_xfs && errtag) { + fprintf(stderr, "error injection only works on XFS\n"); + exit(1); + } + + if (no_xfs) { + int i; + for (i = 0; ops + i < ops_end; ++i) { + if (ops[i].isxfs) + ops[i].freq = 0; + } + } + + make_freq_table(); + + while (((loopcntr <= loops) || (loops == 0)) && !should_stop) { + if (!dirname) { + /* no directory specified */ + if (!nousage) + usage(); + exit(1); + } + + (void)mkdir(dirname, 0777); + if (chdir(dirname) < 0) { + perror(dirname); + exit(1); + } + sprintf(buf, "fss%x", getpid()); + fd = creat(buf, 0666); + if (lseek64(fd, (off64_t) (MAXFSIZE32 + 1ULL), SEEK_SET) < 0) + maxfsize = (off64_t) MAXFSIZE32; + else + maxfsize = (off64_t) MAXFSIZE; + dcache_init(); + setlinebuf(stdout); + if (!seed) { + gettimeofday(&t, NULL); + seed = (int)t.tv_sec ^ (int)t.tv_usec; + printf("seed = %ld\n", seed); + } +#ifndef NO_XFS + if (!no_xfs) { + memset(&geom, 0, sizeof(geom)); + i = ioctl(fd, XFS_IOC_FSGEOMETRY, &geom); + if (i >= 0 && geom.rtblocks) + rtpct = MIN(MAX(geom.rtblocks * 100 / + (geom.rtblocks + + geom.datablocks), 1), 99); + else + rtpct = 0; + } + if (errtag != 0) { + if (errrange == 0) { + if (errtag <= 0) { + srandom(seed); + j = random() % 100; + + for (i = 0; i < j; i++) + (void)random(); + + errtag = + (random() % (XFS_ERRTAG_MAX - 1)) + + 1; + } + } else { + srandom(seed); + j = random() % 100; + + for (i = 0; i < j; i++) + (void)random(); + + errtag += + (random() % (XFS_ERRTAG_MAX - errtag)); + } + printf("Injecting failure on tag #%d\n", errtag); + memset(&err_inj, 0, sizeof(err_inj)); + err_inj.errtag = errtag; + err_inj.fd = fd; + srval = ioctl(fd, XFS_IOC_ERROR_INJECTION, &err_inj); + if (srval < -1) { + perror + ("fsstress - XFS_SYSSGI error injection call"); + close(fd); + unlink(buf); + exit(1); + } + } else +#endif + close(fd); + unlink(buf); + + + if (nproc == 1) { + procid = 0; + doproc(); + } else { + setpgid(0, 0); + action.sa_handler = sg_handler; + sigemptyset(&action.sa_mask); + action.sa_flags = 0; + if (sigaction(SIGTERM, &action, 0)) { + perror("sigaction failed"); + exit(1); + } + + for (i = 0; i < nproc; i++) { + if (fork() == 0) { + + action.sa_handler = SIG_DFL; + sigemptyset(&action.sa_mask); + if (sigaction(SIGTERM, &action, 0)) + return 1; +#ifdef HAVE_SYS_PRCTL_H + prctl(PR_SET_PDEATHSIG, SIGKILL); + if (getppid() == 1) /* parent died already? */ + return 0; +#endif + procid = i; + doproc(); + return 0; + } + } + while (wait(&stat) > 0 && !should_stop) { + continue; + } + if (should_stop) { + action.sa_flags = SA_RESTART; + sigaction(SIGTERM, &action, 0); + kill(-getpid(), SIGTERM); + while (wait(&stat) > 0) + continue; + } + } +#ifndef NO_XFS + if (errtag != 0) { + memset(&err_inj, 0, sizeof(err_inj)); + err_inj.errtag = 0; + err_inj.fd = fd; + if ((srval = + ioctl(fd, XFS_IOC_ERROR_CLEARALL, + &err_inj)) != 0) { + fprintf(stderr, "Bad ej clear on %d (%d).\n", + fd, errno); + perror + ("fsstress - XFS_SYSSGI clear error injection call"); + close(fd); + exit(1); + } + close(fd); + } +#endif + if (cleanup == 0) { + sprintf(cmd, "rm -rf %s/*", dirname); + system(cmd); + for (i = 0; i < FT_nft; i++) { + flist[i].nslots = 0; + flist[i].nfiles = 0; + free(flist[i].fents); + flist[i].fents = NULL; + } + } + loopcntr++; + } + return 0; +} + +void add_to_flist(int ft, int id, int parent) +{ + fent_t *fep; + flist_t *ftp; + + ftp = &flist[ft]; + if (ftp->nfiles == ftp->nslots) { + ftp->nslots += FLIST_SLOT_INCR; + ftp->fents = realloc(ftp->fents, ftp->nslots * sizeof(fent_t)); + } + fep = &ftp->fents[ftp->nfiles++]; + fep->id = id; + fep->parent = parent; +} + +void append_pathname(pathname_t * name, char *str) +{ + int len; + + len = strlen(str); +#ifdef DEBUG + if (len && *str == '/' && name->len == 0) { + fprintf(stderr, "fsstress: append_pathname failure\n"); + chdir(homedir); + abort(); + + } +#endif + name->path = realloc(name->path, name->len + 1 + len); + strcpy(&name->path[name->len], str); + name->len += len; +} + +#ifndef NO_XFS +int +attr_list_path(pathname_t * name, char *buffer, const int buffersize, int flags, + attrlist_cursor_t * cursor) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = attr_list(name->path, buffer, buffersize, flags, cursor); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = attr_list_path(&newname, buffer, buffersize, flags, + cursor); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int attr_remove_path(pathname_t * name, const char *attrname, int flags) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = attr_remove(name->path, attrname, flags); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = attr_remove_path(&newname, attrname, flags); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int +attr_set_path(pathname_t * name, const char *attrname, const char *attrvalue, + const int valuelength, int flags) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = attr_set(name->path, attrname, attrvalue, valuelength, flags); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = attr_set_path(&newname, attrname, attrvalue, valuelength, + flags); + chdir(".."); + } + free_pathname(&newname); + return rval; +} +#endif + +void check_cwd(void) +{ +#ifdef DEBUG + struct stat64 statbuf; + + if (stat64(".", &statbuf) == 0 && statbuf.st_ino == top_ino) + return; + chdir(homedir); + fprintf(stderr, "fsstress: check_cwd failure\n"); + abort(); + +#endif +} + +int creat_path(pathname_t * name, mode_t mode) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = creat(name->path, mode); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = creat_path(&newname, mode); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +void dcache_enter(int dirid, int slot) +{ + dcache[dirid % NDCACHE] = slot; +} + +void dcache_init(void) +{ + int i; + + for (i = 0; i < NDCACHE; i++) + dcache[i] = -1; +} + +fent_t *dcache_lookup(int dirid) +{ + fent_t *fep; + int i; + + i = dcache[dirid % NDCACHE]; + if (i >= 0 && (fep = &flist[FT_DIR].fents[i])->id == dirid) + return fep; + return NULL; +} + +void dcache_purge(int dirid) +{ + int *dcp; + + dcp = &dcache[dirid % NDCACHE]; + if (*dcp >= 0 && flist[FT_DIR].fents[*dcp].id == dirid) + *dcp = -1; +} + +void del_from_flist(int ft, int slot) +{ + flist_t *ftp; + + ftp = &flist[ft]; + if (ft == FT_DIR) + dcache_purge(ftp->fents[slot].id); + if (slot != ftp->nfiles - 1) { + if (ft == FT_DIR) + dcache_purge(ftp->fents[ftp->nfiles - 1].id); + ftp->fents[slot] = ftp->fents[--ftp->nfiles]; + } else + ftp->nfiles--; +} + +fent_t *dirid_to_fent(int dirid) +{ + fent_t *efep; + fent_t *fep; + flist_t *flp; + + if ((fep = dcache_lookup(dirid))) + return fep; + flp = &flist[FT_DIR]; + for (fep = flp->fents, efep = &fep[flp->nfiles]; fep < efep; fep++) { + if (fep->id == dirid) { + dcache_enter(dirid, fep - flp->fents); + return fep; + } + } + return NULL; +} + +void doproc(void) +{ + struct stat64 statbuf; + char buf[10]; + int opno; + int rval; + opdesc_t *p; + + sprintf(buf, "p%x", procid); + (void)mkdir(buf, 0777); + if (chdir(buf) < 0 || stat64(".", &statbuf) < 0) { + perror(buf); + _exit(1); + } + top_ino = statbuf.st_ino; + homedir = getcwd(NULL, -1); + seed += procid; + srandom(seed); + if (namerand) + namerand = random(); + for (opno = 0; opno < operations; opno++) { + p = &ops[freq_table[random() % freq_table_size]]; + if ((unsigned long)p->func < 4096) + abort(); + + p->func(opno, random()); + /* + * test for forced shutdown by stat'ing the test + * directory. If this stat returns EIO, assume + * the forced shutdown happened. + */ + if (errtag != 0 && opno % 100 == 0) { + rval = stat64(".", &statbuf); + if (rval == EIO) { + fprintf(stderr, "Detected EIO\n"); + return; + } + } + } +} + +void fent_to_name(pathname_t * name, flist_t * flp, fent_t * fep) +{ + char buf[MAXNAMELEN]; + int i; + fent_t *pfep; + + if (fep == NULL) + return; + if (fep->parent != -1) { + pfep = dirid_to_fent(fep->parent); + fent_to_name(name, &flist[FT_DIR], pfep); + append_pathname(name, "/"); + } + i = sprintf(buf, "%c%x", flp->tag, fep->id); + namerandpad(fep->id, buf, i); + append_pathname(name, buf); +} + +void fix_parent(int oldid, int newid) +{ + fent_t *fep; + flist_t *flp; + int i; + int j; + + for (i = 0, flp = flist; i < FT_nft; i++, flp++) { + for (j = 0, fep = flp->fents; j < flp->nfiles; j++, fep++) { + if (fep->parent == oldid) + fep->parent = newid; + } + } +} + +void free_pathname(pathname_t * name) +{ + if (name->path) { + free(name->path); + name->path = NULL; + name->len = 0; + } +} + +int generate_fname(fent_t * fep, int ft, pathname_t * name, int *idp, int *v) +{ + char buf[MAXNAMELEN]; + flist_t *flp; + int id; + int j; + int len; + + flp = &flist[ft]; + len = sprintf(buf, "%c%x", flp->tag, id = nameseq++); + namerandpad(id, buf, len); + if (fep) { + fent_to_name(name, &flist[FT_DIR], fep); + append_pathname(name, "/"); + } + append_pathname(name, buf); + *idp = id; + *v = verbose; + for (j = 0; !*v && j < ilistlen; j++) { + if (ilist[j] == id) { + *v = 1; + break; + } + } + return 1; +} + +int +get_fname(int which, long r, pathname_t * name, flist_t ** flpp, fent_t ** fepp, + int *v) +{ + int c; + fent_t *fep; + flist_t *flp; + int i; + int j; + int x; + + for (i = 0, c = 0, flp = flist; i < FT_nft; i++, flp++) { + if (which & (1 << i)) + c += flp->nfiles; + } + if (c == 0) { + if (flpp) + *flpp = NULL; + if (fepp) + *fepp = NULL; + *v = verbose; + return 0; + } + x = (int)(r % c); + for (i = 0, c = 0, flp = flist; i < FT_nft; i++, flp++) { + if (which & (1 << i)) { + if (x < c + flp->nfiles) { + fep = &flp->fents[x - c]; + if (name) + fent_to_name(name, flp, fep); + if (flpp) + *flpp = flp; + if (fepp) + *fepp = fep; + *v = verbose; + for (j = 0; !*v && j < ilistlen; j++) { + if (ilist[j] == fep->id) { + *v = 1; + break; + } + } + return 1; + } + c += flp->nfiles; + } + } +#ifdef DEBUG + fprintf(stderr, "fsstress: get_fname failure\n"); + abort(); +#endif + return -1; + +} + +void init_pathname(pathname_t * name) +{ + name->len = 0; + name->path = NULL; +} + +int lchown_path(pathname_t * name, uid_t owner, gid_t group) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = lchown(name->path, owner, group); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = lchown_path(&newname, owner, group); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int link_path(pathname_t * name1, pathname_t * name2) +{ + char buf1[MAXNAMELEN]; + char buf2[MAXNAMELEN]; + int down1; + pathname_t newname1; + pathname_t newname2; + int rval; + + rval = link(name1->path, name2->path); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name1, buf1, &newname1); + separate_pathname(name2, buf2, &newname2); + if (strcmp(buf1, buf2) == 0) { + if (chdir(buf1) == 0) { + rval = link_path(&newname1, &newname2); + chdir(".."); + } + } else { + if (strcmp(buf1, "..") == 0) + down1 = 0; + else if (strcmp(buf2, "..") == 0) + down1 = 1; + else if (strlen(buf1) == 0) + down1 = 0; + else if (strlen(buf2) == 0) + down1 = 1; + else + down1 = MAX(newname1.len, 3 + name2->len) <= + MAX(3 + name1->len, newname2.len); + if (down1) { + free_pathname(&newname2); + append_pathname(&newname2, "../"); + append_pathname(&newname2, name2->path); + if (chdir(buf1) == 0) { + rval = link_path(&newname1, &newname2); + chdir(".."); + } + } else { + free_pathname(&newname1); + append_pathname(&newname1, "../"); + append_pathname(&newname1, name1->path); + if (chdir(buf2) == 0) { + rval = link_path(&newname1, &newname2); + chdir(".."); + } + } + } + free_pathname(&newname1); + free_pathname(&newname2); + return rval; +} + +int lstat64_path(pathname_t * name, struct stat64 *sbuf) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = lstat64(name->path, sbuf); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = lstat64_path(&newname, sbuf); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +void make_freq_table(void) +{ + int f; + int i; + opdesc_t *p; + + for (p = ops, f = 0; p < ops_end; p++) + f += p->freq; + freq_table = malloc(f * sizeof(*freq_table)); + freq_table_size = f; + for (p = ops, i = 0; p < ops_end; p++) { + for (f = 0; f < p->freq; f++, i++) + freq_table[i] = p->op; + } +} + +int mkdir_path(pathname_t * name, mode_t mode) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = mkdir(name->path, mode); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = mkdir_path(&newname, mode); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int mknod_path(pathname_t * name, mode_t mode, dev_t dev) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = mknod(name->path, mode, dev); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = mknod_path(&newname, mode, dev); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +void namerandpad(int id, char *buf, int i) +{ + int bucket; + static int buckets[] = { 2, 4, 8, 16, 32, 64, 128, MAXNAMELEN - 1 }; + int padlen; + int padmod; + + if (namerand == 0) + return; + bucket = (id ^ namerand) % (sizeof(buckets) / sizeof(buckets[0])); + padmod = buckets[bucket] + 1 - i; + if (padmod <= 0) + return; + padlen = (id ^ namerand) % padmod; + if (padlen) { + memset(&buf[i], 'X', padlen); + buf[i + padlen] = '\0'; + } +} + +int open_path(pathname_t * name, int oflag) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = open(name->path, oflag); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = open_path(&newname, oflag); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +DIR *opendir_path(pathname_t * name) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + DIR *rval; + + rval = opendir(name->path); + if (rval || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = opendir_path(&newname); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +void process_freq(char *arg) +{ + opdesc_t *p; + char *s; + + s = strchr(arg, '='); + if (s == NULL) { + fprintf(stderr, "bad argument '%s'\n", arg); + exit(1); + } + *s++ = '\0'; + for (p = ops; p < ops_end; p++) { + if (strcmp(arg, p->name) == 0) { + p->freq = atoi(s); + return; + } + } + fprintf(stderr, "can't find op type %s for -f\n", arg); + exit(1); +} + +int readlink_path(pathname_t * name, char *lbuf, size_t lbufsiz) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = readlink(name->path, lbuf, lbufsiz); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = readlink_path(&newname, lbuf, lbufsiz); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int rename_path(pathname_t * name1, pathname_t * name2) +{ + char buf1[MAXNAMELEN]; + char buf2[MAXNAMELEN]; + int down1; + pathname_t newname1; + pathname_t newname2; + int rval; + + rval = rename(name1->path, name2->path); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name1, buf1, &newname1); + separate_pathname(name2, buf2, &newname2); + if (strcmp(buf1, buf2) == 0) { + if (chdir(buf1) == 0) { + rval = rename_path(&newname1, &newname2); + chdir(".."); + } + } else { + if (strcmp(buf1, "..") == 0) + down1 = 0; + else if (strcmp(buf2, "..") == 0) + down1 = 1; + else if (strlen(buf1) == 0) + down1 = 0; + else if (strlen(buf2) == 0) + down1 = 1; + else + down1 = MAX(newname1.len, 3 + name2->len) <= + MAX(3 + name1->len, newname2.len); + if (down1) { + free_pathname(&newname2); + append_pathname(&newname2, "../"); + append_pathname(&newname2, name2->path); + if (chdir(buf1) == 0) { + rval = rename_path(&newname1, &newname2); + chdir(".."); + } + } else { + free_pathname(&newname1); + append_pathname(&newname1, "../"); + append_pathname(&newname1, name1->path); + if (chdir(buf2) == 0) { + rval = rename_path(&newname1, &newname2); + chdir(".."); + } + } + } + free_pathname(&newname1); + free_pathname(&newname2); + return rval; +} + +int rmdir_path(pathname_t * name) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = rmdir(name->path); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = rmdir_path(&newname); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +void separate_pathname(pathname_t * name, char *buf, pathname_t * newname) +{ + char *slash; + + init_pathname(newname); + slash = strchr(name->path, '/'); + if (slash == NULL) { + buf[0] = '\0'; + return; + } + *slash = '\0'; + strcpy(buf, name->path); + *slash = '/'; + append_pathname(newname, slash + 1); +} + +#define WIDTH 80 + +void show_ops(int flag, char *lead_str) +{ + opdesc_t *p; + + if (flag < 0) { + /* print in list form */ + int x = WIDTH; + + for (p = ops; p < ops_end; p++) { + if (lead_str != NULL + && x + strlen(p->name) >= WIDTH - 5) + x = printf("%s%s", (p == ops) ? "" : "\n", + lead_str); + x += printf("%s ", p->name); + } + printf("\n"); + } else { + int f; + for (f = 0, p = ops; p < ops_end; p++) + f += p->freq; + + if (f == 0) + flag = 1; + + for (p = ops; p < ops_end; p++) { + if (flag != 0 || p->freq > 0) { + if (lead_str != NULL) + printf("%s", lead_str); + printf("%20s %d/%d %s\n", + p->name, p->freq, f, + (p->iswrite == 0) ? " " : "write op"); + } + } + } +} + +int stat64_path(pathname_t * name, struct stat64 *sbuf) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = stat64(name->path, sbuf); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = stat64_path(&newname, sbuf); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int symlink_path(const char *name1, pathname_t * name) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + if (!strcmp(name1, name->path)) { + printf("yikes! %s %s\n", name1, name->path); + return 0; + } + + rval = symlink(name1, name->path); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = symlink_path(name1, &newname); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int truncate64_path(pathname_t * name, off64_t length) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = truncate64(name->path, length); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = truncate64_path(&newname, length); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +int unlink_path(pathname_t * name) +{ + char buf[MAXNAMELEN]; + pathname_t newname; + int rval; + + rval = unlink(name->path); + if (rval >= 0 || errno != ENAMETOOLONG) + return rval; + separate_pathname(name, buf, &newname); + if (chdir(buf) == 0) { + rval = unlink_path(&newname); + chdir(".."); + } + free_pathname(&newname); + return rval; +} + +void usage(void) +{ + printf("Usage: %s -H or\n", myprog); + printf + (" %s [-c][-d dir][-e errtg][-f op_name=freq][-l loops][-n nops]\n", + myprog); + printf(" [-p nproc][-r len][-s seed][-v][-w][-z][-S]\n"); + printf("where\n"); + printf + (" -c specifies not to remove files(cleanup) after execution\n"); + printf + (" -d dir specifies the base directory for operations\n"); + printf(" -e errtg specifies error injection stuff\n"); + printf + (" -f op_name=freq changes the frequency of option name to freq\n"); + printf(" the valid operation names are:\n"); + show_ops(-1, " "); + printf + (" -l loops specifies the no. of times the testrun should loop.\n"); + printf(" *use 0 for infinite (default 1)\n"); + printf + (" -n nops specifies the no. of operations per process (default 1)\n"); + printf + (" -p nproc specifies the no. of processes (default 1)\n"); + printf(" -r specifies random name padding\n"); + printf + (" -s seed specifies the seed for the random generator (default random)\n"); + printf(" -v specifies verbose mode\n"); + printf + (" -w zeros frequencies of non-write operations\n"); + printf(" -z zeros frequencies of all operations\n"); + printf + (" -S prints the table of operations (omitting zero frequency)\n"); + printf(" -H prints usage and exits\n"); + printf + (" -X don't do anything XFS specific (default with -DNO_XFS)\n"); +} + +void write_freq(void) +{ + opdesc_t *p; + + for (p = ops; p < ops_end; p++) { + if (!p->iswrite) + p->freq = 0; + } +} + +void zero_freq(void) +{ + opdesc_t *p; + + for (p = ops; p < ops_end; p++) + p->freq = 0; +} + +#ifndef NO_XFS + +void allocsp_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + struct xfs_flock64 fl; + __s64 lr; + __s64 off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: allocsp - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_RDWR); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: allocsp - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: allocsp - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + lr = ((__s64) random() << 32) + random(); + off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE); + off %= maxfsize; + memset(&fl, 0, sizeof(fl)); + fl.l_whence = SEEK_SET; + fl.l_start = off; + fl.l_len = 0; + e = ioctl(fd, XFS_IOC_ALLOCSP64, &fl) < 0 ? errno : 0; + if (v) + printf("%d/%d: ioctl(XFS_IOC_ALLOCSP64) %s %lld 0 %d\n", + procid, opno, f.path, (long long)off, e); + free_pathname(&f); + close(fd); +} + +void attr_remove_f(int opno, long r) +{ + attrlist_ent_t *aep; + attrlist_t *alist; + char *aname; + char buf[4096]; + attrlist_cursor_t cursor; + int e; + int ent; + pathname_t f; + int total; + int v; + int which; + + init_pathname(&f); + if (!get_fname(FT_ANYm, r, &f, NULL, NULL, &v)) + append_pathname(&f, "."); + total = 0; + memset(&cursor, 0x00, sizeof(cursor)); + do { + e = attr_list_path(&f, buf, sizeof(buf), ATTR_DONTFOLLOW, + &cursor); + check_cwd(); + if (e) + break; + alist = (attrlist_t *) buf; + total += alist->al_count; + } while (alist->al_more); + if (total == 0) { + if (v) + printf("%d/%d: attr_remove - no attrs for %s\n", + procid, opno, f.path); + free_pathname(&f); + return; + } + which = (int)(random() % total); + memset(&cursor, 0x00, sizeof(cursor)); + ent = 0; + aname = NULL; + do { + e = attr_list_path(&f, buf, sizeof(buf), ATTR_DONTFOLLOW, + &cursor); + check_cwd(); + if (e) + break; + alist = (attrlist_t *) buf; + if (which < ent + alist->al_count) { + aep = (attrlist_ent_t *) + & buf[alist->al_offset[which - ent]]; + aname = aep->a_name; + break; + } + ent += alist->al_count; + } while (alist->al_more); + if (aname == NULL) { + if (v) + printf("%d/%d: attr_remove - name %d not found at %s\n", + procid, opno, which, f.path); + free_pathname(&f); + return; + } + e = attr_remove_path(&f, aname, ATTR_DONTFOLLOW) < 0 ? errno : 0; + check_cwd(); + if (v) + printf("%d/%d: attr_remove %s %s %d\n", + procid, opno, f.path, aname, e); + free_pathname(&f); +} + +void attr_set_f(int opno, long r) +{ + char aname[10]; + char *aval; + int e; + pathname_t f; + int len; + static int lengths[] = { 10, 100, 1000, 10000 }; + int li; + int v; + + init_pathname(&f); + if (!get_fname(FT_ANYm, r, &f, NULL, NULL, &v)) + append_pathname(&f, "."); + sprintf(aname, "a%x", nameseq++); + li = (int)(random() % (sizeof(lengths) / sizeof(lengths[0]))); + len = (int)(random() % lengths[li]); + if (len == 0) + len = 1; + aval = malloc(len); + memset(aval, nameseq & 0xff, len); + e = attr_set_path(&f, aname, aval, len, ATTR_DONTFOLLOW) < 0 ? + errno : 0; + check_cwd(); + free(aval); + if (v) + printf("%d/%d: attr_set %s %s %d\n", procid, opno, f.path, + aname, e); + free_pathname(&f); +} + +void bulkstat_f(int opno, long r) +{ + __s32 count; + int fd; + __u64 last; + __s32 nent; + xfs_bstat_t *t; + __int64_t total; + xfs_fsop_bulkreq_t bsr; + + last = 0; + nent = (r % 999) + 2; + t = malloc(nent * sizeof(*t)); + fd = open(".", O_RDONLY); + total = 0; + + memset(&bsr, 0, sizeof(bsr)); + bsr.lastip = &last; + bsr.icount = nent; + bsr.ubuffer = t; + bsr.ocount = &count; + + while (ioctl(fd, XFS_IOC_FSBULKSTAT, &bsr) == 0 && count > 0) + total += count; + free(t); + if (verbose) + printf("%d/%d: bulkstat nent %d total %lld\n", + procid, opno, (int)nent, (long long)total); + close(fd); +} + +void bulkstat1_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + int good; + __u64 ino; + struct stat64 s; + xfs_bstat_t t; + int v; + xfs_fsop_bulkreq_t bsr; + + good = random() & 1; + if (good) { + /* use an inode we know exists */ + init_pathname(&f); + if (!get_fname(FT_ANYm, r, &f, NULL, NULL, &v)) + append_pathname(&f, "."); + ino = stat64_path(&f, &s) < 0 ? (ino64_t) r : s.st_ino; + check_cwd(); + free_pathname(&f); + } else { + /* + * pick a random inode + * + * note this can generate kernel warning messages + * since bulkstat_one will read the disk block that + * would contain a given inode even if that disk + * block doesn't contain inodes. + * + * this is detected later, but not until after the + * warning is displayed. + * + * "XFS: device 0x825- bad inode magic/vsn daddr 0x0 #0" + * + */ + ino = (ino64_t) r; + v = verbose; + } + fd = open(".", O_RDONLY); + + memset(&bsr, 0, sizeof(bsr)); + bsr.lastip = &ino; + bsr.icount = 1; + bsr.ubuffer = &t; + bsr.ocount = NULL; + + e = ioctl(fd, XFS_IOC_FSBULKSTAT_SINGLE, &bsr) < 0 ? errno : 0; + if (v) + printf("%d/%d: bulkstat1 %s ino %lld %d\n", + procid, opno, good ? "real" : "random", + (long long)ino, e); + close(fd); +} + +#endif + +void chown_f(int opno, long r) +{ + int e; + pathname_t f; + int nbits; + uid_t u; + int v; + + init_pathname(&f); + if (!get_fname(FT_ANYm, r, &f, NULL, NULL, &v)) + append_pathname(&f, "."); + u = (uid_t) random(); + nbits = (int)(random() % 32); + u &= (1 << nbits) - 1; + e = lchown_path(&f, u, -1) < 0 ? errno : 0; + check_cwd(); + if (v) + printf("%d/%d: chown %s %d %d\n", procid, opno, f.path, u, e); + free_pathname(&f); +} + +void creat_f(int opno, long r) +{ + int e; + int e1; + int extsize; + pathname_t f; + int fd; + fent_t *fep; + int id; + int parid; + int type; + int v; + int v1; + int esz = 0; + + if (!get_fname(FT_DIRm, r, NULL, NULL, &fep, &v1)) + parid = -1; + else + parid = fep->id; + init_pathname(&f); + type = rtpct ? ((random() % 100) > rtpct ? FT_REG : FT_RTF) : FT_REG; + if (type == FT_RTF) + extsize = (random() % 10) + 1; + else + extsize = 0; + e = generate_fname(fep, type, &f, &id, &v); + v |= v1; + if (!e) { + if (v) { + fent_to_name(&f, &flist[FT_DIR], fep); + printf("%d/%d: creat - no filename from %s\n", + procid, opno, f.path); + } + free_pathname(&f); + return; + } + fd = creat_path(&f, 0666); + e = fd < 0 ? errno : 0; + e1 = 0; + check_cwd(); + esz = 0; + if (fd >= 0) { +#ifndef NO_XFS + struct fsxattr a; + memset(&a, 0, sizeof(a)); + if (extsize && ioctl(fd, XFS_IOC_FSGETXATTR, &a) >= 0) { + a.fsx_xflags |= XFS_XFLAG_REALTIME; + a.fsx_extsize = + geom.rtextsize * geom.blocksize * extsize; + if (ioctl(fd, XFS_IOC_FSSETXATTR, &a) < 0) + e1 = errno; + esz = a.fsx_extsize; + + } +#endif + add_to_flist(type, id, parid); + close(fd); + } + if (v) + printf("%d/%d: creat %s x:%d %d %d\n", procid, opno, f.path, + esz, e, e1); + free_pathname(&f); +} + +int setdirect(int fd) +{ + static int no_direct; + int flags; + + if (no_direct) + return 0; + + flags = fcntl(fd, F_GETFL, 0); + if (flags < 0) + return 0; + + if (fcntl(fd, F_SETFL, flags | O_DIRECT) < 0) { + if (no_xfs) { + no_direct = 1; + return 0; + } + printf("cannot set O_DIRECT: %s\n", strerror(errno)); + return 0; + } + + return 1; +} + +void dread_f(int opno, long r) +{ + __int64_t align; + char *buf = NULL; + struct dioattr diob; + int e; + pathname_t f; + int fd; + size_t len; + __int64_t lr; + off64_t off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: dread - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_RDONLY); + + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: dread - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + + if (!setdirect(fd)) { + close(fd); + free_pathname(&f); + return; + } + + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: dread - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + if (stb.st_size == 0) { + if (v) + printf("%d/%d: dread - %s zero size\n", procid, opno, + f.path); + free_pathname(&f); + close(fd); + return; + } + + memset(&diob, 0, sizeof(diob)); + if (no_xfs) { + diob.d_miniosz = stb.st_blksize; + diob.d_maxiosz = stb.st_blksize * 256; /* good number ? */ + diob.d_mem = stb.st_blksize; + } +#ifndef NO_XFS + else if (ioctl(fd, XFS_IOC_DIOINFO, &diob) < 0) { + if (v) + printf + ("%d/%d: dread - ioctl(fd, XFS_IOC_DIOINFO) %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } +#endif + align = (__int64_t) diob.d_miniosz; + lr = ((__int64_t) random() << 32) + random(); + off = (off64_t) (lr % stb.st_size); + off -= (off % align); + lseek64(fd, off, SEEK_SET); + len = (random() % (getpagesize() * 32)) + 1; + len -= (len % align); + if (len <= 0) + len = align; + else if (len > diob.d_maxiosz) + len = diob.d_maxiosz; + if ((e = posix_memalign((void **)&buf, diob.d_mem, len)) != 0) { + fprintf(stderr, "posix_memalign: %s\n", strerror(e)); + exit(1); + } + if (buf == NULL) { + fprintf(stderr, "posix_memalign: buf is NULL\n"); + exit(1); + } + e = read(fd, buf, len) < 0 ? errno : 0; + free(buf); + if (v) + printf("%d/%d: dread %s [%lld,%ld] %d\n", + procid, opno, f.path, (long long int)off, (long)len, e); + free_pathname(&f); + close(fd); +} + +void dwrite_f(int opno, long r) +{ + __int64_t align; + char *buf = NULL; + struct dioattr diob; + int e; + pathname_t f; + int fd; + size_t len; + __int64_t lr; + off64_t off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: dwrite - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_WRONLY); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: dwrite - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + + if (!setdirect(fd)) { + close(fd); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: dwrite - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + memset(&diob, 0, sizeof(diob)); + if (no_xfs) { + diob.d_miniosz = stb.st_blksize; + diob.d_maxiosz = stb.st_blksize * 256; /* good number ? */ + diob.d_mem = stb.st_blksize; + } +#ifndef NO_XFS + else if (ioctl(fd, XFS_IOC_DIOINFO, &diob) < 0) { + if (v) + printf + ("%d/%d: dwrite - ioctl(fd, XFS_IOC_DIOINFO) %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } +#endif + align = (__int64_t) diob.d_miniosz; + lr = ((__int64_t) random() << 32) + random(); + off = (off64_t) (lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE)); + off -= (off % align); + lseek64(fd, off, SEEK_SET); + len = (random() % (getpagesize() * 32)) + 1; + len -= (len % align); + if (len <= 0) + len = align; + else if (len > diob.d_maxiosz) + len = diob.d_maxiosz; + if ((e = posix_memalign((void **)&buf, diob.d_mem, len)) != 0) { + fprintf(stderr, "posix_memalign: %s\n", strerror(e)); + exit(1); + } + if (buf == NULL) { + fprintf(stderr, "posix_memalign: buf is NULL\n"); + exit(1); + } + off %= maxfsize; + lseek64(fd, off, SEEK_SET); + memset(buf, nameseq & 0xff, len); + e = write(fd, buf, len) < 0 ? errno : 0; + free(buf); + if (v) + printf("%d/%d: dwrite %s [%lld,%ld] %d\n", + procid, opno, f.path, (long long)off, (long int)len, e); + free_pathname(&f); + close(fd); +} + +void fdatasync_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: fdatasync - no filename\n", + procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_WRONLY); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: fdatasync - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + e = fdatasync(fd) < 0 ? errno : 0; + if (v) + printf("%d/%d: fdatasync %s %d\n", procid, opno, f.path, e); + free_pathname(&f); + close(fd); +} + +#ifndef NO_XFS +void freesp_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + struct xfs_flock64 fl; + __s64 lr; + __s64 off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: freesp - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_RDWR); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: freesp - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: freesp - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + lr = ((__s64) random() << 32) + random(); + off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE); + off %= maxfsize; + memset(&fl, 0, sizeof(fl)); + fl.l_whence = SEEK_SET; + fl.l_start = off; + fl.l_len = 0; + e = ioctl(fd, XFS_IOC_FREESP64, &fl) < 0 ? errno : 0; + if (v) + printf("%d/%d: ioctl(XFS_IOC_FREESP64) %s %lld 0 %d\n", + procid, opno, f.path, (long long)off, e); + free_pathname(&f); + close(fd); +} + +#endif + +void fsync_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: fsync - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_WRONLY); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: fsync - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + e = fsync(fd) < 0 ? errno : 0; + if (v) + printf("%d/%d: fsync %s %d\n", procid, opno, f.path, e); + free_pathname(&f); + close(fd); +} + +void getdents_f(int opno, long r) +{ + DIR *dir; + pathname_t f; + int v; + + init_pathname(&f); + if (!get_fname(FT_DIRm, r, &f, NULL, NULL, &v)) + append_pathname(&f, "."); + dir = opendir_path(&f); + check_cwd(); + if (dir == NULL) { + if (v) + printf("%d/%d: getdents - can't open %s\n", + procid, opno, f.path); + free_pathname(&f); + return; + } + while (readdir64(dir) != NULL) + continue; + if (v) + printf("%d/%d: getdents %s 0\n", procid, opno, f.path); + free_pathname(&f); + closedir(dir); +} + +void link_f(int opno, long r) +{ + int e; + pathname_t f; + fent_t *fep; + flist_t *flp; + int id; + pathname_t l; + int parid; + int v; + int v1; + + init_pathname(&f); + if (!get_fname(FT_NOTDIR, r, &f, &flp, NULL, &v1)) { + if (v1) + printf("%d/%d: link - no file\n", procid, opno); + free_pathname(&f); + return; + } + if (!get_fname(FT_DIRm, random(), NULL, NULL, &fep, &v)) + parid = -1; + else + parid = fep->id; + v |= v1; + init_pathname(&l); + e = generate_fname(fep, flp - flist, &l, &id, &v1); + v |= v1; + if (!e) { + if (v) { + fent_to_name(&l, &flist[FT_DIR], fep); + printf("%d/%d: link - no filename from %s\n", + procid, opno, l.path); + } + free_pathname(&l); + free_pathname(&f); + return; + } + e = link_path(&f, &l) < 0 ? errno : 0; + check_cwd(); + if (e == 0) + add_to_flist(flp - flist, id, parid); + if (v) + printf("%d/%d: link %s %s %d\n", procid, opno, f.path, l.path, + e); + free_pathname(&l); + free_pathname(&f); +} + +void mkdir_f(int opno, long r) +{ + int e; + pathname_t f; + fent_t *fep; + int id; + int parid; + int v; + int v1; + + if (!get_fname(FT_DIRm, r, NULL, NULL, &fep, &v)) + parid = -1; + else + parid = fep->id; + init_pathname(&f); + e = generate_fname(fep, FT_DIR, &f, &id, &v1); + v |= v1; + if (!e) { + if (v) { + fent_to_name(&f, &flist[FT_DIR], fep); + printf("%d/%d: mkdir - no filename from %s\n", + procid, opno, f.path); + } + free_pathname(&f); + return; + } + e = mkdir_path(&f, 0777) < 0 ? errno : 0; + check_cwd(); + if (e == 0) + add_to_flist(FT_DIR, id, parid); + if (v) + printf("%d/%d: mkdir %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +void mknod_f(int opno, long r) +{ + int e; + pathname_t f; + fent_t *fep; + int id; + int parid; + int v; + int v1; + + if (!get_fname(FT_DIRm, r, NULL, NULL, &fep, &v)) + parid = -1; + else + parid = fep->id; + init_pathname(&f); + e = generate_fname(fep, FT_DEV, &f, &id, &v1); + v |= v1; + if (!e) { + if (v) { + fent_to_name(&f, &flist[FT_DIR], fep); + printf("%d/%d: mknod - no filename from %s\n", + procid, opno, f.path); + } + free_pathname(&f); + return; + } + e = mknod_path(&f, S_IFCHR | 0444, 0) < 0 ? errno : 0; + check_cwd(); + if (e == 0) + add_to_flist(FT_DEV, id, parid); + if (v) + printf("%d/%d: mknod %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +void read_f(int opno, long r) +{ + char *buf; + int e; + pathname_t f; + int fd; + size_t len; + __int64_t lr; + off64_t off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: read - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_RDONLY); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: read - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: read - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + if (stb.st_size == 0) { + if (v) + printf("%d/%d: read - %s zero size\n", procid, opno, + f.path); + free_pathname(&f); + close(fd); + return; + } + lr = ((__int64_t) random() << 32) + random(); + off = (off64_t) (lr % stb.st_size); + lseek64(fd, off, SEEK_SET); + len = (random() % (getpagesize() * 32)) + 1; + buf = malloc(len); + e = read(fd, buf, len) < 0 ? errno : 0; + free(buf); + if (v) + printf("%d/%d: read %s [%lld,%ld] %d\n", + procid, opno, f.path, (long long)off, (long int)len, e); + free_pathname(&f); + close(fd); +} + +void readlink_f(int opno, long r) +{ + char buf[PATH_MAX]; + int e; + pathname_t f; + int v; + + init_pathname(&f); + if (!get_fname(FT_SYMm, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: readlink - no filename\n", procid, opno); + free_pathname(&f); + return; + } + e = readlink_path(&f, buf, PATH_MAX) < 0 ? errno : 0; + check_cwd(); + if (v) + printf("%d/%d: readlink %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +void rename_f(int opno, long r) +{ + fent_t *dfep; + int e; + pathname_t f; + fent_t *fep; + flist_t *flp; + int id; + pathname_t newf; + int oldid; + int parid; + int v; + int v1; + + init_pathname(&f); + if (!get_fname(FT_ANYm, r, &f, &flp, &fep, &v1)) { + if (v1) + printf("%d/%d: rename - no filename\n", procid, opno); + free_pathname(&f); + return; + } + if (!get_fname(FT_DIRm, random(), NULL, NULL, &dfep, &v)) + parid = -1; + else + parid = dfep->id; + v |= v1; + init_pathname(&newf); + e = generate_fname(dfep, flp - flist, &newf, &id, &v1); + v |= v1; + if (!e) { + if (v) { + fent_to_name(&f, &flist[FT_DIR], dfep); + printf("%d/%d: rename - no filename from %s\n", + procid, opno, f.path); + } + free_pathname(&newf); + free_pathname(&f); + return; + } + e = rename_path(&f, &newf) < 0 ? errno : 0; + check_cwd(); + if (e == 0) { + if (flp - flist == FT_DIR) { + oldid = fep->id; + fix_parent(oldid, id); + } + del_from_flist(flp - flist, fep - flp->fents); + add_to_flist(flp - flist, id, parid); + } + if (v) + printf("%d/%d: rename %s to %s %d\n", procid, opno, f.path, + newf.path, e); + free_pathname(&newf); + free_pathname(&f); +} + +#ifndef NO_XFS +void resvsp_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + struct xfs_flock64 fl; + __s64 lr; + __s64 off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: resvsp - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_RDWR); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: resvsp - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: resvsp - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + lr = ((__s64) random() << 32) + random(); + off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE); + off %= maxfsize; + memset(&fl, 0, sizeof(fl)); + fl.l_whence = SEEK_SET; + fl.l_start = off; + fl.l_len = (__s64) (random() % (1024 * 1024)); + e = ioctl(fd, XFS_IOC_RESVSP64, &fl) < 0 ? errno : 0; + if (v) + printf("%d/%d: ioctl(XFS_IOC_RESVSP64) %s %lld %lld %d\n", + procid, opno, f.path, (long long)off, + (long long)fl.l_len, e); + free_pathname(&f); + close(fd); +} +#endif + +void rmdir_f(int opno, long r) +{ + int e; + pathname_t f; + fent_t *fep; + int v; + + init_pathname(&f); + if (!get_fname(FT_DIRm, r, &f, NULL, &fep, &v)) { + if (v) + printf("%d/%d: rmdir - no directory\n", procid, opno); + free_pathname(&f); + return; + } + e = rmdir_path(&f) < 0 ? errno : 0; + check_cwd(); + if (e == 0) + del_from_flist(FT_DIR, fep - flist[FT_DIR].fents); + if (v) + printf("%d/%d: rmdir %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +void stat_f(int opno, long r) +{ + int e; + pathname_t f; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_ANYm, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: stat - no entries\n", procid, opno); + free_pathname(&f); + return; + } + e = lstat64_path(&f, &stb) < 0 ? errno : 0; + check_cwd(); + if (v) + printf("%d/%d: stat %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +void symlink_f(int opno, long r) +{ + int e; + pathname_t f; + fent_t *fep; + int i; + int id; + int len; + int parid; + int v; + int v1; + char *val; + + if (!get_fname(FT_DIRm, r, NULL, NULL, &fep, &v)) + parid = -1; + else + parid = fep->id; + init_pathname(&f); + e = generate_fname(fep, FT_SYM, &f, &id, &v1); + v |= v1; + if (!e) { + if (v) { + fent_to_name(&f, &flist[FT_DIR], fep); + printf("%d/%d: symlink - no filename from %s\n", + procid, opno, f.path); + } + free_pathname(&f); + return; + } + len = (int)(random() % PATH_MAX); + val = malloc(len + 1); + if (len) + memset(val, 'x', len); + val[len] = '\0'; + for (i = 10; i < len - 1; i += 10) + val[i] = '/'; + e = symlink_path(val, &f) < 0 ? errno : 0; + check_cwd(); + if (e == 0) + add_to_flist(FT_SYM, id, parid); + free(val); + if (v) + printf("%d/%d: symlink %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +/* ARGSUSED */ +void sync_f(int opno, long r) +{ + sync(); + if (verbose) + printf("%d/%d: sync\n", procid, opno); +} + +void truncate_f(int opno, long r) +{ + int e; + pathname_t f; + __int64_t lr; + off64_t off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: truncate - no filename\n", procid, opno); + free_pathname(&f); + return; + } + e = stat64_path(&f, &stb) < 0 ? errno : 0; + check_cwd(); + if (e > 0) { + if (v) + printf("%d/%d: truncate - stat64 %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + lr = ((__int64_t) random() << 32) + random(); + off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE); + off %= maxfsize; + e = truncate64_path(&f, off) < 0 ? errno : 0; + check_cwd(); + if (v) + printf("%d/%d: truncate %s %lld %d\n", procid, opno, f.path, + (long long)off, e); + free_pathname(&f); +} + +void unlink_f(int opno, long r) +{ + int e; + pathname_t f; + fent_t *fep; + flist_t *flp; + int v; + + init_pathname(&f); + if (!get_fname(FT_NOTDIR, r, &f, &flp, &fep, &v)) { + if (v) + printf("%d/%d: unlink - no file\n", procid, opno); + free_pathname(&f); + return; + } + e = unlink_path(&f) < 0 ? errno : 0; + check_cwd(); + if (e == 0) + del_from_flist(flp - flist, fep - flp->fents); + if (v) + printf("%d/%d: unlink %s %d\n", procid, opno, f.path, e); + free_pathname(&f); +} + +#ifndef NO_XFS +void unresvsp_f(int opno, long r) +{ + int e; + pathname_t f; + int fd; + struct xfs_flock64 fl; + __s64 lr; + __s64 off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGFILE, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: unresvsp - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_RDWR); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: unresvsp - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: unresvsp - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + lr = ((__s64) random() << 32) + random(); + off = lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE); + off %= maxfsize; + memset(&fl, 0, sizeof(fl)); + fl.l_whence = SEEK_SET; + fl.l_start = off; + fl.l_len = (__s64) (random() % (1 << 20)); + e = ioctl(fd, XFS_IOC_UNRESVSP64, &fl) < 0 ? errno : 0; + if (v) + printf("%d/%d: ioctl(XFS_IOC_UNRESVSP64) %s %lld %lld %d\n", + procid, opno, f.path, (long long)off, + (long long)fl.l_len, e); + free_pathname(&f); + close(fd); +} +#endif + +void write_f(int opno, long r) +{ + char *buf; + int e; + pathname_t f; + int fd; + size_t len; + __int64_t lr; + off64_t off; + struct stat64 stb; + int v; + + init_pathname(&f); + if (!get_fname(FT_REGm, r, &f, NULL, NULL, &v)) { + if (v) + printf("%d/%d: write - no filename\n", procid, opno); + free_pathname(&f); + return; + } + fd = open_path(&f, O_WRONLY); + e = fd < 0 ? errno : 0; + check_cwd(); + if (fd < 0) { + if (v) + printf("%d/%d: write - open %s failed %d\n", + procid, opno, f.path, e); + free_pathname(&f); + return; + } + if (fstat64(fd, &stb) < 0) { + if (v) + printf("%d/%d: write - fstat64 %s failed %d\n", + procid, opno, f.path, errno); + free_pathname(&f); + close(fd); + return; + } + lr = ((__int64_t) random() << 32) + random(); + off = (off64_t) (lr % MIN(stb.st_size + (1024 * 1024), MAXFSIZE)); + off %= maxfsize; + lseek64(fd, off, SEEK_SET); + len = (random() % (getpagesize() * 32)) + 1; + buf = malloc(len); + memset(buf, nameseq & 0xff, len); + e = write(fd, buf, len) < 0 ? errno : 0; + free(buf); + if (v) + printf("%d/%d: write %s [%lld,%ld] %d\n", + procid, opno, f.path, (long long)off, (long int)len, e); + free_pathname(&f); + close(fd); +} diff --git a/contrib/jbd2-resync.sh b/contrib/jbd2-resync.sh new file mode 100755 index 0000000..4133b63 --- /dev/null +++ b/contrib/jbd2-resync.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -z "$1" -o -z "$2" ]; then + echo "Usage: $0 kernel-file e2fsprogs-file" + exit 0 +fi + +# Transform a few things to fit the compatibility things defined in jfs_user.h. +# Use the ext2fs_ endian conversion functions because they truncate oversized +# inputs (e.g. passing a u32 to cpu_to_be16()) like the kernel versions and +# unlike the libc6 versions. +exec sed -e 's/JBD_/JFS_/g' \ + -e 's/JBD2_/JFS_/g' \ + -e 's/jbd2_journal_/journal_/g' \ + -e 's/__be/__u/g' \ + -e 's/struct kmem_cache/lkmem_cache_t/g' \ + -e 's/cpu_to_be/ext2fs_cpu_to_be/g' \ + -e 's/be\([0-9][0-9]\)_to_cpu/ext2fs_be\1_to_cpu/g' \ + < "$1" > "$2" diff --git a/contrib/make-sparse.c b/contrib/make-sparse.c new file mode 100644 index 0000000..98b86b0 --- /dev/null +++ b/contrib/make-sparse.c @@ -0,0 +1,91 @@ +/* + * make-sparse.c --- make a sparse file from stdin + * + * Copyright 2004 by Theodore Ts'o. + * + * %Begin-Header% + * This file may be redistributed under the terms of the GNU Public + * License. + * %End-Header% + */ + +#ifndef _LARGEFILE_SOURCE +#define _LARGEFILE_SOURCE +#endif +#ifndef _LARGEFILE64_SOURCE +#define _LARGEFILE64_SOURCE +#endif + +#include +#include +#include +#include +#include +#include +#include + +int full_read(int fd, char *buf, size_t count) +{ + int got, total = 0; + int pass = 0; + + while (count > 0) { + got = read(fd, buf, count); + if (got == -1) { + if ((errno == EINTR) || (errno == EAGAIN)) + continue; + return total ? total : -1; + } + if (got == 0) { + if (pass++ >= 3) + return total; + continue; + } + pass = 0; + buf += got; + total += got; + count -= got; + } + return total; +} + +int main(int argc, char **argv) +{ + int fd, got, i; + int zflag = 0; + char buf[1024]; + + if (argc != 2) { + fprintf(stderr, "Usage: make-sparse out-file\n"); + exit(1); + } + fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0777); + if (fd < 0) { + perror(argv[1]); + exit(1); + } + while (1) { + got = full_read(0, buf, sizeof(buf)); + if (got == 0) + break; + if (got == sizeof(buf)) { + for (i=0; i < sizeof(buf); i++) + if (buf[i]) + break; + if (i == sizeof(buf)) { + lseek(fd, sizeof(buf), SEEK_CUR); + zflag = 1; + continue; + } + } + zflag = 0; + write(fd, buf, got); + } + if (zflag) { + lseek(fd, -1, SEEK_CUR); + buf[0] = 0; + write(fd, buf, 1); + } + return 0; +} + diff --git a/contrib/populate-extfs.sh b/contrib/populate-extfs.sh new file mode 100755 index 0000000..b1d3d1f --- /dev/null +++ b/contrib/populate-extfs.sh @@ -0,0 +1,105 @@ +#!/bin/sh +# +# This script uses debugfs command to populate the ext2/3/4 filesystem +# from a given directory. +# + +do_usage () { + cat << _EOF +Usage: populate-extfs.sh +Create an ext2/ext3/ext4 filesystem from a directory or file + + source: The source directory or file + device: The target device + +_EOF + exit 1 +} + +[ $# -ne 2 ] && do_usage + +SRCDIR=${1%%/} +DEVICE=$2 + +# Find where is the debugfs command if not found in the env. +if [ -z "$DEBUGFS" ]; then + CONTRIB_DIR=$(dirname $(readlink -f $0)) + DEBUGFS="$CONTRIB_DIR/../debugfs/debugfs" +fi + +{ + CWD="/" + find $SRCDIR | while read FILE; do + TGT="${FILE##*/}" + DIR="${FILE#$SRCDIR}" + DIR="${DIR%$TGT}" + + # Skip the root dir + [ ! -z "$DIR" ] || continue + [ ! -z "$TGT" ] || continue + + if [ "$DIR" != "$CWD" ]; then + echo "cd $DIR" + CWD="$DIR" + fi + + # Only stat once since stat is a time consuming command + STAT=$(stat -c "TYPE=\"%F\";DEVNO=\"0x%t 0x%T\";MODE=\"%f\";U=\"%u\";G=\"%g\"" $FILE) + eval $STAT + + case $TYPE in + "directory") + echo "mkdir $TGT" + ;; + "regular file" | "regular empty file") + echo "write $FILE $TGT" + ;; + "symbolic link") + LINK_TGT=$(readlink $FILE) + echo "symlink $TGT $LINK_TGT" + ;; + "block special file") + echo "mknod $TGT b $DEVNO" + ;; + "character special file") + echo "mknod $TGT c $DEVNO" + ;; + "fifo") + echo "mknod $TGT p" + ;; + *) + echo "Unknown/unhandled file type '$TYPE' file: $FILE" 1>&2 + ;; + esac + + # Set the file mode + echo "sif $TGT mode 0x$MODE" + + # Set uid and gid + echo "sif $TGT uid $U" + echo "sif $TGT gid $G" + done + + # Handle the hard links. + # Save the hard links to a file, use the inode number as the filename, for example: + # If a and b's inode number is 6775928, save a and b to /tmp/tmp.VrCwHh5gdt/6775928. + INODE_DIR=`mktemp -d` || exit 1 + for i in `find $SRCDIR -type f -links +1 -printf 'INODE=%i###FN=%p\n'`; do + eval `echo $i | sed 's$###$ $'` + echo ${FN#$SRCDIR} >>$INODE_DIR/$INODE + done + # Use the debugfs' ln and "sif links_count" to handle them. + for i in `ls $INODE_DIR`; do + # The link source + SRC=`head -1 $INODE_DIR/$i` + # Remove the files and link them again except the first one + for TGT in `sed -n -e '1!p' $INODE_DIR/$i`; do + echo "rm $TGT" + echo "ln $SRC $TGT" + done + LN_CNT=`cat $INODE_DIR/$i | wc -l` + # Set the links count + echo "sif $SRC links_count $LN_CNT" + done + rm -fr $INODE_DIR +} | $DEBUGFS -w -f - $DEVICE diff --git a/contrib/python-uuid/setup.py b/contrib/python-uuid/setup.py new file mode 100755 index 0000000..3934d17 --- /dev/null +++ b/contrib/python-uuid/setup.py @@ -0,0 +1,11 @@ +#!/usr/bin/python +from distutils.core import setup, Extension + +uuid = Extension('e2fsprogs_uuid', + sources = ['uuid.c'], + libraries = ['uuid']) + +setup (name = 'e2fsprogs_uuid', + version = '1.0', + description = 'This is python uuid interface', + ext_modules = [uuid]) diff --git a/contrib/python-uuid/test.py b/contrib/python-uuid/test.py new file mode 100755 index 0000000..2264f62 --- /dev/null +++ b/contrib/python-uuid/test.py @@ -0,0 +1,18 @@ +#!/usr/bin/python +import e2fsprogs_uuid +import time + +print "Generating uuid...", +try: + time = time.time() + u = e2fsprogs_uuid.generate() +except: + u = "FAIL" +print u, "...", time + +print "Calling generate with param...", +try: + e2fsprogs_uuid.generate("param") + print "FAIL." +except: + print "OK" diff --git a/contrib/python-uuid/uuid.c b/contrib/python-uuid/uuid.c new file mode 100644 index 0000000..34dd56a --- /dev/null +++ b/contrib/python-uuid/uuid.c @@ -0,0 +1,23 @@ +#include +#include +#include + +static PyObject * _uuid_generate(PyObject *self, PyObject *args) +{ + uuid_t u; + char uuid[37]; + if (!PyArg_ParseTuple(args, "")) return NULL; + uuid_generate(u); + uuid_unparse(u, uuid); + return Py_BuildValue("s", uuid); +} + +static PyMethodDef _uuid_methods[] = { + {"generate", _uuid_generate, METH_VARARGS, "Generate UUID"}, + {NULL, NULL, 0, NULL} +}; + +void inite2fsprogs_uuid(void) +{ + (void) Py_InitModule("e2fsprogs_uuid", _uuid_methods); +} diff --git a/contrib/spd_readdir.c b/contrib/spd_readdir.c new file mode 100644 index 0000000..8345fa1 --- /dev/null +++ b/contrib/spd_readdir.c @@ -0,0 +1,458 @@ +/* + * readdir accelerator + * + * (C) Copyright 2003, 2004, 2008 by Theodore Ts'o. + * + * 2008-06-08 Modified by Ross Boylan + * Added support for readdir_r and readdir64_r calls. Note + * this has not been tested on anything other than GNU/Linux i386, + * and that the regular readdir wrapper will take slightly more + * space than Ted's original since it now includes a lock. + * + * Compile using the command: + * + * gcc -o spd_readdir.so -shared -fpic spd_readdir.c -ldl + * + * Use it by setting the LD_PRELOAD environment variable: + * + * export LD_PRELOAD=/usr/local/sbin/spd_readdir.so + * + * %Begin-Header% + * This file may be redistributed under the terms of the GNU Public + * License. + * %End-Header% + * + */ + +#define ALLOC_STEPSIZE 100 +#define MAX_DIRSIZE 0 + +#define DEBUG +/* Util we autoconfiscate spd_readdir... */ +#define HAVE___SECURE_GETENV 1 +#define HAVE_PRCTL 1 +#define HAVE_SYS_PRCTL_H 1 + +#ifdef DEBUG +#define DEBUG_DIR(x) {if (do_debug) { x; }} +#else +#define DEBUG_DIR(x) +#endif + +#define _GNU_SOURCE +#define __USE_LARGEFILE64 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_SYS_PRCTL_H +#include +#else +#define PR_GET_DUMPABLE 3 +#endif +#include + +struct dirent_s { + unsigned long long d_ino; + long long d_off; + unsigned short int d_reclen; + unsigned char d_type; + char *d_name; +}; + +struct dir_s { + DIR *dir; + pthread_mutex_t lock; /* Mutex lock for this structure. */ + int num; + int max; + struct dirent_s *dp; + int pos; + int direct; + struct dirent ret_dir; + struct dirent64 ret_dir64; +}; + +static int (*real_closedir)(DIR *dir) = 0; +static DIR *(*real_opendir)(const char *name) = 0; +static DIR *(*real_fdopendir)(int fd) = 0; +static void *(*real_rewinddir)(DIR *dirp) = 0; +static struct dirent *(*real_readdir)(DIR *dir) = 0; +static int (*real_readdir_r)(DIR *dir, struct dirent *entry, + struct dirent **result) = 0; +static struct dirent64 *(*real_readdir64)(DIR *dir) = 0; +static int (*real_readdir64_r)(DIR *dir, struct dirent64 *entry, + struct dirent64 **result) = 0; +static off_t (*real_telldir)(DIR *dir) = 0; +static void (*real_seekdir)(DIR *dir, off_t offset) = 0; +static int (*real_dirfd)(DIR *dir) = 0; +static unsigned long max_dirsize = MAX_DIRSIZE; +static int num_open = 0; +#ifdef DEBUG +static int do_debug = 0; +#endif + +static char *safe_getenv(const char *arg) +{ + if ((getuid() != geteuid()) || (getgid() != getegid())) + return NULL; +#if HAVE_PRCTL + if (prctl(PR_GET_DUMPABLE, 0, 0, 0, 0) == 0) + return NULL; +#else +#if (defined(linux) && defined(SYS_prctl)) + if (syscall(SYS_prctl, PR_GET_DUMPABLE, 0, 0, 0, 0) == 0) + return NULL; +#endif +#endif + +#if HAVE___SECURE_GETENV + return __secure_getenv(arg); +#else + return getenv(arg); +#endif +} + +static void setup_ptr() +{ + char *cp; + + real_opendir = dlsym(RTLD_NEXT, "opendir"); + real_fdopendir = dlsym(RTLD_NEXT, "fdopendir"); + real_closedir = dlsym(RTLD_NEXT, "closedir"); + real_rewinddir = dlsym(RTLD_NEXT, "rewinddir"); + real_readdir = dlsym(RTLD_NEXT, "readdir"); + real_readdir_r = dlsym(RTLD_NEXT, "readdir_r"); + real_readdir64 = dlsym(RTLD_NEXT, "readdir64"); + real_readdir64_r = dlsym(RTLD_NEXT, "readdir64_r"); + real_telldir = dlsym(RTLD_NEXT, "telldir"); + real_seekdir = dlsym(RTLD_NEXT, "seekdir"); + real_dirfd = dlsym(RTLD_NEXT, "dirfd"); + if ((cp = safe_getenv("SPD_READDIR_MAX_SIZE")) != NULL) { + max_dirsize = atol(cp); + } +#ifdef DEBUG + if (safe_getenv("SPD_READDIR_DEBUG")) { + printf("initialized!\n"); + do_debug++; + } +#endif +} + +static void free_cached_dir(struct dir_s *dirstruct) +{ + int i; + + pthread_mutex_destroy(&(dirstruct->lock)); + + if (!dirstruct->dp) + return; + + for (i=0; i < dirstruct->num; i++) { + free(dirstruct->dp[i].d_name); + } + free(dirstruct->dp); + dirstruct->dp = 0; + dirstruct->max = dirstruct->num = 0; +} + +static int ino_cmp(const void *a, const void *b) +{ + const struct dirent_s *ds_a = (const struct dirent_s *) a; + const struct dirent_s *ds_b = (const struct dirent_s *) b; + ino_t i_a, i_b; + + i_a = ds_a->d_ino; + i_b = ds_b->d_ino; + + if (ds_a->d_name[0] == '.') { + if (ds_a->d_name[1] == 0) + i_a = 0; + else if ((ds_a->d_name[1] == '.') && (ds_a->d_name[2] == 0)) + i_a = 1; + } + if (ds_b->d_name[0] == '.') { + if (ds_b->d_name[1] == 0) + i_b = 0; + else if ((ds_b->d_name[1] == '.') && (ds_b->d_name[2] == 0)) + i_b = 1; + } + + return (i_a - i_b); +} + +static struct dir_s *alloc_dirstruct(DIR *dir) +{ + struct dir_s *dirstruct; + static pthread_mutexattr_t mutexattr; + mutexattr.__align = PTHREAD_MUTEX_RECURSIVE; + + dirstruct = malloc(sizeof(struct dir_s)); + if (dirstruct) + memset(dirstruct, 0, sizeof(struct dir_s)); + dirstruct->dir = dir; + pthread_mutex_init(&(dirstruct->lock), &mutexattr); + return dirstruct; +} + +static void cache_dirstruct(struct dir_s *dirstruct) +{ + struct dirent_s *ds, *dnew; + struct dirent64 *d; + + while ((d = (*real_readdir64)(dirstruct->dir)) != NULL) { + if (dirstruct->num >= dirstruct->max) { + dirstruct->max += ALLOC_STEPSIZE; + DEBUG_DIR(printf("Reallocating to size %d\n", + dirstruct->max)); + dnew = realloc(dirstruct->dp, + dirstruct->max * sizeof(struct dir_s)); + if (!dnew) + goto nomem; + dirstruct->dp = dnew; + } + ds = &dirstruct->dp[dirstruct->num++]; + ds->d_ino = d->d_ino; + ds->d_off = d->d_off; + ds->d_reclen = d->d_reclen; + ds->d_type = d->d_type; + if ((ds->d_name = malloc(strlen(d->d_name)+1)) == NULL) { + dirstruct->num--; + goto nomem; + } + strcpy(ds->d_name, d->d_name); + DEBUG_DIR(printf("readdir: %lu %s\n", + (unsigned long) d->d_ino, d->d_name)); + } + qsort(dirstruct->dp, dirstruct->num, sizeof(struct dirent_s), ino_cmp); + return; +nomem: + DEBUG_DIR(printf("No memory, backing off to direct readdir\n")); + free_cached_dir(dirstruct); + dirstruct->direct = 1; +} + +DIR *opendir(const char *name) +{ + DIR *dir; + struct dir_s *dirstruct; + struct stat st; + + if (!real_opendir) + setup_ptr(); + + DEBUG_DIR(printf("Opendir(%s) (%d open)\n", name, num_open++)); + dir = (*real_opendir)(name); + if (!dir) + return NULL; + + dirstruct = alloc_dirstruct(dir); + if (!dirstruct) { + (*real_closedir)(dir); + errno = -ENOMEM; + return NULL; + } + + if (max_dirsize && (stat(name, &st) == 0) && + (st.st_size > max_dirsize)) { + DEBUG_DIR(printf("Directory size %ld, using direct readdir\n", + st.st_size)); + dirstruct->direct = 1; + return (DIR *) dirstruct; + } + + cache_dirstruct(dirstruct); + return ((DIR *) dirstruct); +} + +DIR *fdopendir(int fd) +{ + DIR *dir; + struct dir_s *dirstruct; + struct stat st; + + if (!real_fdopendir) + setup_ptr(); + + DEBUG_DIR(printf("fdopendir(%d) (%d open)\n", fd, num_open++)); + dir = (*real_fdopendir)(fd); + if (!dir) + return NULL; + + dirstruct = alloc_dirstruct(dir); + if (!dirstruct) { + (*real_closedir)(dir); + errno = -ENOMEM; + return NULL; + } + + if (max_dirsize && (fstat(fd, &st) == 0) && + (st.st_size > max_dirsize)) { + DEBUG_DIR(printf("Directory size %ld, using direct readdir\n", + st.st_size)); + dirstruct->dir = dir; + dirstruct->direct = 1; + return (DIR *) dirstruct; + } + + cache_dirstruct(dirstruct); + return ((DIR *) dirstruct); +} + +int closedir(DIR *dir) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + + DEBUG_DIR(printf("Closedir (%d open)\n", --num_open)); + if (dirstruct->dir) + (*real_closedir)(dirstruct->dir); + + free_cached_dir(dirstruct); + free(dirstruct); + return 0; +} + +struct dirent *readdir(DIR *dir) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + struct dirent_s *ds; + + if (dirstruct->direct) + return (*real_readdir)(dirstruct->dir); + + if (dirstruct->pos >= dirstruct->num) + return NULL; + + ds = &dirstruct->dp[dirstruct->pos++]; + dirstruct->ret_dir.d_ino = ds->d_ino; + dirstruct->ret_dir.d_off = ds->d_off; + dirstruct->ret_dir.d_reclen = ds->d_reclen; + dirstruct->ret_dir.d_type = ds->d_type; + strncpy(dirstruct->ret_dir.d_name, ds->d_name, + sizeof(dirstruct->ret_dir.d_name)); + + return (&dirstruct->ret_dir); +} + +int readdir_r(DIR *dir, struct dirent *entry, struct dirent **result) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + struct dirent_s *ds; + + if (dirstruct->direct) + return (*real_readdir_r)(dirstruct->dir, entry, result); + + pthread_mutex_lock(&(dirstruct->lock)); + if (dirstruct->pos >= dirstruct->num) { + *result = NULL; + } else { + ds = &dirstruct->dp[dirstruct->pos++]; + entry->d_ino = ds->d_ino; + entry->d_off = ds->d_off; + entry->d_reclen = ds->d_reclen; + entry->d_type = ds->d_type; + strncpy(entry->d_name, ds->d_name, sizeof(entry->d_name)); + *result = entry; + } + pthread_mutex_unlock(&(dirstruct->lock)); + return 0; +} + +struct dirent64 *readdir64(DIR *dir) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + struct dirent_s *ds; + + if (dirstruct->direct) + return (*real_readdir64)(dirstruct->dir); + + if (dirstruct->pos >= dirstruct->num) + return NULL; + + ds = &dirstruct->dp[dirstruct->pos++]; + dirstruct->ret_dir64.d_ino = ds->d_ino; + dirstruct->ret_dir64.d_off = ds->d_off; + dirstruct->ret_dir64.d_reclen = ds->d_reclen; + dirstruct->ret_dir64.d_type = ds->d_type; + strncpy(dirstruct->ret_dir64.d_name, ds->d_name, + sizeof(dirstruct->ret_dir64.d_name)); + + return (&dirstruct->ret_dir64); +} + +int readdir64_r (DIR *__restrict dir, + struct dirent64 *__restrict entry, + struct dirent64 **__restrict result) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + struct dirent_s *ds; + + if (dirstruct->direct) + return (*real_readdir64_r)(dir, entry, result); + pthread_mutex_lock(&(dirstruct->lock)); + if (dirstruct->pos >= dirstruct->num) { + *result = NULL; + } else { + ds = &dirstruct->dp[dirstruct->pos++]; + entry->d_ino = ds->d_ino; + entry->d_off = ds->d_off; + entry->d_reclen = ds->d_reclen; + entry->d_type = ds->d_type; + strncpy(entry->d_name, ds->d_name, + sizeof(entry->d_name)); + *result = entry; + } + pthread_mutex_unlock(&(dirstruct->lock)); + return 0; +} + +off_t telldir(DIR *dir) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + + if (dirstruct->direct) + return (*real_telldir)(dirstruct->dir); + + return ((off_t) dirstruct->pos); +} + +void seekdir(DIR *dir, off_t offset) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + + if (dirstruct->direct) { + (*real_seekdir)(dirstruct->dir, offset); + return; + } + + dirstruct->pos = offset; +} + +void rewinddir(DIR *dir) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + + (*real_rewinddir)(dirstruct->dir); + if (dirstruct->direct) + return; + + pthread_mutex_lock(&(dirstruct->lock)); + dirstruct->pos = 0; + free_cached_dir(dirstruct); + cache_dirstruct(dirstruct); + pthread_mutex_unlock(&(dirstruct->lock)); +} + +int dirfd(DIR *dir) +{ + struct dir_s *dirstruct = (struct dir_s *) dir; + int fd = (*real_dirfd)(dirstruct->dir); + + DEBUG_DIR(printf("dirfd %d, %p\n", fd, real_dirfd)); + return fd; +} diff --git a/debian/attic/comerrg-dev.info b/debian/attic/comerrg-dev.info new file mode 100644 index 0000000..8bd344b --- /dev/null +++ b/debian/attic/comerrg-dev.info @@ -0,0 +1,4 @@ +DESCR="The Common Error Description library." +SECTION_MATCH="Development" +SECTION_NAME="Development" +FILE=com_err.info diff --git a/debian/attic/comerrg-dev.menu b/debian/attic/comerrg-dev.menu new file mode 100644 index 0000000..7dddab3 --- /dev/null +++ b/debian/attic/comerrg-dev.menu @@ -0,0 +1,7 @@ +?package(comerrg-dev):needs="dwww" section="Apps/Programming"\ + title="The com_err library" \ + longtitle="The Common Error Description library"\ + description="libcomerr is an attempt to present a common error-handling mechanism to \ + manipulate the most common form of error code in a fashion that does not \ + have the problems identified with mechanisms commonly in use." \ + command="/usr/doc/comerrg-dev/html-info/com_err_toc.html" diff --git a/debian/attic/e2fslibsg-dev.info b/debian/attic/e2fslibsg-dev.info new file mode 100644 index 0000000..e1be950 --- /dev/null +++ b/debian/attic/e2fslibsg-dev.info @@ -0,0 +1,4 @@ +DESCR="Library of routines to manipulate an ext2 filesystem." +SECTION_MATCH="Development" +SECTION_NAME="Development" +FILE=libext2fs.info diff --git a/debian/attic/e2fslibsg-dev.menu b/debian/attic/e2fslibsg-dev.menu new file mode 100644 index 0000000..7ace8c0 --- /dev/null +++ b/debian/attic/e2fslibsg-dev.menu @@ -0,0 +1,4 @@ +?package(e2fslibsg-dev):needs="dwww" section="Apps/Programming"\ + title="The ext2fs library." \ + longtitle="A library to handle low-level structures in an ext2 filesystem"\ + command="/usr/doc/e2fslibsg-dev/html-info/libext2fs_toc.html" diff --git a/debian/attic/libs/comerr2g.files b/debian/attic/libs/comerr2g.files new file mode 100644 index 0000000..4f1f552 --- /dev/null +++ b/debian/attic/libs/comerr2g.files @@ -0,0 +1,2 @@ +lib/libcom_err.so.?.* +lib/libcom_err.so.? diff --git a/debian/attic/libs/control b/debian/attic/libs/control new file mode 100644 index 0000000..4205120 --- /dev/null +++ b/debian/attic/libs/control @@ -0,0 +1,114 @@ +Source: e2fsprogs +Section: base +Priority: required +Maintainer: Yann Dirson +Standards-Version: 2.4.0.0 + +Package: e2fsprogs +Essential: yes +Depends: ${shlibs:Depends} +Conflicts: e2fsprogsg, dump (<< 0.4b4-4), quota (<< 1.55-8.1) +Architecture: any +Description: The EXT2 file system utilities. + EXT2 stands for "Extended Filesystem", version 2. It's the main + filesystem type used for hard disks on Debian and other Linux systems. + . + This package contains programs for creating, checking, and maintaining EXT2 + filesystems, and the generic `fsck' wrapper. + . + This release may break older versions of dump and quota. + +Package: comerr2g +Depends: ${shlibs:Depends} +Conflicts: e2fsprogs (<< 1.10-6), comerr2 +Architecture: any +Description: The Common Error Description library - shared libraries. + libcomerr is an attempt to present a common error-handling mechanism to + manipulate the most common form of error code in a fashion that does not + have the problems identified with mechanisms commonly in use. + . + It is mainly used by the EXT2-filesystem tools. + +Package: ss2g +Depends: ${shlibs:Depends} +Conflicts: e2fsprogs (<< 1.10-6), ss2 +Architecture: any +Description: "Sub-System" library for simple command-line interface parsing - shared libs + This package contains the shared libs to support command-line + interface parsers generated with the ssg-dev package. + . + It was originally inspired by the Multics SubSystem library. + +Package: e2fslibsg +Depends: ${shlibs:Depends} +Provides: ext2fs2g, e2p2g, uuid1g +Conflicts: e2fsprogs (<= 1.10-7) +Architecture: any +Description: The EXT2 file system shared libs. + EXT2 stands for "Extended Filesystem", version 2. It's the filesystem type + used for hard disks on Debian and other Linux systems. + . + This package contains shared libraries needed by the utility programs. + +Package: comerrg-dev +Section: devel +Priority: extra +Depends: ${libcdev:Depends}, comerr2g +Suggests: doc-base +Conflicts: e2fsprogs (<< 1.10-6), comerr-dev +Architecture: any +Description: The Common Error Description library - headers and static libraries. + libcomerr is an attempt to present a common error-handling mechanism to + manipulate the most common form of error code in a fashion that does not + have the problems identified with mechanisms commonly in use. + +Package: ssg-dev +Section: devel +Priority: extra +Depends: ${libcdev:Depends}, ss2g +Conflicts: e2fsprogs (<< 1.10-6), ss-dev +Architecture: any +Description: "Sub-System" library for simple command-line interface parsing - devel. files + This package includes a tool that parses a command table to generate + a simple command-line interface parser, the include files needed to + compile and use it, and the static libs. + . + It was originally inspired by the Multics SubSystem library. + +Package: e2fslibsg-dev +Section: devel +Priority: extra +Depends: ${libcdev:Depends}, e2fslibsg, comerrg-dev +Suggests: doc-base +Provides: ext2fsg-dev, e2pg-dev, uuidg-dev +Conflicts: e2fsprogs (<< 1.10-6), e2fslibs-dev +Architecture: any +Description: The headers and static libraries for ext2fs-aware tools-development. + EXT2FS stands for "Extended Filesystem", version 2. It's the filesystem + type used for hard disks on Debian and other Linux systems. + . + This package contains the headers and shared libraries needed to compile + ext2fs-aware programs. Only programmers that really manipulate + features specific to the ext2 filesystem will need this. Most + programmers will use the generic filesystem-independent interface + from libc. + . + It also contains dev files for 2 other libs (e2p and uuid) used by + the e2fsprogs, but which are not yet packaged all by themselves + because they lack documentation. They may also lack some support + files, by I can't really know until someone uses them... + . + libe2p is for user-level e2fsprogs commands. It's used by dumpe2fs, + chattr, and lsattr. Functions in libe2p typically have two + characteristics (a) don't require that block device containing the + filesystem be opened directly (functions in libext2fs do), and (b) + libe2p typically contains printf statements or parse user input, and so + have more internationalization issues. + . + libuuid generates and parses 128-bit universally unique id's (UUID's), + using a standard which is blessed by both Microsoft and DCE, and is + being proposed as an internet standard. See the internet-draft: + . + draft-leach-uuids-guids-01.txt + . + for more information. diff --git a/debian/attic/libs/e2fslibsg.files b/debian/attic/libs/e2fslibsg.files new file mode 100644 index 0000000..c777084 --- /dev/null +++ b/debian/attic/libs/e2fslibsg.files @@ -0,0 +1,3 @@ +lib/*.so.?.* +lib/*.so.? +usr/doc/e2fslibsg/* diff --git a/debian/attic/libs/rules b/debian/attic/libs/rules new file mode 100644 index 0000000..3cf3c8d --- /dev/null +++ b/debian/attic/libs/rules @@ -0,0 +1,182 @@ +#! /usr/bin/make -f +# -*- makefile -*- +# +# Invoke each target with `./debian/rules '. All targets should be +# invoked with the package root as the current directory. +# +# The `binary' target must be run as root, as it needs to install files with +# specific ownerships. + +# Uncomment this to turn on verbose mode. +export DH_VERBOSE=1 + +package = e2fsprogs +ARCH = $(shell dpkg --print-architecture) + +# find the version for the main package, from changelog file +MAIN_VERSION = $(shell head -1 debian/changelog | cut '-d ' -f 2 | sed 's/[()]//g') +# find versions for libraries going into their own packages, from their Makefile.in's +COMERR_VERSION = $(shell grep ELF_VERSION lib/et/Makefile.in | cut '-d ' -f3) +COMERR_MAJOR = $(word 1,$(subst ., ,$(COMERR_VERSION))) +SS_VERSION = $(shell grep ELF_VERSION lib/ss/Makefile.in | cut '-d ' -f3) +SS_MAJOR = $(word 1,$(subst ., ,$(SS_VERSION))) + +topdir = $(shell pwd) +debdir = $(topdir)/debian +maindir = $(debdir)/tmp +builddir = $(topdir)/builddir +docdir = $(maindir)/usr/doc/$(package) + +SUBPACKAGES_DIRS = tmp e2fslibsg e2fslibsg-dev comerr$(COMERR_MAJOR)g comerrg-dev \ + ss$(SS_MAJOR)g ssg-dev + +installdoc = install -m 644 +installbin = install -m 755 + +ifeq ($(ARCH),alpha) +CCOPTS = -g -O2 -fsigned-char -DHAVE_NETINET_IN_H +LIBC-DEV = libc6.1-dev +else +CCOPTS = -g -O2 -fsigned-char +LIBC-DEV = libc6-dev +endif + +build: configured + dh_testdir + make -C $(builddir) + make -C $(builddir)/misc findsuper + cd doc && texi2html -split_chapter libext2fs.texinfo + cd lib/et && texi2html -split_chapter -expandinfo com_err.texinfo + touch build + +configured: + dh_testdir + mkdir -p $(builddir) + cd $(builddir) && CFLAGS="$(CFLAGS)" \ + ../configure --enable-elf-shlibs --enable-dynamic-e2fsck \ + --with-ccopts="$(CCOPTS)" + touch configured + +clean: + dh_testdir + rm -f build configured install + -make -C $(builddir) -i distclean + rm -rf $(builddir) + rm -f doc/libext2fs_*.html lib/et/com_err_*.html + dh_clean + +binary-indep: build + # no arch-independant debs. + +binary-arch: build + dh_testversion 0.56 # == 0.53 + fixes + dh_testdir -a + dh_testroot -a + dh_clean -a -k + dh_installdirs -a + + make -C $(builddir) install DESTDIR=$(maindir) + install -m 755 $(builddir)/misc/findsuper $(maindir)/sbin + # static libs and .h files + make -C $(builddir) install-libs DESTDIR=$(maindir) + install -m 644 $(builddir)/lib/ss/ss_err.h $(maindir)/usr/include/ss/ + +# fix and install compile_et script + sed s%$(topdir)/lib/et%/usr/share/comerr% \ + <$(builddir)/lib/et/compile_et \ + >$(debdir)/comerrg-dev/usr/bin/compile_et + chmod 755 $(debdir)/comerrg-dev/usr/bin/compile_et +# add support files for compile_et + install -m 644 lib/et/et_c.awk lib/et/et_h.awk \ + $(debdir)/comerrg-dev/usr/share/comerr/ + +# fix and install mk_cmds script + sed s%$(topdir)/lib/ss%/usr/share/ss% \ + <$(builddir)/lib/ss/mk_cmds \ + >$(debdir)/ssg-dev/usr/bin/mk_cmds + chmod 755 $(debdir)/ssg-dev/usr/bin/mk_cmds +# add support files for mk_cmds + install -m 644 lib/ss/ct_c.awk lib/ss/ct_c.sed \ + $(debdir)/ssg-dev/usr/share/ss/ + +# docs + mkdir -p $(debdir)/e2fslibsg-dev/usr/doc/e2fslibsg + ln -sf e2fslibsg $(debdir)/e2fslibsg-dev/usr/doc/e2fslibsg-dev + mkdir -p $(maindir)/usr/doc/e2fslibsg + ln -sf e2fslibsg $(maindir)/usr/doc/e2fsprogs + mkdir -p $(debdir)/comerrg-dev/usr/doc/comerr$(COMERR_MAJOR)g + ln -sf comerr$(COMERR_MAJOR)g $(debdir)/comerrg-dev/usr/doc/comerrg-dev + mkdir -p $(debdir)/ssg-dev/usr/doc/ss$(SS_MAJOR)g + ln -sf ss$(SS_MAJOR)g $(debdir)/ssg-dev/usr/doc/ssg-dev + dh_installdocs -a + + # HTML docs + install -d $(debdir)/e2fslibsg-dev/usr/doc/e2fslibsg-dev/html-info/ + install -p $(topdir)/doc/libext2fs_*.html \ + $(debdir)/e2fslibsg-dev/usr/doc/e2fslibsg-dev/html-info/ + install -d $(debdir)/comerrg-dev/usr/doc/comerrg-dev/html-info/ + install -p $(topdir)/lib/et/com_err_*.html \ + $(debdir)/comerrg-dev/usr/doc/comerrg-dev/html-info/ + + # texinfo docs + install -p $(topdir)/doc/libext2fs.texinfo \ + $(debdir)/e2fslibsg-dev/usr/doc/e2fslibsg/libext2fs.texi + install -p $(topdir)/lib/et/com_err.texinfo \ + $(debdir)/comerrg-dev/usr/doc/comerr2g/com_err.texi + + # doc-base support + install -d $(debdir)/e2fslibsg-dev/usr/share/doc-base/ + install -p -m 644 $(debdir)/libext2fs.docbase \ + $(debdir)/e2fslibsg-dev/usr/share/doc-base/libext2fs + install -d $(debdir)/comerrg-dev/usr/share/doc-base/ + install -p -m 644 $(debdir)/com_err.docbase \ + $(debdir)/comerrg-dev/usr/share/doc-base/com_err + + # examples + dh_installexamples -a + + # dh_installmanpages still makes a mess as of 0.54 (see below dh_movefiles) + install -p $(topdir)/lib/et/compile_et.1 $(maindir)/usr/man/man1/ + install -d $(maindir)/usr/man/man3/ + install -p $(topdir)/lib/et/com_err.3 $(maindir)/usr/man/man3/ + ln -s e2fsck.8 $(maindir)/usr/man/man8/fsck.ext2.8 + ln -s mke2fs.8 $(maindir)/usr/man/man8/mkfs.ext2.8 + + dh_movefiles -a + # cleanup empty dirs + cd $(maindir) && rmdir usr/man/cat? bin lib usr/include/* usr/include \ + usr/info usr/lib usr/man/man3 usr/doc/e2fslibsg + +# dh_installmenu -a + + # broken + useless in 0.52 + # dh_installmanpages -a + + dh_undocumented -a + + dh_installchangelogs -pe2fslibsg -pcomerr$(COMERR_MAJOR)g -pss$(SS_MAJOR)g ChangeLog + + dh_strip -a + dh_compress -a + dh_fixperms -a + + echo "libcdev:Depends=$(LIBC-DEV)" > debian/comerrg-dev.substvars + echo "libcdev:Depends=$(LIBC-DEV)" > debian/ssg-dev.substvars + echo "libcdev:Depends=$(LIBC-DEV)" > debian/e2fslibsg-dev.substvars + + dh_installdeb -a + LD_LIBRARY_PATH=$(builddir)/lib:/lib:/usr/lib \ + dh_shlibdeps -a + dh_gencontrol -u '-isp' -pe2fsprogs -pe2fslibsg -pe2fslibsg-dev + dh_gencontrol -u '-isp' -pcomerr$(COMERR_MAJOR)g -pcomerrg-dev \ + -u '-v$(COMERR_VERSION)-$(MAIN_VERSION)' + dh_gencontrol -u '-isp' -pss$(SS_MAJOR)g -pssg-dev \ + -u '-v$(SS_VERSION)-$(MAIN_VERSION)' + dh_makeshlibs -a +# dh_du -a + dh_md5sums -a + dh_builddeb -a + +binary: binary-indep binary-arch + +.PHONY: binary binary-arch binary-indep clean checkroot diff --git a/debian/attic/libs/ss2g.files b/debian/attic/libs/ss2g.files new file mode 100644 index 0000000..5b717cb --- /dev/null +++ b/debian/attic/libs/ss2g.files @@ -0,0 +1,2 @@ +lib/libss.so.?.* +lib/libss.so.? diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..261dd1a --- /dev/null +++ b/debian/changelog @@ -0,0 +1,3974 @@ +e2fsprogs (1.43.4-1) unstable; urgency=medium + + * New upstream version + * Fix e2fsck to require that the system.data extended attribute is + always present even for files smaller than 60 bytes, to be + consistent with the kernel + * Drop the hard links for mkfs.ext4dev and fsck.ext4dev + * Clarify/update various man pages (Closes: #852726) + * Clarify the default for the "proceed?" question printed by mke2fs + and tune2fs. (Closes: #852727) + * Fix various Coverity warnings and other memory leaks in fuse2fs and + extended attribute manipulation functions. + * Add Finnish and Malay translations + * Update Chinese, Czech, Polish, Serbian, and Spanish translations + (Closes: #774379) + + -- Theodore Y. Ts'o Tue, 31 Jan 2017 17:31:52 -0500 + +e2fsprogs (1.43.4~WIP.2017.01.30-1) unstable; urgency=medium + + * Fix a bug which was causing mke2fs -d and fuse2fs to improperly + handle Posix ACL's. + * Fix a bug which could cause mke2fs -d to fail if there is an + zero-length file in source directory tree. + * Debugfs will now display project quota information. + * Debugfs has a more friendly and powerful to print and set extended + attributes. + * Fix a bug in mke2fs where I/O errors weren't getting properly + reported to the user. + * Fix a bug in resize2fs when operating on very large file systems + which have a block size different from the VM page size. + * If the reported device size is absurdly large, mke2fs will now + report an error instead looping forever or crashing. + * Replace a test file in the sources with an updated version which has + a DFSG-compliant copyright license. This was making lawyers + nervous, even though the file was only used in regression tests and + was never used when building any binaries. (Closes: #840733) + + -- Theodore Y. Ts'o Mon, 30 Jan 2017 22:14:07 -0500 + +e2fsprogs (1.43.3-1) unstable; urgency=medium + + * Fix e2fsck's handling of timestamps on 32-bit system (Closes: #836559) + * E2fsck will sanity check and repair the extra isize fields in inodes + and the superblock. + * Fix sparc64 crashes when dereferencing unaligned integers in journal + blocks when metdata checksums are enabled. + + -- Theodore Y. Ts'o Sun, 04 Sep 2016 20:41:21 -0400 + +e2fsprogs (1.43.2-2) unstable; urgency=medium + + * Fix build reproducibility problems + * Don't hide the linker flags for e2fsck.static + + -- Theodore Y. Ts'o Thu, 01 Sep 2016 23:30:55 -0400 + +e2fsprogs (1.43.2-1) unstable; urgency=medium + + * Change the default journal size to be larger for file systems larger + than 128 GB to improve performance on metadata-heavy workloads + * Clarify tune2fs's message when the user needs to run e2fsck + (Closes: #828022) + * Fix an alignment bug in e2fsck which caused sparc64 architectures to + crash when replaying the journal on file systems with a 64-bit block + number + * Fix a typo in debugfs when printing out the dtime field on file + systems with an extended timestamp + * Fix the logic in e2fsck which decides when to repair legacy negative + timestamp encodings. + * Add a command to debugfs to copy the inode structure from one inode + to another + * Fix resize2fs so it will not crash if there is an extended + attribute block but it doesn't need to migate any blocks during + an off-line resize + * Fix a crash when mke2fs or debugfs tries to copy in a directory + hierarchy containing an empty directory + * Fix a bug in e2fsck caused by a power failure during e2fsck's journal + replay could leave the file system in a state where if the file + system is mounted without doing a full e2fsck scan, the file system + could get corrupted + * Fix big endian bugs in the e2undo program + * Fix debugfs's logdump so command so it can correctly handle journals + which are larger than 2GB + * Add new translations: Hugarian and Serbian + * Update the Catalan, Chinese, Danish, Dutch, French, German, Polish, + Swedish, Ukrainian translations + + -- Theodore Y. Ts'o Thu, 01 Sep 2016 00:55:13 -0400 + +e2fsprogs (1.43.1-1) unstable; urgency=medium + + * New upstream version + * Fix the Direct I/O fallback code in the Unix I/O manager so it + implements read-modify-write correctly. + * The mke2fs program will now warn if the user specifies a label which + is too long. (Closes: #791630) + * Clean up various man pages (Closes: #766379, #761144, #770750, + #428361, #766127) + * Fix bug so that debugfs's rdump command works on the root directory + (Closes: #766125) + * Fix various Debian packaging issues (Closes: #825868) + * Build fully security hardened binaries + + -- Theodore Y. Ts'o Tue, 07 Jun 2016 23:09:55 -0400 + +e2fsprogs (1.43-3) unstable; urgency=medium + + * Fix various debian packaging nits + * Fix spelling mistakes in the copyright files + * Fix various spelling mistakes in man pages + * Fix project quota bugs in e2fsck and mke2fs + * Build binaries with hardening support + * Improve e2fsck messages when the journal superblock is corrupt and + the user declines to fix the journal. (Closes: #768162) + * Fix debugfs's handling of "set_bg checksum calc" on 64-bit file + systems. + * Simplify the debian rules file + + -- Theodore Y. Ts'o Wed, 25 May 2016 00:51:33 -0400 + +e2fsprogs (1.43-2) unstable; urgency=medium + + * Update watch file to check for the GPG signatures + * Use dh_update_autotools_control to update config.{guess,sub} + automatically when building the package. + * Only try to run update-initramfs if it exists + * Transition to dbgsym packages + + -- Theodore Y. Ts'o Fri, 20 May 2016 14:07:40 -0400 + +e2fsprogs (1.43-1) unstable; urgency=medium + + * New upstream version + * Fix or improve offset support in mke2fs, e2undo, and libext2fs + * Update debian policy version to 3.9.8 + + -- Theodore Y. Ts'o Tue, 17 May 2016 01:04:28 -0400 + +e2fsprogs (1.43~WIP.2016.03.15-2) sid; urgency=low + + * Fix FTBFS on big-endian systems + + -- Theodore Y. Ts'o Thu, 17 Mar 2016 22:55:52 -0400 + +e2fsprogs (1.43~WIP.2016.05.12-1) unstable; urgency=medium + + * New upstream version + * Clean up various man pages and usage messages + * Fix up gcc and Coverity warnings + * Stop building static binaries using dietlibc + * Fix potential out-of-boundary memory access in resize2fs + * Fix sparse_super2 bugs in mke2fs and resize2fs + * The mke2fs program will now support multiple -O options + * The e2image program now ignores checksum error so that debugging + snapshots of a file system can be taken of a broken file system + * E2fsck now more cleanly handles checksum errors while replaying the + journal + * Fix e2fsck to not try to set a UUID if the metadata_csum feature is + enabled since this will break the checksums + * Fix e2image so progress information won't get leaked to stdout + * Fix bugs in "mke2fs -E offset=NNNN" (Closes: #803629) + * Fix Hurd portability issues (Closes: #822576) + * Update initramfs in e2fsprogs's postinst script so the initial + ramdisk gets the updated e2fsprogs binaries (Closes: #804237) + * Work around texi2dvi bug which can cause build failures (Closes: #822227) + * E2fsck now prints "REBOOT SYSTEM" instead of "REBOOT LINUX" to + assuage the sensibilities of Hurd users (Closes: #769838) + + -- Theodore Y. Ts'o Thu, 12 May 2016 00:18:45 -0400 + +e2fsprogs (1.43~WIP.2016.03.15-1) unstable; urgency=low + + * New upstream release + * Fix resize2fs bug that could leave block allocation bitmaps + uninitialized + * The tune2fs program will ask the user for confirmation before + starting dangerous operations if the terminal is available, and it + will replay the journal if necessary + * Fix a bug which in rare cases would cause e2fsck -fD to corrupt an + extent-mapped directory. + * E2fsck will now check for extent mapped inodes with no extent header + and clear them if found + * E2fsck now checks to make sure the extended attribute header doesn't + result in the xattr extending beyond the bounds of the inode + * Teach mke2fs to parse a human-readable argument for -i option + * Teach mke2fs to automatically handle creating file systems > 500T by + automatically enable the meta_bg feature + * Mke2fs will now prompt for user verification before rewriting a file + system's superblock using the -S option + * Mke2fs no longer complains if the user tries to create a file system + using the entire block device (e.g., without using a partition). + The minor number convention is not used by all block devices, and + it's quite normal in some circumstances to create a file system + on /dev/sdc instead of /dev/sdc1 + * Debugfs now can properly display and set extended timestamps + * Add an ext2/3/4 FUSE server + * Fix an "mke2fs -d" bug which could create inodes with invalid + extended attribute blocks + * Fix miscellaneous file encryption bugs + * Fix miscellaneous MMP bugs in debugfs + * The e2fsck program will no longer update the quota inodes when it is + interrupted + * The filefrag program now accounts for holes in sparse files created + by the file punch operation as an expected/optimal mapping + * Clean up gcc/clang warnings + * Add support for the checksum seed feature + * Add support for the project quota feature + * Add fallocate support to libext2fs and to debugfs + * Clean up various man pages (Closes: #798425) + * Update debian policy compliance to 3.9.7 + + -- Theodore Y. Ts'o Tue, 15 Mar 2016 01:34:14 -0400 + +e2fsprogs (1.43~WIP.2015.05.18-1) unstable; urgency=low + + * Merge in updates from the maint branch (changes from 1.42.13) + * Add support for file encryption feature + * Mke2fs will now create file systems with metadata_csum and 64bit + enabled by default. + * The resize2fs command can now convert file systems between 64-bit + and 32-bit mode. + * The new undo file format is much faster/efficent than before + * E2fsck now has readahead support to speed up its behavior on RAID + arrays. + * E2fsck can now rebuild/optimize inode extent trees + + -- Theodore Y. Ts'o Mon, 18 May 2015 01:47:43 -0400 + +e2fsprogs (1.42.13-1) unstable; urgency=low + + * New upstream version + * NMU acknowledge (Closes: #778948) + * Fixed a bug which could cause e2fsck to corrupt Hurd file systems. + (Closes: #760275) + * Fixed a deadlock which occurs when using systemd and e2fsck.conf's + logging feature. (Closes: #775234) + * Fixed a bug which could cause programs using libext2's inode table + scanning functions from crashing on certain corrupted file systems. + (Closes: #773795) + * Fixed dumpe2fs so it won't crash if the user doesn't specify a block + device (file system). (Closes: #764293) + * Fixed e2fsck so if it notices unexpected HTREE blocks in pass 2, it + will report the correct directory inode containing the inconsistency. + * If e2fsck fails to grow the dir_info structure due realloc(3) not + having enough memory, it will now fail with explanatory message + instead of staggering on failing with a confusing internal error + messages. + * The tune2fs program will zero out the superblock journal backup + information when removing a journal from a file system. + * The mke2fs program now enables the large_file feature by default. + * Fixed a bug which could cause badblocks to crash if there are millions + and millions of bad blocks. + * Fixed some use-after-free bug in resize2fs and e2fsck. + * Fixed some bigendian bugs that had crept into both indirect and extent + handling inside libext2fs. + * Updated/fixed various man pages. + * Update Esperanto, German, and Spanish translations. Added Danish + translation. + + -- Theodore Y. Ts'o Sun, 17 May 2015 20:38:27 -0400 + +e2fsprogs (1.43~WIP-2015-03-29-1) unstable; urgency=low + + * Merge in updates from the maint branch (changes from 1.42.12-1) + * Add support for inline directories + * Add support for the jbd2 checksum v3 format + * New dumpe2fs format + * Add support for file encryption feature + + -- Theodore Y. Ts'o Sun, 14 Dec 2014 22:49:03 -0500 + +e2fsprogs (1.42.12-1.1) unstable; urgency=high + + * Non-maintainer upload by the Security Team. + * Fix CVE-2015-1572: incomplete fix for CVE-2015-0247 (closes: #778948). + + -- Michael Gilbert Sun, 22 Feb 2015 01:50:57 +0000 + +e2fsprogs (1.42.12-1) unstable; urgency=low + + * New upstream version + * Fix various e2fsck bugs when trying to repair bigalloc file systems. + * E2fsck can now repair a file system with an overly large + s_first_meta_bg field, which had previously caused all e2fsprogs + programs to crash when trying to open such a file system. + * Fix e2fsck so that it can correctly fix a number of rare file system + corruptions that were discovered when using a file system fuzzer. + * Fix e2fsck so it does not try to write back block group descriptors + if they have not been modified. + * The mke2fs program will now place metadata blocks in the last + flex_bg so they are contiguous. This reduces free space + fragmentation in a freshly created file system, as well as allowing + mke2fs commands which request extremely large flex_bg size to succeed. + * Mke2fs now creates hugefiles more efficiently (with fewer extent + tree blocks). + * Fix a 32/64-bit overflow bug that could cause resize2fs to loop + forever. + * Reduce the memory consumption of resize2fs for very large file + systems. + * Fix a bug that could cause resize2fs to create a corrupted file + system when shrinking a very large file system (typically > 16TB) + that had been previously grown using resize2fs. (Closes: #756922) + * Fix tune2fs updating UUID's when manipulating file systems with + external journals (both the file system and journal UUID). + * Fix tune2fs so it can remove an external journal for file systems + with a 1k block size. + * Add a new debugfs command, "inode_dump", which prints the inode in + hex and ASCII format. + * The debugfs command "set_inode_field" will now automatically + allocate blocks for indirect blocks and extent tree blocks. + * Fix debugfs's "set_inode_field" so can properly handle + "block[IND|DIND|TIND]". + * The debugfs "rdump" command will now take multiple source arguments. + * Fix debugfs's argument parsing for the freefrag command. + * Fixed a double close(2) bug in "rdump" and "rdump -p". + * Fix filefrag to properly handle using the FIBMAP ioctl (with -B). + * e4defrag will now defrag backwards-allocated files + * Clarified messages that were confusing users in debugfs, e2fsck, + mke2fs, and resize2fs (Closes: #758029, #757543, #757544) + * Dumpe2fs will now complain if extra arguments are given to it. + (Closes: #758074) + * Update/clarify various man pages (Closes: #726760) + * Update Czech, Dutch, French, Polish, Spanish, Sweedish, Ukrainian, + and Vietnamese translations + + -- Theodore Y. Ts'o Fri, 29 Aug 2014 08:50:48 -0400 + +e2fsprogs (1.42.11-2) unstable; urgency=low + + * Don't try to build lib/ext2fs/tst_ext2fs unless running "make + check"; this fixes a MIPS FTBFS problem because mips has a special + no-pics build needed for bootloaders where we only build libext2fs + but not libss or other libraries (Closes: #754605) + * Update French translation + + -- Theodore Y. Ts'o Sun, 13 Jul 2014 16:18:27 -0400 + +e2fsprogs (1.42.11-1) unstable; urgency=medium + + * New upstream version + * NMU acknowledge (Closes: #752107) + * mke2fs can now create hugefiles which are aligned to the beginning + of the disk (instead of relative to the beginning of the partition), + controlled via a mke2fs.conf configuration parameter. + * Fix a bug which caused e2fsck to abort a journal replay on a file + system with bigalloc enabled. (Closes: #744953) + * Fix mke2fs so it more correctly handles large flex_bg counts + * Mke2fs will check the kernel version number and not just the sysfs + feature flag to determine whether it is safe to enable lazy + inode table initialization, so it won't get faked out if the ext4 is + compiled as a mdoule which hasn't happened to be loaded yet. + * E2fsck will now automatically fix a last mount time or last write time + which is in the future in preen mode. + * Mke2fs will now check the file system revision number requested by the + command line, and reject it if it is too large. + * If filefrag runs into an error, it will continue processing the rest + of the files specified on thec ommand line, but then exit with an + error code. + * Filefrag now prints some additional new flags (such as + FIEMAP_EXTENT_ENCODED), and print unknown flags as hex values. + * Fixed support in filefrag for files with > 2**32 blocks on 32-bit + platforms. + * Fixed a file descriptor leak in debugfs when copying files. + * Add Esparanto and Ukrainian translations, and update Czech, Dutch, + French, German, Italian, Polish, Sweedish, and Vietnamese translations. + * Fixed cross-compilation support. (Closes: #753375) + * Update/fix various man pages + + -- Theodore Y. Ts'o Wed, 9 Jul 2014 23:43:27 -0400 + +e2fsprogs (1.42.10-1.1) unstable; urgency=medium + + * Non-maintainer upload. + * Add patch from upstream git that fixes creating filesystems in files + larger than 2GB on 32 bit architectures (Closes: #752107) + + -- Hilko Bengen Sat, 21 Jun 2014 12:57:25 +0200 + +e2fsprogs (1.43~WIP-2014-02-04-1) unstable; urgency=low + + * Merge in updates from the maint branch (changes from 1.42.10-1) + + -- Theodore Y. Ts'o Wed, 04 Feb 2014 23:31:56 -0500 + +e2fsprogs (1.42.10-1) unstable; urgency=medium + + * New upstream version + * The mke2fs program no longer requires a force (-F) option when + when creating a file system in a regular file, since this is a very + common use case when managing virtual machine images + * The mke2fs program will now ask for confirmation before wiping out a + pre-existing file system, partition label, or physical volume + * Fix e2fsck so that it properly handles an inconsistent quota inode. + Previously the quota inode could be completely corrupted, and + missing quota records could be not noticed + * Fix mke2fs so if packed metadata blocks are enabled that the block + group checksum are set correctly + * Debugfs has new commands to allow the quota inode to be queried directly + * Tune2fs will allow removal of dirty journal with two "-f" options + (Closes: #559301) + * Fixed some off-line resize2fs bugs when relocating metadata blocks + when growing or shrinking bigalloc file systems + * Fixed resize2fs's calculation of the minimum required file system + size. This allows resize2fs -M to shrink the file system more + aggressively + * Fixed resize2fs to properly handle shrinking a very large and empty + file system to a very very small size + * Fixed e4defrag to work with 64-bit and bigalloc file systems + * Fixed e2fsck to not issue a large number of very scary (but + harmless) corruption messages when checking very large file systems + when the file system has more inodes than the number of seconds + since January 1, 1970. + * E2fsck will now check the whole file system if file system problems + are detected durings its initial "pass 0" sanity check + * Filefrag now prints the "shared extent" flag which is used by some + file systems such as btrfs + * The mke2fs program would previously correctly omit the resize_inode + feature when creating a file system > 16TB when the fs size was + determined automatically. It will now also do the right thing when + the user explicitly specifies the file system size. + * The message printed by logsave is now much less scary (Closes: #468821) + * Fix spelling typo in the package descriptions + * Update Czech, Dutch, French, German, Polish, Spanish, Sweedish, and + Vietnamese translations (Closes: #703048) + * Update/fix various man pages + * Fix debian/rules compatibility problem with GNU make 4.0 + + -- Theodore Y. Ts'o Sun, 18 May 2014 22:54:38 -0400 + +e2fsprogs (1.42.9-3) unstable; urgency=medium + + * Add the ability for mke2fs to create hugefiles + * Add support for the sparse_super2 compat feature + * Mke2fs can now force all of the metadata blocks to be at the + beginning of the file system + * Fix loopback mount detection (Closes: #497984) + * Add support to mke2fs to create a file system at an offset + (Closes: #417385) + * Mention badblocks in the package description (Closes: #718725) + * Update/fix various man pages (Closes: #719184, #719189) + * Improve e2fsck's "superblock corrupt" message (Closes: #719185) + * Miscellaneous Coverity clean ups + + -- Theodore Y. Ts'o Tue, 04 Feb 2014 22:17:22 -0500 + +e2fsprogs (1.42.9-2) unstable; urgency=low + + * Fix lintian warning: debian-changelog-has-wrong-weekday + * Fix lintian warning: non-standard-dir-perm by using dh_strip's + --dbg-package option instead of manually managing the debug files + * Fix printf type format mismatch in e2image + * Improved debugfs's error reporting when parsing block numbers + * Use consistent configure options across the multiple e2fsprogs + builds; this means that e2fsck.static will now use the blkid library + shipped with util-linux, instead of the internal one shipped with + the e2fsprogs sources. + + -- Theodore Y. Ts'o Mon, 30 Dec 2013 16:56:50 -0500 + +e2fsprogs (1.42.9-1) unstable; urgency=low + + * New upstream version + * NMU ack (Closes: #698879) + * Fix cross-build support (Closes: #721365) + * mke2fs will detect an attempt to create a file system on a + loop-mounted image file + * Fixed a large number of bugs in resize2fs, e2fsck, debugfs, to + handle bigalloc and 64-bit file systems. + * Tune2fs will no longer allow changing the uuid on a mounted file + system with the uninit_bg feature enabled. + * E2fsck will properly allocate a new extent tree block in the rare + case where one is needed when rehashing an extent-mapped directory. + * Mke2fs wil now properly set the LARGE_FILE feature when creating a + journal > 2GB. + * Debugfs will now correctly handle free a range of inodes using the + freei command. + * E2fsck will no longer complain if an external journal was exactly + 2**32 blocks. + * E2fsck will not longer try to add a missing lost+found directory + when run in read-only mode. + * Fixed some buffer overrun bugs when creating standard e2image files + * Mke2fs will not try to set both the meta_bg and resize_inode feature + when the extended option "-E resize=NNN" is specified by the user. + * Dumpe2fs will no longer abort when trying to print the journal + information from an e2image-created image file. + * Debugfs's "write" command can now create a sparse files + * Debugfs can now support a command line which is up to 8k long + * E2image will refuse to create a raw or qcomw image using a mounted + file system unless the -f option is given. + * E2image has been made more useful for efficiently copying file + systems using the -ra options. New options to help with this use + case that were added: -o, -O, -p, and -c. + * Fixed a regression introduced in 1.42.8 which would cause e2fsck to + erroneously report uninitialized extents past i_size to be invalid. + * Fixed cases where resize2fs could corrupt a file system, especially + when shrinking a file system. (Closes: #660793) + * Fixed resize2fs and e2fsck to not crash when operating on a file + system with the MMP feature enabled. + * Fixed debugfs's write command to properly create a zero-length file + (instead of creating an invalid inode). + * Fixed e2fsck to not crash when trying to delete an invalid + extent-mapped symlink. + * Improved debugfs's help texts + * Fixed a potential integer overflow problem in e2freefrag + (Closes: #718205) + * The config.guess and config.sub files have been updated to the + latest to help with the ppcle port. (Closes: #732076) + * Updated/fixed various man pages. (Closes: #586218, #669730, + #698076, #731329) + + -- Theodore Y. Ts'o Sat, 28 Dec 2013 23:18:36 -0500 + +e2fsprogs (1.42.8-1) unstable; urgency=low + + * New upstream version + * Work around Debian Bug #712530 (Closes: #708307) + * Fix e2fsck so it can check a read-only root file system with an + external journal. (Closes: #707030) + * Fix off-line resizing of file systems with flex_bg && !resize_inode + (Closes: #696746) + * Change mke2fs so that it does not set the root directory to the real + uid/gid of the mke2fs process. Add the extended option root_owner to + override this behavior. + * If an invalid journal size is given to mke2fs, it will now complain + and exit sooner. + * Fix resize2fs when shrinking file systems to make sure that bitmap + blocks aren't left outside the bounds of the shrunken file system. + This could happen with flex_bg file systems that were grown using + the old online resizing algorithm. + * E2fsck will now detect and repair corrupted extent trees which contain + invalid extents at the end of the extent tree leaf block. + * E2fsck will now longer complain about zero length extended attribute values. + * Fix a regression introduced in e2fsprogs v1.42 which caused e2image -s + to crash. + * Add safety check so tune2fs will not attempt to set the inode size to + be larger than the block size. + * Enhance chattr to allow clearing the extent flag if the kernel allows it + * Fix e2image with large (> 32-bit) file systems (Closes: #703067) + * Mke2fs will not give warnings about the bigalloc and quota options in + quiet mode. + * Debugfs was erroneously giving spurious error messages for certain + extent_inode subcommands which take arguments (split_node, + replace_node, and insert_node). This has been fixed. + * Fix the parsing of the 's' (sectors) in parse_num_blocks2, which among + other programs is used by mke2fs. + * Fix texinfo incompatibilities (Closes: #712365) + * Updated/fixed various man pages (Closes: #712429, #712430, #707609) + * Update German translation + + -- Theodore Y. Ts'o Thu, 20 Jun 2013 23:09:25 -0500 + +e2fsprogs (1.42.7-1) unstable; urgency=low + + * New upstream version + * Add warning indicating that the quota and bigalloc features are + still under development. + * Added new options to filefrag to be consistent with the version from + Lustre + * Optimized e2fsck's CPU utilization + * Fixed e2fsck so it detects and fixes inconsistencies in the interior + nodes of an inode's extent tree + * Fixed a potential memory corruption failure in e2fsck's error path if + the call to ext2fs_open2() fails. + * Fixed e2fsck if its logging function is enabled in e2fsck.conf, and + the resulting file name for the log file is longer than 100 bytes, + that it properly handles this situation instead of crashing. + * E2fsck will now report the amount of memory that it attempted to + allocate when a memory allocation request fails, to make it easier to + track down the problem. + * Fixed a bug in resize2fs which could cause severe file system + corruption when growing an ext4 file system which was formatted with + fewer-than-normal reserved gdt blocks + * Fixed resize2fs to be able to handle off-line resizes of file + systems with the flex_bg feature and without any reserved gdt + blocks or if the file system did not have the resize_inode feature + * Further optimize resize2fs so it doesn't use quite as much CPU when + resizing very large file systems. + * Fixed 32-bit overflow bugs which could cause resize2fs to fail and + possibly corrupt the file system while resizing 64-bit file systems. + * Fixed a big which could cause resize2fs to corrupt bigalloc file systems. + * Fix a crash while mke2fs is parsing "-E resize=NNN" with the 64bit + file system feature enabled + * Added better error checking to mke2fs to check for invalid + parameters when creating bigalloc file system. + * When creating bigalloc filesystems, the -g option to mke2fs will now + specify the number of clusters per block group. + * Added the "symlink", "zap_block", "block_dump", and "extent_open" + commands to debugfs + * Fixed debugfs's htree command so that all its messages are sent + through the pager. + * Fixed debugfs's dump_file and cat functions so they work correctly + on file systems with a block size greater than 8k. + * Fixed mke2fs's handling of the mmp_update_interval option + * Fixed e2freefrag so it works on 64-bit file systems, and so it uses + much less memory. + * E2image can now include all data blocks in the e2image output + file when the user specifies the -a option. + * Fixed debugfs's mknod command so that it updates the block group + statistics + * Document the bigalloc feature in the mke2fs man page. + (Closes: #669730) + * Update Czech, Dutch, French, German, Polish, Sweedish, and + Vietnamese translations + + -- Theodore Y. Ts'o Tue, 21 Jan 2013 21:52:58 -0500 + +e2fsprogs (1.43~WIP-2012-09-22-1) unstable; urgency=low + + * Add metadata checksum feature + + -- Theodore Y. Ts'o Sat, 22 Sep 2012 21:50:20 -0400 + +e2fsprogs (1.42.6-1) unstable; urgency=low + + * New upstream version + * Fix build dependencies to avoid requiring dc, and to allow + cross-building to work (Closes: #677497) + * Updated/fixed various man pages + * Mke2fs will now update its progress indicators at most once a second + to avoid overwhelming serial consoles. + * Resize2fs will support lazy_itable_init, speeding up off-line growth + of uninit_bg file systems. + * Resize2fs now supports on-line resizing 64-bit file systems beyond + 16TB. A number of bugs in resize2fs which prevented this have been + fixed. + * Resize2fs now correctly handles resizing 32-bit file systems to 16TB. + * Fixed a potential segfault in e2fsck when there is an I/O error + while reading the superblock. + + -- Theodore Y. Ts'o Fri, 21 Sep 2012 12:14:41 -0400 + +e2fsprogs (1.42.5-1.1) unstable; urgency=low + + * Non-maintainer upload. + * e2fsck-static, e2fsprogs: let preinst remove a symbolic link in + /usr/share/doc, that should have been replaced with a directory since + 1.39+1.40-WIP-2006.10.02+dfsg-1. (Closes: #698879). + + -- Nicolas Boulenguez Fri, 22 Feb 2013 23:14:59 +0100 + +e2fsprogs (1.42.5-1) unstable; urgency=low + + * New upstream version + * Mark the e2fsprogs package as Multi-Arch: foreign, so if a package + foo:i386 depends on e2fsprogs and is installed on an amd64 system, + the native e2fsprogs will satisfy the dependency. (Closes: #678395) + * Fix a fd leak which could cause logsave (and hence a boot-time rc + init script) to hang (Closes: #682592) + * Fix a problem if e2fsck where if the root file system is mounted + read-only, e2fsck would not clear an error indication in the journal + superblock. Combined with a kernel bug, this would cause the e2fsck + to check the file system after every single boot + * Fixed filefrag so it would not seg fault on virtual filesystems such + as /proc: e.g., "filefrag /proc/partitions" + * Fix filefrag so that it correctly reports the number of extents + * Fixed a bug which caused "mke2fs -N 256 -t ext4 /tmp/foo.img 256m" + to write blocks out until /tmp filled + * Fixed a bug in how e2fsck would uniquify directory entry names + * Change e2fsck so it will allow file systems mounted read-only to be + checked with the -f option. + * Fix e2fsck so that the file system is marked as containing an + error if the user chooses not to fix the quota usage information. + * Fix tune2fs so that it correctly removes the quota feature when + the last quota inode is removed. + * Fix tune2fs so that after removing a quota inode, the block bitmap + is updated; otherwise, e2fsck would complain after running 'tune2fs + -O ^quota '. + * Fix tune2fs so that when converting a file system from using legacy + quota files to the new quota file system feature with hidden quota + files, the accounting for these files is handled correctly so that + e2fsck doesn't complain. + * The e4defrag program now allows device symlinks, such as + /dev/mapper/testvg-testlv, instead of insisting on less + human-friendly names such as /dev/dm-2 + * Updated/fixed various man pages (Closes: #680114) + + -- Theodore Y. Ts'o Sun, 29 Jul 2012 19:59:56 -0400 + +e2fsprogs (1.42.4-3) unstable; urgency=medium + + * Add the -C option to chattr's usage message + * Fix e2fsprogs so it is blhc (build log hardening check) clean. This + fixed e2fsck.static which previously was not getting built with the + security hardening flags. + + -- Theodore Y. Ts'o Wed, 13 Jun 2012 16:03:24 -0400 + +e2fsprogs (1.42.4-2) unstable; urgency=medium + + * Fix FTBFS problem on the hurd and freebsd platforms + + -- Theodore Y. Ts'o Tue, 12 Jun 2012 18:26:40 -0400 + +e2fsprogs (1.42.4-1) unstable; urgency=medium + + * New upstream version + * Fix 64-bit block number bugs in e2fsck, dumpe2fs, and debugfs which + could corrupt file systems + * Fixed e2fsck's handling of how errors propagate from the journal to + the file system superblock + * Fixed a false positive complaint from e2fsck if all of the extents + in the last extent block are uninitialized and located after the + end of the file. + * dumpe2fs will display the journal's error indicator in the + superblock if it is set + * Fixed a bug which caused e2fsck to incorrectly use O_EXCLUSIVE in + some corner cases. + * Fix truncation of extent-mapped inodes in e2fsck and libext2fs + * Fixed i_blocks accounting in bigalloc file systems. + * Add support for btrfs's No_COW flag to lsattr and chattr + * Debugfs interprets the date strings of the form "@ddd" as ddd + seconds after the epoch + * Updated/fixed various man pages (Closes: #674453, #674694) + + -- Theodore Y. Ts'o Tue, 12 Jun 2012 18:20:55 -0400 + +e2fsprogs (1.42.3-1) unstable; urgency=low + + * New upstream version + * Fix bugs on 32-bit systems which could corrupt > 16TB file systems + * Quiet complaints in e2fsck when the total free blocks or inodes are + incorrect in the superblock after an system crash, since we don't + update nor depend on the superblock summaries at each commit boundary + * Fixed support for (hidden) quota files built into ext4; in + particular, don't rewrite the quota inode unless the quotas are + inconsistent + * Optimized reading and writing bitmaps if direct I/O was enabled + * Update Czech, Dutch, French, German, Polish, Sweedish, and + Vietnamese translations + * Fixed incorrect indentation in tune2fs man page + * Update debian policy compliance to 3.9.3 + + -- Theodore Y. Ts'o Mon, 14 May 2012 14:43:09 -0400 + +e2fsprogs (1.42.2-2) unstable; urgency=low + + * Fixed e2fsck.conf's man page (Closes: #646963) + * Fixed 32-bit binary compatibility problem for the libext2fs shared + library introduced in 1.42.2 + * mke2fs will no longer fail if the /etc/mtab file is not present + + -- Theodore Y. Ts'o Mon, 09 Apr 2012 14:54:33 -0400 + +e2fsprogs (1.42.2-1) unstable; urgency=low + + * New upstream version + * Fixed various man pages (Closes: #665427) + * Speed up resize2fs for large file systems (Closes: #663237) + * Be less strict about the EXT4_EOFBLOCKS_FL flag (which will + eventually be going away in the ext4 file system format) + * Teach mke2fs to use direct I/O if the -D option is given + * Print errors returned by ext2fs_open2() and ext2fs_check_desc() so + we can more easily diagnose memory allocation failures caused by + insufficient memory and abort on memory allocation failures + * E2fsck can now write log files containing the details of the + problems that were found and fixed directly. + * E2fsck can now limit the number of messages issued and printed on + the console + * The dumpe2fs, debugfs, and tune2fs now use rbtree bitmaps, which + cause them to use much less memory for large file systems. + * E2fsck will now check for zero-length extents, since older kernels will + OOPS if they comes across one + * Fix e2fsck's discard behaviour so it does not discard too many + blocks, and it will not use discard if the device advertises + that discard does not persistently zero data. Also, if e2fsck is + run in read-only mode, do not try to discard data. + * Fix mke2fs -S so it does not corrupt the first block group's + information. + * Add pointer for e2fsprogs-udeb to libcomerr2.shlibs (Closes: #665885) + + -- Theodore Y. Ts'o Tue, 27 Mar 2012 15:55:57 -0700 + +e2fsprogs (1.42.1-2) unstable; urgency=low + + * Fix the fact that dpkg-buildflags was being ignored due to a + bash'ism in debian/rules. + * Check the new /sys/class/power_supply/AC/online since + /proc/acpi/ac_adapter/... is deprecated and may not be present on + newer kernels. + + -- Theodore Y. Ts'o Mon, 20 Feb 2012 19:12:20 -0500 + +e2fsprogs (1.42.1-1) unstable; urgency=low + + * New upstream release + * dpkg-buildflags is now used if it is present. This allows Debian + Wheezy to build with security hardened build flags. (Closes: #654457) + * mke2fs and e2fsck now use much less memory for large file systems + * Fixed mke2fs -S so it can be usefully used as a last ditch recovery + command when for ext4 filesystems that have the uninit_bg feature enabled. + * The mke4fs argv[0] is now recognized by mke2fs. + * Fixed usage and help messages for mke2fs. + * Eliminated spurious bad block group checksum warnings when e2fsck + falls back to using the backup group descriptors. + * Debugfs's ncheck command is now much more useful when used to + diagnose badly corrupted file system. Added a new -c option. + * Fixed bug in e2image which could cause it to fail to set i_size + correctly if the last hole in the file is an exact multiple of a + megabyte. + * Fixed a bug with resize2fs where for 1k and 2k file systems, the + minimum file size used for resize2fs -M could be a block too small. + * Fixed the badblocks program to honor the -s flag when in read-only -t + mode. (Closes: #646629) + * Update Czech, Dutch, French, Polish, and Swedish translations + + -- Theodore Y. Ts'o Fri, 17 Feb 2012 15:07:13 -0500 + +e2fsprogs (1.42-1) unstable; urgency=low + + * New upstream release + * Fixed hurd FTBFS (Closes: #649689) + * Optimized e2fsck speed on large file systems when using [scratch_files] + * Fixed e2fsck handling of blocks claimed by multiple inodes in + bigalloc file systems + * Fixed e2fsck's calculation of max file size for non-extent based + files when huge_file is enabled + * Update Czech and Swedish translations + + -- Theodore Y. Ts'o Tue, 29 Nov 2011 15:50:07 -0500 + +e2fsprogs (1.42~WIP-2011-11-20-1) unstable; urgency=low + + * New upstream release + * Fix error checking so resize2fs works when using a 32-bit userspace + and a 64-bit kernel (Closes: #644989) + * e2fsck now returns additional status bits in its exit code if it + aborts early in the e2fsck run + * Fix potential stack overflow in debugfs + * Avoid an infinite loop in ext2fs_find_block_device() if there are + symlink loops in /dev caused by a buggy udev + * Fix test failures on big-endian systems + * Fix gcc -Wall complaints + * Add freefrag and e2freefrag commands to debugfs + * Add a read-only, metadata-only debugfs command called rdebugfs + * Improve first-class quota support + * Fix bigalloc support in e2freefrag + * Clean up mmp handling + * Fix a regression which caused mke2fs to not work correctly on files + > 2GB. (Closes: #647245) + * Fix a namespace leak in libext2fs (tdb_null) + + -- Theodore Y. Ts'o Sun, 20 Nov 2011 21:32:49 -0500 + +e2fsprogs (1.42~WIP-2011-10-16-1) unstable; urgency=low + + * New upstream release + * Fix online resizing with resize2fs (Closes: #644989) + * Fix bug which caused shrinking an empty file system file system to + its minimal size to sometimes fail. + * Don't look at the high 16 bits of i_file_acl if the 64-bit feature + is not enabled; this fixes a Hurd compatibility field since this is + used for the high 16 bits of i_mode on Hurd. + * Update Sweedish, Polish, French, German, and Czech translations + + -- Theodore Y. Ts'o Sun, 16 Oct 2011 22:07:03 -0400 + +e2fsprogs (1.42~WIP-2011-10-09-1) unstable; urgency=low + + * New upstream release + * Fixed infinite loop in filefrag (Closes: #644792) + * Fixed various spelling and translation problems + * Fixed various man pages + * Fixed 64-bit block numbers in e2fsck's journal replay + * Fixed mipsel FTBFS that was fixed for mips + * Update Sweedish, French, and Czech translations + * Convert to debian source 3.0 (quilt) format + + -- Theodore Y. Ts'o Sun, 09 Oct 2011 22:24:31 -0400 + +e2fsprogs (1.42~WIP-2011-10-05-2) unstable; urgency=low + + * Fix portability issues with non-Linux platforms and for the mips + platform, which does some really strange things vis-a-vis + 32/64-bit support without actually having a 64-bit version of + the architecture (Closes: #644502) + * Fix dependency problem which causes the newer version of libcom_err2 + to get pulled in when upgrading to e2fsprogs, which needs the new + interface exported by libcom_err2. (Closes: #644425, #644584) + + -- Theodore Y. Ts'o Fri, 07 Oct 2011 18:27:06 -0400 + +e2fsprogs (1.42~WIP-2011-10-05-1) unstable; urgency=low + + * Update translations: German (Closes: #520985) + * Fixed usage and error text for mke2fs -C option + * Updated e2fsprogs.pot file for translators + * Added support for internationalized error strings for libcom_err + * Fixed various portability nits that were causing FTBFS problems on + Hurd and FreeBSD + * Added "big" and "huge" types to mke2fs.conf, since they are needed + for very large file systems + * Fixed on-line resizing which had been broken in the 1.42 series + (Closes: #451388) + + -- Theodore Y. Ts'o Wed, 05 Oct 2011 02:10:53 -0400 + +e2fsprogs (1.42~WIP-2011-10-01-2) unstable; urgency=low + + * Update translations: French, German (Closes: #620659) + * Fix compilation problems in hermetic environments + * Fix on-line resizing in resize2fs (Closes: #451388) + * Add definitions for "big" and "huge" filesystems to /etc/mke2fs.conf + * Fix mke2fs when there are more than 2**32 block groups + + -- Theodore Y. Ts'o Tue, 04 Oct 2011 00:04:25 -0400 + +e2fsprogs (1.42~WIP-2011-10-01-1) unstable; urgency=low + + * New upstream release + * Avoid unnecessary reboots when checking the root fs in some special cases + * Fix an off-by-one error in filefrag -v's output + * Make filefrag display the number of contiguous (not physical) + extents (Closes: #631498) + * Clarify the mke2fs.conf.5 man page (Closes: #634883) + * Add a hurd-specific mke2fs.conf file (Closes: #629355) + * mke2fs will set s_max_mnt_count to -1 instead of 0 by default to + work around a bug in pre-3.0 kernels which caused a spurious + message to be printed when the file system was mounted (Closes: #632637) + * Fixed portability problems which was causing build failures on + non-Linux/non-x86 systems. + * Verify that the bad block inode looks sane before trusting it, to + avoid it causing more harm than good. + * Fixed the debian/rules file so that it build successfully if + DEB_BUILD_OPTIONS contains "nostrip" (Closes: #627535) + * Fixed some big-endian bugs in the MMP code + + -- Theodore Y. Ts'o Fri, 30 Sep 2011 22:33:41 -0400 + +e2fsprogs (1.42~WIP-2011-09-25-1) unstable; urgency=low + + * New upstream release + * Fix FTBFS on big-endian architectures (Closes: #641838) + * Add support for multiarch (Closes: #632169) + * Clarify and update debian/copyright file (Closes: #614662) + * Add support for Multi-Mount Protection (MMP) + * Allow tune2fs to remove the external journal if the device is not found + * Updated/clarified man pages (Closes: #642193) + * Fix a potential FTBFS caused by overly long compile lines (Closes: #629883) + + -- Theodore Y. Ts'o Sun, 25 Sep 2011 01:28:34 -0400 + +e2fsprogs (1.42~WIP-2011-09-16-1) unstable; urgency=low + + * New upstream release + * Added support for the integrated quota feature + * Improved 64-bit and bigalloc support + * Mke2fs and tune2fs now allows setting the stride and stripe width to zero + * Fixed tune2fs's mount options parsing (Closes: #641667) + * Fixed an ABI compatibility problem which broke the dump program + (Closes: #636418) + * Resize2fs has forward compatibility for a new on-line resize ioctl + for > 16TB file systems. + * Fixed a (very hard to hit) bug that could cause e2fsck to crash in + pass 1 or pass 2 + * Debugfs has a new 'blocks' command + * Mke2fs now gives a warning if the auto-detected block size exceeds + the page size + * Mke2fs and e2fsck now tries to use the punch hole command as a + "discard" when operating on normal files + * Mke2fs will not try to do any discard operations if -n is specified + on the command line + * Updated/clarified man pages (Closes: #639411) + * Fixed parsing of MNTOPT_ options for tune2fs and debugfs (Closes: #641667) + + -- Theodore Y. Ts'o Fri, 16 Sep 2011 10:33:59 -0400 + +e2fsprogs (1.42~WIP-2011-07-02-1) unstable; urgency=low + + * New upstream release + * Add support for 64-bit file systems + * Add support for bigalloc file systems + * Fixed an e2fsck bug which caused "*** FILE SYSTEM WAS MODIFIED ***" + without an explanation of what was fixed. + * E2fsck will no longer attempt to clone an extended attribute block + in pass1b handling if the file system does not support extended + attributes. + * E2fsck will be more careful accidentally asking the user to continue + if the file system is mounted, so that an escape sequence won't + cause a false positive. (Closes: #619859) + * E2fsck now uses less cpu time in pass 5 + * E2fsck will no longer segault when a corrupted file system has a bad + extent, and removing it leads to a block needing to be deallocated. + * E2fsck now supports an extended "discard" option which will cause + e2fsck to attempt discard all unused blocks after a full check + * The e2image program now supports the qcow2 format, a more efficient + way of capturing file system metadata snapshots. + * Mke2fs now supports the [devices] stanza in mke2fs.conf. + * Mke2fs now supports the reserved_ratio relation in mke2fs.conf. + * Mke2fs now creates extent-mapped directories for the root and + lost+found directories. + * Mke2fs will skip zero'ing the journal if the extended option + "lazy_journal_init" is specified. + * Mke2fs will now create file systems that enable user namespace + extended attributes and with time- and mount count-based file + system checks disabled. + * Mke2fs will not set a stride or strip size of one block based on + block bevice attributes obtained from sysfs. + * Mke2fs now displays a progress report during the discard process. + * Mke2fs now handles extreme file system parameters correctly which + previously caused the inodes per group to drop below 8, leading + to a segfault. + * Debugfs's icheck will now correctly find inodes which use the + searched-for block as an extended attribute block. + * Debugfs now has a new "punch" command which remove blocks from the + middle of an inode. + * The badblocks program now correctly recovers from I/O errors when + direct I/O is being used. The badblocks command now also + supports a -B option which forces the use of buffered I/O, and + the -v option will provide a more detailed breakdown of read, + write, and failed comparison errors. + * Added e4defrag tool which uses the EXT4_IOC_MOVE_EXT ioctl. + * Added support for journals larger than 2GB. + * Support using both hard links and symlinks when installing e2fsprogs. + * Add overflow checking to tune2fs -i's fsck interval, which must fit + in a 32-bit field. + * Filefrag will report 0 extents correctly in verbose mode. + * Logsave's usage message has been fixed. (Closes: #619788) + * Update translations: French, Chinese, Germany, Indonesian, Swedish, + Vietnamese, Polish, Dutch, Czech. + * Updated/clarified man pages. + + -- Theodore Y. Ts'o Sat, 02 Jul 2011 22:38:57 -0400 + +e2fsprogs (1.41.14-1) experimental; urgency=low + + * New upstream release + * Fixed a FTBFS on big-endian architectures + * Fixed spurious warning in mke2fs + * resize2fs now works correctly on devices exactly 16TB + * resize2fs will no longer clear the resize_inode feature when the + number of reserved GDT blocks reaches 0. This allows a file + system with the flex_bg feature to be subsequently shrunk. + * e2fsck will no longer use the extended rec_len encoding for file + systems whose blocksize is less than 64k, to catch fs inconsistencies + which the kernel will complain about. + + -- Theodore Y. Ts'o Wed, 22 Dec 2010 18:39:19 -0500 + +e2fsprogs (1.41.13-1) unstable; urgency=low + + * New upstream release + * E2fsck can now do journal-only replays via "e2fsck -E journal_only" + * E2fsck now understands UUID= and LABEL= specifiers for the -j option + (Closes: #559315) + * E2fsck.conf now supports a new config option, which forces the + problem not to be fixed: problems/ Mon, 22 Nov 2010 16:00:50 -0400 + +e2fsprogs (1.41.12-2) unstable; urgency=high + + * Allow tune2fs to set uninit_bg without requiring an fsck + * Fix test in e2fsck to correctly check for EOFBLOCKS files + * Fix dependencies for libuuid and libblkid (Closes: #583551) + + -- Theodore Y. Ts'o Thu, 03 Jun 2010 09:30:36 -0400 + +e2fsprogs (1.41.12-1) unstable; urgency=low + + * New upstream release + * mke2fs now gives the correct error message if the external journal + is device is not found + * The resize2fs program will refuse to print the minimum size needed + for a file system if it is not clean. + * E2fsck now tests for extents that begin at physical block 0 and + rejects them as invalid. + * Fixed a bug in e2fsck which could cause it to crash when trying to + remove an invalid extent and the block bitmaps hadn't yet been loaded. + * E2fsck will now completely skip time-based checks if the system + clock looks insane or if the broken_system_clock option is set + in /etc/e2fsck.conf. (Closes: #549861, #540152) + * Fixed a bug in e2fsck which caused e2fsck to complain about i_blocks + with a 4T file created using posix_fallocate() + * E2fsck will now correctly mark a sparse journal as invalid and will + delete and recreate the journal to address the problem. + * Fixed e2fsck not to ask permission from the user to abort if it's + going to abort regardless of what the user is going to say... + * E2fsck can now continue even if it fails to recreate the resize inode + * E2fsck will now avoid removing directory entries for inods found in + the unused region of the inode table until after it restarts the fs + check to avoid removing valid data. + * E2fsck will now longer try to set the block group checksums if it + is interrupted. + * Mke2fs will check both the physical and logical blocksizes of a + device to better support 4k sector drives. + * Mke2fs will accept the valid (but rarely useful) flex_bg size of 1 + * E2fsck will check for cases where the EOFBLOCKS_FL is set whe nit is + not needed, and offer to clear it. + * The com_err library will now only output a CR character if the + stderr is connected to a tty in raw mode. + * Update Czech, Chinese, Dutch, French, Germany, Indonesian, Polish, + and Vietnamese translations (from the Translation Project) + * Add an fsck.ext4 symlink in the e2fsprogs-udeb package (Closes: #571247) + * Fix makefile dependency so dpkg-buildpackage -j2 works (Closes: #563487) + + -- Theodore Y. Ts'o Mon, 17 May 2010 19:43:52 -0400 + +e2fsprogs (1.41.11-1) unstable; urgency=medium + + * New upstream release + * Add Heimdal function com_right_r() to libcom_err (Closes: #558910) + * Allow e2fsck to run even if the physical device has more than 2**32 blocks + * Debugfs's "logdump -b " now properly shows the allocation status + of the block . (Closes: #564084) + * Make e2fsck's "the filesystem is mounted" message is now more scary + to hopefully dissuade users from thinking, "surely that message + doesn't apply to *me*" :-( + * e2fsck -n will now always open the file system read-only. We now + disallow certain combination of options which previously were manual + exceptions; this is bad because it causes users to think they are + smarter than they really are. So "-n -c", "-n -l", "-n -L", and + "-n -D" are no longer supported. + * If the partition is badly aligned, have mke2fs just print a warning + message and continue. Previously mke2fs would ask to confirm, and + this broke distro installation scripts. + * Fix a bug in libext2fs caused the creation of very large journals + for ext4 to be _very_ slow. + * E2fsck now understands the EOFBLOCKS_FL flag which will be used in + 2.6.34 kernels to make e2fsck not complain about blocks deliberately + fallocated() beyond an inode's i_size. + * Fix a bug in e2fsck which could cause e2fsck -D to corrupt + non-indexed directories. (Closes: #572453) + * debian/rules: can be compiled statically with stack protector now. + (Closes: #573923) + * Update debian policy compliance to 3.8.4 + + -- Theodore Y. Ts'o Mon, 15 Mar 2010 00:16:35 -0400 + +e2fsprogs (1.41.10-1) unstable; urgency=low + + * New upstream release + * Fix resize2fs bug which causes it to access invalid memory + * Add libss support for libreadline.so.6 + * Fix e2fsck's check for extent-mapped directory with an incorrect file type + * Add new e2fsck.conf configuration option: + default/broken_system_clock for system with broken CMOS hardware + clocks. (Closes: #559776) + * Fix flex_bg inode table placement algorithm used by mke2fs for + certain specific file system sizes + * Add source lintian overrids for weak-library-dev-dependency + * Fix FTBFS problem caused by texi2html changing (again) its output + location. (Closes: #552934) + * Make e2fsck to avoid rehashing directories which can fit in a + single directory block. + * Fix how e2fsck fixes sparse directories which are extent-mapped. + * Fix some big-endian bugs in e2fsck and libext2fs + * Teach e2fsck to detect and fix sparse extent-mapped directories + * Fix filefrag from core dumping on file systems with 8k block sizes + * E2fsck was depending on i_size to be correct to detect and fix + certain directory problems before actually fixing the + directory's i_size. This caused certain rare corruptions to + require two runs of e2fsck to address. + * Update Czech, Indonesian, Polish and Vietnamese translations + (from the Translation Project) + * Fix e2fsck to find and correct duplicate directory entries in + non-indexed directories. + * Add support for calling BLKDISCARD to mke2fs. + * Enhance libext2fs so it works around bug in Linux version 2.6.19 + and earlier where the /proc/swaps file was missing the header on + the first line. + * Fix resize2fs so it works correctly on file systems with external journals + * Fix libss so that it does not seg fault when using a readline + library which does not supply a readline_shutdown() function. + * Add a pre-depends for util-linux-ng (Closes: #551795) + * Update and clarify various man pages. + * Corrected dumpe2fs's usage message + * Teach libext2fs to ignore the high 32 bits of the i_blocks field + when huge_file file system feature is set, but the inode does not + have the HUGE_FILE_FL flag set. + * Change e2fsck to accept superblock times to be fudged by up to 24 + hours by default. Most distributions have fixed their init scripts, + but apparently now they have buggy virtualization scripts. :-( I + give up, too many buggy user space set ups out there. (Closes: #557636) + * Fix e2fsck to correctly print > 32-bit i_blocks numbers in problem reports + * Improve e2fsck so it prints "Illegal indirect block" instead of + "Illegal block #-1" + * Teach mke2fs to get device topology information from blkid and use + it to populate the superblock stride and stripe sizes and warn if + the block device is misaligned + * Fix a file descriptor leak in debugfs when sourcing a command file + * Fix a file descriptor leak in fsck + * Round up the bitmap size to prevent spurious segmentation faults on + BSD platforms. + * Fix resize2fs to correctly calculate the minimum size needed, when + flex_bg is enabled, to prevent resize2fs -M from failing. + * Dumpe2fs now displays more information about the contents of the journal + * Make sure the libblkid1 and libblkid1-dbg packags have changelogs + * On low memory systems, e2fsck can print some very scary looking + error messages. Clean up them up to avoid user panic. (Closes: #509529) + * Enhance blkid to support .ko.gz files in the modules.dep parser + * Fix tune2fs -j for mounted exted-enabled file systems + * Use the feature name "extent" instead of "extents" in mke2fs.conf. + Both work, but the latter is what is documented in the man page. + (Closes: #540111) + + -- Theodore Y. Ts'o Sun, 07 Feb 2010 20:56:47 -0500 + +e2fsprogs (1.41.9-1) unstable; urgency=low + + * New upstream release + * Fix tune2fs -I to work correctly in the face of bad blocks and + filesystems formatted for RAID arrays, and ENOSPC errors + * Require the user to only answer one question instead of multiple + ones for multiple bad block group checksums, or when an inode + table needs to be moved. + * Fix e2fsck to handle moving inode tables in FLEX_BG filesystems more + gracefully by looking in the entire flex_bg for space, instead of + just in the block group; if that doesn't work, try looking for + space in the entire filesystem. + * Fix the filefrag code to avoid printing the extent header if it + needs to fallback to using the FIBMAP ioctl. + * Fix filefrag to print the correct number of extents for zero-length + files when using FIBMAP. (Closes: #540376) + * Add a filefrag -B option to make it easier to debug the FIBMAP + support. + * Allow e2fsprogs programs to allocate from uninitalized block groups. + * Add a new program, e2freefrag, which displays information about the + free space fragmentation in an ext2/3/4 filesystem. + * E2fsck will now print much fuller information when the last mount + time or last written time is in the future, since most people can't + seem to believe their distribution has buggy init scripts, or they + have a failed CMOS/RTS clock battery. + * Update French, Polish, Czech, and Sweedish translation from the + Translation Project. + * Enhance debugfs's 'stat' command to print basic extent information + for extent-mapped inodes, and add a new command, 'dump_extents' + which prints detailed information about an inode's extent tree. + + -- Theodore Y. Ts'o Sun, 23 Aug 2009 10:08:52 -0400 + +e2fsprogs (1.41.8-2) unstable; urgency=low + + * Fix regression in ext2fs_extent_set_bmap() which caused e2fsck -fD + to fail on ext4 filesystems if the directory needs to shrink by more + than a block (Closes: #537510) + * Fixed filefrag for non-extent based files + * Fix use of apostrohe's in package descriptions + * Don't use dietlibc when building for mips and mipsel architectures + + -- Theodore Y. Ts'o Mon, 20 Jul 2009 09:38:21 -0400 + +e2fsprogs (1.41.8-1) unstable; urgency=low + + * New upstream release + * Fix resize2fs bugs when shrinking ext4 filesystems + * Update debian policy compliance to 3.8.2 + * Update package descriptions to mention ext3 and ext4 filesytems + (Closes: #535530) + * Update French, Polish, Czech, Indonesian, and Sweedish translation + from the Translation Project. + * If the resize2fs operation fails, the user will be told to fix up + the filesystem using e2fsck -fy. + + -- Theodore Y. Ts'o Sat, 11 Jul 2009 17:26:16 -0400 + +e2fsprogs (1.41.7-2) unstable; urgency=low + + * Fix online resizing using resize2fs (Closes: #535452) + * Fix the filefrag program for files with more than 144 extents + * Update and clarify various man pages. + * Fix potential filesystem corruptions caused by using resize2fs to + shrink filesystems with extents enabled. + + -- Theodore Y. Ts'o Tue, 07 Jul 2009 23:21:46 -0400 + +e2fsprogs (1.41.7-1) unstable; urgency=low + + * New upstream release + * Fix memory leaks in e2fsprogs, including a very large memory leak + which can cause e2fsck to run out of memory when checking very large + filesystems using extents. + * Fix a bug in libext2fs which can cause e2fsck and resize2fs to write + uninitalized data into the portion of the inode beyond the first 128 + bytes when operating on extents; potentially corrupting filesystems. + * The logsave program will now filter out the ^A and ^B characters when + writing to the console. + * Update/clarify man pages (Closes: #531385, #523063) + * Fix filefrag progam so it correctly checks for errors from the + fiemap ioctl. + * Change badblocks to allow block sizes larger than 4k. + * Fix libext2fs to properly initialize i_extra_size when creating the + journal and resize inodes. + * Resize2fs will now update the journal backup fileds in the + superblock if the journal is moved; this avoids an unnecessary full + fsck after resizing the filesystem. + * Use the same encoding as the kernel for rec_len == 64k in 64k block + filesystems. + * Fix lsattr to exit with a non-zero status when it encounters errors. + * Enhance badblocks to print the currently tested block number when + interrupted with ^C. + * Fix debugfs from core dumping if the logdump command fails to open the + output file. + * Harden ext2fs_validate_entry() so that lsdel will not read beyond the + end of the block even if the directory block is corrupted. + * Update Chinese and Czech translation from the Translation Project. + + -- Theodore Y. Ts'o Mon, 29 Jun 2009 15:12:14 -0400 + +e2fsprogs (1.41.6-1) unstable; urgency=low + + * New upstream release + * Update and clarify man pages + * Fix a number of Lintian warnings, including to updating to debian + policy 3.8.1 + * Update config.guess and config.sub to the latest (2009-04-17) + version so that e2fsprogs will build on the avr32 platform + (Closes: #528330) + * Add an explicit error message if the /etc/mtab file is missing + when running e2fsck or resize2fs (Closes: #527859) + * Enhance e2fsck to handle the case where the primary block group + descriptors need fixing, and the backup superblock is corrupt. + (Closes: #516820) + * Add an "-a" option to debugfs's close_filesys command + * e2fsck will no longer abort a preen operation if an inode's + i_file_acl_hi field is non-zero. (Closes: #526524) + * The chattr program can now migrate inodes from using direct/indirect + blocks to extent trees. + * Speed up e2fsck if there are multiple block groups with inodes in + use in the unused portion of the block group's inode table. + * Update Chinese translation from the translation project + * Fix resize2fs so it won't corrupt ext4 filesystem when asked to + shrink a filesystem smaller than the minimum suggested size. + * Fix e2fsck regression which can corrupt ext4 filesystems when + replaying the journal. + * Add support to e2fsck for handling I/O errors while replaying the + journal + * Fix a bug in e2fsck which could cause it to crash if an inode has a + corrupt extent header, and the user declines to clear the inode. + * Fix blkid to prefer the /dev/mapper/ device names over the + private /dev/dm-N device names. + * Add support for the FIEMAP ioctl to the filefrag program + * Further speed up e2fsck by skipping journal checks if the filesystem + is mounted read-only and is marked as not needing journal replay. + * Add a build depends in the control file indicating that dietlibc + must be newer than version 0.30 (Closes: #506064) + + -- Theodore Y. Ts'o Fri, 30 May 2009 13:26:23 -0400 + +e2fsprogs (1.41.5-1) unstable; urgency=low + + * New upstream release + * E2fsck will now detect and fix inodes that have a non-zero + i_file_acl_high field on 32-bit filesystems. + * Update build-depends to indicate that dietlibc 0.30 doesn't work. + (Closes: #506064) + + -- Theodore Y. Ts'o Fri, 24 Apr 2009 08:52:47 -0400 + +e2fsprogs (1.41.4-3) unstable; urgency=low + + * Update/clarify man pages (Closes: #365619) + * Fix a problem where the 'device names' for pseudo-filesystems in + /proc/mounts could confuse the e2fsprogs into thinking that a + filesystem image stored in a regular file was mounted when it was not + * Remove whole-disk entries from the blkid cache when partitions are found + * Reduce the number of disk reads needed when the filesystem is clean + * Add Chinese (simplified) translation from the Translation Project + + -- Theodore Y. Ts'o Thu, 23 Apr 2009 01:35:22 -0400 + +e2fsprogs (1.41.4-2) unstable; urgency=low + + * Update the debian copyright files to point at the version-specific + GPL and LGPL files. + * Update the debhelper compat level to 7 + * Fix a number of filesystem corruption bugs in resize2fs when growing + or shrinking ext4 filesystems off-line (i.e., when the ext4 + filesystem is not mounted). + * Clarify tune2fs man page (Closes: #515693) + * Add homepage field to the debian control file (Closes: #506279) + * Fix Hurd compilation problem (Closes: #521602) + * Debugfs can now set i_file_acl_high via the set_inodes_field command + * Debugfs will now display a 64-bit file acl block + * Fix various gcc compilation warnings and other programming cleanups + * Make sure libuuid closes all file descriptors before starting the + uuidd daemon. + * Avoid running e2fsck unnecessarily after doing an online resize + * Mke2fs -S will now avoid trying to create the journal + * Update the Czech translation from the translation project. + * Fix support for external journals (which was broken in e2fsprogs 1.41.4) + * Fix a compatibility issue with libext2fs info page and makeinfo 4.12 + * Fix a segfault in debugfs when running stat without an open filesystem + * Teach the blkid library that starting in 2.6.29, ext4 can support + filesystems without journals. + * Add error check preventing the reserved_ratio argument to mke2fs and + tune2fs from being negative. (Closes: #517015) + * Add support for tracking the number kilobytes written to the + filesystem via the superblock field s_kbytes_written + + -- Theodore Y. Ts'o Sun, 19 Apr 2009 23:05:53 -0400 + +e2fsprogs (1.41.4-1) unstable; urgency=low + + * New upstream release + * Fix bug which could sometimes cause blkid to return an exit value of + zero for a non-existent device (Closes: #502541) + * Fix spelling mistake in Debian changelog (Closes: #502323) + * Fix blkid to deal with an ext3 filesystem with the test_fs flag + * Fix debugfs's ncheck output to suppress extra characters at the end + of the file name + * Tune2fs now updates the block group checksums after changing the + filesystem's UUID + * Speed up tune2fs's inode resizing code so it is no longer vastly + inefficient for moderate to large filesystems + * Fix dumpe2fs so it doesn't attempt to print the inline journal + information on filesystems with an external journal + * Update the Catalan translation + * Filter out linux-vdso.so lines when determining the library + dependencies while building the initial ramdisk (Closes: #503057) + * Fix e2fsck so an errant INODE_UNINIT flag set in a block group + doesn't cause e2fsck to abort. + * E2fsck now distinguishes between fragmented directories and + fragmented files in verbose mode statistics and in the fragcheck + report. + * Avoid double-counting non-contiguous extent-based inodes in the + verbose mode statistics. + * E2fsck now leaves slack space when repacking directories so that a + few new directory entries won't cause leaf nodes to become split + right away. + * E2fsck was previously not handling the case of a corrupted interior + node in the extent tree, and would crash in that case. It now will + handle this and related failures robustly. + * E2fsck problem descriptions involving the journal are no longer + referred to as "ext3" problems, since ext4 filesystems also have + journals. + * Fix a long-standing bug in e2fsck which would cause it to crash when + replying journals for filesystems with block sizes greater than 8k. + * Fix a regression in debugfs's logdump command so it works for + filesystems with 32-bit block numbers. This was accidentally broken + when the header files were changed to support the 64-bit block numbers. + * Fix resize2fs for ext4 filesystems. Some blocks that that need moving + when shrinking filesystems with uninit_bg feature would not be + moved. In addition, blocks and inode table blocks were not being + correctly freed when shrinking filesystems with the flex_bg feable, + which caused resize2fs -M to fail. Finally, when blocks are moved, + make sure the uninitialized flag in extents is preserved. + * Add mkfs.ext4 symlink to the e2fsprogs-udeb package (Closes: #511207) + * Resize2fs now reserves some extra block when calculating the minimum + size to shrink the filesystem in case some extent allocation trees + * Add a "set -e" to uuid-runtime's prerm script to make Lintian happy + * The blkid library will now recognize btrfs filesystems and swap + devices currently used by user-level software suspend. + * tune2fs will not allow changing the inode size for filesystems that + have the flex_bg feature enabled, since the code currently assumes + the each block group's portion inode table is located in its own + block group. + * Fix tune2fs -I so it won't corrupt ext3/ext4 filesystem configured + for RAID storage devices. + * Mke2fs now understands a -U option which allows the UUID to be + specified for the new filesystem. + * Mke2fs will now treat devices with exactly 16TB as if they have 16TB + minus one block, since many users expect ext4 to support 16TB + devices, and the true maximum size is 16TB-1. + * E2fsck will now flag filesystems that have an insane s_first_ino + field in their superblock. + + -- Theodore Y. Ts'o Tue, 27 Jan 2009 11:50:49 -0500 + +e2fsprogs (1.41.3-1) unstable; urgency=low + + * New upstream release + * Fix e2fsck so it prints the correct inode number for uinit_bg + related problems. + * E2fsck will offer to clear the test_fs flag if the ext4 filesystem + is available. + * Fix a file descriptor leak in libblkid + * Avoid a potential infinite loop in e2fsck when there are disk I/O + errors while trying to close a filesystem. + * Fix a potential infinite loop in resize2fs when a bogus new size of + 0 blocks is specified on the command line. + * Add an early check to see if a device is read-only to avoid lots of + confusing error messages. + * Fix debugfs's ncheck command so it prints all of the names of + hardlinks in the same directories. + * Fix a bug in libblkid so it correctly detects whether the ext4 and + ext4dev filesystems are available, so that the ext4dev->ext4 + fallback code works correctly. + + -- Theodore Y. Ts'o Sun, 12 Oct 2008 22:45:34 -0400 + +e2fsprogs (1.41.2-1) unstable; urgency=low + + * New upstream release + * Fix e2fsck's automatic blocksize detection. This fixes a regression + added in e2fsprogs 1.40.7 where e2fsck's -b option would not + work if a blocksize wasn't also specified via the -B option. + * Fix a potential file descriptor leak in libcom_err if the + application exec's another program. + * Fixed badblocks output for "badblocks -sw" + * debugfs: Fix ncheck to print all pathnames for all of the specified inodes + * Use dietlibc when possible for building e2fsck.static, to reduce the + size of the static binary. + * debugfs: Add the ability to specify the hash seed and to specify the + hash algorithm by name to the "hash" command. + * Add documentation for the file I/O functions to libext2fs.texinfo. + (Closes: #484877) + * Fix a bug in e2fsck where if a translation file is being used and + e2fsck needs to print problem report with a custom question (such as + "Run journal anyway?"), the PO file's header would get spewed onto + the terminal. + * Update Swedish, Vietnamese, Dutch, Indonesian, German, Czech translations + * Fixed spelling mistakes in man pages (Closes: #498100, #498101, + #498102, #498103) + + -- Theodore Y. Ts'o Thu, 02 Oct 2008 08:54:16 -0400 + +e2fsprogs (1.41.1-3) unstable; urgency=low + + * badblocks -v will now display the time and percentage complete + (Closes: #429739) + * Reordered debian/rules when building udebs to avoid a Lintian warning + * Fixed dependencies fields in the udeb packages (Closes: #497619) + * Avoid linking various programs with unneeded libraries + * Fixed a typo'ed bold font specifier in mke2fs's man page + * Fixed the pkg-config files so the include directory needed by the + various libraries is included, and to use Requires.private to + avoid unnecessary linking of dynamic libraries. + * Add more historical information to the debian/*.symbol files + + -- Theodore Y. Ts'o Fri, 05 Sep 2008 11:11:03 -0400 + +e2fsprogs (1.41.1-2) unstable; urgency=low + + * Make sure ext4_swab64() is defined on all platforms (Closes: #497515) + * Badlocks: Use O_LARGEFILE so it will run on files greater than 2GB + + -- Theodore Y. Ts'o Tue, 02 Sep 2008 09:53:46 -0400 + +e2fsprogs (1.41.1-1) unstable; urgency=low + + * New upstream release + * mke2fs and tune2fs now use half-md4 as the default hash algorithm + In addition the default hash algorithm can be via mke2fs.conf for + mke2fs, and via a command-line option for tune2fs. + * Add support for on-line resizing of ext4 filesystems with the + flex_bg filesystem feature. + * e2fsck now creates the journal in the middle of the filesystem, + which can speed up fsync-heavy workloads. + * Make the blkid library more efficient for devicemapper devices, + mostly by no longer using the libdevmapper library. + * Fix various namespace leakages by the libblkid, libe2p and libext2fs + libraries. + * Fix support for empty directories in 64k blocksize filesystems. + * Add supported_features command to debugfs + * Improve libblkid detection of JFS and HPFS filesystems + * The test I/O manager is now compiled in by default, but to avoid its + overhead, it is only enabled when the TEST_IO_FLAGS or TEST_IO_BLOCK + environment variables are set. + * Fix filefrag's ideal extent calculation (Closes: #458306) + * Fix postinstall scripts when the user/group is in LDAP (Closes: #497010) + * Add Indonesian and update French, Polish, Dutch, German, Sweedish, + Czech, and Vietnamese Translations. (Closes: #313697, #401092) + * Update/clarified man pages + * Add dpkg-gensymbols support to track ABI changes to the libraries + * Add lintian overrides for uuid-runtime and libuuid1 + * Remove (no longer needed) lintian overrides for e2fsck-static + * Add debian/watch file + + -- Theodore Y. Ts'o Mon, 01 Sep 2008 11:30:21 -0400 + +e2fsprogs (1.41.0-4) unstable; urgency=low + + * mke2fs will issue a warning if mke2fs.conf hasn't been updated and + the user tries to create an ext3, ext4, or ext4dev filesystem, + since it depends on the mke2fs.conf file in order to create the + filesystem properly with the appropriate features. + * Fix the maximum journal size message in mke2fs and tune2fs to be + consistent/correct. (Closes: #491620) + * Add detection for hfsx filesystem and add label and uuid detection + for hfs, hfsplus, and hfsx filesystems in libblkid. + * Fix cosmetic issue in resize2fs when a progress bar doesn't finish + with a newline for pass 4 (when the inode references are updated). + * Teach resize2fs to move blocks when extents are present (when + shrinking a filesystem and/or if resize_inode is not present). + * Teach resize2fs to work correctly with the uninit_bg when blocks + need to be moved or allocated. + * Fix and optimize extent manipulation in libext2fs for resize2fs. + * Fix "dumpe2fs -i" and "debugfs -i". (Closes: #495830) + * Fix resize2fs incorrectly managing directory in-use counts when + shrinking filesystems and directory inodes need to be moved. + * Fix spurious e2fsck complaints with i_size with extents and large + files and preallocated blocks. + * Make sure the creation timestamp is set by mke2fs and by new inodes + created by the libext2fs in general. + * Fix ind/dind/tind statistics when extents are present, and add + extent tree depth statistics. + * Add a fragmentation report extended option to e2fsck. + * Fix blkid cache validation and some possible blkid crashes + (Closes: #493216) + * Teach debugfs's htree command to work with extent-based directories. + * Improve the error message for "tune2fs -I". + * Fix miscellaneous strings and usage messages pointed out by the + translators. (Thanks, translators!) + * Enforce that mke2fs won't allow features for revision 0 filesystems. + * Optimize inode table allocation in mke2fs for flex_bg filesystems. + * Update/clarified man pages + * Fix minor typo in uuid-runtime's debian package description + * Wrap debian/copyright files to avoid "line too long" lintian warnings + + -- Theodore Y. Ts'o Sat, 23 Aug 2008 08:56:47 -0400 + +e2fsprogs (1.41.0-3) unstable; urgency=medium + + * Fix mips-specific FTBFS problem in debian/rules file + * Synchronize section and priority levels in control file with the + FTP masters' override file. + + -- Theodore Y. Ts'o Tue, 15 Jul 2008 11:38:59 -0400 + +e2fsprogs (1.41.0-2) unstable; urgency=medium + + * Don't try to check the group descriptor checksum if the GDT_CSUM + feature is not present. (Closes: #490637) + * Add a new blkid -L option which pretty-prints the currently + available block devices. (Closes: #490527) + + -- Theodore Y. Ts'o Sun, 13 Jul 2008 19:18:08 -0400 + +e2fsprogs (1.41.0-1) unstable; urgency=medium + + * New upstream version + * Make e2fsck detect corrupted block group descriptors that would + cause it to relocate inode tables, causing more damage to the + filesystem, and make it try the backup superblock/block group + descriptors first. + * Fix resize2fs to clean up the resize_inode if all of the reserved + gdt blocks are consumed during an off-line resize. + * Enable huge_file, dir_nlink, extra_isize feautres for mke2fs and tune2fs. + * Enable huge_file, dir_nlink, extra_isize, and uninit_bg by default + in mke2fs.conf. + * Fix badblocks terminology in man page and program output. + (Closes: #440983, #440981) + * Clarify stripe-width and stride-size in mke2fs man page. (Closes: #487849) + * mke2fs: Dumb down filesystems for GNU Hurd (Closes: #471977) + * Add bash-static to the list of shells recommended for e2fsck-static + (Closes: #490003) + * mke2fs: Fix flex_bg metadata default layout to avoid a hole between + the bitmaps and inode tables. + + -- Theodore Y. Ts'o Thu, 10 Jul 2008 17:25:32 -0400 + +e2fsprogs (1.41~WIP-2008-07-07-1) experimental; urgency=low + + * New upstream version (pre-release for e2sprogs 1.41) + * Update to indicate compliance with debian policy version 3.8.0.0. + * Fix e2fsck to not truncate valid extent files that are larger than + what is supported by indirect files. + * Add -dbg packages which contain the debugging information. + * mke2fs: Print a better error message when a device is too big. + (Closes: #488663) + * Create external journal devices with a default blocksize of 4k + * Fix bug in badblocks which caused crash when lots of -t patterns are + given. (Closes: #487298) + * Fix blkid handling of stale entries. (Closes: #487758, #487783) + * Update Vietnamese, Polish, French, Spanish, German, Catalan, + Dutch, Czech translations from the translation project. + * Fix FTBFS problem on MIPS (Closes: #487675) + * Fix bug in libuuid1.postinst which would cause it to blow up if + there were spaces around the equals sign in /etc/adduser.conf. + (Closes: #487443) + * Update/clarified man pages. (Closes: #393313) + + -- Theodore Y. Ts'o Mon, 07 Jul 2008 16:30:43 -0400 + +e2fsprogs (1.41~WIP-2008-06-17-1) experimental; urgency=low + + * New upstream version (pre-release for e2fsprogs 1.41) + * New options to badblocks allow it to limit how quickly it reads + from disk (for background scrubbing) and abort after a finding + giving a number of errors. + * Add support for ext4 filesystem features. (Closes: #388452, #425477) + * Tune2fs can migrate a filesystem from using 128 byte inodes to + larger inode sizes so the user can take full advantage of ext4) + * E2fsck and mke2fs can optionally record an undo log which can be + replayed by the e2undo program. + * E2fsck will display a less cryptic message when the last check field + in the superblock is in the future. (Closes: #446005) + * Improve blkid probes for LVM volumes and swap partitions + * Mke2fs has a much more sophisticated system for controlling the + parameters of newly created filesystems. The -t option now is used + to specify the filesystem type. See the mke2fs and mke2fs.conf man + pages for more details. + * Resize2fs will now print the minimum needed filesystem size if given + the -P option, and will resize the filesystem to the smallest possible + size if given the -M option. + * E2fsck now performs more extensive and careful checks of extended + attributes stored in the inode. + * Mke2fs will always make sure that lost+found always has at least 2 + blocks, even for filesystems with very large blocksizes (i.e., 64kb). + * The debugfs "ls" command now supports the -p option, which causes + filenames to be printed surrounded by double quotes. + * Fix a potential off-by-one buffer overflow in e2image + * The chattr program will now return a non-zero exit code in case of + failures. + * This version of e2fsprogs removes support for legacy big-endian + filesystems and for MASIX filesystems. + * Add I/O statistics reporting to e2fsck. + + -- Theodore Y. Ts'o Tue, 17 Jun 2008 23:57:08 -0400 + +e2fsprogs (1.40.11-1) unstable; urgency=low + + * Change mke2fs, tune2fs and resize2fs to use floating point precision + when calculating the number of reserved blocks. (Closes: #452639) + * Update Spanish and Catalan translations. + * Fix ext2fs_swap{16,32,64} for external applications. (Closes: #484879) + * Improve uuid-runtime package description. (Closes: #483962) + * Improve e2fsprogs package description. (Closes: #483023) + * Add support for detecting ZFS volumes to libblkid. + * Clarify debugfs man page. (Closes: #486463) + + -- Theodore Y. Ts'o Tue, 17 Jun 2008 21:59:21 -0400 + +e2fsprogs (1.40.10-1) unstable; urgency=low + + * Fix a very rare potential data corruption bug in e2fsck's journal + replay. + * Updated German, Dutch, Sweedish, and Vietnamese translations. + * Force blkid to revalidate a device if its mtime is newer than the + last validation time in the cache. + + -- Theodore Y. Ts'o Wed, 21 May 2008 13:35:12 -0400 + +e2fsprogs (1.40.9-1) unstable; urgency=low + + * Fix fsck so that if multiple filesystems are being checked in + parallel, the progress bar for subsequent filesystems will be + correctly displayed. (Closes: #432865) + * Fix fsck -Cn for n!=0 for better Ubuntu boot-time support + * debugfs: Don't bother using a pager of stdout is not a tty + * Fix tune2fs and debugfs to correctly parse time strings during + daylight savings time. (Closes: #471882) + * Teach fsck to treat ext4 and ext4 filesystems as ext* filesystems + * Logsave will now propagate SIGINT and SIGTERM signals to its child + process. + * Mke2fs will not allow the illogical combination of the resize_inode + and meta_bg filesystem features. + * Use UID/GID ranges from adduser.conf if present, even though we + don't use adduser to add users/groups. (Closes: #473179) + * Updated German, Czech, Dutch, French, Polish, Sweedish, and + Vietnamese translations. + * Update/clarified the mke2fs man page + + -- Theodore Y. Ts'o Sun, 27 Apr 2008 00:35:20 -0400 + +e2fsprogs (1.40.8-2) unstable; urgency=low + + * One more big-endian swap fix needed for resize2fs to work correctly + with in-inode extended attributes. + * Fix minor security issues identified in uuidd. + * Remove e2fsprogs preinstall script which contained stuff not needed + in well over two stable releases. + + -- Theodore Y. Ts'o Fri, 14 Mar 2008 14:25:54 -0400 + +e2fsprogs (1.40.8-1) unstable; urgency=low + + * Fix e2image -I so it works on image files which are larger than 2GB. + * Fix e2fsck's handling of directory inodes with a corrupt size field. + * Fully fix a resize2fs bug where extended attributes in large inodes + could get dropped on big-endian systems. + * Update Czech, Dutch, Polish, Sweedish, and Vietnamese translations. + * Significantly updated German translation! Thanks to Philipp Thomas + from Novell for stepping up to be our new German translation + maintainer! (Closes: #302512, #370247, #401092, #412882) + * Fixed mke2fs man page to document new default inode size. + + -- Theodore Y. Ts'o Thu, 13 Mar 2008 20:00:09 -0400 + +e2fsprogs (1.40.7-1) unstable; urgency=low + + * New upstream release + * tune2fs no longer will remove the sparse_super feature, as it is dangerous + * Update/clarified various man pages + * Fix bug where large nodes were not getting fully copied when + shrinking a fileystem using resize2fs. + * Allow mke2fs and tune2fs to manipulate the large_file feature flag + * Suppress fsck's warning message about an old-style fstab if the + fstab file is empty. (Closes: #468176) + * E2fsck will no longer clear the large_files feature flag + automatically when there are no more large files in the system. + * Fix blkid code to avoid segfaulting when a device mapper volume + disappears out from under it. + * Enhance e2fsck's reporting of unsupported filesystem features + * Fix dumpe2fs command syntax for explicit superblock/blocksize parameters + * Teach tune2fs to clear the resize_inode feature flag + * Fix libuuid1 postinstall script to explicitly pass 100 to UID_MIN + and GID_MIN, to make it clear we are not trying to allocate an + uid/gid in the globally reserved range. (Closes: #466929) + * Fix memory leak in ext2fs_alloc_block() + * Teach blkid to recognize LVM2 physical volumes + * Add support to dumpe2fs, mke2fs, and tune2fs for specifying and + printing the RAID stride and stripe width. + * Add support for new superblock fields to debugfs's set_super_value command + * Teach debugfs to print "mostly-printable" xattr strings, such as is + used by SELinux. + * Add support in fsck to ignore mounted filesystems when given the -M option + * Fix uuidd so it creates the pid file with the correct pid number + * Update Czech, Dutch, Polish, Sweedish, and Vietnamese translations + from the Translation Project. + + -- Theodore Y. Ts'o Thu, 28 Feb 2008 22:27:39 -0500 + +e2fsprogs (1.40.6-1) unstable; urgency=low + + * New upstream release + * Add support for returning labels for UDF filesystems in the blkid + library. + * Fix bug in the blkid library where cached filesystems was not being + flushed when opening USB devices returned the error ENOMEDIUM. + (Closes: #463787) + * Add logic to the blkid library to automatically choose whether a + filesystem should be mounted as ext4 or ext4dev, as appropriate. + * Allow tune2fs to set and clear the test_fs flag on ext4 filesystems. + * Document the BLKID_FILE environment variable in the libblkid man page + * Update Vietnamese and Czech translations from the translation project + * Fix dependency problem caused by dpkg 1.14.16 (Closes: #436058) + * Use thread local storage to fix a theoretical race condition if two + threads try to format an unknown error code at the same time in + the com_err library. + + -- Theodore Y. Ts'o Sun, 10 Feb 2008 00:06:02 -0500 + +e2fsprogs (1.40.5-2) unstable; urgency=low + + * Fix debian/control and debian/rules so that they work correctly + after a change in dpkg-gencontrol's behavior after version 1.14.16 + of dpkg. This fixes bad version dependencies for comerr-dev, + uuid-dev and ss-dev. Thanks to Don Armstrong for the explanation and + Margarity Manterola for a proposed patch. (Closes: #463058) + + -- Theodore Y. Ts'o Wed, 30 Jan 2008 07:17:27 -0500 + +e2fsprogs (1.40.5-1) unstable; urgency=low + + * New upstream release. + * Mke2fs will now create new filesystems with 256 byte inodes and the + ext_attr feature flag by default. This allows for much better + future compatibity with ext4 and speeds up extended attributes + even on ext3 filesystems. + * Teach mke2fs and tune2fs to set a "test_fs" flag, which indicates + that it is ok to use the filesystem on in-development kernel + code (i.e., ext4dev) + * E2fsck now optimizes non-htree directories by sorting them by inode + number. + * Add support for detecting HFS+ and ext4/ext4dev filesystems in blkid + * Fix blkid's ntfs UUID handling so it is compatible with vol_id + * Avoid a floating point exception when blkid tries to probe a corrpt + reiserfs filesystem. + * Fix potential overflow problem in e2image if the device name is + too long. + * Cause e2image to exit immediately with an error message on a disk + full situation. + * Fix a minor typos in the resize2fs and uuidd manpages. + * E2fsck will no longer backup superblocks when the kernel makes + certain "safe" feature set changes behind the user's back. + * Fix debugfs's lsdel command so it works on large files + * Allow a user to undelete an inode with linking to a destination + directory. + * Update Swedish translation file from the Translation Project + * The libuuid1 and uuid-runtime packages requires passwd package, so + declare it as a dependency. (Closes: #459403) + * Fix a FTBFS problem on x86_64 caused by the fact that dietlibc + doesn't provide llseek on the x86_64. (Closes: #459614) + * Don't use dietlibc on platforms that don't support it (Closes: #459475) + + -- Theodore Y. Ts'o Sun, 27 Jan 2008 16:57:34 -0500 + +e2fsprogs (1.40.4-1) unstable; urgency=low + + * Make sure that programs like tune2fs, when modifying a mounted + filesystem do not write the backup superblocks with the + NEEDS_RECOVERY flag, to avoid e2fsck from needlessly forcing a + full fsck because it thinks the feature flags need to be backed up + from the master to the backup superblocks. (Closes: #454926) + * Improve time-based UUID generation to guarantee uniqueness even when + UUID's are being generated at very high rates on SMP systems. To + do this we use an optional setuid helper daemon (uuidd) which is + started by libuuid when it is needed. The uuidd daemon is + packaged in the (new) uuid-runtime package, which now also includes + the uuidgen program (which had been previously been included as + part of the e2fsprogs package). + * Fix fsck to only treat '#' characters at the beginning of /etc/fstab + lines as starting a comment. This avoids spurious warnings printed + for filesystems such as fuse that often use '#' as part of the + filesystem specifier (i.e., wdfs#https://dav.hoster.com/foo). + * Enhance the blkid program to pretty-print control and meta + characters to avoid garbage filesystem labels from screwing up the + user's terminal + * Fix potential integer overflows passed to malloc() in resize2fs + * Update Dutch, Polish, and Vietnamese translations from the + Translation Project. Remove the Rwandan translation upon advice + of the Translation Project. + * Fix cross-compilation support for non-Linux architectures + (Closes: #451172, #437720) + * Clarified and improved man pages (Closes: #444883, #441872) + * Fix potential divide by zero error when libblkid tried probing an + invalid FAT filesystem. + * Make error_message() in libcom_err DTRT when when a 64-bit sign-extended + error code is passed to it. + * Build the e2fsck-static package so that e2fsck.static will not use + TLS and hence will run correctly on back-level Debian systems + using a 2.4 Linux kernel. (Closes: #458017) + + -- Theodore Y. Ts'o Mon, 31 Dec 2007 22:40:42 -0500 + +e2fsprogs (1.40.3-1) unstable; urgency=medium + + * New upstream release + * libext2fs: Add checks to prevent integer overflows passed to + malloc(). Fixes security issue related to Xen's pygrub: CVE-2007-5497 + * libss: Fix parallel build failure + * e2fsprogs: fix blkid whole-disk scanning heuristics + * libext2fs: Fix a corner case bug in ext2fs_unlink + * fix check_mntent_file() to pass mode for open(O_CREAT) + * Fix errors in test_ss.c so it can be an example application and test case + * e2image in raw-mode appends an extra byte to image-file + * Fix typo in the summary section of the blkid man page + * mke2fs: Change usage message to use -E instead -R, which is deprecated + * libblkid: recognize squashfs filesystems on BE systems. + * libblkid: detect squashfs + * e2fsck: backup superblocks if key constants have changed + * e2fsck: update the backup superblocks if the feature bitmasks are changed + * ext2fs_dblist_dir_iterate: Fix ABORT propagation logic + * libblkid: Add more magic numbers that might mean there is a FAT filesystem + * e2fsck: Don't mark the filesystem invalid because of time errors + * Work around lame Ubuntu init scripts / installer bugs + * fsck: Ignore /etc/fstab entries for bind mounts + * e2fsck: If the superblock is corrupt, automatically retry with the backup sb + * Don't crash if s_inode_size is zero + * Use sscanf instead of atoi when parsing e2fsck options + * Add Catalan translation and update Spanish, French, and Dutch + translations from the Translation Project. (Closes: #411562) + * Fix typo and clarify the uuidgen man page + * Make sure $prefix/etc is created before installing mke2fs.conf + * e2fsck: Allow i_size to be rounded up to the size of a VM page + * Fix a bug in ext2fs_initialize() which causes mke2fs to fail while + allocating inode tables for some relatively rare odd disk sizes. + * Fix big-endian byte-swapping bug in ext2fs_swap_inode_full() + + -- Theodore Y. Ts'o Wed, 05 Dec 2007 20:04:28 -0500 + +e2fsprogs (1.40.2-1) unstable; urgency=low + + * New upstream release + * e2fsck: Fix salvage_directory when the last entry's rec_len is too big + * Update Turkish, Polish, Dutch, and Vietnamese PO files from the + Translation Project + * Fix a bug which would cause e2fsck segfault on very badly damaged + filesystems + * Update tune2fs man page to include more discussion of reserved + blocks (Addresses Ubuntu Launchpad bug #47817) + + -- Theodore Y. Ts'o Thu, 12 Jul 2007 22:18:51 -0400 + +e2fsprogs (1.40.1-1) unstable; urgency=low + + * New upstream release + * Clarify mk_cmds' error reporting + * e2fsck: Detect recursive loops in @-expansions + * Compile the default mke2fs.conf into mke2fs program + * Fix bogus strip permission errors when building under Debian + * Update Vietnamese, French, and Dutch PO files from the Translation Project + * Fix bug which could cause libblkid to loop forever (Closes: #432052) + + -- Theodore Y. Ts'o Sun, 8 Jul 2007 20:25:08 -0400 + +e2fsprogs (1.40-1) unstable; urgency=low + + * New upstream release + * Remove RFC-4122 logic from Debian build rules (Closes: #407107) + * Fix com_err.texinfo so that the install-info command will remove + the com_err info file from the /usr/share/info/dir file when the + comerr-dev package is removed and purged (Closes: #401711) + * Fix divide-by-zero error in blkid's NTFS proving logic + * Add new blkid -g option which causes the blkid cache to be garbage + collected + * libblkid: Fix bug which could cuase bid_type to be corrupted + * mke2fs: Add santy check to make sure inode_size * num_inodes isn't too big + * Fix additional Coverity bugs in mke2fs and e2fsck + * Improve sanity check in e2fsck's algorithm for finding a backup superblock + * Fix e2fsck get_size logic so that it will work with the Linux floppy + driver (Closes: #410569) + * Fix error checking of badblock's last-block and start-block arguments + (Closes: #416477) + * e2fsck: avoid writing overwriting the backup superblocks until the + master superblock is confirmed to be sane + * Make the blkid library more paranoid about concluding a partition + contains a NTFS filesystem. (Addresses Launchpad Bug: #110138) + * Enhance e2fsck so it will recreate the ext3 journal if the original + journal inode was cleared to due being corrupt + * Fix e2fsck so that if the backup journal information is used, that + this is written out to the journal inode + * Make e2fsck check all of the blocks in the journal inode for validity + * blkid: Add support for detecting LUKS encrypted partitions + * e2fsck: added sanity check for xattr validation + * Fix byte-swapping bug for filesystems with large inodes + * Clarify the copyright licenses used by the various libraries in COPYING + * Remove RFC-4122 from upstream (Closes: #407107) + * Fix info-dir line which prevented install-info from removing + com_err entry from from /usr/share/info/dir when the comerr-dev + package is purged (Closes: #401711) + + -- Theodore Y. Ts'o Sun, 29 Jun 2007 22:40:27 -0400 + +e2fsprogs (1.39+1.40-WIP-2007.04.07+dfsg-2) unstable; urgency=low + + * Allow the journal to up to 10,240,000 blocks + * Fix blkid library to recognize MD 0.90 superblock on little endian + systems + * Fix blkid library to report the correct UUID from MD superblocks + * Fix signed vs. unsigned problem in debugfs' setb/testb/freeb commands + * Enhance debugfs's date parser so it acccepts integer values + * Fix e2fsck's pass1c accounting so it doesn't terminate too early + if a file with multiply claimed blocks is hard linked. or not at + all if the root directory contains shared blocks + * Enhance debugfs so it can modify the block group descriptors using + the command set_block_group_descriptor + * Improve e2fsck's reporting of I/O errors so it's clearer what it + was trying to do when an error happens + * Fix a bug in how e2fsprogs byte swaps inodes containing fast + symlinks that have extended attributes. + * Fix potential file descriptor leak in ext2fs_get_device_size() + * Fix minor typo in e2fsck.conf.5 man page + * Cleanup udeb dependency (Closes: #419605) + * Rebuilding with libdevmapper 1.02.1 (Closes: #421022 and #421668) + * Add dependency on comerr-dev to ss-dev (Closes: #408352) + * Make mke2fs use sane defaults when /etc/mke2fs.conf doesn't exist + * Fix mke2fs and debugfs to support large (> 16 bit) uid's and gid's + * Fix spelling typo in debian package description for libblkid1 + (Closes: #399155) + * Remove -WIP language from the debian copyright file. (Closes: #415560) + * Remove check in e2fsck which required EA's in inodes to be sorted + (We should get this back-ported to the stable branch since + filesystems with large inodes will have EA's erroneously + removed, which will for example toast an SELinux system.) + + -- Theodore Y. Ts'o Sun, 6 May 2007 19:44:35 -0400 + +e2fsprogs (1.39+1.40-WIP-2007.04.07+dfsg-1) unstable; urgency=low + + * Add libreadline.so.5 support to libss. + * Impove badblocks -n/-w exclusive usage message. + * Add debugging code (via the COMERR_DEBUG env. variable) to the + com_err library + * Fix dump_unused segfault in debugfs when a filesystem is not open + * Add versioned dependency in Debian's shlibs for libblkid. + (Closes: #413208) + * Fix memory leak in blkid library. (Closes: #413661) + * Let the debugfs lcd command work even if a filesystem is not open + * Fix large number of miscellaneous Coveriy bugs. (None were + security-security). + * Fix e2fsck to clear i_size for special devices with a bogus i_blocks + field on the first pass. + * Fix e2fsck to set the file type of the '..' entry when connecting + a directory to lost+found. + * Enhance e2fsck to recover directories whose modes field were + corrupted to look like special files. + * Allow debugfs to dump > 2GB files. (Closes: #412614) + * Misc. man page cleanups. (Closes: #379695) + * Fix resize2fs parsing of size parameter (Closes: #408298) + * Fix infinite loop in e2fsck on really big filesystems (Closes: #411838) + * Fix memory leak in ext2fs_write_new_inode() + * Add support for using a scratch files directory to reduce e2fsck's + memory utilization on really big filesystems. + + -- Theodore Y. Ts'o Sat, 7 Apr 2007 10:38:40 -0400 + +e2fsprogs (1.39+1.40-WIP-2006.11.14+dfsg-1) unstable; urgency=low + + * Fix spurious error from e2fsck -c and mke2fs -c caused by the fix + to #386475. + * Add dirhash signed/unsigned hint to superblock. (Closes: #389772) + * Allow unix_io offsets greater than 2 gigabytes + * Make sure mk_cmds and compile_et work even in strange locales + * Fix type-punning bug which caused dumpe2fs to crash on the Arm platform + (Closes: #397044) + * Add explanatory message to badblocks that -n and -w are mutually + exclusive. (Closes: #371869) + * New +dfsg source tarball that has useful documentation REALLY + removed to satisfy the DFSG License Nazi's. (Closes: #390664) + + -- Theodore Y. Ts'o Tue, 14 Nov 2006 23:45:34 -0500 + +e2fsprogs (1.39+1.40-WIP-2006.10.02+dfsg-2) unstable; urgency=low + + * Add failsafes against duplicate UUID generation caused by threads + * Fix potential e2fsck -n crash caused by corrupt htrees + * Reorder the library line for static linking, to fix undefined + references to pthreads on amd64. (Closes: #393680) + * Fix mke2fs's error checking when creating revision 0 filesystems. + (Closes: #392107) + + -- Theodore Y. Ts'o Sun, 22 Oct 2006 00:19:44 -0400 + +e2fsprogs (1.39+1.40-WIP-2006.10.02+dfsg-1) unstable; urgency=low + + * New +dfsg source tarball that has useful documentation removed to + satisfy the DFSG License Nazi's. (Closes: #390664) + * Remove dependency on e2fsprogs from the e2fsck-static package + (Closes: #383521) + * Fix badblocks interpretation of its first optional argument (last-block) + (Closes: #386475) + + -- Theodore Y. Ts'o Tue, 3 Oct 2006 23:36:05 -0400 + +e2fsprogs (1.39+1.40-WIP-2006.10.02-2) unstable; urgency=low + + * Build using the sid version of libc, not experimental! + + -- Theodore Y. Ts'o Mon, 2 Oct 2006 21:43:44 -0400 + +e2fsprogs (1.39+1.40-WIP-2006.10.02-1) unstable; urgency=low + + * Previous NMU acknowledged (Closes: #388718) + * Fix debugfs to print unsigned values for EA's + * Minor man page fixes (Closes: #373004, #369761) + * Allow the default inode size to be specified in mke2fs.conf + * Require mke2fs -F -F for really dangerous operations + * Add Vietnamese translation + * Update French and Dutch translations + * Fix debugfs coredump when lsdel is run without an open filesystem + (Closes: #378335) + * Fix spelling error in e2fsck output + * Fix overflow problems when the number of inodes and blocks is + close to 2**32-1 + * Add GFS/GFS2 support to the blkid library. + * Fix blkid support of empty FAT filesystem labels + * Avoid recursing forever due to symlinks in /dev by the blkid library + * Fix bogus error messages from resize2fs caused by the filesystem + not containing a resize inode. (Closes: #380548) + * Fixed device-mapper probing (it was failing due to an extra '/dev' being + added to the device pathname) + * Make sure the default minimum size journal is big enough to support + on-line resizing. + * Add a versioned build-dep on texi2html (Closes: #389554) + * Remove useful UUID specification thanks to License Nazi's (Closes: #390664) + + -- Theodore Y. Ts'o Mon, 2 Oct 2006 13:04:27 -0400 + +e2fsprogs (1.39-1.1) unstable; urgency=low + + * Non-maintainer upload + * Added -pthreads to devmapper libraries (Closes: #388718) + + -- Ben Hutchings Sat, 30 Sep 2006 12:49:47 +0100 + +e2fsprogs (1.39-1) unstable; urgency=low + + * New upstream version + * Fix debugfs's dump_unused command so it will not core dump on + filesystems with a 64k blocksize + * Clarified and improved man pages, including spelling errors + (Closes: #368392, #368393, #368394, #368179) + * New filesystems are now created with directory indexing and + on-line resizing enabled by default + * Fix previously mangled wording in an older Debian changelog entry + * Fix doc-base pointer to the top-level html file (Closes: #362544, #362970) + + -- Theodore Y. Ts'o Mon, 29 May 2006 11:07:53 -0400 + +e2fsprogs (1.38+1.39-WIP-2006.04.09-2) unstable; urgency=low + + * Resize2fs automatically detects the previously used RAID stride + parameter so that resized filesystems can be more optimally laid + out for RAID filesystems. + * Fix mke2fs -cc and e2fsck -cc (Closes: #366017) + * Fix initrd script to fix failure with 2.4 kernels (Closes: #364516) + * Mke2fs now uses an improved layout for RAID filesystems when the + stride parameter is specified. + * Fix the debugfs commands htree_dump, dx_hash, and list_dir so they + print a usage message when an illegal option character is given. + * Speed up mke2fs and e2fsck by writing inode and block bitmaps in one pass + * Fix filefrag to be 32-bit clean by using unsigned long instead of + a signed integer for block numbers. + * Fix a bug in the e2p library which could cause dumpe2fs to + (rarely) fail to print out the journal or hash seed UUID. + * Fix memory leak in e2fsck's error paths. + * Fix comerr-dev's doc-base pointer to the top-level html file + + -- Theodore Y. Ts'o Sun, 14 May 2006 18:09:20 -0400 + +e2fsprogs (1.38+1.39-WIP-2006.04.09-1) unstable; urgency=low + + * Update config.guess and config.sub to latest version (2006-02-23) from FSF + * Update French, Dutch, Polish, Swedish, and Turkish translations + * Fix asm/types.h type conflicts on AMD64 to fix FTBFS problems. + (Closes: #360661, #360317) + * Fix bug which caused mke2fs -j to fail with an EBUSY error. (Closes + #360652) + + -- Theodore Y. Ts'o Sun, 9 Apr 2006 23:04:15 -0400 + +e2fsprogs (1.38+1.39-WIP-2006.03.29-2) unstable; urgency=low + + * Added missing build dependency on libdevmapper-dev. (Closes: #360046) + + -- Theodore Y. Ts'o Thu, 30 Mar 2006 12:33:30 -0500 + +e2fsprogs (1.38+1.39-WIP-2006.03.29-1) unstable; urgency=low + + * Add udeb: lines to the Debian's shlibs files (Closes: #356293) + * Enhance dumpe2fs to print the size of the journal + * Fix e2sprogs so that it is 32-bit clean on x86 platorms. + * Fix mklost+ound so that it creates a full-sized directory on 4k and + larger block sizes. + * Add mke2fs.conf coniguration file to conigure mke2fs's defaults + * Add devmapper support to the blkid library. + * E2fsck, resize2fs and mke2fs will now open the filesystem device in + exclusive mode + * Fix documentation and man pages. (Closes: #351268, #357951, #347295, + #316040) + * Cix "mke2fs -O resize_inode" for very large filesystems (Closes: #346580) + * Add on-line resizing support into resize2fs + * Fix blkid's handling of verification timeouts when the system clock is + insane + * Fix library Makefiles so they work with GNU make 3.81 as well as GNU + make 3.80. + * Enhance the blkid library to display the uuid of external journals for + ext3 filesystems + * Enhance e2fsck so it will fix the external journal hint in the + superblock if it is out of date. + * Fix debugfs's icheck to correctly report the owner of an EA block + * Update Sweedish translation + * Add a configuration parameter to e2fsck.conf to control whether or not + filesystem checks are done when the system is running on battery power. + * Print an explanation when skipping a check due being on battery + (Closes: #350306) + * Update French translation (Closes: #341911, #300871, #316604, #316782, + #330789) + + -- Theodore Y. Ts'o Wed, 29 Mar 2006 20:37:27 -0500 + +e2fsprogs (1.38+1.39-WIP-2005.12.31-1) unstable; urgency=medium + + * New upstream version + * Update profile library code base + - Allow tag and section names to have quoted strings + - Make the profile library support reading files in a conf.d directory + - Slightly change the parser to support comments at the end of all lines + - Add syntax error reporting + - Simplify profile code + - Add E2FSCK_CONFIG environment variable which overrides where to + find /etc/e2fsck.conf + - Make e2fsck's filesystem problem handing configurable + - Fix FTBFS bug if comerr-dev is not installed. (Closes: #345519) + * Update Dutch, Polish, and Swedish translations. (Closes: #343149) + * Fix a fd leak across an exec in libuuid. (Closes: #345832) + * Address override file disparities + * Make urgency be medium to accelerate a workaround to Debian's buggy + initscripts (See Debian bugs: #343662, #343645) + + -- Theodore Y. Ts'o Fri, 6 Jan 2006 21:41:06 -0500 + +e2fsprogs (1.38+1.39-WIP-2005.12.10-2) unstable; urgency=low + + * Make resize2fs expand or truncate a file containing a filesystem. + (Closes: #271607) + * Add support for lib64ext2fs-nopic.a for the mips architecture + (Closes: #329074) + * Deal with the fact that Debian's boot sequence bogusly doesn't set the + time correctly until very late in the boot process; so if the + superblock's last mount or write time is in the future, don't treat + this as a fatal error. (Closes: #343662, #343645) + * Move the blkid and uuidgen binaries out of libblkid1 and libuuid1 and + into the e2fsprogs package to support soname transitions and + simulaneous installs of multiarch flavors to coexist. (It's not worth + creating two whole new packages for two separate binaries, so we just + fold them into e2fsprogs.) (Closes: #330737, #330736) + * Optionally allow the user to interrupt e2fsck "safely" during a boot + sequence without causing the boot scripts to abort. (Closes: #150295) + * Update and clarify man pages (Closes: #312515) + + -- Theodore Y. Ts'o Sat, 31 Dec 2005 01:05:35 -0500 + +e2fsprogs (1.38+1.39-WIP-2005.12.10-1) unstable; urgency=low + + * Update and clarify man pages (Closes: #329859, #322188, #316811) + * Fix bug creating external journals on big-endian machines. + * Detect if the superblock's last mount time or last write time is in + the future, and offer to fix it if this is the case (Closes: #327580) + * Add new debugfs command, set_current_time which sets the time used to + update the filesystems's time fields. + * Fix display bug in badblocks -sw when printing the "done" message. + (Closes: #322231) + * Improve blkid's FAT/VFAT filesystem detection code so that it can find + labels stored the root directory and to be more correct/paranoid. + * Add support to extract iso9660 label information to the blkid library. + * Add support to detect the reiser4 filesystem to the blkid library. + * Add support for detecting software suspend partitions to the blkid library. + * Fix the blkid library to notice when an ext2 filesystem is upgraded to + ext3. + * Fix debugfs's set_inode_field so that successfully sets the i_size field + * Updated Dutch translation + * E2fsck will stop and print a warning if the user tries running a + read/write badblocks test on a read-only mounted root filesystem. + * Add resize2fs and badblocks to the e2fsprogs udeb + (Closes: #290429, #310950) + * Avoid trying to mount the root device if it is an NFS device. + (Closes: #310428) + + -- Theodore Y. Ts'o Sat, 10 Dec 2005 22:49:47 -0500 + +e2fsprogs (1.38-2) unstable; urgency=low + + * Previous NMU acknowledged (Closes: #317862, #320389) + * Fix debugfs's set_inode_fields command so it doesn't silently fail + when setting certain inode fields. + * Fix e2fsck from segfaulting on disconnected inodes that contain one or + more extended attributes. (Closes: #316736, #318463) + * Allow mke2fs and tune2fs to take fractional percentages to the -m + option in mke2fs and tune2fs. (Closes: #80205) + * Fix a compile_et bug which miscount the number of error messages if + continuations are used in the .et file, and fix compatibility problems + with MIT Kerberos 1.4 + * Add extra sanity checks to protect users from unusual cirucmstances + where /etc/mtab may not be sane, by checking to see if the device is + reported busy (works on Linux 2.6) kernels. (Closes: #319002) + * Fix use-after-free bug in e2fsck when finishing up the use of the + e2fsck context structure. + + -- Theodore Y. Ts'o Sun, 21 Aug 2005 23:35:29 -0400 + +e2fsprogs (1.38-1.1) unstable; urgency=low + + * NMU for RC bug durring bug squishing party + * Fix for changes to texi2html, patch by Matt Kraai + (Closes: #317862, #320389) + * version build-depend on texi2html, won't work with older one anymore + + -- Blars Blarson Fri, 5 Aug 2005 04:46:54 +0000 + +e2fsprogs (1.38-1) unstable; urgency=low + + * New upstream version + * Fix ia64 core dump bug caused by e2fsprogs running afoul of C99 strict + type aliasing rules on newer gcc compilers. (Addresses Red Hat + Bugzilla ##161183.) + * Fix minor typo's in tune2fs man page. + * Mke2fs will refuse to create filesystems greater than 2**31-1 blocks, + unless forced, to avoid kernel bugs that still need to be fixed as + of this release. + * Update French, Dutch, Polish, Swedish, and Turkish translations. + + -- Theodore Y. Ts'o Wed, 30 Jun 2005 20:02:42 -0400 + +e2fsprogs (1.37+1.38-WIP-0620-1) unstable; urgency=low + + * Update and clarify man pages. + * Clarify and clean up e2fsck's problem descriptions + * Add Dutch translation, and update French, Polish, Swedish, and + Turkish translation. + * mke2fs and badblocks will check to see if the device appears to be + busy and abort if so; this feature only works on Linux 2.6 systems. + (Closes: #308594) + * Fix filefrag so that it works on 64-bit platforms where the size of + an integer != the size of a long. (Closes: #309655) + * Change the default journal size to be bigger for larger filesystems, + given modern memory sizes. + * Fix com_err library so it is compatible with MIT krb5 1.4. + + -- Theodore Y. Ts'o Mon, 20 Jun 2005 17:11:29 -0400 + +e2fsprogs (1.37+1.38-WIP-0509-1) unstable; urgency=low + + * Make the blkid library much more efficient when a new device is added + on systems with a huge number of disks. + * Fix handling of the PAGER and SS_READLINE_PATH environment variables + in the ss library, and the TEST_IO_* environemnt vaiables for the + test_io io_manager, which was accidentally broken in 1.37-1. + * Fix libblkid's recognition of cramfs filesystems, and add support for + cramfs labels. + * Fix filefrag to give correct results when the first block found is an + indirect block. (Closes: #307607) + * Fix debugfs seg fault when the stat command is given and a filesystem + is not open. + * Improve environment variable paranoia checks. + * Fix e2fsck's handling of multiply claimed blocks involving the resize + inode. + * When determining the libraries needed for the initrd, unset LD_PRELOAD + and LD_LIBRARY_PATH and filter out libraries found in + /etc/ld.so.preload. (Closes: #304003) + * Update Swedish translation, and added translation for Rwanda. + * Minor man page spelling/typo fixes. (Closes: #304591, #304592, + #304594, #304597, #304593) + + -- Theodore Y. Ts'o Mon, 9 May 2005 09:10:20 -0400 + +e2fsprogs (1.37-2) unstable; urgency=low + + * Fix filefrag so that it works non ext2/3 filesystems again. + (Closes: #303509) + * Make sure we include stdlib.h to fix a core dump bug in mke2fs on the + IA64 architecture (or other platforms where sizeof(ptr) > sizeof(int)) + (Closes: #302200) + * Add missing return values so that we don't return garbage in certain + error cases in ext2fs_write_new_inode() and ext2fs_read_int_block(). + * Fix minor spelling typo in the mke2fs man page + * Avoid doing the LOW_DTIME checks if the superblock last mount time + indicates that the system clock may not be set correctly. + * Add further paranoia checks to the blkid, ext2fs, and ss libraries to + make them safe to call from setuid or setgid applications. + + -- Theodore Y. Ts'o Sat, 9 Apr 2005 11:08:04 -0400 + +e2fsprogs (1.37-1) unstable; urgency=low + + * New upstream release. + * Fixed a bug in e2fsck so it would notice if a file with an extended + attribute block was exactly 2**32 blocks, such that i_blocks wrapped + to zero. + * Fixed a bug in filefrag which caused it to falsely report a + discontinuity when there are one or more unallocated blocks at the + beginning of a file. + * Fix the missing translations (caused by a bug in the gen-tarball + script). (Closes: #296769) + * Add support in e2fsck and debugfs for extended attributes in inodes. + * Fix the missing translations (caused by a bug in the gen-tarball script). + (Closes: #296769) + * Force compile_et and mk_cmds to use /usr/bin/awk so that we will work + on any Debian system regardless of which version of awk is installed. + (Closes: #299341) + + -- Theodore Y. Ts'o Thu, 21 Mar 2005 22:31:08 -0500 + +e2fsprogs (1.36release-1) unstable; urgency=low + + * New upstream release. + * Make filefrag print the first and last blocks when in verbose mode. + * Drop sparc assembly bitops; it's less efficient than gcc 3.4's + generated code, and it triggers compiler warnings on sparc 64. + (Closes: #232326) + + -- Theodore Y. Ts'o Fri, 4 Feb 2005 20:58:35 -0500 + +e2fsprogs (1.36rc5-1) unstable; urgency=low + + * Make blkid -t work more consistently even when the cache file is not + available or set to /dev/null. (Closes: #292425) + * Don't ever use a blocksize greater than 4k, since not all 2.6 kernels + will support this. + * Fix bug where mke2fs would not correctly create filesystems greater + than 4TB. + * Fix e2fsck so it won't delete symlinks that contain an extended + attribute after the ext_attr feature flag has been cleared. + * Fix e2fsck's resize inode handling in some additional corner cases. + + -- Theodore Y. Ts'o Thu, 27 Jan 2005 22:44:31 -0500 + +e2fsprogs (1.36rc4-1) unstable; urgency=low + + * Fix a bug in resize2fs where we don't release the blocks belonging to + the old inode table blocks when we move the inode table. + (Closes: #290894) + * Make sure that we don't write garbage when writing a large inode. + * Check NTFS ahead of other filesystems since Windows doesn't always + clearing enough of the partition to avoid false positives with older + filesystems. (Closes: #291990) + * E2fsck now checks the summary filesystem accounting information, and + if any of the information is obviously wrong, it will force a full + filesystem check. (Closes: #291571) + * Clarified and updated tune2fs and blkid man pages + * Fix e2fsck to not complain when the resize_inode feature is enabled, + s_reserved_gdt_blocks is zero, and there is no DIND block allocated in + the resize inode. + * Fix blkid -t to display all devices that match the specified criteria, + not just the first one. (Closes: #290530) + * Add support for the blkid library to recognize Oracle ASM volumes. + * Add set_super_value jnl_blocks[] in debugfs. + * Fix the filefrag program so that it works correctly with sparse files. + * Fix portability problems with FreeBSD, Solaris, and Intel C++ 8.1. + * Add support for FreeBSD and Lites as OS Creator values. + + -- Theodore Y. Ts'o Wed, 26 Jan 2005 10:22:02 -0500 + +e2fsprogs (1.36rc3-2) unstable; urgency=low + + * Remove debugging printf's from e2image's -s code. + + -- Theodore Y. Ts'o Wed, 19 Jan 2005 02:25:53 -0500 + +e2fsprogs (1.36rc3-1) unstable; urgency=low + + * New upstream release + * Update Italian, French, and Turkish translations + * Fixed file descriptor leak in the filefrag program + * Add -s option to e2image which scrambles directory entries when making + raw image files + * Make sure e2fsck doesn't crash if /proc/acpi/ac_adapter does not + exist + * Added Solaris, FreeBSD portability fixes + + -- Theodore Y. Ts'o Wed, 19 Jan 2005 00:33:31 -0500 + +e2fsprogs (1.36rc2-1) unstable; urgency=low + + * New upstream release + * Update Italian translation + * Add support for swap partition labels and uuid's + + -- Theodore Y. Ts'o Tue, 11 Jan 2005 14:12:17 -0500 + +e2fsprogs (1.36rc1-1) unstable; urgency=low + + * Fix a FTBFS bug for amd64/gcc-3.0 (Closes: #289133) + * Minor man page clarifications. (Closes: #273679) + * Add support for online resizing via the resize inode. + * Badblocks will now correctly display block numbers greater than + 999,999,999 in its progress display. + * tune2fs will not allow the user from setting a ridiculous number of + reserved blocks which would cause e2fsck to assume the superblock + was corrupt. E2fsck's standards for what is a ridiculous number + of reserved blocks has also been relaxed to 50% of the blocks in + the filesystem. + * The blkid library will return vfat in preference to msdos, and ext3 in + preference to ext2 (if the journalling flag is set) so that mount + will do the right thing. (Closes: #287455) + * The fsck program will now accept an optional filedescriptor argument + to the -C option. + * Mke2fs will now use the -E option for extended options; the old -R + (raid options) option is still accepted for backwards compatibility. + * Fix a double-free problem in resize2fs. (Red Hat Bugzilla #132707) + * Mke2fs will now accept a size in megabytes or gigabytes (via "32m" or + "4g" on the command line) if the user finds this more convenient + than specifying a block count. + * Fix an obscure, hard-to find bug in "e2fsck -S" caused by an inode + cache conherency problem. + * Debugfs now supports a new command, set_inode_field, which allows a + user to manually set a specific inode field more conveniently, as + well as set entries in the indirect block map. + * Debugfs's set_super_value command has been enhanced so that the user + can set most superblock fields, including the date/time fields and + some of the more newsly added superblock fields. + * E2fsprogs programs now accept an offset to be passed to the file + specifiers, via the syntax: "/tmp/test.img?offset=1024" + * E2fsprogs will now accept blocksizes up to 65536; kernel support on + the x86 doesn't exist, but it is useful on other architectures. + * Fix bug in debugfs where kill_file would lead to errors when deleting + devices and symlinks. (Sourceforge Bugs #954741 and #957244) + * Fix bug in the blkid library when detecting the ocfs1 filesystem + * Updated Italian translation file + * E2fsck will now recover from a journal containing illegal blocks. + + -- Theodore Y. Ts'o Fri, 7 Jan 2005 20:22:36 -0500 + +e2fsprogs (1.35-9) unstable; urgency=low + + * Minor man page clarifications. (Closes: #273679) + + -- Theodore Y. Ts'o Tue, 28 Sep 2004 10:29:29 -0400 + +e2fsprogs (1.35-8) unstable; urgency=low + + * Remove double "//" when listing attributes in the root directory or + when there is a trailing '/' in the directory name. (Closes: #272943) + * Make sure the configure files are newer than configure.in the + debian/rules file so that a dpkg-source created patch won't + trigger an attempt rebuild of the configure script. + (Closes: #272558, #273242) + * Make sure /usr/lib/e2initrd_helper is in the e2fsprogs package. + (Closes: #272698, #272728, #273161, #273163) + * Only use blocksizes > 4k on Linux 2.6 and newer systems. (Closes: #271064) + + -- Theodore Y. Ts'o Sat, 25 Sep 2004 07:37:52 -0400 + +e2fsprogs (1.35-7) unstable; urgency=low + + * Make sure "done" gets correctly translated in badblocks(8), and update + French translation (Closes: #252836) + * Always build the fsck wrapper on Debian systems (Closes: #248050) + * Filter out linux-gate.so, which is a pseudo entry for the 32->64bit + translation for amd64 systems, in the initrd creation script. + (Closes: #253595) + * Change the initrd scripts to be use a helper program which avoids + needing to mount the root filesystem and use awk to query the + /etc/fstab file. (Closes: #247775) + * Add support for the ocfs2 filesystem to the blkid library. + * Various portability fixes for Hurd and FreeBsd, as well as + removing XSI:isms. (Closes: #256669, #264630, #269044, #255589) + * Update config.guess and config.sub from the FSF. + * Minor manual page clarifications (Closes: #268148) + * Fix write ordering problems to make e2fsck more robust in the face + of system crashes while replaying the journal, etc. + * Fix debugging printf in resize2fs. (Closes: #271605) + * Add debugfs -d option to use a separate source of data blocks when + reading from an e2image file. + * Add e2image -I option which allows the e2image metadata to be + installed into a filesystem. + * Change e2fsck to accept directories greater than 32MB. + * Add test_io mechanisms to abort after reading or writing to a + particular block. + * Fix blkid file descriptor and memory leak. + + -- Theodore Y. Ts'o Sat, 18 Sep 2004 09:58:46 -0400 + +e2fsprogs (1.35-6) unstable; urgency=low + + * In the mkinitrd script, make sure the directories exist before + trying to copy in the needed shared libraries. (Closes: #244058, #246480) + * In the mkinitrd script, use LD_ASSUME_KERNEL=2.4 if necessary. + (Closes: #245931) + * In the mkinitrd script copy in /usr/bin/awk instead of /usr/bin/mawk. + (Closes: #245670) + * In the initrd script, fail quietly if /mnt/etc/fstab does not exist. + (Closes: #246917) + * Minor updates to German translation (Closes: #244105) + * Since woody's sysvinit package is before the initscripts were broken out + we need an explict Conflict: sysvinit (<< 2.85-4) header. (Closes: #243829) + * Update the UUID library man pages + * Fix a Y8.8888K potential problem with the uuid library + * Minor updates to the german translation + * Clarified/corrected the copyright statements of the UUID and blkid + libraries in the Debian copyright files. + * Added sanity check to the blkid library so that if current time is + less than last time a device is verified, force a reverification since + it means the system time is not trustworthy. + + -- Theodore Y. Ts'o Tue, 4 May 2004 16:23:06 -0400 + +e2fsprogs (1.35-5) unstable; urgency=low + + * Add uuid_unparse_upper() and uuid_unparse_lower() functions to the + uuid library. + * Address GNU/KFreeBSD portability issues (Closes: #239934) + * Use unsigned for 1 bit wide bitfields in header files to avoid + Intel C++ compiler warnings. + * Use C99 stdint.h types in the uuid library + * Fix up and cleanup uuid man pages + * Change the licensing of the uuid man pages to be 3-clause BSD. + * Fix the initrd scripts so that the automatic ext3 journal + conversion actually works correctly; also allow conversion of the root + filesystem from ext3 back to ext2 (Closes: #241183) + * Minor man page fixes (Closes: #241940, 242995) + * Use the DEBUGFS_PAGER environment variable in preference to PAGER + (Closes: #239547) + * Added French translation + * Be flexible about the name of the ACPI device that cooresponds to + the AC adapter (Closes: #242136) + + -- Theodore Y. Ts'o Mon, 12 Apr 2004 12:38:34 -0400 + +e2fsprogs (1.35-4) unstable; urgency=low + + * Fix bug in the blkid library (introduced in 1.35-3) which caused + the probe function to completely malfunction. (Closes: #239191) + * Make the debugfs command's link command set the filetype information + correctly. + * Update the Polish, Swedish, and Turkish translations + * Add an -o option to the blkid program which allows the user to + control the output format of blkid. + * Fixed and cleaned up the tune2fs and blkid man pages (Closes: #238741) + * Improve UUID generation algorithm (use all 14 bits in the clock sequence) + * Change the license on the UUID library to be 3-clause BSD. + * Remove the only-partially-implemented -p option to blkid. + + -- Theodore Y. Ts'o Sun, 21 Mar 2004 20:17:03 -0500 + +e2fsprogs (1.35-3) unstable; urgency=low + + * Mention e2image's limitation in writing a normal image file to + stdout (Closes: #236383) + * Only use BLKGETSIZE64 on Linux 2.6 since it is unreliable on Linux 2.4. + (Closes: #236528) + + -- Theodore Y. Ts'o Mon, 8 Mar 2004 14:19:15 -0500 + +e2fsprogs (1.35-2) unstable; urgency=low + + * Use 64-bit ioctl's if present to determine the 64-bit size of a device + * Add tune2fs to the e2fsprogs udeb package (Closes: #235639) + + -- Theodore Y. Ts'o Tue, 2 Mar 2004 10:13:39 -0500 + +e2fsprogs (1.35-1) unstable; urgency=low + + * New upstream version. + * Fix "badblocks -t random". (Closes: #234828) + * Fix "e2fsck -k". (Closes: #234993) + * Change badblock's default number of blocks tested at once from + 16 to 64. (Closes: #232240) + * ss-dev and comerr-dev now use a versioned dependency for libss2 and + libcomerr2, respectively. (Closes: #235280) + + -- Theodore Y. Ts'o Sat, 28 Feb 2004 10:14:19 -0500 + +e2fsprogs (1.34+1.35-WIP-2004.01.31-2) unstable; urgency=low + + * Add a new -k option to e2fsck which keeps the existing badblocks + list when using the -c option. (Closes: #229103) + * Update debugfs to support new large major/minor device numbers + supported by Linux 2.6. (Closes: #865289) + * Fix makefiles so that it will build correctly with --enable-profile. + * Add -mieee when compiling with GCC on an Alpha. + * Fix e2fsck preen mode messages using pass 1B/C/D. + * Fix the debugfs man page. (Closes: #232406) + * Fix the ext2fs.h header file to work correctly with C++. + * e2fsck and debugfs now correctly deals with symlinks that have + extended attribute information, such as those created by SE Linux. + (Closes: #232328) + * Make sure filefrag actually gets compiled under Linux (Closes: #230992) + + -- Theodore Y. Ts'o Tue, 24 Feb 2004 00:16:43 -0500 + +e2fsprogs (1.34+1.35-WIP-2004.01.31-1) unstable; urgency=medium + + * Fix byte swap bugs in e2fsck that caused the journal backup location + in the superblock and symlinks created by SE Linux to be cleared + by e2fsck on big-endian machines. (Closes: #228723) + * Chattr now stops processing options when it sees '--'. (Closes: #225188) + * Add FreeBSD port fixups + * Use the DEBUGFS_PAGER environment variable in preference to PAGER. + Document that less is a really, really, really bad pager to use + for debugfs (unfortunately, Debian policy says we must use + /usr/bin/pager even if it results in very annoying behaviour for + the user since 'less' is used in preference to 'more' unless it is + globally overriden via update-alternatives(8). Oh, well. Debian + users are encouraged to set DEBUGFS_PAGER to be "more" in their + dot files to avoid this brain damage). + * Fix libuuid1-udeb so that it provides libuuid1. (Closes: #229633) + * Fix bug in uuid library when there is no network card and the + library is generating a time-based uuid. The random MAC address + was not correctly generated to be a multicast address. + * Install the filefrag program. + * Don't try to compile filefrag on non-Linux platforms. (Closes: #226456) + * Minor manual page clarifications (Closes: #222606, #214920) + + -- Theodore Y. Ts'o Sat, 31 Jan 2004 20:57:35 -0500 + +e2fsprogs (1.34+1.35-WIP-2003.12.07-2) unstable; urgency=low + + * Fix test for /etc/mkinitrd/scripts/e2fsprogs to make sure it gets + removed. (Closes: #213275) + * Debugfs now searches for the appropriate pager to use, beginning + with /usr/bin/pager, and then falling back to 'less' and 'more'. + (Closes: #221977) + * Fixed mangled encoding in Czech locale file. (Closes: #214633) + * Fix bug where using debugfs to copy a file from /dev/null caused + in correct mode bits. (Closes: #217456) + * Fixed a bug where e2fsck would bomb out if a journal needed to be + replayed when using an alternate superblock. + * Minor manual page fixups/cleanups. + * Debugfs's mkdir command will automatically expand the directory if + necessary. (Closes: #217892) + * Fix a bug in e2fsck which caused it to incorrectly fix a filesystem + when reconnecting a directory requires creating a lost+found + directory. (Closes: #219640) + * Add Spanish translation. + + -- Theodore Y. Ts'o Wed, 24 Dec 2003 14:24:14 -0500 + +e2fsprogs (1.34+1.35-WIP-2003.12.07-1) unstable; urgency=medium + + * Added regression tests for mke2fs and dumpe2fs. + * Support 2.6 kernel header files. (Closes: #221778) + * Fix bug which could a core dump if a non-existent LABEL or UUID + specifier is passed to e2fsck or tune2fs. + * Fix handling of corrupted indirect blocks in the bad block inode. + * If the number of mounts until the next forced filesystem check is less + than 6, mention this to the user. (Closes: #157194) + * E2fsck will try to avoid doing a forced filesystem chcek if a system + is running on batteries according to APM or ACPI. (Closes: #205177) + * Fix problems in the German translation. (Closes: #2000086) + * Updated Swedish translation and added Polish translation. + * Fix signed vs unsigned bug which could cause the com_right function to + seg fault. (Closes: #213450) + * Add libuuid1-udeb (Closes: #221777) + + -- Theodore Y. Ts'o Sat, 22 Nov 2003 11:51:13 -0500 + +e2fsprogs (1.34+1.35-WIP-2003.08.21-3) unstable; urgency=low + + * Adjust the man page descriptions so that "apropos ext2" or + "apropos ext3" will find all of the e2fsprogs man pages. + (Closes: #206845) + * Protect against a potential core dump in e2fsck when printing a + message about a backup superblock. + * Fix a bug in mke2fs which caused -T largefile or -T largefile4 to + core dump due to a division by zero error. (Closes: #207082) + * Force e2fsprogs to use the matched version of e2fslibs. (Closes: #208103) + + -- Theodore Y. Ts'o Sun, 31 Aug 2003 21:49:52 -0400 + +e2fsprogs (1.34+1.35-WIP-2003.08.21-2) unstable; urgency=low + + * When moving the journal or backing up the journal inode + information, make sure e2fsck updates all the superblocks, and not + just the master superblock. + * Change the priority of libblkid1-udeb to be required instead of + standard, to match the override file. + + -- Theodore Y. Ts'o Thu, 21 Aug 2003 08:50:34 -0400 + +e2fsprogs (1.34+1.35-WIP-2003.08.21-1) unstable; urgency=low + + * Fix compile_et to output the correct prototype for + initialize_xxx_err_table_r() in the header file. (Closes: #204332) + * E2fsck will avoid printing ^A and ^B characters bracketing the + progress bar when stdout is a tty device. (Closes: #204137) + * Add support for storing the journal inode location in the superblock + so that e2fsck can recover from a corrupted inode table after a power + failure. + * Move the initrd script from /etc/mkinitrd/scripts to + /usr/share/initrd-tools/scripts so that mkinitrd will not remove + the file when it is uninstalled. (Closes: #204019) + * Remove unneeded files in debian directory: blkid-dev.substvars and + e2fsprogs-bf.lintian-overrides. (Closes: #203914) + * Support "noopt" in DEB_BUILD_OPTIONS instead of "debug". + (Closes: #203914) + + -- Theodore Y. Ts'o Thu, 21 Aug 2003 01:47:58 -0400 + +e2fsprogs (1.34+1.35-WIP-2003.08.01-1) unstable; urgency=low + + * Fix O_DIRECT test to prevent badblocks from screwing up after + finding a bad block. (Closes: #203713) + * Add Heimdal compile_et extensions from Philipp Thomas (pthomas@suse.de) + * Fix potential pointer aliasing bugs caused by type-punning and gcc 3.x + + -- Theodore Y. Ts'o Fri, 1 Aug 2003 13:44:58 -0400 + +e2fsprogs (1.34-2) unstable; urgency=low + + * Fix erroneous reference to /usr/share/doc/e2fsprogs/html-info in + /usr/share/doc-base/libext2fs (Closes: #203157) + * Explicitly specify the version of libblkid1 needed in + e2fsprogs.shlibs.local in order to avoid picking up the wrong depedency. + (Closes: #203157) + * Changed priority of libblkid1-udeb to be standard, not required. + + -- Theodore Y. Ts'o Wed, 30 Jul 2003 19:47:32 -0400 + +e2fsprogs (1.34-1.1) unstable; urgency=low + + * Non-maintainer upload. + * don't call ldconfig in udebs. + * fix dependencies of e2fsprogs-udeb. + + -- Bastian Blank Tue, 29 Jul 2003 12:11:54 +0200 + +e2fsprogs (1.34-1) unstable; urgency=low + + * New upstream version. + * Fixed bug in fsck which caused it to waste CPU by spinning while + waiting for a child fsck process under some circumstances. + * Fixed bug in blkid library which would cause it to spin forever if + /proc is not mounted and /etc/blkid.tab is not present. + * Improved the blkid library's UDF's probing functions. + * Fixed the blkid library so it will remove delete the LABEL + attribute from its cache when a filesystem that previously had a + label no longer has one. + * Added Swedish translation. + * Remove debugging printf in badblocks program (Closes: #201499) + * Split shared libraries out of the e2fsprogs package into separate + packages: libss2, libcomerr2, libuuid1, and e2fslibs. (Closes: #201155, + #201164) + * Warn the user when creating a filesystem with a journal and a blocksize + greater than 4096, since some kernels don't support ext3 with large + block sizes. (Closes: #193773) + + -- Theodore Y. Ts'o Sat, 26 Jul 2003 01:01:55 -0400 + +e2fsprogs (1.33+1.34-WIP-2003.05.21-2) unstable; urgency=low + + * Set up FreeBSD configuration defaults (Closes: #195274) + * Clarify resize2fs man page (Closes: #195616) + * Fix resize2fs to deal with filesystem with bad blocks + * Fix spelling error in e2fsck + * Add workaround for intl library on Darwin + * Fix gcc -Wall nitpicks + * Round down the default size of the filesystem for mke2fs and + resize2fs to be a multiple of the pagesize to work around a potential + Linux kernel bug + * Fix bug in mke2fs where it could die with a floating exception if + the device does not support the BLKSSZGET ioctl (Closes: #196734) + * Add conflicts against older versions of sysvinit that don't correctly + handle an exit code that has the bit #2 set. (Closes: #183675) + * Badblocks will attempt to use O_DIRECT if it is safe to do so. + (Closes: #198006) + * Use symbolic links for fsck.ext{2,3} and mkfs.ext{2,3} in the udeb + package since busybox tar can't deal with hard links. (Closes: #196508) + + -- Theodore Y. Ts'o Sat, 12 Jul 2003 03:16:08 -0400 + +e2fsprogs (1.33+1.34-WIP-2003.05.21-1) unstable; urgency=low + + * Fix problems with compiling e2fsprogs with NLS support on woody + (Closes: #193372) + * Remove the extraneous de-utf.po file. + * Add get-text to build-depends. + * Use ngettext (abbreviated with P_()) to simplify the statistics reporting. + * Fix badblocks to be able to support arbitrary 4 byte test patterns. + * Fix bug which caused us to accidentally include the EVMS plugin in + the e2fsprogs package (which doesn't work, but causes confusing messages + to show up when the evms client is started). + * If the hardware sector size of a device is larger than the default + blocksize, use the hardware sector size as the blocksize when creating + a filesystem, to solve problems with s/390 DASD's. + * Add a shared library dependency to libuuid to libblkid (Closes: #194094) + * Add initial implementation of a dump_unused command (Closes: #79164) + + -- Theodore Y. Ts'o Sun, 18 May 2003 01:24:16 -0400 + +e2fsprogs (1.33-5) unstable; urgency=low + + * Clarify blocksize units when displaying messages in resize2fs, and + support using suffixes (sectors, kilobytes, megabites, gigabytes) + to the size parameter to indicate units. (Closes: #189814) + * Fix debugfs core-dumping problem caused by getopt. (Works around: #192834) + * Add package dependency to shlibs for comerr to indicate support + for kth compatibility. (Closes: #193096) + + -- Theodore Y. Ts'o Tue, 13 May 2003 23:45:08 -0400 + +e2fsprogs (1.33-4) unstable; urgency=low + + * Add replaces field to comerr-dev to resolve a file conflict with + /usr/include/com_err.h and the libkrb5-dev package. (Closes: #192277) + * Add -t option to badblocks to control the test pattern used. + * Remove e2fsprogs-bf package, as it is obsolete. (Closes: #183453) + * Remove NLS support from e2fsprogs-udeb. Save 5.5k on the boot + floppies / install media. + + -- Theodore Y. Ts'o Thu, 8 May 2003 10:25:05 -0400 + +e2fsprogs (1.33-3) unstable; urgency=low + + * Add full Heimdall/Kerberos4-kth compatibility to com_err routines. + * Declare comerr-dev as replacing << e2fslibs-dev 1.33-2, to avoid + errors when upgrading to the new versions of comerr-dev and + e2fslibs-dev + + -- Theodore Y. Ts'o Tue, 6 May 2003 00:29:47 -0400 + +e2fsprogs (1.33-2) unstable; urgency=low + + * Fix up NLS support + - Fix message abbreviations support (i.e., @g --> group) + - Update to gettext 0.11.5 + - Add Czech translation + - Install message catalogs + - Other miscellaneous NLS bug fixes + * Add new debugfs command, imap, which prints the location of a + specified inode in the inode table. + * Put /usr/include/com_err.h in comerr-dev instead of e2fslibs-dev. + (Closes: #191899) + * Add support for OV-style continuations in compile_et. (Closes: #191900) + + -- Theodore Y. Ts'o Mon, 5 May 2003 18:13:12 -0400 + +e2fsprogs (1.33-1) unstable; urgency=low + + * New upstream version (Closes: #189687) + + -- Theodore Y. Ts'o Mon, 21 Apr 2003 13:49:52 -0400 + +e2fsprogs (1.32+1.33-WIP-2003.04.14-1) unstable; urgency=low + + * New upstream version + - Add new utility program, logsave, to capture the output of fsck + during the boot sequence + * Add support for the -a and -s options to logsave. + * Change e2fsck to bracket its progress bar output with ctrl-A and ctrl-B + characters, so that logsave -s can omit writing the progress bar output + to the log file. + * Avoid printing the version banner for mke2fs if the -q option is + specified. (Closes: #172716) + + -- Theodore Y. Ts'o Wed, 16 Apr 2003 15:27:20 -0400 + +e2fsprogs (1.32+1.33-WIP-2003.03.30-3) unstable; urgency=low + + * Provide /usr/include/com_err.h, which was previously provided by the + libkrb5-dev package + * Change the sectoin of com_err-dev, ss-dev, uuid-dev, libblkid-dev, + e2fslibs-dev to libdevel + * Add libblkid1-udeb package for the Debian Installer. + * Use the SS_READLINE_PATH environment variable to control the search + for a suitable readine library. + * Fix bug in mke2fs, which was was incorrectly checking the argument + to the -g option if the default block size is used. (Closes: #188319) + * Update man pages. (Closes: #188318) + * Mke2fs can be given a minimum block size by passing in a negative + number to the -b option. + * Update to standards 3.5.9 + + -- Theodore Y. Ts'o Sat, 12 Apr 2003 02:52:17 -0400 + +e2fsprogs (1.32+1.33-WIP-2003.03.30-2) unstable; urgency=low + + * Fix XFS superblock definition. Add support to extract UUID and + labels for JFS and ROMFS. + * Make the random number generator more paranoid about potentially buggy + /dev/random devices. + * The badblocks program now flushes its output as it discovers bad blocks. + * Imported bug fixes to EVMS driver from the EVMS 2.0 tree. Fixed a + few potential hangs, and eliminated a file descriptor leak. + * E2fsck now updates the global free block and inode counters from + the block group specific counters quietly. This is needed for an + experimental kernel patch which improves SMP scalability by not + locking the entire filesystem during block or inode allocation; if + the filesystem is not unmoutned cleanly, the global counts may not + be accurate. + * Fix a bug in fsck which can cause it to hang trying to access the + floppy disk if there the floppy drive has filesystem type of + 'auto'. (Closes: #187812) + + -- Theodore Y. Ts'o Sun, 6 Apr 2003 23:13:50 -0400 + +e2fsprogs (1.32+1.33-WIP-2003.03.30-1) unstable; urgency=low + + * Change compile_et to generate header files that use + instead of , so the current version of the header file + is used. Remove legacy K&R, varargs, and pre-POSIX signal support. + * Fix (one more time!) Apple Darwin port in blkid/getsize.c + + -- Theodore Y. Ts'o Sun, 30 Mar 2003 23:34:55 -0500 + +e2fsprogs (1.32+1.33-WIP-2003.03.25-1) unstable; urgency=low + + * New maintainer + * New upstream release (Closes: #176814, #174766, #166048, #179671, + #173612, #175233, #175113, #170497, #185945) + + -- Theodore Y. Ts'o Sun, 16 Mar 2003 18:05:08 -0500 + +e2fsprogs (1.32-2) unstable; urgency=high + + * Applied upstream patch to fix htree problems, and to deactivate it by + default in mke2fs (Closes: #181615, #179043) + * Be sure removal of libe2fsim doesn't fail, as it's not built on hurd + (Closes: #164117). + + -- Yann Dirson Fri, 21 Feb 2003 00:21:44 +0100 + +e2fsprogs (1.32-1) unstable; urgency=low + + * New upstream release (Closes: #167108). + + -- Yann Dirson Tue, 19 Nov 2002 00:18:09 +0100 + +e2fsprogs (1.29+1.30-WIP-0930-2) unstable; urgency=low + + * Made mkinitrd script to skip commented-out lines (Closes: #163251). + + -- Yann Dirson Tue, 15 Oct 2002 00:16:08 +0200 + +e2fsprogs (1.29+1.30-WIP-0930-1) unstable; urgency=low + + * New upstream prerelease. + * Replaced in mkinitrd script "tune2fs -j" with "tune2fs -O + has_journal", as suggested by Theodore Ts'o (Closes: #162949). + * Remove --disable-debugfs from mips-nopic flags (Closes: #162674). + + -- Yann Dirson Thu, 3 Oct 2002 00:05:36 +0200 + +e2fsprogs (1.29-1) unstable; urgency=low + + * New upstream release (Closes: #159423). + * Fixed typo in chattr manpage (Philipp Matthias Hahn, Closes: + #162297). + * Generate udeb package for debian-installer (Martin Sjoegren, Closes: + #162212). + * Fixed installation of mkinitrd script (don't use dh_install). Remove + it from the wrong location where it was, in preinst. Hopefully noone + noticed. + * Also have old scripts/e2fsprogs.mkinitrd removed. + * Bumped Standards-Version to 3.5.6, no change. 3.5.7 will need a bit + of work but not tonight. + + -- Yann Dirson Thu, 26 Sep 2002 01:46:25 +0200 + +e2fsprogs (1.28-5) unstable; urgency=low + + * The "this time it will work ! (famous last words)" release. + * Now that it builds, ensure the dir in which we install this damn mips + non-pic lib exists. + + -- Yann Dirson Tue, 17 Sep 2002 00:04:49 +0200 + +e2fsprogs (1.28-4) unstable; urgency=low + + * Moved setting of CFLAGS to the correct place when building the special + mips non-pic lib (Closes: #159757 again). + + -- Yann Dirson Sun, 15 Sep 2002 21:19:19 +0200 + +e2fsprogs (1.28-3) unstable; urgency=low + + * Don't use special cflags at configure time when building the special + mips non-pic lib, in yet another attempt to fix my adaptation of the + patch from the mips team. Also added --disable-nls which was present + in the original patch. + * Remove debian/BUILD-MIPS on clean. + * Install mkinitrd script as scripts/e2fsprogs, not as + scripts/e2fsprogs.mkinitrd. + + -- Yann Dirson Mon, 9 Sep 2002 23:01:31 +0200 + +e2fsprogs (1.28-2) unstable; urgency=low + + * Fixed my adapation of the mips non-pic build (Closes: #159757). + + -- Yann Dirson Fri, 6 Sep 2002 00:03:45 +0200 + +e2fsprogs (1.28-1) unstable; urgency=low + + * New upstream release. + + -- Yann Dirson Mon, 2 Sep 2002 23:34:55 +0200 + +e2fsprogs (1.27+1.28-WIP-0817-1) unstable; urgency=low + + * New upstream pre-release. Closes: #138003, #144621, #145044, #151990, + #152029, #152891, #155007, #131350, #147256, #153102. + * New binary: findfs. + * Added execute permissions to the mkinitrd script (thanks lintian). + * Don't ship FSIM for EVMS for now. + + -- Yann Dirson Sun, 25 Aug 2002 19:32:12 +0200 + +e2fsprogs (1.27+1.28-WIP-0626-2) experimental; urgency=low + + * Remove bogus shlibs deps on "e2fsprogs (>= )" + + -- Theodore Y. Ts'o Sat, 17 Aug 2002 17:59:17 -0400 + +e2fsprogs (1.27+1.28-WIP-0626-1) experimental; urgency=low + + * New upstream pre-release: + ** Supports v2 ACL format (Closes: #138160). + * Removed explicit --mandir flag, as it now uses FHS man location by + default. + * Added mkinitrd script, "upstream-contributed" ;) by Ted Ts'o (Closes: + #148064). + * Build a no-pic version of libext2fs.a on mips and mipsel, patch by + Florian Lohoff, adapted for style consistency (Closes: #145432). + * Removed presumably-useless and presumably-broken CFLAGS propagation. + If someone misses that, I'll add ${CFLAGS} to --ccopts. + + * Switched to debhelper v4. + * Added ${misc:Depends} to all packages' Depends field. + + * Fixed typos in fsck.8, added an example for clarity (Closes: + #145044). + * Fixed typo in chattr manpage (Closes: #141938). + * Fixed typo in tune2fs manpage (Closes: #148514). + + -- Yann Dirson Tue, 23 Jul 2002 00:12:33 +0200 + +e2fsprogs (1.27-2) unstable; urgency=medium + + * Urgency medium since this fixes a RC bug. + * Generate the shlibs file instead of just copying it in place, and make + it produce deps on "e2fsprogs (>= )" as well, to cope with + new functions introduced in the libs (Closes: #139274). + * Added a note on this in README.Debian. + + -- Yann Dirson Thu, 21 Mar 2002 23:58:48 +0100 + +e2fsprogs (1.27-1) unstable; urgency=low + + * New upstream release (Closes: #136737). + * No more use for dh_link'ing *.ext[23], it's now done by upstream + Makefiles. + * Only include (new) inode_io.o from libext2fs when fileio.o is, or the + BF build fails because of this additional (unused) member (upstream + hint). + + -- Yann Dirson Mon, 11 Mar 2002 00:17:32 +0100 + +e2fsprogs (1.26-3) unstable; urgency=low + + * Simple rebuild after fixing the settings of my computer's clock, so + that katie accepts to install the package. + + -- Yann Dirson Sat, 23 Feb 2002 14:53:15 +0100 + +e2fsprogs (1.26-2) unstable; urgency=low + + * Applied upstream patch dealing with the rlimit filesize variation + among archs and kernel versions (Closes: #133909). + * Create fsck.ext3.8 symlink (Closes: #121526). + + -- Yann Dirson Sat, 23 Feb 2002 06:44:02 +0100 + +e2fsprogs (1.26-1) unstable; urgency=low + + * This uploads fixes 10 bugs, including data-corruption problems, and + adds much to the ease of maintainance and problem tracking. Good + choice for woody. + + * New upstream release (Closes: #106622, #116975, #118443, #119624, + #120171, #120077, #129828, #132764). + ** Fixes for data-corruption bugs not reported to the BTS: e2fsck + trashed external journals needing to be replayed, e2fsck now hides + visible journal files (data corruption problems when not excluded from + a backup and then restored) (Closes: #132654). + ** Other noticable bugs fixed include: e2fsck null pointer + dereferencing, fsck did not finds LVM volumes by UUID or by label, + largefile support (ie. dealing with filesystems inside 2GB+ files) was + broken in several programs. + * Switch to debhelper v3 to get ldconfig automatically handled + (lintian reported that it was broken). Now call dh_makeshlibs, but + still override its generated shlibs file with ours, to get compiled + packages depend of the correct virtual packages, which include + full sonames. + * Removed call do dh_installman (Closes: #115526). + * Cleaned up maintainer scripts with dead code - most things are now + more properly handled by debhelper. Removed an "exit 0" lurking in + preinst - can't find a reason for it in the changelog, it was probably + here for ages. + * Remove obsolete maint-scripts in binary-arch, as they are provided by + upstream. + * Also remove upstream-shipped config.cache before configuring. That + shouldn't impact us, but well, that makes lintian happy :) + + -- Yann Dirson Fri, 8 Feb 2002 06:12:35 +0100 + +e2fsprogs (1.25-1) unstable; urgency=high + + * New upstream bugfix release (Closes: #112414), targeted to woody. + * com_err.info provided again now that it was fixed upstream. + * Added metainfo to com_err.texinfo so that it gets indexed correctly + (thanks lintian). Moved @setfilename and @settitle to the top so that + things get output as expected. + * Added lintian overrides for -bf and -static packages. + * Put all stamp files in debian/stampdir. + + -- Yann Dirson Sat, 22 Sep 2001 16:22:47 +0200 + +e2fsprogs (1.24a-1) unstable; urgency=high + + * New upstream release (Closes: #109577). + ** The only new code in there is in codepaths that + are only visited when previously unsupported features are used, so + they add virtually no risk. Support for raw image files will be of + great help to debug users' problems. Urgency set to "high" to make + sure this version gets released with woody. + + ** Fsck prints a warning message if now valid filesystems are passed to + it. (Closes: #107458). + ** Fsck -A will not try to interpret device names for filesystems which + have a pass number is 0. (Closes: #106696). + ** If -O none is passed to mke2fs, it will now not set the sparse_super + feature (Closes: #108165). + ** Tune2fs has been fixed to make sure that only error messages go to + stderr, and normal message go to stdout (Closes: #108555). + ** Minor man pages updates (Closes: #30833, #108174). + ** Doc fixes (Closes: #110621). + + -- Yann Dirson Tue, 4 Sep 2001 23:44:56 +0200 + +e2fsprogs (1.22-2) unstable; urgency=medium + + * This is only a trivial patch to stop some user confusion, and would be + great to have in woody, hence the urgency. + * Applied upstream patch to e2fsck to warn user when some errors were + not corrected due to user answering "no" (Closes: #104502). + + -- Yann Dirson Sat, 28 Jul 2001 23:01:49 +0200 + +e2fsprogs (1.22-1) unstable; urgency=low + + * Final 1.22 release: + ** Fixes build problems on big-endian (Closes: #101686, #101798). + + -- Yann Dirson Sat, 23 Jun 2001 14:03:17 +0200 + +e2fsprogs (1.21+1.22-WIP-0620-1) unstable; urgency=low + + * New upstream pre-release, critical for big-endian platforms + (Closes: #101752). + * Re-applied hurd fix again. + * Build e2fsprogs-bf with -Os to gain more space. + + -- Yann Dirson Fri, 22 Jun 2001 00:18:40 +0200 + +e2fsprogs (1.21-1) unstable; urgency=low + + * Final 1.21 release. + * Re-applied hurd fix that did not came quickly enough to make it in + 1.21. + * Fixed name of copyright file in e2fsprogs-bf. + + -- Yann Dirson Wed, 20 Jun 2001 22:32:08 +0200 + +e2fsprogs (1.20+1.21-WIP-0614-2) unstable; urgency=low + + * Don't build PIC libs, build a reduced version of the libs instead, in + package e2fsprogs-bf. Made this new package conflict with e2fsprogs. + * Compilation fix for the Hurd (Closes: #101361). + + -- Yann Dirson Tue, 19 Jun 2001 23:33:25 +0200 + +e2fsprogs (1.20+1.21-WIP-0614-1) unstable; urgency=low + + * New upstream pre-release (Closes: #100559, #100304). + * Fixed lib/ext2fs/Makefile.in for installation of new generated .h + file. + + -- Yann Dirson Thu, 14 Jun 2001 16:14:11 +0200 + +e2fsprogs (1.20+1.21-WIP-0608-1) unstable; urgency=low + + * New upstream pre-release (critical ext3 bugfix mostly). + * Correctly use dh_installinfo. + * Adjusted various things accordingly. + + -- Yann Dirson Sat, 9 Jun 2001 00:25:51 +0200 + +e2fsprogs (1.20-4) unstable; urgency=low + + * Cleanup generated substvars files now that debhelper uses other + names (may cause problems on other archs). Build-dep on debhelper + 3.0.30 or newer to be sure it won't cause broken uploads. Allows to + get rid of hairy dep, but cannot build straightforwardly on potato any + more... + + -- Yann Dirson Wed, 6 Jun 2001 02:33:32 +0200 + +e2fsprogs (1.20-3) unstable; urgency=low + + * Create all symlinks to uuid-generate.3 (Closes: #99573). + * Somewhat modernized debian/rules (debhelper v2, etc.). + * Fixed libss2 copyright file. + * Fixed e2fslibs-pic short description. + + -- Yann Dirson Wed, 6 Jun 2001 01:19:19 +0200 + +e2fsprogs (1.20-2) unstable; urgency=low + + * Added support for building pic libs to Makefile.elf-lib. + * New package e2fslibs-pic for boot-floppies team (Closes: #99285). + * Use -N on dh_gencontrol instead of lots of -p. + + -- Yann Dirson Thu, 31 May 2001 23:59:51 +0200 + +e2fsprogs (1.20-1) unstable; urgency=low + + * Final 1.20 release. + * Added new zsh-static to the list of possible static shells recommended + by e2fsck-static. + + -- Yann Dirson Mon, 28 May 2001 21:39:06 +0200 + +e2fsprogs (1.19+1.20-WIP-0520-1) unstable; urgency=low + + * New upstream pre-release snapshot: + ** Extended "fsck -t" syntax (Closes: #89483). + ** Fix handling of devices for which fsck can't determine a physical + spindal, causing lockup when checking LVM volumes (Closes: #98103). + ** Fixed typo in e2fsck-static description - thanks Ted :). + * Fixed small compilation bug in fsck.c + + -- Yann Dirson Mon, 21 May 2001 20:47:10 +0200 + +e2fsprogs (1.19+1.20-WIP-0514-2) unstable; urgency=low + + * Tighten dependency on debhelper. + + -- Yann Dirson Tue, 15 May 2001 21:38:47 +0200 + +e2fsprogs (1.19+1.20-WIP-0514-1) unstable; urgency=low + + * New upstream pre-release snapshot: + ** new program: e2image. + ** e2fsck validates file descriptor specified in -C (Closes: #55220) + ** Fix multiple progress bar fsck bug (Closes: #65267) + ** Add devfs support to fsck (Closes: #94159) + ** Fix debugfs dump cmd looping on disk errors (Closes: #79163) + ** Miscellaneous manual page clarifications (Closes: #63442, #67446, + #87216) + ** Compilation fixes for Hurd (Closes: #52045). + ** New config.{guess,sub} for parisc support (Closes: #94690). + ** Improved ext3 support + ** tune2fs can now safely modify mounted filesystems + * Added missing @dircategory entry to libext2fs.info (lintian) + * Moved debugfs back from /usr/sbin/ to /sbin/ (Closes: #97035). + * Moved e2label back to /sbin/ as well, as it is now a hard link to + tune2fs. + * New binary package with statically linked e2fsck, recommending a + statically linked shell (Closes: #62611). + * All deps against e2fsprogs itself now versionned (lintian). + * Updated copyright file (upstream location, packaging copyright notice + for previous maintainers and for Alcove). + * Remove call to dh_testversion, use versionned build-dep instead + (lintian). + * Support for DEB_BUILD_OPTIONS debug/nostrip for policy 3.2 + compliance. + * Use dh_shlibdeps -l instead of setting LD_LIBRARY_PATH explicitely - + necessary for new versions of fakeroot, and requires debhelper 3.0.23 + for a fix. Well finally 3.0.23 is buggy, leave this for later. + * Avoid to call ldconfig at "make install" time, too costly. + * Get rid in control files of references to never-released standalone + lib files (split attempted in 1997/98). + * Bumped Standards-Version to 3.5.4. + + -- Yann Dirson Tue, 15 May 2001 14:28:39 +0200 + +e2fsprogs (1.19-4) unstable; urgency=medium + + * Added texinfo to build-deps (Closes: #87685). + + -- Yann Dirson Tue, 3 Apr 2001 09:03:13 +0200 + +e2fsprogs (1.19-3) unstable; urgency=low + + * Drop findsuper binary, and suggest gpart (Closes: #74034). + * Drop flushb and extend at upstream request (Closes: #39506). + * Applied upstream fix for chattr on large files (Closes: #72690). + * Applied clarification patch to tune2fs.8 (Closes: #67446). + * Applied typo patch to compile_et.1 (Closes: #63786). + * Include in e2fsck/journal.c (Closes: #71775). + * Suggest parted. + + -- Yann Dirson Mon, 4 Dec 2000 22:08:06 +0100 + +e2fsprogs (1.19-2) unstable; urgency=low + + * Clarified libuuid copyright to LGPL-2, excluding LGPL-2.1. + * Added build-dependency on debhelper (Closes: #67532). + * Don't paralelize fsck runs on same drive for hd[efgh] (Closes: + #59103). + * Upload pristine source, -1 was erroneously uploaded as a + debian-specific package. + + -- Yann Dirson Thu, 3 Aug 2000 00:30:49 +0200 + +e2fsprogs (1.19-1) unstable; urgency=low + + * New upstream release: + ** new program: resize2fs. + ** ext3 support. + ** NLS support (non-default, activated). + ** Compression support (non-default, activated). + ** Progress bar nice to serial console (Closes: #66079) + ** Ensure filetype feature is turned off for Hurd filesystems (Closes: + #61863) + * Updated main copyright file for a number of things. + * Fixed NLS support for flushb and extend. + * Started to add build-depends. + * Include new e2p header. + + -- Yann Dirson Wed, 19 Jul 2000 01:55:27 +0200 + +e2fsprogs (1.18-3) frozen unstable; urgency=medium + + * Fix Y2K display-only bug in debugfs - "ls -l" displayed raw tm_year, + causing 2000 to be displayed as "100" (Closes: #57135). Potato should + be y2k-clean. + * Remove empty dirs /usr/share/et/ and /usr/share/ss/ from package + e2fsprogs (Closes: #52900). + + -- Yann Dirson Mon, 21 Feb 2000 23:06:47 +0100 + +e2fsprogs (1.18-2) unstable; urgency=low + + * Test for "__sparc__" instead of "sparc" as a cpp macro in mke2fs.c + (tests in other places are correct) (Closes: #50012). + + -- Yann Dirson Fri, 12 Nov 1999 21:40:27 +0100 + +e2fsprogs (1.18-1) unstable; urgency=low + + * New upstream (bugfix) release. + + -- Yann Dirson Fri, 12 Nov 1999 17:27:20 +0100 + +e2fsprogs (1.17-2) unstable; urgency=low + + * Applied upstream patch to fix segfault (Closes: #49535). + + -- Yann Dirson Tue, 9 Nov 1999 22:14:53 +0100 + +e2fsprogs (1.17-1) unstable; urgency=low + + * New upstream (bugfix) release. + + -- Yann Dirson Wed, 27 Oct 1999 23:46:39 +0200 + +e2fsprogs (1.16-2) unstable; urgency=low + + * Fixed build of a link list in fsck.c (Closes: #48312). + + -- Yann Dirson Tue, 26 Oct 1999 01:17:36 +0200 + +e2fsprogs (1.16-1) unstable; urgency=low + + * New upstream release. + * Re-applied Hurd patches that did not seem to have been received + upstream. + + -- Yann Dirson Sun, 24 Oct 1999 16:11:59 +0200 + +e2fsprogs (1.15-3) unstable; urgency=low + + * Fixed minor typo for the Hurd. + * Fixed various Hurd defines to __GNU__ (Closes: #44407). + * Switched doc/ and info/ to FHS. + * Cleaned up debian/rules to use new debhelper features. + * Bounced Standards-Version to 3.0.1. + * Do not install buggy com_err.info, shipped as HTML. + * Removed partinfo from the package, following the wish of upstream + author, because of duplicate functionality with "fdisk -l" (Closes: + #42139). + + -- Yann Dirson Mon, 20 Sep 1999 23:04:06 +0200 + +e2fsprogs (1.15-2) unstable; urgency=medium + + * Changed build directory do debian/BUILD/ - related cleanups in + debian/rules. + * Fixed partinfo.c to have it compiled, and fixed display of partition + device in error messages. + * Added /usr/sbin/partinfo to the package (Closes: #42139). + * Added note about uuidgen(1) in README.Debian. + * Documented in manpage that default mke2fs behaviour is now -r1 -s1 + (Closes: #44478). + * Documented in mke2fs.8 that -r1 forces -s1, thus ignoring -s0. + * Added warning message when -s0 is ignored because of -r1. + * Documented -n option of mke2fs. + * Fixed display buglet causing trailing commas in list of superblock + backups when sparse flag is on and last group has no superblock + backup. + * Closes: #42434, #43134. + + -- Yann Dirson Wed, 8 Sep 1999 00:46:38 +0200 + +e2fsprogs (1.15-1) unstable; urgency=low + + * New upstream release (Closes: Bug#41763). + * All changes to upstream files in 1.14-3 were integrated upstream. + * Separated libuuid-dev from e2fslibs-dev because it now has manpages. + * Fixed debian/rules for POSIX "rmdir -p" + * Corrected the location of the GPL in copyright file. + * Moved the manpages to /usr/share/. + * Bumped Standards-Version to 3.0.0. + + -- Yann Dirson Fri, 23 Jul 1999 01:37:51 +0200 + +e2fsprogs (1.14-3) unstable; urgency=low + + * Fail with error message when /dev/null cannot be opened (Fixes: + Bug#35595). + * Fixed typo in e2fsck/unix.c (Fixes: Bug#36960). + * Added "emeregency help" options summary to e2fsck (Fixes: Bug#11372). + * Prepared debian/rules for usr/share/man/. + + -- Yann Dirson Tue, 1 Jun 1999 23:37:12 +0200 + +e2fsprogs (1.14-2) unstable; urgency=low + + * Fixed fsck(1) not to coredump when it does not find its argument in + /etc/fstab (Fixes: Bug#33533, Bug#34320, part of Bug#34131). + * Fixed spelling of upstream author's name. + * Cleaned debian/*.files up. + * Undid the changes. + * Changed "rmdir -p" invocations in debian/rules into "-rmdir -p" to + turn around changed behaviour in fileutils_4.0. + + -- Yann Dirson Fri, 12 Mar 1999 23:50:47 +0100 + +e2fsprogs (1.14-1) unstable; urgency=low + + * New upstream release (Fixes: Bug#33113). + * All patches we used for 1.12 are obsoleted by 1.14. + * Still have to install com_err.info from debian/rules though. + * Incorporated patches from Gordon Matzigkeit for hurd cross-compilation: + * - configure.in: Change cross-compile default for sizeof (long + long) to 8, so that __s64 and __u64 get defined in ext2fs.h. + (BUILD_CC): Discover a native compiler if we are cross-compling + (used for util/subst). + - Include linux/types.h instead of asm/types.h, so that + non-Linux platforms use the stubbed version provided with this + package. + - misc/Makefile.in (findsuper): Add a rule so that findsuper gets built + with the right compiler flags. + - etc. + + -- Yann Dirson Wed, 10 Feb 1999 23:23:03 +0100 + +e2fsprogs (1.12-4) frozen unstable; urgency=low + + * Ship flushb(8) and extend(8) were missing in all 1.12 packages + (Fixes: Bug#28771). + * Add extend.8 link to undocumented.7. + * Replaced my (ad-hoc) fix for Bug#25684 with (really better) one + from upstream. + + -- Yann Dirson Mon, 2 Nov 1998 20:53:28 +0100 + +e2fsprogs (1.12-3) frozen unstable; urgency=low + + * Fixed to use angle brackets instead of double + quotes when including files from /usr/include/. + * Made e2fslibs-dev depend on comerr-dev (Fixes: Bug#26282, + Bug#27497). + * Fixed mke2fs' display with inode numbers > 9999 (Fixes: Bug#25684). + * Use -D__NO_STRING_INLINES on powerpc to allow building the boot + blocks in QUIK, the powermac boot loader - reported by Matt + McLean. + * Removed unsupported info and texi entries from docbase files. + + -- Yann Dirson Mon, 19 Oct 1998 23:32:41 +0200 + +e2fsprogs (1.12-2.1) unstable; urgency=low + + * Non-maintainer upload + config.guess and config.sub files modified, to recognize a Arm + architecture. + + -- Turbo Fredriksson Thu, 13 Aug 1998 19:15:56 -0400 + +e2fsprogs (1.12-2) unstable; urgency=low + + * Really install e2label.8 manpage. + * Removed path from ldconfig invocation, obeying packaging manual. + * Improved the subst.c patch (thanks to Peter Moulder). + + -- Yann Dirson Thu, 14 Jul 1998 14:10:06 +0200 + +e2fsprogs (1.12-1) unstable; urgency=low + + * New upstream release - at last out of alpha status ! + * Removed some obsolete files from debian/attic. + * Patched util/subst.c to expand env variables, and MCONFIG.in to + have ${prefix} exported to the `subst' process, so that we get + correct paths in mk_cmds and compile_et. Forwarded upstream. + * Debian-specific /usr/share/comerr/ renamed to /usr/share/et/, now + installed upstream. + * Removed -isp from dh_gencontrol invocation - now the default. + * Passed lintian 0.5.0. + + -- Yann Dirson Fri, 10 Jul 1998 22:49:18 +0200 + +e2fsprogs (1.10-17) frozen unstable; urgency=low + + * Commented out obsolete code in fsck.c that assumed fstab entries + declared `noauto' should not be checked - successfully forwarded + upstream (Fixes: Bug#17244). + + -- Yann Dirson Fri, 15 May 1998 01:14:54 +0200 + +e2fsprogs (1.10-16) frozen unstable; urgency=low + + * Changed to in lib/uuid/uuidP.h to + allow compilation with glibc 2.0.7pre1 (Fixes: Bug#22039). + * Use "build-stamp" as a stamp file instead of "build". + * Restored "Provides: e2fslibsg" in order to allow upgrade from + unstable hamm. Documented in README.Debian so that it does not + get removed again (Fixes: Bug#22019). + + -- Yann Dirson Mon, 4 May 1998 21:11:38 +0200 + +e2fsprogs (1.10-15) frozen unstable; urgency=low + + * Added call to ldconfig in e2fsprogs.postinst. + * Fixes checks for install-docs in postinst/prerm (Fixes: Bug#20303, + Bug#20304, Bug#20590). + * Removed e2fslibsg from what e2fsprogs provides (was just forgotten). + * Passed lintian 0.4.2. + + -- Yann Dirson Sun, 26 Apr 1998 22:27:11 +0200 + +e2fsprogs (1.10-14) frozen unstable; urgency=low + + * Fixed checks for install-docs to use -x. + * Applied patch for sparc from Juan to fsck.c to compile with glibc + 2.1 (Fixes: Bug#20841). + + -- Yann Dirson Tue, 14 Apr 1998 17:12:19 +0200 + +e2fsprogs (1.10-13) frozen unstable; urgency=low + + * test for /usr/sbin/install-docs before trying to run it in + postinst and prerm (Fixes: Bug#19461, Bug#19469, Bug#19949, + Bug#20006). + * comerrg-dev now suggests doc-base. + * moved binary packages ss2g, comerr2g and e2fslibsg back into + binary package e2fsprogs. + * use new virtual packages libcomerr2, libss2, libext2fs2, libe2p2, + libuuid1 in shlibs and dependencies. + * Changed e2fsprogs dependency on libs to a Pre-Depends (Fixes: + Bug#18221). + * Not conflicting with old ss2g and comerr2g - these will have to be + removed by hand. + * Turned around dpkg's bug #17624 in e2fsprogs.preinst. + * Updated README.Debian to explain the new package architecture. + * Passed lintian 0.3.4. + + -- Yann Dirson Fri, 20 Mar 1998 13:03:11 +0100 + +e2fsprogs (1.10-12) unstable; urgency=low + + * Corrected doc menu entries to point to the real documents' places. + * Fixed mk_cmds to really find its support scripts (Fixes: Bug#18779). + * Made mk_cmds and compile_et use "sh -e". + * Have missing file /usr/include/ss/ss_err.h installed (Fixes: Bug#18778). + * Corrected typo in Description (Fixes: Bug#18890). + * Fixed descriptions for ss* packages, thanks to Greg Stark (Fixes: + Bug#18373, Bug#18447). + * Added description of e2p and uuid libs in e2fslibsg-dev description. + * Included texinfo sources. + * Added doc-base support - suppressed direct menu/dwww support. + * Complies with standards version 2.4.0.0. + * Passed lintian 0.3.0: + * removed .du control file. + * updated FSF address. + * fixed in *.files nasty ldconfig-symlink-before-shlib-in-deb's. + * turned relative links from /usr/lib into /lib into absolute ones. + + -- Yann Dirson Sun, 8 Mar 1998 19:42:58 +0100 + +e2fsprogs (1.10-11) unstable; urgency=low + + * Switched to debhelper (Fixes:Bug#16307). + * Updated standards to 2.3.0.1 + * Changed maintainer's mail address. + * Added conflicts with old versions of dump and quota. + * Added html-converted texi docs for libs, with menu(dwww) support. + * Added findsuper.8 link to undocumented. + * Changed version number of lib packages to reflect the lib versions. + * Moved libss into its own packages; added mk_cmds script and + support files for libss development (Fixes:Bug#17233). + * Added README.Debian file documenting all those dependency stuff. + * Included example error tables from libext2fs and libss in + comerr-dev. + * Included example command tables from debugfs in ss-dev. + * Added section/priority files in packages (-isp). + * Changed names/relations for doc dirs to comply with policy. + * Removed call to ldconfig from e2fsprogs.postinst. + + -- Yann Dirson Thu, 29 Jan 1998 18:10:03 +0100 + +e2fsprogs (1.10-10) unstable; urgency=low + + * Added patch from Michael Alan Dorman for compilation on alpha-Linux + (Closes:Bug#15596). + * Added '-fsigned-char' to COPTS to allow compilation on ppc-Linux + (Closes:Bug#15976). + * Suppressed Essential flag on libs, as well as useless Replaces + (Closes: Bug#16480). + * Suppressed reference to obsolete package `e2fsprogsg' in control + info, but Conflicts for security (Closes:Bug#16791). + + -- Yann Dirson Wed, 7 Jan 1998 22:35:08 +0100 + +e2fsprogs (1.10-9) unstable; urgency=low + + * Fixed comerr2g.shlibs to reflect package-name change. + * Fixed problem with ss include files being removed from /usr on make + install (indeed fixed in 1.10-8). + * Added changelog file to comerr2g package (indeed fixed in 1.10-8). + * Corrected link from flushb.8 to undocumented (Closes:Bug#15335,Bug#15660,Bug#15675). + * Added /sbin/findsuper (Closes:Bug#15224). + * Fixed /usr/bin/compile_et script (Closes:Bug#15487). + * Included awk scripts in /usr/share/comerr, for use by compile_et. + * Changed back the name from "e2fsprogsg" to "e2fsprogs" to get better + dependencies. + * Strip libraries (Closes:Bug#15667). + + -- Yann Dirson Tue, 9 Dec 1997 22:52:42 +0100 + +e2fsprogs (1.10-8) unstable; urgency=low + + * Added latest patch from Ted for autodetection of llseek() proto. + * Switched to libc6, without libc5 compatibility (yet ?). + * Turned Pre-Depends into Depends to allow installation. Dirty + though. But what were Pre-Depends for anyway ? + + -- Yann Dirson Sun, 23 Nov 1997 23:03:02 +0100 + +e2fsprogs (1.10-7) unstable; urgency=HIGH + + * Turned "#if (__GLIBC__ == 2)" into "#if 1" to turn around missing llseek() + prototype in libc_5.4.33-5 as well as libc6. + + -- Yann Dirson Tue, 21 Oct 1997 12:53:27 +0200 + +e2fsprogs (1.10-6) unstable; urgency=low + + * Official libc6 patches from Ted. + * Converted to debstd - let it do the stripping stuff. + * Separated libcomerr into a standalone lib - includes full doc and tools. + * Separated development files into e2fslibs-dev, which Provides the 4 other + -dev packages. + * Now Provides the 4 other lib packages, to make it possible not to depend + upon e2fsprogs itself. These libs WILL be taken out of "progs" in the + next release. + + -- Yann Dirson Wed, 24 Sep 1997 10:46:00 +0200 + +e2fsprogs (1.10-5.1) experimental; urgency=low + + * Applied patch from Ted for libc6 compatibility, for test purpose. + + -- Yann Dirson Thu, 11 Sep 1997 09:09:42 +0200 + +e2fsprogs (1.10-5) unstable; urgency=medium + + * Switched back to libc5 because of possible bug in libc6-2.0.4-provided + llseek() causing problem with partitions > 2Gb. + * Switched back to libc-provided llseek(). + + -- Yann Dirson Tue, 5 Aug 1997 16:54:40 +0200 + +e2fsprogs (1.10-4.1) unstable; urgency=low + + * Make use of shipped llseek instead of glibc's which seems buggy + [unreleased - could not compile due to possible gcc bug]. + * Corrected compiler-options handling in debian/rules (use CCOPTS instead + of CFLAGS which is messed with in configure.in). + + -- Yann Dirson Mon, 28 Jul 1997 19:47:02 +0200 + +e2fsprogs (1.10-4) unstable; urgency=low + + * Switched to libc6. + * Added calls to update-info in postins/prerm. + * Misc changes to debian/rules; some cleanup in Makefiles. + + -- Yann Dirson Thu, 10 Jul 1997 19:42:54 +0200 + +e2fsprogs (1.10-3) stable unstable; urgency=low + + * New maintainer (closed many obsolete bug-reports). + * updated "copyright" to show new location on tsx-11. + * started debian/rules cleanup, towards new policy conformance. + * Added flushb.8 link to undocumented.7 (bug #8644). + * Added {fsck,mkfs}.ext2.8 links to existing manpages (bugs #5598, + #6286). + + -- Yann Dirson Wed, 25 Jun 1997 14:59:58 +0200 + +e2fsprogs (1.10-2) frozen unstable; urgency=low + + * Add 'ldconfig' to postinst (should fix #9020). + * Define HAVE_NETINET_IN_H on alpha/glibc. + + -- Klee Dienes Tue, 29 Apr 1997 17:24:12 -0400 + +e2fsprogs (1.10-1) frozen unstable; urgency=medium + + * Upstream bug-fix release. + + -- Klee Dienes Thu, 24 Apr 1997 14:54:12 -0400 + +e2fsprogs (1.09-1) frozen; urgency=medium + + * Upstream bug-fix release. + + -- Klee Dienes Thu, 24 Apr 1997 14:54:12 -0400 + +e2fsprogs (1.06-4) unstable; urgency=low + + * Added empty entries to shlibs.local, to neatly solve the pre-depends + problem, as suggested by Ian Jackson. + + -- Michael Nonweiler Wed, 13 Nov 1996 08:13:28 +0000 + +e2fsprogs (1.06-3) unstable; urgency=low + + * Hard coded Pre-Depends line, as a temporary fix for the pre-depends + contains e2fsprogs problem. + + -- Michael Nonweiler Sat, 9 Nov 1996 12:57:44 +0000 + +e2fsprogs (1.06-2) unstable; urgency=low + + * New packaging format + * Fixes packaging bugs - + Files in /lib are now stripped of all unneeded symbols (Bug#5121) + Calls to ldconfig in maintainer scripts have been removed (Bug#4247) + + -- Michael Nonweiler Tue, 5 Nov 1996 21:14:54 +0000 + +e2fsprogs (1.01-1) unstable; urgency=low + + * upgraded to latest upstream version, to 1.06 from 1.05 + * upgraded to latest upstream version, to 1.05 from 1.04 + * gzip manpages + * minor changes to debian.rules + + -- Michael Meskes Fri, 18 Oct 1996 00:00:00 +0000 + +e2fsprogs (1.04-1) unstable; urgency=low + + * upgraded to latest upstream version, to 1.04 from 1.02 + * another tidy-up of debian.rules + * section and priority added to debian.control, since this is an + essential base package. + + -- Michael Nonweiler Sun, 23 Jun 1996 00:00:00 +0000 + +e2fsprogs (1.02-1) unstable; urgency=low + + * upgraded to latest upstream version, to 1.02 from 1.01 + * copied "configure" usr_prefix change (see below), into configure.in + * updated debian.control file, added Pre-Depends field + created preinst script to check dpkg --assert-predepends + tidyed and fixed debian.rules + * set e2fsck to link shared, as suggested by Bruce Perens in Bug#2332 + * corrected problem in e2fsck error message, Bug#2534 + * added Architecture field + * very minor correction to expected output of a build time test + + -- Michael Nonweiler Tue, 5 Mar 1996 00:00:00 +0000 + +e2fsprogs (1.01-1) unstable; urgency=low + + * removed debugging symbols from libs and enabled more optimization + as suggested by Rolf Rossius + * also removed the /var/catman pages + * changed to elf compilation + + -- Andrew D. Fernandes Mon, 20 Nov 1995 00:00:00 +0000 + +e2fsprogs (0.5b-2) unstable; urgency=low + + * Upgraded to latest version, to 1.01 from 0.5b. + * changed the installation groups from bin to root in MCONFIG.in + * changed configure to set usr_prefix="\${prefix}/usr" + * moved the cat pages to /var/catman in MCONFIG.in + + -- Andrew D. Fernandes Sat, 7 Oct 1995 00:00:00 +0000 + +e2fsprogs (0.5b-1) unstable; urgency=low + + * Made "fsck -t " work correctly. Formerly + the -t argument was overriden by the filesystem type listed for the + device in /etc/fstab. + * added Debian GNU/Linux package maintenance system files + + -- Bruce Perens Thu, 3 Aug 1995 00:00:00 +0000 diff --git a/debian/comerr-dev.doc-base b/debian/comerr-dev.doc-base new file mode 100644 index 0000000..463eb76 --- /dev/null +++ b/debian/comerr-dev.doc-base @@ -0,0 +1,12 @@ +Document: comerr-manual +Title: The com_err library +Author: Ken Raeburn and Bill Sommerfeld +Abstract: A library, and associated utilities, + which allow a more uniform way for libraries + to return errors to their callers, and for programs + to describe errors and exceptional conditions to their users. +Section: Programming + +Format: HTML +Index: /usr/share/doc/comerr-dev/html-info/com_err.html +Files: /usr/share/doc/comerr-dev/html-info/*.html diff --git a/debian/comerr-dev.examples b/debian/comerr-dev.examples new file mode 100644 index 0000000..aff20cc --- /dev/null +++ b/debian/comerr-dev.examples @@ -0,0 +1,2 @@ +lib/ss/ss_err.et +debian/BUILD-STD/lib/ext2fs/ext2_err.et diff --git a/debian/comerr-dev.files.in b/debian/comerr-dev.files.in new file mode 100644 index 0000000..a3b8b0e --- /dev/null +++ b/debian/comerr-dev.files.in @@ -0,0 +1,9 @@ +usr/lib/*/libcom_err.a +usr/lib/*/libcom_err.so +usr/include/et/* +usr/include/com_err.h +usr/share/man/man1/compile_et* +usr/share/man/man3/com_err.3* +usr/bin/compile_et +usr/share/et/* +usr/lib/*/pkgconfig/com_err.pc diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control.in b/debian/control.in new file mode 100644 index 0000000..23b9d58 --- /dev/null +++ b/debian/control.in @@ -0,0 +1,348 @@ +define(MULTIARCH_HEADERS,ifdef(`DO_MULTIARCH', +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends},REMOVE_ME))dnl +define(UTIL_LINUX_NG_DEFINES, +ifdef(`UTIL_LINUX_NG', ``libblkid-dev (>= 2.16), uuid-dev (>= 2.16),''))dnl +Source: e2fsprogs +Section: admin +Priority: required +Maintainer: Theodore Y. Ts'o +Build-Depends: gettext, texinfo, pkg-config, gcc-multilib [mips mipsel], libfuse-dev [linux-any kfreebsd-any], libattr1-dev, debhelper (>= 9.0), UTIL_LINUX_NG_DEFINES m4 +Standards-Version: 3.9.8 +Homepage: http://e2fsprogs.sourceforge.net + +ifdef(`FUSE2FS',`` +Package: fuse2fs +Priority: optional +Depends: ${shlibs:Depends}, ${misc:Depends} +Architecture: linux-any kfreebsd-any +Description: ext2 / ext3 / ext4 file system driver for FUSE + fuse2fs is a FUSE file system client that supports reading and + writing from devices or image files containing ext2, ext3, and ext4 + file systems. +'')dnl + +ifdef(`E2FSCK_STATIC',`` +Package: e2fsck-static +Priority: optional +Depends: ${misc:Depends} +Recommends: sash | bash-static | zsh-static | busybox-static | zsh30-static +Architecture: any +Description: statically-linked version of the ext2/ext3/ext4 filesystem checker + This may be of some help to you if your filesystem gets corrupted enough + to break the shared libraries used by the dynamically linked checker. + . + This binary takes much more space than its dynamic counterpart located + in e2fsprogs, though. + . + You may want to install a statically-linked shell as well, to be able + to run this program if something like your C library gets corrupted. +'')dnl + +Package: libcomerr2 +Section: libs +Provides: libcomerr-kth-compat +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: e2fsprogs (<< 1.34-1) +Architecture: any +MULTIARCH_HEADERS +Description: common error description library + libcomerr is an attempt to present a common error-handling mechanism to + manipulate the most common form of error code in a fashion that does not + have the problems identified with mechanisms commonly in use. + +Package: comerr-dev +Section: libdevel +Priority: extra +Depends: libc6-dev | libc-dev, libcomerr2 (= ${mainBinary}), ${misc:Depends} +Suggests: doc-base +Replaces: e2fslibs-dev (<< 1.33-2), libkrb5-dev (<< 1.3) +Architecture: any +Description: common error description library - headers and static libraries + libcom_err is an attempt to present a common error-handling mechanism to + manipulate the most common form of error code in a fashion that does not + have the problems identified with mechanisms commonly in use. + . + This package contains the development environment for the com_err library. + +Package: libss2 +Section: libs +Depends: libcomerr2, ${shlibs:Depends}, ${misc:Depends} +Replaces: e2fsprogs (<< 1.34-1) +Architecture: any +MULTIARCH_HEADERS +Description: command-line interface parsing library + libss provides a simple command-line interface parser which will + accept input from the user, parse the command into an argv argument + vector, and then dispatch it to a handler function. + . + It was originally inspired by the Multics SubSystem library. + +Package: ss-dev +Section: libdevel +Priority: extra +Depends: libc6-dev | libc-dev, libss2 (= ${mainBinary}), comerr-dev, ${misc:Depends} +Architecture: any +Description: command-line interface parsing library - headers and static libraries + This package includes a tool that parses a command table to generate + a simple command-line interface parser, the include files needed to + compile and use it, and the static libs. + . + It was originally inspired by the Multics SubSystem library. + . + This package contains the development environment for the ss library. +ifdef(`UTIL_LINUX_NG',,`` +Package: libuuid1 +Section: libs +Depends: passwd, ${shlibs:Depends}, ${misc:Depends} +Recommends: uuid-runtime +Replaces: e2fsprogs (<< 1.34-1) +Architecture: any +MULTIARCH_HEADERS +Description: Universally Unique ID library + The libuuid library generates and parses 128-bit universally unique + ids (UUIDs). A UUID is an identifier that is unique across both + space and time, with respect to the space of all UUIDs. A UUID can + be used for multiple purposes, from tagging objects with an extremely + short lifetime, to reliably identifying very persistent objects + across a network. + . + See RFC 4122 for more information. + +Package: uuid-runtime +Section: libs +Priority: optional +Depends: passwd, libuuid1 (>> 1.40.3-1), ${shlibs:Depends}, ${misc:Depends} +Replaces: e2fsprogs (<= 1.40.3-1ubuntu1) +Architecture: any +Description: runtime components for the Universally Unique ID library + The libuuid library generates and parses 128-bit universally unique + ids (UUIDs). A UUID is an identifier that is unique across both + space and time, with respect to the space of all UUIDs. A UUID can + be used for multiple purposes, from tagging objects with an extremely + short lifetime, to reliably identifying very persistent objects + across a network. + . + See RFC 4122 for more information. + . + This package contains the uuidgen program and the uuidd daemon. + . + The uuidd daemon is used to generate UUIDs, especially time-based + UUID’s, in a secure and guaranteed-unique fashion, even in the face + of large numbers of threads trying to grab UUID’s running on + different CPU’s. It is used by libuuid as well as the uuidgen + program. + +ifdef(`UDEB_PKGS',`` +Package: libuuid1-udeb +Package-Type: udeb +Section: debian-installer +Priority: optional +Depends: ${shlibs:Depends} +Architecture: any +Description: stripped down universally unique id library, for debian-installer + libuuid generates and parses 128-bit universally unique ids (UUIDs). + See RFC 4122 for more information. + . + This is a minimal package for debian-installer. +'')dnl + +Package: uuid-dev +Section: libdevel +Priority: extra +Depends: libc6-dev | libc-dev, libuuid1 (= ${mainBinary}), ${misc:Depends} +Replaces: e2fslibs-dev (<< 1.15) +Architecture: any +Description: universally unique id library - headers and static libraries + libuuid generates and parses 128-bit universally unique ids (UUIDs). + See RFC 4122 for more information. + . + This package contains the development environment for the uuid library. + +Package: libblkid1 +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Architecture: any +Description: block device id library + The blkid library which allows system programs like fsck and + mount to quickly and easily find block devices by filesystem UUID and + LABEL. This allows system administrators to avoid specifying + filesystems by hard-coded device names, but via a logical naming + system instead. + +ifdef(`UDEB_PKGS',`` +Package: libblkid1-udeb +Package-Type: udeb +Section: debian-installer +Priority: optional +Depends: ${shlibs:Depends}, ${misc:Depends} +Architecture: any +Description: stripped down block device id library, for debian-installer + The blkid library which allows system programs like fsck and + mount to quickly and easily find block devices by filesystem UUID and + LABEL. This allows system administrators to avoid specifiying + filesystems by hard-coded device names, but via a logical naming + system instead. + . + This is a minimal package for debian-installer. +'')dnl + +Package: libblkid-dev +Section: libdevel +Priority: extra +Depends: libc6-dev | libc-dev, libblkid1 (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: block device id library - headers and static libraries + The blkid library which allows system programs like fsck and + mount to quickly and easily find block devices by filesystem UUID and + LABEL. This allows system administrators to avoid specifiying + filesystems by hard-coded device names, but via a logical naming + system instead. + . + This package contains the development environment for the blkid library. +'')dnl + +ifdef(`UDEB_PKGS',`` +Package: e2fsprogs-udeb +Package-Type: udeb +Section: debian-installer +Priority: optional +Depends: ${shlibs:Depends}, ${misc:Depends} +Architecture: any +Description: stripped-down versions of e2fsprogs, for debian-installer + This package is an e2fsprogs package built for a reduced size, so that + it can help to save space in debian-installer. + . + Don'''``t attempt to install this package, it has no support for a couple of + features you surely want. Anyway it should refuse to install. +'')dnl + +Package: e2fslibs +Section: libs +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: e2fsprogs (<< 1.34-1) +Provides: libext2fs2, libe2p2 +Architecture: any +MULTIARCH_HEADERS +Description: ext2/ext3/ext4 file system libraries + The ext2, ext3 and ext4 file systems are successors of the original ext + ("extended") file system. They are the main file system types used for + hard disks on Debian and other Linux systems. + . + This package provides the ext2fs and e2p libraries, for userspace software + that directly accesses extended file systems. Programs that use libext2fs + include e2fsck, mke2fs, and tune2fs. Programs that use libe2p include + dumpe2fs, chattr, and lsattr. + +Package: e2fslibs-dev +Section: libdevel +Priority: extra +Depends: libc6-dev | libc-dev, comerr-dev, e2fslibs (= ${binary:Version}), ${misc:Depends} +Suggests: doc-base +Provides: ext2fs-dev, e2p-dev +Replaces: libkrb5-dev (<< 1.3) +Architecture: any +Description: ext2/ext3/ext4 file system libraries - headers and static libraries + The ext2, ext3 and ext4 file systems are successors of the original ext + ("extended") file system. They are the main file system types used for + hard disks on Debian and other Linux systems. + . + This package contains the development environment for the ext2fs and e2p + libraries. + +Package: e2fsprogs +Essential: yes +ifdef(`UTIL_LINUX_NG', +``Pre-Depends: ${shlibs:Depends}, ${misc:Depends}, util-linux (>= 2.15~rc1-1) +'', +``Pre-Depends: ${shlibs:Depends}, ${misc:Depends} +'')dnl +Multi-Arch: foreign +Suggests: gpart, parted, fuse2fs, e2fsck-static +Conflicts: dump (<< 0.4b4-4), quota (<< 1.55-8.1), initscripts (<< 2.85-4), sysvinit (<< 2.85-4) +Replaces: hurd (<= 20040301-1), libblkid1 (<< 1.38+1.39-WIP-2005.12.10-2), libuuid1 (<< 1.38+1.39-WIP-2005.12.10-2) +Architecture: any +Description: ext2/ext3/ext4 file system utilities + The ext2, ext3 and ext4 file systems are successors of the original ext + ("extended") file system. They are the main file system types used for + hard disks on Debian and other Linux systems. + . + This package contains programs for creating, checking, and maintaining + ext2/3/4-based file systems. It also includes the "badblocks" program, + which can be used to scan for bad blocks on a disk or other storage device. +ifdef(`USE_DBGSYM',,`` +Package: e2fsprogs-dbg +Section: debug +Priority: extra +Depends: e2fsprogs (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for e2fsprogs + This package includes the debug information useful for debugging e2fsprogs + and its libraries, contained in the e2fsprogs and e2fsck-static packages. + The debug information is used for execution tracing and core + dump analysis. +'') +ifdef(`USE_DBGSYM',,ifdef(`UTIL_LINUX_NG',,`` +Package: uuid-runtime-dbg +Section: debug +Priority: extra +Depends: uuid-runtime (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for uuid-runtime + This package includes the debug information useful for debugging the + uuid runtime programs, contained in the uuid-runtime package. + The debugging information is used for execution tracing and core + dump analysis. +''))dnl +ifdef(`USE_DBGSYM',,`` +Package: e2fslibs-dbg +Section: debug +Priority: extra +Depends: e2fslibs (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for e2fslibs + This package includes the debug information useful for debugging the + ext2fs and e2p libraries, contained in the e2fslibs package. The debug + information is used for execution tracing and core dump analysis. + +Package: libcomerr2-dbg +Section: debug +Priority: extra +Depends: libcomerr2 (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for libcomerr2 + This package includes the debug information useful for debugging the + com_err library, contained in the libcomerr2 package. The debugging + information is used for execution tracing and core dump analysis. + +Package: libss2-dbg +Section: debug +Priority: extra +Depends: libss2 (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for libss2 + This package includes the debug information useful for debugging the + ss library, contained in the libss2 package. The debug information + is used for execution tracing and core dump analysis. +'')dnl +ifdef(`USE_DBGSYM',,ifdef(`UTIL_LINUX_NG',,`` +Package: libblkid1-dbg +Section: debug +Priority: extra +Depends: libblkid1 (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for libblkid1 + This package includes the debug information useful for debugging the + blkid library, contained in the libblkid1 package. The debug + information is used for execution tracing and core dump analysis. + +Package: libuuid1-dbg +Section: debug +Priority: extra +Depends: libuuid1 (= ${binary:Version}), ${misc:Depends} +Architecture: any +Description: debugging information for libuuid1 + This package includes the debug information useful for debugging the + UUID library, contained in the libuuid1 package. The debug + information is used for execution tracing and core dump analysis. +''))dnl diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..e6f4676 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,73 @@ +This is the Debian GNU/Linux prepackaged version of the EXT2 file +system utilities (e2fsck, mke2fs, etc.). The EXT2 utilities were +written by Theodore Ts'o and Remy Card . + +Sources were obtained from http://sourceforge.net/projects/e2fsprogs + +Packaging is Copyright (c) 2003-2007 Theodore Ts'o + Copyright (c) 1997-2003 Yann Dirson + Copyright (c) 2001 Alcove + Copyright (c) 1997 Klee Dienes + Copyright (c) 1995-1996 Michael Nonweiler + +Upstream Author: Theodore Ts'o + +Copyright notice: + +This package, the EXT2 filesystem utilities, are made available under +the GNU General Public License version 2, with the exception of the +lib/ext2fs and lib/e2p libraries, which are made available under the +GNU Library General Public License Version 2, the lib/uuid library +which is made available under a BSD-style license and the lib/et and +lib/ss libraries which are made available under an MIT-style license. + + Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o + +On Debian GNU systems, the complete text of the GNU General Public +License can be found in `/usr/share/common-licenses/GPL-2'. The +complete text of the GNU Library General Public License can be found +in '/usr/share/common-licenses/LGPL-2'. + + +The license used for lib/et and lib/ss libraries is: + + Copyright 1987 by the Student Information Processing Board + of the Massachusetts Institute of Technology + + Permission to use, copy, modify, and distribute this software and + its documentation for any purpose is hereby granted, provided that + the names of M.I.T. and the M.I.T. S.I.P.B. not be used in + advertising or publicity pertaining to distribution of the software + without specific, written prior permission. M.I.T. and the + M.I.T. S.I.P.B. make no representations about the suitability of + this software for any purpose. It is provided "as is" without + express or implied warranty. + +The license used for lib/uuid is: + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF + WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH + DAMAGE. diff --git a/debian/e2fsck-static.copyright b/debian/e2fsck-static.copyright new file mode 100644 index 0000000..82bdc67 --- /dev/null +++ b/debian/e2fsck-static.copyright @@ -0,0 +1,26 @@ +This is the Debian GNU/Linux prepackaged version of the static EXT2 +file system consistency checker (e2fsck.static). The EXT2 utilities +were written by Theodore Ts'o and Remy Card +. + +Sources were obtained from http://sourceforge.net/projects/e2fsprogs + +Packaging is Copyright (c) 2003-2006 Theodore Ts'o + Copyright (c) 1997-2003 Yann Dirson + Copyright (c) 2001 Alcove + Copyright (c) 1997 Klee Dienes + Copyright (c) 1995-1996 Michael Nonweiler + +Upstream Author: Theodore Ts'o + +Copyright notice: + +This package, the EXT2 filesystem utilities, is protected by the GNU +Public License. + + Copyright (c) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, + 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 by Theodore Ts'o + +On Debian GNU systems, the complete text of the GNU General +Public License can be found in `/usr/share/common-licenses/GPL-2'. + diff --git a/debian/e2fsck-static.files b/debian/e2fsck-static.files new file mode 100644 index 0000000..15a7716 --- /dev/null +++ b/debian/e2fsck-static.files @@ -0,0 +1,2 @@ +/sbin/e2fsck.static +/usr/share/man/man8/e2fsck.static* diff --git a/debian/e2fsck-static.preinst b/debian/e2fsck-static.preinst new file mode 100644 index 0000000..e756ade --- /dev/null +++ b/debian/e2fsck-static.preinst @@ -0,0 +1,19 @@ +#!/bin/sh + +# Abort on error. +set -e + +PKG=e2fsck-static +DOCLNK=/usr/share/doc/$PKG +if test "$1" = upgrade \ + -a -L $DOCLNK +then + rm $DOCLNK +fi + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/e2fslibs-dev.doc-base b/debian/e2fslibs-dev.doc-base new file mode 100644 index 0000000..19d04f4 --- /dev/null +++ b/debian/e2fslibs-dev.doc-base @@ -0,0 +1,10 @@ +Document: libext2fs +Title: The EXT2FS library +Author: Theodore Ts'o +Abstract: The EXT2FS library is designed to allow + user-level programs to manipulate an ext2 filesystem. +Section: Programming + +Format: HTML +Index: /usr/share/doc/e2fslibs/html-info/libext2fs.html +Files: /usr/share/doc/e2fslibs/html-info/*.html diff --git a/debian/e2fslibs-dev.files.in b/debian/e2fslibs-dev.files.in new file mode 100644 index 0000000..b2cd6c9 --- /dev/null +++ b/debian/e2fslibs-dev.files.in @@ -0,0 +1,9 @@ +usr/lib/*/libext2fs*.so +usr/lib/*/libext2fs*.a +usr/lib/*/libe2p*.so +usr/lib/*/libe2p*.a +usr/include/ext2fs +usr/include/e2p +usr/share/info/libext2fs.info* +usr/lib/*/pkgconfig/e2p.pc +usr/lib/*/pkgconfig/ext2fs.pc diff --git a/debian/e2fslibs.files.in b/debian/e2fslibs.files.in new file mode 100644 index 0000000..11198f7 --- /dev/null +++ b/debian/e2fslibs.files.in @@ -0,0 +1,2 @@ +lib/*/libext2fs*.so.* +lib/*/libe2p*.so.* diff --git a/debian/e2fslibs.symbols b/debian/e2fslibs.symbols new file mode 100644 index 0000000..380cacd --- /dev/null +++ b/debian/e2fslibs.symbols @@ -0,0 +1,641 @@ +libe2p.so.2 e2fslibs #MINVER# + e2p_edit_feature2@Base 1.40.7 + e2p_edit_feature@Base 1.37 + e2p_edit_mntopts@Base 1.37 + e2p_encmode2string@Base 1.43 + e2p_feature2string@Base 1.37 + e2p_hash2string@Base 1.37 + e2p_is_null_uuid@Base 1.37 + e2p_jrnl_feature2string@Base 1.41.1 + e2p_jrnl_string2feature@Base 1.41.1 + e2p_mntopt2string@Base 1.37 + e2p_os2string@Base 1.37 + e2p_percent@Base 1.40 + e2p_string2encmode@Base 1.43 + e2p_string2feature@Base 1.37 + e2p_string2hash@Base 1.37 + e2p_string2mntopt@Base 1.37 + e2p_string2os@Base 1.37 + e2p_uuid2str@Base 1.37 + e2p_uuid_to_str@Base 1.37 + fgetflags@Base 1.37 + fgetproject@Base 1.43 + fgetversion@Base 1.37 + fsetflags@Base 1.37 + fsetproject@Base 1.43 + fsetversion@Base 1.37 + getflags@Base 1.37 + getversion@Base 1.37 + iterate_on_dir@Base 1.37 + list_super2@Base 1.37 + list_super@Base 1.37 + parse_num_blocks2@Base 1.42 + parse_num_blocks@Base 1.37 + print_flags@Base 1.37 + print_fs_errors@Base 1.37 + print_fs_state@Base 1.37 + setflags@Base 1.37 + setversion@Base 1.37 +libext2fs.so.2 e2fslibs #MINVER# + badblocks_list_add@Base 1.37 + badblocks_list_create@Base 1.37 + badblocks_list_free@Base 1.37 + badblocks_list_iterate@Base 1.37 + badblocks_list_iterate_begin@Base 1.37 + badblocks_list_iterate_end@Base 1.37 + badblocks_list_test@Base 1.37 + et_ext2_error_table@Base 1.37 + ext2fs_add_dir_block2@Base 1.42 + ext2fs_add_dir_block@Base 1.37 + ext2fs_add_exit_fn@Base 1.43 + ext2fs_add_journal_device@Base 1.37 + ext2fs_add_journal_inode2@Base 1.42.9-3~ + ext2fs_add_journal_inode@Base 1.37 + ext2fs_adjust_ea_refcount2@Base 1.42 + ext2fs_adjust_ea_refcount3@Base 1.43 + ext2fs_adjust_ea_refcount@Base 1.37 + ext2fs_alloc_block2@Base 1.42 + ext2fs_alloc_block@Base 1.37 + ext2fs_alloc_generic_bmap@Base 1.42 + ext2fs_alloc_range@Base 1.43 + ext2fs_allocate_block_bitmap@Base 1.37 + ext2fs_allocate_generic_bitmap@Base 1.37 + ext2fs_allocate_group_table@Base 1.37 + ext2fs_allocate_inode_bitmap@Base 1.37 + ext2fs_allocate_subcluster_bitmap@Base 1.42 + ext2fs_allocate_tables@Base 1.37 + ext2fs_badblocks_copy@Base 1.37 + ext2fs_badblocks_equal@Base 1.37 + ext2fs_badblocks_list_add@Base 1.37 + ext2fs_badblocks_list_create@Base 1.37 + ext2fs_badblocks_list_del@Base 1.37 + ext2fs_badblocks_list_free@Base 1.37 + ext2fs_badblocks_list_iterate@Base 1.37 + ext2fs_badblocks_list_iterate_begin@Base 1.37 + ext2fs_badblocks_list_iterate_end@Base 1.37 + ext2fs_badblocks_list_test@Base 1.37 + ext2fs_bg_checksum@Base 1.42 + ext2fs_bg_checksum_set@Base 1.42 + ext2fs_bg_flags@Base 1.42 + ext2fs_bg_flags_clear@Base 1.42 + ext2fs_bg_flags_set@Base 1.42 + ext2fs_bg_flags_test@Base 1.42 + ext2fs_bg_flags_zap@Base 1.42 + ext2fs_bg_free_blocks_count@Base 1.42 + ext2fs_bg_free_blocks_count_set@Base 1.42 + ext2fs_bg_free_inodes_count@Base 1.42 + ext2fs_bg_free_inodes_count_set@Base 1.42 + ext2fs_bg_has_super@Base 1.37 + ext2fs_bg_itable_unused@Base 1.42 + ext2fs_bg_itable_unused_set@Base 1.42 + ext2fs_bg_used_dirs_count@Base 1.42 + ext2fs_bg_used_dirs_count_set@Base 1.42 + ext2fs_bitcount@Base 1.42.7 + ext2fs_blkmap64_bitarray@Base 1.42 + ext2fs_blkmap64_rbtree@Base 1.42.1 + ext2fs_block_alloc_stats2@Base 1.42 + ext2fs_block_alloc_stats@Base 1.37 + ext2fs_block_alloc_stats_range@Base 1.42.9-3~ + ext2fs_block_bitmap_checksum@Base 1.43 + ext2fs_block_bitmap_csum_set@Base 1.43 + ext2fs_block_bitmap_csum_verify@Base 1.43 + ext2fs_block_bitmap_loc@Base 1.42 + ext2fs_block_bitmap_loc_set@Base 1.42 + ext2fs_block_iterate2@Base 1.37 + ext2fs_block_iterate3@Base 1.42 + ext2fs_block_iterate@Base 1.37 + ext2fs_blocks_count@Base 1.42 + ext2fs_blocks_count_add@Base 1.42 + ext2fs_blocks_count_set@Base 1.42 + ext2fs_bmap2@Base 1.41.0 + ext2fs_bmap@Base 1.37 + ext2fs_check_desc@Base 1.37 + ext2fs_check_directory@Base 1.37 + ext2fs_check_if_mounted@Base 1.37 + ext2fs_check_mount_point@Base 1.37 + ext2fs_clear_bit64@Base 1.42 + ext2fs_clear_bit@Base 1.37 + ext2fs_clear_block_bitmap@Base 1.37 + ext2fs_clear_block_uninit@Base 1.43 + ext2fs_clear_generic_bitmap@Base 1.41.0 + ext2fs_clear_generic_bmap@Base 1.42 + ext2fs_clear_inode_bitmap@Base 1.37 + ext2fs_close2@Base 1.42 + ext2fs_close@Base 1.37 + ext2fs_close_free@Base 1.42.11 + ext2fs_close_inode_scan@Base 1.37 + ext2fs_compare_block_bitmap@Base 1.37 + ext2fs_compare_generic_bitmap@Base 1.41.0 + ext2fs_compare_generic_bmap@Base 1.42 + ext2fs_compare_inode_bitmap@Base 1.37 + ext2fs_const_inode@Base 1.43 + ext2fs_convert_subcluster_bitmap@Base 1.42 + ext2fs_copy_bitmap@Base 1.37 + ext2fs_copy_dblist@Base 1.37 + ext2fs_copy_generic_bitmap@Base 1.41.0 + ext2fs_copy_generic_bmap@Base 1.42 + ext2fs_crc16@Base 1.41.1 + ext2fs_crc32_be@Base 1.43 + ext2fs_crc32c_le@Base 1.42 + ext2fs_create_icount2@Base 1.37 + ext2fs_create_icount@Base 1.37 + ext2fs_create_icount_tdb@Base 1.40 + ext2fs_create_inode_cache@Base 1.43 + ext2fs_create_journal_superblock@Base 1.37 + ext2fs_create_resize_inode@Base 1.37 + ext2fs_dblist_count2@Base 1.42 + ext2fs_dblist_count@Base 1.37 + ext2fs_dblist_dir_iterate@Base 1.37 + ext2fs_dblist_drop_last@Base 1.40.8 + ext2fs_dblist_get_last2@Base 1.42 + ext2fs_dblist_get_last@Base 1.40.8 + ext2fs_dblist_iterate2@Base 1.42 + ext2fs_dblist_iterate3@Base 1.43 + ext2fs_dblist_iterate@Base 1.37 + ext2fs_dblist_sort2@Base 1.42 + ext2fs_dblist_sort@Base 1.37 + ext2fs_default_journal_size@Base 1.40 + ext2fs_descriptor_block_loc2@Base 1.42 + ext2fs_descriptor_block_loc@Base 1.37 + ext2fs_dir_block_csum_set@Base 1.43 + ext2fs_dir_block_csum_verify@Base 1.43 + ext2fs_dir_iterate2@Base 1.37 + ext2fs_dir_iterate@Base 1.37 + ext2fs_dirent_csum_verify@Base 1.43 + ext2fs_dirent_file_type@Base 1.43 + ext2fs_dirent_has_tail@Base 1.43 + ext2fs_dirent_name_len@Base 1.43 + ext2fs_dirent_set_file_type@Base 1.43 + ext2fs_dirent_set_name_len@Base 1.43 + ext2fs_dirhash@Base 1.37 + ext2fs_div64_ceil@Base 1.42 + ext2fs_div_ceil@Base 1.40 + ext2fs_dup_handle@Base 1.37 + ext2fs_expand_dir@Base 1.37 + ext2fs_ext_attr_block_csum_set@Base 1.43 + ext2fs_ext_attr_block_csum_verify@Base 1.43 + ext2fs_ext_attr_hash_entry@Base 1.41.0 + ext2fs_extent_block_csum_set@Base 1.43 + ext2fs_extent_block_csum_verify@Base 1.43 + ext2fs_extent_delete@Base 1.41.0 + ext2fs_extent_fix_parents@Base 1.42.7 + ext2fs_extent_free@Base 1.41.0 + ext2fs_extent_get@Base 1.41.0 + ext2fs_extent_get_info@Base 1.41.0 + ext2fs_extent_goto2@Base 1.42.7 + ext2fs_extent_goto@Base 1.41.0 + ext2fs_extent_header_verify@Base 1.41.0 + ext2fs_extent_insert@Base 1.41.0 + ext2fs_extent_node_split@Base 1.42.7 + ext2fs_extent_open2@Base 1.41.6 + ext2fs_extent_open@Base 1.41.0 + ext2fs_extent_replace@Base 1.41.0 + ext2fs_extent_set_bmap@Base 1.41.0 + ext2fs_fallocate@Base 1.43 + ext2fs_fast_clear_bit64@Base 1.42 + ext2fs_fast_clear_bit@Base 1.39 + ext2fs_fast_mark_block_bitmap2@Base 1.42 + ext2fs_fast_mark_block_bitmap@Base 1.37 + ext2fs_fast_mark_block_bitmap_range2@Base 1.42 + ext2fs_fast_mark_block_bitmap_range@Base 1.37 + ext2fs_fast_mark_inode_bitmap2@Base 1.42 + ext2fs_fast_mark_inode_bitmap@Base 1.37 + ext2fs_fast_set_bit64@Base 1.42 + ext2fs_fast_set_bit@Base 1.39 + ext2fs_fast_test_block_bitmap2@Base 1.42 + ext2fs_fast_test_block_bitmap@Base 1.37 + ext2fs_fast_test_block_bitmap_range2@Base 1.42 + ext2fs_fast_test_block_bitmap_range@Base 1.37 + ext2fs_fast_test_inode_bitmap2@Base 1.42 + ext2fs_fast_test_inode_bitmap@Base 1.37 + ext2fs_fast_unmark_block_bitmap2@Base 1.42 + ext2fs_fast_unmark_block_bitmap@Base 1.37 + ext2fs_fast_unmark_block_bitmap_range2@Base 1.42 + ext2fs_fast_unmark_block_bitmap_range@Base 1.37 + ext2fs_fast_unmark_inode_bitmap2@Base 1.42 + ext2fs_fast_unmark_inode_bitmap@Base 1.37 + ext2fs_file_acl_block@Base 1.42 + ext2fs_file_acl_block_set@Base 1.42 + ext2fs_file_block_offset_too_big@Base 1.42.9 + ext2fs_file_close@Base 1.37 + ext2fs_file_flush@Base 1.37 + ext2fs_file_get_fs@Base 1.37 + ext2fs_file_get_inode@Base 1.42 + ext2fs_file_get_inode_num@Base 1.42.1 + ext2fs_file_get_lsize@Base 1.37 + ext2fs_file_get_size@Base 1.37 + ext2fs_file_llseek@Base 1.37 + ext2fs_file_lseek@Base 1.37 + ext2fs_file_open2@Base 1.37 + ext2fs_file_open@Base 1.37 + ext2fs_file_read@Base 1.37 + ext2fs_file_set_size2@Base 1.42 + ext2fs_file_set_size@Base 1.37 + ext2fs_file_write@Base 1.37 + ext2fs_find_block_device@Base 1.37 + ext2fs_find_first_set_block_bitmap2@Base 1.42.9-3~ + ext2fs_find_first_set_generic_bitmap@Base 1.42.9-3~ + ext2fs_find_first_set_generic_bmap@Base 1.42.9-3~ + ext2fs_find_first_set_inode_bitmap2@Base 1.42.9-3~ + ext2fs_find_first_zero_block_bitmap2@Base 1.42.2 + ext2fs_find_first_zero_generic_bitmap@Base 1.42.3 + ext2fs_find_first_zero_generic_bmap@Base 1.42.2 + ext2fs_find_first_zero_inode_bitmap2@Base 1.42.2 + ext2fs_find_inode_goal@Base 1.43 + ext2fs_flush2@Base 1.42 + ext2fs_flush@Base 1.37 + ext2fs_flush_icache@Base 1.37 + ext2fs_follow_link@Base 1.37 + ext2fs_free@Base 1.37 + ext2fs_free_block_bitmap@Base 1.37 + ext2fs_free_blocks_count@Base 1.42 + ext2fs_free_blocks_count_add@Base 1.42 + ext2fs_free_blocks_count_set@Base 1.42 + ext2fs_free_dblist@Base 1.37 + ext2fs_free_ext_attr@Base 1.43 + ext2fs_free_generic_bitmap@Base 1.37 + ext2fs_free_generic_bmap@Base 1.42 + ext2fs_free_icount@Base 1.37 + ext2fs_free_inode_bitmap@Base 1.37 + ext2fs_free_inode_cache@Base 1.43 + ext2fs_free_mem@Base 1.37 + ext2fs_fstat@Base 1.42 + ext2fs_fudge_block_bitmap_end2@Base 1.42 + ext2fs_fudge_block_bitmap_end@Base 1.37 + ext2fs_fudge_generic_bitmap_end@Base 1.41.0 + ext2fs_fudge_generic_bmap_end@Base 1.42 + ext2fs_fudge_inode_bitmap_end@Base 1.37 + ext2fs_get_array@Base 1.40.3 + ext2fs_get_arrayzero@Base 1.42 + ext2fs_get_bitmap_granularity@Base 1.42 + ext2fs_get_block_bitmap_end2@Base 1.42 + ext2fs_get_block_bitmap_end@Base 1.37 + ext2fs_get_block_bitmap_range2@Base 1.42 + ext2fs_get_block_bitmap_range@Base 1.41.0 + ext2fs_get_block_bitmap_start2@Base 1.42 + ext2fs_get_block_bitmap_start@Base 1.37 + ext2fs_get_blocks@Base 1.37 + ext2fs_get_data_io@Base 1.37 + ext2fs_get_device_phys_sectsize@Base 1.41.12 + ext2fs_get_device_sectsize@Base 1.37 + ext2fs_get_device_size2@Base 1.41.4 + ext2fs_get_device_size@Base 1.37 + ext2fs_get_dio_alignment@Base 1.42.3 + ext2fs_get_dx_countlimit@Base 1.43 + ext2fs_get_free_blocks2@Base 1.42 + ext2fs_get_free_blocks@Base 1.37 + ext2fs_get_generic_bitmap_end@Base 1.41.0 + ext2fs_get_generic_bitmap_range@Base 1.41.0 + ext2fs_get_generic_bitmap_start@Base 1.41.0 + ext2fs_get_generic_bmap_end@Base 1.42 + ext2fs_get_generic_bmap_range@Base 1.42 + ext2fs_get_generic_bmap_start@Base 1.42 + ext2fs_get_icount_size@Base 1.37 + ext2fs_get_inode_bitmap_end2@Base 1.42 + ext2fs_get_inode_bitmap_end@Base 1.37 + ext2fs_get_inode_bitmap_range2@Base 1.42 + ext2fs_get_inode_bitmap_range@Base 1.41.0 + ext2fs_get_inode_bitmap_start2@Base 1.42 + ext2fs_get_inode_bitmap_start@Base 1.37 + ext2fs_get_library_version@Base 1.37 + ext2fs_get_mem@Base 1.37 + ext2fs_get_memalign@Base 1.41.13 + ext2fs_get_memzero@Base 1.42 + ext2fs_get_next_inode@Base 1.37 + ext2fs_get_next_inode_full@Base 1.37 + ext2fs_get_num_dirs@Base 1.37 + ext2fs_get_pathname@Base 1.37 + ext2fs_get_rec_len@Base 1.41.7 + ext2fs_group_blocks_count@Base 1.42 + ext2fs_group_desc@Base 1.42 + ext2fs_group_desc_csum@Base 1.42.2 + ext2fs_group_desc_csum_set@Base 1.41.0 + ext2fs_group_desc_csum_verify@Base 1.41.0 + ext2fs_group_first_block2@Base 1.42 + ext2fs_group_first_block@Base 1.40 + ext2fs_group_last_block2@Base 1.42 + ext2fs_group_last_block@Base 1.40 + ext2fs_group_of_blk2@Base 1.42 + ext2fs_group_of_blk@Base 1.37 + ext2fs_group_of_ino@Base 1.37 + ext2fs_iblk_add_blocks@Base 1.41.0 + ext2fs_iblk_set@Base 1.41.0 + ext2fs_iblk_sub_blocks@Base 1.41.0 + ext2fs_icount_decrement@Base 1.37 + ext2fs_icount_fetch@Base 1.37 + ext2fs_icount_increment@Base 1.37 + ext2fs_icount_store@Base 1.37 + ext2fs_icount_validate@Base 1.37 + ext2fs_image_bitmap_read@Base 1.37 + ext2fs_image_bitmap_write@Base 1.37 + ext2fs_image_inode_read@Base 1.37 + ext2fs_image_inode_write@Base 1.37 + ext2fs_image_super_read@Base 1.37 + ext2fs_image_super_write@Base 1.37 + ext2fs_init_csum_seed@Base 1.43 + ext2fs_init_dblist@Base 1.37 + ext2fs_initialize@Base 1.37 + ext2fs_initialize_dirent_tail@Base 1.43 + ext2fs_inline_data_dir_iterate@Base 1.43 + ext2fs_inline_data_ea_remove@Base 1.43 + ext2fs_inline_data_expand@Base 1.43 + ext2fs_inline_data_get@Base 1.43 + ext2fs_inline_data_init@Base 1.43 + ext2fs_inline_data_set@Base 1.43 + ext2fs_inline_data_size@Base 1.43 + ext2fs_inode@Base 1.43 + ext2fs_inode_alloc_stats2@Base 1.37 + ext2fs_inode_alloc_stats@Base 1.37 + ext2fs_inode_bitmap_checksum@Base 1.43 + ext2fs_inode_bitmap_csum_set@Base 1.43 + ext2fs_inode_bitmap_csum_verify@Base 1.43 + ext2fs_inode_bitmap_loc@Base 1.42 + ext2fs_inode_bitmap_loc_set@Base 1.42 + ext2fs_inode_csum_set@Base 1.43 + ext2fs_inode_csum_verify@Base 1.43 + ext2fs_inode_data_blocks2@Base 1.42 + ext2fs_inode_data_blocks@Base 1.37 + ext2fs_inode_has_valid_blocks2@Base 1.42 + ext2fs_inode_has_valid_blocks@Base 1.37 + ext2fs_inode_i_blocks@Base 1.42 + ext2fs_inode_io_intern2@Base 1.37 + ext2fs_inode_io_intern@Base 1.37 + ext2fs_inode_scan_flags@Base 1.37 + ext2fs_inode_scan_goto_blockgroup@Base 1.37 + ext2fs_inode_size_set@Base 1.42.12 + ext2fs_inode_table_loc@Base 1.42 + ext2fs_inode_table_loc_set@Base 1.42 + ext2fs_journal_sb_start@Base 1.42.12 + ext2fs_link@Base 1.37 + ext2fs_llseek@Base 1.37 + ext2fs_lookup@Base 1.37 + ext2fs_make_generic_bitmap@Base 1.41.0 + ext2fs_map_cluster_block@Base 1.42.9 + ext2fs_mark_bb_dirty@Base 1.37 + ext2fs_mark_block_bitmap2@Base 1.42 + ext2fs_mark_block_bitmap@Base 1.37 + ext2fs_mark_block_bitmap_range2@Base 1.42 + ext2fs_mark_block_bitmap_range@Base 1.37 + ext2fs_mark_changed@Base 1.37 + ext2fs_mark_generic_bitmap@Base 1.37 + ext2fs_mark_generic_bmap@Base 1.42 + ext2fs_mark_ib_dirty@Base 1.37 + ext2fs_mark_inode_bitmap2@Base 1.42 + ext2fs_mark_inode_bitmap@Base 1.37 + ext2fs_mark_super_dirty@Base 1.37 + ext2fs_mark_valid@Base 1.37 + ext2fs_max_extent_depth@Base 1.43 + ext2fs_mem_is_zero@Base 1.42 + ext2fs_mkdir@Base 1.37 + ext2fs_mmp_clear@Base 1.42 + ext2fs_mmp_csum_set@Base 1.43 + ext2fs_mmp_csum_verify@Base 1.43 + ext2fs_mmp_init@Base 1.42 + ext2fs_mmp_new_seq@Base 1.42 + ext2fs_mmp_read@Base 1.42 + ext2fs_mmp_start@Base 1.42 + ext2fs_mmp_stop@Base 1.42 + ext2fs_mmp_update2@Base 1.43 + ext2fs_mmp_update@Base 1.42 + ext2fs_mmp_write@Base 1.42 + ext2fs_namei@Base 1.37 + ext2fs_namei_follow@Base 1.37 + ext2fs_native_flag@Base 1.37 + ext2fs_new_block2@Base 1.42 + ext2fs_new_block@Base 1.37 + ext2fs_new_dir_block@Base 1.37 + ext2fs_new_dir_inline_data@Base 1.43 + ext2fs_new_inode@Base 1.37 + ext2fs_new_range@Base 1.43 + ext2fs_numeric_progress_close@Base 1.42 + ext2fs_numeric_progress_init@Base 1.42 + ext2fs_numeric_progress_ops@Base 1.43 + ext2fs_numeric_progress_update@Base 1.42 + ext2fs_open2@Base 1.37 + ext2fs_open@Base 1.37 + ext2fs_open_file@Base 1.42 + ext2fs_open_inode_scan@Base 1.37 + ext2fs_parse_version_string@Base 1.37 + ext2fs_process_dir_block@Base 1.37 + ext2fs_punch@Base 1.42 + ext2fs_r_blocks_count@Base 1.42 + ext2fs_r_blocks_count_add@Base 1.42 + ext2fs_r_blocks_count_set@Base 1.42 + ext2fs_rb_augment_erase_begin@Base 1.42.1 + ext2fs_rb_augment_erase_end@Base 1.42.1 + ext2fs_rb_augment_insert@Base 1.42.1 + ext2fs_rb_erase@Base 1.42.1 + ext2fs_rb_first@Base 1.42.1 + ext2fs_rb_insert_color@Base 1.42.1 + ext2fs_rb_last@Base 1.42.1 + ext2fs_rb_next@Base 1.42.1 + ext2fs_rb_prev@Base 1.42.1 + ext2fs_rb_replace_node@Base 1.42.1 + ext2fs_read_bb_FILE2@Base 1.37 + ext2fs_read_bb_FILE@Base 1.37 + ext2fs_read_bb_inode@Base 1.37 + ext2fs_read_bitmaps@Base 1.37 + ext2fs_read_block_bitmap@Base 1.37 + ext2fs_read_dir_block2@Base 1.37 + ext2fs_read_dir_block3@Base 1.42 + ext2fs_read_dir_block4@Base 1.43 + ext2fs_read_dir_block@Base 1.37 + ext2fs_read_ext_attr2@Base 1.42 + ext2fs_read_ext_attr3@Base 1.43 + ext2fs_read_ext_attr@Base 1.37 + ext2fs_read_ind_block@Base 1.37 + ext2fs_read_inode@Base 1.37 + ext2fs_read_inode_bitmap@Base 1.37 + ext2fs_read_inode_full@Base 1.37 + ext2fs_remove_exit_fn@Base 1.43 + ext2fs_reserve_super_and_bgd@Base 1.37 + ext2fs_resize_block_bitmap2@Base 1.42 + ext2fs_resize_block_bitmap@Base 1.37 + ext2fs_resize_generic_bitmap@Base 1.37 + ext2fs_resize_generic_bmap@Base 1.42 + ext2fs_resize_inode_bitmap2@Base 1.42 + ext2fs_resize_inode_bitmap@Base 1.37 + ext2fs_resize_mem@Base 1.37 + ext2fs_rewrite_to_io@Base 1.37 + ext2fs_set_alloc_block_callback@Base 1.41.0 + ext2fs_set_bit64@Base 1.42 + ext2fs_set_bit@Base 1.37 + ext2fs_set_bitmap_padding@Base 1.37 + ext2fs_set_block_alloc_stats_callback@Base 1.41.0 + ext2fs_set_block_alloc_stats_range_callback@Base 1.43 + ext2fs_set_block_bitmap_range2@Base 1.42 + ext2fs_set_block_bitmap_range@Base 1.41.0 + ext2fs_set_data_io@Base 1.37 + ext2fs_set_dir_block2@Base 1.42 + ext2fs_set_dir_block@Base 1.37 + ext2fs_set_gdt_csum@Base 1.41.0 + ext2fs_set_generic_bitmap_padding@Base 1.41.0 + ext2fs_set_generic_bitmap_range@Base 1.41.0 + ext2fs_set_generic_bmap_padding@Base 1.42 + ext2fs_set_generic_bmap_range@Base 1.42 + ext2fs_set_inode_bitmap_range2@Base 1.42 + ext2fs_set_inode_bitmap_range@Base 1.41.0 + ext2fs_set_inode_callback@Base 1.37 + ext2fs_set_new_range_callback@Base 1.43 + ext2fs_set_rec_len@Base 1.41.7 + ext2fs_sha512@Base 1.43 + ext2fs_stat@Base 1.42 + ext2fs_super_and_bgd_loc2@Base 1.42 + ext2fs_super_and_bgd_loc@Base 1.37 + ext2fs_superblock_csum_set@Base 1.43 + ext2fs_superblock_csum_verify@Base 1.43 + ext2fs_swab16@Base 1.37 + ext2fs_swab32@Base 1.37 + ext2fs_swab64@Base 1.40 + ext2fs_symlink@Base 1.42.7 + ext2fs_sync_device@Base 1.37 + ext2fs_tdb_append@Base 1.40 + ext2fs_tdb_chainlock@Base 1.40 + ext2fs_tdb_chainlock_mark@Base 1.40.7 + ext2fs_tdb_chainlock_nonblock@Base 1.40.7 + ext2fs_tdb_chainlock_read@Base 1.40 + ext2fs_tdb_chainlock_unmark@Base 1.40.7 + ext2fs_tdb_chainunlock@Base 1.40 + ext2fs_tdb_chainunlock_read@Base 1.40 + ext2fs_tdb_close@Base 1.40 + ext2fs_tdb_delete@Base 1.40 + ext2fs_tdb_dump_all@Base 1.40 + ext2fs_tdb_enable_seqnum@Base 1.40.7 + ext2fs_tdb_error@Base 1.40 + ext2fs_tdb_errorstr@Base 1.40 + ext2fs_tdb_exists@Base 1.40 + ext2fs_tdb_fd@Base 1.40 + ext2fs_tdb_fetch@Base 1.40 + ext2fs_tdb_firstkey@Base 1.40 + ext2fs_tdb_flush@Base 1.43 + ext2fs_tdb_get_flags@Base 1.40 + ext2fs_tdb_get_logging_private@Base 1.40 + ext2fs_tdb_get_seqnum@Base 1.40 + ext2fs_tdb_hash_size@Base 1.40 + ext2fs_tdb_increment_seqnum_nonblock@Base 1.40.7 + ext2fs_tdb_lock_nonblock@Base 1.40.7 + ext2fs_tdb_lockall@Base 1.40 + ext2fs_tdb_lockall_mark@Base 1.40.7 + ext2fs_tdb_lockall_nonblock@Base 1.40.7 + ext2fs_tdb_lockall_read@Base 1.40 + ext2fs_tdb_lockall_read_nonblock@Base 1.40.7 + ext2fs_tdb_lockall_unmark@Base 1.40.7 + ext2fs_tdb_log_fn@Base 1.40 + ext2fs_tdb_map_size@Base 1.40 + ext2fs_tdb_name@Base 1.40 + ext2fs_tdb_nextkey@Base 1.40 + ext2fs_tdb_open@Base 1.40 + ext2fs_tdb_open_ex@Base 1.40 + ext2fs_tdb_parse_record@Base 1.40 + ext2fs_tdb_printfreelist@Base 1.40 + ext2fs_tdb_reopen@Base 1.40 + ext2fs_tdb_reopen_all@Base 1.40 + ext2fs_tdb_set_logging_function@Base 1.40 + ext2fs_tdb_set_max_dead@Base 1.40 + ext2fs_tdb_store@Base 1.40 + ext2fs_tdb_transaction_cancel@Base 1.40 + ext2fs_tdb_transaction_commit@Base 1.40 + ext2fs_tdb_transaction_recover@Base 1.40 + ext2fs_tdb_transaction_start@Base 1.40 + ext2fs_tdb_traverse@Base 1.40 + ext2fs_tdb_traverse_read@Base 1.40 + ext2fs_tdb_unlockall@Base 1.40 + ext2fs_tdb_unlockall_read@Base 1.40 + ext2fs_tdb_validate_freelist@Base 1.40 + ext2fs_test_bb_dirty@Base 1.37 + ext2fs_test_bit64@Base 1.42 + ext2fs_test_bit@Base 1.37 + ext2fs_test_block_bitmap2@Base 1.42 + ext2fs_test_block_bitmap@Base 1.37 + ext2fs_test_block_bitmap_range2@Base 1.42 + ext2fs_test_block_bitmap_range@Base 1.37 + ext2fs_test_changed@Base 1.37 + ext2fs_test_generic_bitmap@Base 1.37 + ext2fs_test_generic_bmap@Base 1.42 + ext2fs_test_ib_dirty@Base 1.37 + ext2fs_test_inode_bitmap2@Base 1.42 + ext2fs_test_inode_bitmap@Base 1.37 + ext2fs_test_inode_bitmap_range@Base 1.41.8 + ext2fs_test_valid@Base 1.37 + ext2fs_u32_copy@Base 1.37 + ext2fs_u32_list_add@Base 1.37 + ext2fs_u32_list_count@Base 1.37 + ext2fs_u32_list_create@Base 1.37 + ext2fs_u32_list_del@Base 1.37 + ext2fs_u32_list_equal@Base 1.37 + ext2fs_u32_list_find@Base 1.37 + ext2fs_u32_list_free@Base 1.37 + ext2fs_u32_list_iterate@Base 1.37 + ext2fs_u32_list_iterate_begin@Base 1.37 + ext2fs_u32_list_iterate_end@Base 1.37 + ext2fs_u32_list_test@Base 1.37 + ext2fs_unlink@Base 1.37 + ext2fs_unmark_block_bitmap2@Base 1.42 + ext2fs_unmark_block_bitmap@Base 1.37 + ext2fs_unmark_block_bitmap_range2@Base 1.42 + ext2fs_unmark_block_bitmap_range@Base 1.37 + ext2fs_unmark_generic_bitmap@Base 1.37 + ext2fs_unmark_generic_bmap@Base 1.42 + ext2fs_unmark_inode_bitmap2@Base 1.42 + ext2fs_unmark_inode_bitmap@Base 1.37 + ext2fs_unmark_valid@Base 1.37 + ext2fs_update_bb_inode@Base 1.37 + ext2fs_update_dynamic_rev@Base 1.37 + ext2fs_verify_csum_type@Base 1.43 + ext2fs_warn_bitmap2@Base 1.37 + ext2fs_warn_bitmap32@Base 1.42 + ext2fs_warn_bitmap@Base 1.37 + ext2fs_write_bb_FILE@Base 1.37 + ext2fs_write_bitmaps@Base 1.37 + ext2fs_write_block_bitmap@Base 1.37 + ext2fs_write_dir_block2@Base 1.37 + ext2fs_write_dir_block3@Base 1.42 + ext2fs_write_dir_block4@Base 1.43 + ext2fs_write_dir_block@Base 1.37 + ext2fs_write_ext_attr2@Base 1.42 + ext2fs_write_ext_attr3@Base 1.43 + ext2fs_write_ext_attr@Base 1.37 + ext2fs_write_ind_block@Base 1.37 + ext2fs_write_inode@Base 1.37 + ext2fs_write_inode_bitmap@Base 1.37 + ext2fs_write_inode_full@Base 1.37 + ext2fs_write_new_inode@Base 1.37 + ext2fs_xattr_get@Base 1.43 + ext2fs_xattr_inode_max_size@Base 1.43 + ext2fs_xattr_remove@Base 1.43 + ext2fs_xattr_set@Base 1.43 + ext2fs_xattrs_close@Base 1.43 + ext2fs_xattrs_count@Base 1.43 + ext2fs_xattrs_flags@Base 1.43.4~WIP.2017.01.30 + ext2fs_xattrs_iterate@Base 1.43 + ext2fs_xattrs_open@Base 1.43 + ext2fs_xattrs_read@Base 1.43 + ext2fs_xattrs_write@Base 1.43 + ext2fs_zero_blocks2@Base 1.42 + ext2fs_zero_blocks@Base 1.41.0 + initialize_ext2_error_table@Base 1.37 + initialize_ext2_error_table_r@Base 1.37 + inode_io_manager@Base 1.37 + io_channel_alloc_buf@Base 1.42.3 + io_channel_cache_readahead@Base 1.43 + io_channel_discard@Base 1.42 + io_channel_read_blk64@Base 1.41.1 + io_channel_set_options@Base 1.37 + io_channel_write_blk64@Base 1.41.1 + io_channel_write_byte@Base 1.37 + io_channel_zeroout@Base 1.43 + qcow2_read_header@Base 1.42 + qcow2_write_raw_image@Base 1.42 + set_undo_io_backing_manager@Base 1.41.0 + set_undo_io_backup_file@Base 1.41.0 + test_io_backing_manager@Base 1.37 + test_io_cb_read_blk64@Base 1.41.0 + test_io_cb_read_blk@Base 1.37 + test_io_cb_set_blksize@Base 1.37 + test_io_cb_write_blk64@Base 1.41.0 + test_io_cb_write_blk@Base 1.37 + test_io_cb_write_byte@Base 1.37 + test_io_manager@Base 1.37 + undo_io_manager@Base 1.41.0 + unix_io_manager@Base 1.37 + unixfd_io_manager@Base 1.43.2 diff --git a/debian/e2fsprogs-udeb.shlibs.local b/debian/e2fsprogs-udeb.shlibs.local new file mode 100644 index 0000000..b41b583 --- /dev/null +++ b/debian/e2fsprogs-udeb.shlibs.local @@ -0,0 +1,6 @@ +libblkid 1 libblkid1-udeb +# force the dependency to libblkid1-udeb, even if it don't include the lib +libcom_err 2 libblkid1-udeb +libuuid 1 libuuid1-udeb +libext2fs 2 libblkid1-udeb +libe2p 2 libblkid1-udeb diff --git a/debian/e2fsprogs.docs b/debian/e2fsprogs.docs new file mode 100644 index 0000000..7af9733 --- /dev/null +++ b/debian/e2fsprogs.docs @@ -0,0 +1,2 @@ +README +RELEASE-NOTES diff --git a/debian/e2fsprogs.files b/debian/e2fsprogs.files new file mode 100644 index 0000000..37e54da --- /dev/null +++ b/debian/e2fsprogs.files @@ -0,0 +1,6 @@ +sbin +usr/bin +usr/sbin +usr/share/man +usr/share/locale +etc diff --git a/debian/e2fsprogs.postinst b/debian/e2fsprogs.postinst new file mode 100644 index 0000000..00ac363 --- /dev/null +++ b/debian/e2fsprogs.postinst @@ -0,0 +1,13 @@ +#!/bin/sh + +# Abort on error. +set -e + +if [ -x /usr/sbin/update-initramfs -a \ + -e /etc/initramfs-tools/initramfs.conf ]; then + update-initramfs -u +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/e2fsprogs.preinst b/debian/e2fsprogs.preinst new file mode 100644 index 0000000..bfa9f6b --- /dev/null +++ b/debian/e2fsprogs.preinst @@ -0,0 +1,19 @@ +#!/bin/sh + +# Abort on error. +set -e + +PKG=e2fsprogs +DOCLNK=/usr/share/doc/$PKG +if test "$1" = upgrade \ + -a -L $DOCLNK +then + rm $DOCLNK +fi + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0 diff --git a/debian/e2fsprogs.shlibs.local.in b/debian/e2fsprogs.shlibs.local.in new file mode 100644 index 0000000..1f7db5d --- /dev/null +++ b/debian/e2fsprogs.shlibs.local.in @@ -0,0 +1,8 @@ +libcom_err 2 libcomerr2 (>= 1.42~WIP-2011-10-05-1) +libss 2 libss2 (>= 1.34-1) +ifdef(`UTIL_LINUX_NG',, +``libuuid 1 libuuid1 (>= 1.34-1) +libblkid 1 libblkid1 (>= 1.34-1) +'')dnl +libext2fs 2 e2fslibs (= ${binary:Version}) +libe2p 2 e2fslibs (= ${binary:Version}) diff --git a/debian/fuse2fs.files b/debian/fuse2fs.files new file mode 100644 index 0000000..cd37a70 --- /dev/null +++ b/debian/fuse2fs.files @@ -0,0 +1,2 @@ +/usr/sbin/fuse2fs +/usr/share/man/man1/fuse2fs.1 diff --git a/debian/libblkid-dev.files.in b/debian/libblkid-dev.files.in new file mode 100644 index 0000000..7b3da36 --- /dev/null +++ b/debian/libblkid-dev.files.in @@ -0,0 +1,4 @@ +usr/lib/*/libblkid*.so.* +usr/include/blkid +usr/share/man/man3/libblkid.3 +usr/lib/*/pkgconfig/blkid.pc diff --git a/debian/libblkid.copyright b/debian/libblkid.copyright new file mode 100644 index 0000000..8be818b --- /dev/null +++ b/debian/libblkid.copyright @@ -0,0 +1,19 @@ +This package was added to the e2fsprogs debian source package by +Theodore Ts'o on Sat Mar 15 15:33:37 EST 2003 + +It is part of the main e2fsprogs distribution, which can be found at: + + http://sourceforge.net/projects/e2fsprogs + +Upstream Author: Theodore Ts'o + +Copyright: + +Copyright (C) 1999, 2001 by Andries Brouwer +Copyright (C) 1999, 2000, 2003 by Theodore Ts'o + +You are free to distribute this software under the terms of the GNU +Lesser (Library) General Public License. + +On Debian systems, the complete text of the GNU Lesser (Library) +General Public License can be found in /usr/share/common-licenses/LGPL-2. diff --git a/debian/libblkid1.files.in b/debian/libblkid1.files.in new file mode 100644 index 0000000..54ef86d --- /dev/null +++ b/debian/libblkid1.files.in @@ -0,0 +1 @@ +lib/*/libblkid*.so.* diff --git a/debian/libblkid1.symbols b/debian/libblkid1.symbols new file mode 100644 index 0000000..5ab91f5 --- /dev/null +++ b/debian/libblkid1.symbols @@ -0,0 +1,41 @@ +libblkid.so.1 libblkid1 #MINVER# + blkid__scan_dir@Base 1.41.1 + blkid_debug_mask@Base 1.33 + blkid_dev_devname@Base 1.33 + blkid_dev_has_tag@Base 1.38 + blkid_dev_iterate_begin@Base 1.33 + blkid_dev_iterate_end@Base 1.33 + blkid_dev_next@Base 1.33 + blkid_dev_set_search@Base 1.38 +#MISSING: 1.41.1# blkid_devdirs@Base 1.34 + blkid_devno_to_devname@Base 1.33 + blkid_find_dev_with_tag@Base 1.33 + blkid_find_tag_dev@Base 1.33 + blkid_flush_cache@Base 1.33 + blkid_free_dev@Base 1.33 + blkid_free_tag@Base 1.33 + blkid_gc_cache@Base 1.40 + blkid_get_cache@Base 1.33 + blkid_get_dev@Base 1.33 + blkid_get_dev_size@Base 1.33 + blkid_get_devname@Base 1.33 + blkid_get_library_version@Base 1.37 + blkid_get_tag_value@Base 1.33 + blkid_known_fstype@Base 1.34 + blkid_llseek@Base 1.33 + blkid_new_dev@Base 1.33 + blkid_parse_tag_string@Base 1.33 + blkid_parse_version_string@Base 1.37 + blkid_probe_all@Base 1.33 + blkid_probe_all_new@Base 1.38 + blkid_put_cache@Base 1.33 + blkid_read_cache@Base 1.33 + blkid_set_tag@Base 1.33 + blkid_strdup@Base 1.33 + blkid_strndup@Base 1.33 + blkid_tag_iterate_begin@Base 1.33 + blkid_tag_iterate_end@Base 1.33 + blkid_tag_next@Base 1.33 + blkid_verify@Base 1.37 +#MISSING: 1.40.7# check_for_modules@Base 1.40.6 +#MISSING: 1.40.7# fs_proc_check@Base 1.40.6 diff --git a/debian/libcomerr2.copyright b/debian/libcomerr2.copyright new file mode 100644 index 0000000..578628a --- /dev/null +++ b/debian/libcomerr2.copyright @@ -0,0 +1,24 @@ +This is the Debian GNU/Linux prepackaged version of the Common Error +Description library. It is currently distributed together with the EXT2 file +system utilities, which are otherwise packaged as "e2fsprogs". + +This package was put together by Yann Dirson , +from sources obtained from a mirror of: + tsx-11.mit.edu:/pub/linux/packages/ext2fs/ + +From the original distribution: + +Copyright 1987, 1988 by the Student Information Processing Board + of the Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this software +and its documentation for any purpose and without fee is +hereby granted, provided that the above copyright notice +appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation, +and that the names of M.I.T. and the M.I.T. S.I.P.B. not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +M.I.T. and the M.I.T. S.I.P.B. make no representations about +the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. diff --git a/debian/libcomerr2.files.in b/debian/libcomerr2.files.in new file mode 100644 index 0000000..16b039e --- /dev/null +++ b/debian/libcomerr2.files.in @@ -0,0 +1 @@ +lib/*/libcom_err*.so.* diff --git a/debian/libcomerr2.symbols b/debian/libcomerr2.symbols new file mode 100644 index 0000000..ce3b74a --- /dev/null +++ b/debian/libcomerr2.symbols @@ -0,0 +1,21 @@ +libcom_err.so.2 libcomerr2 #MINVER# + _et_dynamic_list@Base 1.38 + _et_list@Base 1.01 + add_error_table@Base 1.34 + add_to_error_table@Base 1.34 + com_err@Base 1.01 + com_err_hook@Base 1.01 + com_err_va@Base 1.01 + com_right@Base 1.34 + com_right_r@Base 1.41.11 + error_message@Base 1.01 + error_table_name@Base 1.01 + et_list_lock@Base 1.41.2 + et_list_unlock@Base 1.41.2 + free_error_table@Base 1.34 + init_error_table@Base 1.01 + initialize_error_table_r@Base 1.34 + remove_error_table@Base 1.34 + reset_com_err_hook@Base 1.01 + set_com_err_gettext@Base 1.41.99 + set_com_err_hook@Base 1.01 diff --git a/debian/libss2.copyright b/debian/libss2.copyright new file mode 100644 index 0000000..f039832 --- /dev/null +++ b/debian/libss2.copyright @@ -0,0 +1,25 @@ +This is the Debian GNU/Linux prepackaged version of the ss +command-line interface parsing library. It is currently +distributed together with the EXT2 file system utilities, which are +otherwise packaged as "e2fsprogs". + +This package was put together by Yann Dirson , +from sources obtained from a mirror of: + tsx-11.mit.edu:/pub/linux/packages/ext2fs/ + +From the original distribution: + +Copyright 1987, 1988 by the Student Information Processing Board + of the Massachusetts Institute of Technology + +Permission to use, copy, modify, and distribute this software +and its documentation for any purpose and without fee is +hereby granted, provided that the above copyright notice +appear in all copies and that both that copyright notice and +this permission notice appear in supporting documentation, +and that the names of M.I.T. and the M.I.T. S.I.P.B. not be +used in advertising or publicity pertaining to distribution +of the software without specific, written prior permission. +M.I.T. and the M.I.T. S.I.P.B. make no representations about +the suitability of this software for any purpose. It is +provided "as is" without express or implied warranty. diff --git a/debian/libss2.files.in b/debian/libss2.files.in new file mode 100644 index 0000000..386e185 --- /dev/null +++ b/debian/libss2.files.in @@ -0,0 +1 @@ +lib/*/libss*.so.* diff --git a/debian/libss2.symbols b/debian/libss2.symbols new file mode 100644 index 0000000..b6fe40b --- /dev/null +++ b/debian/libss2.symbols @@ -0,0 +1,35 @@ +libss.so.2 libss2 #MINVER# + _ss_pager_name@Base 1.01 + _ss_table@Base 1.01 + et_ss_error_table@Base 1.35 + initialize_ss_error_table@Base 1.01 + initialize_ss_error_table_r@Base 1.34 + ss_abort_subsystem@Base 1.01 + ss_add_info_dir@Base 1.01 + ss_add_request_table@Base 1.01 + ss_create_invocation@Base 1.01 + ss_delete_info_dir@Base 1.01 + ss_delete_invocation@Base 1.01 + ss_delete_request_table@Base 1.01 + ss_error@Base 1.01 + ss_execute_command@Base 1.01 + ss_execute_line@Base 1.01 + ss_get_prompt@Base 1.01 + ss_get_readline@Base 1.34 + ss_help@Base 1.01 + ss_list_requests@Base 1.01 + ss_listen@Base 1.01 + ss_name@Base 1.01 + ss_page_stdin@Base 1.01 + ss_pager_create@Base 1.01 + ss_parse@Base 1.01 + ss_perror@Base 1.01 + ss_quit@Base 1.01 + ss_rl_completion@Base 1.34 + ss_safe_getenv@Base 1.38 + ss_self_identify@Base 1.01 + ss_set_prompt@Base 1.01 + ss_std_requests@Base 1.01 + ss_subsystem_name@Base 1.01 + ss_subsystem_version@Base 1.01 + ss_unimplemented@Base 1.01 diff --git a/debian/libuuid1.copyright b/debian/libuuid1.copyright new file mode 100644 index 0000000..f346739 --- /dev/null +++ b/debian/libuuid1.copyright @@ -0,0 +1,38 @@ +This package was added to the e2fsprogs debian source package by +Theodore Ts'o on Sat Mar 15 15:33:37 EST 2003 + +It is part of the main e2fsprogs distribution, which can be found at: + + http://sourceforge.net/projects/e2fsprogs + +Upstream Author: Theodore Ts'o + +Copyright: + +Copyright (C) 1999, 2000, 2003, 2004 by Theodore Ts'o + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/debian/libuuid1.files.in b/debian/libuuid1.files.in new file mode 100644 index 0000000..0761f3b --- /dev/null +++ b/debian/libuuid1.files.in @@ -0,0 +1 @@ +lib/*/libuuid*.so.* diff --git a/debian/libuuid1.postinst b/debian/libuuid1.postinst new file mode 100644 index 0000000..5336fcf --- /dev/null +++ b/debian/libuuid1.postinst @@ -0,0 +1,40 @@ +#!/bin/sh + +set -e + +ADDUSERCONF='/etc/adduser.conf' + +if test -f $ADDUSERCONF; then + FIRST_SYSTEM_UID=$(sed -n "s/^[[:space:]]*FIRST_SYSTEM_UID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF) + LAST_SYSTEM_UID=$(sed -n "s/^[[:space:]]*LAST_SYSTEM_UID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF) + FIRST_SYSTEM_GID=$(sed -n "s/^[[:space:]]*FIRST_SYSTEM_GID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF) + LAST_SYSTEM_GID=$(sed -n "s/^[[:space:]]*LAST_SYSTEM_GID[[:space:]]*=[[:space:]]*[\"']\?\([^\"']*\)[\"']\?/\1/p" $ADDUSERCONF) +fi + +if test -z "$FIRST_SYSTEM_UID"; then + FIRST_SYSTEM_UID=100 +fi +if test -z "$LAST_SYSTEM_UID"; then + LAST_SYSTEM_UID=999 +fi +if test -z "$FIRST_SYSTEM_GID"; then + FIRST_SYSTEM_GID=100 +fi +if test -z "$LAST_SYSTEM_GID"; then + LAST_SYSTEM_GID=999 +fi + +if ! getent group | grep -q libuuid; then + groupadd -f -K GID_MIN=$FIRST_SYSTEM_GID -K GID_MAX=$LAST_SYSTEM_GID libuuid +fi +if ! getent passwd | grep -q libuuid; then + useradd -d /var/lib/libuuid -K UID_MIN=$FIRST_SYSTEM_UID -K UID_MAX=$LAST_SYSTEM_UID -g libuuid libuuid +fi + +mkdir -p /var/lib/libuuid +chown libuuid:libuuid /var/lib/libuuid +chmod 2775 /var/lib/libuuid + +#DEBHELPER# + +exit 0 diff --git a/debian/libuuid1.postrm b/debian/libuuid1.postrm new file mode 100644 index 0000000..8c286ee --- /dev/null +++ b/debian/libuuid1.postrm @@ -0,0 +1,10 @@ +#!/bin/sh +set -e +if [ "$1" = purge ] +then + rm -rf /var/lib/libuuid +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/libuuid1.symbols b/debian/libuuid1.symbols new file mode 100644 index 0000000..5a00431 --- /dev/null +++ b/debian/libuuid1.symbols @@ -0,0 +1,19 @@ +libuuid.so.1 libuuid1 #MINVER# + uuid__generate_random@Base 1.40.4 + uuid__generate_time@Base 1.40.4 + uuid_clear@Base 1.05 + uuid_compare@Base 1.05 + uuid_copy@Base 1.05 + uuid_generate@Base 1.05 + uuid_generate_random@Base 1.15 + uuid_generate_time@Base 1.15 + uuid_is_null@Base 1.05 + uuid_pack@Base 1.05 + uuid_parse@Base 1.05 + uuid_time@Base 1.15 + uuid_type@Base 1.15 + uuid_unpack@Base 1.05 + uuid_unparse@Base 1.05 + uuid_unparse_lower@Base 1.36 + uuid_unparse_upper@Base 1.36 + uuid_variant@Base 1.15 diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..c4e0acf --- /dev/null +++ b/debian/rules @@ -0,0 +1,662 @@ +#! /usr/bin/make -f +# -*- makefile -*- +# +# Invoke each target with `./debian/rules '. All targets should be +# invoked with the package root as the current directory. +# +# The `binary' target must be run as root, as it needs to install files with +# specific ownerships. + +-include debian/rules.custom + +export DEB_BUILD_MAINT_OPTIONS ?= hardening=+all + +# be paranoid +export LC_ALL ?= C + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +DEB_BUILD_ARCH ?= $(shell dpkg-architecture -qDEB_BUILD_ARCH) +DEB_HOST_OS ?= $(shell dpkg-architecture -qDEB_HOST_OS) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH 2>/dev/null) + +# Allow distro-specific behaviour +DISTRO :=$(shell sed -ne '/DISTRIB_ID/s/.*=//p' /etc/lsb-release 2>/dev/null || echo Debian) +UTIL_LINUX_NG ?= yes + +ifeq ($(DEB_BUILD_GNU_SYSTEM), gnu) +SKIP_FUSE2FS=yes +endif + +DH_VERSION := $(shell dpkg-query -W -f '$${Version}' debhelper) + +# USE_DBGSYM := +USE_DBGSYM ?= $(shell if dpkg --compare-versions $(DH_VERSION) ">=" 9.20160114 ; then echo yes ; fi) + +ifeq ($(USE_DBGSYM),yes) +dh_strip_args = -p$(1) --dbgsym-migration='$(1)-dbg (<= 1.43-1)' +dh_strip_args2 = -p$(1) --dbgsym-migration='$(2)-dbg (<= 1.43-1)' +else +dh_strip_args = -p$(1) --dbg-package=$(1)-dbg +dh_strip_args2 = -p$(1) --dbg-package=$(2)-dbg +endif +# find the version for the main package, from changelog file +MAIN_VERSION = $(shell head -n 1 debian/changelog | cut '-d ' -f 2 | sed 's/[()]//g') +# find versions for libraries going into their own packages, from their Makefile.in's, +# and sonames for all libs +COMERR_VERSION ?= $(shell grep ELF_VERSION lib/et/Makefile.in | cut '-d ' -f3) +COMERR_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/et/Makefile.in | cut '-d ' -f3) +SS_VERSION ?= $(shell grep ELF_VERSION lib/ss/Makefile.in | cut '-d ' -f3) +SS_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/ss/Makefile.in | cut '-d ' -f3) + +ifneq ($(UTIL_LINUX_NG),yes) +UUID_VERSION ?= $(shell grep ELF_VERSION lib/uuid/Makefile.in | cut '-d ' -f3) +UUID_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/uuid/Makefile.in | cut '-d ' -f3) + +BLKID_VERSION ?= $(shell grep ELF_VERSION lib/blkid/Makefile.in | cut '-d ' -f3) +BLKID_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/blkid/Makefile.in | cut '-d ' -f3) +endif + +EXT2FS_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/ext2fs/Makefile.in | cut '-d ' -f3) +E2P_SOVERSION ?= $(shell grep ELF_SO_VERSION lib/e2p/Makefile.in | cut '-d ' -f3) + +package ?= e2fsprogs + +topdir ?= $(shell pwd) +debdir ?= ${topdir}/debian +tmpdir ?= ${debdir}/tmp +udebdir ?= ${debdir}/e2fsprogs-udeb +ifneq ($(UTIL_LINUX_NG),yes) +blkidudebdir ?= ${debdir}/libblkid1-udeb +uuidudebdir ?= ${debdir}/libuuid1-udeb +endif +libcomerrdir ?= ${debdir}/libcomerr${COMERR_SOVERSION} +comerrdevdir ?= ${debdir}/comerr-dev +libcomerrdbgdir ?= ${debdir}/libcomerr2-dbg +libssdir ?= ${debdir}/libss${SS_SOVERSION} +ssdevdir ?= ${debdir}/ss-dev +libssdbgdir ?= ${debdir}/libss2-dbg +ifneq ($(UTIL_LINUX_NG),yes) +libblkiddir ?= ${debdir}/libblkid${BLKID_SOVERSION} +libblkiddevdir ?= ${debdir}/libblkid-dev +libblkiddbgdir ?= ${debdir}/libblkid1-dbg +libuuiddir ?= ${debdir}/libuuid${UUID_SOVERSION} +uuiddevdir ?= ${debdir}/uuid-dev +libuuiddbgdir ?= ${debdir}/libuuid1-dbg +uuidruntimedir ?= ${debdir}/uuid-runtime +uuidruntimedbgdir ?= ${debdir}/uuid-runtime-dbg +endif +libext2dir ?= ${debdir}/e2fslibs +libext2devdir ?= ${debdir}/e2fslibs-dev +libext2dbgdir ?= ${debdir}/e2fslibs-dbg +maindir ?= ${debdir}/e2fsprogs +e2fsckstaticdir ?= ${debdir}/e2fsck-static +debugdir ?= ${debdir}/e2fsprogs-dbg +stdbuilddir ?= ${debdir}/BUILD-STD +mipsbuilddir ?= ${debdir}/BUILD-MIPS +mipsbuilddir64 ?= ${debdir}/BUILD-MIPS-64 +# docdir ?= ${maindir}/usr/share/doc/${package} +MANDIR ?= /usr/share/man +mandir ?= ${tmpdir}${MANDIR} + +UDEB_NAME ?= $(package)-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb +UDEB_PRIORITY ?= $(shell grep '^Package: e2fsprogs-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2) + +ifneq ($(UTIL_LINUX_NG),yes) +BLKID_UDEB_NAME ?= libblkid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb +BLKID_UDEB_PRIORITY ?= $(shell grep '^Package: libblkid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2) + +UUID_UDEB_NAME ?= libuuid1-udeb_$(MAIN_VERSION)_$(DEB_HOST_ARCH).udeb +UUID_UDEB_PRIORITY ?= $(shell grep '^Package: libuuid1-udeb' debian/control.in -A 10 | grep ^Priority: | cut -d ' ' -f 2) +endif + +STAMPSDIR ?= debian/stampdir +CFGSTDSTAMP ?= ${STAMPSDIR}/configure-std-stamp +CFGBFSTAMP ?= ${STAMPSDIR}/configure-bf-stamp +BUILDSTDSTAMP ?= ${STAMPSDIR}/build-std-stamp +BUILDBFSTAMP ?= ${STAMPSDIR}/build-bf-stamp + +INSTALL ?= install +INSTALL_PROGRAM ?= $(INSTALL) -p -o root -g root -m 0755 + +#ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS))) +#INSTALL_PROGRAM += -s +#endif + +ifneq (,$(findstring update-symbols,$(DEB_BUILD_OPTIONS))) +SYMBOL_LIBS := e2fslibs libcomerr2 libss2 +ifneq ($(UTIL_LINUX_NG),yes) +SYMBOL_LIBS += libblkid1 libuuid1 +endif +endif + +DEFAULT_CFLAGS ?= -g -O2 +DEFAULT_LDFLAGS ?= -Wl,-Bsymbolic-functions + +CFLAGS ?= $(shell if dpkg-buildflags > /dev/null 2>&1 ; then \ + DEB_BUILD_MAINT_OPTIONS=$(DEB_BUILD_MAINT_OPTIONS) \ + dpkg-buildflags --get CFLAGS; else echo $(DEFAULT_CFLAGS) ; fi) +LDFLAGS ?= $(shell if dpkg-buildflags > /dev/null 2>&1 ; then \ + DEB_BUILD_MAINT_OPTIONS=$(DEB_BUILD_MAINT_OPTIONS) \ + dpkg-buildflags --get LDFLAGS; else echo $(DEFAULT_LDFLAGS) ; fi) +CPPFLAGS ?= $(shell if dpkg-buildflags > /dev/null 2>&1 ; then \ + DEB_BUILD_MAINT_OPTIONS=$(DEB_BUILD_MAINT_OPTIONS) \ + dpkg-buildflags --get CPPFLAGS; fi) + +ifeq (${DEB_HOST_ARCH},alpha) +CFLAGS += -DHAVE_NETINET_IN_H +else +CFLAGS += -D__NO_STRING_INLINES +endif + +E2FSCK_STATIC = ${stdbuilddir}/e2fsck/e2fsck.static + +CFLAGS_SHLIB = $(CFLAGS) +CFLAGS_STLIB = $(CFLAGS) +LDFLAGS_SHLIB = $(LDFLAGS) +LDFLAGS_STATIC = $(filter-out -fPIE -fpie -pie,$(LDFLAGS)) + +ifneq ($(SKIP_UDEB),) +SKIP_BF ?= yes +endif + +ifeq ($(SKIP_BF),yes) +BUILD_BF = +bfbuilddir ?= ${stdbuilddir} +else +BUILD_BF = build-bf +bfbuilddir ?= ${debdir}/BUILD-BF +endif + +BF_CFLAGS = -Os -fomit-frame-pointer + +ifeq ($(UTIL_LINUX_NG),yes) +UTIL_CONF_FLAGS ?= --disable-fsck --disable-libblkid \ + --disable-libuuid --disable-uuidd +else +UTIL_CONF_FLAGS ?= --enable-fsck --enable-libblkid \ + --enable-libuuid --enable-uuidd +endif + +ifneq ($(SKIP_FUSE2FS),) +UTIL_CONF_FLAGS += --disable-fuse2fs +endif + +ifneq ($(strip $(DEB_HOST_MULTIARCH)),) +MULTIARCH_CONF ?= --with-multiarch=$(DEB_HOST_MULTIARCH) +# This doesn't work yet because gdb and lintian don't expect and/or +# don't work with /usr/lib//debug +#USRLIB = /usr/lib/$(DEB_HOST_MULTIARCH) +USRLIB ?= /usr/lib +else +USRLIB ?= /usr/lib +endif + +BACKTRACE_CONF_FLAGS ?= $(shell if ${debdir}/scripts/test-backtrace ; then echo --disable-backtrace ; fi) + +COMMON_CONF_FLAGS = --disable-e2initrd-helper --enable-quota \ + --infodir=/usr/share/info --enable-symlink-install \ + $(MULTIARCH_CONF) $(BACKTRACE_CONF_FLAGS) $(UTIL_CONF_FLAGS) + +STD_CONF_FLAGS ?= --enable-elf-shlibs + +BF_CONF_FLAGS ?= --enable-elf-shlibs --disable-nls --disable-imager \ + --disable-testio-debug --disable-uuidd --disable-tls \ + --disable-tdb --disable-debugfs + +MIPS_NOPIC_CONF_FLAGS ?= --disable-nls --disable-imager \ + --disable-uuidd --disable-tls \ + --disable-resizer # --disable-debugfs + +# we can't use those flags at configure time +MIPS_CFLAGS ?= -G 0 -fno-pic -mno-abicalls +MIPS_CFLAGS_64 ?= -mabi=64 -G 0 -fno-pic -mno-abicalls + +ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) +ifneq (,$(findstring $(DEB_BUILD_ARCH),mips mipsel)) +ismips=ismips +endif +endif + +M4_ARGS= +DBG_PACKAGES= + +ifeq ($(USE_DBGSYM),yes) +M4_ARGS+=-DUSE_DBGSYM +else +DBG_PACKAGES += -pe2fsprogs-dbg -pe2fslibs-dbg -plibcomerr2-dbg -plibss2-dbg +M4_ARGS+=-UUSE_DBGSYM +endif + +ifeq ($(UTIL_LINUX_NG),yes) +M4_ARGS+=-DUTIL_LINUX_NG +else +DBG_PACKAGES += -puuid-runtime-dbg -plibuuid1-dbg -plibblkid1-dbg +M4_ARGS+=-UUTIL_LINUX_NG +endif + +ifneq ($(strip $(DEB_HOST_MULTIARCH)),) +M4_ARGS+=-DDO_MULTIARCH +else +M4_ARGS+=-UDO_MULTIARCH +endif + +ifneq ($(BUILD_E2FSCK_STATIC),no) +M4_ARGS+=-DE2FSCK_STATIC +else +M4_ARGS+=-UE2FSCK_STATIC +endif + +ifeq ($(SKIP_UDEB),) +INSTALL_UDEB = install-udeb +M4_ARGS+=-DUDEB_PKGS +else +M4_ARGS+=-UUDEB_PKGS +endif + +ifeq ($(SKIP_FUSE2FS),) +M4_ARGS+=-DFUSE2FS +else +M4_ARGS+=-UFUSE2FS +endif + +FILES_FIXUP= libcomerr2.files comerr-dev.files libss2.files ss-dev.files \ + libuuid1.files uuid-dev.files libblkid1.files libblkid-dev.files \ + e2fslibs.files e2fslibs-dev.files + +debian-files: debian/control debian/e2fsprogs.shlibs.local +ifeq ($(strip $(DEB_HOST_MULTIARCH)),) + for i in $(FILES_FIXUP); do \ + sed -e 's;lib/\*/;lib/;' debian/$$i.in > debian/$$i; \ + done +else + for i in $(FILES_FIXUP); do cp debian/$$i.in debian/$$i; done +endif + +mrproper: clean + rm debian/control debian/e2fsprogs.shlibs.local + +debian/control: debian/control.in debian/rules + m4 $(M4_ARGS) < debian/control.in | grep -v ^REMOVE_ME$$ > $@ + +debian/e2fsprogs.shlibs.local: debian/e2fsprogs.shlibs.local.in + m4 $(M4_ARGS) < debian/e2fsprogs.shlibs.local.in > $@ + +${CFGSTDSTAMP}: + dh_testdir + + # Make sure we don't try to rebuild the configure scripts + find . -name configure | xargs touch + + mkdir -p ${stdbuilddir} +ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) + cd ${stdbuilddir} && AWK=/usr/bin/awk \ + ../../configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \ + ${EXTRA_CONF_FLAGS} CFLAGS="${CFLAGS}" CPPFLAGS="$(CPPFLAGS)" \ + LDFLAGS="$(LDFLAGS)" CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \ + CFLAGS_STLIB="$(CFLAGS_STLIB)" \ + LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \ + LDFLAGS_STATIC="$(LDFLAGS_STATIC)" +else + cd ${stdbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \ + ../../configure ${COMMON_CONF_FLAGS} ${STD_CONF_FLAGS} \ + ${EXTRA_CONF_FLAGS} --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_HOST_GNU_TYPE) CFLAGS="${CFLAGS}" \ + CPPFLAGS="$(CPPFLAGS)" CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \ + CFLAGS_STLIB="$(CFLAGS_STLIB)" \ + LDFLAGS="$(LDFLAGS)" \ + LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \ + LDFLAGS_STATIC="$(LDFLAGS_STATIC)" +endif + + # specially-built MIPS libs +ifneq ($(ismips),) + mkdir -p ${mipsbuilddir} ${mipsbuilddir64} + cd ${mipsbuilddir} && AWK=/usr/bin/awk \ + ../../configure ${COMMON_CONF_FLAGS} \ + ${MIPS_NOPIC_CONF_FLAGS} CFLAGS="${CFLAGS}" \ + CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \ + CFLAGS_STLIB="$(CFLAGS_STLIB)" \ + LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \ + LDFLAGS_STATIC="$(LDFLAGS_STATIC)" + cd ${mipsbuilddir64} && AWK=/usr/bin/awk \ + ../../configure ${COMMON_CONF_FLAGS} \ + ${MIPS_NOPIC_CONF_FLAGS} CFLAGS="${CFLAGS}" \ + CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \ + CFLAGS_STLIB="$(CFLAGS_STLIB)" \ + LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \ + LDFLAGS_STATIC="$(LDFLAGS_STATIC)" +endif + + mkdir -p ${STAMPSDIR} + touch ${CFGSTDSTAMP} + +${CFGBFSTAMP}: + dh_testdir + rm -f config.cache + + mkdir -p ${bfbuilddir} +ifeq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH)) + cd ${bfbuilddir} && AWK=/usr/bin/awk \ + ../../configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \ + ${EXTRA_CONF_FLAGS} CFLAGS="${CFLAGS} ${BF_CFLAGS}" \ + CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \ + CFLAGS_STLIB="$(CFLAGS_STLIB)" \ + LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \ + LDFLAGS_STATIC="$(LDFLAGS_STATIC)" +else + cd ${bfbuilddir} && AWK=/usr/bin/awk CC="${DEB_HOST_GNU_TYPE}-gcc" \ + ../../configure ${COMMON_CONF_FLAGS} ${BF_CONF_FLAGS} \ + ${EXTRA_CONF_FLAGS} --build=$(DEB_BUILD_GNU_TYPE) \ + --host=$(DEB_HOST_GNU_TYPE) CFLAGS="${CFLAGS}" \ + CPPFLAGS="$(CPPFLAGS)" LDFLAGS="$(LDFLAGS)" \ + CFLAGS_SHLIB="$(CFLAGS_SHLIB)" \ + CFLAGS_STLIB="$(CFLAGS_STLIB)" \ + LDFLAGS_SHLIB="$(LDFLAGS_SHLIB)" \ + LDFLAGS_STATIC="$(LDFLAGS_STATIC)" +endif + mkdir -p ${STAMPSDIR} + touch ${CFGBFSTAMP} + +build-arch: build +build-indep: build +build: build-std $(BUILD_BF) + +build-std: ${BUILDSTDSTAMP} +${BUILDSTDSTAMP}: ${CFGSTDSTAMP} + dh_testdir + if which dh_update_autotools_config > /dev/null 2>&1 ; then \ + dh_update_autotools_config ;\ + fi + $(MAKE) -C ${stdbuilddir} V=1 all +ifneq ($(BUILD_E2FSCK_STATIC),no) + $(MAKE) -C ${stdbuilddir}/e2fsck V=1 e2fsck.static +endif + if ! test -d debian/orig-gmo ; then \ + mkdir debian/orig-gmo ; \ + mv po/*.gmo po/*.po debian/orig-gmo ; \ + cp debian/orig-gmo/*.po po ; \ + fi + $(MAKE) -C ${stdbuilddir}/po V=1 update-gmo + + ( cd ${stdbuilddir}/doc && $(MAKE) V=1 libext2fs.html ) + ( cd ${stdbuilddir}/lib/et && $(MAKE) V=1 com_err.info com_err.html ) + + # specially-built MIPS libs +ifneq ($(ismips),) + $(MAKE) -C ${mipsbuilddir}/util V=1 + $(MAKE) -C ${mipsbuilddir} V=1 \ + CFLAGS="${CFLAGS} ${MIPS_CFLAGS}" \ + LIB_SUBDIRS="lib/et lib/ext2fs" libs + $(MAKE) -C ${mipsbuilddir64}/util V=1 + $(MAKE) -C ${mipsbuilddir64} V=1 \ + CFLAGS="${CFLAGS} ${MIPS_CFLAGS_64}" \ + LIB_SUBDIRS="lib/et lib/ext2fs" libs +endif + + touch ${BUILDSTDSTAMP} + +build-bf: ${BUILDBFSTAMP} +${BUILDBFSTAMP}: ${CFGBFSTAMP} + dh_testdir + $(MAKE) -C ${bfbuilddir} V=1 libs + $(MAKE) -C ${bfbuilddir}/e2fsck V=1 all + $(MAKE) -C ${bfbuilddir}/misc V=1 all + $(MAKE) -C ${bfbuilddir}/resize V=1 all + touch ${BUILDBFSTAMP} + +clean: + dh_testdir + if test -d debian/orig-gmo ; then \ + rm -f po/*.gmo po/*.po ; \ + mv debian/orig-gmo/* po ; \ + rmdir debian/orig-gmo ; \ + fi + rm -rf ${STAMPSDIR} + [ ! -f ${stdbuilddir}/Makefile ] || $(MAKE) -C ${stdbuilddir} V=1 distclean + [ ! -f ${bfbuilddir}/Makefile ] || $(MAKE) -C ${bfbuilddir} V=1 distclean + [ ! -f ${staticbuilddir}/Makefile ] || $(MAKE) -C ${staticbuilddir} V=1 distclean + rm -rf ${stdbuilddir} ${bfbuilddir} ${staticbuilddir} ${mipsbuilddir} ${mipsbuilddir64} + rm -f debian/*.substvars + dh_clean + +install: cleanup install-std + +# This rule allows to factorize the dh_clean between the 2 install rules +# This must be launched before install-* (if launching them by hand, for +# exemple) or results are unpredictable +cleanup: + dh_testdir + dh_testroot + dh_prep + +install-std: DH_OPTIONS= +install-std: build + dh_testdir + dh_testroot + dh_installdirs + + mkdir -p ${tmpdir}/sbin + $(MAKE) -C ${stdbuilddir} V=1 install DESTDIR=${tmpdir} \ + INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true + # static libs and .h files + $(MAKE) -C ${stdbuilddir} V=1 install-libs DESTDIR=${tmpdir} LDCONFIG=true + +ifneq ($(BUILD_E2FSCK_STATIC),no) + # statically-linked fsck + ${INSTALL_PROGRAM} $(E2FSCK_STATIC) ${tmpdir}/sbin + cp ${mandir}/man8/e2fsck.8 ${mandir}/man8/e2fsck.static.8 +endif + +ifeq ($(DEB_BUILD_GNU_SYSTEM), gnu) + ${INSTALL} -m 0644 misc/mke2fs-hurd.conf ${tmpdir}/etc/mke2fs.conf +endif + + dh_movefiles + test -z "`find ${tmpdir} -type f`" + + # specially-built MIPS libs +ifneq ($(ismips),) + $(INSTALL) -p -m 0644 ${mipsbuilddir}/lib/libext2fs.a \ + ${debdir}/e2fslibs-dev/usr/lib/libext2fs-nopic.a + $(INSTALL) -p -m 0644 ${mipsbuilddir64}/lib/libext2fs.a \ + ${debdir}/e2fslibs-dev/usr/lib/lib64ext2fs-nopic.a +endif + +install-udeb: DH_OPTIONS= +install-udeb: build + dh_testdir + dh_testroot + + $(MAKE) -C ${bfbuilddir} V=1 install-shlibs-libs-recursive DESTDIR=${udebdir} \ + INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true + $(MAKE) -C ${bfbuilddir}/e2fsck V=1 install DESTDIR=${udebdir} \ + INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true + $(MAKE) -C ${bfbuilddir}/misc V=1 install DESTDIR=${udebdir} \ + INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true + $(MAKE) -C ${bfbuilddir}/resize V=1 install DESTDIR=${udebdir} \ + INSTALL_PROGRAM="${INSTALL_PROGRAM}" LDCONFIG=true + + rm -rf ${udebdir}/usr + find ${udebdir}/sbin -type f -a ! -name e2fsck \ + -a ! -name mke2fs -a ! -name tune2fs \ + -a ! -name resize2fs -a ! -name badblocks -print | xargs rm + + (cd ${udebdir}/sbin; ln -sf e2fsck fsck.ext2 ; \ + ln -sf e2fsck fsck.ext3 ; ln -sf e2fsck fsck.ext4 ; \ + ln -sf mke2fs mkfs.ext2 ; ln -sf mke2fs mkfs.ext3 ; \ + ln -sf mke2fs mkfs.ext4) + +ifneq ($(UTIL_LINUX_NG),yes) + mkdir -p ${blkidudebdir}/lib + mv ${udebdir}/lib/libblkid.* ${blkidudebdir}/lib + + mkdir -p ${uuidudebdir}/lib + mv ${udebdir}/lib/libuuid.* ${uuidudebdir}/lib +endif + +binary-indep: + # no arch-independant debs. + +binary-arch: DH_OPTIONS= -a +binary-arch: install $(INSTALL_UDEB) + dh_testdir + dh_testroot + + dh_lintian + + # symlinks to prepare dh_installdocs run + +ifneq ($(UTIL_LINUX_NG),yes) + mkdir -p ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION} + mkdir -p ${debdir}/libblkid-dev/usr/share/doc + ln -sf libblkid${BLKID_SOVERSION} ${debdir}/libblkid-dev/usr/share/doc/libblkid-dev +endif + + mkdir -p ${debdir}/libss${SS_SOVERSION}/usr/share/doc/libss${SS_SOVERSION} + mkdir -p ${debdir}/ss-dev/usr/share/doc + ln -sf libss${SS_SOVERSION} ${debdir}/ss-dev/usr/share/doc/ss-dev + + mkdir -p ${debdir}/libcomerr${COMERR_SOVERSION}/usr/share/doc/libcomerr${COMERR_SOVERSION} + mkdir -p ${debdir}/comerr-dev/usr/share/doc + ln -sf libcomerr${COMERR_SOVERSION} ${debdir}/comerr-dev/usr/share/doc/comerr-dev + +ifneq ($(UTIL_LINUX_NG),yes) + mkdir -p ${debdir}/libuuid${UUID_SOVERSION}/usr/share/doc/libuuid${UUID_SOVERSION} + mkdir -p ${debdir}/uuid-dev/usr/share/doc +# ln -sf libuuid${UUID_SOVERSION} ${debdir}/uuid-dev/usr/share/doc/uuid-dev +endif + + mkdir -p ${debdir}/e2fslibs/usr/share/doc/e2fslibs + mkdir -p ${debdir}/e2fslibs-dev/usr/share/doc + ln -sf e2fslibs ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs-dev + +ifneq ($(UTIL_LINUX_NG),yes) + $(INSTALL) -p -m 0644 debian/libblkid.copyright \ + ${debdir}/libblkid${BLKID_SOVERSION}/usr/share/doc/libblkid${BLKID_SOVERSION}/copyright +endif + + dh_installdocs -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb + + # HTML docs + $(INSTALL) -d ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/html-info/ + $(INSTALL) -p -m 0644 ${stdbuilddir}/doc/*.html \ + ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/html-info/ + $(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/html-info/ + $(INSTALL) -p -m 0644 ${stdbuilddir}/lib/et/*.html \ + ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/html-info/ + + # texinfo docs + mkdir -p ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION} + $(INSTALL) -p -m 0644 ${topdir}/doc/libext2fs.texinfo \ + ${debdir}/e2fslibs-dev/usr/share/doc/e2fslibs/libext2fs.texi + $(INSTALL) -p -m 0644 ${topdir}/lib/et/com_err.texinfo \ + ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/com_err.texi + + $(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/examples + $(INSTALL) -p -m 0644 lib/ss/ss_err.et \ + ${stdbuilddir}/lib/ext2fs/ext2_err.et \ + ${debdir}/comerr-dev/usr/share/doc/libcomerr${COMERR_SOVERSION}/examples + $(INSTALL) -d ${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}/examples + $(INSTALL) -p -m 0644 debugfs/debug_cmds.ct \ + ${debdir}/ss-dev/usr/share/doc/libss${SS_SOVERSION}/examples + + dh_installinfo -pcomerr-dev ${stdbuilddir}/lib/et/com_err.info + dh_installinfo -pe2fslibs-dev ${stdbuilddir}/doc/libext2fs.info + + dh_installchangelogs + dh_fixperms + dh_strip $(call dh_strip_args,e2fsprogs) +ifneq ($(BUILD_E2FSCK_STATIC),no) + dh_strip $(call dh_strip_args2,e2fsck-static,e2fsprogs) +endif +ifneq ($(ismips),) + dh_strip $(call dh_strip_args,e2fslibs) -Xlib64ext2fs-nopic.a +else + dh_strip $(call dh_strip_args,e2fslibs) +endif + dh_strip $(call dh_strip_args,libss${SS_SOVERSION}) + dh_strip $(call dh_strip_args,libcomerr${COMERR_SOVERSION}) +ifneq ($(UTIL_LINUX_NG),yes) + dh_strip $(call dh_strip_args,libblkid${BLKID_SOVERSION}) + dh_strip $(call dh_strip_args,libuuid${UUID_SOVERSION}) +endif + dh_strip + + # dpkg symbol handling + for i in $(SYMBOL_LIBS); \ + do \ + echo "Generating symbols for $$i..."; \ + dpkg-gensymbols -p$$i -Pdebian/$$i > debian/$$i.tmp-patch; \ + cat debian/$$i.tmp-patch; \ + patch debian/$$i.symbols < debian/$$i.tmp-patch; \ + /bin/rm debian/$$i.tmp-patch; \ + done + + dh_compress + + dh_makeshlibs --add-udeb=e2fsprogs-udeb +ifeq ($(SKIP_UDEB),) +ifneq ($(UTIL_LINUX_NG),yes) + echo "udeb: libblkid 1 libblkid1-udeb" >> \ + debian/libblkid1/DEBIAN/shlibs + echo "udeb: libuuid 1 libuuid1-udeb" >> debian/libuuid1/DEBIAN/shlibs +endif +endif + + dh_installdeb + dh_shlibdeps -l${stdbuilddir}/lib + dh_shlibdeps -pe2fsprogs -l${stdbuilddir}/lib \ + -u"-Ldebian/e2fsprogs.shlibs.local" +ifeq ($(SKIP_UDEB),) + dh_shlibdeps -pe2fsprogs-udeb -l${stdbuilddir}/lib \ + -u"-Ldebian/e2fsprogs-udeb.shlibs.local" +endif +ifeq ($(SKIP_FUSE2FS),) + dh_shlibdeps -pfuse2fs -l${stdbuilddir}/lib \ + -u"-Ldebian/e2fsprogs.shlibs.local" +endif + + dh_gencontrol -Ncomerr-dev -Nss-dev -Nuuid-dev \ + -Ne2fsprogs-udeb -Nlibblkid1-udeb -Nlibuuid1-udeb + DH_OPTIONS= dh_gencontrol -pcomerr-dev \ + -u '-v${COMERR_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}' + DH_OPTIONS= dh_gencontrol -pss-dev \ + -u '-v${SS_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}' +ifneq ($(UTIL_LINUX_NG),yes) + DH_OPTIONS= dh_gencontrol -puuid-dev \ + -u '-v${UUID_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}' +endif +ifeq ($(SKIP_UDEB),) + dh_gencontrol -pe2fsprogs-udeb -- -fdebian/files~ +ifneq ($(UTIL_LINUX_NG),yes) + dh_gencontrol -plibblkid1-udeb -- -fdebian/files~ + dh_gencontrol -plibuuid1-udeb -- -fdebian/files~ +endif +endif + +ifeq ($(SKIP_UDEB),) + dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY) +ifneq ($(UTIL_LINUX_NG),yes) + dpkg-distaddfile $(BLKID_UDEB_NAME) debian-installer $(BLKID_UDEB_PRIORITY) + dpkg-distaddfile $(UUID_UDEB_NAME) debian-installer $(UUID_UDEB_PRIORITY) +endif +endif + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch + +.PHONY: binary binary-arch binary-indep clean checkroot mrproper \ + debug_flags debian-files + +debug_flags: + @echo CFLAGS is $(CFLAGS) + @echo LDFLAGS is $(LDFLAGS) + @echo CPPFLAGS is $(CPPFLAGS) diff --git a/debian/scripts/test-backtrace b/debian/scripts/test-backtrace new file mode 100755 index 0000000..d90486a --- /dev/null +++ b/debian/scripts/test-backtrace @@ -0,0 +1,34 @@ +#!/bin/sh +# +# Test to see if backtrace requires a library in /usr/lib +# Returns true if the backtrace command works and requires a library in /usr/lib +# This is a nasty workaround for Debian bug #708307, which is really a glibc bug +# + +cat > /tmp/backtrace$$.c << EOF + +#include + +int main(int argc, char **argv) +{ + void *stack_syms[32]; + int frames; + + frames = backtrace(stack_syms, 32); + backtrace_symbols_fd(stack_syms, frames, 0); +} +EOF + +if ! cc -o /tmp/backtrace$$ /tmp/backtrace$$.c; then + exit 1 +fi + +if ! ldd /tmp/backtrace$$ > /tmp/backtrace$$.ldd 2>&1 ; then + exit 1 +fi + +grep -q /usr/lib /tmp/backtrace$$.ldd +ret=$? + +/bin/rm -f /tmp/backtrace$$* +exit $ret diff --git a/debian/shlibs.local b/debian/shlibs.local new file mode 100644 index 0000000..e678de0 --- /dev/null +++ b/debian/shlibs.local @@ -0,0 +1,6 @@ +libext2fs 2 +libe2p 2 +libuuid 1 +libcom_err 2 +libss 2 +libblkid 1 diff --git a/debian/source.lintian-overrides b/debian/source.lintian-overrides new file mode 100644 index 0000000..62988c5 --- /dev/null +++ b/debian/source.lintian-overrides @@ -0,0 +1,2 @@ +e2fsprogs source: weak-library-dev-dependency ss-dev on libss2 (= ${mainBinary}) +e2fsprogs source: weak-library-dev-dependency comerr-dev on libcomerr2 (= ${mainBinary}) diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..163aaf8 --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (quilt) diff --git a/debian/ss-dev.examples b/debian/ss-dev.examples new file mode 100644 index 0000000..b7930bb --- /dev/null +++ b/debian/ss-dev.examples @@ -0,0 +1 @@ +debugfs/debug_cmds.ct diff --git a/debian/ss-dev.files.in b/debian/ss-dev.files.in new file mode 100644 index 0000000..d0c788e --- /dev/null +++ b/debian/ss-dev.files.in @@ -0,0 +1,7 @@ +usr/lib/*/libss.so +usr/lib/*/libss.a +usr/include/ss/* +usr/bin/mk_cmds +usr/share/ss/* +usr/share/man/man1/mk_cmds* +usr/lib/*/pkgconfig/ss.pc diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc new file mode 100644 index 0000000..e225998 --- /dev/null +++ b/debian/upstream/signing-key.asc @@ -0,0 +1,156 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1 + +mQINBEz4F48BEADrt5DOsqL84FrVCYnI3MPZV9cEwvQSZmTyoSyU90Vl16Es7XuF +y45WhR5tQG6W6iKTnQpIEcxKpTdLG8cxGwc5gOsCzmoEBgHGA23Itx7BVqkB8vSA +aQDNAsQ4sFUUFBhkHa0d+N6RsrT0EHpK9gUP0paTiybqGn/yIOZ5tyw+jzN5Iae/ +RLbIH5UQ8+XWV7MAFWLBahPJJTVNcASK8h/ZxvNLkIRb5SFO2oqew26VuRi3R0sT +Pvue14K0JP5KsZ2HEQ8nNWyFhRbMJR32lqFNGNzPgupAdWzXKQT2R/UZ1WsMeQ1i +TM+HfN3idrJ+u2STXVv1oTkKGFsyhq2gdUcv5o/tpqgkQ8F9K8rKZI/EHzh3ZU0o +qYAgXECQsoS2hS1qc38EcrE3tKJsXztGpWujf8gbJivs1/pz7bEQiCxtF//Ze2dn +19CSf7r/WKTecxbkx+eupme3ThqsKWR6v6qaSCA223kiUMb8b8zpJ5+NOxhmgssl +PPU5EHJaBwZrfritjgwOiEAlyjYZZ4IkA88tAimtYU3nbpn099zSfmvaD8lQUK+e +NzzUlszJFGEqna4/+nGc0m2rgfbSvyWO4MQz85Fh5cSeUxiWCPNjWTJpRoPPXSIQ +D+GteZ1rlvA2VmBKLSA8F7BL/lvuUrfjNF2OyLqhOI3TtGe3N+89Q1qsywARAQAB +tB1UaGVvZG9yZSBUcydvIDx0eXRzb0BtaXQuZWR1PokCOgQTAQgAJAIbAwIeAQIX +gAIZAQUCVRr3hgULCQgHAwUVCgkICwUWAgMBAAAKCRDTb3abwRgE8LAwD/9B/KUj +0KpAe2ooXEinS380mkiGzWDJIncEynubiNm5Nl8Zo8hwtjXfagTqucUmnnu8NJ1O +lwigw5/vJXpTo7maSeyJImaRZaYyzoh8Bv11t1ymbTvr5ab7ZgSGmaak3IjIM8cW +vv/Wx+yf+LYS03+6GOMdGLq1mF2KgXpHBdK2Wpl/8jlOmry+wccgXBekZP7ZIF0V +wNFq/q8c6zW2yHs2w6i/pkVHJJm3kyaBe+6U6njq1/HBCnlGin7iYfpxZ0d8FoiL +4CEUAHfpFP2DKTO+KJJjphZctya0nCBRzQI3Zk8a0/ITCWJr/pw77yysIRiMO0s4 +BjHzzM7edlJA7dILutX8XrnAAkIOdfzWvHuLtLpEcDRP+gowYYO7PjMfb61zsP9L +dXS1bDrXI2pn2SdRFmaodSBaaAaJoTj55ZbjM2Ckv4lpGYGozreav9suLrYiZIeI +QRcqL1QIKM9WZPUkfbNSMiLLccOmEpKcqyauh3QJiKdT+lFpRBZY34TSI4R5EKMm +dJqD/xaZ4nDpfOxbqocEXDGgstmsCgxzLrYc7lVB+1IRnTW2rFlQteFAZucq8Dwb +xvkOdVY1pJo1vf8UkMPxoexMt7xSSLDQxxRzEtfQSzKLw7Iyf2eTm4OgCN8PocFI +J7LaqOvyq0YvxCVGrPD9bSCU/H5CAuPJa4WuzrQgVGhlb2RvcmUgVHMnbyA8dHl0 +c29AZGViaWFuLm9yZz6JAjcEEwEIACECGwMCHgECF4AFAlUa95gFCwkIBwMFFQoJ +CAsFFgIDAQAACgkQ0292m8EYBPBqVg/+JrVNl+yoGyIJ3e85Ts7Ko65UQ+xM71Ad +OecDUUSx3beSe/Trc76ElvzGu/zMtstu9uH8DnmnjscN1CfqpHK6Rhck69RQDCy+ +c114Q8pa/bzAuWPH4vGHE5BvPZjIc67cZ3T5kHpAaew5ltZG6YhpOBRTRr55ZfO3 +hHQCxOdTmqKWXB1HRXRTu7hlI4WmRpSBf9y4sVwIaraSgtNRhKb/Ff1iPHFCVdoK ++UtfWJrbpJ+HpHAcboNsfC1PQZ8E6eHYiaG0EUlSrpjeCH66kBgkIkbt4RZf+R23 +ZNonE8Hddw6ZR5zMxOfIbK5pBkcEUgOFogwwHL3b/lFdj0t1ggN6eRDVsk9kYYga +kXypR4DYKSs484Y4OroFccw/M69gFjI3f5AIb3HQzb1cV9ocDnqJtzPLAQJTUiIb +OJlFUjsvlg8romKV9lodzdS7zO/t2iQF4Hm2ThuS7R93MZEi4Z7WRgKueIBEhHm7 +WBbtnWzlKZDdsILyIUn7L6WE1iT+d+zvUHz6rYY/b1b7VQzH0UXWtwzPKCyLSLuM +g9q7rm5PMuaMn05zjN2gVy8rfbC7NTTo8f256YT0kmZmO5Kx9fpGYoPIMJp8aiDY +fUfg2rwWkMxO6uxiEe3xCOVzgQcK7NPZS0NbhdRcrmqN3vyiVLY8Qi2a+xQjesJG +RAgdhyJkESC0IFRoZW9kb3JlIFRzJ28gPHR5dHNvQGdvb2dsZS5jb20+iQI3BBMB +CAAhAhsDAh4BAheABQJVGvebBQsJCAcDBRUKCQgLBRYCAwEAAAoJENNvdpvBGATw +kB0P+wQj8exoDTL8/m+Wuju1CMvHty1i4eBKqzM04OdcBQI3/0zOFmub/VnJVB2L +92UhEvqclbwWsijz7G1Vr7wsUPkftCoJICYqjPpZf3BKvyGXkatrMUs0ry1xZ15Q +A4f/9YuiUOykIQiROS+lUa7HqS6dkEj+/2xXheZKcnrv0pz0PayzWbonukRY7Jxe +UcTAXnX1p9fM7+Y9xx5mkwwe4lN02zGextCw1C77EDGhH8GtgnhyfsFkDLjWmNg8 +xjbGKvYYRU18uu0DYTj7ERrDhYy+Aft91F1ZUN9xPgyMx1uWcuyWPV57L3hdwxUX +i64TV4CzMOsolytdUikw57pcjyjdn7kPJlgg+1clrtnrCsmwWQYDMfap3pTOCoj5 +8YVjF+j8ngORLw1tNYZdwPVdeTmuWEv0ufgxDjQtD01yHI2PyGYtZBcTZurdYxth +1Z1+aDyi3kyi6JN8dteA4rUrTxPCI/6GspXQKOlXPKeSijBAG2KdNNNgkWPSVC7q +xwhGruYYq5QA98nA8Hhe89KTwz3fbTCqr59QfEmpKaB9Uvmx6p0Bvj/zL7+N9VpN +vIyxRcG9cfbBWkq18TC6cZMeHUHjwh8ttC7sq/GxdhEW4Qn4ZsvbevozAhd2sMQP +FUUAH0IA1zzIL+UG1AvyQ69kWpoG8Fr9ttIZc5mYUDwL2m1KuQINBEz4GJ4BEADM +e5nhgwGPH9Ti2TSBlADnsZ3ygrA1UEaTUBxPHm0IYdfqMflqbw+XkxHQqRQzYyah +Bc1EBj1Fdl907ozRPnm4VzMgEzXZlN2wjmgUhz1gHZmMcCBxnC/p/FdWmEQwJLNg +TsmnS/seFRw2pwkFtiDYlqXUwU1pDjTLztOMVheQpBlLOg/oHGcZB+llLNPRzCok +mfNv4ShTygDpYtniQdVg57Qyriz3tvCDE+va8HL96SuCNV1vy+ZJa42KNhhMrHqY +C5t7hTNaJTyk25Lmwd5aKrSZjS4goHJcP9Ry3Sit467TRGEaqOi3fO0qTiTnW2Gz +9Cq0xDCOdd3CEbLajMwxM9+UKh+65/nGzh5bYC6zSitXMC1tWUvDEQpk/tiGV8E3 +c2YYbIRcCvOHBoqqIZryi4HqXFyatijEfA9yYc3J8IgmHG9Vc7rBgwdeLGQs9hfp +6IAFtmZHdupYLOUZk+HVNITESgiT6zICFoxNM0jrhkjqdK4ZtlTAiOTIidr1zVTd +je0Hr/Su3H/FluG5cXOZJqqcwQak98Li/Qe4dZl0t99V1s7NafDadSAtNOyMUplt +wSHWzx6PiA3oYMWbQO9S5D7/QK2scNFf7QnWFWYEcuhMlfKAodowI8swljrtgsir +7ZxRZ4YhSlBx1fgs1W09lIxmW7nufZAce/OzPgQsmQARAQABiQIfBBgBCAAJBQJM ++BieAhsMAAoJENNvdpvBGATwjq0P/1ZkCLDRvERSHvLZw2dYMSVNZalQq5MO689B +pcFF9M4CB0IRG+fSf7EkvTrlHnv9euhWAtucs6BITWPdtUORKl/jVcUme+QFBO/n +usVKVr0G0IJrz3Db0IVAC7I0uFttuANX0oc0Z3C1J9RukGapYbKDQF9RizdiqFPP +q/o700sDTnAroib1q3bDqOSrg0ewuJKpgUxLSiQ+GoZMX/8zWKMsadyguBvQl4fi +RSso075/WpzjjkHgZ/TRv/hX4cBpXJLK12yv4P6mEHlwp+FXmH/KRqsyQQaQouUZ +iD8tUK1hAsPB8xYrIZNSbLqsNHjLjtXsFsJU+7jSntVX2XB1nvyaoE8XNKudGoWN +xbUDaBmFozvK5uBRBFogNZuw+8kCYcVi8iuIHrQMjWwL4zq7CpLxQCKfYlhXasIM +p+ggwKewfOA10g5QvYCcqcFtWkIsF9dxOSkfJFY31CMQkxHKc5MF1LsGTRv5HIAm +rb3XAztlmQ0936Zp8+h9DDLV5LF17oiKDYQygHFcYDgBudH78bwYw8hZ2Nkr52v6 +6fHCMGUMfkC8IYP0jVokqS27Aw6IKKlCisJqnGxpXC7Nb/8LNDCKBTNpIKeENARK +Xz9msd6s3gjC9ug2Ea3mrPDNmVnTkdvrLTtA0klCrxZgWml0BOjoEyB75BCe2fZ9 +4VRmJHKDuQINBFLoZCgBEADGR4Xgf1j5Of7pwIzpMgz/HZxwjxibW+EC+ALwMicJ +BoxTmNp5GZ41Rle7frNGRe4R3fUbpdDI9nODFREezNnTFCPYMA1B2U7hxxlcyH1N +rRYkkbeSWBNVgBIZ0rBnXI1qrZjONrpTLsHX3GdAShzpYu5zyt2a7tSMhmkwzidt +jmWYt3BqOH4C/CYOqUnZJhzZ44+LXT68+AcL+rqWo+cTOSDlmrvs9yJCFm4Y75A+ +fd+raUZ8OhhmvHAA+IiRnHG9NrqprhVu+J4xSulfkyF8ziXl3HMC6aeHVS1F8UO+ +jg7nAmgyDi6IuJznZB01KCplVDE9E/8neZfF5WMzti7DiVvkrwf4YoOcsl9tkda7 +iH/ka03ZLdMYELss+lmgLnVDWDdrrJWTAY4rXEWx4UE2O03yPVKwp1Dq8eJazJrv +ECDTN1U464FvSmO2Xrj7gUphOPSW2IjUYOBkFB9mMlwRKt0gDvre3M9Ix0IOKCo7 +ELqalW92rSb3+eTZVen1WoCTFBWWwSPXjsDixzJjuKOCuLIieMCt63Eng2d+cCIj +ymJ744efKeRJaNvF2iXBCJfQGEixlG1H4KSTjBnKGDWi0clijpJQJfJRnMLRLjP8 +aA5RVzwsARZ91YQp6SKu3zFP+Z8/XwhbeeDlsmkbQ8aoRcXhdhs/pMJ02A8C6k2T +pQARAQABiQIfBBgBCAAJBQJS6GQoAhsgAAoJENNvdpvBGATwSx4P/0lbTys+j9AM +UEfEYjcG+C8lsqrqnK9u1bjDAQBNldg7IzeUIeQlZZF8d2RDemtxnMzs0B4MMEPK +AgAltWfkezk12g1vroo1m2fKxSWEDq7pyUhRlBeggFLDWagyushIHrAXhcNvyf5n +03EZ4n8EZ03ejxN+6IWxViV14t0KuzccKPYTwLhlbNQN8YB1k0Y6ezZd8gpX4+e2 +K3WD83mxpFmhhNsGqvbLsuJfXdPcWrAYpFgBF04qvYmgSdPeSid68k3Mek0eQyFj +gCBA0RktKaLVWEslAXyzG1iVzTydabhFQrfA1/GMVJwDgN9HjhzZecerg88KiY03 +pI5dNuzQZnt0Cs0oPcL409ZYBCiv4b6JwLxMaPAAkruqp75Eb3RRzvM8netevnt2 +lMSYDR8Kt1TjPfPWH64vuSLoJ0ihSEHd4G92CN5xYVYOwBrwokJy2rj/Gaz9fZHn +xOaFtWtkR9hytlqsz4qpZ71dKgsZ5LxXETygRQ0RSbMT5uKIMhRbSbOVB3gE8gwU +rhWObwGL2WVaSDEM4SyaJEWyHy6+38ir7QhVTDcHQRoU0/N0Acy1AsltoJUIiaqU +TdWxjplUY0GFt0OQINvEdhWtEBe4ATFK/17BKLxKk22kVbx0fMd0mR939AYIbwNi +dWWyjlhmVl4Uqre/7WqbsR7nT9Sd+fbIuQENBFUa+BEBCACrJ+CRz1mNqq0Qcofc ++4h9PzMBLApwGNQySQ5QCMtIu5Iz4rTT305iFFQSBFzKQSNPjm7pkAzMMs+CWaD8 +0gazgiO8yvm1Fa00hGJWCxr5dbp9/w8u1hfXUSMVg6mf+D09iBLMa2a4pNJcafvp +1/Edk7VAG0q7WrhIBErHclWSh6T05jIjS81ydeO6mp8At8Vkw2oEM1RGnBGYCIq4 +pPhKkQsBDRcz3h1BSrv5uPGyBvXVBJZ4n38m3iETG8jHFPS5OiHSzU4j9Q4nVutb +Wk26l33VObkd4NYru95UsQ2ZGETBCW5tkLwugW7A8D2mQkTQsRLv9KO0hudY0HqX +uh3pABEBAAGJA0QEGAEIAA8CGwIFAlc0FXQFCQMGa2MBKcBdIAQZAQgABgUCVRr4 +EQAKCRDy+VlWlQ2Bo19UCACAVs9F065EDpeZJcH1ep6dzS/qdctES0qDl6F+CVOj +v9iCTs1OkpZ9Y8gOazEfeCT5tXylyr82RV28CImAKER8tIhAi9Bvss9abXihoKpL +t8en97QTBIveZ+4MXwzbJGljIuZ/Ytfz33o8T4Ojd4QLPuLq75uESnum3KcoF3LA +MUCrpsoKsggp2VQHtFxgFsSd3GjIJBy+efexz5F+uM8Q1BrkZh2kwq9NZ3QdG2Kq +wTVTMI6MIty5UV4re1v25VrmbCrHmWtWw2aY90HWikfMQuF0n+PWyRI1dhNaFvG7 +SeMXCgdOEvhYzbQ/HBePrrV+G4fjeODu70mZZZIecDC9CRDTb3abwRgE8D0CD/0S +gvkU/3GJR1ntplro3/uzZ0fcZL/Ea7ydSEGpsZVJq/nH64BDXQZSZ7UJotQdAlQ6 +f72/V3r57Aix2rtF90Vu6olUtBdYEkadaSMTVkI8jjHvWeRs8iY8iOIdflikzF6b +92nGxckjSAUL6GYTnxWizw39s20K6cO4zOC/0CDhjzvtmoA0OinkWUbjWMWf9pLP +3KKfD7p+hrUzO4GrPx7mwNoj6uA1KUVynQSGa0V6OXUGjQ3ey7xDL2a32dF9PI8e +UMAW4klzxX9Kbcam+NxiHtTAjMBBQ0Xt0j6irJPmsmxm8pa/D+4SlEDjsQU2q6eE +UwPvKBtxdS1N1AdZWqMlQSHnGNOWkljMi9nrhyHAXgeJjbnIFryHW4/+aBLccdaL +mnMwetaDRDj8EmPDZTiNHQUDCCFYoZ+Kc76kGd4UadxpW3LOg8sjmn3MYdiXXRQs +/2p+Q6iFACuVSxnCz12sumynfHWiQwVGAd1FBuIgb7FuxX6FOLaybew/IMg5RzuD +y9fI7Z3yHtHUcMZhhQaQvkiebbZcQlZhkZIX6Uk8csCBcClFrH9wG4NU2Jr+25oa +nHoyj2c+ABd5mZ6P90UC80xSllOoH5DkCeRUBKuAZG0g+g64QKWTjwSxfY6sFd+h +210NTXaQ9iRPNVNv8cjHY0HHPzw9mQBi5CojnSgyLrkBDQRVGvi/AQgAryab03tW +ugiN40UYPEASlLcR0e01ZAwrESMwCexNejebacke6fk1v4pEebBvm0fu/8GeIY78 +ley9CBIoDOHzTTQMWXUBMtG5vxPzUgP5U/R0CWvXF9PgyrCOsWQjORqfIfUctQ2Q +KjaSEi3jt0U9gVM84Dtj/SlyfZyJvuTy15Q3mNLEA2hiEkLCYS77+tUaXeCFl5en +p2mQgBSrfnmzfCckuwa0nbmo4p6V0yreX6939c9zakMxzvWCh/SlZUyLgRkH5FOk +gb3Of6lR0DHkNG9uJOMEr+f6XCbwYPDTU6EZumyVQ2WW98s0uIIU0Qmbc/EnpnYc +zlbbdNS8C8aq8QARAQABiQIlBBgBCAAPAhsMBQJXNBWHBQkDBmrIAAoJENNvdpvB +GATwTaMQAIumhk7daTsZ0XFfDszHwiig+Kw46KpWoCm0zZn9rPxYbU+s8+qe2E/W +G4HxdwwKDMjBajsEzHgjj/p02et5LGZMKN+TT2sZX0oYhVLS8/BLrXW4Nhq9+qL1 +uGUTOcctR3ebsqNTFpevtqD4jD7galFv38BIa0G8M6YdKiH5kFzWfz760L03jdNn +HmnnG+x/S/5+uHj5ClpRjhzskS5Bn1gWAqvARcbst/jfwXV43o5Pprno3kfNkWEA +QYVLlOY8+i4JP0xBlx7sYN+s9FE00vYZWdABKis9+OoD4qnhxVE6EbHhfoW0pFei +osDr3/iWfWP1Bcrv2EPO23R7etRf5p7ERKt0p1qYPAiAJuLKzvuAreVdBszYRJSo +zM8Ka+t2Be95HDSBhonI+n2ec8J2IS/dfnUOXwg+MNMcX5jOyxo0RMkhKu8+4iN3 +ECB2+zA8OQswDklU3OfGlWwHKwbgcAicuj6yHQqpyheuRsNHq1wCTbkDYoGoI0mV +PNl5ZjIC1RhnEzfdXww6lZ//P9KuZm9oyhaRVKhEzRP/X8Py8Q78kcnFenF0MsEg +2LB3+NMIdzFRG1rjHLYuxUD28jHVx/i6LDIVVVuNZXGupZD3m2akgnCoTQdnjmob +f8VjXorvasXo5vDJWTGegQbq0vI6RmJ2fnIVj4W/H6bW8gU4GFdruQENBFUbKLcB +CACwhMqbwVAiwY2NvYvSuzyPAojv7DhTEsuSvyEhLoWUUs+HvkTc6yV3OEikM4/5 +ztfv5s8PFBBzi4i0WdSa4DivBe3rCyv4KUN7TFSZzTpAh/bCYBCXaU/hWAzRn1pX +JrRA8dkt4KXcTzkCJV1yuwcGOojMdmU64orSgZAwykf2dc/mUkSM1pMPD2ZwC0Uc +0zm0e6gfndJu2p3O1pUgKRciJe+eKlvhXTg0l8/hKH8KvUnlWrFePTbQ/zWQq4YC +lNI1rUo2Gf6zJBCwhe1Bata8dqtIpagiMCegr8069Mts9V2H2SdMIPNyWP6CP5ON +UfESWt+AYZHMEFAsoJJrK/YXABEBAAGJAiUEGAEIAA8CGyAFAlc0FZsFCQMGOuQA +CgkQ0292m8EYBPCanA//aA+ByDFR/JyzsWnFXwgkcR6CYRqYwq4cxIoL97RGIAdn +ZFyqWAMr0TGofFrcy0U2yHKUPa6ia0QI64Lq+SzibmmVqSqq5u+d/b6ZfgvBgN6o +FGwSAlwJwgXi0sK/jC+RYzw9oLWvOd+KTtKG4spNoHYKkP/Hwka9gieuuyg1hjB+ +gi1b3RKKsXB7/Q0E7lkO/UqxZqyP7gCa7bYMhfrC8Y7HSsJ5QtGy9VBf4b+U4PEK +FLYV4SZHh7LYlQaxSgzXarH+0u2Rrds+Kfwxwxs0k7fl7gCPj7gBhzErEcFYqhmg +NGgjrxA9Zw+HXmvtdRRWBU8l/L4DPNRW4SeBkNJUAa6SfJ9fMhflzV0lx+AlP/XN +Ftv2HJ7jbwUDq3vAK/dLKINrAMYOgG16pQY7HRicP63//BXqq7Sh5cbr/uvAN+aK +YYoOaIo3KjMxhev2MLENS9BuN1ACUVqWO9aXJ1VmVoroiyLxFjrxOEEGNQY7Vws1 +Slzhvb504g9Uo+cBy9HsXYh5BXZeaqra1qbMerN/WJPOCfQENE2g8jj9x4Mi4mZo +1gmiwCZiD+KvXfmwtZsvrLaV9FAnWDkJu8w/8yFUWeNVuvW0t5xXcZNv/Nwb2ONO +vsF9NoZ1s0BZ++jraVFCtbO0yETBj4YBP0T5aFKBM3zUE6HGz3E3xgx1w0dAg4c= +=oRMW +-----END PGP PUBLIC KEY BLOCK----- diff --git a/debian/uuid-dev.README.Debian b/debian/uuid-dev.README.Debian new file mode 100644 index 0000000..3d8cc89 --- /dev/null +++ b/debian/uuid-dev.README.Debian @@ -0,0 +1,23 @@ + +In order to santize e2fsprogs to be DFSG free, the file +draft-leach-uuids-guids-01.txt has been removed. It can be obtained +by downloading e2fsprogs from the upstream sources. It may also be +available from other sites on the network, if you do a quick web +search for the string "draft-leach-uuids-guids-01". + +Note that debian/rules is set up to include the file on Ubuntu +systems, so for people trying to build e2fsprogs on Ubuntu systems, +they should start from the upstream sources, and not the +Debian-expurgated sources found in the Debian repository. (n.b., for +WIP releases the command "./util/gen-tarball ubuntu" will help create +tar file which is appropriately named to make life easier for +dpkg-buildpackage.) Since Ubuntu doesn't have the DFSG restrictions, +the documentation which has been removed for Debian's DFSG license +purity shouldn't be denied to Ubuntu users. + + Theodore Ts'o + Ocotober 3, 2006 + + + + diff --git a/debian/uuid-dev.copyright b/debian/uuid-dev.copyright new file mode 100644 index 0000000..f346739 --- /dev/null +++ b/debian/uuid-dev.copyright @@ -0,0 +1,38 @@ +This package was added to the e2fsprogs debian source package by +Theodore Ts'o on Sat Mar 15 15:33:37 EST 2003 + +It is part of the main e2fsprogs distribution, which can be found at: + + http://sourceforge.net/projects/e2fsprogs + +Upstream Author: Theodore Ts'o + +Copyright: + +Copyright (C) 1999, 2000, 2003, 2004 by Theodore Ts'o + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/debian/uuid-dev.files.in b/debian/uuid-dev.files.in new file mode 100644 index 0000000..534b92c --- /dev/null +++ b/debian/uuid-dev.files.in @@ -0,0 +1,5 @@ +usr/lib/*/libuuid.so +usr/lib/*/libuuid.a +usr/include/uuid/* +usr/share/man/man3/uuid* +usr/lib/*/pkgconfig/uuid.pc diff --git a/debian/uuid-runtime.copyright b/debian/uuid-runtime.copyright new file mode 100644 index 0000000..afcd4c5 --- /dev/null +++ b/debian/uuid-runtime.copyright @@ -0,0 +1,39 @@ +This package was added to the e2fsprogs debian source package by +Theodore Ts'o on Fri Dec 14 22:24:35 EST 2007 + +It is part of the main e2fsprogs distribution, which can be found at: + + http://sourceforge.net/projects/e2fsprogs + +Upstream Author: Theodore Ts'o + +Copyright: + +Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 by +Theodore Ts'o + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, and the entire permission notice in its entirety, + including the disclaimer of warranties. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. The name of the author may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ALL OF +WHICH ARE HEREBY DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT +OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +USE OF THIS SOFTWARE, EVEN IF NOT ADVISED OF THE POSSIBILITY OF SUCH +DAMAGE. diff --git a/debian/uuid-runtime.files b/debian/uuid-runtime.files new file mode 100644 index 0000000..ff8d87a --- /dev/null +++ b/debian/uuid-runtime.files @@ -0,0 +1,4 @@ +usr/bin/uuidgen +usr/sbin/uuidd +usr/share/man/man8/uuidd.* +usr/share/man/man1/uuidgen.* diff --git a/debian/uuid-runtime.lintian-overrides b/debian/uuid-runtime.lintian-overrides new file mode 100644 index 0000000..4642d30 --- /dev/null +++ b/debian/uuid-runtime.lintian-overrides @@ -0,0 +1 @@ +uuid-runtime: command-with-path-in-maintainer-script prerm:5 /usr/sbin/uuidd diff --git a/debian/uuid-runtime.postinst b/debian/uuid-runtime.postinst new file mode 100644 index 0000000..3c1adb6 --- /dev/null +++ b/debian/uuid-runtime.postinst @@ -0,0 +1,15 @@ +#!/bin/sh + +set -e +if ! getent group | grep -q libuuid; then +groupadd -f -K GID_MIN=1 -K GID_MAX=999 libuuid +fi +if ! getent passwd | grep -q libuuid; then + useradd -d /var/lib/libuuid -K UID_MIN=1 -K UID_MAX=499 -g libuuid libuuid +fi +chown libuuid:libuuid /usr/sbin/uuidd +chmod 6755 /usr/sbin/uuidd + +#DEBHELPER# + +exit 0 diff --git a/debian/uuid-runtime.postrm b/debian/uuid-runtime.postrm new file mode 100644 index 0000000..f077001 --- /dev/null +++ b/debian/uuid-runtime.postrm @@ -0,0 +1,10 @@ +#!/bin/sh +set -e +if [ "$1" = purge ] +then + rm -rf /var/run/uuidd +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/uuid-runtime.prerm b/debian/uuid-runtime.prerm new file mode 100644 index 0000000..904e161 --- /dev/null +++ b/debian/uuid-runtime.prerm @@ -0,0 +1,10 @@ +#! /bin/sh +set -e +if [ -x /usr/sbin/uuidd ] +then + /usr/sbin/uuidd -k || true +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/uuid-runtime.shlibs.local b/debian/uuid-runtime.shlibs.local new file mode 100644 index 0000000..5d97674 --- /dev/null +++ b/debian/uuid-runtime.shlibs.local @@ -0,0 +1 @@ +libuuid 1 libuuid1 (> 1.40.3-1) diff --git a/debian/watch b/debian/watch new file mode 100644 index 0000000..f2df3dd --- /dev/null +++ b/debian/watch @@ -0,0 +1,5 @@ +version=4 +opts="pgpsigurlmangle=s%$%.asc%" \ + http://sf.net/e2fsprogs/e2fsprogs-([0-9].+)\.tar\.gz +#ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/e2fsprogs-([0-9].+)\.tar\.gz + diff --git a/debugfs/Android.mk b/debugfs/Android.mk new file mode 100644 index 0000000..91dc8c3 --- /dev/null +++ b/debugfs/Android.mk @@ -0,0 +1,93 @@ +LOCAL_PATH := $(call my-dir) + +######################### +# Build the debugfs binary + +debugfs_src_files := \ + debug_cmds.c \ + debugfs.c \ + util.c \ + ncheck.c\ + icheck.c \ + ls.c \ + lsdel.c \ + dump.c \ + set_fields.c \ + logdump.c \ + htree.c \ + unused.c \ + e2freefrag.c \ + filefrag.c \ + extent_cmds.c \ + extent_inode.c \ + zap.c \ + create_inode.c \ + quota.c \ + xattrs.c \ + journal.c \ + revoke.c \ + recovery.c \ + do_journal.c + +debugfs_shared_libraries := \ + libext2fs \ + libext2_blkid \ + libext2_uuid \ + libext2_ss \ + libext2_quota \ + libext2_com_err \ + libext2_e2p + +debugfs_system_shared_libraries := libc + +debugfs_static_libraries := \ + libext2fs \ + libext2_blkid \ + libext2_uuid_static \ + libext2_ss \ + libext2_quota \ + libext2_com_err \ + libext2_e2p + +debugfs_system_static_libraries := libc + +debugfs_c_includes := \ + external/e2fsprogs/e2fsck \ + external/e2fsprogs/misc \ + external/e2fsprogs/lib + +debugfs_cflags := -O2 -g -W -Wall -fno-strict-aliasing -DDEBUGFS + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(debugfs_src_files) +LOCAL_C_INCLUDES := $(debugfs_c_includes) +LOCAL_CFLAGS := $(debugfs_cflags) +LOCAL_SYSTEM_SHARED_LIBRARIES := $(debugfs_system_shared_libraries) +LOCAL_SHARED_LIBRARIES := $(debugfs_shared_libraries) +LOCAL_MODULE := debugfs +LOCAL_MODULE_TAGS := optional +include $(BUILD_EXECUTABLE) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(debugfs_src_files) +LOCAL_C_INCLUDES := $(debugfs_c_includes) +LOCAL_CFLAGS := $(debugfs_cflags) +LOCAL_STATIC_LIBRARIES := $(debugfs_static_libraries) $(debugfs_system_static_libraries) +LOCAL_FORCE_STATIC_EXECUTABLE := true +LOCAL_MODULE := debugfs_static +LOCAL_MODULE_TAGS := optional +include $(BUILD_EXECUTABLE) + +include $(CLEAR_VARS) + +LOCAL_SRC_FILES := $(debugfs_src_files) +LOCAL_C_INCLUDES := $(debugfs_c_includes) +LOCAL_CFLAGS := $(debugfs_cflags) +LOCAL_SHARED_LIBRARIES := $(addsuffix -host, $(debugfs_shared_libraries)) +LOCAL_MODULE := debugfs_host +LOCAL_MODULE_STEM := debugfs +LOCAL_MODULE_TAGS := optional + +include $(BUILD_HOST_EXECUTABLE) diff --git a/debugfs/Makefile.in b/debugfs/Makefile.in new file mode 100644 index 0000000..3ac80d9 --- /dev/null +++ b/debugfs/Makefile.in @@ -0,0 +1,400 @@ +# +# Standard e2fsprogs prologue.... +# + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +top_builddir = .. +my_dir = debugfs +INSTALL = @INSTALL@ + +@MCONFIG@ + +PROGS= debugfs +MANPAGES= debugfs.8 + +MK_CMDS= _SS_DIR_OVERRIDE=$(srcdir)/../lib/ss ../lib/ss/mk_cmds + +DEBUG_OBJS= debug_cmds.o debugfs.o util.o ncheck.o icheck.o ls.o \ + lsdel.o dump.o set_fields.o logdump.o htree.o unused.o e2freefrag.o \ + filefrag.o extent_cmds.o extent_inode.o zap.o create_inode.o \ + quota.o xattrs.o journal.o revoke.o recovery.o do_journal.o + +RO_DEBUG_OBJS= ro_debug_cmds.o ro_debugfs.o util.o ncheck.o icheck.o ls.o \ + lsdel.o logdump.o htree.o e2freefrag.o filefrag.o extent_cmds.o \ + extent_inode.o quota.o xattrs.o + +SRCS= debug_cmds.c $(srcdir)/debugfs.c $(srcdir)/util.c $(srcdir)/ls.c \ + $(srcdir)/ncheck.c $(srcdir)/icheck.c $(srcdir)/lsdel.c \ + $(srcdir)/dump.c $(srcdir)/set_fields.c ${srcdir}/logdump.c \ + $(srcdir)/htree.c $(srcdir)/unused.c ${srcdir}/../misc/e2freefrag.c \ + $(srcdir)/filefrag.c $(srcdir)/extent_inode.c $(srcdir)/zap.c \ + $(srcdir)/../misc/create_inode.c $(srcdir)/xattrs.c $(srcdir)/quota.c \ + $(srcdir)/journal.c $(srcdir)/../e2fsck/revoke.c \ + $(srcdir)/../e2fsck/recovery.c $(srcdir)/do_journal.c + +LIBS= $(LIBSUPPORT) $(LIBEXT2FS) $(LIBE2P) $(LIBSS) $(LIBCOM_ERR) $(LIBBLKID) \ + $(LIBUUID) $(LIBMAGIC) $(SYSLIBS) +DEPLIBS= $(DEPLIBSUPPORT) $(LIBEXT2FS) $(LIBE2P) $(DEPLIBSS) $(DEPLIBCOM_ERR) \ + $(DEPLIBBLKID) $(DEPLIBUUID) + +STATIC_LIBS= $(STATIC_LIBSUPPORT) $(STATIC_LIBEXT2FS) $(STATIC_LIBSS) \ + $(STATIC_LIBCOM_ERR) $(STATIC_LIBBLKID) $(STATIC_LIBUUID) \ + $(STATIC_LIBE2P) $(LIBMAGIC) $(SYSLIBS) +STATIC_DEPLIBS= $(STATIC_LIBEXT2FS) $(DEPSTATIC_LIBSS) \ + $(DEPSTATIC_LIBCOM_ERR) $(DEPSTATIC_LIBUUID) \ + $(DEPSTATIC_LIBE2P) + +# This nastyness is needed because of jfs_user.h hackery; when we finally +# clean up this mess, we should be able to drop it +LOCAL_CFLAGS = -I$(srcdir)/../e2fsck -DDEBUGFS +DEPEND_CFLAGS = -I$(srcdir) + +.c.o: + $(E) " CC $<" + $(Q) $(CC) -c $(ALL_CFLAGS) $< -o $@ + $(Q) $(CHECK_CMD) $(ALL_CFLAGS) $< + $(Q) $(CPPCHECK_CMD) $(CPPFLAGS) $< + +all:: $(PROGS) $(MANPAGES) + +debugfs: $(DEBUG_OBJS) $(DEPLIBS) + $(E) " LD $@" + $(Q) $(CC) $(ALL_LDFLAGS) -o debugfs $(DEBUG_OBJS) $(LIBS) + +debugfs.static: $(DEBUG_OBJS) $(STATIC_DEPLIBS) + $(E) " LD $@" + $(Q) $(CC) $(LDFLAGS_STATIC) -o debugfs.static $(DEBUG_OBJS) \ + $(STATIC_LIBS) $(READLINE_LIB) + +debugfs.static-libs: $(DEBUG_OBJS) $(STATIC_DEPLIBS) + $(E) " LD $@" + $(Q) $(CC) -o debugfs.static-libs $(DEBUG_OBJS) \ + $(STATIC_LIBS) $(READLINE_LIB) + +rdebugfs: $(RO_DEBUG_OBJS) $(DEPLIBS) + $(E) " LD $@" + $(Q) $(CC) $(ALL_LDFLAGS) -o rdebugfs $(RO_DEBUG_OBJS) $(LIBS) + +debug_cmds.c debug_cmds.h: debug_cmds.ct + $(E) " MK_CMDS $@" + $(Q) $(MK_CMDS) $(srcdir)/debug_cmds.ct + +extent_cmds.c extent_cmds.h: extent_cmds.ct + $(E) " MK_CMDS $@" + $(Q) $(MK_CMDS) $(srcdir)/extent_cmds.ct + +ro_debug_cmds.c ro_debug_cmds.h: ro_debug_cmds.ct + $(E) " MK_CMDS $@" + $(Q) $(MK_CMDS) $(srcdir)/ro_debug_cmds.ct + +ro_debugfs.o: debugfs.c + $(E) " CC $@" + $(Q) $(CC) -c $(ALL_CFLAGS) $< -DREAD_ONLY -o $@ + +e2freefrag.o: $(srcdir)/../misc/e2freefrag.c + $(E) " CC $@" + $(Q) $(CC) -c $(ALL_CFLAGS) -I$(srcdir) $< -o $@ + +recovery.o: $(srcdir)/../e2fsck/recovery.c + $(E) " CC $@" + $(Q) $(CC) -c $(ALL_CFLAGS) -I$(srcdir) \ + $(srcdir)/../e2fsck/recovery.c -o $@ + +revoke.o: $(srcdir)/../e2fsck/revoke.c + $(E) " CC $@" + $(Q) $(CC) -c $(ALL_CFLAGS) -I$(srcdir) \ + $(srcdir)/../e2fsck/revoke.c -o $@ + +create_inode.o: $(srcdir)/../misc/create_inode.c + $(E) " CC $@" + $(Q) $(CC) -c $(ALL_CFLAGS) -I$(srcdir) \ + $(srcdir)/../misc/create_inode.c -o $@ + +debugfs.8: $(DEP_SUBSTITUTE) $(srcdir)/debugfs.8.in + $(E) " SUBST $@" + $(Q) $(SUBSTITUTE_UPTIME) $(srcdir)/debugfs.8.in debugfs.8 + +installdirs: + $(E) " MKINSTALLDIRS $(root_sbindir) $(man8dir)" + $(Q) $(MKINSTALLDIRS) $(DESTDIR)$(root_sbindir) \ + $(DESTDIR)$(man8dir) + +install: $(PROGS) $(MANPAGES) installdirs + $(Q) for i in $(PROGS); do \ + echo " INSTALL $(root_sbindir)/$$i"; \ + $(INSTALL_PROGRAM) $$i $(DESTDIR)$(root_sbindir)/$$i; \ + done + $(Q) for i in $(MANPAGES); do \ + for j in $(COMPRESS_EXT); do \ + $(RM) -f $(DESTDIR)$(man8dir)/$$i.$$j; \ + done; \ + echo " INSTALL_DATA $(man8dir)/$$i"; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(man8dir)/$$i; \ + done + +install-strip: install + $(Q) for i in $(PROGS); do \ + echo " STRIP $(root_sbindir)/$$i"; \ + $(STRIP) $(DESTDIR)$(root_sbindir)/$$i; \ + done + +uninstall: + for i in $(PROGS); do \ + $(RM) -f $(DESTDIR)$(root_sbindir)/$$i; \ + done + for i in $(MANPAGES); do \ + $(RM) -f $(DESTDIR)$(man8dir)/$$i; \ + done + +clean:: + $(RM) -f $(PROGS) debugfs.8 \#* *.s *.o *.a *~ debug_cmds.c \ + extent_cmds.c ro_debug_cmds.c core rdebugfs debugfs.static \ + debugfs.static-libs tst_set_fields + +mostlyclean: clean +distclean: clean + $(RM) -f debug_cmds.c .depend Makefile $(srcdir)/TAGS \ + $(srcdir)/Makefile.in.old $(srcdir)/recovery.c \ + $(srcdir)/revoke.c + +tst_set_fields: set_fields.c util.c + $(E) " LD $@" + $(Q) $(CC) $(ALL_CFLAGS) $(ALL_LDFLAGS) $(SYSLIBS) -DUNITTEST \ + -o tst_set_fields $(srcdir)/set_fields.c $(srcdir)/util.c $(LIBS) + +check:: tst_set_fields + $(TESTENV) ./tst_set_fields + +# +++ Dependency line eater +++ +# +# Makefile dependencies follow. This must be the last section in +# the Makefile.in file +# +debug_cmds.o: debug_cmds.c $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h +debugfs.o: $(srcdir)/debugfs.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h $(top_srcdir)/version.h \ + $(srcdir)/../e2fsck/jfs_user.h $(top_srcdir)/lib/ext2fs/kernel-jbd.h \ + $(top_srcdir)/lib/ext2fs/jfs_compat.h $(top_srcdir)/lib/ext2fs/kernel-list.h \ + $(top_srcdir)/lib/support/plausible.h +util.o: $(srcdir)/util.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(srcdir)/debugfs.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ + $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ + $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ + $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +ls.o: $(srcdir)/ls.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +ncheck.o: $(srcdir)/ncheck.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +icheck.o: $(srcdir)/icheck.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +lsdel.o: $(srcdir)/lsdel.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +dump.o: $(srcdir)/dump.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +set_fields.o: $(srcdir)/set_fields.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +logdump.o: $(srcdir)/logdump.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h $(srcdir)/../e2fsck/jfs_user.h \ + $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ + $(top_srcdir)/lib/ext2fs/kernel-list.h +htree.o: $(srcdir)/htree.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +unused.o: $(srcdir)/unused.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +e2freefrag.o: $(srcdir)/../misc/e2freefrag.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ + $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ + $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/e2freefrag.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(srcdir)/../misc/create_inode.h \ + $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/quotaio.h \ + $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +filefrag.o: $(srcdir)/filefrag.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +extent_inode.o: $(srcdir)/extent_inode.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +zap.o: $(srcdir)/zap.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +create_inode.o: $(srcdir)/../misc/create_inode.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ + $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ + $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(top_srcdir)/lib/ext2fs/fiemap.h $(srcdir)/../misc/create_inode.h \ + $(top_srcdir)/lib/e2p/e2p.h $(top_srcdir)/lib/support/nls-enable.h +xattrs.o: $(srcdir)/xattrs.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(top_srcdir)/lib/support/cstring.h \ + $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +quota.o: $(srcdir)/quota.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h +journal.o: $(srcdir)/journal.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/journal.h \ + $(srcdir)/../e2fsck/jfs_user.h $(top_srcdir)/lib/ext2fs/ext2_fs.h \ + $(top_builddir)/lib/ext2fs/ext2_types.h $(top_srcdir)/lib/ext2fs/ext2fs.h \ + $(top_srcdir)/lib/ext2fs/ext3_extents.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ + $(top_srcdir)/lib/ext2fs/kernel-list.h +revoke.o: $(srcdir)/../e2fsck/revoke.c $(srcdir)/../e2fsck/jfs_user.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ + $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ + $(top_srcdir)/lib/ext2fs/kernel-list.h +recovery.o: $(srcdir)/../e2fsck/recovery.c $(srcdir)/../e2fsck/jfs_user.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/et/com_err.h $(top_srcdir)/lib/ext2fs/ext2_io.h \ + $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ + $(top_srcdir)/lib/ext2fs/kernel-list.h +do_journal.o: $(srcdir)/do_journal.c $(top_builddir)/lib/config.h \ + $(top_builddir)/lib/dirpaths.h $(srcdir)/debugfs.h $(top_srcdir)/lib/ss/ss.h \ + $(top_builddir)/lib/ss/ss_err.h $(top_srcdir)/lib/et/com_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_fs.h $(top_builddir)/lib/ext2fs/ext2_types.h \ + $(top_srcdir)/lib/ext2fs/ext2fs.h $(top_srcdir)/lib/ext2fs/ext3_extents.h \ + $(top_srcdir)/lib/ext2fs/ext2_io.h $(top_builddir)/lib/ext2fs/ext2_err.h \ + $(top_srcdir)/lib/ext2fs/ext2_ext_attr.h $(top_srcdir)/lib/ext2fs/bitops.h \ + $(srcdir)/../misc/create_inode.h $(top_srcdir)/lib/e2p/e2p.h \ + $(top_srcdir)/lib/support/quotaio.h $(top_srcdir)/lib/support/dqblk_v2.h \ + $(top_srcdir)/lib/support/quotaio_tree.h \ + $(top_srcdir)/lib/ext2fs/kernel-jbd.h $(top_srcdir)/lib/ext2fs/jfs_compat.h \ + $(top_srcdir)/lib/ext2fs/kernel-list.h $(srcdir)/journal.h \ + $(srcdir)/../e2fsck/jfs_user.h diff --git a/debugfs/debug_cmds.ct b/debugfs/debug_cmds.ct new file mode 100644 index 0000000..1ff6c9d --- /dev/null +++ b/debugfs/debug_cmds.ct @@ -0,0 +1,233 @@ +# +# Copyright (C) 1993 Theodore Ts'o. This file may be redistributed +# under the terms of the GNU Public License. +# +command_table debug_cmds; + +request do_show_debugfs_params, "Show debugfs parameters", + show_debugfs_params, params; + +request do_open_filesys, "Open a filesystem", + open_filesys, open; + +request do_close_filesys, "Close the filesystem", + close_filesys, close; + +request do_freefrag, "Report free space fragmentation", + freefrag, e2freefrag; + +request do_features, "Set/print superblock features", + feature, features; + +request do_dirty_filesys, "Mark the filesystem as dirty", + dirty_filesys, dirty; + +request do_init_filesys, "Initialize a filesystem (DESTROYS DATA)", + init_filesys; + +request do_show_super_stats, "Show superblock statistics", + show_super_stats, stats; + +request do_ncheck, "Do inode->name translation", + ncheck; + +request do_icheck, "Do block->inode translation", + icheck; + +request do_chroot, "Change root directory", + change_root_directory, chroot; + +request do_change_working_dir, "Change working directory", + change_working_directory, cd; + +request do_list_dir, "List directory", + list_directory, ls; + +request do_stat, "Show inode information ", + show_inode_info, stat; + +request do_dump_extents, "Dump extents information ", + dump_extents, extents, ex; + +request do_blocks, "Dump blocks used by an inode ", + blocks; + +request do_filefrag, "Report fragmentation information for an inode", + filefrag; + +request do_link, "Create directory link", + link, ln; + +request do_unlink, "Delete a directory link", + unlink; + +request do_mkdir, "Create a directory", + mkdir; + +request do_rmdir, "Remove a directory", + rmdir; + +request do_rm, "Remove a file (unlink and kill_file, if appropriate)", + rm; + +request do_kill_file, "Deallocate an inode and its blocks", + kill_file; + +request do_copy_inode, "Copy the inode structure", + copy_inode; + +request do_clri, "Clear an inode's contents", + clri; + +request do_freei, "Clear an inode's in-use flag", + freei; + +request do_seti, "Set an inode's in-use flag", + seti; + +request do_testi, "Test an inode's in-use flag", + testi; + +request do_freeb, "Clear a block's in-use flag", + freeb; + +request do_setb, "Set a block's in-use flag", + setb; + +request do_testb, "Test a block's in-use flag", + testb; + +request do_modify_inode, "Modify an inode by structure", + modify_inode, mi; + +request do_find_free_block, "Find free block(s)", + find_free_block, ffb; + +request do_find_free_inode, "Find free inode(s)", + find_free_inode, ffi; + +request do_print_working_directory, "Print current working directory", + print_working_directory, pwd; + +request do_expand_dir, "Expand directory", + expand_dir, expand; + +request do_mknod, "Create a special file", + mknod; + +request do_lsdel, "List deleted inodes", + list_deleted_inodes, lsdel; + +request do_undel, "Undelete file", + undelete, undel; + +request do_write, "Copy a file from your native filesystem", + write; + +request do_dump, "Dump an inode out to a file", + dump_inode, dump; + +request do_cat, "Dump an inode out to stdout", + cat; + +request do_lcd, "Change the current directory on your native filesystem", + lcd; + +request do_rdump, "Recursively dump a directory to the native filesystem", + rdump; + +request do_set_super, "Set superblock value", + set_super_value, ssv; + +request do_set_inode, "Set inode field", + set_inode_field, sif; + +request do_set_block_group_descriptor, "Set block group descriptor field", + set_block_group, set_bg; + +request do_logdump, "Dump the contents of the journal", + logdump; + +request do_htree_dump, "Dump a hash-indexed directory", + htree_dump, htree; + +request do_dx_hash, "Calculate the directory hash of a filename", + dx_hash, hash; + +request do_dirsearch, "Search a directory for a particular filename", + dirsearch; + +request do_bmap, "Calculate the logical->physical block mapping for an inode", + bmap; + +request do_fallocate, "Allocate uninitialized blocks to an inode", + fallocate; + +request do_punch, "Punch (or truncate) blocks from an inode by deallocating them", + punch, truncate; + +request do_symlink, "Create a symbolic link", + symlink; + +request do_imap, "Calculate the location of an inode", + imap; + +request do_dump_unused, "Dump unused blocks", + dump_unused; + +request do_set_current_time, "Set current time to use when setting filesystem fields", + set_current_time; + +request do_supported_features, "Print features supported by this version of e2fsprogs", + supported_features; + +request do_dump_mmp, "Dump MMP information", + dump_mmp; + +request do_set_mmp_value, "Set MMP value", + set_mmp_value, smmp; + +request do_extent_open, "Open inode for extent manipulation", + extent_open, eo; + +request do_zap_block, "Zap block: fill with 0, pattern, flip bits etc.", + zap_block, zap; + +request do_block_dump, "Dump contents of a block", + block_dump, bdump, bd; + +request do_list_xattr, "List extended attributes of an inode", + ea_list; + +request do_get_xattr, "Get an extended attribute of an inode", + ea_get; + +request do_set_xattr, "Set an extended attribute of an inode", + ea_set; + +request do_rm_xattr, "Remove an extended attribute of an inode", + ea_rm; + +request do_list_quota, "List quota", + list_quota, lq; + +request do_get_quota, "Get quota", + get_quota, gq; + +request do_idump, "Dump the inode structure in hex", + inode_dump, idump, id; + +request do_journal_open, "Open the journal", + journal_open, jo; + +request do_journal_close, "Close the journal", + journal_close, jc; + +request do_journal_write, "Write a transaction to the journal", + journal_write, jw; + +request do_journal_run, "Recover the journal", + journal_run, jr; + +end; + diff --git a/debugfs/debugfs.8.in b/debugfs/debugfs.8.in new file mode 100644 index 0000000..e151d43 --- /dev/null +++ b/debugfs/debugfs.8.in @@ -0,0 +1,823 @@ +.\" -*- nroff -*- +.\" Copyright 1993, 1994, 1995 by Theodore Ts'o. All Rights Reserved. +.\" This file may be copied under the terms of the GNU Public License. +.\" +.TH DEBUGFS 8 "@E2FSPROGS_MONTH@ @E2FSPROGS_YEAR@" "E2fsprogs version @E2FSPROGS_VERSION@" +.SH NAME +debugfs \- ext2/ext3/ext4 file system debugger +.SH SYNOPSIS +.B debugfs +[ +.B \-DVwcin +] +[ +.B \-b +blocksize +] +[ +.B \-s +superblock +] +[ +.B \-f +cmd_file +] +[ +.B \-R +request +] +[ +.B \-d +data_source_device +] +[ +.B \-z +.I undo_file +] +[ +device +] +.SH DESCRIPTION +The +.B debugfs +program is an interactive file system debugger. It can be used to +examine and change the state of an ext2, ext3, or ext4 file system. +.PP +.I device +is a block device (e.g., /dev/sdXX) or a file containing the file system. +.SH OPTIONS +.TP +.I \-w +Specifies that the file system should be opened in read-write mode. +Without this option, the file system is opened in read-only mode. +.TP +.I \-n +Disables metadata checksum verification. This should only be used if +you believe the metadata to be correct despite the complaints of +e2fsprogs. +.TP +.I \-c +Specifies that the file system should be opened in catastrophic mode, in +which the inode and group bitmaps are not read initially. This can be +useful for filesystems with significant corruption, but because of this, +catastrophic mode forces the filesystem to be opened read-only. +.TP +.I \-i +Specifies that +.I device +represents an ext2 image file created by the +.B e2image +program. Since the ext2 image file only contains the superblock, block +group descriptor, block and inode allocation bitmaps, and +the inode table, many +.B debugfs +commands will not function properly. +.B Warning: +no safety checks are in place, and +.B debugfs +may fail in interesting ways if commands such as +.IR ls ", " dump ", " +etc. are tried without specifying the +.I data_source_device +using the +.I \-d +option. +.B debugfs +is a debugging tool. It has rough edges! +.TP +.I -d data_source_device +Used with the +.I \-i +option, specifies that +.I data_source_device +should be used when reading blocks not found in the ext2 image file. +This includes data, directory, and indirect blocks. +.TP +.I -b blocksize +Forces the use of the given block size (in bytes) for the file system, +rather than detecting the correct block size automatically. (This +option is rarely needed; it is used primarily when the file system is +extremely badly damaged/corrupted.) +.TP +.I -s superblock +Causes the file system superblock to be read from the given block +number, instead of using the primary superblock (located at an offset of +1024 bytes from the beginning of the filesystem). If you specify the +.I -s +option, you must also provide the blocksize of the filesystem via the +.I -b +option. (This +option is rarely needed; it is used primarily when the file system is +extremely badly damaged/corrupted.) +.TP +.I -f cmd_file +Causes +.B debugfs +to read in commands from +.IR cmd_file , +and execute them. When +.B debugfs +is finished executing those commands, it will exit. +.TP +.I -D +Causes +.B debugfs +to open the device using Direct I/O, bypassing the buffer cache. Note +that some Linux devices, notably device mapper as of this writing, do +not support Direct I/O. +.TP +.I -R request +Causes +.B debugfs +to execute the single command +.IR request , +and then exit. +.TP +.I -V +print the version number of +.B debugfs +and exit. +.TP +.BI \-z " undo_file" +Before overwriting a file system block, write the old contents of the block to +an undo file. This undo file can be used with e2undo(8) to restore the old +contents of the file system should something go wrong. If the empty string is +passed as the undo_file argument, the undo file will be written to a file named +resize2fs-\fIdevice\fR.e2undo in the directory specified via the +\fIE2FSPROGS_UNDO_DIR\fR environment variable. + +WARNING: The undo file cannot be used to recover from a power or system crash. +.SH SPECIFYING FILES +Many +.B debugfs +commands take a +.I filespec +as an argument to specify an inode (as opposed to a pathname) +in the filesystem which is currently opened by +.BR debugfs . +The +.I filespec +argument may be specified in two forms. The first form is an inode +number surrounded by angle brackets, e.g., +.IR <2> . +The second form is a pathname; if the pathname is prefixed by a forward slash +('/'), then it is interpreted relative to the root of the filesystem +which is currently opened by +.BR debugfs . +If not, the pathname is +interpreted relative to the current working directory as maintained by +.BR debugfs . +This may be modified by using the +.B debugfs +command +.IR cd . +.\" +.\" +.\" +.SH COMMANDS +This is a list of the commands which +.B debugfs +supports. +.TP +.BI blocks " filespace" +Print the blocks used by the inode +.I filespec +to stdout. +.TP +.BI bmap " [ -a ] filespec logical_block [physical_block]" +Print or set the physical block number corresponding to the logical block number +.I logical_block +in the inode +.IR filespec . +If the +.I -a +flag is specified, try to allocate a block if necessary. +.TP +.BI block_dump " [-f filespec] block_num" +Dump the filesystem block given by +.I block_num +in hex and ASCII format to the console. If the +.I -f +option is specified, the block number is relative to the start of the given +.BR filespec . +.TP +.BI cat " filespec" +Dump the contents of the inode +.I filespec +to stdout. +.TP +.BI cd " filespec" +Change the current working directory to +.IR filespec . +.TP +.BI chroot " filespec" +Change the root directory to be the directory +.IR filespec . +.TP +.BI close " [-a]" +Close the currently open file system. If the +.I -a +option is specified, write out any changes to the superblock and block +group descriptors to all of the backup superblocks, not just to the +master superblock. +.TP +.BI clri " filespec" +Clear the contents of the inode +.IR filespec . +.TP +.BI copy_inode " source_inode destination_inode" +Copy the conents of the inode structure in +.I source_inode +and use it to overwrite the inode structure at +.IR destination_inode . +.TP +.BI dirsearch " filespec filename" +Search the directory +.I filespec +for +.IR filename . +.TP +.B dirty +Mark the filesystem as dirty, so that the superblocks will be written on exit. +.TP +.BI dump " [-p] filespec out_file" +Dump the contents of the inode +.I filespec +to the output file +.IR out_file . +If the +.I -p +option is given set the owner, group and permissions information on +.I out_file +to match +.IR filespec . +.TP +.BI dump_mmp " [mmp_block]" +Display the multiple-mount protection (mmp) field values. If +.I mmp_block +is specified then verify and dump the MMP values from the given block +number, otherwise use the +.B s_mmp_block +field in the superblock to locate and use the existing MMP block. +.TP +.BI dx_hash " [-h hash_alg] [-s hash_seed] filename" +Calculate the directory hash of +.IR filename . +The hash algorithm specified with +.I -h +may be +.BR legacy , " half_md4" ", or " tea . +The hash seed specified with +.I -s +must be in UUID format. +.TP +.BI dump_extents " [-n] [-l] filespec" +Dump the the extent tree of the inode +.IR filespec . +The +.I -n +flag will cause +.B dump_extents +to only display the interior nodes in the extent tree. The +.I -l +flag will cause +.B dump_extents +to only display the leaf nodes in the extent tree. +.IP +(Please note that the length and range of blocks for the last extent in +an interior node is an estimate by the extents library functions, and is +not stored in filesystem data structures. Hence, the values displayed +may not necessarily by accurate and does not indicate a problem or +corruption in the file system.) +.TP +.BI ea_get " [-f outfile] filespec attr_name" +Retrieve the value of the extended attribute +.I attr_name +in the file +.I filespec +and write it either to stdout or to \fIoutfile\fR. +.TP +.BI ea_list " filespec +List the extended attributes associated with the file +.I filespec +to standard output. +.TP +.BI ea_set " [-f infile] filespec attr_name attr_value +Set the value of the extended attribute +.I attr_name +in the file +.I filespec +to the string value +.I attr_value +or read it from \fIinfile\fR. +.TP +.BI ea_rm " filespec attr_names... +Remove the extended attribute +.I attr_name +from the file \fIfilespec\fR. +.TP +.BI expand_dir " filespec" +Expand the directory +.IR filespec . +.TP +.BI fallocate " filespec start_block [end_block] +Allocate and map uninitialized blocks into \fIfilespec\fR between +logical block \fIstart_block\fR and \fIend_block\fR, inclusive. If +\fIend_block\fR is not supplied, this function maps until it runs out +of free disk blocks or the maximum file size is reached. Existing +mappings are left alone. +.TP +.BI feature " [fs_feature] [-fs_feature] ..." +Set or clear various filesystem features in the superblock. After setting +or clearing any filesystem features that were requested, print the current +state of the filesystem feature set. +.TP +.BI filefrag " [-dvr] filespec" +Print the number of contiguous extents in +.IR filespec . +If +.I filespec +is a directory and the +.I -d +option is not specified, +.I filefrag +will print the number of contiguous extents for each file in +the directory. The +.I -v +option will cause +.I filefrag +print a tabular listing of the contiguous extents in the +file. The +.I -r +option will cause +.I filefrag +to do a recursive listing of the directory. +.TP +.BI find_free_block " [count [goal]]" +Find the first +.I count +free blocks, starting from +.I goal +and allocate it. Also available as +.BR ffb . +.TP +.BI find_free_inode " [dir [mode]]" +Find a free inode and allocate it. If present, +.I dir +specifies the inode number of the directory +which the inode is to be located. The second +optional argument +.I mode +specifies the permissions of the new inode. (If the directory bit is set +on the mode, the allocation routine will function differently.) Also +available as +.BR ffi . +.TP +.BI freeb " block [count]" +Mark the block number +.I block +as not allocated. +If the optional argument +.I count +is present, then +.I count +blocks starting at block number +.I block +will be marked as not allocated. +.TP +.BI freefrag " [-c chunk_kb]" +Report free space fragmentation on the currently open file system. +If the +.I \-c +option is specified then the filefrag command will print how many free +chunks of size +.I chunk_kb +can be found in the file system. The chunk size must be a power of two +and be larger than the file system block size. +.TP +.BI freei " filespec [num]" +Free the inode specified by +.IR filespec . +If +.I num +is specified, also clear num-1 inodes after the specified inode. +.TP +.B help +Print a list of commands understood by +.BR debugfs . +.TP +.BI htree_dump " filespec" +Dump the hash-indexed directory +.IR filespec , +showing its tree structure. +.TP +.BI icheck " block ..." +Print a listing of the inodes which use the one or more blocks specified +on the command line. +.TP +.BI inode_dump " filespec" +Print the contents of the inode data structure in hex and ASCII format. +.TP +.BI imap " filespec" +Print the location of the inode data structure (in the inode table) +of the inode +.IR filespec . +.TP +.BI init_filesys " device blocksize" +Create an ext2 file system on +.I device +with device size +.IR blocksize . +Note that this does not fully initialize all of the data structures; +to do this, use the +.BR mke2fs (8) +program. This is just a call to the low-level library, which sets up +the superblock and block descriptors. +.TP +.BI journal_close +Close the open journal. +.TP +.BI journal_open " [-c] [-v ver] [-j ext_jnl] +Opens the journal for reading and writing. Journal checksumming can +be enabled by supplying \fI-c\fR; checksum formats 2 and 3 can be +selected with the \fI-v\fR option. An external journal can be loaded +from \fIext_jnl\fR. +.TP +.BI journal_run +Replay all transactions in the open journal. +.TP +.BI journal_write " [-b blocks] [-r revoke] [-c] file +Write a transaction to the open journal. The list of blocks to write +should be supplied as a comma-separated list in \fIblocks\fR; the +blocks themselves should be readable from \fIfile\fR. A list of +blocks to revoke can be supplied as a comma-separated list in +\fIrevoke\fR. By default, a commit record is written at the end; the +\fI-c\fR switch writes an uncommitted transaction. +.TP +.BI kill_file " filespec" +Deallocate the inode +.I filespec +and its blocks. Note that this does not remove any directory +entries (if any) to this inode. See the +.BR rm (1) +command if you wish to unlink a file. +.TP +.BI lcd " directory" +Change the current working directory of the +.B debugfs +process to +.I directory +on the native filesystem. +.TP +.BI ln " filespec dest_file" +Create a link named +.I dest_file +which is a hard link to +.IR filespec . +Note this does not adjust the inode reference counts. +.TP +.BI logdump " [-acsO] [-b block] [-i filespec] [-f journal_file] [output_file]" +Dump the contents of the ext3 journal. By default, dump the journal inode as +specified in the superblock. However, this can be overridden with the +.I \-i +option, which dumps the journal from the internal inode given by +.IR filespec . +A regular file containing journal data can be specified using the +.I \-f +option. Finally, the +.I \-s +option utilizes the backup information in the superblock to locate the +journal. +.IP +The +.I \-a +option causes the +.B logdump +program to print the contents of all of the descriptor blocks. +The +.I \-b +option causes +.B logdump +to print all journal records that are refer to the specified block. +The +.I \-c +option will print out the contents of all of the data blocks selected by +the +.I \-a +and +.I \-b +options. +.IP +The +.I \-O +option causes logdump to display old (checkpointed) journal entries. +This can be used to try to track down journal problems even after the +journal has been replayed. +.TP +.BI ls " [-l] [-c] [-d] [-p] [-r] filespec" +Print a listing of the files in the directory +.IR filespec . +The +.I \-c +flag causes directory block checksums (if present) to be displayed. +The +.I \-d +flag will list deleted entries in the directory. +The +.I \-l +flag will list files using a more verbose format. +The +.I \-p +flag will list the files in a format which is more easily parsable by +scripts, as well as making it more clear when there are spaces or other +non-printing characters at the end of filenames. +The +.I \-r +flag will force the printing of the filename, even if it is encrypted. +.TP +.BI list_deleted_inodes " [limit]" +List deleted inodes, optionally limited to those deleted within +.I limit +seconds ago. Also available as +.BR lsdel . +.IP +This command was useful for recovering from accidental file deletions +for ext2 file systems. Unfortunately, it is not useful for this purpose +if the files were deleted using ext3 or ext4, since the inode's +data blocks are no longer available after the inode is released. +.TP +.BI modify_inode " filespec" +Modify the contents of the inode structure in the inode +.IR filespec . +Also available as +.BR mi . +.TP +.BI mkdir " filespec" +Make a directory. +.TP +.BI mknod " filespec [p|[[c|b] major minor]]" +Create a special device file (a named pipe, character or block device). +If a character or block device is to be made, the +.I major +and +.I minor +device numbers must be specified. +.TP +.BI ncheck " [-c] inode_num ..." +Take the requested list of inode numbers, and print a listing of pathnames +to those inodes. The +.I -c +flag will enable checking the file type information in the directory +entry to make sure it matches the inode's type. +.TP +.BI open " [-weficD] [-b blocksize] [-s superblock] [-z undo_file] device" +Open a filesystem for editing. The +.I -f +flag forces the filesystem to be opened even if there are some unknown +or incompatible filesystem features which would normally +prevent the filesystem from being opened. The +.I -e +flag causes the filesystem to be opened in exclusive mode. The +.IR -b ", " -c ", " -i ", " -s ", " -w ", and " -D +options behave the same as the command-line options to +.BR debugfs . +.TP +.BI punch " filespec start_blk [end_blk]" +Delete the blocks in the inode ranging from +.I start_blk +to +.IR end_blk . +If +.I end_blk +is omitted then this command will function as a truncate command; that +is, all of the blocks starting at +.I start_blk +through to the end of the file will be deallocated. +.TP +.BI symlink " filespec target" +Make a symbolic link. +.TP +.B pwd +Print the current working directory. +.TP +.B quit +Quit +.B debugfs +.TP +.BI rdump " directory[...] destination" +Recursively dump +.IR directory , +or multiple +.IR directories , +and all its contents (including regular files, symbolic links, and other +directories) into the named +.IR destination , +which should be an existing directory on the native filesystem. +.TP +.BI rm " pathname" +Unlink +.IR pathname . +If this causes the inode pointed to by +.I pathname +to have no other references, deallocate the file. This command functions +as the unlink() system call. +.I +.TP +.BI rmdir " filespec" +Remove the directory +.IR filespec . +.TP +.BI setb " block [count]" +Mark the block number +.I block +as allocated. +If the optional argument +.I count +is present, then +.I count +blocks starting at block number +.I block +will be marked as allocated. +.TP +.BI set_block_group " bgnum field value" +Modify the block group descriptor specified by +.I bgnum +so that the block group descriptor field +.I field +has value +.IR value . +Also available as +.BR set_bg . +.TP +.BI seti " filespec [num]" +Mark inode +.I filespec +as in use in the inode bitmap. If +.I num +is specified, also set num-1 inodes after the specified inode. +.TP +.BI set_inode_field " filespec field value" +Modify the inode specified by +.I filespec +so that the inode field +.I field +has value +.I value. +The list of valid inode fields which can be set via this command +can be displayed by using the command: +.B set_inode_field -l +Also available as +.BR sif . +.TP +.BI set_mmp_value " field value" +Modify the multiple-mount protection (MMP) data so that the MMP field +.I field +has value +.I value. +The list of valid MMP fields which can be set via this command +can be displayed by using the command: +.B set_mmp_value -l +Also available as +.BR smmp . +.TP +.BI set_super_value " field value" +Set the superblock field +.I field +to +.I value. +The list of valid superblock fields which can be set via this command +can be displayed by using the command: +.B set_super_value -l +Also available as +.BR ssv . +.TP +.BI show_super_stats " [-h]" +List the contents of the super block and the block group descriptors. If the +.I -h +flag is given, only print out the superblock contents. Also available as +.BR stats . +.TP +.BI stat " filespec" +Display the contents of the inode structure of the inode +.IR filespec . +.TP +.BI testb " block [count]" +Test if the block number +.I block +is marked as allocated in the block bitmap. +If the optional argument +.I count +is present, then +.I count +blocks starting at block number +.I block +will be tested. +.TP +.BI testi " filespec" +Test if the inode +.I filespec +is marked as allocated in the inode bitmap. +.TP +.BI undel " [pathname]" +Undelete the specified inode number (which must be surrounded by angle +brackets) so that it and its blocks are marked in use, and optionally +link the recovered inode to the specified pathname. The +.B e2fsck +command should always be run after using the +.B undel +command to recover deleted files. +.IP +Note that if you are recovering a large number of deleted files, linking +the inode to a directory may require the directory to be expanded, which +could allocate a block that had been used by one of the +yet-to-be-undeleted files. So it is safer to undelete all of the +inodes without specifying a destination pathname, and then in a separate +pass, use the debugfs +.B link +command to link the inode to the destination pathname, or use +.B e2fsck +to check the filesystem and link all of the recovered inodes to the +lost+found directory. +.TP +.BI unlink " pathname" +Remove the link specified by +.I pathname +to an inode. Note this does not adjust the inode reference counts. +.TP +.BI write " source_file out_file" +Copy the contents of +.I source_file +into a newly-created file in the filesystem named +.IR out_file . +.TP +.BI zap_block " [-f filespec] [-o offset] [-l length] [-p pattern] block_num" +Overwrite the block specified by +.I block_num +with zero (NUL) bytes, or if +.I -p +is given use the byte specified by +.IR pattern . +If +.I -f +is given then +.I block_num +is relative to the start of the file given by +.IR filespec . +The +.I -o +and +.I -l +options limit the range of bytes to zap to the specified +.I offset +and +.I length +relative to the start of the block. +.TP +.BI zap_block " [-f filespec] [-b bit] block_num" +Bit-flip portions of the physical +.IR block_num . +If +.I -f +is given, then +.I block_num +is a logical block relative to the start of +.IR filespec . +.SH ENVIRONMENT VARIABLES +.TP +.B DEBUGFS_PAGER, PAGER +The +.B debugfs +program always pipes the output of the some commands through a +pager program. These commands include: +.IR show_super_stats " (" stats ), +.IR list_directory " (" ls ), +.IR show_inode_info " (" stat ), +.IR list_deleted_inodes " (" lsdel ), +and +.IR htree_dump . +The specific pager can explicitly specified by the +.B DEBUGFS_PAGER +environment variable, and if it is not set, by the +.B PAGER +environment variable. +.IP +Note that since a pager is always used, the +.BR less (1) +pager is not particularly appropriate, since it clears the screen before +displaying the output of the command and clears the output the screen +when the pager is exited. Many users prefer to use the +.BR less (1) +pager for most purposes, which is why the +.B DEBUGFS_PAGER +environment variable is available to override the more general +.B PAGER +environment variable. +.SH AUTHOR +.B debugfs +was written by Theodore Ts'o . +.SH SEE ALSO +.BR dumpe2fs (8), +.BR tune2fs (8), +.BR e2fsck (8), +.BR mke2fs (8), +.BR ext4 (5) diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c new file mode 100644 index 0000000..165f924 --- /dev/null +++ b/debugfs/debugfs.c @@ -0,0 +1,2553 @@ +/* + * debugfs.c --- a program which allows you to attach an ext2fs + * filesystem and play with it. + * + * Copyright (C) 1993 Theodore Ts'o. This file may be redistributed + * under the terms of the GNU Public License. + * + * Modifications by Robert Sanders + */ + +#include "config.h" +#include +#include +#include +#include +#include +#include +#include +#ifdef HAVE_GETOPT_H +#include +#else +extern int optind; +extern char *optarg; +#endif +#ifdef HAVE_ERRNO_H +#include +#endif +#include + +#include "debugfs.h" +#include "uuid/uuid.h" +#include "e2p/e2p.h" + +#include + +#include "../version.h" +#include "jfs_user.h" +#include "support/plausible.h" + +#ifndef BUFSIZ +#define BUFSIZ 8192 +#endif + +#ifdef CONFIG_JBD_DEBUG /* Enabled by configure --enable-jbd-debug */ +int journal_enable_debug = -1; +#endif + +ss_request_table *extra_cmds; +const char *debug_prog_name; +int sci_idx; + +ext2_filsys current_fs; +quota_ctx_t current_qctx; +ext2_ino_t root, cwd; + +static int debugfs_setup_tdb(const char *device_name, char *undo_file, + io_manager *io_ptr) +{ + errcode_t retval = ENOMEM; + char *tdb_dir = NULL, *tdb_file = NULL; + char *dev_name, *tmp_name; + + /* (re)open a specific undo file */ + if (undo_file && undo_file[0] != 0) { + retval = set_undo_io_backing_manager(*io_ptr); + if (retval) + goto err; + *io_ptr = undo_io_manager; + retval = set_undo_io_backup_file(undo_file); + if (retval) + goto err; + printf("Overwriting existing filesystem; this can be undone " + "using the command:\n" + " e2undo %s %s\n\n", + undo_file, device_name); + return retval; + } + + /* + * Configuration via a conf file would be + * nice + */ + tdb_dir = ss_safe_getenv("E2FSPROGS_UNDO_DIR"); + if (!tdb_dir) + tdb_dir = "/var/lib/e2fsprogs"; + + if (!strcmp(tdb_dir, "none") || (tdb_dir[0] == 0) || + access(tdb_dir, W_OK)) + return 0; + + tmp_name = strdup(device_name); + if (!tmp_name) + goto errout; + dev_name = basename(tmp_name); + tdb_file = malloc(strlen(tdb_dir) + 9 + strlen(dev_name) + 7 + 1); + if (!tdb_file) { + free(tmp_name); + goto errout; + } + sprintf(tdb_file, "%s/debugfs-%s.e2undo", tdb_dir, dev_name); + free(tmp_name); + + if ((unlink(tdb_file) < 0) && (errno != ENOENT)) { + retval = errno; + com_err("debugfs", retval, + "while trying to delete %s", tdb_file); + goto errout; + } + + retval = set_undo_io_backing_manager(*io_ptr); + if (retval) + goto errout; + *io_ptr = undo_io_manager; + retval = set_undo_io_backup_file(tdb_file); + if (retval) + goto errout; + printf("Overwriting existing filesystem; this can be undone " + "using the command:\n" + " e2undo %s %s\n\n", tdb_file, device_name); + + free(tdb_file); + return 0; +errout: + free(tdb_file); +err: + com_err("debugfs", retval, "while trying to setup undo file\n"); + return retval; +} + +static void open_filesystem(char *device, int open_flags, blk64_t superblock, + blk64_t blocksize, int catastrophic, + char *data_filename, char *undo_file) +{ + int retval; + io_channel data_io = 0; + io_manager io_ptr = unix_io_manager; + + if (superblock != 0 && blocksize == 0) { + com_err(device, 0, "if you specify the superblock, you must also specify the block size"); + current_fs = NULL; + return; + } + + if (data_filename) { + if ((open_flags & EXT2_FLAG_IMAGE_FILE) == 0) { + com_err(device, 0, + "The -d option is only valid when reading an e2image file"); + current_fs = NULL; + return; + } + retval = unix_io_manager->open(data_filename, 0, &data_io); + if (retval) { + com_err(data_filename, 0, "while opening data source"); + current_fs = NULL; + return; + } + } + + if (catastrophic && (open_flags & EXT2_FLAG_RW)) { + com_err(device, 0, + "opening read-only because of catastrophic mode"); + open_flags &= ~EXT2_FLAG_RW; + } + if (catastrophic) + open_flags |= EXT2_FLAG_SKIP_MMP; + + if (undo_file) { + retval = debugfs_setup_tdb(device, undo_file, &io_ptr); + if (retval) + exit(1); + } + + retval = ext2fs_open(device, open_flags, superblock, blocksize, + io_ptr, ¤t_fs); + if (retval) { + com_err(device, retval, "while opening filesystem"); + if (retval == EXT2_ET_BAD_MAGIC) + check_plausibility(device, CHECK_FS_EXIST, NULL); + current_fs = NULL; + return; + } + current_fs->default_bitmap_type = EXT2FS_BMAP64_RBTREE; + + if (catastrophic) + com_err(device, 0, "catastrophic mode - not reading inode or group bitmaps"); + else { + retval = ext2fs_read_inode_bitmap(current_fs); + if (retval) { + com_err(device, retval, "while reading inode bitmap"); + goto errout; + } + retval = ext2fs_read_block_bitmap(current_fs); + if (retval) { + com_err(device, retval, "while reading block bitmap"); + goto errout; + } + } + + if (data_io) { + retval = ext2fs_set_data_io(current_fs, data_io); + if (retval) { + com_err(device, retval, + "while setting data source"); + goto errout; + } + } + + root = cwd = EXT2_ROOT_INO; + return; + +errout: + retval = ext2fs_close_free(¤t_fs); + if (retval) + com_err(device, retval, "while trying to close filesystem"); +} + +void do_open_filesys(int argc, char **argv) +{ + int c, err; + int catastrophic = 0; + blk64_t superblock = 0; + blk64_t blocksize = 0; + int open_flags = EXT2_FLAG_SOFTSUPP_FEATURES | EXT2_FLAG_64BITS; + char *data_filename = 0; + char *undo_file = NULL; + + reset_getopt(); + while ((c = getopt(argc, argv, "iwfecb:s:d:Dz:")) != EOF) { + switch (c) { + case 'i': + open_flags |= EXT2_FLAG_IMAGE_FILE; + break; + case 'w': +#ifdef READ_ONLY + goto print_usage; +#else + open_flags |= EXT2_FLAG_RW; +#endif /* READ_ONLY */ + break; + case 'f': + open_flags |= EXT2_FLAG_FORCE; + break; + case 'e': + open_flags |= EXT2_FLAG_EXCLUSIVE; + break; + case 'c': + catastrophic = 1; + break; + case 'd': + data_filename = optarg; + break; + case 'D': + open_flags |= EXT2_FLAG_DIRECT_IO; + break; + case 'b': + blocksize = parse_ulong(optarg, argv[0], + "block size", &err); + if (err) + return; + break; + case 's': + err = strtoblk(argv[0], optarg, + "superblock block number", &superblock); + if (err) + return; + break; + case 'z': + undo_file = optarg; + break; + default: + goto print_usage; + } + } + if (optind != argc-1) { + goto print_usage; + } + if (check_fs_not_open(argv[0])) + return; + open_filesystem(argv[optind], open_flags, + superblock, blocksize, catastrophic, + data_filename, undo_file); + return; + +print_usage: + fprintf(stderr, "%s: Usage: open [-s superblock] [-b blocksize] " + "[-d image_filename] [-c] [-i] [-f] [-e] [-D] " +#ifndef READ_ONLY + "[-w] " +#endif + "\n", argv[0]); +} + +void do_lcd(int argc, char **argv) +{ + if (argc != 2) { + com_err(argv[0], 0, "Usage: %s %s", argv[0], ""); + return; + } + + if (chdir(argv[1]) == -1) { + com_err(argv[0], errno, + "while trying to change native directory to %s", + argv[1]); + return; + } +} + +static void close_filesystem(NOARGS) +{ + int retval; + + if (current_fs->flags & EXT2_FLAG_IB_DIRTY) { + retval = ext2fs_write_inode_bitmap(current_fs); + if (retval) + com_err("ext2fs_write_inode_bitmap", retval, 0); + } + if (current_fs->flags & EXT2_FLAG_BB_DIRTY) { + retval = ext2fs_write_block_bitmap(current_fs); + if (retval) + com_err("ext2fs_write_block_bitmap", retval, 0); + } + if (current_qctx) + quota_release_context(¤t_qctx); + retval = ext2fs_close_free(¤t_fs); + if (retval) + com_err("ext2fs_close", retval, 0); + return; +} + +void do_close_filesys(int argc, char **argv) +{ + int c; + + if (check_fs_open(argv[0])) + return; + + reset_getopt(); + while ((c = getopt (argc, argv, "a")) != EOF) { + switch (c) { + case 'a': + current_fs->flags &= ~EXT2_FLAG_MASTER_SB_ONLY; + break; + default: + goto print_usage; + } + } + + if (argc > optind) { + print_usage: + com_err(0, 0, "Usage: close_filesys [-a]"); + return; + } + + close_filesystem(); +} + +#ifndef READ_ONLY +void do_init_filesys(int argc, char **argv) +{ + struct ext2_super_block param; + errcode_t retval; + int err; + blk64_t blocks; + + if (common_args_process(argc, argv, 3, 3, "initialize", + " ", CHECK_FS_NOTOPEN)) + return; + + memset(¶m, 0, sizeof(struct ext2_super_block)); + err = strtoblk(argv[0], argv[2], "blocks count", &blocks); + if (err) + return; + ext2fs_blocks_count_set(¶m, blocks); + retval = ext2fs_initialize(argv[1], 0, ¶m, + unix_io_manager, ¤t_fs); + if (retval) { + com_err(argv[1], retval, "while initializing filesystem"); + current_fs = NULL; + return; + } + root = cwd = EXT2_ROOT_INO; + return; +} + +static void print_features(struct ext2_super_block * s, FILE *f) +{ + int i, j, printed=0; + __u32 *mask = &s->s_feature_compat, m; + + fputs("Filesystem features:", f); + for (i=0; i <3; i++,mask++) { + for (j=0,m=1; j < 32; j++, m<<=1) { + if (*mask & m) { + fprintf(f, " %s", e2p_feature2string(i, m)); + printed++; + } + } + } + if (printed == 0) + fputs("(none)", f); + fputs("\n", f); +} +#endif /* READ_ONLY */ + +static void print_bg_opts(ext2_filsys fs, dgrp_t group, int mask, + const char *str, int *first, FILE *f) +{ + if (ext2fs_bg_flags_test(fs, group, mask)) { + if (*first) { + fputs(" [", f); + *first = 0; + } else + fputs(", ", f); + fputs(str, f); + } +} + +void do_show_super_stats(int argc, char *argv[]) +{ + const char *units ="block"; + dgrp_t i; + FILE *out; + int c, header_only = 0; + int numdirs = 0, first, gdt_csum; + + reset_getopt(); + while ((c = getopt (argc, argv, "h")) != EOF) { + switch (c) { + case 'h': + header_only++; + break; + default: + goto print_usage; + } + } + if (optind != argc) { + goto print_usage; + } + if (check_fs_open(argv[0])) + return; + out = open_pager(); + + if (ext2fs_has_feature_bigalloc(current_fs->super)) + units = "cluster"; + + list_super2(current_fs->super, out); + for (i=0; i < current_fs->group_desc_count; i++) + numdirs += ext2fs_bg_used_dirs_count(current_fs, i); + fprintf(out, "Directories: %d\n", numdirs); + + if (header_only) { + close_pager(out); + return; + } + + gdt_csum = ext2fs_has_group_desc_csum(current_fs); + for (i = 0; i < current_fs->group_desc_count; i++) { + fprintf(out, " Group %2d: block bitmap at %llu, " + "inode bitmap at %llu, " + "inode table at %llu\n" + " %u free %s%s, " + "%u free %s, " + "%u used %s%s", + i, ext2fs_block_bitmap_loc(current_fs, i), + ext2fs_inode_bitmap_loc(current_fs, i), + ext2fs_inode_table_loc(current_fs, i), + ext2fs_bg_free_blocks_count(current_fs, i), units, + ext2fs_bg_free_blocks_count(current_fs, i) != 1 ? + "s" : "", + ext2fs_bg_free_inodes_count(current_fs, i), + ext2fs_bg_free_inodes_count(current_fs, i) != 1 ? + "inodes" : "inode", + ext2fs_bg_used_dirs_count(current_fs, i), + ext2fs_bg_used_dirs_count(current_fs, i) != 1 ? "directories" + : "directory", gdt_csum ? ", " : "\n"); + if (gdt_csum) + fprintf(out, "%u unused %s\n", + ext2fs_bg_itable_unused(current_fs, i), + ext2fs_bg_itable_unused(current_fs, i) != 1 ? + "inodes" : "inode"); + first = 1; + print_bg_opts(current_fs, i, EXT2_BG_INODE_UNINIT, "Inode not init", + &first, out); + print_bg_opts(current_fs, i, EXT2_BG_BLOCK_UNINIT, "Block not init", + &first, out); + if (gdt_csum) { + fprintf(out, "%sChecksum 0x%04x", + first ? " [":", ", ext2fs_bg_checksum(current_fs, i)); + first = 0; + } + if (!first) + fputs("]\n", out); + } + close_pager(out); + return; +print_usage: + fprintf(stderr, "%s: Usage: show_super [-h]\n", argv[0]); +} + +#ifndef READ_ONLY +void do_dirty_filesys(int argc EXT2FS_ATTR((unused)), + char **argv EXT2FS_ATTR((unused))) +{ + if (check_fs_open(argv[0])) + return; + if (check_fs_read_write(argv[0])) + return; + + if (argv[1] && !strcmp(argv[1], "-clean")) + current_fs->super->s_state |= EXT2_VALID_FS; + else + current_fs->super->s_state &= ~EXT2_VALID_FS; + ext2fs_mark_super_dirty(current_fs); +} +#endif /* READ_ONLY */ + +struct list_blocks_struct { + FILE *f; + e2_blkcnt_t total; + blk64_t first_block, last_block; + e2_blkcnt_t first_bcnt, last_bcnt; + e2_blkcnt_t first; +}; + +static void finish_range(struct list_blocks_struct *lb) +{ + if (lb->first_block == 0) + return; + if (lb->first) + lb->first = 0; + else + fprintf(lb->f, ", "); + if (lb->first_block == lb->last_block) + fprintf(lb->f, "(%lld):%llu", + (long long)lb->first_bcnt, lb->first_block); + else + fprintf(lb->f, "(%lld-%lld):%llu-%llu", + (long long)lb->first_bcnt, (long long)lb->last_bcnt, + lb->first_block, lb->last_block); + lb->first_block = 0; +} + +static int list_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)), + blk64_t *blocknr, e2_blkcnt_t blockcnt, + blk64_t ref_block EXT2FS_ATTR((unused)), + int ref_offset EXT2FS_ATTR((unused)), + void *private) +{ + struct list_blocks_struct *lb = (struct list_blocks_struct *) private; + + lb->total++; + if (blockcnt >= 0) { + /* + * See if we can add on to the existing range (if it exists) + */ + if (lb->first_block && + (lb->last_block+1 == *blocknr) && + (lb->last_bcnt+1 == blockcnt)) { + lb->last_block = *blocknr; + lb->last_bcnt = blockcnt; + return 0; + } + /* + * Start a new range. + */ + finish_range(lb); + lb->first_block = lb->last_block = *blocknr; + lb->first_bcnt = lb->last_bcnt = blockcnt; + return 0; + } + /* + * Not a normal block. Always force a new range. + */ + finish_range(lb); + if (lb->first) + lb->first = 0; + else + fprintf(lb->f, ", "); + if (blockcnt == -1) + fprintf(lb->f, "(IND):%llu", (unsigned long long) *blocknr); + else if (blockcnt == -2) + fprintf(lb->f, "(DIND):%llu", (unsigned long long) *blocknr); + else if (blockcnt == -3) + fprintf(lb->f, "(TIND):%llu", (unsigned long long) *blocknr); + return 0; +} + +static void internal_dump_inode_extra(FILE *out, + const char *prefix EXT2FS_ATTR((unused)), + ext2_ino_t inode_num EXT2FS_ATTR((unused)), + struct ext2_inode_large *inode) +{ + fprintf(out, "Size of extra inode fields: %u\n", inode->i_extra_isize); + if (inode->i_extra_isize > EXT2_INODE_SIZE(current_fs->super) - + EXT2_GOOD_OLD_INODE_SIZE) { + fprintf(stderr, "invalid inode->i_extra_isize (%u)\n", + inode->i_extra_isize); + return; + } +} + +static void dump_blocks(FILE *f, const char *prefix, ext2_ino_t inode) +{ + struct list_blocks_struct lb; + + fprintf(f, "%sBLOCKS:\n%s", prefix, prefix); + lb.total = 0; + lb.first_block = 0; + lb.f = f; + lb.first = 1; + ext2fs_block_iterate3(current_fs, inode, BLOCK_FLAG_READ_ONLY, NULL, + list_blocks_proc, (void *)&lb); + finish_range(&lb); + if (lb.total) + fprintf(f, "\n%sTOTAL: %lld\n", prefix, (long long)lb.total); + fprintf(f,"\n"); +} + +static int int_log10(unsigned long long arg) +{ + int l = 0; + + arg = arg / 10; + while (arg) { + l++; + arg = arg / 10; + } + return l; +} + +#define DUMP_LEAF_EXTENTS 0x01 +#define DUMP_NODE_EXTENTS 0x02 +#define DUMP_EXTENT_TABLE 0x04 + +static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino, + int flags, int logical_width, int physical_width) +{ + ext2_extent_handle_t handle; + struct ext2fs_extent extent; + struct ext2_extent_info info; + int op = EXT2_EXTENT_ROOT; + unsigned int printed = 0; + errcode_t errcode; + + errcode = ext2fs_extent_open(current_fs, ino, &handle); + if (errcode) + return; + + if (flags & DUMP_EXTENT_TABLE) + fprintf(f, "Level Entries %*s %*s Length Flags\n", + (logical_width*2)+3, "Logical", + (physical_width*2)+3, "Physical"); + else + fprintf(f, "%sEXTENTS:\n%s", prefix, prefix); + + while (1) { + errcode = ext2fs_extent_get(handle, op, &extent); + + if (errcode) + break; + + op = EXT2_EXTENT_NEXT; + + if (extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT) + continue; + + if (extent.e_flags & EXT2_EXTENT_FLAGS_LEAF) { + if ((flags & DUMP_LEAF_EXTENTS) == 0) + continue; + } else { + if ((flags & DUMP_NODE_EXTENTS) == 0) + continue; + } + + errcode = ext2fs_extent_get_info(handle, &info); + if (errcode) + continue; + + if (!(extent.e_flags & EXT2_EXTENT_FLAGS_LEAF)) { + if (extent.e_flags & EXT2_EXTENT_FLAGS_SECOND_VISIT) + continue; + + if (flags & DUMP_EXTENT_TABLE) { + fprintf(f, "%2d/%2d %3d/%3d %*llu - %*llu " + "%*llu%*s %6u\n", + info.curr_level, info.max_depth, + info.curr_entry, info.num_entries, + logical_width, + extent.e_lblk, + logical_width, + extent.e_lblk + (extent.e_len - 1), + physical_width, + extent.e_pblk, + physical_width+3, "", extent.e_len); + continue; + } + + fprintf(f, "%s(ETB%d):%lld", + printed ? ", " : "", info.curr_level, + extent.e_pblk); + printed = 1; + continue; + } + + if (flags & DUMP_EXTENT_TABLE) { + fprintf(f, "%2d/%2d %3d/%3d %*llu - %*llu " + "%*llu - %*llu %6u %s\n", + info.curr_level, info.max_depth, + info.curr_entry, info.num_entries, + logical_width, + extent.e_lblk, + logical_width, + extent.e_lblk + (extent.e_len - 1), + physical_width, + extent.e_pblk, + physical_width, + extent.e_pblk + (extent.e_len - 1), + extent.e_len, + extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ? + "Uninit" : ""); + continue; + } + + if (extent.e_len == 0) + continue; + else if (extent.e_len == 1) + fprintf(f, + "%s(%lld%s):%lld", + printed ? ", " : "", + extent.e_lblk, + extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ? + "[u]" : "", + extent.e_pblk); + else + fprintf(f, + "%s(%lld-%lld%s):%lld-%lld", + printed ? ", " : "", + extent.e_lblk, + extent.e_lblk + (extent.e_len - 1), + extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ? + "[u]" : "", + extent.e_pblk, + extent.e_pblk + (extent.e_len - 1)); + printed = 1; + } + if (printed) + fprintf(f, "\n"); + ext2fs_extent_free(handle); +} + +static void dump_inline_data(FILE *out, const char *prefix, ext2_ino_t inode_num) +{ + errcode_t retval; + size_t size; + + retval = ext2fs_inline_data_size(current_fs, inode_num, &size); + if (!retval) + fprintf(out, "%sSize of inline data: %zu\n", prefix, size); +} + +static void dump_fast_link(FILE *out, ext2_ino_t inode_num, + struct ext2_inode *inode, const char *prefix) +{ + errcode_t retval = 0; + char *buf; + size_t size; + + if (inode->i_flags & EXT4_INLINE_DATA_FL) { + retval = ext2fs_inline_data_size(current_fs, inode_num, &size); + if (retval) + goto out; + + retval = ext2fs_get_memzero(size + 1, &buf); + if (retval) + goto out; + + retval = ext2fs_inline_data_get(current_fs, inode_num, + inode, buf, &size); + if (retval) + goto out; + fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix, + (int)size, buf); + + retval = ext2fs_free_mem(&buf); + if (retval) + goto out; + } else { + size_t sz = EXT2_I_SIZE(inode); + + if (sz > sizeof(inode->i_block)) + sz = sizeof(inode->i_block); + fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix, (int) sz, + (char *)inode->i_block); + } +out: + if (retval) + com_err(__func__, retval, "while dumping link destination"); +} + +void internal_dump_inode(FILE *out, const char *prefix, + ext2_ino_t inode_num, struct ext2_inode *inode, + int do_dump_blocks) +{ + const char *i_type; + char frag, fsize; + int os = current_fs->super->s_creator_os; + struct ext2_inode_large *large_inode; + int is_large_inode = 0; + + if (EXT2_INODE_SIZE(current_fs->super) > EXT2_GOOD_OLD_INODE_SIZE) + is_large_inode = 1; + large_inode = (struct ext2_inode_large *) inode; + + if (LINUX_S_ISDIR(inode->i_mode)) i_type = "directory"; + else if (LINUX_S_ISREG(inode->i_mode)) i_type = "regular"; + else if (LINUX_S_ISLNK(inode->i_mode)) i_type = "symlink"; + else if (LINUX_S_ISBLK(inode->i_mode)) i_type = "block special"; + else if (LINUX_S_ISCHR(inode->i_mode)) i_type = "character special"; + else if (LINUX_S_ISFIFO(inode->i_mode)) i_type = "FIFO"; + else if (LINUX_S_ISSOCK(inode->i_mode)) i_type = "socket"; + else i_type = "bad type"; + fprintf(out, "%sInode: %u Type: %s ", prefix, inode_num, i_type); + fprintf(out, "%sMode: %04o Flags: 0x%x\n", + prefix, inode->i_mode & 0777, inode->i_flags); + if (is_large_inode && large_inode->i_extra_isize >= 24) { + fprintf(out, "%sGeneration: %u Version: 0x%08x:%08x\n", + prefix, inode->i_generation, large_inode->i_version_hi, + inode->osd1.linux1.l_i_version); + } else { + fprintf(out, "%sGeneration: %u Version: 0x%08x\n", prefix, + inode->i_generation, inode->osd1.linux1.l_i_version); + } + fprintf(out, "%sUser: %5d Group: %5d", + prefix, inode_uid(*inode), inode_gid(*inode)); + if (is_large_inode && large_inode->i_extra_isize >= 32) + fprintf(out, " Project: %5d", large_inode->i_projid); + fputs(" Size: ", out); + if (LINUX_S_ISREG(inode->i_mode)) + fprintf(out, "%llu\n", EXT2_I_SIZE(inode)); + else + fprintf(out, "%d\n", inode->i_size); + if (os == EXT2_OS_HURD) + fprintf(out, + "%sFile ACL: %d Directory ACL: %d Translator: %d\n", + prefix, + inode->i_file_acl, LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0, + inode->osd1.hurd1.h_i_translator); + else + fprintf(out, "%sFile ACL: %llu Directory ACL: %d\n", + prefix, + inode->i_file_acl | ((long long) + (inode->osd2.linux2.l_i_file_acl_high) << 32), + LINUX_S_ISDIR(inode->i_mode) ? inode->i_dir_acl : 0); + if (os != EXT2_OS_HURD) + fprintf(out, "%sLinks: %d Blockcount: %llu\n", + prefix, inode->i_links_count, + (((unsigned long long) + inode->osd2.linux2.l_i_blocks_hi << 32)) + + inode->i_blocks); + else + fprintf(out, "%sLinks: %d Blockcount: %u\n", + prefix, inode->i_links_count, inode->i_blocks); + switch (os) { + case EXT2_OS_HURD: + frag = inode->osd2.hurd2.h_i_frag; + fsize = inode->osd2.hurd2.h_i_fsize; + break; + default: + frag = fsize = 0; + } + fprintf(out, "%sFragment: Address: %d Number: %d Size: %d\n", + prefix, inode->i_faddr, frag, fsize); + if (is_large_inode && large_inode->i_extra_isize >= 24) { + fprintf(out, "%s ctime: 0x%08x:%08x -- %s", prefix, + inode->i_ctime, large_inode->i_ctime_extra, + inode_time_to_string(inode->i_ctime, + large_inode->i_ctime_extra)); + fprintf(out, "%s atime: 0x%08x:%08x -- %s", prefix, + inode->i_atime, large_inode->i_atime_extra, + inode_time_to_string(inode->i_atime, + large_inode->i_atime_extra)); + fprintf(out, "%s mtime: 0x%08x:%08x -- %s", prefix, + inode->i_mtime, large_inode->i_mtime_extra, + inode_time_to_string(inode->i_mtime, + large_inode->i_mtime_extra)); + fprintf(out, "%scrtime: 0x%08x:%08x -- %s", prefix, + large_inode->i_crtime, large_inode->i_crtime_extra, + inode_time_to_string(large_inode->i_crtime, + large_inode->i_crtime_extra)); + if (inode->i_dtime) + fprintf(out, "%s dtime: 0x%08x:(%08x) -- %s", prefix, + large_inode->i_dtime, large_inode->i_ctime_extra, + inode_time_to_string(inode->i_dtime, + large_inode->i_ctime_extra)); + } else { + fprintf(out, "%sctime: 0x%08x -- %s", prefix, inode->i_ctime, + time_to_string((__s32) inode->i_ctime)); + fprintf(out, "%satime: 0x%08x -- %s", prefix, inode->i_atime, + time_to_string((__s32) inode->i_atime)); + fprintf(out, "%smtime: 0x%08x -- %s", prefix, inode->i_mtime, + time_to_string((__s32) inode->i_mtime)); + if (inode->i_dtime) + fprintf(out, "%sdtime: 0x%08x -- %s", prefix, + inode->i_dtime, + time_to_string((__s32) inode->i_dtime)); + } + if (EXT2_INODE_SIZE(current_fs->super) > EXT2_GOOD_OLD_INODE_SIZE) + internal_dump_inode_extra(out, prefix, inode_num, + (struct ext2_inode_large *) inode); + dump_inode_attributes(out, inode_num); + if (ext2fs_has_feature_metadata_csum(current_fs->super)) { + __u32 crc = inode->i_checksum_lo; + if (is_large_inode && + large_inode->i_extra_isize >= + (offsetof(struct ext2_inode_large, + i_checksum_hi) - + EXT2_GOOD_OLD_INODE_SIZE)) + crc |= ((__u32)large_inode->i_checksum_hi) << 16; + fprintf(out, "Inode checksum: 0x%08x\n", crc); + } + + if (LINUX_S_ISLNK(inode->i_mode) && + ext2fs_inode_data_blocks(current_fs, inode) == 0) + dump_fast_link(out, inode_num, inode, prefix); + else if (LINUX_S_ISBLK(inode->i_mode) || LINUX_S_ISCHR(inode->i_mode)) { + int major, minor; + const char *devnote; + + if (inode->i_block[0]) { + major = (inode->i_block[0] >> 8) & 255; + minor = inode->i_block[0] & 255; + devnote = ""; + } else { + major = (inode->i_block[1] & 0xfff00) >> 8; + minor = ((inode->i_block[1] & 0xff) | + ((inode->i_block[1] >> 12) & 0xfff00)); + devnote = "(New-style) "; + } + fprintf(out, "%sDevice major/minor number: %02d:%02d (hex %02x:%02x)\n", + devnote, major, minor, major, minor); + } else if (do_dump_blocks) { + if (inode->i_flags & EXT4_EXTENTS_FL) + dump_extents(out, prefix, inode_num, + DUMP_LEAF_EXTENTS|DUMP_NODE_EXTENTS, 0, 0); + else if (inode->i_flags & EXT4_INLINE_DATA_FL) + dump_inline_data(out, prefix, inode_num); + else + dump_blocks(out, prefix, inode_num); + } +} + +static void dump_inode(ext2_ino_t inode_num, struct ext2_inode *inode) +{ + FILE *out; + + out = open_pager(); + internal_dump_inode(out, "", inode_num, inode, 1); + close_pager(out); +} + +void do_stat(int argc, char *argv[]) +{ + ext2_ino_t inode; + struct ext2_inode * inode_buf; + + if (check_fs_open(argv[0])) + return; + + inode_buf = (struct ext2_inode *) + malloc(EXT2_INODE_SIZE(current_fs->super)); + if (!inode_buf) { + fprintf(stderr, "do_stat: can't allocate buffer\n"); + return; + } + + if (common_inode_args_process(argc, argv, &inode, 0)) { + free(inode_buf); + return; + } + + if (debugfs_read_inode_full(inode, inode_buf, argv[0], + EXT2_INODE_SIZE(current_fs->super))) { + free(inode_buf); + return; + } + + dump_inode(inode, inode_buf); + free(inode_buf); + return; +} + +void do_dump_extents(int argc, char **argv) +{ + struct ext2_inode inode; + ext2_ino_t ino; + FILE *out; + int c, flags = 0; + int logical_width; + int physical_width; + + reset_getopt(); + while ((c = getopt(argc, argv, "nl")) != EOF) { + switch (c) { + case 'n': + flags |= DUMP_NODE_EXTENTS; + break; + case 'l': + flags |= DUMP_LEAF_EXTENTS; + break; + } + } + + if (argc != optind + 1) { + com_err(0, 0, "Usage: dump_extents [-n] [-l] file"); + return; + } + + if (flags == 0) + flags = DUMP_NODE_EXTENTS | DUMP_LEAF_EXTENTS; + flags |= DUMP_EXTENT_TABLE; + + if (check_fs_open(argv[0])) + return; + + ino = string_to_inode(argv[optind]); + if (ino == 0) + return; + + if (debugfs_read_inode(ino, &inode, argv[0])) + return; + + if ((inode.i_flags & EXT4_EXTENTS_FL) == 0) { + fprintf(stderr, "%s: does not uses extent block maps\n", + argv[optind]); + return; + } + + logical_width = int_log10((EXT2_I_SIZE(&inode)+current_fs->blocksize-1)/ + current_fs->blocksize) + 1; + if (logical_width < 5) + logical_width = 5; + physical_width = int_log10(ext2fs_blocks_count(current_fs->super)) + 1; + if (physical_width < 5) + physical_width = 5; + + out = open_pager(); + dump_extents(out, "", ino, flags, logical_width, physical_width); + close_pager(out); + return; +} + +static int print_blocks_proc(ext2_filsys fs EXT2FS_ATTR((unused)), + blk64_t *blocknr, + e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), + blk64_t ref_block EXT2FS_ATTR((unused)), + int ref_offset EXT2FS_ATTR((unused)), + void *private EXT2FS_ATTR((unused))) +{ + printf("%llu ", *blocknr); + return 0; +} + +void do_blocks(int argc, char *argv[]) +{ + ext2_ino_t inode; + + if (check_fs_open(argv[0])) + return; + + if (common_inode_args_process(argc, argv, &inode, 0)) { + return; + } + + ext2fs_block_iterate3(current_fs, inode, BLOCK_FLAG_READ_ONLY, NULL, + print_blocks_proc, NULL); + fputc('\n', stdout); + return; +} + +void do_chroot(int argc, char *argv[]) +{ + ext2_ino_t inode; + int retval; + + if (common_inode_args_process(argc, argv, &inode, 0)) + return; + + retval = ext2fs_check_directory(current_fs, inode); + if (retval) { + com_err(argv[1], retval, 0); + return; + } + root = inode; +} + +#ifndef READ_ONLY +void do_clri(int argc, char *argv[]) +{ + ext2_ino_t inode; + struct ext2_inode inode_buf; + + if (common_inode_args_process(argc, argv, &inode, CHECK_FS_RW)) + return; + + if (debugfs_read_inode(inode, &inode_buf, argv[0])) + return; + memset(&inode_buf, 0, sizeof(inode_buf)); + if (debugfs_write_inode(inode, &inode_buf, argv[0])) + return; +} + +void do_freei(int argc, char *argv[]) +{ + unsigned int len = 1; + int err = 0; + ext2_ino_t inode; + + if (common_args_process(argc, argv, 2, 3, argv[0], " [num]", + CHECK_FS_RW | CHECK_FS_BITMAPS)) + return; + if (check_fs_read_write(argv[0])) + return; + + inode = string_to_inode(argv[1]); + if (!inode) + return; + + if (argc == 3) { + len = parse_ulong(argv[2], argv[0], "length", &err); + if (err) + return; + } + + if (len == 1 && + !ext2fs_test_inode_bitmap2(current_fs->inode_map,inode)) + com_err(argv[0], 0, "Warning: inode already clear"); + while (len-- > 0) + ext2fs_unmark_inode_bitmap2(current_fs->inode_map, inode++); + ext2fs_mark_ib_dirty(current_fs); +} + +void do_seti(int argc, char *argv[]) +{ + unsigned int len = 1; + int err = 0; + ext2_ino_t inode; + + if (common_args_process(argc, argv, 2, 3, argv[0], " [num]", + CHECK_FS_RW | CHECK_FS_BITMAPS)) + return; + if (check_fs_read_write(argv[0])) + return; + + inode = string_to_inode(argv[1]); + if (!inode) + return; + + if (argc == 3) { + len = parse_ulong(argv[2], argv[0], "length", &err); + if (err) + return; + } + + if ((len == 1) && + ext2fs_test_inode_bitmap2(current_fs->inode_map,inode)) + com_err(argv[0], 0, "Warning: inode already set"); + while (len-- > 0) + ext2fs_mark_inode_bitmap2(current_fs->inode_map, inode++); + ext2fs_mark_ib_dirty(current_fs); +} +#endif /* READ_ONLY */ + +void do_testi(int argc, char *argv[]) +{ + ext2_ino_t inode; + + if (common_inode_args_process(argc, argv, &inode, CHECK_FS_BITMAPS)) + return; + + if (ext2fs_test_inode_bitmap2(current_fs->inode_map,inode)) + printf("Inode %u is marked in use\n", inode); + else + printf("Inode %u is not in use\n", inode); +} + +#ifndef READ_ONLY +void do_freeb(int argc, char *argv[]) +{ + blk64_t block; + blk64_t count = 1; + + if (common_block_args_process(argc, argv, &block, &count)) + return; + if (check_fs_read_write(argv[0])) + return; + while (count-- > 0) { + if (!ext2fs_test_block_bitmap2(current_fs->block_map,block)) + com_err(argv[0], 0, "Warning: block %llu already clear", + block); + ext2fs_unmark_block_bitmap2(current_fs->block_map,block); + block++; + } + ext2fs_mark_bb_dirty(current_fs); +} + +void do_setb(int argc, char *argv[]) +{ + blk64_t block; + blk64_t count = 1; + + if (common_block_args_process(argc, argv, &block, &count)) + return; + if (check_fs_read_write(argv[0])) + return; + while (count-- > 0) { + if (ext2fs_test_block_bitmap2(current_fs->block_map,block)) + com_err(argv[0], 0, "Warning: block %llu already set", + block); + ext2fs_mark_block_bitmap2(current_fs->block_map,block); + block++; + } + ext2fs_mark_bb_dirty(current_fs); +} +#endif /* READ_ONLY */ + +void do_testb(int argc, char *argv[]) +{ + blk64_t block; + blk64_t count = 1; + + if (common_block_args_process(argc, argv, &block, &count)) + return; + while (count-- > 0) { + if (ext2fs_test_block_bitmap2(current_fs->block_map,block)) + printf("Block %llu marked in use\n", block); + else + printf("Block %llu not in use\n", block); + block++; + } +} + +#ifndef READ_ONLY +static void modify_u8(char *com, const char *prompt, + const char *format, __u8 *val) +{ + char buf[200]; + unsigned long v; + char *tmp; + + sprintf(buf, format, *val); + printf("%30s [%s] ", prompt, buf); + if (!fgets(buf, sizeof(buf), stdin)) + return; + if (buf[strlen (buf) - 1] == '\n') + buf[strlen (buf) - 1] = '\0'; + if (!buf[0]) + return; + v = strtoul(buf, &tmp, 0); + if (*tmp) + com_err(com, 0, "Bad value - %s", buf); + else + *val = v; +} + +static void modify_u16(char *com, const char *prompt, + const char *format, __u16 *val) +{ + char buf[200]; + unsigned long v; + char *tmp; + + sprintf(buf, format, *val); + printf("%30s [%s] ", prompt, buf); + if (!fgets(buf, sizeof(buf), stdin)) + return; + if (buf[strlen (buf) - 1] == '\n') + buf[strlen (buf) - 1] = '\0'; + if (!buf[0]) + return; + v = strtoul(buf, &tmp, 0); + if (*tmp) + com_err(com, 0, "Bad value - %s", buf); + else + *val = v; +} + +static void modify_u32(char *com, const char *prompt, + const char *format, __u32 *val) +{ + char buf[200]; + unsigned long v; + char *tmp; + + sprintf(buf, format, *val); + printf("%30s [%s] ", prompt, buf); + if (!fgets(buf, sizeof(buf), stdin)) + return; + if (buf[strlen (buf) - 1] == '\n') + buf[strlen (buf) - 1] = '\0'; + if (!buf[0]) + return; + v = strtoul(buf, &tmp, 0); + if (*tmp) + com_err(com, 0, "Bad value - %s", buf); + else + *val = v; +} + + +void do_modify_inode(int argc, char *argv[]) +{ + struct ext2_inode inode; + ext2_ino_t inode_num; + int i; + unsigned char *frag, *fsize; + char buf[80]; + int os; + const char *hex_format = "0x%x"; + const char *octal_format = "0%o"; + const char *decimal_format = "%d"; + const char *unsignedlong_format = "%lu"; + + if (common_inode_args_process(argc, argv, &inode_num, CHECK_FS_RW)) + return; + + os = current_fs->super->s_creator_os; + + if (debugfs_read_inode(inode_num, &inode, argv[1])) + return; + + modify_u16(argv[0], "Mode", octal_format, &inode.i_mode); + modify_u16(argv[0], "User ID", decimal_format, &inode.i_uid); + modify_u16(argv[0], "Group ID", decimal_format, &inode.i_gid); + modify_u32(argv[0], "Size", unsignedlong_format, &inode.i_size); + modify_u32(argv[0], "Creation time", decimal_format, &inode.i_ctime); + modify_u32(argv[0], "Modification time", decimal_format, &inode.i_mtime); + modify_u32(argv[0], "Access time", decimal_format, &inode.i_atime); + modify_u32(argv[0], "Deletion time", decimal_format, &inode.i_dtime); + modify_u16(argv[0], "Link count", decimal_format, &inode.i_links_count); + if (os == EXT2_OS_LINUX) + modify_u16(argv[0], "Block count high", unsignedlong_format, + &inode.osd2.linux2.l_i_blocks_hi); + modify_u32(argv[0], "Block count", unsignedlong_format, &inode.i_blocks); + modify_u32(argv[0], "File flags", hex_format, &inode.i_flags); + modify_u32(argv[0], "Generation", hex_format, &inode.i_generation); +#if 0 + modify_u32(argv[0], "Reserved1", decimal_format, &inode.i_reserved1); +#endif + modify_u32(argv[0], "File acl", decimal_format, &inode.i_file_acl); + if (LINUX_S_ISDIR(inode.i_mode)) + modify_u32(argv[0], "Directory acl", decimal_format, &inode.i_dir_acl); + else + modify_u32(argv[0], "High 32bits of size", decimal_format, &inode.i_size_high); + + if (os == EXT2_OS_HURD) + modify_u32(argv[0], "Translator Block", + decimal_format, &inode.osd1.hurd1.h_i_translator); + + modify_u32(argv[0], "Fragment address", decimal_format, &inode.i_faddr); + switch (os) { + case EXT2_OS_HURD: + frag = &inode.osd2.hurd2.h_i_frag; + fsize = &inode.osd2.hurd2.h_i_fsize; + break; + default: + frag = fsize = 0; + } + if (frag) + modify_u8(argv[0], "Fragment number", decimal_format, frag); + if (fsize) + modify_u8(argv[0], "Fragment size", decimal_format, fsize); + + for (i=0; i < EXT2_NDIR_BLOCKS; i++) { + sprintf(buf, "Direct Block #%d", i); + modify_u32(argv[0], buf, decimal_format, &inode.i_block[i]); + } + modify_u32(argv[0], "Indirect Block", decimal_format, + &inode.i_block[EXT2_IND_BLOCK]); + modify_u32(argv[0], "Double Indirect Block", decimal_format, + &inode.i_block[EXT2_DIND_BLOCK]); + modify_u32(argv[0], "Triple Indirect Block", decimal_format, + &inode.i_block[EXT2_TIND_BLOCK]); + if (debugfs_write_inode(inode_num, &inode, argv[1])) + return; +} +#endif /* READ_ONLY */ + +void do_change_working_dir(int argc, char *argv[]) +{ + ext2_ino_t inode; + int retval; + + if (common_inode_args_process(argc, argv, &inode, 0)) + return; + + retval = ext2fs_check_directory(current_fs, inode); + if (retval) { + com_err(argv[1], retval, 0); + return; + } + cwd = inode; + return; +} + +void do_print_working_directory(int argc, char *argv[]) +{ + int retval; + char *pathname = NULL; + + if (common_args_process(argc, argv, 1, 1, + "print_working_directory", "", 0)) + return; + + retval = ext2fs_get_pathname(current_fs, cwd, 0, &pathname); + if (retval) { + com_err(argv[0], retval, + "while trying to get pathname of cwd"); + } + printf("[pwd] INODE: %6u PATH: %s\n", + cwd, pathname ? pathname : "NULL"); + if (pathname) { + free(pathname); + pathname = NULL; + } + retval = ext2fs_get_pathname(current_fs, root, 0, &pathname); + if (retval) { + com_err(argv[0], retval, + "while trying to get pathname of root"); + } + printf("[root] INODE: %6u PATH: %s\n", + root, pathname ? pathname : "NULL"); + if (pathname) { + free(pathname); + pathname = NULL; + } + return; +} + +#ifndef READ_ONLY +static void make_link(char *sourcename, char *destname) +{ + ext2_ino_t ino; + struct ext2_inode inode; + int retval; + ext2_ino_t dir; + char *dest, *cp, *base_name; + + /* + * Get the source inode + */ + ino = string_to_inode(sourcename); + if (!ino) + return; + base_name = strrchr(sourcename, '/'); + if (base_name) + base_name++; + else + base_name = sourcename; + /* + * Figure out the destination. First see if it exists and is + * a directory. + */ + if (! (retval=ext2fs_namei(current_fs, root, cwd, destname, &dir))) + dest = base_name; + else { + /* + * OK, it doesn't exist. See if it is + * '/basename' or 'basename' + */ + cp = strrchr(destname, '/'); + if (cp) { + *cp = 0; + dir = string_to_inode(destname); + if (!dir) + return; + dest = cp+1; + } else { + dir = cwd; + dest = destname; + } + } + + if (debugfs_read_inode(ino, &inode, sourcename)) + return; + + retval = ext2fs_link(current_fs, dir, dest, ino, + ext2_file_type(inode.i_mode)); + if (retval) + com_err("make_link", retval, 0); + return; +} + + +void do_link(int argc, char *argv[]) +{ + if (common_args_process(argc, argv, 3, 3, "link", + " ", CHECK_FS_RW)) + return; + + make_link(argv[1], argv[2]); +} + +static int mark_blocks_proc(ext2_filsys fs, blk64_t *blocknr, + e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), + blk64_t ref_block EXT2FS_ATTR((unused)), + int ref_offset EXT2FS_ATTR((unused)), + void *private EXT2FS_ATTR((unused))) +{ + blk64_t block; + + block = *blocknr; + ext2fs_block_alloc_stats2(fs, block, +1); + return 0; +} + +void do_undel(int argc, char *argv[]) +{ + ext2_ino_t ino; + struct ext2_inode inode; + + if (common_args_process(argc, argv, 2, 3, "undelete", + " [dest_name]", + CHECK_FS_RW | CHECK_FS_BITMAPS)) + return; + + ino = string_to_inode(argv[1]); + if (!ino) + return; + + if (debugfs_read_inode(ino, &inode, argv[1])) + return; + + if (ext2fs_test_inode_bitmap2(current_fs->inode_map, ino)) { + com_err(argv[1], 0, "Inode is not marked as deleted"); + return; + } + + /* + * XXX this function doesn't handle changing the links count on the + * parent directory when undeleting a directory. + */ + inode.i_links_count = LINUX_S_ISDIR(inode.i_mode) ? 2 : 1; + inode.i_dtime = 0; + + if (debugfs_write_inode(ino, &inode, argv[0])) + return; + + ext2fs_block_iterate3(current_fs, ino, BLOCK_FLAG_READ_ONLY, NULL, + mark_blocks_proc, NULL); + + ext2fs_inode_alloc_stats2(current_fs, ino, +1, 0); + + if (argc > 2) + make_link(argv[1], argv[2]); +} + +static void unlink_file_by_name(char *filename) +{ + int retval; + ext2_ino_t dir; + char *base_name; + + base_name = strrchr(filename, '/'); + if (base_name) { + *base_name++ = '\0'; + dir = string_to_inode(filename); + if (!dir) + return; + } else { + dir = cwd; + base_name = filename; + } + retval = ext2fs_unlink(current_fs, dir, base_name, 0, 0); + if (retval) + com_err("unlink_file_by_name", retval, 0); + return; +} + +void do_unlink(int argc, char *argv[]) +{ + if (common_args_process(argc, argv, 2, 2, "link", + "", CHECK_FS_RW)) + return; + + unlink_file_by_name(argv[1]); +} + +void do_copy_inode(int argc, char *argv[]) +{ + ext2_ino_t src_ino, dest_ino; + struct ext2_inode inode; + unsigned char buf[4096]; + int retval; + + if (common_args_process(argc, argv, 3, 3, "copy_inode", + " ", CHECK_FS_RW)) + return; + + src_ino = string_to_inode(argv[1]); + if (!src_ino) + return; + + dest_ino = string_to_inode(argv[2]); + if (!dest_ino) + return; + + if (debugfs_read_inode_full(src_ino, (struct ext2_inode *) buf, + argv[0], sizeof(buf))) + return; + + if (debugfs_write_inode_full(dest_ino, (struct ext2_inode *) buf, + argv[0], sizeof(buf))) + return; +} + +#endif /* READ_ONLY */ + +void do_find_free_block(int argc, char *argv[]) +{ + blk64_t free_blk, goal, first_free = 0; + int count; + errcode_t retval; + char *tmp; + + if ((argc > 3) || (argc==2 && *argv[1] == '?')) { + com_err(argv[0], 0, "Usage: find_free_block [count [goal]]"); + return; + } + if (check_fs_open(argv[0])) + return; + + if (argc > 1) { + count = strtol(argv[1],&tmp,0); + if (*tmp) { + com_err(argv[0], 0, "Bad count - %s", argv[1]); + return; + } + } else + count = 1; + + if (argc > 2) { + goal = strtol(argv[2], &tmp, 0); + if (*tmp) { + com_err(argv[0], 0, "Bad goal - %s", argv[1]); + return; + } + } + else + goal = current_fs->super->s_first_data_block; + + printf("Free blocks found: "); + free_blk = goal - 1; + while (count-- > 0) { + retval = ext2fs_new_block2(current_fs, free_blk + 1, 0, + &free_blk); + if (first_free) { + if (first_free == free_blk) + break; + } else + first_free = free_blk; + if (retval) { + com_err("ext2fs_new_block", retval, 0); + return; + } else + printf("%llu ", free_blk); + } + printf("\n"); +} + +void do_find_free_inode(int argc, char *argv[]) +{ + ext2_ino_t free_inode, dir; + int mode; + int retval; + char *tmp; + + if (argc > 3 || (argc>1 && *argv[1] == '?')) { + com_err(argv[0], 0, "Usage: find_free_inode [dir] [mode]"); + return; + } + if (check_fs_open(argv[0])) + return; + + if (argc > 1) { + dir = strtol(argv[1], &tmp, 0); + if (*tmp) { + com_err(argv[0], 0, "Bad dir - %s", argv[1]); + return; + } + } + else + dir = root; + if (argc > 2) { + mode = strtol(argv[2], &tmp, 0); + if (*tmp) { + com_err(argv[0], 0, "Bad mode - %s", argv[2]); + return; + } + } else + mode = 010755; + + retval = ext2fs_new_inode(current_fs, dir, mode, 0, &free_inode); + if (retval) + com_err("ext2fs_new_inode", retval, 0); + else + printf("Free inode found: %u\n", free_inode); +} + +#ifndef READ_ONLY +void do_write(int argc, char *argv[]) +{ + errcode_t retval; + + if (common_args_process(argc, argv, 3, 3, "write", + " ", CHECK_FS_RW)) + return; + + retval = do_write_internal(current_fs, cwd, argv[1], argv[2], root); + if (retval) + com_err(argv[0], retval, 0); +} + +void do_mknod(int argc, char *argv[]) +{ + unsigned long major, minor; + errcode_t retval; + int nr; + struct stat st; + + if (check_fs_open(argv[0])) + return; + if (argc < 3 || argv[2][1]) { + usage: + com_err(argv[0], 0, "Usage: mknod [p| [c|b] ]"); + return; + } + + minor = major = 0; + switch (argv[2][0]) { + case 'p': + st.st_mode = S_IFIFO; + nr = 3; + break; + case 'c': + st.st_mode = S_IFCHR; + nr = 5; + break; + case 'b': + st.st_mode = S_IFBLK; + nr = 5; + break; + default: + nr = 0; + } + + if (nr == 5) { + major = strtoul(argv[3], argv+3, 0); + minor = strtoul(argv[4], argv+4, 0); + if (major > 65535 || minor > 65535 || argv[3][0] || argv[4][0]) + nr = 0; + } + + if (argc != nr) + goto usage; + + st.st_rdev = makedev(major, minor); + retval = do_mknod_internal(current_fs, cwd, argv[1], &st); + if (retval) + com_err(argv[0], retval, 0); +} + +void do_mkdir(int argc, char *argv[]) +{ + errcode_t retval; + + if (common_args_process(argc, argv, 2, 2, "mkdir", + "", CHECK_FS_RW)) + return; + + retval = do_mkdir_internal(current_fs, cwd, argv[1], root); + if (retval) + com_err(argv[0], retval, 0); + +} + +static int release_blocks_proc(ext2_filsys fs, blk64_t *blocknr, + e2_blkcnt_t blockcnt EXT2FS_ATTR((unused)), + blk64_t ref_block EXT2FS_ATTR((unused)), + int ref_offset EXT2FS_ATTR((unused)), + void *private EXT2FS_ATTR((unused))) +{ + blk64_t block; + + block = *blocknr; + ext2fs_block_alloc_stats2(fs, block, -1); + return 0; +} + +static void kill_file_by_inode(ext2_ino_t inode) +{ + struct ext2_inode inode_buf; + + if (debugfs_read_inode(inode, &inode_buf, 0)) + return; + inode_buf.i_dtime = current_fs->now ? current_fs->now : time(0); + if (debugfs_write_inode(inode, &inode_buf, 0)) + return; + if (ext2fs_inode_has_valid_blocks2(current_fs, &inode_buf)) { + ext2fs_block_iterate3(current_fs, inode, BLOCK_FLAG_READ_ONLY, + NULL, release_blocks_proc, NULL); + } + printf("\n"); + ext2fs_inode_alloc_stats2(current_fs, inode, -1, + LINUX_S_ISDIR(inode_buf.i_mode)); +} + + +void do_kill_file(int argc, char *argv[]) +{ + ext2_ino_t inode_num; + + if (common_inode_args_process(argc, argv, &inode_num, CHECK_FS_RW)) + return; + + kill_file_by_inode(inode_num); +} + +void do_rm(int argc, char *argv[]) +{ + int retval; + ext2_ino_t inode_num; + struct ext2_inode inode; + + if (common_args_process(argc, argv, 2, 2, "rm", + "", CHECK_FS_RW)) + return; + + retval = ext2fs_namei(current_fs, root, cwd, argv[1], &inode_num); + if (retval) { + com_err(argv[0], retval, "while trying to resolve filename"); + return; + } + + if (debugfs_read_inode(inode_num, &inode, argv[0])) + return; + + if (LINUX_S_ISDIR(inode.i_mode)) { + com_err(argv[0], 0, "file is a directory"); + return; + } + + --inode.i_links_count; + if (debugfs_write_inode(inode_num, &inode, argv[0])) + return; + + unlink_file_by_name(argv[1]); + if (inode.i_links_count == 0) + kill_file_by_inode(inode_num); +} + +struct rd_struct { + ext2_ino_t parent; + int empty; +}; + +static int rmdir_proc(ext2_ino_t dir EXT2FS_ATTR((unused)), + int entry EXT2FS_ATTR((unused)), + struct ext2_dir_entry *dirent, + int offset EXT2FS_ATTR((unused)), + int blocksize EXT2FS_ATTR((unused)), + char *buf EXT2FS_ATTR((unused)), + void *private) +{ + struct rd_struct *rds = (struct rd_struct *) private; + + if (dirent->inode == 0) + return 0; + if ((ext2fs_dirent_name_len(dirent) == 1) && (dirent->name[0] == '.')) + return 0; + if ((ext2fs_dirent_name_len(dirent) == 2) && (dirent->name[0] == '.') && + (dirent->name[1] == '.')) { + rds->parent = dirent->inode; + return 0; + } + rds->empty = 0; + return 0; +} + +void do_rmdir(int argc, char *argv[]) +{ + int retval; + ext2_ino_t inode_num; + struct ext2_inode inode; + struct rd_struct rds; + + if (common_args_process(argc, argv, 2, 2, "rmdir", + "", CHECK_FS_RW)) + return; + + retval = ext2fs_namei(current_fs, root, cwd, argv[1], &inode_num); + if (retval) { + com_err(argv[0], retval, "while trying to resolve filename"); + return; + } + + if (debugfs_read_inode(inode_num, &inode, argv[0])) + return; + + if (!LINUX_S_ISDIR(inode.i_mode)) { + com_err(argv[0], 0, "file is not a directory"); + return; + } + + rds.parent = 0; + rds.empty = 1; + + retval = ext2fs_dir_iterate2(current_fs, inode_num, 0, + 0, rmdir_proc, &rds); + if (retval) { + com_err(argv[0], retval, "while iterating over directory"); + return; + } + if (rds.empty == 0) { + com_err(argv[0], 0, "directory not empty"); + return; + } + + inode.i_links_count = 0; + if (debugfs_write_inode(inode_num, &inode, argv[0])) + return; + + unlink_file_by_name(argv[1]); + kill_file_by_inode(inode_num); + + if (rds.parent) { + if (debugfs_read_inode(rds.parent, &inode, argv[0])) + return; + if (inode.i_links_count > 1) + inode.i_links_count--; + if (debugfs_write_inode(rds.parent, &inode, argv[0])) + return; + } +} +#endif /* READ_ONLY */ + +void do_show_debugfs_params(int argc EXT2FS_ATTR((unused)), + char *argv[] EXT2FS_ATTR((unused))) +{ + if (current_fs) + printf("Open mode: read-%s\n", + current_fs->flags & EXT2_FLAG_RW ? "write" : "only"); + printf("Filesystem in use: %s\n", + current_fs ? current_fs->device_name : "--none--"); +} + +#ifndef READ_ONLY +void do_expand_dir(int argc, char *argv[]) +{ + ext2_ino_t inode; + int retval; + + if (common_inode_args_process(argc, argv, &inode, CHECK_FS_RW)) + return; + + retval = ext2fs_expand_dir(current_fs, inode); + if (retval) + com_err("ext2fs_expand_dir", retval, 0); + return; +} + +void do_features(int argc, char *argv[]) +{ + int i; + + if (check_fs_open(argv[0])) + return; + + if ((argc != 1) && check_fs_read_write(argv[0])) + return; + for (i=1; i < argc; i++) { + if (e2p_edit_feature(argv[i], + ¤t_fs->super->s_feature_compat, 0)) + com_err(argv[0], 0, "Unknown feature: %s\n", + argv[i]); + else + ext2fs_mark_super_dirty(current_fs); + } + print_features(current_fs->super, stdout); +} +#endif /* READ_ONLY */ + +void do_bmap(int argc, char *argv[]) +{ + ext2_ino_t ino; + blk64_t blk, pblk = 0; + int c, err, flags = 0, ret_flags = 0; + errcode_t errcode; + + if (check_fs_open(argv[0])) + return; + + reset_getopt(); + while ((c = getopt (argc, argv, "a")) != EOF) { + switch (c) { + case 'a': + flags |= BMAP_ALLOC; + break; + default: + goto print_usage; + } + } + + if (argc <= optind+1) { + print_usage: + com_err(0, 0, + "Usage: bmap [-a] logical_blk [physical_blk]"); + return; + } + + ino = string_to_inode(argv[optind++]); + if (!ino) + return; + err = strtoblk(argv[0], argv[optind++], "logical block", &blk); + if (err) + return; + + if (argc > optind+1) + goto print_usage; + + if (argc == optind+1) { + err = strtoblk(argv[0], argv[optind++], + "physical block", &pblk); + if (err) + return; + if (flags & BMAP_ALLOC) { + com_err(0, 0, "Can't set and allocate a block"); + return; + } + flags |= BMAP_SET; + } + + errcode = ext2fs_bmap2(current_fs, ino, 0, 0, flags, blk, + &ret_flags, &pblk); + if (errcode) { + com_err(argv[0], errcode, + "while mapping logical block %llu\n", blk); + return; + } + printf("%llu", pblk); + if (ret_flags & BMAP_RET_UNINIT) + fputs(" (uninit)", stdout); + fputc('\n', stdout); +} + +void do_imap(int argc, char *argv[]) +{ + ext2_ino_t ino; + unsigned long group, block, block_nr, offset; + + if (common_args_process(argc, argv, 2, 2, argv[0], + "", 0)) + return; + ino = string_to_inode(argv[1]); + if (!ino) + return; + + group = (ino - 1) / EXT2_INODES_PER_GROUP(current_fs->super); + offset = ((ino - 1) % EXT2_INODES_PER_GROUP(current_fs->super)) * + EXT2_INODE_SIZE(current_fs->super); + block = offset >> EXT2_BLOCK_SIZE_BITS(current_fs->super); + if (!ext2fs_inode_table_loc(current_fs, (unsigned)group)) { + com_err(argv[0], 0, "Inode table for group %lu is missing\n", + group); + return; + } + block_nr = ext2fs_inode_table_loc(current_fs, (unsigned)group) + + block; + offset &= (EXT2_BLOCK_SIZE(current_fs->super) - 1); + + printf("Inode %d is part of block group %lu\n" + "\tlocated at block %lu, offset 0x%04lx\n", ino, group, + block_nr, offset); + +} + +void do_idump(int argc, char *argv[]) +{ + ext2_ino_t ino; + unsigned char *buf; + errcode_t err; + int isize; + + if (common_args_process(argc, argv, 2, 2, argv[0], + "", 0)) + return; + ino = string_to_inode(argv[1]); + if (!ino) + return; + + isize = EXT2_INODE_SIZE(current_fs->super); + err = ext2fs_get_mem(isize, &buf); + if (err) { + com_err(argv[0], err, "while allocating memory"); + return; + } + + err = ext2fs_read_inode_full(current_fs, ino, + (struct ext2_inode *)buf, isize); + if (err) { + com_err(argv[0], err, "while reading inode %d", ino); + goto err; + } + + do_byte_hexdump(stdout, buf, isize); +err: + ext2fs_free_mem(&buf); +} + +#ifndef READ_ONLY +void do_set_current_time(int argc, char *argv[]) +{ + __s64 now; + + if (common_args_process(argc, argv, 2, 2, argv[0], + "