From: Theodore Y. Ts'o Date: Sun, 16 Dec 2018 03:46:49 +0000 (-0500) Subject: Import e2fsprogs_1.44.5.orig.tar.gz X-Git-Tag: archive/debian/1.44.5-1+deb10u1^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9247612d8adeb3c68e18c5c2bf1b3b0c894daa2;p=thirdparty%2Fe2fsprogs.git Import e2fsprogs_1.44.5.orig.tar.gz [dgit import orig e2fsprogs_1.44.5.orig.tar.gz] --- a9247612d8adeb3c68e18c5c2bf1b3b0c894daa2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..528883640 --- /dev/null +++ b/.gitignore @@ -0,0 +1,237 @@ +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 +cscope.* +debugfs/extent_cmds.c +debugfs/debug_cmds.c +debugfs/debugfs +debugfs/debugfs.8 +debugfs/extent_cmds.c +debugfs/tst_set_fields +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_digest_encode +lib/ext2fs/tst_getsectsize +lib/ext2fs/tst_getsize +lib/ext2fs/tst_icount +lib/ext2fs/tst_inline +lib/ext2fs/tst_inline_data +lib/ext2fs/tst_inode_size +lib/ext2fs/tst_iscan +lib/ext2fs/tst_libext2fs +lib/ext2fs/tst_sha256 +lib/ext2fs/tst_sha512 +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/support/prof_err.c +lib/support/prof_err.h +lib/support/subdirs +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/e2mmpstatus +misc/e2mmpstatus.8 +misc/e2undo +misc/e2undo.8 +misc/e4crypt +misc/e4crypt.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/fuse2fs +misc/fuse2fs.1 +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 +ncscope.* +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/*.slow +tests/test_data.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 000000000..d99cb32e6 --- /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 000000000..c8a6fc2fc --- /dev/null +++ b/.release-checklist @@ -0,0 +1,20 @@ +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 + e2fsprogs.spec + 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 000000000..d528f9c80 --- /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.bp b/Android.bp new file mode 100644 index 000000000..b8cbcdc4b --- /dev/null +++ b/Android.bp @@ -0,0 +1,21 @@ +// Copyright 2017 The Android Open Source Project + +cc_defaults { + name: "e2fsprogs-defaults", + cflags: ["-Wall", "-Werror"], + target: { + darwin: { + // Still has unfixed/unsuppressed warnings. + cflags: ["-Wno-error"], + }, + }, +} + +subdirs = [ + "contrib", + "debugfs", + "e2fsck", + "lib", + "misc", + "resize", +] diff --git a/CleanSpec.mk b/CleanSpec.mk new file mode 100644 index 000000000..8331daeb7 --- /dev/null +++ b/CleanSpec.mk @@ -0,0 +1,52 @@ +# 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) +$(call add-clean-step, rm -rf $(TARGET_RECOVERY_OUT)/root/sbin) diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..2dd08f53b --- /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 like 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 000000000..9c2c60061 --- /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 like 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 000000000..852286a69 --- /dev/null +++ b/MCONFIG.in @@ -0,0 +1,314 @@ +# Beginning of file MCONFIG + +all:: + +check:: + +fullcheck:: + +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@ +MKDIR_P = @MKDIR_P@ + +# +# 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 000000000..462731452 --- /dev/null +++ b/Makefile.in @@ -0,0 +1,160 @@ +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 +@ALL_CMT@SUPPORT_LIB_SUBDIR= lib/support +@ALL_CMT@E2P_LIB_SUBDIR= lib/e2p +@ALL_CMT@EXT2FS_LIB_SUBDIR= lib/ext2fs + +LIB_SUBDIRS=lib/et lib/ss $(E2P_LIB_SUBDIR) $(UUID_LIB_SUBDIR) \ + $(BLKID_LIB_SUBDIR) $(SUPPORT_LIB_SUBDIR) $(EXT2FS_LIB_SUBDIR) 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 +@ALL_CMT@ $(MAKE) progs +@ALL_CMT@ $(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 + +rpm: + 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 +@SUBSET_CMT@ $(MAKE) install-libs + +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 fullcheck-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 + + +@ALL_CMT@all-progs-recursive install-progs-recursive install-strip-progs-recursive \ +@ALL_CMT@ uninstall-progs-recursive coverage.txt-progs-recursive:: all-libs-recursive +@ALL_CMT@ @for subdir in $(PROG_SUBDIRS); do \ +@ALL_CMT@ if test -d $$subdir ; then \ +@ALL_CMT@ target=`echo $@|$(SED) 's/-progs-recursive//'`; \ +@ALL_CMT@ echo making $$target in $$subdir; \ +@ALL_CMT@ (cd $$subdir && $(MAKE) $$target) || exit 1; \ +@ALL_CMT@ fi ; \ +@ALL_CMT@ 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 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 + +fullcheck:: all fullcheck-recursive diff --git a/NOTICE b/NOTICE new file mode 100644 index 000000000..da98a3e6a --- /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. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 000000000..930b1e3a0 --- /dev/null +++ b/README @@ -0,0 +1,19 @@ + This is the new version (1.44.5) 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 120000 index 000000000..a519fcd8a --- /dev/null +++ b/RELEASE-NOTES @@ -0,0 +1 @@ +doc/RelNotes/v1.44.5.txt \ No newline at end of file diff --git a/SHLIBS b/SHLIBS new file mode 100644 index 000000000..2fcbbc33e --- /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 000000000..189deb3d0 --- /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 000000000..e9890f750 --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,135 @@ +# 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) +] ) diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 000000000..394e90d21 --- /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-search. + 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 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 occurrence 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/asm_types.h b/asm_types.h new file mode 100644 index 000000000..322a79f25 --- /dev/null +++ b/asm_types.h @@ -0,0 +1,8 @@ +#define __S8_TYPEDEF __signed__ char +#define __U8_TYPEDEF unsigned char +#define __S16_TYPEDEF __signed__ short +#define __U16_TYPEDEF unsigned short +#define __S32_TYPEDEF __signed__ int +#define __U32_TYPEDEF unsigned int +#define __S64_TYPEDEF __signed__ long long +#define __U64_TYPEDEF unsigned long long diff --git a/config/config.guess b/config/config.guess new file mode 100644 index 000000000..8ca6a44c1 --- /dev/null +++ b/config/config.guess @@ -0,0 +1,1476 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright 1992-2018 Free Software Foundation, Inc. + +timestamp='2018-03-01' + +# 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: +# https://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. + +Options: + -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-2018 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'`" + + # If ldd exists, use it to detect musl libc. + if command -v ldd >/dev/null && \ + ldd --version 2>&1 | grep -q ^musl + then + LIBC=musl + fi + ;; +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 ;; + *:MidnightBSD:*:*) + echo "$UNAME_MACHINE"-unknown-midnightbsd"$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 ;; + *:Redox:*:*) + echo "$UNAME_MACHINE"-unknown-redox + exit ;; + mips:OSF1:*.*) + echo mips-dec-osf1 + 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 ;; + 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:4.4BSD:*) + 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) + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; + esac + echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + 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*: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 ;; + i*:UWIN*:*) + echo "$UNAME_MACHINE"-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-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; } + ;; + mips64el:Linux:*:*) + echo "$UNAME_MACHINE"-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 ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo "$UNAME_MACHINE"-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.*:*) + 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 + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + 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 ;; + NSV-*:NONSTOP_KERNEL:*:*) + echo nsv-tandem-nsk"$UNAME_RELEASE" + exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-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 + +echo "$0: unable to guess system type" >&2 + +case "$UNAME_MACHINE:$UNAME_SYSTEM" in + mips:Linux | mips64:Linux) + # If we got here on MIPS GNU/Linux, output extra information. + cat >&2 <&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-functions '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 000000000..b625621fa --- /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: +# https://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. + +Options: + -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-2018 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* | cloudabi*-eabi* | \ + 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/'` + ;; + -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 | ia16 | 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 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ + | 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 \ + | wasm32 \ + | 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) + ;; + 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-* | ia16-* | 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-* \ + | pru-* \ + | 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-* \ + | wasm32-* \ + | 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-pc + 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*) + 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 + ;; + 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 + ;; + 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 + ;; + 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 + ;; + nsv-tandem) + basic_machine=nsv-tandem + ;; + nsx-tandem) + basic_machine=nsx-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 + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + 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 + ;; + x64) + basic_machine=x86_64-pc + ;; + 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 + ;; + 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 + ;; + 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 + ;; + 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 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # es1800 is here to avoid being matched by es* (a different OS) + -es1800*) + os=-ose + ;; + # Now 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* | -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* | -hcos* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ + | -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* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ + | -midnightbsd*) + # 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 | -xray | -os68k* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* \ + | -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 + ;; + -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 + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -pikeos*) + # Until real need of OS specific support for + # particular features comes up, bare metal + # configurations are quite functional. + case $basic_machine in + arm*) + os=-eabi + ;; + *) + os=-elf + ;; + esac + ;; + -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 + ;; + pru-*) + os=-elf + ;; + *-be) + os=-beos + ;; + *-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 + ;; + *-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-functions '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 000000000..89fc9b098 --- /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 000000000..4f58503ea --- /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 000000000..24d2a990e --- /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 000000000..1ac065413 --- /dev/null +++ b/configure @@ -0,0 +1,15382 @@ +#! /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 +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 +DD +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 +SUBSET_CMT +ALL_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_subset +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 + --enable-subset enable subset-only build + --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 + + + + + + + + +ALL_CMT= +SUBSET_CMT= +# Check whether --enable-subset was given. +if test "${enable_subset+set}" = set; then : + enableval=$enable_subset; if test "$enableval" = "no" +then + SUBSET_CMT=# + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Disabling subset-only build" >&5 +$as_echo "Disabling subset-only build" >&6; } +else + ALL_CMT=# + { $as_echo "$as_me:${as_lineno-$LINENO}: result: Enabling subset-only-build" >&5 +$as_echo "Enabling subset-only-build" >&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); + free (data); + free (data3); + 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/fsmap.h linux/major.h linux/loop.h linux/types.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 sys/xattr.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 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a dd(1) program that supports iflag=fullblock" >&5 +$as_echo_n "checking for a dd(1) program that supports iflag=fullblock... " >&6; } +DD= +for i in dd gdd ; do + if "$i" if=/dev/null of=/dev/null count=1 bs=10k 2>/dev/null iflag=fullblock oflag=append ; then + DD=$i + break + fi +done +if test -n "$DD" ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DD" >&5 +$as_echo "$DD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found, using dd" >&5 +$as_echo "not found, using dd" >&6; } + DD=dd + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No GNU-compatible dd(1) program found, expect some self-test failures." >&5 +$as_echo "$as_me: WARNING: No GNU-compatible dd(1) program found, expect some self-test failures." >&2;} +fi + + +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 fcntl fdatasync fstat64 fsync ftruncate64 futimes getcwd getdtablesize gethostname 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='' +echo GL_THREADS_API: ${gl_threads_api} +if test "${gl_threads_api}" != none +then + 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 +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 + +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 \ + 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 000000000..51a446d72 --- /dev/null +++ b/configure.ac @@ -0,0 +1,1522 @@ +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 extensions. Will be dealt with after +dnl parsing configuration options, 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 --enable-subset +dnl +ALL_CMT= +SUBSET_CMT= +AC_ARG_ENABLE([subset], +[ --enable-subset enable subset-only build], +if test "$enableval" = "no" +then + SUBSET_CMT=# + AC_MSG_RESULT([Disabling subset-only build]) +else + ALL_CMT=# + AC_MSG_RESULT([Enabling subset-only-build]) +fi +,) +AC_SUBST(ALL_CMT) +AC_SUBST(SUBSET_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_MKDIR_P +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/fsmap.h + linux/major.h + linux/loop.h + linux/types.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 + sys/xattr.h +])) +dnl Check where to find a dd(1) that supports iflag=fullblock +dnl and oflag=append +AC_MSG_CHECKING([for a dd(1) program that supports iflag=fullblock]) +DD= +for i in dd gdd ; do + if "$i" if=/dev/null of=/dev/null count=1 bs=10k 2>/dev/null iflag=fullblock oflag=append ; then + DD=$i + break + fi +done +if test -n "$DD" ; then + AC_MSG_RESULT([$DD]) +else + AC_MSG_RESULT([not found, using dd]) + DD=dd + AC_MSG_WARN([No GNU-compatible dd(1) program found, expect some self-test failures.]) +fi +AC_SUBST([DD]) + +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 declared. +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 + fcntl + fdatasync + fstat64 + fsync + ftruncate64 + futimes + getcwd + getdtablesize + gethostname + 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='' +echo GL_THREADS_API: ${gl_threads_api} +if test "${gl_threads_api}" != none +then + 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 +fi +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) +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 \ + 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.bp b/contrib/Android.bp new file mode 100644 index 000000000..8bde657f9 --- /dev/null +++ b/contrib/Android.bp @@ -0,0 +1,19 @@ +// Copyright 2017 The Android Open Source Project + +subdirs = ["android"] + +//######################################################################## +// Build add_ext4_encrypt + +cc_binary { + name: "add_ext4_encrypt", + host_supported: true, + defaults: ["e2fsprogs-defaults"], + + srcs: ["add_ext4_encrypt.c"], + shared_libs: [ + "libext2fs", + "libext2_com_err", + ], + system_shared_libs: ["libc", "libdl"], +} diff --git a/contrib/add_ext4_encrypt.c b/contrib/add_ext4_encrypt.c new file mode 100644 index 000000000..133fe253f --- /dev/null +++ b/contrib/add_ext4_encrypt.c @@ -0,0 +1,64 @@ +/* + * Basic program 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/android/Android.bp b/contrib/android/Android.bp new file mode 100644 index 000000000..b1fd0daa2 --- /dev/null +++ b/contrib/android/Android.bp @@ -0,0 +1,69 @@ +// Copyright 2017 The Android Open Source Project + +//########################################################################## +// Build e2fsdroid + +cc_binary { + name: "e2fsdroid", + host_supported: true, + recovery_available: true, + defaults: ["e2fsprogs-defaults"], + + srcs: [ + "e2fsdroid.c", + "block_range.c", + "fsmap.c", + "block_list.c", + "base_fs.c", + "perms.c", + "basefs_allocator.c", + ], + target: { + host: { + static_libs: [ + "libext2_com_err", + "libext2_misc", + "libext2fs", + "libsparse", + "libz", + "libcutils", + "libbase", + "libselinux", + "libcrypto", + "liblog", + ], + sanitize: { + address: false, // http://b/68387795 - heap overflow in e2fsdroid + }, + }, + android: { + shared_libs: [ + "libext2fs", + "libext2_com_err", + "libext2_misc", + "libcutils", + "libbase", + "libselinux", + "libcrypto", + ], + }, + }, + stl: "libc++_static", +} + +//########################################################################## +// Build ext2simg + +cc_binary { + name: "ext2simg", + host_supported: true, + defaults: ["e2fsprogs-defaults"], + + srcs: ["ext2simg.c"], + shared_libs: [ + "libext2fs", + "libext2_com_err", + "libsparse", + "libz", + ], +} diff --git a/contrib/android/base_fs.c b/contrib/android/base_fs.c new file mode 100644 index 000000000..142030500 --- /dev/null +++ b/contrib/android/base_fs.c @@ -0,0 +1,208 @@ +#include "base_fs.h" +#include + +#define BASE_FS_VERSION "Base EXT4 version 1.0" + +struct base_fs { + FILE *file; + const char *mountpoint; + struct basefs_entry entry; +}; + +static FILE *basefs_open(const char *file) +{ + char *line = NULL; + size_t len; + FILE *f = fopen(file, "r"); + if (!f) + return NULL; + + if (getline(&line, &len, f) == -1 || !line) + goto err_getline; + + if (strncmp(line, BASE_FS_VERSION, strlen(BASE_FS_VERSION))) + goto err_header; + + free(line); + return f; + +err_header: + free(line); +err_getline: + fclose(f); + return NULL; +} + +static struct basefs_entry *basefs_readline(FILE *f, const char *mountpoint, + int *err) +{ + char *line = NULL, *saveptr1, *saveptr2, *block_range, *block; + int offset; + size_t len; + struct basefs_entry *entry = NULL; + blk64_t range_start, range_end; + + if (getline(&line, &len, f) == -1) { + if (feof(f)) + goto end; + goto err_getline; + } + + entry = calloc(1, sizeof(*entry)); + if (!entry) + goto err_alloc; + + /* + * With BASEFS version 1.0, a typical line looks like this: + * /bin/mke2fs 5000-5004,8000,9000-9990 + */ + if (sscanf(line, "%ms%n", &entry->path, &offset) != 1) + goto err_sscanf; + len = strlen(mountpoint); + memmove(entry->path, entry->path + len, strlen(entry->path) - len + 1); + + while (line[offset] == ' ') + ++offset; + + block_range = strtok_r(line + offset, ",\n", &saveptr1); + while (block_range) { + block = strtok_r(block_range, "-", &saveptr2); + if (!block) + break; + range_start = atoll(block); + block = strtok_r(NULL, "-", &saveptr2); + range_end = block ? atoll(block) : range_start; + add_blocks_to_range(&entry->head, &entry->tail, range_start, + range_end); + block_range = strtok_r(NULL, ",\n", &saveptr1); + } +end: + *err = 0; + free(line); + return entry; + +err_sscanf: + free(entry); +err_alloc: + free(line); +err_getline: + *err = 1; + return NULL; +} + +static void free_base_fs_entry(void *e) +{ + struct basefs_entry *entry = e; + if (entry) { + free(entry->path); + free(entry); + } +} + +struct ext2fs_hashmap *basefs_parse(const char *file, const char *mountpoint) +{ + int err; + struct ext2fs_hashmap *entries = NULL; + struct basefs_entry *entry; + FILE *f = basefs_open(file); + if (!f) + return NULL; + entries = ext2fs_hashmap_create(ext2fs_djb2_hash, free_base_fs_entry, 1024); + if (!entries) + goto end; + + while ((entry = basefs_readline(f, mountpoint, &err))) + ext2fs_hashmap_add(entries, entry, entry->path, + strlen(entry->path)); + + if (err) { + fclose(f); + ext2fs_hashmap_free(entries); + return NULL; + } +end: + fclose(f); + return entries; +} + +static void *init(const char *file, const char *mountpoint) +{ + struct base_fs *params = malloc(sizeof(*params)); + + if (!params) + return NULL; + params->mountpoint = mountpoint; + params->file = fopen(file, "w+"); + if (!params->file) { + free(params); + return NULL; + } + if (fwrite(BASE_FS_VERSION"\n", 1, strlen(BASE_FS_VERSION"\n"), + params->file) != strlen(BASE_FS_VERSION"\n")) { + fclose(params->file); + free(params); + return NULL; + } + return params; +} + +static int start_new_file(char *path, ext2_ino_t ino EXT2FS_ATTR((unused)), + struct ext2_inode *inode, void *data) +{ + struct base_fs *params = data; + + params->entry.head = params->entry.tail = NULL; + params->entry.path = LINUX_S_ISREG(inode->i_mode) ? path : NULL; + return 0; +} + +static int add_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t blocknr, + int metadata, void *data) +{ + struct base_fs *params = data; + + if (params->entry.path && !metadata) + add_blocks_to_range(¶ms->entry.head, ¶ms->entry.tail, + blocknr, blocknr); + return 0; +} + +static int inline_data(void *inline_data EXT2FS_ATTR((unused)), + void *data EXT2FS_ATTR((unused))) +{ + return 0; +} + +static int end_new_file(void *data) +{ + struct base_fs *params = data; + + if (!params->entry.path) + return 0; + if (fprintf(params->file, "%s%s ", params->mountpoint, + params->entry.path) < 0 + || write_block_ranges(params->file, params->entry.head, ",") + || fwrite("\n", 1, 1, params->file) != 1) + return -1; + + delete_block_ranges(params->entry.head); + return 0; +} + +static int cleanup(void *data) +{ + struct base_fs *params = data; + + fclose(params->file); + free(params); + return 0; +} + +struct fsmap_format base_fs_format = { + .init = init, + .start_new_file = start_new_file, + .add_block = add_block, + .inline_data = inline_data, + .end_new_file = end_new_file, + .cleanup = cleanup, +}; diff --git a/contrib/android/base_fs.h b/contrib/android/base_fs.h new file mode 100644 index 000000000..e9f46b4ab --- /dev/null +++ b/contrib/android/base_fs.h @@ -0,0 +1,18 @@ +#ifndef BASE_FS_H +# define BASE_FS_H + +# include "fsmap.h" +# include "hashmap.h" +# include "block_range.h" + +struct basefs_entry { + char *path; + struct block_range *head; + struct block_range *tail; +}; + +extern struct fsmap_format base_fs_format; + +struct ext2fs_hashmap *basefs_parse(const char *file, const char *mountpoint); + +#endif /* !BASE_FS_H */ diff --git a/contrib/android/basefs_allocator.c b/contrib/android/basefs_allocator.c new file mode 100644 index 000000000..a014744a6 --- /dev/null +++ b/contrib/android/basefs_allocator.c @@ -0,0 +1,148 @@ +#include +#include +#include "basefs_allocator.h" +#include "block_range.h" +#include "hashmap.h" +#include "base_fs.h" + +struct base_fs_allocator { + struct ext2fs_hashmap *entries; + struct basefs_entry *cur_entry; +}; + +static errcode_t basefs_block_allocator(ext2_filsys, blk64_t, blk64_t *, + struct blk_alloc_ctx *ctx); + +static void fs_free_blocks_range(ext2_filsys fs, struct block_range *blocks) +{ + while (blocks) { + ext2fs_unmark_block_bitmap_range2(fs->block_map, blocks->start, + blocks->end - blocks->start + 1); + blocks = blocks->next; + } +} + +static void fs_reserve_blocks_range(ext2_filsys fs, struct block_range *blocks) +{ + while (blocks) { + ext2fs_mark_block_bitmap_range2(fs->block_map, + blocks->start, blocks->end - blocks->start + 1); + blocks = blocks->next; + } +} + +errcode_t base_fs_alloc_load(ext2_filsys fs, const char *file, + const char *mountpoint) +{ + errcode_t retval; + struct basefs_entry *e; + struct ext2fs_hashmap_entry *it = NULL; + struct base_fs_allocator *allocator; + struct ext2fs_hashmap *entries = basefs_parse(file, mountpoint); + if (!entries) + return -1; + + allocator = malloc(sizeof(*allocator)); + if (!allocator) + goto err_alloc; + + retval = ext2fs_read_bitmaps(fs); + if (retval) + goto err_bitmap; + while ((e = ext2fs_hashmap_iter_in_order(entries, &it))) + fs_reserve_blocks_range(fs, e->head); + + allocator->cur_entry = NULL; + allocator->entries = entries; + + /* Override the default allocator */ + fs->get_alloc_block2 = basefs_block_allocator; + fs->priv_data = allocator; + + return 0; + +err_bitmap: + free(allocator); +err_alloc: + ext2fs_hashmap_free(entries); + return EXIT_FAILURE; +} + +static errcode_t basefs_block_allocator(ext2_filsys fs, blk64_t goal, + blk64_t *ret, struct blk_alloc_ctx *ctx) +{ + errcode_t retval; + struct block_range *next_range; + struct base_fs_allocator *allocator = fs->priv_data; + struct basefs_entry *e = allocator->cur_entry; + + /* Try to get a block from the base_fs */ + if (e && e->head && ctx && (ctx->flags & BLOCK_ALLOC_DATA)) { + *ret = e->head->start; + e->head->start += 1; + if (e->head->start > e->head->end) { + next_range = e->head->next; + free(e->head); + e->head = next_range; + } + } else { /* Allocate a new block */ + retval = ext2fs_new_block2(fs, goal, fs->block_map, ret); + if (retval) + return retval; + ext2fs_mark_block_bitmap2(fs->block_map, *ret); + } + return 0; +} + +void base_fs_alloc_cleanup(ext2_filsys fs) +{ + struct basefs_entry *e; + struct ext2fs_hashmap_entry *it = NULL; + struct base_fs_allocator *allocator = fs->priv_data; + + while ((e = ext2fs_hashmap_iter_in_order(allocator->entries, &it))) { + fs_free_blocks_range(fs, e->head); + delete_block_ranges(e->head); + e->head = e->tail = NULL; + } + + fs->priv_data = NULL; + fs->get_alloc_block2 = NULL; + ext2fs_hashmap_free(allocator->entries); + free(allocator); +} + +errcode_t base_fs_alloc_set_target(ext2_filsys fs, const char *target_path, + const char *name EXT2FS_ATTR((unused)), + ext2_ino_t parent_ino EXT2FS_ATTR((unused)), + ext2_ino_t root EXT2FS_ATTR((unused)), mode_t mode) +{ + struct base_fs_allocator *allocator = fs->priv_data; + + if (mode != S_IFREG) + return 0; + + if (allocator) + allocator->cur_entry = ext2fs_hashmap_lookup(allocator->entries, + target_path, + strlen(target_path)); + return 0; +} + +errcode_t base_fs_alloc_unset_target(ext2_filsys fs, + const char *target_path EXT2FS_ATTR((unused)), + const char *name EXT2FS_ATTR((unused)), + ext2_ino_t parent_ino EXT2FS_ATTR((unused)), + ext2_ino_t root EXT2FS_ATTR((unused)), mode_t mode) +{ + struct base_fs_allocator *allocator = fs->priv_data; + + if (!allocator || !allocator->cur_entry || mode != S_IFREG) + return 0; + + fs_free_blocks_range(fs, allocator->cur_entry->head); + delete_block_ranges(allocator->cur_entry->head); + allocator->cur_entry->head = allocator->cur_entry->tail = NULL; + allocator->cur_entry = NULL; + return 0; +} diff --git a/contrib/android/basefs_allocator.h b/contrib/android/basefs_allocator.h new file mode 100644 index 000000000..f1109cd61 --- /dev/null +++ b/contrib/android/basefs_allocator.h @@ -0,0 +1,16 @@ +#ifndef BASE_FS_ALLOCATOR_H +# define BASE_FS_ALLOCATOR_H + +# include +# include + +errcode_t base_fs_alloc_load(ext2_filsys fs, const char *file, + const char *mountpoint); +void base_fs_alloc_cleanup(ext2_filsys fs); + +errcode_t base_fs_alloc_set_target(ext2_filsys fs, const char *target_path, + const char *name, ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode); +errcode_t base_fs_alloc_unset_target(ext2_filsys fs, const char *target_path, + const char *name, ext2_ino_t parent_ino, ext2_ino_t root, mode_t mode); + +#endif /* !BASE_FS_ALLOCATOR_H */ diff --git a/contrib/android/block_list.c b/contrib/android/block_list.c new file mode 100644 index 000000000..25dcc514e --- /dev/null +++ b/contrib/android/block_list.c @@ -0,0 +1,94 @@ +#include "block_list.h" +#include "block_range.h" +#include +#include +#include +#include + +struct block_list { + FILE *f; + const char *mountpoint; + + struct { + const char *filename; + struct block_range *head; + struct block_range *tail; + } entry; +}; + +static void *init(const char *file, const char *mountpoint) +{ + struct block_list *params = malloc(sizeof(*params)); + + if (!params) + return NULL; + params->mountpoint = mountpoint; + params->f = fopen(file, "w+"); + if (!params->f) { + free(params); + return NULL; + } + return params; +} + +static int start_new_file(char *path, ext2_ino_t ino EXT2FS_ATTR((unused)), + struct ext2_inode *inode EXT2FS_ATTR((unused)), + void *data) +{ + struct block_list *params = data; + + params->entry.head = params->entry.tail = NULL; + params->entry.filename = LINUX_S_ISREG(inode->i_mode) ? path : NULL; + return 0; +} + +static int add_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t blocknr, + int metadata, void *data) +{ + struct block_list *params = data; + + if (params->entry.filename && !metadata) + add_blocks_to_range(¶ms->entry.head, ¶ms->entry.tail, + blocknr, blocknr); + return 0; +} + +static int inline_data(void *inline_data EXT2FS_ATTR((unused)), + void *data EXT2FS_ATTR((unused))) +{ + return 0; +} + +static int end_new_file(void *data) +{ + struct block_list *params = data; + + if (!params->entry.filename || !params->entry.head) + return 0; + if (fprintf(params->f, "%s%s ", params->mountpoint, + params->entry.filename) < 0 + || write_block_ranges(params->f, params->entry.head, " ") + || fwrite("\n", 1, 1, params->f) != 1) + return -1; + + delete_block_ranges(params->entry.head); + return 0; +} + +static int cleanup(void *data) +{ + struct block_list *params = data; + + fclose(params->f); + free(params); + return 0; +} + +struct fsmap_format block_list_format = { + .init = init, + .start_new_file = start_new_file, + .add_block = add_block, + .inline_data = inline_data, + .end_new_file = end_new_file, + .cleanup = cleanup, +}; diff --git a/contrib/android/block_list.h b/contrib/android/block_list.h new file mode 100644 index 000000000..47041e402 --- /dev/null +++ b/contrib/android/block_list.h @@ -0,0 +1,8 @@ +#ifndef BLOCK_LIST_H +# define BLOCK_LIST_H + +# include "fsmap.h" + +extern struct fsmap_format block_list_format; + +#endif /* !BLOCK_LIST_H */ diff --git a/contrib/android/block_range.c b/contrib/android/block_range.c new file mode 100644 index 000000000..2f951c780 --- /dev/null +++ b/contrib/android/block_range.c @@ -0,0 +1,64 @@ +#define _GNU_SOURCE + +#include "block_range.h" +#include + +struct block_range *new_block_range(blk64_t start, blk64_t end) +{ + struct block_range *range = malloc(sizeof(*range)); + range->start = start; + range->end = end; + range->next = NULL; + return range; +} + +void add_blocks_to_range(struct block_range **head, struct block_range **tail, + blk64_t blk_start, blk64_t blk_end) +{ + if (*head == NULL) + *head = *tail = new_block_range(blk_start, blk_end); + else if ((*tail)->end + 1 == blk_start) + (*tail)->end += (blk_end - blk_start + 1); + else { + struct block_range *range = new_block_range(blk_start, blk_end); + (*tail)->next = range; + *tail = range; + } +} + +void delete_block_ranges(struct block_range *head) +{ + struct block_range *tmp; + + while (head) { + tmp = head->next; + free(head); + head = tmp; + } +} + +int write_block_ranges(FILE *f, struct block_range *range, + char *sep) +{ + int len; + char *buf; + + while (range) { + if (range->start == range->end) + len = asprintf(&buf, "%llu%s", range->start, sep); + else + len = asprintf(&buf, "%llu-%llu%s", range->start, + range->end, sep); + if (fwrite(buf, 1, len, f) != (size_t)len) { + free(buf); + return -1; + } + free(buf); + range = range->next; + } + + len = strlen(sep); + if (fseek(f, -len, SEEK_CUR) == -len) + return -1; + return 0; +} diff --git a/contrib/android/block_range.h b/contrib/android/block_range.h new file mode 100644 index 000000000..31e3c23fa --- /dev/null +++ b/contrib/android/block_range.h @@ -0,0 +1,18 @@ +#ifndef BLOCK_RANGE_H +# define BLOCK_RANGE_H + +# include +# include + +struct block_range { + blk64_t start; + blk64_t end; + struct block_range *next; +}; + +void add_blocks_to_range(struct block_range **head, struct block_range **tail, + blk64_t blk_start, blk64_t blk_end); +void delete_block_ranges(struct block_range *head); +int write_block_ranges(FILE *f, struct block_range *range, char *sep); + +#endif /* !BLOCK_RANGE_H */ diff --git a/contrib/android/e2fsdroid.c b/contrib/android/e2fsdroid.c new file mode 100644 index 000000000..3264a99fb --- /dev/null +++ b/contrib/android/e2fsdroid.c @@ -0,0 +1,375 @@ +#define _GNU_SOURCE + +#include +#include +#include +#include +#include +#include + +#include "perms.h" +#include "base_fs.h" +#include "block_list.h" +#include "basefs_allocator.h" +#include "create_inode.h" + +#ifndef UID_GID_MAP_MAX_EXTENTS +/* + * The value is defined in linux/user_namspace.h. + * The value is (arbitrarily) 5 in 4.14 and earlier, or 340 in 4.15 and later. + * Here, the bigger value is taken. See also man user_namespace(7). + */ +#define UID_GID_MAP_MAX_EXTENTS 340 +#endif + +static char *prog_name = "e2fsdroid"; +static char *in_file; +static char *block_list; +static char *basefs_out; +static char *basefs_in; +static char *mountpoint = ""; +static time_t fixed_time = -1; +static char *fs_config_file; +static struct selinux_opt seopt_file[8]; +static int max_nr_opt = (int)sizeof(seopt_file) / sizeof(seopt_file[0]); +static char *product_out; +static char *src_dir; +static int android_configure; +static int android_sparse_file = 1; + +static void usage(int ret) +{ + fprintf(stderr, "%s [-B block_list] [-D basefs_out] [-T timestamp]\n" + "\t[-C fs_config] [-S file_contexts] [-p product_out]\n" + "\t[-a mountpoint] [-d basefs_in] [-f src_dir] [-e] [-s]\n" + "\t[-u uid-mapping] [-g gid-mapping] image\n", + prog_name); + exit(ret); +} + +static char *absolute_path(const char *file) +{ + char *ret; + char cwd[PATH_MAX]; + + if (file[0] != '/') { + if (getcwd(cwd, PATH_MAX) == NULL) { + fprintf(stderr, "Failed to getcwd\n"); + exit(EXIT_FAILURE); + } + ret = malloc(strlen(cwd) + 1 + strlen(file) + 1); + if (ret) + sprintf(ret, "%s/%s", cwd, file); + } else + ret = strdup(file); + return ret; +} + +static int parse_ugid_map_entry(char* line, struct ugid_map_entry* result) +{ + char *token, *token_saveptr; + size_t num_tokens; + unsigned int *parsed[] = {&result->child_id, + &result->parent_id, + &result->length}; + for (token = strtok_r(line, " ", &token_saveptr), num_tokens = 0; + token && num_tokens < 3; + token = strtok_r(NULL, " ", &token_saveptr), ++num_tokens) { + char* endptr = NULL; + *parsed[num_tokens] = strtoul(token, &endptr, 10); + if ((*parsed[num_tokens] == ULONG_MAX && errno) || *endptr) { + fprintf(stderr, "Malformed u/gid mapping line\n"); + return 0; + } + } + if (num_tokens < 3 || strtok_r(NULL, " ", &token_saveptr) != NULL) { + fprintf(stderr, "Malformed u/gid mapping line\n"); + return 0; + } + if (result->child_id + result->length < result->child_id || + result->parent_id + result->length < result->parent_id) { + fprintf(stderr, "u/gid mapping overflow\n"); + return 0; + } + return 1; +} + +/* + * Returns 1 if [begin1, begin1+length1) and [begin2, begin2+length2) have + * overlapping range. Otherwise 0. + */ +static int is_overlapping(unsigned int begin1, unsigned int length1, + unsigned int begin2, unsigned int length2) +{ + unsigned int end1 = begin1 + length1; + unsigned int end2 = begin2 + length2; + return !(end1 <= begin2 || end2 <= begin1); +} + +/* + * Verifies if the given mapping works. + * - Checks if the number of entries is less than or equals to + * UID_GID_MAP_MAX_EXTENTS. + * - Checks if there is no overlapped ranges. + * Returns 1 if valid, otherwise 0. + */ +static int is_valid_ugid_map(const struct ugid_map* mapping) +{ + size_t i, j; + + if (mapping->size > UID_GID_MAP_MAX_EXTENTS) { + fprintf(stderr, "too many u/gid mapping entries\n"); + return 0; + } + + for (i = 0; i < mapping->size; ++i) { + const struct ugid_map_entry *entry1 = &mapping->entries[i]; + for (j = i + 1; j < mapping->size; ++j) { + const struct ugid_map_entry *entry2 = + &mapping->entries[j]; + if (is_overlapping(entry1->child_id, entry1->length, + entry2->child_id, entry2->length)) { + fprintf(stderr, + "Overlapping child u/gid: [%d %d %d]," + " [%d %d %d]\n", + entry1->child_id, entry1->parent_id, + entry1->length, entry2->child_id, + entry2->parent_id, entry2->length); + return 0; + } + if (is_overlapping(entry1->parent_id, entry1->length, + entry2->parent_id, entry2->length)) { + fprintf(stderr, + "Overlapping parent u/gid: [%d %d %d]," + " [%d %d %d]\n", + entry1->child_id, entry1->parent_id, + entry1->length, entry2->child_id, + entry2->parent_id, entry2->length); + return 0; + } + } + } + return 1; +} + +/* + * Parses the UID/GID mapping argument. The argument could be a multi-line + * string (separated by '\n', no trailing '\n' is allowed). Each line must + * contain exact three integer tokens; the first token is |child_id|, + * the second is |parent_id|, and the last is |length| of the mapping range. + * See also user_namespace(7) man page. + * On success, the parsed entries are stored in |result|, and it returns 1. + * Otherwise, returns 0. + */ +static int parse_ugid_map(char* arg, struct ugid_map* result) +{ + int i; + char *line, *line_saveptr; + size_t current_index; + + /* Count the number of lines. */ + result->size = 1; + for (i = 0; arg[i]; ++i) { + if (arg[i] == '\n') + ++result->size; + } + + /* Allocate memory for entries. */ + result->entries = malloc(sizeof(struct ugid_map_entry) * result->size); + if (!result->entries) { + result->size = 0; + return 0; + } + + /* Parse each line */ + for (line = strtok_r(arg, "\n", &line_saveptr), current_index = 0; + line; + line = strtok_r(NULL, "\n", &line_saveptr), ++current_index) { + if (!parse_ugid_map_entry( + line, &result->entries[current_index])) { + return 0; + } + } + + return is_valid_ugid_map(result); +} + +int main(int argc, char *argv[]) +{ + int c; + char *p; + int flags = EXT2_FLAG_RW; + errcode_t retval; + io_manager io_mgr; + ext2_filsys fs = NULL; + struct fs_ops_callbacks fs_callbacks = { NULL, NULL }; + char *token; + int nr_opt = 0; + ext2_ino_t inodes_count; + ext2_ino_t free_inodes_count; + blk64_t blocks_count; + blk64_t free_blocks_count; + struct ugid_map uid_map = { 0, NULL }, gid_map = { 0, NULL }; + + add_error_table(&et_ext2_error_table); + + while ((c = getopt (argc, argv, "T:C:S:p:a:D:d:B:f:esu:g:")) != EOF) { + switch (c) { + case 'T': + fixed_time = strtoul(optarg, &p, 0); + android_configure = 1; + break; + case 'C': + fs_config_file = absolute_path(optarg); + android_configure = 1; + break; + case 'S': + token = strtok(optarg, ","); + while (token) { + if (nr_opt == max_nr_opt) { + fprintf(stderr, "Expected at most %d selinux opts\n", + max_nr_opt); + exit(EXIT_FAILURE); + } + seopt_file[nr_opt].type = SELABEL_OPT_PATH; + seopt_file[nr_opt].value = absolute_path(token); + nr_opt++; + token = strtok(NULL, ","); + } + android_configure = 1; + break; + case 'p': + product_out = absolute_path(optarg); + android_configure = 1; + break; + case 'a': + mountpoint = strdup(optarg); + break; + case 'D': + basefs_out = absolute_path(optarg); + break; + case 'd': + basefs_in = absolute_path(optarg); + break; + case 'B': + block_list = absolute_path(optarg); + break; + case 'f': + src_dir = absolute_path(optarg); + break; + case 'e': + android_sparse_file = 0; + break; + case 's': + flags |= EXT2_FLAG_SHARE_DUP; + break; + case 'u': + if (!parse_ugid_map(optarg, &uid_map)) + exit(EXIT_FAILURE); + android_configure = 1; + break; + case 'g': + if (!parse_ugid_map(optarg, &gid_map)) + exit(EXIT_FAILURE); + android_configure = 1; + break; + default: + usage(EXIT_FAILURE); + } + } + if (optind >= argc) { + fprintf(stderr, "Expected filename after options\n"); + exit(EXIT_FAILURE); + } + + if (android_sparse_file) { + io_mgr = sparse_io_manager; + if (asprintf(&in_file, "(%s)", argv[optind]) == -1) { + fprintf(stderr, "Failed to allocate file name\n"); + exit(EXIT_FAILURE); + } + } else { + io_mgr = unix_io_manager; + in_file = strdup(argv[optind]); + } + retval = ext2fs_open(in_file, flags, 0, 0, io_mgr, &fs); + if (retval) { + com_err(prog_name, retval, "while opening file %s\n", in_file); + return retval; + } + + if (src_dir) { + ext2fs_read_bitmaps(fs); + if (basefs_in) { + retval = base_fs_alloc_load(fs, basefs_in, mountpoint); + if (retval) { + com_err(prog_name, retval, "%s", + "while reading base_fs file"); + exit(1); + } + fs_callbacks.create_new_inode = + base_fs_alloc_set_target; + fs_callbacks.end_create_new_inode = + base_fs_alloc_unset_target; + } + retval = populate_fs2(fs, EXT2_ROOT_INO, src_dir, + EXT2_ROOT_INO, &fs_callbacks); + if (retval) { + com_err(prog_name, retval, "%s", + "while populating file system"); + exit(1); + } + if (basefs_in) + base_fs_alloc_cleanup(fs); + } + + if (android_configure) { + retval = android_configure_fs( + fs, src_dir, product_out, mountpoint, seopt_file, + nr_opt, fs_config_file, fixed_time, &uid_map, &gid_map); + if (retval) { + com_err(prog_name, retval, "%s", + "while configuring the file system"); + exit(1); + } + } + + if (block_list) { + retval = fsmap_iter_filsys(fs, &block_list_format, block_list, + mountpoint); + if (retval) { + com_err(prog_name, retval, "%s", + "while creating the block_list"); + exit(1); + } + } + + if (basefs_out) { + retval = fsmap_iter_filsys(fs, &base_fs_format, + basefs_out, mountpoint); + if (retval) { + com_err(prog_name, retval, "%s", + "while creating the basefs file"); + exit(1); + } + } + + inodes_count = fs->super->s_inodes_count; + free_inodes_count = fs->super->s_free_inodes_count; + blocks_count = ext2fs_blocks_count(fs->super); + free_blocks_count = ext2fs_free_blocks_count(fs->super); + + retval = ext2fs_close_free(&fs); + if (retval) { + com_err(prog_name, retval, "%s", + "while writing superblocks"); + exit(1); + } + + printf("Created filesystem with %u/%u inodes and %llu/%llu blocks\n", + inodes_count - free_inodes_count, inodes_count, + blocks_count - free_blocks_count, blocks_count); + + remove_error_table(&et_ext2_error_table); + return 0; +} diff --git a/contrib/android/ext2simg.c b/contrib/android/ext2simg.c new file mode 100644 index 000000000..017e16ff7 --- /dev/null +++ b/contrib/android/ext2simg.c @@ -0,0 +1,224 @@ +/* + * Copyright (C) 2016 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. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct { + int crc; + int sparse; + int gzip; + char *in_file; + char *out_file; + bool overwrite_input; +} params = { + .crc = 0, + .sparse = 1, + .gzip = 0, +}; + +#define ext2fs_fatal(Retval, Format, ...) \ + do { \ + com_err("error", Retval, Format, __VA_ARGS__); \ + exit(EXIT_FAILURE); \ + } while(0) + +#define sparse_fatal(Format) \ + do { \ + fprintf(stderr, "sparse: "Format); \ + exit(EXIT_FAILURE); \ + } while(0) + +static void usage(char *path) +{ + char *progname = basename(path); + + fprintf(stderr, "%s [ options ] \n" + " -c include CRC block\n" + " -z gzip output\n" + " -S don't use sparse output format\n", progname); +} + +static struct buf_item { + struct buf_item *next; + void *buf[0]; +} *buf_list; + +static void add_chunk(ext2_filsys fs, struct sparse_file *s, blk_t chunk_start, blk_t chunk_end) +{ + int retval; + unsigned int nb_blk = chunk_end - chunk_start; + size_t len = nb_blk * fs->blocksize; + int64_t offset = (int64_t)chunk_start * (int64_t)fs->blocksize; + + if (params.overwrite_input == false) { + if (sparse_file_add_file(s, params.in_file, offset, len, chunk_start) < 0) + sparse_fatal("adding data to the sparse file"); + } else { + /* + * The input file will be overwritten, make a copy of + * the blocks + */ + struct buf_item *bi = calloc(1, sizeof(struct buf_item) + len); + if (buf_list == NULL) + buf_list = bi; + else { + bi->next = buf_list; + buf_list = bi; + } + + retval = io_channel_read_blk64(fs->io, chunk_start, nb_blk, bi->buf); + if (retval < 0) + ext2fs_fatal(retval, "reading block %u - %u", chunk_start, chunk_end); + + if (sparse_file_add_data(s, bi->buf, len, chunk_start) < 0) + sparse_fatal("adding data to the sparse file"); + } +} + +static void free_chunks(void) +{ + struct buf_item *bi; + + while (buf_list) { + bi = buf_list->next; + free(buf_list); + buf_list = bi; + } +} + +static struct sparse_file *ext_to_sparse(const char *in_file) +{ + errcode_t retval; + ext2_filsys fs; + struct sparse_file *s; + int64_t chunk_start = -1; + blk_t first_blk, last_blk, nb_blk, cur_blk; + + retval = ext2fs_open(in_file, 0, 0, 0, unix_io_manager, &fs); + if (retval) + ext2fs_fatal(retval, "while reading %s", in_file); + + retval = ext2fs_read_block_bitmap(fs); + if (retval) + ext2fs_fatal(retval, "while reading block bitmap of %s", in_file); + + first_blk = ext2fs_get_block_bitmap_start2(fs->block_map); + last_blk = ext2fs_get_block_bitmap_end2(fs->block_map); + nb_blk = last_blk - first_blk + 1; + + s = sparse_file_new(fs->blocksize, (uint64_t)fs->blocksize * (uint64_t)nb_blk); + if (!s) + sparse_fatal("creating sparse file"); + + /* + * The sparse format encodes the size of a chunk (and its header) in a + * 32-bit unsigned integer (UINT32_MAX) + * When writing the chunk, the library uses a single call to write(). + * Linux's implementation of the 'write' syscall does not allow transfers + * larger than INT32_MAX (32-bit _and_ 64-bit systems). + * Make sure we do not create chunks larger than this limit. + */ + int64_t max_blk_per_chunk = (INT32_MAX - 12) / fs->blocksize; + + /* Iter on the blocks to merge contiguous chunk */ + for (cur_blk = first_blk; cur_blk <= last_blk; ++cur_blk) { + if (ext2fs_test_block_bitmap2(fs->block_map, cur_blk)) { + if (chunk_start == -1) { + chunk_start = cur_blk; + } else if (cur_blk - chunk_start + 1 == max_blk_per_chunk) { + add_chunk(fs, s, chunk_start, cur_blk); + chunk_start = -1; + } + } else if (chunk_start != -1) { + add_chunk(fs, s, chunk_start, cur_blk); + chunk_start = -1; + } + } + if (chunk_start != -1) + add_chunk(fs, s, chunk_start, cur_blk - 1); + + ext2fs_free(fs); + return s; +} + +static bool same_file(const char *in, const char *out) +{ + struct stat st1, st2; + + if (access(out, F_OK) == -1) + return false; + + if (lstat(in, &st1) == -1) + ext2fs_fatal(errno, "stat %s\n", in); + if (lstat(out, &st2) == -1) + ext2fs_fatal(errno, "stat %s\n", out); + return st1.st_ino == st2.st_ino; +} + +int main(int argc, char *argv[]) +{ + int opt; + int out_fd; + struct sparse_file *s; + + while ((opt = getopt(argc, argv, "czS")) != -1) { + switch(opt) { + case 'c': + params.crc = 1; + break; + case 'z': + params.gzip = 1; + break; + case 'S': + params.sparse = 0; + break; + default: + usage(argv[0]); + exit(EXIT_FAILURE); + } + } + if (optind + 1 >= argc) { + usage(argv[0]); + exit(EXIT_FAILURE); + } + params.in_file = strdup(argv[optind++]); + params.out_file = strdup(argv[optind]); + params.overwrite_input = same_file(params.in_file, params.out_file); + + s = ext_to_sparse(params.in_file); + + out_fd = open(params.out_file, O_WRONLY | O_CREAT | O_TRUNC, 0664); + if (out_fd == -1) + ext2fs_fatal(errno, "opening %s\n", params.out_file); + if (sparse_file_write(s, out_fd, params.gzip, params.sparse, params.crc) < 0) + sparse_fatal("writing sparse file"); + + sparse_file_destroy(s); + + free(params.in_file); + free(params.out_file); + free_chunks(); + close(out_fd); + + return 0; +} diff --git a/contrib/android/fsmap.c b/contrib/android/fsmap.c new file mode 100644 index 000000000..36adb7f0a --- /dev/null +++ b/contrib/android/fsmap.c @@ -0,0 +1,119 @@ +#include "fsmap.h" +#include +#include +#include +#include +#include "support/nls-enable.h" + +struct walk_ext_priv_data { + char *path; + ext2_filsys fs; + struct fsmap_format *format; +}; + +static int walk_block(ext2_filsys fs EXT2FS_ATTR((unused)), blk64_t *blocknr, + e2_blkcnt_t blockcnt, + blk64_t ref64_blk EXT2FS_ATTR((unused)), + int ref_offset EXT2FS_ATTR((unused)), + void *priv) +{ + struct walk_ext_priv_data *pdata = priv; + struct fsmap_format *format = pdata->format; + + return format->add_block(fs, *blocknr, blockcnt < 0, format->private); +} + +static errcode_t ino_iter_blocks(ext2_filsys fs, ext2_ino_t ino, + struct walk_ext_priv_data *pdata) +{ + errcode_t retval; + struct ext2_inode inode; + struct fsmap_format *format = pdata->format; + + retval = ext2fs_read_inode(fs, ino, &inode); + if (retval) + return retval; + + if (!ext2fs_inode_has_valid_blocks2(fs, &inode)) + return format->inline_data(&(inode.i_block[0]), + format->private); + + retval = ext2fs_block_iterate3(fs, ino, 0, NULL, walk_block, pdata); + if (retval) + com_err(__func__, retval, _("listing blocks of ino \"%u\""), + ino); + return retval; +} + +static int is_dir(ext2_filsys fs, ext2_ino_t ino) +{ + struct ext2_inode inode; + + if (ext2fs_read_inode(fs, ino, &inode)) + return 0; + return S_ISDIR(inode.i_mode); +} + +static int walk_ext_dir(ext2_ino_t dir EXT2FS_ATTR((unused)), + int flags EXT2FS_ATTR((unused)), + struct ext2_dir_entry *de, + int offset EXT2FS_ATTR((unused)), + int blocksize EXT2FS_ATTR((unused)), + char *buf EXT2FS_ATTR((unused)), void *priv_data) +{ + errcode_t retval; + struct ext2_inode inode; + char *filename, *cur_path, *name = de->name; + int name_len = de->name_len & 0xff; + struct walk_ext_priv_data *pdata = priv_data; + struct fsmap_format *format = pdata->format; + + if (!strncmp(name, ".", name_len) + || !strncmp(name, "..", name_len) + || !strncmp(name, "lost+found", 10)) + return 0; + + if (asprintf(&filename, "%s/%.*s", pdata->path, name_len, name) < 0) + return -ENOMEM; + + retval = ext2fs_read_inode(pdata->fs, de->inode, &inode); + if (retval) { + com_err(__func__, retval, _("reading ino \"%u\""), de->inode); + goto end; + } + format->start_new_file(filename, de->inode, &inode, format->private); + retval = ino_iter_blocks(pdata->fs, de->inode, pdata); + if (retval) + return retval; + format->end_new_file(format->private); + + retval = 0; + if (is_dir(pdata->fs, de->inode)) { + cur_path = pdata->path; + pdata->path = filename; + retval = ext2fs_dir_iterate2(pdata->fs, de->inode, 0, NULL, + walk_ext_dir, pdata); + pdata->path = cur_path; + } + +end: + free(filename); + return retval; +} + +errcode_t fsmap_iter_filsys(ext2_filsys fs, struct fsmap_format *format, + const char *file, const char *mountpoint) +{ + struct walk_ext_priv_data pdata; + errcode_t retval; + + format->private = format->init(file, mountpoint); + pdata.fs = fs; + pdata.path = ""; + pdata.format = format; + + retval = ext2fs_dir_iterate2(fs, EXT2_ROOT_INO, 0, NULL, walk_ext_dir, &pdata); + + format->cleanup(format->private); + return retval; +} diff --git a/contrib/android/fsmap.h b/contrib/android/fsmap.h new file mode 100644 index 000000000..9f84a7182 --- /dev/null +++ b/contrib/android/fsmap.h @@ -0,0 +1,29 @@ +#ifndef FSMAP_H +# define FSMAP_H + +# ifndef _GNU_SOURCE +# define _GNU_SOURCE // asprintf +# endif +# include +# include +# include +# include +# include + +struct fsmap_format { + void* (* init)(const char *file, const char *mountpoint); + int (* start_new_file)(char *path, ext2_ino_t ino, + struct ext2_inode *inode, void *data); + int (* add_block)(ext2_filsys fs, blk64_t blocknr, int metadata, + void *data); + int (* inline_data)(void *inline_data, void *data); + int (* end_new_file)(void *data); + int (* cleanup)(void *data); + + void *private; +}; + +errcode_t fsmap_iter_filsys(ext2_filsys fs, struct fsmap_format *format, + const char *file, const char *mountpoint); + +#endif /* !FSMAP_H */ diff --git a/contrib/android/perms.c b/contrib/android/perms.c new file mode 100644 index 000000000..3c42e5977 --- /dev/null +++ b/contrib/android/perms.c @@ -0,0 +1,373 @@ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE //asprintf +#endif +#include "perms.h" +#include "support/nls-enable.h" +#include +#include + +#ifndef XATTR_SELINUX_SUFFIX +# define XATTR_SELINUX_SUFFIX "selinux" +#endif +#ifndef XATTR_CAPS_SUFFIX +# define XATTR_CAPS_SUFFIX "capability" +#endif + +struct inode_params { + ext2_filsys fs; + char *path; + char *filename; + char *src_dir; + char *target_out; + char *mountpoint; + fs_config_f fs_config_func; + struct selabel_handle *sehnd; + time_t fixed_time; + const struct ugid_map* uid_map; + const struct ugid_map* gid_map; + errcode_t error; +}; + +static errcode_t ino_add_xattr(ext2_filsys fs, ext2_ino_t ino, const char *name, + const void *value, int value_len) +{ + errcode_t retval, close_retval; + struct ext2_xattr_handle *xhandle; + + retval = ext2fs_xattrs_open(fs, ino, &xhandle); + if (retval) { + com_err(__func__, retval, _("while opening inode %u"), ino); + return retval; + } + retval = ext2fs_xattrs_read(xhandle); + if (retval) { + com_err(__func__, retval, + _("while reading xattrs of inode %u"), ino); + goto xattrs_close; + } + retval = ext2fs_xattr_set(xhandle, name, value, value_len); + if (retval) { + com_err(__func__, retval, + _("while setting xattrs of inode %u"), ino); + goto xattrs_close; + } +xattrs_close: + close_retval = ext2fs_xattrs_close(&xhandle); + if (close_retval) { + com_err(__func__, close_retval, + _("while closing xattrs of inode %u"), ino); + return retval ? retval : close_retval; + } + return retval; +} + +static errcode_t set_selinux_xattr(ext2_filsys fs, ext2_ino_t ino, + struct inode_params *params) +{ + errcode_t retval; + char *secontext = NULL; + struct ext2_inode inode; + + if (params->sehnd == NULL) + return 0; + + retval = ext2fs_read_inode(fs, ino, &inode); + if (retval) { + com_err(__func__, retval, + _("while reading inode %u"), ino); + return retval; + } + + retval = selabel_lookup(params->sehnd, &secontext, params->filename, + inode.i_mode); + if (retval < 0) { + com_err(__func__, retval, + _("searching for label \"%s\""), params->filename); + return retval; + } + + retval = ino_add_xattr(fs, ino, "security." XATTR_SELINUX_SUFFIX, + secontext, strlen(secontext) + 1); + + freecon(secontext); + return retval; +} + +/* + * Returns mapped UID/GID if there is a corresponding entry in |mapping|. + * Otherwise |id| as is. + */ +static unsigned int resolve_ugid(const struct ugid_map* mapping, + unsigned int id) +{ + size_t i; + for (i = 0; i < mapping->size; ++i) { + const struct ugid_map_entry* entry = &mapping->entries[i]; + if (entry->parent_id <= id && + id < entry->parent_id + entry->length) { + return id + entry->child_id - entry->parent_id; + } + } + + /* No entry is found. */ + return id; +} + +static errcode_t set_perms_and_caps(ext2_filsys fs, ext2_ino_t ino, + struct inode_params *params) +{ + errcode_t retval; + uint64_t capabilities = 0; + struct ext2_inode inode; + struct vfs_cap_data cap_data; + unsigned int uid = 0, gid = 0, imode = 0; + + retval = ext2fs_read_inode(fs, ino, &inode); + if (retval) { + com_err(__func__, retval, _("while reading inode %u"), ino); + return retval; + } + + /* Permissions */ + if (params->fs_config_func != NULL) { + const char *filename = params->filename; + if (strcmp(filename, params->mountpoint) == 0) { + /* The root of the filesystem needs to be an empty string. */ + filename = ""; + } + params->fs_config_func(filename, S_ISDIR(inode.i_mode), + params->target_out, &uid, &gid, &imode, + &capabilities); + uid = resolve_ugid(params->uid_map, uid); + gid = resolve_ugid(params->gid_map, gid); + inode.i_uid = (__u16) uid; + inode.i_gid = (__u16) gid; + ext2fs_set_i_uid_high(inode, (__u16) (uid >> 16)); + ext2fs_set_i_gid_high(inode, (__u16) (gid >> 16)); + inode.i_mode = (inode.i_mode & S_IFMT) | (imode & 0xffff); + retval = ext2fs_write_inode(fs, ino, &inode); + if (retval) { + com_err(__func__, retval, + _("while writing inode %u"), ino); + return retval; + } + } + + /* Capabilities */ + if (!capabilities) + return 0; + memset(&cap_data, 0, sizeof(cap_data)); + cap_data.magic_etc = VFS_CAP_REVISION_2 | VFS_CAP_FLAGS_EFFECTIVE; + cap_data.data[0].permitted = (uint32_t) (capabilities & 0xffffffff); + cap_data.data[1].permitted = (uint32_t) (capabilities >> 32); + return ino_add_xattr(fs, ino, "security." XATTR_CAPS_SUFFIX, + &cap_data, sizeof(cap_data)); +} + +static errcode_t set_timestamp(ext2_filsys fs, ext2_ino_t ino, + struct inode_params *params) +{ + errcode_t retval; + struct ext2_inode inode; + struct stat stat; + char *src_filename = NULL; + + retval = ext2fs_read_inode(fs, ino, &inode); + if (retval) { + com_err(__func__, retval, + _("while reading inode %u"), ino); + return retval; + } + + if (params->fixed_time == -1 && params->src_dir) { + /* replace mountpoint from filename with src_dir */ + if (asprintf(&src_filename, "%s/%s", params->src_dir, + params->filename + strlen(params->mountpoint)) < 0) { + return -ENOMEM; + } + retval = lstat(src_filename, &stat); + if (retval < 0) { + com_err(__func__, retval, + _("while lstat file %s"), src_filename); + goto end; + } + inode.i_atime = inode.i_ctime = inode.i_mtime = stat.st_mtime; + } else { + inode.i_atime = inode.i_ctime = inode.i_mtime = params->fixed_time; + } + + retval = ext2fs_write_inode(fs, ino, &inode); + if (retval) { + com_err(__func__, retval, + _("while writing inode %u"), ino); + goto end; + } + +end: + free(src_filename); + return retval; +} + +static int is_dir(ext2_filsys fs, ext2_ino_t ino) +{ + struct ext2_inode inode; + + if (ext2fs_read_inode(fs, ino, &inode)) + return 0; + return S_ISDIR(inode.i_mode); +} + +static errcode_t androidify_inode(ext2_filsys fs, ext2_ino_t ino, + struct inode_params *params) +{ + errcode_t retval; + + retval = set_timestamp(fs, ino, params); + if (retval) + return retval; + + retval = set_selinux_xattr(fs, ino, params); + if (retval) + return retval; + + return set_perms_and_caps(fs, ino, params); +} + +static int walk_dir(ext2_ino_t dir EXT2FS_ATTR((unused)), + int flags EXT2FS_ATTR((unused)), + struct ext2_dir_entry *de, + int offset EXT2FS_ATTR((unused)), + int blocksize EXT2FS_ATTR((unused)), + char *buf EXT2FS_ATTR((unused)), void *priv_data) +{ + __u16 name_len; + errcode_t retval; + struct inode_params *params = (struct inode_params *)priv_data; + + name_len = de->name_len & 0xff; + if (!strncmp(de->name, ".", name_len) + || (!strncmp(de->name, "..", name_len))) + return 0; + + if (asprintf(¶ms->filename, "%s/%.*s", params->path, name_len, + de->name) < 0) { + params->error = ENOMEM; + return -ENOMEM; + } + + if (!strncmp(de->name, "lost+found", 10)) { + retval = set_selinux_xattr(params->fs, de->inode, params); + if (retval) + goto end; + } else { + retval = androidify_inode(params->fs, de->inode, params); + if (retval) + goto end; + if (is_dir(params->fs, de->inode)) { + char *cur_path = params->path; + char *cur_filename = params->filename; + params->path = params->filename; + retval = ext2fs_dir_iterate2(params->fs, de->inode, 0, NULL, + walk_dir, params); + if (retval) + goto end; + params->path = cur_path; + params->filename = cur_filename; + } + } + +end: + free(params->filename); + params->error |= retval; + return retval; +} + +errcode_t __android_configure_fs(ext2_filsys fs, char *src_dir, + char *target_out, + char *mountpoint, + fs_config_f fs_config_func, + struct selabel_handle *sehnd, + time_t fixed_time, + const struct ugid_map* uid_map, + const struct ugid_map* gid_map) +{ + errcode_t retval; + struct inode_params params = { + .fs = fs, + .src_dir = src_dir, + .target_out = target_out, + .fs_config_func = fs_config_func, + .sehnd = sehnd, + .fixed_time = fixed_time, + .path = mountpoint, + .filename = mountpoint, + .mountpoint = mountpoint, + .uid_map = uid_map, + .gid_map = gid_map, + .error = 0 + }; + + /* walk_dir will add the "/". Don't add it twice. */ + if (strlen(mountpoint) == 1 && mountpoint[0] == '/') + params.path = ""; + + retval = androidify_inode(fs, EXT2_ROOT_INO, ¶ms); + if (retval) + return retval; + + retval = ext2fs_dir_iterate2(fs, EXT2_ROOT_INO, 0, NULL, walk_dir, + ¶ms); + if (retval) + return retval; + return params.error; +} + +errcode_t android_configure_fs(ext2_filsys fs, char *src_dir, char *target_out, + char *mountpoint, + struct selinux_opt *seopts EXT2FS_ATTR((unused)), + unsigned int nopt EXT2FS_ATTR((unused)), + char *fs_config_file, time_t fixed_time, + const struct ugid_map* uid_map, + const struct ugid_map* gid_map) +{ + errcode_t retval; + fs_config_f fs_config_func = NULL; + struct selabel_handle *sehnd = NULL; + + /* Retrieve file contexts */ +#if !defined(__ANDROID__) + if (nopt > 0) { + sehnd = selabel_open(SELABEL_CTX_FILE, seopts, nopt); + if (!sehnd) { + com_err(__func__, -EINVAL, + _("while opening file contexts \"%s\""), + seopts[0].value); + return -EINVAL; + } + } +#else + sehnd = selinux_android_file_context_handle(); + if (!sehnd) { + com_err(__func__, -EINVAL, + _("while opening android file_contexts")); + return -EINVAL; + } +#endif + + /* Load the FS config */ + if (fs_config_file) { + retval = load_canned_fs_config(fs_config_file); + if (retval < 0) { + com_err(__func__, retval, + _("while loading fs_config \"%s\""), + fs_config_file); + return retval; + } + fs_config_func = canned_fs_config; + } else if (mountpoint) + fs_config_func = fs_config; + + return __android_configure_fs(fs, src_dir, target_out, mountpoint, + fs_config_func, sehnd, fixed_time, + uid_map, gid_map); +} diff --git a/contrib/android/perms.h b/contrib/android/perms.h new file mode 100644 index 000000000..6d6a21299 --- /dev/null +++ b/contrib/android/perms.h @@ -0,0 +1,65 @@ +#ifndef ANDROID_PERMS_H +# define ANDROID_PERMS_H + +# include "config.h" +# include + +typedef void (*fs_config_f)(const char *path, int dir, + const char *target_out_path, + unsigned *uid, unsigned *gid, + unsigned *mode, uint64_t *capabilities); + +/* + * Represents a range of UID/GID mapping. + * This maps the id in [|parent_id|, |parent_id| + |length|) into + * [|child_id|, |child_id| + |length|) + */ +struct ugid_map_entry { + unsigned int child_id; + unsigned int parent_id; + unsigned int length; +}; + +struct ugid_map { + /* The number of elements in |entries|. */ + size_t size; + + /* An array of entries. If |size| is 0, this is a null pointer. */ + struct ugid_map_entry* entries; +}; + +# ifdef _WIN32 +struct selabel_handle; +static inline errcode_t android_configure_fs(ext2_filsys fs, + char *src_dir, + char *target_out, + char *mountpoint, + void *seopts, + unsigned int nopt, + char *fs_config_file, + time_t fixed_time, + const struct ugid_map* uid_map, + const struct ugdi_map* gid_map) +{ + return 0; +} +# else +# include +# include +# if defined(__ANDROID__) +# include +# endif +# include +# include + +errcode_t android_configure_fs(ext2_filsys fs, char *src_dir, + char *target_out, + char *mountpoint, + struct selinux_opt *seopts, + unsigned int nopt, + char *fs_config_file, time_t fixed_time, + const struct ugid_map* uid_map, + const struct ugid_map* gid_map); + +# endif +#endif /* !ANDROID_PERMS_H */ diff --git a/contrib/build-rpm b/contrib/build-rpm new file mode 100644 index 000000000..0b0607151 --- /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 000000000..cef4cc686 --- /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 000000000..abcecb36f --- /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 000000000..de0b41f78 --- /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 000000000..d4273d881 --- /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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 000000000..2a983482e --- /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 000000000..4133b6323 --- /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 000000000..98b86b066 --- /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 000000000..b1d3d1f8c --- /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 000000000..3934d170b --- /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 000000000..2264f6233 --- /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 000000000..34dd56a0c --- /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 000000000..8345fa1ae --- /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 000000000..8bd344b70 --- /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 000000000..7dddab305 --- /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 000000000..e1be95038 --- /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 000000000..7ace8c095 --- /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 000000000..4f1f552c8 --- /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 000000000..420512051 --- /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 000000000..c77708460 --- /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 000000000..3cf3c8d03 --- /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 000000000..5b717cb7c --- /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 000000000..7b2cb17bb --- /dev/null +++ b/debian/changelog @@ -0,0 +1,4338 @@ +e2fsprogs (1.44.5-1) unstable; urgency=medium + + * New upstream version + * Avoid overflows when tracking the number of files defragged + by e4defrag (Closes: #888899) + * Fix groff formatting nits in various man pages (Closes: #916188) + * Fix location of libext2fs documentation (Closes: #915942) + * Fix regression so we are correctly translating Posix ACL's + in libext2fs + * Use the online free block counts so e2freefrag's percentages + are correct + * Fix a false warning that tune2fs will take long time to change + a UUID if the metadata_csum feature is not enabled + * Fix mk_cmds so it works on a usrmerge system when e2fsprogs is built + on a non-usrmerge system (Closes: #914087) + * E2fsck will avoid offering to set the inline_data feature flag + unnecessarily + * E4defrag will handle the case where it is running as root and it can't + find the file system to open more gracefully (Closes: #907634) + * Fix a bug where resize2fs was failing to update the extent tree + checksums in an corner case + * Fix fuse2fs's command line parsing when options are specified after + the target device/image + * Fix a bug which could cause e2fsprogs tools to segfault on a corrupted + file system where the journal's s_nr_users is impossibly large. + * E2image now includes the mmp block (if needed) when creating a + metadata-only image. + * When e2fsck notices it could optimize an extent tree, it will now ask + "Optimize?" instead of "Fix?", which was confusing some users since it + implied that something was broken. + + -- Theodore Y. Ts'o Sat, 15 Dec 2018 22:46:49 -0500 + +e2fsprogs (1.44.4-2) unstable; urgency=medium + + * tune2fs fix dereference of freed memory after journal + * fix verity support + * Generate NEWS.gz for e2fsprogs's package documentation directory + * Update Debian policy compliance to 4.2.0 + * Improve version dependency for libcom-err and ss2 for e2fsprogs + + -- Theodore Y. Ts'o Wed, 22 Aug 2018 19:30:17 -0400 + +e2fsprogs (1.44.4-1) unstable; urgency=medium + + * New upstream release + * Add basic support for the ext4 verity (fsverity) feature + * E2fsck will fix file systems that have both the resize_inode + and meta_bg feature enabled + * Debugfs's ncheck command will now correctly inodes that have + multiple hard links + * Remove kilo/kibi rant (Closes: #757831) + * Update Danish, Spanish, and Swedish translations + * Fix symlink to directory conversions (Closes: #905195) + + -- Theodore Y. Ts'o Sat, 18 Aug 2018 20:46:29 -0400 + +e2fsprogs (1.44.3-1) unstable; urgency=medium + + * New upstream release + * Include hashmap.h in the libext2fs2 package + * Update debian policy compliance to 4.1.5 + + -- Theodore Y. Ts'o Tue, 10 Jul 2018 01:23:17 -0400 + +e2fsprogs (1.44.3~rc2-1) unstable; urgency=low + + * New upstream release + * Debugfs's inode_dump and xattr_dump commands have new options to + display the low-level contents of an inode's i_blocks and extra + space, and to better be able to debug corrupted extended attributes. + * The dumpe2fs command now will show information about the Multi-Mount + Protection (MMP) block, if present + * E2fsck, dumpe2fs, and debugfs is now much more robust at handling + badly (or maliciously) corrupted file systems. + * E2fsck will now offer to enable the dir_nlink feature if it is + required by the file system + * The project id field in the inode is now properly byte-swapped on + big-endian systems + * E2fsprogs better handles recent kernels which reports old error + conditions via the first fsync() after the file is opened + * Updated/fixed various man pages + * Update Czech, Dutch, Spanish, French, Polish, Swedish, Ukrainian, and + Vietnamese translations + * Update debian policy compliance to 4.1.4 + + -- Theodore Y. Ts'o Tue, 3 Jul 2018 23:31:40 -0400 + +e2fsprogs (1.44.2-1) unstable; urgency=medium + + * New upstream release + * Demote e2fsprogs from Essential: yes to XB-Important: yes + (Closes: #474540) + * Fix mke2fs to print a more useful/correct error message if + ext2fs_close_free() fails at the end of the file system + creation process + * Improve chattr's man page + * Update Polish translation + + -- Theodore Y. Ts'o Mon, 14 May 2018 19:59:27 -0400 + +e2fsprogs (1.44.1-2) unstable; urgency=medium + + * Fix e2image handling of e2i files on big endian systems + * Add sanity checks for inodes containing xattr values to prevent + maliciously crafted file systems from causing crashes caused by + infinite recursion + * Fix e2fsck so that quota usage is adjusted when clearing orphaned + inodes + * Fix filefrag so that unknown flags returned by FIEMAP won't cause a + buffer overrun + + -- Theodore Y. Ts'o Tue, 10 Apr 2018 11:04:36 -0400 + +e2fsprogs (1.44.1-1) unstable; urgency=medium + + * New upstream release + * Fix FTBFS problem on Hurd (Closes: #893590) + * Fix e2fsck support of HTree directories on big-endian systems + * Fix miscellaneous e2image image handling for file systems with bigalloc + and meta_bg features enabled. + * Fix orphan list handling of inodes on bigalloc file systems (and other + situations where inodes need to be deleted or truncated) in e2fsck. + * Update Sweedish translation. + * Add Vcs-* headers in Debian packaging (Closes: #887512) + * Speed up reading bitmap blocks in debugfs when opening large file + systems. + * Add clarifications to chattr's man page. (Closes: #890390) + + -- Theodore Y. Ts'o Sat, 24 Mar 2018 15:13:28 -0400 + +e2fsprogs (1.44.0-1) unstable; urgency=medium + + * New upstream release + * Update Czech, Spanish, French, Malay, and Ukrainian translations. + + -- Theodore Y. Ts'o Wed, 07 Mar 2018 14:39:52 -0500 + +e2fsprogs (1.44.0~rc2-1) experimental; urgency=medium + + * New upstream release + * Fix FTBFS problem on Hurd + * Improved e2fsck's consistency checking for symlink. + + -- Theodore Y. Ts'o Sun, 04 Mar 2018 15:57:21 -0500 + +e2fsprogs (1.44.0~rc1-1) experimental; urgency=low + + * New upstream release + * Add support for the large_dir feature + * Add support for the ea_data feature + * Resize2fs will not complain about online resizes of bigalloc file + systems + * Debugfs's ls command will now print the high bits of the mode bits + * Fix some corner cases with tune2fs and journal replay + * Add support for libreadline.so.7 + * E2freefrag will now use the GETFSMAP ioctl for mounted file systems + * E2fsck is now much faster when scanning extents on bigalloc file systems + * Fix various compiler and UBSAN warnings + + -- Theodore Y. Ts'o Tue, 27 Feb 2018 16:56:32 -0500 + +e2fsprogs (1.43.9-2) unstable; urgency=medium + + * Fix upgrade when there are two installations of a library (for + different architectures) that we are transitioning to the new package + name. (Closes: #890590) + * Add support for libreadline.so.7 to libss + * Fix tune2fs's journal recovery support + * Fix tune2fs to require a freshly checked file system if turning off + the metadata_csum feature and UUID has been changed. + + -- Theodore Y. Ts'o Sat, 24 Feb 2018 20:48:29 -0500 + +e2fsprogs (1.43.9-1) unstable; urgency=medium + + * Remove some obsolete flags and add document new flags in the chattr + man page + * Remove misplaced "MNP is unsupported" message from debugfs + * Suppress false positive lintian warning about "new essential + package" (caused by preparatory work to make the e2fsprogs + package no longer essential) + * Fixing missing "General" in "GNU General Public License" in + copyright files. + * Fix whitespace issue in the debian control file + * Update the Hungarian translation. + * Rename the packages e2fslibs* to libext2fs* and libcomerr2* to + libcom-err2* to conform with the standard Debian library package + naming conventions. (Closes: #269569) + + -- Theodore Y. Ts'o Thu, 08 Feb 2018 13:09:49 -0500 + +e2fsprogs (1.43.8-2) unstable; urgency=medium + + * Update debian policy version to 4.1.3 + * Mark library packages as priority: optional + * Simplify the debian/rules file and don't build e2fsprogs-l10n + unnecessarily + * Fix FTBFS on big-endian systems (Closes: #886119) + * Add support for the build profile: noudeb + * Add support for the build profile: pkg.e2fsprogs.no-fuse2fs + * Add support for the build profile: pkg.e2fsprogs.no-static-e2fsck + + -- Theodore Y. Ts'o Wed, 03 Jan 2018 16:18:40 -0500 + +e2fsprogs (1.43.8-1) unstable; urgency=medium + + * New upstream version + * Fix a bug where updated bitmap checks might not be written to disk. + (Closes: #883869) + * Add missing byte swaps for newly added fields in the superbloc + * Fix a potential use after free bug in e2fsck when fixing a corrupted + root node in directory hash tree. + * Fix a bug in e2fsck where a badly/maliciously corrupted superblock + (which is not fixed due to the -n option, for example) can cause a + floating point exception when printing the summary statistics. + (Closes: #879220) + * Fix debugfs's ncheck command so that it correctly prints the inode + number when printing an error message. + * Fix a bug in e2freefrag where it could print an incorrect free blocks + count on a file system with the 64-bit block number feature. + * Update the German, Serbian, Spanish, and Ukrainian translations. + * Fix a bug where resize2fs's free blocks sanity check could fail with a + false positive and refuse to check a file system with the 64-bit block + number feature. + * Fix and clarify various man pages and documentations. Also fixed up + some random usage texts that were incorrect. (Closes: #880483) + * Add missing copyright file for the e2fsprogs-l10 package. (Closes: + #880207) + * Add missing Multi-arch hints (Closes: #881408, #881590, #881591) + + -- Theodore Y. Ts'o Mon, 01 Jan 2018 19:44:41 -0500 + +e2fsprogs (1.43.7-1) unstable; urgency=medium + + * New upstream version + * Fix error handling in debugfs, fuse2fs, and tune2fs so errors while + replaying the journal will not cause a segfault in some corner cases + * Fix resize2fs to avoid it from either failing or corrupting the file + system image in certain corner cases when doing an off-line resize + * Fix many spelling mistakes in various man pages, code comments, and + program messages. + * Fix e2fsck and debugfs so that maliciously corrupted file systems will + not cause buffer overflows (Closes: #873757, #878104) + * Update German translation (Closes: #833514) + * Update debian policy version to 4.1.1 + * Fix FTBFS caused by debhelper/10.9 and references to obsolete packages + in the rules file (Closes: #876551) + * Promote e2fsprogs-l10n from suggests to recommends (Closes: #873812) + * Make e2fsprogs-l10n be arch:all (Closes: #873813) + + -- Theodore Y. Ts'o Mon, 16 Oct 2017 01:20:54 -0400 + +e2fsprogs (1.43.6-1) unstable; urgency=medium + + * New upstream version + * Break out the locale files to a separate package (e2fsprogs-l10n) to + reduce the size of the e2fsprogs package, since it is an + essential/required package. + * Remove support for building uuid/blkid packages on pre-Wheezy + distributions (which are no longer supported). + * Remove support for pre-Multiarch versions of Debian (which are no + longer supported). + * Fixed the printing of quota inconsistency messages in e2fsck on 32-bit + platforms. Also fixed a bug which caused project quota problems to be + labelled as group quota problems. + * Fixed a UI problem with yes/no questions when there are fuzzy + translation entries which caused some messages to be printed in English + and some in the language specified by the locale. (Closes: #856586) + * Fix some out-of-bounds memory accesses in e2fsck caused by (usually + maliciously) corrupted file systems. (Closes: #871539, 871540) + * Optimize CPU usage in e2fsck for very large, very fragmented sparse + files. + * Avoid creating file systems that use project quotas and 128 byte + inodes. + * Improve tune2fs's message when a file system needs to be checked using + e2fsck -f before running certain complex tune2fs operations. (Closes: + #857336) + * Improve e2fsck's message when the proceed_delay option in + /etc/e2fsck.conf is enabled. (Closes: #857336) + * Fix an LFS bug in e2image. (Closes: #855246) + * Fix portability problem caused by the fact that disks are character + mode devices systems with FreeBSD kernels. + * Update the Czech, French, Polish, Swedish, and Vietnamese translations. + + -- Theodore Y. Ts'o Tue, 29 Aug 2017 00:58:29 -0400 + +e2fsprogs (1.43.5-1) unstable; urgency=medium + + * New upstream version + * Fix ext2fs_sync_device() so it returns the proper error code if the + BLKFLSBUF ioctl fails for some reason. + * Fix a potential crash in tune2fs when enabling project quota when the + file system has no inodes by fixing error handling in the + quota_write_inode() in libsupport. + * Fix a bug in debugfs's "ls -p" handling which could cause it to print + garbage after a file name in a directory entry. + * Fix a number of bugs in debugfs, dumpe2fs, e2fsck, tune2fs, and + resize2fs where a carefully/maliciously corrupted file systems (found + by American Fuzzy Lop) could these programs to crash or hang. + (Closes: #868489) + * E2fsck no longer issues some harmless bitmap warnings caused by a + corrupted file system; since those corruptions will be fixed up by + e2fsck later, there's no point issuing these internal warnings. + * E2fsck will now notice invalid quota inode numbers, and offer to fix + them. + * Fix a regression introduced in e2fsprogs 1.43 which broke mke2fs's + hugefile creation so that they aren't contiguous. + * Fix how backup superblocks are written in big endian systems so they + are all correctly byte swapped. + * Fixed tune2fs's support for enabling and disabling project quota. + * The badblock program now properly handles languages which have + multi-column wide character such as Chinese. (Closes: #860926) + * The mke2fs -U option now accepts "null", "clear", "random", or "time" + just as tune2fs's -U option. + * Fix e2fsck's -E bmap2extent feature (which converts a file to use + extents from indirect block maps) so that it handles sparse files + correctly. + * Fix libext2fs to correctly handle accounting for an external xattr + block on bigalloc file systems. + * Fix e2fsck to correctly handle quota accounting when deleting files + that have multiply-claimed blocks pass 1b. + * Fix potential buffer overrun bug in e2fsck when using 128 byte inodes. + * E2fsck's extent tree optimization can now be disabled via an + command-line extended option or via an e2fsck.conf configuration + parameter. + * The e2fsck program now properly updates the quota accounting when + optimizing the extent tree. + * Fix some error handling in e4crypt when operating on keyring ID's. + * Fix e2fsck's quota handling when the bigalloc feature is enabled. + * The libext2fs file system now uses readahead when opening file systems + to speed up opening very large file systems with the meta_bg option. + * If e2fsck logging is enabled, e2fsck will report the exit code in the + last line of the log file. + * Debugfs can now open file systems with a bad superblock checksum, and + the show_super_stats command will print the expected checksum. + * Fix a regression introduced in e2fsprogs 1.43.4 where tune2fs was not + able to correctly enable the quota feature. (Closes: #855417) + * E2fsck will only return an exit status code of 1 if it has fixed a + file system corruption. If it only performed an optimal optimization + of internal file system metadata, it will now return 0. + * Fix e2fsck so it won't check inode fields of deleted inodes. + * Removed a debugging printf in libsupport which could result to some + extraneous and confusing output if the user specifies a quota type. + * The debugfs logdump command now accepts a new -S option which will + cause it to print information about the journal superblock. + * Added a missing space in debugfs's ls -l output to separate the size + and date fields. + * Update the Czech, Danish, Dutch, French, Hungarian, Polish, Serbian, + Spanish, Swedish, Ukrainian, and Vietnamese translations. (Closes: #862482) + * Update various man pages. (Closes: #867895, #865584) + * Fix various compiler and UBSAN warnings. + * Remove obsolete Conflict/Replaces headers in control file (Closes: #866623) + * Remove obsolete mips libraries used to build arcboot (Closes: #864144) + + -- Theodore Y. Ts'o Fri, 04 Aug 2017 01:13:34 -0400 + +e2fsprogs (1.43.4-2) unstable; urgency=medium + + * Re-enable metadata_csum for Debian (which was accidentally disabled + for 1.43.4-1) + + -- Theodore Y. Ts'o Tue, 31 Jan 2017 19:54:55 -0500 + +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 metadata 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 migrate 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: Hungarian 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/efficient 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, Swedish, 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 module 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 the command 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 Esperanto and Ukrainian translations, and update Czech, Dutch, + French, German, Italian, Polish, Swedish, 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 during 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, Swedish, 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 will 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, Swedish, 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, Swedish, 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 Swedish, 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 Swedish, 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 segfault 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 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. + * 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 inodes 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 when it 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 overrides 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 packages 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 uninitialized 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 Swedish 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 apostrophe'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 filesystems + (Closes: #535530) + * Update French, Polish, Czech, Indonesian, and Swedish 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 + uninitialized 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 program 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 fields 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, Swedish, + 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 features 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, Swedish, 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, Swedish, 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, Swedish, 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 filesystem 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, Swedish, 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 compatibility 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 corrupt + 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 cause bid_type to be corrupted + * mke2fs: Add sanity 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 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 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. + * Improve 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 Coverity 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 platforms. + * Fix mklost+ound so that it creates a full-sized directory on 4k and + larger block sizes. + * Add mke2fs.conf configuration file to configure 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 Swedish 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 + simultaneous 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 filesystem'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 circumstances + 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 during 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_* environment variables 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 coherency 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 newly 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 corresponds 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 overridden 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 check 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 dependency. + (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, megabytes, 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 section 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 readline 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 unmounted 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 no one + 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 adaption 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 maintenance 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 noticeable 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 versioned (lintian). + * Updated copyright file (upstream location, packaging copyright notice + for previous maintainers and for Alcove). + * Remove call to dh_testversion, use versioned 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 explicitly - + 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 parallelize 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 "emergency 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-compiling + (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 + tidied 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 overridden 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 000000000..463eb7673 --- /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 000000000..aff20cc9a --- /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 b/debian/comerr-dev.files new file mode 100644 index 000000000..a3b8b0e47 --- /dev/null +++ b/debian/comerr-dev.files @@ -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/comerr-dev.postinst b/debian/comerr-dev.postinst new file mode 100644 index 000000000..aae743af0 --- /dev/null +++ b/debian/comerr-dev.postinst @@ -0,0 +1,30 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/comerr-dev +SYMLINK_TARGET=libcomerr2 +SYMLINK_TARGET2=libcom-err2 + +if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ] +then + if symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" || + symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET2" + then + rm -f "${SYMLINK}.dpkg-backup" + fi +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/comerr-dev.postrm b/debian/comerr-dev.postrm new file mode 100644 index 000000000..8f9e679bf --- /dev/null +++ b/debian/comerr-dev.postrm @@ -0,0 +1,36 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/comerr-dev +SYMLINK_TARGET=libcomerr2 +SYMLINK_TARGET2=libcom-err2 + +if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ] +then + rm -f "${SYMLINK}.dpkg-backup" +fi +if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] && + [ -n "$2" ] && [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ] +then + if symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" || + symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET2" + then + echo "Restoring backup of $SYMLINK ..." + mv "${SYMLINK}.dpkg-backup" "$SYMLINK" + fi +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/comerr-dev.preinst b/debian/comerr-dev.preinst new file mode 100644 index 000000000..5d8090aa9 --- /dev/null +++ b/debian/comerr-dev.preinst @@ -0,0 +1,31 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/comerr-dev +SYMLINK_TARGET=libcomerr2 +SYMLINK_TARGET2=libcom-err2 + +if [ "$1" = "install" -o "$1" = "upgrade" ] && + [ -n "$2" ] && [ -h "$SYMLINK" ] +then + if symlink_match "$SYMLINK" "$SYMLINK_TARGET" || + symlink_match "$SYMLINK" "$SYMLINK_TARGET2" + then + mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup" + fi +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/compat b/debian/compat new file mode 100644 index 000000000..ec635144f --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 000000000..346cff836 --- /dev/null +++ b/debian/control @@ -0,0 +1,203 @@ +Source: e2fsprogs +Section: admin +Priority: required +Maintainer: Theodore Y. Ts'o +Build-Depends: gettext, texinfo, pkg-config, libfuse-dev [linux-any kfreebsd-any] , libattr1-dev, debhelper (>= 9.0), libblkid-dev, uuid-dev, m4 +Standards-Version: 4.2.1 +Homepage: http://e2fsprogs.sourceforge.net +Vcs-Browser: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git +Vcs-Git: https://git.kernel.org/pub/scm/fs/ext2/e2fsprogs.git -b debian/master + +Package: fuse2fs +Build-Profiles: +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. + +Package: e2fsck-static +Build-Profiles: +Priority: optional +Depends: ${misc:Depends} +Recommends: sash | bash-static | zsh-static | busybox-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. + +Package: e2fsprogs-l10n +Section: localization +Priority: optional +Depends: e2fsprogs (>= ${binary:Version}), e2fsprogs (<< ${binary:Version}+c~), ${misc:Depends} +Replaces: e2fsprogs (<< 1.43.5-1) +Architecture: all +Multi-Arch: foreign +Description: ext2/ext3/ext4 file system utilities - translations + 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 translations for messages for programs found in + the 'e2fsprogs' package. + +Package: libcomerr2 +Depends: libcom-err2, ${misc:Depends} +Architecture: any +Multi-Arch: same +Priority: optional +Section: oldlibs +Description: transitional package + This is a transitional package. It can safely be removed. + +Package: libcom-err2 +Section: libs +Priority: optional +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: libcomerr2 (<< 1.43.9-1~) +Breaks: libcomerr2 (<< 1.43.9-1~) +Provides: libcomerr2 (= ${binary:Version}) +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +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: optional +Depends: libc6-dev | libc-dev, libcom-err2 (= ${mainBinary}), ${misc:Depends} +Suggests: doc-base +Replaces: e2fslibs-dev (<< 1.33-2), libkrb5-dev (<< 1.3) +Architecture: any +Multi-Arch: same +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 +Priority: optional +Depends: libcom-err2, ${shlibs:Depends}, ${misc:Depends} +Replaces: e2fsprogs (<< 1.34-1) +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +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: optional +Depends: libc6-dev | libc-dev, libss2 (= ${mainBinary}), comerr-dev, ${misc:Depends} +Architecture: any +Multi-Arch: same +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. + +Package: e2fsprogs-udeb +Build-Profiles: +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. + +Package: e2fslibs +Depends: libext2fs2, ${misc:Depends} +Architecture: any +Multi-Arch: same +Priority: optional +Section: oldlibs +Description: transitional package + This is a transitional package. It can safely be removed. + +Package: e2fslibs-dev +Depends: libext2fs-dev, ${misc:Depends} +Architecture: all +Priority: optional +Section: oldlibs +Description: transitional package + This is a transitional package. It can safely be removed. + +Package: libext2fs2 +Section: libs +Priority: optional +Depends: ${shlibs:Depends}, ${misc:Depends} +Replaces: e2fslibs (<< 1.43.9-1~) +Breaks: e2fslibs (<< 1.43.9-1~) +Provides: e2fslibs (= ${binary:Version}) +Architecture: any +Multi-Arch: same +Pre-Depends: ${misc:Pre-Depends} +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: libext2fs-dev +Section: libdevel +Priority: optional +Depends: libc6-dev | libc-dev, comerr-dev, libext2fs2 (= ${binary:Version}), ${misc:Depends} +Replaces: e2fslibs-dev (<< 1.43.9-1~) +Breaks: e2fslibs-dev (<< 1.43.9-1~) +Provides: e2fslibs-dev (= ${binary:Version}) +Suggests: doc-base +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 +XB-Important: yes +Pre-Depends: ${shlibs:Depends}, ${misc:Depends}, libblkid1, libuuid1 +Multi-Arch: foreign +Suggests: gpart, parted, fuse2fs, e2fsck-static +Recommends: e2fsprogs-l10n +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. diff --git a/debian/control.legacy-dbg b/debian/control.legacy-dbg new file mode 100644 index 000000000..d01843606 --- /dev/null +++ b/debian/control.legacy-dbg @@ -0,0 +1,44 @@ +Package: e2fsprogs-dbg +Build-Profiles: +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. + +Package: libext2fs2-dbg +Build-Profiles: +Section: debug +Priority: extra +Depends: libext2fs2 (= ${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: libcom-err2-dbg +Build-Profiles: +Section: debug +Priority: extra +Depends: libcom-err2 (= ${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 +Build-Profiles: +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. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 000000000..e6f467618 --- /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 000000000..b5b5d3fd4 --- /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 +General 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 000000000..15a7716ee --- /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 000000000..e756adeae --- /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.postinst b/debian/e2fslibs-dev.postinst new file mode 100644 index 000000000..def667391 --- /dev/null +++ b/debian/e2fslibs-dev.postinst @@ -0,0 +1,26 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/e2fslibs-dev +SYMLINK_TARGET=e2fslibs + +if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ] && + symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" +then + rm -f "${SYMLINK}.dpkg-backup" +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/e2fslibs-dev.postrm b/debian/e2fslibs-dev.postrm new file mode 100644 index 000000000..54841afdf --- /dev/null +++ b/debian/e2fslibs-dev.postrm @@ -0,0 +1,32 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/e2fslibs-dev +SYMLINK_TARGET=e2fslibs + +if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ] +then + rm -f "${SYMLINK}.dpkg-backup" +fi +if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] && + [ -n "$2" ] && [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ] && + symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" +then + echo "Restoring backup of $SYMLINK ..." + mv "${SYMLINK}.dpkg-backup" "$SYMLINK" +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/e2fslibs-dev.preinst b/debian/e2fslibs-dev.preinst new file mode 100644 index 000000000..b3f9a4b01 --- /dev/null +++ b/debian/e2fslibs-dev.preinst @@ -0,0 +1,27 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/e2fslibs-dev +SYMLINK_TARGET=e2fslibs + +if [ "$1" = "install" -o "$1" = "upgrade" ] && + [ -n "$2" ] && [ -h "$SYMLINK" ] && + symlink_match "$SYMLINK" "$SYMLINK_TARGET" +then + mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup" +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/e2fsprogs-l10n.copyright b/debian/e2fsprogs-l10n.copyright new file mode 100644 index 000000000..9dbe5c003 --- /dev/null +++ b/debian/e2fsprogs-l10n.copyright @@ -0,0 +1,26 @@ +This is the Debian GNU/Linux prepackaged version of the translation +files of the EXT2 file system utilities. 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 +General 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/e2fsprogs-l10n.files b/debian/e2fsprogs-l10n.files new file mode 100644 index 000000000..363548064 --- /dev/null +++ b/debian/e2fsprogs-l10n.files @@ -0,0 +1 @@ +usr/share/locale diff --git a/debian/e2fsprogs-udeb.lintian-overrides b/debian/e2fsprogs-udeb.lintian-overrides new file mode 100644 index 000000000..683a11fcd --- /dev/null +++ b/debian/e2fsprogs-udeb.lintian-overrides @@ -0,0 +1,2 @@ +e2fsprogs-udeb udeb: package-name-doesnt-match-sonames libcom-err2 libe2p2 libext2fs2 libss2 + diff --git a/debian/e2fsprogs-udeb.shlibs.local b/debian/e2fsprogs-udeb.shlibs.local new file mode 100644 index 000000000..b41b583e6 --- /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 000000000..e845566c0 --- /dev/null +++ b/debian/e2fsprogs.docs @@ -0,0 +1 @@ +README diff --git a/debian/e2fsprogs.files b/debian/e2fsprogs.files new file mode 100644 index 000000000..0a22f3143 --- /dev/null +++ b/debian/e2fsprogs.files @@ -0,0 +1,5 @@ +sbin +usr/bin +usr/sbin +usr/share/man +etc diff --git a/debian/e2fsprogs.lintian-overrides b/debian/e2fsprogs.lintian-overrides new file mode 100644 index 000000000..d08270fb6 --- /dev/null +++ b/debian/e2fsprogs.lintian-overrides @@ -0,0 +1 @@ +e2fsprogs: new-essential-package diff --git a/debian/e2fsprogs.postinst b/debian/e2fsprogs.postinst new file mode 100644 index 000000000..00ac363df --- /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 000000000..bfa9f6b07 --- /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 b/debian/e2fsprogs.shlibs.local new file mode 100644 index 000000000..a99d2a0a8 --- /dev/null +++ b/debian/e2fsprogs.shlibs.local @@ -0,0 +1,2 @@ +libext2fs 2 libext2fs2 (= ${binary:Version}) +libe2p 2 libext2fs2 (= ${binary:Version}) diff --git a/debian/fuse2fs.files b/debian/fuse2fs.files new file mode 100644 index 000000000..cd37a70ec --- /dev/null +++ b/debian/fuse2fs.files @@ -0,0 +1,2 @@ +/usr/sbin/fuse2fs +/usr/share/man/man1/fuse2fs.1 diff --git a/debian/gbp.conf b/debian/gbp.conf new file mode 100644 index 000000000..c974add93 --- /dev/null +++ b/debian/gbp.conf @@ -0,0 +1,4 @@ +[DEFAULT] +pristine-tar = True +upstream-tag='v%(version)s' +debian-branch=debian/master diff --git a/debian/libblkid-dev.files b/debian/libblkid-dev.files new file mode 100644 index 000000000..7b3da3681 --- /dev/null +++ b/debian/libblkid-dev.files @@ -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 000000000..8be818b51 --- /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 b/debian/libblkid1.files new file mode 100644 index 000000000..54ef86de2 --- /dev/null +++ b/debian/libblkid1.files @@ -0,0 +1 @@ +lib/*/libblkid*.so.* diff --git a/debian/libblkid1.symbols b/debian/libblkid1.symbols new file mode 100644 index 000000000..5ab91f5ed --- /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/libcom-err2.copyright b/debian/libcom-err2.copyright new file mode 100644 index 000000000..578628a54 --- /dev/null +++ b/debian/libcom-err2.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/libcom-err2.files b/debian/libcom-err2.files new file mode 100644 index 000000000..16b039ef3 --- /dev/null +++ b/debian/libcom-err2.files @@ -0,0 +1 @@ +lib/*/libcom_err*.so.* diff --git a/debian/libcom-err2.symbols b/debian/libcom-err2.symbols new file mode 100644 index 000000000..333486904 --- /dev/null +++ b/debian/libcom-err2.symbols @@ -0,0 +1,21 @@ +libcom_err.so.2 libcom-err2 #MINVER# + _et_dynamic_list@Base 1.43.9 + _et_list@Base 1.43.9 + add_error_table@Base 1.43.9 + add_to_error_table@Base 1.43.9 + com_err@Base 1.43.9 + com_err_hook@Base 1.43.9 + com_err_va@Base 1.43.9 + com_right@Base 1.43.9 + com_right_r@Base 1.43.9 + error_message@Base 1.43.9 + error_table_name@Base 1.43.9 + et_list_lock@Base 1.43.9 + et_list_unlock@Base 1.43.9 + free_error_table@Base 1.43.9 + init_error_table@Base 1.43.9 + initialize_error_table_r@Base 1.43.9 + remove_error_table@Base 1.43.9 + reset_com_err_hook@Base 1.43.9 + set_com_err_gettext@Base 1.43.9 + set_com_err_hook@Base 1.43.9 diff --git a/debian/libext2fs-dev.doc-base b/debian/libext2fs-dev.doc-base new file mode 100644 index 000000000..b1151171d --- /dev/null +++ b/debian/libext2fs-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/libext2fs2/html-info/libext2fs.html +Files: /usr/share/doc/libext2fs2/html-info/*.html diff --git a/debian/libext2fs-dev.files b/debian/libext2fs-dev.files new file mode 100644 index 000000000..b2cd6c923 --- /dev/null +++ b/debian/libext2fs-dev.files @@ -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/libext2fs2.files b/debian/libext2fs2.files new file mode 100644 index 000000000..11198f761 --- /dev/null +++ b/debian/libext2fs2.files @@ -0,0 +1,2 @@ +lib/*/libext2fs*.so.* +lib/*/libe2p*.so.* diff --git a/debian/libext2fs2.symbols b/debian/libext2fs2.symbols new file mode 100644 index 000000000..9a8d9db34 --- /dev/null +++ b/debian/libext2fs2.symbols @@ -0,0 +1,660 @@ +libe2p.so.2 libext2fs2 #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_list_journal_super@Base 1.43.5 + 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 libext2fs2 #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_block3@Base 1.44.0~rc1 + 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_djb2_hash@Base 1.44.3~rc1 + 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_block_rehash@Base 1.44.0~rc1 + ext2fs_ext_attr_hash_entry2@Base 1.44.0~rc1 + 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_ea_inode_hash@Base 1.44.0~rc1 + ext2fs_get_ea_inode_ref@Base 1.44.0~rc1 + 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_hashmap_add@Base 1.44.3~rc1 + ext2fs_hashmap_create@Base 1.44.3~rc1 + ext2fs_hashmap_free@Base 1.44.3~rc1 + ext2fs_hashmap_iter_in_order@Base 1.44.3~rc1 + ext2fs_hashmap_lookup@Base 1.44.3~rc1 + ext2fs_htree_intnode_maxrecs@Base 1.44.0~rc1 + 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_is_fast_symlink@Base 1.44.0~rc1 + 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_block3@Base 1.44.0~rc1 + 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_ea_inode_hash@Base 1.44.0~rc1 + ext2fs_set_ea_inode_ref@Base 1.44.0~rc1 + 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 + sparse_io_manager@Base 1.44.0~rc1 + sparsefd_io_manager@Base 1.44.0~rc1 + 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/libss2.copyright b/debian/libss2.copyright new file mode 100644 index 000000000..f03983240 --- /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 b/debian/libss2.files new file mode 100644 index 000000000..386e18542 --- /dev/null +++ b/debian/libss2.files @@ -0,0 +1 @@ +lib/*/libss*.so.* diff --git a/debian/libss2.symbols b/debian/libss2.symbols new file mode 100644 index 000000000..b6fe40b31 --- /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 000000000..f346739f6 --- /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 b/debian/libuuid1.files new file mode 100644 index 000000000..0761f3b8c --- /dev/null +++ b/debian/libuuid1.files @@ -0,0 +1 @@ +lib/*/libuuid*.so.* diff --git a/debian/libuuid1.postinst b/debian/libuuid1.postinst new file mode 100644 index 000000000..5336fcfdf --- /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 000000000..8c286eeab --- /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 000000000..5a00431a2 --- /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 000000000..9bbdea492 --- /dev/null +++ b/debian/rules @@ -0,0 +1,479 @@ +#! /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. + +.PHONY: binary binary-arch binary-indep build build-arch build-indep \ + build-bf build-std install install-udeb \ + clean checkroot mrproper debug_flags debian-files + +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) +DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) + +# Allow distro-specific behaviour +DISTRO :=$(shell sed -ne '/DISTRIB_ID/s/.*=//p' /etc/lsb-release 2>/dev/null || echo Debian) + +ifeq ($(DEB_HOST_ARCH_OS), hurd) +SKIP_FUSE2FS=yes +endif + +ifneq ($(filter pkg.e2fsprogs.no-fuse2fs,$(DEB_BUILD_PROFILES)),) +SKIP_FUSE2FS=yes +endif + +ifneq ($(filter pkg.e2fsprogs.no-static-e2fsck,$(DEB_BUILD_PROFILES)),) +SKIP_E2FSCK_STATIC=yes +endif + +ifneq ($(filter noudeb,$(DEB_BUILD_PROFILES)),) +SKIP_UDEB=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 +DBG_PACKAGES += -pe2fsprogs-dbg -plibext2fs-dbg -plibcom-err2-dbg -plibss2-dbg +export DEB_BUILD_PROFILES += pkg.e2fsprogs.legacy-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) + +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 +libcomerrdir ?= ${debdir}/libcom-err${COMERR_SOVERSION} +comerrdevdir ?= ${debdir}/comerr-dev +libcomerrdbgdir ?= ${debdir}/libcom-err2-dbg +libssdir ?= ${debdir}/libss${SS_SOVERSION} +ssdevdir ?= ${debdir}/ss-dev +libssdbgdir ?= ${debdir}/libss2-dbg +libext2dir ?= ${debdir}/libext2fs2 +libext2devdir ?= ${debdir}/libext2fs-dev +libext2dbgdir ?= ${debdir}/libext2fs2-dbg +maindir ?= ${debdir}/e2fsprogs +e2fsckstaticdir ?= ${debdir}/e2fsck-static +debugdir ?= ${debdir}/e2fsprogs-dbg +stdbuilddir ?= ${debdir}/BUILD-STD +# 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 -A 10 | grep ^Priority: | cut -d ' ' -f 2) + +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 := libext2fs libcomerr2 libss2 +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 + +UTIL_CONF_FLAGS ?= --disable-fsck --disable-libblkid \ + --disable-libuuid --disable-uuidd + +ifneq ($(SKIP_FUSE2FS),) +UTIL_CONF_FLAGS += --disable-fuse2fs +endif + +BACKTRACE_CONF_FLAGS ?= $(shell if ${debdir}/scripts/test-backtrace ; then echo --disable-backtrace ; fi) + +COMMON_CONF_FLAGS = --disable-e2initrd-helper \ + --infodir=/usr/share/info --enable-symlink-install \ + --with-multiarch=$(DEB_HOST_MULTIARCH) \ + $(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 + +DBG_PACKAGES= + +ifeq ($(SKIP_UDEB),) +INSTALL_UDEB = install-udeb +endif + +debian-files: +ifneq ($(USE_DBGSYM),yes) + if test ! -f debian/control.save; then \ + mv debian/control debian/control.save ; \ + cat debian/control.save debian/control.legacy-dbg \ + >> debian/control ; \ + fi +endif + +mrproper: clean + if test -f debian/control.save; then \ + mv debian/control.save debian/control ; \ + fi + +${CFGSTDSTAMP}: + dh_testdir + if which dh_update_autotools_config > /dev/null 2>&1 ; then \ + dh_update_autotools_config ;\ + fi + + # 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 + + mkdir -p ${STAMPSDIR} + touch ${CFGSTDSTAMP} + +${CFGBFSTAMP}: + dh_testdir + if which dh_update_autotools_config > /dev/null 2>&1 ; then \ + dh_update_autotools_config ;\ + fi + 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 + $(MAKE) -C ${stdbuilddir} V=1 all +ifneq ($(SKIP_E2FSCK_STATIC),yes) + $(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 ) + cat $(shell /bin/ls -1 ./doc/RelNotes/*.txt | tac) | \ + gzip -9n > ${stdbuilddir}/NEWS.gz + + 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} + rm -f debian/*.substvars + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + 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 ($(SKIP_E2FSCK_STATIC),yes) + # statically-linked fsck + ${INSTALL_PROGRAM} $(E2FSCK_STATIC) ${tmpdir}/sbin + cp ${mandir}/man8/e2fsck.8 ${mandir}/man8/e2fsck.static.8 +endif + +ifeq ($(DEB_HOST_ARCH_OS), hurd) + ${INSTALL} -m 0644 misc/mke2fs-hurd.conf ${tmpdir}/etc/mke2fs.conf +endif + + dh_install -p e2fsprogs --sourcedir=${stdbuilddir} NEWS.gz \ + usr/share/doc/e2fsprogs + dh_movefiles + test -z "`find ${tmpdir} -type f`" + +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) + +binary-indep: install + dh_testdir + dh_testroot + dh_lintian -i + dh_installdocs -i + dh_installchangelogs -i + dh_fixperms -i + dh_compress -i + dh_installdeb -i + dh_gencontrol -i + dh_md5sums -i + dh_builddeb -i + +binary-arch: install $(INSTALL_UDEB) + dh_testdir + dh_testroot + + dh_lintian -a + + # symlinks to prepare dh_installdocs run + + mkdir -p ${debdir}/libss${SS_SOVERSION}/usr/share/doc/libss${SS_SOVERSION} + mkdir -p ${debdir}/ss-dev/usr/share/doc + + mkdir -p ${debdir}/libcom-err${COMERR_SOVERSION}/usr/share/doc/libcom-err${COMERR_SOVERSION} + mkdir -p ${debdir}/comerr-dev/usr/share/doc + + mkdir -p ${debdir}/libext2fs2/usr/share/doc/libext2fs2 + mkdir -p ${debdir}/libext2fs-dev/usr/share/doc + + dh_installdocs -a -Ne2fsprogs-udeb + + # HTML docs + $(INSTALL) -d ${debdir}/libext2fs-dev/usr/share/doc/libext2fs2/html-info/ + $(INSTALL) -p -m 0644 ${stdbuilddir}/doc/*.html \ + ${debdir}/libext2fs-dev/usr/share/doc/libext2fs2/html-info/ + $(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/comerr-dev/html-info/ + $(INSTALL) -p -m 0644 ${stdbuilddir}/lib/et/*.html \ + ${debdir}/comerr-dev/usr/share/doc/comerr-dev/html-info/ + + # texinfo docs + mkdir -p ${debdir}/comerr-dev/usr/share/doc/comerr-dev + $(INSTALL) -p -m 0644 ${topdir}/doc/libext2fs.texinfo \ + ${debdir}/libext2fs-dev/usr/share/doc/libext2fs2/libext2fs.texi + $(INSTALL) -p -m 0644 ${topdir}/lib/et/com_err.texinfo \ + ${debdir}/comerr-dev/usr/share/doc/comerr-dev/com_err.texi + + $(INSTALL) -d ${debdir}/comerr-dev/usr/share/doc/comerr-dev/examples + $(INSTALL) -p -m 0644 lib/ss/ss_err.et \ + ${stdbuilddir}/lib/ext2fs/ext2_err.et \ + ${debdir}/comerr-dev/usr/share/doc/comerr-dev/examples + $(INSTALL) -d ${debdir}/ss-dev/usr/share/doc/ss-dev/examples + $(INSTALL) -p -m 0644 debugfs/debug_cmds.ct \ + ${debdir}/ss-dev/usr/share/doc/ss-dev/examples + + dh_installinfo -pcomerr-dev ${stdbuilddir}/lib/et/com_err.info + dh_installinfo -plibext2fs-dev ${stdbuilddir}/doc/libext2fs.info + + dh_installchangelogs -a + dh_fixperms -a + dh_strip $(call dh_strip_args,e2fsprogs) +ifneq ($(SKIP_E2FSCK_STATIC),yes) + dh_strip $(call dh_strip_args2,e2fsck-static,e2fsprogs) +endif + dh_strip $(call dh_strip_args,libext2fs2) + dh_strip $(call dh_strip_args,libss${SS_SOVERSION}) + dh_strip $(call dh_strip_args,libcom-err${COMERR_SOVERSION}) + dh_strip -a + + # 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 -a + + dh_makeshlibs -a --add-udeb=e2fsprogs-udeb + + $(INSTALL) -D -p -m644 debian/e2fsprogs-udeb.lintian-overrides \ + debian/e2fsprogs-udeb/usr/share/lintian/overrides/e2fsprogs-udeb + dh_installdeb -a + dh_shlibdeps -a -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 -a -Ncomerr-dev -Nss-dev -Ne2fsprogs-udeb + dh_gencontrol -pcomerr-dev \ + -u '-v${COMERR_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}' + dh_gencontrol -pss-dev \ + -u '-v${SS_VERSION}-${MAIN_VERSION} -VmainBinary=${MAIN_VERSION}' +ifeq ($(SKIP_UDEB),) + dh_gencontrol -pe2fsprogs-udeb -- -fdebian/files~ +endif + +ifeq ($(SKIP_UDEB),) + dpkg-distaddfile $(UDEB_NAME) debian-installer $(UDEB_PRIORITY) +endif + dh_md5sums -a + dh_builddeb -a + +binary: binary-indep binary-arch + +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 000000000..d90486a0b --- /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 000000000..e678de0b9 --- /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 000000000..52e733e3f --- /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 libcom-err2 (= ${mainBinary}) diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 000000000..163aaf8d8 --- /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 000000000..b7930bb70 --- /dev/null +++ b/debian/ss-dev.examples @@ -0,0 +1 @@ +debugfs/debug_cmds.ct diff --git a/debian/ss-dev.files b/debian/ss-dev.files new file mode 100644 index 000000000..d0c788ee2 --- /dev/null +++ b/debian/ss-dev.files @@ -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/ss-dev.postinst b/debian/ss-dev.postinst new file mode 100644 index 000000000..bf49c9d9d --- /dev/null +++ b/debian/ss-dev.postinst @@ -0,0 +1,26 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/ss-dev +SYMLINK_TARGET=libss2 + +if [ "$1" = "configure" ] && [ -h "${SYMLINK}.dpkg-backup" ] && + symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" +then + rm -f "${SYMLINK}.dpkg-backup" +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/ss-dev.postrm b/debian/ss-dev.postrm new file mode 100644 index 000000000..c625aae9e --- /dev/null +++ b/debian/ss-dev.postrm @@ -0,0 +1,32 @@ +#!/bin/sh + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/ss-dev +SYMLINK_TARGET=libss2 + +if [ "$1" = "purge" ] && [ -h "${SYMLINK}.dpkg-backup" ] +then + rm -f "${SYMLINK}.dpkg-backup" +fi +if [ "$1" = "abort-install" -o "$1" = "abort-upgrade" ] && + [ -n "$2" ] && [ ! -e "$SYMLINK" ] && [ -h "${SYMLINK}.dpkg-backup" ] && + symlink_match "${SYMLINK}.dpkg-backup" "$SYMLINK_TARGET" +then + echo "Restoring backup of $SYMLINK ..." + mv "${SYMLINK}.dpkg-backup" "$SYMLINK" +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/ss-dev.preinst b/debian/ss-dev.preinst new file mode 100644 index 000000000..8da566ed4 --- /dev/null +++ b/debian/ss-dev.preinst @@ -0,0 +1,27 @@ +#!/bin/bash + +# Abort on error. +set -e + +symlink_match() +{ + local SYMLINK="$1" + local SYMLINK_TARGET="$2" + + [ "$(readlink "$SYMLINK")" = "$SYMLINK_TARGET" ] || \ + [ "$(readlink -f "$SYMLINK")" = "$SYMLINK_TARGET" ] +} + +SYMLINK=/usr/share/doc/ss-dev +SYMLINK_TARGET=libss2 + +if [ "$1" = "install" -o "$1" = "upgrade" ] && + [ -n "$2" ] && [ -h "$SYMLINK" ] && + symlink_match "$SYMLINK" "$SYMLINK_TARGET" +then + mv -f "$SYMLINK" "${SYMLINK}.dpkg-backup" +fi + +#DEBHELPER# + +exit 0 diff --git a/debian/upstream/signing-key.asc b/debian/upstream/signing-key.asc new file mode 100644 index 000000000..e225998d8 --- /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 000000000..a4f047e31 --- /dev/null +++ b/debian/uuid-dev.README.Debian @@ -0,0 +1,23 @@ + +In order to sanitize 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 + October 3, 2006 + + + + diff --git a/debian/uuid-dev.copyright b/debian/uuid-dev.copyright new file mode 100644 index 000000000..f346739f6 --- /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 b/debian/uuid-dev.files new file mode 100644 index 000000000..534b92c1b --- /dev/null +++ b/debian/uuid-dev.files @@ -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 000000000..afcd4c534 --- /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 000000000..ff8d87ad2 --- /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 000000000..4642d30b3 --- /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 000000000..3c1adb632 --- /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 000000000..f07700119 --- /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 000000000..904e16164 --- /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 000000000..5d9767439 --- /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 000000000..f2df3dde7 --- /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.bp b/debugfs/Android.bp new file mode 100644 index 000000000..9f9a9f0ce --- /dev/null +++ b/debugfs/Android.bp @@ -0,0 +1,72 @@ +// Copyright 2017 The Android Open Source Project + +//######################## +// Build the debugfs binary + +cc_defaults { + name: "debugfs-defaults", + defaults: ["e2fsprogs-defaults"], + srcs: [ + "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", + "quota.c", + "xattrs.c", + "journal.c", + "revoke.c", + "recovery.c", + "do_journal.c", + ], + cflags: [ + "-Wno-unused-variable", + "-fno-strict-aliasing", + "-DDEBUGFS", + ], + include_dirs: [ + "external/e2fsprogs/misc", + "external/e2fsprogs/e2fsck" + ], +} + +debugfs_libs = [ + "libext2_misc", + "libext2fs", + "libext2_blkid", + "libext2_uuid", + "libext2_ss", + "libext2_quota", + "libext2_com_err", + "libext2_e2p", + "libext2_support", +] + +cc_binary { + name: "debugfs", + host_supported: true, + defaults: ["debugfs-defaults"], + + shared_libs: debugfs_libs, + system_shared_libs: ["libc", "libdl"], +} + +cc_binary { + name: "debugfs_static", + static_executable: true, + defaults: ["debugfs-defaults"], + + static_libs: debugfs_libs, +} diff --git a/debugfs/Makefile.in b/debugfs/Makefile.in new file mode 100644 index 000000000..bb4d1947b --- /dev/null +++ b/debugfs/Makefile.in @@ -0,0 +1,419 @@ +# +# 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 nastiness 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) " MKDIR_P $(root_sbindir) $(man8dir)" + $(Q) $(MKDIR_P) $(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) + +fullcheck 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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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/hashmap.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 000000000..1ff6c9dcd --- /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 000000000..393c00093 --- /dev/null +++ b/debugfs/debugfs.8.in @@ -0,0 +1,871 @@ +.\" -*- 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 +debugfs-\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 " filespec" +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 " '[ -x ] [-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 . +If the +.I \-x +option is specified, the block is interpreted as an extended attribute +block and printed to show the structure of extended attribute data +structures. +.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 contents 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 +.BI dirty " [-clean]" +Mark the filesystem as dirty, so that the superblocks will be written on exit. +Additionally, clear the superblock's valid flag, or set it if +.I -clean +is specified. +.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 +.B dump_unused +Dump unused blocks which contain non-null bytes. +.TP +.BI ea_get " [-f outfile]|[-xVC] [-r] 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] [-r] 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 +.BI get_quota " quota_type id" +Display quota information for given quota type (user, group, or project) and ID. +.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 " [-b]|[-e]|[-x] filespec" +Print the contents of the inode data structure in hex and ASCII format. +The +.I \-b +option causes the command to only dump the contents of the +.B i_blocks +array. The +.I \-e +option causes the command to only dump the contents of the extra inode +space, which is used to store in-line extended attributes. The +.I \-x +option causes the command to dump the extra inode space interpreted and +extended attributes. This is useful to debug corrupted inodes +containing extended attributes. +.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] [-f 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 list_quota " quota_type" +Display quota information for given quota type (user, group, or project). +.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 " [-acsOS] [-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 \-S +option causes +.B logdump +to print the contents of the journal superblock. +.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 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] [-d image_filename] [-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 ", " -d ", " -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 set_current_time " time" +Set current time in seconds since Unix epoch to use when setting filesystem +fields. +.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 +.B show_debugfs_params +Display +.B debugfs +parameters such as information about currently opened filesystem. +.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 +.B supported_features +Display filesystem features supported by this version of +.BR debugfs . +.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 000000000..0b04508ef --- /dev/null +++ b/debugfs/debugfs.c @@ -0,0 +1,2599 @@ +/* + * 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 +#ifdef HAVE_SYS_SYSMACROS_H +#include +#endif + +#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; +int no_copy_xattrs; + +static int debugfs_setup_tdb(const char *device_name, char *undo_file, + io_manager *io_ptr) +{ + errcode_t retval = ENOMEM; + const char *tdb_dir = NULL; + char *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_SKIP_MMP | EXT2_FLAG_IGNORE_SB_ERRORS; + + if (undo_file) { + retval = debugfs_setup_tdb(device, undo_file, &io_ptr); + if (retval) + exit(1); + } + +try_open_again: + retval = ext2fs_open(device, open_flags, superblock, blocksize, + io_ptr, ¤t_fs); + if (retval && (retval == EXT2_ET_SB_CSUM_INVALID) && + !(open_flags & EXT2_FLAG_IGNORE_CSUM_ERRORS)) { + open_flags |= EXT2_FLAG_IGNORE_CSUM_ERRORS; + printf("Checksum errors in superblock! Retrying...\n"); + goto try_open_again; + } + if (retval) { + com_err(debug_prog_name, retval, + "while trying to open %s", device); + 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_bitmaps(current_fs); + if (retval) { + com_err(device, retval, + "while reading allocation bitmaps"); + 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] [-z undo_file] [-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); + if (ext2fs_has_feature_metadata_csum(current_fs->super) && + !ext2fs_superblock_csum_verify(current_fs, + current_fs->super)) { + __u32 orig_csum = current_fs->super->s_checksum; + + ext2fs_superblock_csum_set(current_fs, + current_fs->super); + fprintf(out, "Expected Checksum: 0x%08x\n", + current_fs->super->s_checksum); + current_fs->super->s_checksum = orig_csum; + } + 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_stats [-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_inline_symlink(FILE *out, ext2_ino_t inode_num, + struct ext2_inode *inode, const char *prefix) +{ + errcode_t retval; + char *buf = NULL; + size_t size; + + 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); +out: + if (buf) + ext2fs_free_mem(&buf); + 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: 0%03o Flags: 0x%x\n", + prefix, inode->i_mode & 07777, 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 Translator: %d\n", + prefix, + inode->i_file_acl, + inode->osd1.hurd1.h_i_translator); + else + fprintf(out, "%sFile ACL: %llu\n", + prefix, + inode->i_file_acl | ((long long) + (inode->osd2.linux2.l_i_file_acl_high) << 32)); + 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_is_fast_symlink(inode)) + fprintf(out, "%sFast link dest: \"%.*s\"\n", prefix, + (int)EXT2_I_SIZE(inode), (char *)inode->i_block); + else if (LINUX_S_ISLNK(inode->i_mode) && + (inode->i_flags & EXT4_INLINE_DATA_FL)) + dump_inline_symlink(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); + + 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; + unsigned char buf[4096]; + + 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.st_mode, st.st_rdev); + 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) +{ + blk64_t block = *blocknr; + blk64_t *last_cluster = (blk64_t *)private; + blk64_t cluster = EXT2FS_B2C(fs, block); + + if (cluster == *last_cluster) + return 0; + + *last_cluster = cluster; + + 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)) { + blk64_t last_cluster = 0; + ext2fs_block_iterate3(current_fs, inode, BLOCK_FLAG_READ_ONLY, + NULL, release_blocks_proc, &last_cluster); + } + 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[]) +{ + struct ext2_inode_large *inode; + ext2_ino_t ino; + unsigned char *buf; + errcode_t err; + unsigned int isize, size, offset = 0; + int c, mode = 0; + + reset_getopt(); + while ((c = getopt (argc, argv, "bex")) != EOF) { + if (mode || c == '?') { + com_err(argv[0], 0, + "Usage: inode_dump [-b]|[-e] "); + return; + } + mode = c; + } + if (optind != argc-1) + return; + + if (check_fs_open(argv[0])) + return; + + ino = string_to_inode(argv[optind]); + 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 %u", ino); + goto err; + } + + inode = (struct ext2_inode_large *) buf; + size = isize; + switch (mode) { + case 'b': + offset = ((char *) (&inode->i_block)) - ((char *) buf); + size = sizeof(inode->i_block); + break; + case 'x': + case 'e': + if (size <= EXT2_GOOD_OLD_INODE_SIZE) { + com_err(argv[0], 0, "No extra space in inode"); + goto err; + } + offset = EXT2_GOOD_OLD_INODE_SIZE + inode->i_extra_isize; + if (offset > size) + goto err; + size -= offset; + break; + } + if (mode == 'x') + raw_inode_xattr_dump(stdout, buf + offset, size); + else + do_byte_hexdump(stdout, buf + offset, size); +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], + "