commit 4cecd1324a556a62212d4ececa7d05de50d42f0d Author: Tomasz Sterna Date: Tue Jan 18 04:24:57 2011 -0500 Initial import of anaconda-13.42 source diff --git a/70-anaconda.rules b/70-anaconda.rules new file mode 100644 index 0000000..bba0bfb --- /dev/null +++ b/70-anaconda.rules @@ -0,0 +1,56 @@ +# If $ANACONDA isn't set in the environment, skip all these rules. +ENV{ANACONDA}!="?*", GOTO="anaconda_end" + +ACTION!="add|change", GOTO="anaconda_end" +SUBSYSTEM!="block", GOTO="anaconda_end" + +# for device-mapper device we are supposed to only operate on "change" events +KERNEL=="dm-*", ACTION=="add", GOTO="anaconda_end" + +ENV{ANACBIN}="/sbin" +TEST!="$env{ANACBIN}/dmsetup", ENV{ANACBIN}="/usr/sbin" + +KERNEL=="dm-*", ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="anaconda_end" +KERNEL=="dm-*", ENV{DM_NAME}!="?*", GOTO="anaconda_end" +KERNEL=="dm-*", ENV{DM_SUSPENDED}=="1", GOTO="anaconda_end" +KERNEL=="dm-*", ENV{DM_SUSPENDED}=="Suspended", GOTO="anaconda_end" + +IMPORT{program}="$env{ANACBIN}/blkid -o udev -p $tempnode" + +LABEL="anaconda_mdraid" +KERNEL!="md*", GOTO="anaconda_mdraid_member" + +# container devices have a metadata version of e.g. 'external:ddf' and +# never leave state 'inactive' +ATTR{md/metadata_version}=="external:[A-Za-z]*", ATTR{md/array_state}=="inactive", GOTO="md_ignore_state" +TEST!="md/array_state", GOTO="anaconda_mdraid_member" +ATTR{md/array_state}=="|clear|inactive", GOTO="anaconda_mdraid_member" +LABEL="md_ignore_state" + +IMPORT{program}="$env{ANACBIN}/mdadm --detail --export $tempnode" +ENV{DEVTYPE}=="disk", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="disk", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}" +ENV{DEVTYPE}=="disk", ENV{MD_DEVNAME}=="?*", SYMLINK+="md/$env{MD_DEVNAME}" +ENV{DEVTYPE}=="partition", ENV{MD_NAME}=="?*", SYMLINK+="disk/by-id/md-name-$env{MD_NAME}-part%n", OPTIONS+="string_escape=replace" +ENV{DEVTYPE}=="partition", ENV{MD_UUID}=="?*", SYMLINK+="disk/by-id/md-uuid-$env{MD_UUID}-part%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[^0-9]", SYMLINK+="md/$env{MD_DEVNAME}%n" +ENV{DEVTYPE}=="partition", ENV{MD_DEVNAME}=="*[0-9]", SYMLINK+="md/$env{MD_DEVNAME}p%n" + +OPTIONS+="link_priority=100" +OPTIONS+="watch" +ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" +ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" + +LABEL="anaconda_mdraid_member" +# probe raid metadata of mdraid member devices +ENV{ID_FS_TYPE}=="linux_raid_member", IMPORT{program}="$env{ANACBIN}/mdadm --examine --export $tempnode" +ENV{ID_FS_TYPE}=="isw_raid_member", IMPORT{program}="$env{ANACBIN}/mdadm --examine --export $tempnode" + +# probe metadata of LVM2 physical volumes +ENV{ID_FS_TYPE}=="LVM2_member", IMPORT{program}="$env{ANACBIN}/lvm pvs --ignorelockingfailure --units k --nosuffix --nameprefixes --rows --unquoted --noheadings -opv_name,pv_uuid,pv_size,vg_name,vg_uuid,pv_pe_count,pv_pe_alloc_count,pe_start $tempnode" +ENV{LVM2_VG_NAME}!="?*", GOTO="anaconda_end" +ENV{ID_FS_TYPE}=="LVM2_member", IMPORT{program}="$env{ANACBIN}/lvm vgs --ignorelockingfailure --units k --nosuffix --nameprefixes --rows --unquoted --noheadings -ouuid,size,free,extent_size,extent_count,free_count,pv_count $env{LVM2_VG_NAME}" +ENV{ID_FS_TYPE}=="LVM2_member", IMPORT{program}="$env{ANACBIN}/lvm lvs -a --ignorelockingfailure --units k --nosuffix --nameprefixes --rows --unquoted --noheadings -olv_name,lv_uuid,lv_size,lv_attr $env{LVM2_VG_NAME}" + +LABEL="anaconda_end" + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..a43ea21 --- /dev/null +++ b/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, 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 + + Appendix: 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) 19yy + + 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., 675 Mass Ave, Cambridge, MA 02139, 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) 19yy 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. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..ee8bf33 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,159 @@ +# Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +ACLOCAL_AMFLAGS = -I m4 + +SUBDIRS = isys po loader booty storage textw utils scripts bootdisk \ + installclasses iw command-stubs ui docs pixmaps tests fonts \ + gptsync liveinst + +EXTRA_DIST = config.rpath COPYING pychecker-false-positives \ + pycheckrc-for-anaconda runpychecker.sh lang-table \ + anaconda.spec.in + +MAINTAINERCLEANFILES = Makefile.in config.guess config.h.in config.sub \ + depcomp install-sh ltmain.sh missing ABOUT-NLS \ + INSTALL aclocal.m4 configure *.pyc py-compile + +CLEANFILES = *~ lang-names anaconda.spec + +MOSTLYCLEANDIRS = m4 + +dist_noinst_DATA = $(PACKAGE_NAME).spec + +bin_PROGRAMS = mini-wm +dist_sbin_SCRIPTS = anaconda + +mini_wm_CFLAGS = $(X11_CFLAGS) $(XCOMPOSITE_CFLAGS) $(GTK_X11_CFLAGS) +mini_wm_LDFLAGS = $(X11_LIBS) $(XCOMPOSITE_LIBS) $(GTK_X11_LIBS) +mini_wm_SOURCES = mini-wm.c + +udevdir = /lib/udev/rules.d +dist_udev_DATA = 70-anaconda.rules + +langdir = $(libdir)/$(PACKAGE_NAME) +lang_DATA = lang-names +dist_lang_DATA = lang-table + +pkgpyexecdir = $(libdir)/$(PACKAGE_NAME) +pkgpythondir = $(libdir)/$(PACKAGE_NAME) + +pkgpyexec_LTLIBRARIES = xutils.la +xutils_la_CFLAGS = $(PYTHON_INCLUDES) $(GDK_CFLAGS) -fno-strict-aliasing +xutils_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) $(GDK_LDFLAGS) +xutils_la_LIBADD = $(PYTHON_LIBS) $(GDK_LIBS) +xutils_la_SOURCES = xutils.c + +# anaconda Python code +anacondadir = $(libdir)/$(PACKAGE_NAME) +anaconda_PYTHON = *.py + +PYCHECKERPATH = isys:textw:iw:installclasses:/usr/share/system-config-date +PYCHECKEROPTS = -F pycheckrc-for-anaconda +ARCHIVE_TAG = $(PACKAGE_NAME)-$(PACKAGE_VERSION)-$(PACKAGE_RELEASE) + +sed_verbose = $(sed_verbose_$(V)) +sed_verbose_ = $(sed_verbose_$(AM_DEFAULT_VERBOSITY)) +sed_verbose_0 = @echo " SED "$@; + +$(PACKAGE_NAME).spec: $(PACKAGE_NAME).spec.in + $(sed_verbose)sed -e 's/#VERSION#/$(PACKAGE_VERSION)/' < $< > $@ + +lang-names: lang-table + PYTHONPATH="." $(PYTHON) scripts/getlangnames.py > lang-names + +testiso: install + @if [ "$(REPO)" = "" ]; then echo "ERROR: Need a repo to pull packages from!" ; exit 1 ; fi + @pushd scripts ; sudo ./buildinstall --version $(PACKAGE_VERSION) --product $(PACKAGE_NAME) --release $(PACKAGE_NAME)-$(PACKAGE_VERSION) --output $(shell pwd)/outiso --updates $(DESTDIR) $(REPO) ; popd ; cp outiso/images/boot.iso ./boot.iso ; sudo rm -rf outiso + @echo + @echo "Test iso is located at ./boot.iso" + +tag: + @git tag -s -a -m "Tag as $(ARCHIVE_TAG)" $(ARCHIVE_TAG) + @echo "Tagged as $(ARCHIVE_TAG)" + +scratch: + $(MAKE) ARCHIVE_TAG=HEAD dist + +archive: + $(MAKE) tag + $(MAKE) dist + git checkout -- po/$(PACKAGE_NAME).pot + ( cd po ; for f in *.po ; do git checkout -- $$f 2>/dev/null ; done ) + +release: archive + +src: archive + @rpmbuild -ts --nodeps $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.bz2 || exit 1 + @rm -f $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.bz2 + +pycheck: + PYTHONPATH=$(PYCHECKERPATH) pychecker $(PYCHECKEROPTS) *.py textw/*.py iw/*.py installclasses/*.py storage/*.py | grep -v "__init__() not called" + +pycheck-file: + PYTHONPATH=.:$(PYCHECKERPATH) pychecker $(PYCHECKEROPTS) $(CHECK) | grep -v "__init__() not called" + +api: + doxygen docs/api.cfg + +rpmlog: + @git log --pretty="format:- %s (%ae)" \ + $(PACKAGE_NAME)-$(PACKAGE_VERSION)-$(PACKAGE_RELEASE).. | \ + sed -e 's/@.*)/)/' | sed -e 's/%/%%/g' | \ + grep -v -- "- l10n: " | \ + grep -v -- "- Merge commit " + +bumpver: + @LAST=$$(echo $(PACKAGE_VERSION) | grep "\." -o | wc -l) ; \ + FIELD=$$(($${LAST} + 1)) ; \ + NEWSUBVER=$$((`echo $(PACKAGE_VERSION) | cut -d . -f $${FIELD}` + 1)) ; \ + NEWVERSION="`echo $(PACKAGE_VERSION) | cut -d . -f 1-$${LAST}`.$$NEWSUBVER" ; \ + DATELINE="* `date "+%a %b %d %Y"` `git config user.name` <`git config user.email`> - $$NEWVERSION-1" ; \ + cl=`grep -n %changelog anaconda.spec.in |cut -d : -f 1` ; \ + tail --lines=+$$(($$cl + 1)) anaconda.spec.in > speclog ; \ + make --quiet rpmlog 2>/dev/null | fold -s -w 77 | while read line ; do \ + if [ ! "$$(echo $$line | cut -c-2)" = "- " ]; then \ + echo " $$line" ; \ + else \ + echo "$$line" ; \ + fi ; \ + done > newspeclog ; \ + (head -n $$cl anaconda.spec.in ; echo "$$DATELINE" ; cat newspeclog ; echo ""; cat speclog) > anaconda.spec.in.new ; \ + mv anaconda.spec.in.new anaconda.spec.in ; rm -f speclog ; rm -f newspeclog ; \ + sed -i "s/AC_INIT(\[$(PACKAGE_NAME)\], \[$(PACKAGE_VERSION)\], \[$(PACKAGE_BUGREPORT\])/AC_INIT(\[$(PACKAGE_NAME)\], \[$$NEWVERSION\], \[$(PACKAGE_BUGREPORT\])/" configure.ac + $(MAKE) -C po $(PACKAGE_NAME).pot-update + +install-buildrequires: + yum install $$(grep BuildRequires: anaconda.spec.in | cut -d ' ' -f 2) + +# Generate an updates.img based on the changed files since the release +# was tagged. Updates are copied to ./updates-img and then the image is +# created. By default, the updates subdirectory is removed after the +# image is made, but if you want to keep it around, run: +# make updates.img KEEP=y +updates: + @opts="-c" ; \ + keep="$$(echo $(KEEP) | cut -c1 | tr [a-z] [A-Z])" ; \ + if [ "$${keep}" = "Y" ]; then \ + opts="$${opts} -k" ; \ + fi ; \ + scripts/makeupdates $${opts} + +# DEPRECATED TARGETS: +archive-no-tag: dist diff --git a/Makefile.in b/Makefile.in new file mode 100644 index 0000000..474dd7a --- /dev/null +++ b/Makefile.in @@ -0,0 +1,1305 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + + + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +bin_PROGRAMS = mini-wm$(EXEEXT) +subdir = . +DIST_COMMON = $(am__configure_deps) $(anaconda_PYTHON) \ + $(dist_lang_DATA) $(dist_noinst_DATA) $(dist_sbin_SCRIPTS) \ + $(dist_udev_DATA) $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ + $(srcdir)/config.h.in $(top_srcdir)/configure COPYING \ + config.guess config.rpath config.sub depcomp install-sh \ + ltmain.sh missing py-compile +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ + configure.lineno config.status.lineno +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(bindir)" \ + "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(anacondadir)" \ + "$(DESTDIR)$(langdir)" "$(DESTDIR)$(udevdir)" \ + "$(DESTDIR)$(langdir)" +LTLIBRARIES = $(pkgpyexec_LTLIBRARIES) +am__DEPENDENCIES_1 = +xutils_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +am_xutils_la_OBJECTS = xutils_la-xutils.lo +xutils_la_OBJECTS = $(am_xutils_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +xutils_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(xutils_la_CFLAGS) \ + $(CFLAGS) $(xutils_la_LDFLAGS) $(LDFLAGS) -o $@ +PROGRAMS = $(bin_PROGRAMS) +am_mini_wm_OBJECTS = mini_wm-mini-wm.$(OBJEXT) +mini_wm_OBJECTS = $(am_mini_wm_OBJECTS) +mini_wm_LDADD = $(LDADD) +mini_wm_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mini_wm_CFLAGS) \ + $(CFLAGS) $(mini_wm_LDFLAGS) $(LDFLAGS) -o $@ +SCRIPTS = $(dist_sbin_SCRIPTS) +DEFAULT_INCLUDES = -I.@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(xutils_la_SOURCES) $(mini_wm_SOURCES) +DIST_SOURCES = $(xutils_la_SOURCES) $(mini_wm_SOURCES) +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +py_compile = $(top_srcdir)/py-compile +DATA = $(dist_lang_DATA) $(dist_noinst_DATA) $(dist_udev_DATA) \ + $(lang_DATA) +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir dist dist-all distcheck +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +distdir = $(PACKAGE)-$(VERSION) +top_distdir = $(distdir) +am__remove_distdir = \ + { test ! -d "$(distdir)" \ + || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ + && rm -fr "$(distdir)"; }; } +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +GZIP_ENV = --best +DIST_ARCHIVES = $(distdir).tar.bz2 +distuninstallcheck_listfiles = find . -type f -print +distcleancheck_listfiles = find . -type f -print +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = $(libdir)/$(PACKAGE_NAME) +pkgpythondir = $(libdir)/$(PACKAGE_NAME) +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ACLOCAL_AMFLAGS = -I m4 +SUBDIRS = isys po loader booty storage textw utils scripts bootdisk \ + installclasses iw command-stubs ui docs pixmaps tests fonts \ + gptsync liveinst + +EXTRA_DIST = config.rpath COPYING pychecker-false-positives \ + pycheckrc-for-anaconda runpychecker.sh lang-table \ + anaconda.spec.in + +MAINTAINERCLEANFILES = Makefile.in config.guess config.h.in config.sub \ + depcomp install-sh ltmain.sh missing ABOUT-NLS \ + INSTALL aclocal.m4 configure *.pyc py-compile + +CLEANFILES = *~ lang-names anaconda.spec +MOSTLYCLEANDIRS = m4 +dist_noinst_DATA = $(PACKAGE_NAME).spec +dist_sbin_SCRIPTS = anaconda +mini_wm_CFLAGS = $(X11_CFLAGS) $(XCOMPOSITE_CFLAGS) $(GTK_X11_CFLAGS) +mini_wm_LDFLAGS = $(X11_LIBS) $(XCOMPOSITE_LIBS) $(GTK_X11_LIBS) +mini_wm_SOURCES = mini-wm.c +udevdir = /lib/udev/rules.d +dist_udev_DATA = 70-anaconda.rules +langdir = $(libdir)/$(PACKAGE_NAME) +lang_DATA = lang-names +dist_lang_DATA = lang-table +pkgpyexec_LTLIBRARIES = xutils.la +xutils_la_CFLAGS = $(PYTHON_INCLUDES) $(GDK_CFLAGS) -fno-strict-aliasing +xutils_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) $(GDK_LDFLAGS) +xutils_la_LIBADD = $(PYTHON_LIBS) $(GDK_LIBS) +xutils_la_SOURCES = xutils.c + +# anaconda Python code +anacondadir = $(libdir)/$(PACKAGE_NAME) +anaconda_PYTHON = *.py +PYCHECKERPATH = isys:textw:iw:installclasses:/usr/share/system-config-date +PYCHECKEROPTS = -F pycheckrc-for-anaconda +ARCHIVE_TAG = $(PACKAGE_NAME)-$(PACKAGE_VERSION)-$(PACKAGE_RELEASE) +sed_verbose = $(sed_verbose_$(V)) +sed_verbose_ = $(sed_verbose_$(AM_DEFAULT_VERBOSITY)) +sed_verbose_0 = @echo " SED "$@; +all: config.h + $(MAKE) $(AM_MAKEFLAGS) all-recursive + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +am--refresh: + @: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \ + $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + echo ' $(SHELL) ./config.status'; \ + $(SHELL) ./config.status;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + $(SHELL) ./config.status --recheck + +$(top_srcdir)/configure: $(am__configure_deps) + $(am__cd) $(srcdir) && $(AUTOCONF) +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) +$(am__aclocal_m4_deps): + +config.h: stamp-h1 + @if test ! -f $@; then \ + rm -f stamp-h1; \ + $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ + else :; fi + +stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status + @rm -f stamp-h1 + cd $(top_builddir) && $(SHELL) ./config.status config.h +$(srcdir)/config.h.in: $(am__configure_deps) + ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) + rm -f stamp-h1 + touch $@ + +distclean-hdr: + -rm -f config.h stamp-h1 +install-pkgpyexecLTLIBRARIES: $(pkgpyexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" + @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgpyexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgpyexecdir)"; \ + } + +uninstall-pkgpyexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ + done + +clean-pkgpyexecLTLIBRARIES: + -test -z "$(pkgpyexec_LTLIBRARIES)" || rm -f $(pkgpyexec_LTLIBRARIES) + @list='$(pkgpyexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +xutils.la: $(xutils_la_OBJECTS) $(xutils_la_DEPENDENCIES) + $(AM_V_CCLD)$(xutils_la_LINK) -rpath $(pkgpyexecdir) $(xutils_la_OBJECTS) $(xutils_la_LIBADD) $(LIBS) +install-binPROGRAMS: $(bin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-binPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bindir)" && rm -f $$files + +clean-binPROGRAMS: + @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +mini-wm$(EXEEXT): $(mini_wm_OBJECTS) $(mini_wm_DEPENDENCIES) + @rm -f mini-wm$(EXEEXT) + $(AM_V_CCLD)$(mini_wm_LINK) $(mini_wm_OBJECTS) $(mini_wm_LDADD) $(LIBS) +install-dist_sbinSCRIPTS: $(dist_sbin_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(dist_sbin_SCRIPTS)'; test -n "$(sbindir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-dist_sbinSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_sbin_SCRIPTS)'; test -n "$(sbindir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mini_wm-mini-wm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xutils_la-xutils.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +xutils_la-xutils.lo: xutils.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xutils_la_CFLAGS) $(CFLAGS) -MT xutils_la-xutils.lo -MD -MP -MF $(DEPDIR)/xutils_la-xutils.Tpo -c -o xutils_la-xutils.lo `test -f 'xutils.c' || echo '$(srcdir)/'`xutils.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/xutils_la-xutils.Tpo $(DEPDIR)/xutils_la-xutils.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='xutils.c' object='xutils_la-xutils.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xutils_la_CFLAGS) $(CFLAGS) -c -o xutils_la-xutils.lo `test -f 'xutils.c' || echo '$(srcdir)/'`xutils.c + +mini_wm-mini-wm.o: mini-wm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mini_wm_CFLAGS) $(CFLAGS) -MT mini_wm-mini-wm.o -MD -MP -MF $(DEPDIR)/mini_wm-mini-wm.Tpo -c -o mini_wm-mini-wm.o `test -f 'mini-wm.c' || echo '$(srcdir)/'`mini-wm.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mini_wm-mini-wm.Tpo $(DEPDIR)/mini_wm-mini-wm.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mini-wm.c' object='mini_wm-mini-wm.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mini_wm_CFLAGS) $(CFLAGS) -c -o mini_wm-mini-wm.o `test -f 'mini-wm.c' || echo '$(srcdir)/'`mini-wm.c + +mini_wm-mini-wm.obj: mini-wm.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mini_wm_CFLAGS) $(CFLAGS) -MT mini_wm-mini-wm.obj -MD -MP -MF $(DEPDIR)/mini_wm-mini-wm.Tpo -c -o mini_wm-mini-wm.obj `if test -f 'mini-wm.c'; then $(CYGPATH_W) 'mini-wm.c'; else $(CYGPATH_W) '$(srcdir)/mini-wm.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mini_wm-mini-wm.Tpo $(DEPDIR)/mini_wm-mini-wm.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='mini-wm.c' object='mini_wm-mini-wm.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mini_wm_CFLAGS) $(CFLAGS) -c -o mini_wm-mini-wm.obj `if test -f 'mini-wm.c'; then $(CYGPATH_W) 'mini-wm.c'; else $(CYGPATH_W) '$(srcdir)/mini-wm.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +distclean-libtool: + -rm -f libtool config.lt +install-anacondaPYTHON: $(anaconda_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(anacondadir)" || $(MKDIR_P) "$(DESTDIR)$(anacondadir)" + @list='$(anaconda_PYTHON)'; dlist=; list2=; test -n "$(anacondadir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(anacondadir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(anacondadir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(anacondadir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(anacondadir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-anacondaPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(anaconda_PYTHON)'; test -n "$(anacondadir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(anacondadir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(anacondadir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(anacondadir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(anacondadir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(anacondadir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(anacondadir)" && rm -f $$fileso +install-dist_langDATA: $(dist_lang_DATA) + @$(NORMAL_INSTALL) + test -z "$(langdir)" || $(MKDIR_P) "$(DESTDIR)$(langdir)" + @list='$(dist_lang_DATA)'; test -n "$(langdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(langdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(langdir)" || exit $$?; \ + done + +uninstall-dist_langDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_lang_DATA)'; test -n "$(langdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(langdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(langdir)" && rm -f $$files +install-dist_udevDATA: $(dist_udev_DATA) + @$(NORMAL_INSTALL) + test -z "$(udevdir)" || $(MKDIR_P) "$(DESTDIR)$(udevdir)" + @list='$(dist_udev_DATA)'; test -n "$(udevdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(udevdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(udevdir)" || exit $$?; \ + done + +uninstall-dist_udevDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_udev_DATA)'; test -n "$(udevdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(udevdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(udevdir)" && rm -f $$files +install-langDATA: $(lang_DATA) + @$(NORMAL_INSTALL) + test -z "$(langdir)" || $(MKDIR_P) "$(DESTDIR)$(langdir)" + @list='$(lang_DATA)'; test -n "$(langdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(langdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(langdir)" || exit $$?; \ + done + +uninstall-langDATA: + @$(NORMAL_UNINSTALL) + @list='$(lang_DATA)'; test -n "$(langdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(langdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(langdir)" && rm -f $$files + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + $(am__remove_distdir) + test -d "$(distdir)" || mkdir "$(distdir)" + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done + -test -n "$(am__skip_mode_fix)" \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ + ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ + ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ + || chmod -R a+r "$(distdir)" +dist-gzip: distdir + tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + $(am__remove_distdir) +dist-bzip2: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +dist-lzma: distdir + tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma + $(am__remove_distdir) + +dist-xz: distdir + tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz + $(am__remove_distdir) + +dist-tarZ: distdir + tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z + $(am__remove_distdir) + +dist-shar: distdir + shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + $(am__remove_distdir) + +dist-zip: distdir + -rm -f $(distdir).zip + zip -rq $(distdir).zip $(distdir) + $(am__remove_distdir) + +dist dist-all: distdir + tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 + $(am__remove_distdir) + +# This target untars the dist file and tries a VPATH configuration. Then +# it guarantees that the distribution is self-contained by making another +# tarfile. +distcheck: dist + case '$(DIST_ARCHIVES)' in \ + *.tar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + *.tar.bz2*) \ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ + *.tar.lzma*) \ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ + *.tar.xz*) \ + xz -dc $(distdir).tar.xz | $(am__untar) ;;\ + *.tar.Z*) \ + uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ + *.shar.gz*) \ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + *.zip*) \ + unzip $(distdir).zip ;;\ + esac + chmod -R a-w $(distdir); chmod a+w $(distdir) + mkdir $(distdir)/_build + mkdir $(distdir)/_inst + chmod a-w $(distdir) + test -d $(distdir)/_build || exit 0; \ + dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ + && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ + && am__cwd=`pwd` \ + && $(am__cd) $(distdir)/_build \ + && ../configure --srcdir=.. --prefix="$$dc_install_base" \ + $(DISTCHECK_CONFIGURE_FLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) \ + && $(MAKE) $(AM_MAKEFLAGS) dvi \ + && $(MAKE) $(AM_MAKEFLAGS) check \ + && $(MAKE) $(AM_MAKEFLAGS) install \ + && $(MAKE) $(AM_MAKEFLAGS) installcheck \ + && $(MAKE) $(AM_MAKEFLAGS) uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ + distuninstallcheck \ + && chmod -R a-w "$$dc_install_base" \ + && ({ \ + (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ + && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ + distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ + } || { rm -rf "$$dc_destdir"; exit 1; }) \ + && rm -rf "$$dc_destdir" \ + && $(MAKE) $(AM_MAKEFLAGS) dist \ + && rm -rf $(DIST_ARCHIVES) \ + && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ + && cd "$$am__cwd" \ + || exit 1 + $(am__remove_distdir) + @(echo "$(distdir) archives ready for distribution: "; \ + list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ + sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' +distuninstallcheck: + @$(am__cd) '$(distuninstallcheck_dir)' \ + && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ + || { echo "ERROR: files left after uninstall:" ; \ + if test -n "$(DESTDIR)"; then \ + echo " (check DESTDIR support)"; \ + fi ; \ + $(distuninstallcheck_listfiles) ; \ + exit 1; } >&2 +distcleancheck: distclean + @if test '$(srcdir)' = . ; then \ + echo "ERROR: distcleancheck can only run from a VPATH build" ; \ + exit 1 ; \ + fi + @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ + || { echo "ERROR: files left in build directory after distclean:" ; \ + $(distcleancheck_listfiles) ; \ + exit 1; } >&2 +check-am: all-am +check: check-recursive +all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ + config.h +installdirs: installdirs-recursive +installdirs-am: + for dir in "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(anacondadir)" "$(DESTDIR)$(langdir)" "$(DESTDIR)$(udevdir)" "$(DESTDIR)$(langdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-binPROGRAMS clean-generic clean-libtool \ + clean-pkgpyexecLTLIBRARIES mostlyclean-am + +distclean: distclean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-hdr distclean-libtool distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: install-anacondaPYTHON install-dist_langDATA \ + install-dist_udevDATA install-langDATA + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: install-binPROGRAMS install-dist_sbinSCRIPTS \ + install-pkgpyexecLTLIBRARIES + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f $(am__CONFIG_DISTCLEAN_FILES) + -rm -rf $(top_srcdir)/autom4te.cache + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: uninstall-anacondaPYTHON uninstall-binPROGRAMS \ + uninstall-dist_langDATA uninstall-dist_sbinSCRIPTS \ + uninstall-dist_udevDATA uninstall-langDATA \ + uninstall-pkgpyexecLTLIBRARIES + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ + ctags-recursive install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am am--refresh check check-am clean clean-binPROGRAMS \ + clean-generic clean-libtool clean-pkgpyexecLTLIBRARIES ctags \ + ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-lzma \ + dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-libtool distclean-tags distcleancheck distdir \ + distuninstallcheck dvi dvi-am html html-am info info-am \ + install install-am install-anacondaPYTHON install-binPROGRAMS \ + install-data install-data-am install-dist_langDATA \ + install-dist_sbinSCRIPTS install-dist_udevDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-langDATA \ + install-man install-pdf install-pdf-am \ + install-pkgpyexecLTLIBRARIES install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + installdirs-am maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am uninstall-anacondaPYTHON \ + uninstall-binPROGRAMS uninstall-dist_langDATA \ + uninstall-dist_sbinSCRIPTS uninstall-dist_udevDATA \ + uninstall-langDATA uninstall-pkgpyexecLTLIBRARIES + + +$(PACKAGE_NAME).spec: $(PACKAGE_NAME).spec.in + $(sed_verbose)sed -e 's/#VERSION#/$(PACKAGE_VERSION)/' < $< > $@ + +lang-names: lang-table + PYTHONPATH="." $(PYTHON) scripts/getlangnames.py > lang-names + +testiso: install + @if [ "$(REPO)" = "" ]; then echo "ERROR: Need a repo to pull packages from!" ; exit 1 ; fi + @pushd scripts ; sudo ./buildinstall --version $(PACKAGE_VERSION) --product $(PACKAGE_NAME) --release $(PACKAGE_NAME)-$(PACKAGE_VERSION) --output $(shell pwd)/outiso --updates $(DESTDIR) $(REPO) ; popd ; cp outiso/images/boot.iso ./boot.iso ; sudo rm -rf outiso + @echo + @echo "Test iso is located at ./boot.iso" + +tag: + @git tag -s -a -m "Tag as $(ARCHIVE_TAG)" $(ARCHIVE_TAG) + @echo "Tagged as $(ARCHIVE_TAG)" + +scratch: + $(MAKE) ARCHIVE_TAG=HEAD dist + +archive: + $(MAKE) tag + $(MAKE) dist + git checkout -- po/$(PACKAGE_NAME).pot + ( cd po ; for f in *.po ; do git checkout -- $$f 2>/dev/null ; done ) + +release: archive + +src: archive + @rpmbuild -ts --nodeps $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.bz2 || exit 1 + @rm -f $(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.bz2 + +pycheck: + PYTHONPATH=$(PYCHECKERPATH) pychecker $(PYCHECKEROPTS) *.py textw/*.py iw/*.py installclasses/*.py storage/*.py | grep -v "__init__() not called" + +pycheck-file: + PYTHONPATH=.:$(PYCHECKERPATH) pychecker $(PYCHECKEROPTS) $(CHECK) | grep -v "__init__() not called" + +api: + doxygen docs/api.cfg + +rpmlog: + @git log --pretty="format:- %s (%ae)" \ + $(PACKAGE_NAME)-$(PACKAGE_VERSION)-$(PACKAGE_RELEASE).. | \ + sed -e 's/@.*)/)/' | sed -e 's/%/%%/g' | \ + grep -v -- "- l10n: " | \ + grep -v -- "- Merge commit " + +bumpver: + @LAST=$$(echo $(PACKAGE_VERSION) | grep "\." -o | wc -l) ; \ + FIELD=$$(($${LAST} + 1)) ; \ + NEWSUBVER=$$((`echo $(PACKAGE_VERSION) | cut -d . -f $${FIELD}` + 1)) ; \ + NEWVERSION="`echo $(PACKAGE_VERSION) | cut -d . -f 1-$${LAST}`.$$NEWSUBVER" ; \ + DATELINE="* `date "+%a %b %d %Y"` `git config user.name` <`git config user.email`> - $$NEWVERSION-1" ; \ + cl=`grep -n %changelog anaconda.spec.in |cut -d : -f 1` ; \ + tail --lines=+$$(($$cl + 1)) anaconda.spec.in > speclog ; \ + make --quiet rpmlog 2>/dev/null | fold -s -w 77 | while read line ; do \ + if [ ! "$$(echo $$line | cut -c-2)" = "- " ]; then \ + echo " $$line" ; \ + else \ + echo "$$line" ; \ + fi ; \ + done > newspeclog ; \ + (head -n $$cl anaconda.spec.in ; echo "$$DATELINE" ; cat newspeclog ; echo ""; cat speclog) > anaconda.spec.in.new ; \ + mv anaconda.spec.in.new anaconda.spec.in ; rm -f speclog ; rm -f newspeclog ; \ + sed -i "s/AC_INIT(\[$(PACKAGE_NAME)\], \[$(PACKAGE_VERSION)\], \[$(PACKAGE_BUGREPORT\])/AC_INIT(\[$(PACKAGE_NAME)\], \[$$NEWVERSION\], \[$(PACKAGE_BUGREPORT\])/" configure.ac + $(MAKE) -C po $(PACKAGE_NAME).pot-update + +install-buildrequires: + yum install $$(grep BuildRequires: anaconda.spec.in | cut -d ' ' -f 2) + +# Generate an updates.img based on the changed files since the release +# was tagged. Updates are copied to ./updates-img and then the image is +# created. By default, the updates subdirectory is removed after the +# image is made, but if you want to keep it around, run: +# make updates.img KEEP=y +updates: + @opts="-c" ; \ + keep="$$(echo $(KEEP) | cut -c1 | tr [a-z] [A-Z])" ; \ + if [ "$${keep}" = "Y" ]; then \ + opts="$${opts} -k" ; \ + fi ; \ + scripts/makeupdates $${opts} + +# DEPRECATED TARGETS: +archive-no-tag: dist + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/aclocal.m4 b/aclocal.m4 new file mode 100644 index 0000000..4bd365d --- /dev/null +++ b/aclocal.m4 @@ -0,0 +1,9366 @@ +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2007, 2008, 2009 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_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, +[m4_warning([this file was generated for autoconf 2.65. +You have another version of autoconf. It may work, but is not guaranteed to. +If you have problems, you may need to regenerate the build system entirely. +To do so, use the procedure documented by the package, typically `autoreconf'.])]) + +# intlmacosx.m4 serial 1 (gettext-0.17) +dnl Copyright (C) 2004-2007 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 MacOS X. +dnl Defines INTL_MACOSX_LIBS. +AC_DEFUN([gt_INTL_MACOSX], +[ + dnl Check for API introduced in MacOS X 10.2. + AC_CACHE_CHECK([for CFPreferencesCopyAppValue], + gt_cv_func_CFPreferencesCopyAppValue, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#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 MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) + fi + dnl Check for API introduced in MacOS X 10.3. + AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, + [gt_save_LIBS="$LIBS" + LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" + AC_TRY_LINK([#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 MacOS 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]) +]) + +# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written 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. + +m4_define([_LT_COPYING], [dnl +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +]) + +# serial 56 LT_INIT + + +# LT_PREREQ(VERSION) +# ------------------ +# Complain and exit if this libtool version is less that VERSION. +m4_defun([LT_PREREQ], +[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, + [m4_default([$3], + [m4_fatal([Libtool version $1 or higher is required], + 63)])], + [$2])]) + + +# _LT_CHECK_BUILDDIR +# ------------------ +# Complain if the absolute build directory name contains unusual characters +m4_defun([_LT_CHECK_BUILDDIR], +[case `pwd` in + *\ * | *\ *) + AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; +esac +]) + + +# LT_INIT([OPTIONS]) +# ------------------ +AC_DEFUN([LT_INIT], +[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +])# LT_INIT + +# Old names: +AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) +AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PROG_LIBTOOL], []) +dnl AC_DEFUN([AM_PROG_LIBTOOL], []) + + +# _LT_CC_BASENAME(CC) +# ------------------- +# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. +m4_defun([_LT_CC_BASENAME], +[for cc_temp in $1""; do + case $cc_temp in + compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; + distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` +]) + + +# _LT_FILEUTILS_DEFAULTS +# ---------------------- +# It is okay to use these file commands and assume they have been set +# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. +m4_defun([_LT_FILEUTILS_DEFAULTS], +[: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} +])# _LT_FILEUTILS_DEFAULTS + + +# _LT_SETUP +# --------- +m4_defun([_LT_SETUP], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +_LT_DECL([], [host_alias], [0], [The host system])dnl +_LT_DECL([], [host], [0])dnl +_LT_DECL([], [host_os], [0])dnl +dnl +_LT_DECL([], [build_alias], [0], [The build system])dnl +_LT_DECL([], [build], [0])dnl +_LT_DECL([], [build_os], [0])dnl +dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +dnl +AC_REQUIRE([AC_PROG_LN_S])dnl +test -z "$LN_S" && LN_S="ln -s" +_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl +dnl +AC_REQUIRE([LT_CMD_MAX_LEN])dnl +_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl +_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl +dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_CHECK_SHELL_FEATURES])dnl +m4_require([_LT_CMD_RELOAD])dnl +m4_require([_LT_CHECK_MAGIC_METHOD])dnl +m4_require([_LT_CMD_OLD_ARCHIVE])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl + +_LT_CONFIG_LIBTOOL_INIT([ +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi +]) +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +_LT_CHECK_OBJDIR + +m4_require([_LT_TAG_COMPILER])dnl +_LT_PROG_ECHO_BACKSLASH + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\([["`\\]]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +_LT_CC_BASENAME([$compiler]) + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + _LT_PATH_MAGIC + fi + ;; +esac + +# Use C for the default configuration in the libtool script +LT_SUPPORTED_TAG([CC]) +_LT_LANG_C_CONFIG +_LT_LANG_DEFAULT_CONFIG +_LT_CONFIG_COMMANDS +])# _LT_SETUP + + +# _LT_PROG_LTMAIN +# --------------- +# Note that this code is called both from `configure', and `config.status' +# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, +# `config.status' has no value for ac_aux_dir unless we are using Automake, +# so we pass a copy along to make sure it has a sensible value anyway. +m4_defun([_LT_PROG_LTMAIN], +[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl +_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) +ltmain="$ac_aux_dir/ltmain.sh" +])# _LT_PROG_LTMAIN + + + +# So that we can recreate a full libtool script including additional +# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS +# in macros and then make a single call at the end using the `libtool' +# label. + + +# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) +# ---------------------------------------- +# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL_INIT], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_INIT], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_INIT]) + + +# _LT_CONFIG_LIBTOOL([COMMANDS]) +# ------------------------------ +# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. +m4_define([_LT_CONFIG_LIBTOOL], +[m4_ifval([$1], + [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], + [$1 +])])]) + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) + + +# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) +# ----------------------------------------------------- +m4_defun([_LT_CONFIG_SAVE_COMMANDS], +[_LT_CONFIG_LIBTOOL([$1]) +_LT_CONFIG_LIBTOOL_INIT([$2]) +]) + + +# _LT_FORMAT_COMMENT([COMMENT]) +# ----------------------------- +# Add leading comment marks to the start of each line, and a trailing +# full-stop to the whole comment if one is not present already. +m4_define([_LT_FORMAT_COMMENT], +[m4_ifval([$1], [ +m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], + [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) +)]) + + + + + +# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) +# ------------------------------------------------------------------- +# CONFIGNAME is the name given to the value in the libtool script. +# VARNAME is the (base) name used in the configure script. +# VALUE may be 0, 1 or 2 for a computed quote escaped value based on +# VARNAME. Any other value will be used directly. +m4_define([_LT_DECL], +[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], + [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], + [m4_ifval([$1], [$1], [$2])]) + lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) + m4_ifval([$4], + [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) + lt_dict_add_subkey([lt_decl_dict], [$2], + [tagged?], [m4_ifval([$5], [yes], [no])])]) +]) + + +# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) +# -------------------------------------------------------- +m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) + + +# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_tag_varnames], +[_lt_decl_filter([tagged?], [yes], $@)]) + + +# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) +# --------------------------------------------------------- +m4_define([_lt_decl_filter], +[m4_case([$#], + [0], [m4_fatal([$0: too few arguments: $#])], + [1], [m4_fatal([$0: too few arguments: $#: $1])], + [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], + [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], + [lt_dict_filter([lt_decl_dict], $@)])[]dnl +]) + + +# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) +# -------------------------------------------------- +m4_define([lt_decl_quote_varnames], +[_lt_decl_filter([value], [1], $@)]) + + +# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_dquote_varnames], +[_lt_decl_filter([value], [2], $@)]) + + +# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) +# --------------------------------------------------- +m4_define([lt_decl_varnames_tagged], +[m4_assert([$# <= 2])dnl +_$0(m4_quote(m4_default([$1], [[, ]])), + m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), + m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) +m4_define([_lt_decl_varnames_tagged], +[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) + + +# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) +# ------------------------------------------------ +m4_define([lt_decl_all_varnames], +[_$0(m4_quote(m4_default([$1], [[, ]])), + m4_if([$2], [], + m4_quote(lt_decl_varnames), + m4_quote(m4_shift($@))))[]dnl +]) +m4_define([_lt_decl_all_varnames], +[lt_join($@, lt_decl_varnames_tagged([$1], + lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl +]) + + +# _LT_CONFIG_STATUS_DECLARE([VARNAME]) +# ------------------------------------ +# Quote a variable value, and forward it to `config.status' so that its +# declaration there will have the same value as in `configure'. VARNAME +# must have a single quote delimited value for this to work. +m4_define([_LT_CONFIG_STATUS_DECLARE], +[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`']) + + +# _LT_CONFIG_STATUS_DECLARATIONS +# ------------------------------ +# We delimit libtool config variables with single quotes, so when +# we write them to config.status, we have to be sure to quote all +# embedded single quotes properly. In configure, this macro expands +# each variable declared with _LT_DECL (and _LT_TAGDECL) into: +# +# ='`$ECHO "X$" | $Xsed -e "$delay_single_quote_subst"`' +m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], +[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), + [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAGS +# ---------------- +# Output comment and list of tags supported by the script +m4_defun([_LT_LIBTOOL_TAGS], +[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl +available_tags="_LT_TAGS"dnl +]) + + +# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) +# ----------------------------------- +# Extract the dictionary values for VARNAME (optionally with TAG) and +# expand to a commented shell variable setting: +# +# # Some comment about what VAR is for. +# visible_name=$lt_internal_name +m4_define([_LT_LIBTOOL_DECLARE], +[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], + [description])))[]dnl +m4_pushdef([_libtool_name], + m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl +m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), + [0], [_libtool_name=[$]$1], + [1], [_libtool_name=$lt_[]$1], + [2], [_libtool_name=$lt_[]$1], + [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl +m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl +]) + + +# _LT_LIBTOOL_CONFIG_VARS +# ----------------------- +# Produce commented declarations of non-tagged libtool config variables +# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' +# script. Tagged libtool config variables (even for the LIBTOOL CONFIG +# section) are produced by _LT_LIBTOOL_TAG_VARS. +m4_defun([_LT_LIBTOOL_CONFIG_VARS], +[m4_foreach([_lt_var], + m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) + + +# _LT_LIBTOOL_TAG_VARS(TAG) +# ------------------------- +m4_define([_LT_LIBTOOL_TAG_VARS], +[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), + [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) + + +# _LT_TAGVAR(VARNAME, [TAGNAME]) +# ------------------------------ +m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) + + +# _LT_CONFIG_COMMANDS +# ------------------- +# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of +# variables for single and double quote escaping we saved from calls +# to _LT_DECL, we can put quote escaped variables declarations +# into `config.status', and then the shell code to quote escape them in +# for loops in `config.status'. Finally, any additional code accumulated +# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. +m4_defun([_LT_CONFIG_COMMANDS], +[AC_PROVIDE_IFELSE([LT_OUTPUT], + dnl If the libtool generation code has been placed in $CONFIG_LT, + dnl instead of duplicating it all over again into config.status, + dnl then we will have config.status run $CONFIG_LT later, so it + dnl needs to know what name is stored there: + [AC_CONFIG_COMMANDS([libtool], + [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], + dnl If the libtool generation code is destined for config.status, + dnl expand the accumulated commands and init code now: + [AC_CONFIG_COMMANDS([libtool], + [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) +])#_LT_CONFIG_COMMANDS + + +# Initialize. +m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], +[ + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +_LT_CONFIG_STATUS_DECLARATIONS +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_quote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in lt_decl_all_varnames([[ \ +]], lt_decl_dquote_varnames); do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[[\\\\\\\`\\"\\\$]]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\[$]0 --fallback-echo"')dnl " + lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\` + ;; +esac + +_LT_OUTPUT_LIBTOOL_INIT +]) + + +# LT_OUTPUT +# --------- +# This macro allows early generation of the libtool script (before +# AC_OUTPUT is called), incase it is used in configure for compilation +# tests. +AC_DEFUN([LT_OUTPUT], +[: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +])# LT_OUTPUT + + +# _LT_CONFIG(TAG) +# --------------- +# If TAG is the built-in tag, create an initial libtool script with a +# default configuration from the untagged config vars. Otherwise add code +# to config.status for appending the configuration named by TAG from the +# matching tagged config vars. +m4_defun([_LT_CONFIG], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_CONFIG_SAVE_COMMANDS([ + m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl + m4_if(_LT_TAG, [C], [ + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +_LT_COPYING +_LT_LIBTOOL_TAGS + +# ### BEGIN LIBTOOL CONFIG +_LT_LIBTOOL_CONFIG_VARS +_LT_LIBTOOL_TAG_VARS +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + _LT_PROG_LTMAIN + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + _LT_PROG_XSI_SHELLFNS + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" +], +[cat <<_LT_EOF >> "$ofile" + +dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded +dnl in a comment (ie after a #). +# ### BEGIN LIBTOOL TAG CONFIG: $1 +_LT_LIBTOOL_TAG_VARS(_LT_TAG) +# ### END LIBTOOL TAG CONFIG: $1 +_LT_EOF +])dnl /m4_if +], +[m4_if([$1], [], [ + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile'], []) +])dnl /_LT_CONFIG_SAVE_COMMANDS +])# _LT_CONFIG + + +# LT_SUPPORTED_TAG(TAG) +# --------------------- +# Trace this macro to discover what tags are supported by the libtool +# --tag option, using: +# autoconf --trace 'LT_SUPPORTED_TAG:$1' +AC_DEFUN([LT_SUPPORTED_TAG], []) + + +# C support is built-in for now +m4_define([_LT_LANG_C_enabled], []) +m4_define([_LT_TAGS], []) + + +# LT_LANG(LANG) +# ------------- +# Enable libtool support for the given language if not already enabled. +AC_DEFUN([LT_LANG], +[AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +])# LT_LANG + + +# _LT_LANG(LANGNAME) +# ------------------ +m4_defun([_LT_LANG], +[m4_ifdef([_LT_LANG_]$1[_enabled], [], + [LT_SUPPORTED_TAG([$1])dnl + m4_append([_LT_TAGS], [$1 ])dnl + m4_define([_LT_LANG_]$1[_enabled], [])dnl + _LT_LANG_$1_CONFIG($1)])dnl +])# _LT_LANG + + +# _LT_LANG_DEFAULT_CONFIG +# ----------------------- +m4_defun([_LT_LANG_DEFAULT_CONFIG], +[AC_PROVIDE_IFELSE([AC_PROG_CXX], + [LT_LANG(CXX)], + [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) + +AC_PROVIDE_IFELSE([AC_PROG_F77], + [LT_LANG(F77)], + [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) + +AC_PROVIDE_IFELSE([AC_PROG_FC], + [LT_LANG(FC)], + [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) + +dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal +dnl pulling things in needlessly. +AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [LT_LANG(GCJ)], + [AC_PROVIDE_IFELSE([LT_PROG_GCJ], + [LT_LANG(GCJ)], + [m4_ifdef([AC_PROG_GCJ], + [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([A][M_PROG_GCJ], + [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) + m4_ifdef([LT_PROG_GCJ], + [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) + +AC_PROVIDE_IFELSE([LT_PROG_RC], + [LT_LANG(RC)], + [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) +])# _LT_LANG_DEFAULT_CONFIG + +# Obsolete macros: +AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_CXX], []) +dnl AC_DEFUN([AC_LIBTOOL_F77], []) +dnl AC_DEFUN([AC_LIBTOOL_FC], []) +dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) + + +# _LT_TAG_COMPILER +# ---------------- +m4_defun([_LT_TAG_COMPILER], +[AC_REQUIRE([AC_PROG_CC])dnl + +_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl +_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl +_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl +_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC +])# _LT_TAG_COMPILER + + +# _LT_COMPILER_BOILERPLATE +# ------------------------ +# Check for compiler boilerplate output or warnings with +# the simple compiler test code. +m4_defun([_LT_COMPILER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* +])# _LT_COMPILER_BOILERPLATE + + +# _LT_LINKER_BOILERPLATE +# ---------------------- +# Check for linker boilerplate output or warnings with +# the simple link test code. +m4_defun([_LT_LINKER_BOILERPLATE], +[m4_require([_LT_DECL_SED])dnl +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* +])# _LT_LINKER_BOILERPLATE + +# _LT_REQUIRED_DARWIN_CHECKS +# ------------------------- +m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ + case $host_os in + rhapsody* | darwin*) + AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) + AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) + AC_CHECK_TOOL([LIPO], [lipo], [:]) + AC_CHECK_TOOL([OTOOL], [otool], [:]) + AC_CHECK_TOOL([OTOOL64], [otool64], [:]) + _LT_DECL([], [DSYMUTIL], [1], + [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) + _LT_DECL([], [NMEDIT], [1], + [Tool to change global to local symbols on Mac OS X]) + _LT_DECL([], [LIPO], [1], + [Tool to manipulate fat objects and archives on Mac OS X]) + _LT_DECL([], [OTOOL], [1], + [ldd/readelf like tool for Mach-O binaries on Mac OS X]) + _LT_DECL([], [OTOOL64], [1], + [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) + + AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], + [lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&AS_MESSAGE_LOG_FD + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi]) + AC_CACHE_CHECK([for -exported_symbols_list linker flag], + [lt_cv_ld_exported_symbols_list], + [lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [lt_cv_ld_exported_symbols_list=yes], + [lt_cv_ld_exported_symbols_list=no]) + LDFLAGS="$save_LDFLAGS" + ]) + case $host_os in + rhapsody* | darwin1.[[012]]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[[012]]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac +]) + + +# _LT_DARWIN_LINKER_FEATURES +# -------------------------- +# Checks for linker and compiler features on darwin +m4_defun([_LT_DARWIN_LINKER_FEATURES], +[ + m4_require([_LT_REQUIRED_DARWIN_CHECKS]) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_automatic, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(whole_archive_flag_spec, $1)='' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + m4_if([$1], [CXX], +[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then + _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi +],[]) + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi +]) + +# _LT_SYS_MODULE_PATH_AIX +# ----------------------- +# Links a minimal program and checks the executable +# for the system default hardcoded library path. In most cases, +# this is /usr/lib:/lib, but when the MPI compilers are used +# the location of the communication and MPI libs are included too. +# If we don't find anything, use the default library path according +# to the aix ld manual. +m4_defun([_LT_SYS_MODULE_PATH_AIX], +[m4_require([_LT_DECL_SED])dnl +AC_LINK_IFELSE(AC_LANG_PROGRAM,[ +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi],[]) +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi +])# _LT_SYS_MODULE_PATH_AIX + + +# _LT_SHELL_INIT(ARG) +# ------------------- +m4_define([_LT_SHELL_INIT], +[ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) +$1 +AC_DIVERT_POP +])# _LT_SHELL_INIT + + +# _LT_PROG_ECHO_BACKSLASH +# ----------------------- +# Add some code to the start of the generated configure script which +# will find an echo command which doesn't interpret backslashes. +m4_defun([_LT_PROG_ECHO_BACKSLASH], +[_LT_SHELL_INIT([ +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} +fi + +if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +[$]* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" +fi + +AC_SUBST(lt_ECHO) +]) +_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) +_LT_DECL([], [ECHO], [1], + [An echo program that does not interpret backslashes]) +])# _LT_PROG_ECHO_BACKSLASH + + +# _LT_ENABLE_LOCK +# --------------- +m4_defun([_LT_ENABLE_LOCK], +[AC_ARG_ENABLE([libtool-lock], + [AS_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '[#]line __oline__ "configure"' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, + [AC_LANG_PUSH(C) + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) + AC_LANG_POP]) + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if AC_TRY_EVAL(ac_compile); then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" +])# _LT_ENABLE_LOCK + + +# _LT_CMD_OLD_ARCHIVE +# ------------------- +m4_defun([_LT_CMD_OLD_ARCHIVE], +[AC_CHECK_TOOL(AR, ar, false) +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru +_LT_DECL([], [AR], [1], [The archiver]) +_LT_DECL([], [AR_FLAGS], [1]) + +AC_CHECK_TOOL(STRIP, strip, :) +test -z "$STRIP" && STRIP=: +_LT_DECL([], [STRIP], [1], [A symbol stripping program]) + +AC_CHECK_TOOL(RANLIB, ranlib, :) +test -z "$RANLIB" && RANLIB=: +_LT_DECL([], [RANLIB], [1], + [Commands used to install an old-style archive]) + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi +_LT_DECL([], [old_postinstall_cmds], [2]) +_LT_DECL([], [old_postuninstall_cmds], [2]) +_LT_TAGDECL([], [old_archive_cmds], [2], + [Commands used to build an old-style archive]) +])# _LT_CMD_OLD_ARCHIVE + + +# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------------------- +# Check whether the given compiler option works +AC_DEFUN([_LT_COMPILER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +])# _LT_COMPILER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) + + +# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, +# [ACTION-SUCCESS], [ACTION-FAILURE]) +# ---------------------------------------------------- +# Check whether the given linker option works +AC_DEFUN([_LT_LINKER_OPTION], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +])# _LT_LINKER_OPTION + +# Old name: +AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) + + +# LT_CMD_MAX_LEN +#--------------- +AC_DEFUN([LT_CMD_MAX_LEN], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +])# LT_CMD_MAX_LEN + +# Old name: +AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) + + +# _LT_HEADER_DLFCN +# ---------------- +m4_defun([_LT_HEADER_DLFCN], +[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl +])# _LT_HEADER_DLFCN + + +# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, +# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) +# ---------------------------------------------------------------- +m4_defun([_LT_TRY_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "$cross_compiling" = yes; then : + [$4] +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +[#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +}] +_LT_EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_dlunknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi +fi +rm -fr conftest* +])# _LT_TRY_DLOPEN_SELF + + +# LT_SYS_DLOPEN_SELF +# ------------------ +AC_DEFUN([LT_SYS_DLOPEN_SELF], +[m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +])# LT_SYS_DLOPEN_SELF + +# Old name: +AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) + + +# _LT_COMPILER_C_O([TAGNAME]) +# --------------------------- +# Check to see if options -c and -o are simultaneously supported by compiler. +# This macro does not hard code the compiler like AC_PROG_CC_C_O. +m4_defun([_LT_COMPILER_C_O], +[m4_require([_LT_DECL_SED])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . 2>&AS_MESSAGE_LOG_FD + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* +]) +_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], + [Does compiler simultaneously support -c and -o options?]) +])# _LT_COMPILER_C_O + + +# _LT_COMPILER_FILE_LOCKS([TAGNAME]) +# ---------------------------------- +# Check to see if we can do hard links to lock some files if needed +m4_defun([_LT_COMPILER_FILE_LOCKS], +[m4_require([_LT_ENABLE_LOCK])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +_LT_COMPILER_C_O([$1]) + +hard_links="nottested" +if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + AC_MSG_CHECKING([if we can lock with hard links]) + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + AC_MSG_RESULT([$hard_links]) + if test "$hard_links" = no; then + AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) + need_locks=warn + fi +else + need_locks=no +fi +_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) +])# _LT_COMPILER_FILE_LOCKS + + +# _LT_CHECK_OBJDIR +# ---------------- +m4_defun([_LT_CHECK_OBJDIR], +[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], +[rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null]) +objdir=$lt_cv_objdir +_LT_DECL([], [objdir], [0], + [The name of the directory that contains temporary libtool files])dnl +m4_pattern_allow([LT_OBJDIR])dnl +AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", + [Define to the sub-directory in which libtool stores uninstalled libraries.]) +])# _LT_CHECK_OBJDIR + + +# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) +# -------------------------------------- +# Check hardcoding attributes. +m4_defun([_LT_LINKER_HARDCODE_LIBPATH], +[AC_MSG_CHECKING([how to hardcode library paths into programs]) +_LT_TAGVAR(hardcode_action, $1)= +if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || + test -n "$_LT_TAGVAR(runpath_var, $1)" || + test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_TAGVAR(hardcode_action, $1)=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_TAGVAR(hardcode_action, $1)=unsupported +fi +AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) + +if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || + test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi +_LT_TAGDECL([], [hardcode_action], [0], + [How to hardcode a shared library path into an executable]) +])# _LT_LINKER_HARDCODE_LIBPATH + + +# _LT_CMD_STRIPLIB +# ---------------- +m4_defun([_LT_CMD_STRIPLIB], +[m4_require([_LT_DECL_EGREP]) +striplib= +old_striplib= +AC_MSG_CHECKING([whether stripping libraries is possible]) +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + AC_MSG_RESULT([yes]) +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +fi +_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) +_LT_DECL([], [striplib], [1]) +])# _LT_CMD_STRIPLIB + + +# _LT_SYS_DYNAMIC_LINKER([TAG]) +# ----------------------------- +# PORTME Fill in your ld.so characteristics +m4_defun([_LT_SYS_DYNAMIC_LINKER], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_OBJDUMP])dnl +m4_require([_LT_DECL_SED])dnl +AC_MSG_CHECKING([dynamic linker characteristics]) +m4_if([$1], + [], [ +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[[lt_foo]]++; } + if (lt_freq[[lt_foo]] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi]) +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[[4-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[[01]] | aix4.[[01]].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[[45]]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' +m4_if([$1], [],[ + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[[123]]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[[01]]* | freebsdelf3.[[01]]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ + freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[[3-9]]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ + LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" + AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], + [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], + [shlibpath_overrides_runpath=yes])]) + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[[89]] | openbsd2.[[89]].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +AC_MSG_RESULT([$dynamic_linker]) +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + +_LT_DECL([], [variables_saved_for_relink], [1], + [Variables whose values should be saved in libtool wrapper scripts and + restored at link time]) +_LT_DECL([], [need_lib_prefix], [0], + [Do we need the "lib" prefix for modules?]) +_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) +_LT_DECL([], [version_type], [0], [Library versioning type]) +_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) +_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) +_LT_DECL([], [shlibpath_overrides_runpath], [0], + [Is shlibpath searched before the hard-coded library search path?]) +_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) +_LT_DECL([], [library_names_spec], [1], + [[List of archive names. First name is the real one, the rest are links. + The last name is the one that the linker finds with -lNAME]]) +_LT_DECL([], [soname_spec], [1], + [[The coded name of the library, if different from the real name]]) +_LT_DECL([], [postinstall_cmds], [2], + [Command to use after installation of a shared archive]) +_LT_DECL([], [postuninstall_cmds], [2], + [Command to use after uninstallation of a shared archive]) +_LT_DECL([], [finish_cmds], [2], + [Commands used to finish a libtool library installation in a directory]) +_LT_DECL([], [finish_eval], [1], + [[As "finish_cmds", except a single script fragment to be evaled but + not shown]]) +_LT_DECL([], [hardcode_into_libs], [0], + [Whether we should hardcode library paths into libraries]) +_LT_DECL([], [sys_lib_search_path_spec], [2], + [Compile-time system search path for libraries]) +_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], + [Run-time system search path for libraries]) +])# _LT_SYS_DYNAMIC_LINKER + + +# _LT_PATH_TOOL_PREFIX(TOOL) +# -------------------------- +# find a file program which can recognize shared library +AC_DEFUN([_LT_PATH_TOOL_PREFIX], +[m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +])# _LT_PATH_TOOL_PREFIX + +# Old name: +AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) + + +# _LT_PATH_MAGIC +# -------------- +# find a file program which can recognize a shared library +m4_defun([_LT_PATH_MAGIC], +[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi +fi +])# _LT_PATH_MAGIC + + +# LT_PATH_LD +# ---------- +# find the pathname to the GNU or non-GNU linker +AC_DEFUN([LT_PATH_LD], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +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(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_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 `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'] + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[[3-9]]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac +]) +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + +_LT_DECL([], [deplibs_check_method], [1], + [Method to check whether dependent libraries are shared objects]) +_LT_DECL([], [file_magic_cmd], [1], + [Command to use when deplibs_check_method == "file_magic"]) +])# _LT_CHECK_MAGIC_METHOD + + +# LT_PATH_NM +# ---------- +# find the pathname to a BSD- or MS-compatible name lister +AC_DEFUN([LT_PATH_NM], +[AC_REQUIRE([AC_PROG_CC])dnl +AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, +[if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +])# LT_PATH_NM + +# Old names: +AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) +AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_PROG_NM], []) +dnl AC_DEFUN([AC_PROG_NM], []) + + +# LT_LIB_M +# -------- +# check for math library +AC_DEFUN([LT_LIB_M], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +])# LT_LIB_M + +# Old name: +AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_CHECK_LIBM], []) + + +# _LT_COMPILER_NO_RTTI([TAGNAME]) +# ------------------------------- +m4_defun([_LT_COMPILER_NO_RTTI], +[m4_require([_LT_TAG_COMPILER])dnl + +_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + +if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) +fi +_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], + [Compiler flag to turn off builtin functions]) +])# _LT_COMPILER_NO_RTTI + + +# _LT_CMD_GLOBAL_SYMBOLS +# ---------------------- +m4_defun([_LT_CMD_GLOBAL_SYMBOLS], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_PATH_NM])dnl +AC_REQUIRE([LT_PATH_LD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_TAG_COMPILER])dnl + +# Check for command to grab the raw symbol name followed by C symbol from nm. +AC_MSG_CHECKING([command to parse $NM output from $compiler object]) +AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], +[ +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[[BCDEGRST]]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[[BCDT]]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[[ABCDGISTW]]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + ;; +irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; +osf*) + symcode='[[BCDEGQRST]]' + ;; +solaris*) + symcode='[[BDRT]]' + ;; +sco3.2v5*) + symcode='[[DT]]' + ;; +sysv4.2uw2*) + symcode='[[DT]]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[[ABDT]]' + ;; +sysv4) + symcode='[[DFNSTU]]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[[ABCDGIRSTW]]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK ['"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx]" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[[]] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done +]) +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + AC_MSG_RESULT(failed) +else + AC_MSG_RESULT(ok) +fi + +_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], + [Take the output of nm and produce a listing of raw symbols and C names]) +_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], + [Transform the output of nm in a proper C declaration]) +_LT_DECL([global_symbol_to_c_name_address], + [lt_cv_sys_global_symbol_to_c_name_address], [1], + [Transform the output of nm in a C name address pair]) +_LT_DECL([global_symbol_to_c_name_address_lib_prefix], + [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], + [Transform the output of nm in a C name address pair when lib prefix is needed]) +]) # _LT_CMD_GLOBAL_SYMBOLS + + +# _LT_COMPILER_PIC([TAGNAME]) +# --------------------------- +m4_defun([_LT_COMPILER_PIC], +[m4_require([_LT_TAG_COMPILER])dnl +_LT_TAGVAR(lt_prog_compiler_wl, $1)= +_LT_TAGVAR(lt_prog_compiler_pic, $1)= +_LT_TAGVAR(lt_prog_compiler_static, $1)= + +AC_MSG_CHECKING([for $compiler option to produce PIC]) +m4_if([$1], [CXX], [ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix[[4-9]]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx*) + # Digital/Compaq C++ + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc*) + # Lucid + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +], +[ + if test "$GCC" = yes; then + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + interix[[3-9]]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + m4_if([$1], [GCJ], [], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) + ;; + + hpux9* | hpux10* | hpux11*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' + _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + ccc*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_TAGVAR(lt_prog_compiler_wl, $1)='' + ;; + esac + ;; + esac + ;; + + newsos6) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + rdos*) + _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + solaris*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; + *) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; + esac + ;; + + sunos4*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + unicos*) + _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + + uts4*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi +]) +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" + ;; +esac +AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) +_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], + [How to pass a linker flag through the compiler]) + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then + _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], + [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], + [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) +fi +_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], + [Additional compiler flags for building library objects]) + +# +# Check to make sure the static flag actually works. +# +wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" +_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], + _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), + $lt_tmp_static_flag, + [], + [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) +_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], + [Compiler flag to prevent dynamic linking]) +])# _LT_COMPILER_PIC + + +# _LT_LINKER_SHLIBS([TAGNAME]) +# ---------------------------- +# See if the linker supports building shared libraries. +m4_defun([_LT_LINKER_SHLIBS], +[AC_REQUIRE([LT_PATH_LD])dnl +AC_REQUIRE([LT_PATH_NM])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +m4_require([_LT_TAG_COMPILER])dnl +AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) +m4_if([$1], [CXX], [ + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[[4-9]]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] +], [ + runpath_var= + _LT_TAGVAR(allow_undefined_flag, $1)= + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(archive_cmds, $1)= + _LT_TAGVAR(archive_expsym_cmds, $1)= + _LT_TAGVAR(compiler_needs_object, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + _LT_TAGVAR(hardcode_automatic, $1)=no + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_TAGVAR(hardcode_libdir_separator, $1)= + _LT_TAGVAR(hardcode_minus_L, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_TAGVAR(inherit_rpath, $1)=no + _LT_TAGVAR(link_all_deplibs, $1)=unknown + _LT_TAGVAR(module_cmds, $1)= + _LT_TAGVAR(module_expsym_cmds, $1)= + _LT_TAGVAR(old_archive_from_new_cmds, $1)= + _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_TAGVAR(thread_safe_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_TAGVAR(include_expsyms, $1)= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. +dnl Note also adjust exclude_expsyms for C++ above. + extract_expsyms_cmds= + + 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 + + _LT_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # 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. + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[[3-9]]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + _LT_TAGVAR(whole_archive_flag_spec, $1)= + tmp_sharedflag='--shared' ;; + xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) + _LT_TAGVAR(ld_shlibs, $1)=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + sunos4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then + runpath_var= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=yes + _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_TAGVAR(hardcode_direct, $1)=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 + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + 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 + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + 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 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='' + ;; + m68k) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + ;; + + bsdi[[45]]*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + 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. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' + _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`' + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + AC_LINK_IFELSE(int foo(void) {}, + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + ) + LDFLAGS="$save_LDFLAGS" + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + os2*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_TAGVAR(archive_cmds_need_lc, $1)='no' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + solaris*) + _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + fi + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' + ;; + esac + fi + fi +]) +AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) +test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + +_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld + +_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl +_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl +_LT_DECL([], [extract_expsyms_cmds], [2], + [The commands to extract the exported symbol list from a shared archive]) + +# +# Do we need to explicitly link libc? +# +case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in +x|xyes) + # Assume -lc should be added + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_TAGVAR(archive_cmds, $1) in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + AC_MSG_CHECKING([whether -lc should be explicitly linked in]) + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if AC_TRY_EVAL(ac_compile) 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) + pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) + _LT_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) + then + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; +esac + +_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], + [Whether or not to add -lc for building shared libraries]) +_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], + [enable_shared_with_static_runtimes], [0], + [Whether or not to disallow shared libs when runtime libs are static]) +_LT_TAGDECL([], [export_dynamic_flag_spec], [1], + [Compiler flag to allow reflexive dlopens]) +_LT_TAGDECL([], [whole_archive_flag_spec], [1], + [Compiler flag to generate shared objects directly from archives]) +_LT_TAGDECL([], [compiler_needs_object], [1], + [Whether the compiler copes with passing no objects directly]) +_LT_TAGDECL([], [old_archive_from_new_cmds], [2], + [Create an old-style archive from a shared archive]) +_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], + [Create a temporary old-style archive to link instead of a shared archive]) +_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) +_LT_TAGDECL([], [archive_expsym_cmds], [2]) +_LT_TAGDECL([], [module_cmds], [2], + [Commands used to build a loadable module if different from building + a shared archive.]) +_LT_TAGDECL([], [module_expsym_cmds], [2]) +_LT_TAGDECL([], [with_gnu_ld], [1], + [Whether we are building with GNU ld or not]) +_LT_TAGDECL([], [allow_undefined_flag], [1], + [Flag that allows shared libraries with undefined symbols to be built]) +_LT_TAGDECL([], [no_undefined_flag], [1], + [Flag that enforces no undefined symbols]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], + [Flag to hardcode $libdir into a binary during linking. + This must work even if $libdir does not exist]) +_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1], + [[If ld is used when linking, flag to hardcode $libdir into a binary + during linking. This must work even if $libdir does not exist]]) +_LT_TAGDECL([], [hardcode_libdir_separator], [1], + [Whether we need a single "-rpath" flag with a separated argument]) +_LT_TAGDECL([], [hardcode_direct], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary]) +_LT_TAGDECL([], [hardcode_direct_absolute], [0], + [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes + DIR into the resulting binary and the resulting library dependency is + "absolute", i.e impossible to change by setting ${shlibpath_var} if the + library is relocated]) +_LT_TAGDECL([], [hardcode_minus_L], [0], + [Set to "yes" if using the -LDIR flag during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_shlibpath_var], [0], + [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR + into the resulting binary]) +_LT_TAGDECL([], [hardcode_automatic], [0], + [Set to "yes" if building a shared library automatically hardcodes DIR + into the library and all subsequent libraries and executables linked + against it]) +_LT_TAGDECL([], [inherit_rpath], [0], + [Set to yes if linker adds runtime paths of dependent libraries + to runtime path list]) +_LT_TAGDECL([], [link_all_deplibs], [0], + [Whether libtool must link a program against all its dependency libraries]) +_LT_TAGDECL([], [fix_srcfile_path], [1], + [Fix the shell variable $srcfile for the compiler]) +_LT_TAGDECL([], [always_export_symbols], [0], + [Set to "yes" if exported symbols are required]) +_LT_TAGDECL([], [export_symbols_cmds], [2], + [The commands to list exported symbols]) +_LT_TAGDECL([], [exclude_expsyms], [1], + [Symbols that should not be listed in the preloaded symbols]) +_LT_TAGDECL([], [include_expsyms], [1], + [Symbols that must always be exported]) +_LT_TAGDECL([], [prelink_cmds], [2], + [Commands necessary for linking programs (against libraries) with templates]) +_LT_TAGDECL([], [file_list_spec], [1], + [Specify filename containing input files]) +dnl FIXME: Not yet implemented +dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], +dnl [Compiler flag to generate thread safe objects]) +])# _LT_LINKER_SHLIBS + + +# _LT_LANG_C_CONFIG([TAG]) +# ------------------------ +# Ensure that the configuration variables for a C compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_C_CONFIG], +[m4_require([_LT_DECL_EGREP])dnl +lt_save_CC="$CC" +AC_LANG_PUSH(C) + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + +_LT_TAG_COMPILER +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + LT_SYS_DLOPEN_SELF + _LT_CMD_STRIPLIB + + # Report which library types will actually be built + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_CONFIG($1) +fi +AC_LANG_POP +CC="$lt_save_CC" +])# _LT_LANG_C_CONFIG + + +# _LT_PROG_CXX +# ------------ +# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++ +# compiler, we have our own version here. +m4_defun([_LT_PROG_CXX], +[ +pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes]) +AC_PROG_CXX +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + AC_PROG_CXXCPP +else + _lt_caught_CXX_error=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_CXX + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_CXX], []) + + +# _LT_LANG_CXX_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a C++ compiler are suitably +# defined. These variables are subsequently used by _LT_CONFIG to write +# the compiler configuration to `libtool'. +m4_defun([_LT_LANG_CXX_CONFIG], +[AC_REQUIRE([_LT_PROG_CXX])dnl +m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_LANG_PUSH(C++) +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(compiler_needs_object, $1)=no +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + LT_PATH_LD + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_TAGVAR(whole_archive_flag_spec, $1)= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + _LT_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + 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 + exp_sym_flag='-Bexport' + no_entry_flag="" + 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 + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + _LT_TAGVAR(archive_cmds, $1)='' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[[012]]|aix4.[[012]].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + 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 + _LT_TAGVAR(hardcode_direct, $1)=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + _LT_TAGVAR(hardcode_minus_L, $1)=yes + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + _LT_TAGVAR(always_export_symbols, $1)=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + _LT_SYS_MODULE_PATH_AIX + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' + _LT_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_TAGVAR(always_export_symbols, $1)=no + _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + darwin* | rhapsody*) + _LT_DARWIN_LINKER_FEATURES($1) + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + freebsd[[12]]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + freebsd-elf*) + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + gnu*) + ;; + + hpux9*) + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + *) + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + interix[[3-9]]*) + _LT_TAGVAR(hardcode_direct, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + _LT_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_TAGVAR(inherit_rpath, $1)=yes + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*) + _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + _LT_TAGVAR(compiler_needs_object, $1)=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + _LT_TAGVAR(ld_shlibs, $1)=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + _LT_TAGVAR(hardcode_direct, $1)=yes + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_direct_absolute, $1)=yes + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + cxx*) + case $host in + osf3*) + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + ;; + *) + _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_TAGVAR(archive_cmds_need_lc,$1)=yes + _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' + ;; + esac + _LT_TAGVAR(link_all_deplibs, $1)=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) + _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' + _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' + _LT_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' + _LT_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_TAGVAR(link_all_deplibs, $1)=yes + _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + + *) + # FIXME: insert proper C++ library support + _LT_TAGVAR(ld_shlibs, $1)=no + ;; + esac + + AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) + test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_TAGVAR(GCC, $1)="$GXX" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +AC_LANG_POP +])# _LT_LANG_CXX_CONFIG + + +# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) +# --------------------------------- +# Figure out "hidden" library dependencies from verbose +# compiler output when linking a shared library. +# Parse the compiler output and extract the necessary +# objects, libraries and library flags. +m4_defun([_LT_SYS_HIDDEN_LIBDEPS], +[m4_require([_LT_FILEUTILS_DEFAULTS])dnl +# Dependencies to place before and after the object being linked: +_LT_TAGVAR(predep_objects, $1)= +_LT_TAGVAR(postdep_objects, $1)= +_LT_TAGVAR(predeps, $1)= +_LT_TAGVAR(postdeps, $1)= +_LT_TAGVAR(compiler_lib_search_path, $1)= + +dnl we can't use the lt_simple_compile_test_code here, +dnl because it contains code intended for an executable, +dnl not a library. It's possible we should let each +dnl tag define a new lt_????_link_test_code variable, +dnl but it's only used here... +m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF +int a; +void foo (void) { a = 0; } +_LT_EOF +], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF +], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer*4 a + a=0 + return + end +_LT_EOF +], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF + subroutine foo + implicit none + integer a + a=0 + return + end +_LT_EOF +], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF +public class foo { + private int a; + public void bar (void) { + a = 0; + } +}; +_LT_EOF +]) +dnl Parse the compiler output and extract the necessary +dnl objects, libraries and library flags. +if AC_TRY_EVAL(ac_compile); then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then + _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" + else + _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$_LT_TAGVAR(postdeps, $1)"; then + _LT_TAGVAR(postdeps, $1)="${prev}${p}" + else + _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$_LT_TAGVAR(predep_objects, $1)"; then + _LT_TAGVAR(predep_objects, $1)="$p" + else + _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" + fi + else + if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then + _LT_TAGVAR(postdep_objects, $1)="$p" + else + _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling $1 test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +m4_if([$1], [CXX], +[case $host_os in +interix[[3-9]]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + _LT_TAGVAR(predep_objects,$1)= + _LT_TAGVAR(postdep_objects,$1)= + _LT_TAGVAR(postdeps,$1)= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac +]) + +case " $_LT_TAGVAR(postdeps, $1) " in +*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; +esac + _LT_TAGVAR(compiler_lib_search_dirs, $1)= +if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then + _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi +_LT_TAGDECL([], [compiler_lib_search_dirs], [1], + [The directories searched by this compiler when creating a shared library]) +_LT_TAGDECL([], [predep_objects], [1], + [Dependencies to place before and after the objects being linked to + create a shared library]) +_LT_TAGDECL([], [postdep_objects], [1]) +_LT_TAGDECL([], [predeps], [1]) +_LT_TAGDECL([], [postdeps], [1]) +_LT_TAGDECL([], [compiler_lib_search_path], [1], + [The library search path used internally by the compiler when linking + a shared library]) +])# _LT_SYS_HIDDEN_LIBDEPS + + +# _LT_PROG_F77 +# ------------ +# Since AC_PROG_F77 is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_F77], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes]) +AC_PROG_F77 +if test -z "$F77" || test "X$F77" = "Xno"; then + _lt_disable_F77=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_F77 + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_F77], []) + + +# _LT_LANG_F77_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for a Fortran 77 compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_F77_CONFIG], +[AC_REQUIRE([_LT_PROG_F77])dnl +AC_LANG_PUSH(Fortran 77) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for f77 test sources. +ac_ext=f + +# Object file extension for compiled f77 test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the F77 compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_F77" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${F77-"f77"} + compiler=$CC + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + GCC=$G77 + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$G77" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_F77" != yes + +AC_LANG_POP +])# _LT_LANG_F77_CONFIG + + +# _LT_PROG_FC +# ----------- +# Since AC_PROG_FC is broken, in that it returns the empty string +# if there is no fortran compiler, we have our own version here. +m4_defun([_LT_PROG_FC], +[ +pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes]) +AC_PROG_FC +if test -z "$FC" || test "X$FC" = "Xno"; then + _lt_disable_FC=yes +fi +popdef([AC_MSG_ERROR]) +])# _LT_PROG_FC + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([_LT_PROG_FC], []) + + +# _LT_LANG_FC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for a Fortran compiler are +# suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_FC_CONFIG], +[AC_REQUIRE([_LT_PROG_FC])dnl +AC_LANG_PUSH(Fortran) + +_LT_TAGVAR(archive_cmds_need_lc, $1)=no +_LT_TAGVAR(allow_undefined_flag, $1)= +_LT_TAGVAR(always_export_symbols, $1)=no +_LT_TAGVAR(archive_expsym_cmds, $1)= +_LT_TAGVAR(export_dynamic_flag_spec, $1)= +_LT_TAGVAR(hardcode_direct, $1)=no +_LT_TAGVAR(hardcode_direct_absolute, $1)=no +_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= +_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= +_LT_TAGVAR(hardcode_libdir_separator, $1)= +_LT_TAGVAR(hardcode_minus_L, $1)=no +_LT_TAGVAR(hardcode_automatic, $1)=no +_LT_TAGVAR(inherit_rpath, $1)=no +_LT_TAGVAR(module_cmds, $1)= +_LT_TAGVAR(module_expsym_cmds, $1)= +_LT_TAGVAR(link_all_deplibs, $1)=unknown +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds +_LT_TAGVAR(no_undefined_flag, $1)= +_LT_TAGVAR(whole_archive_flag_spec, $1)= +_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no + +# Source file extension for fc test sources. +ac_ext=${ac_fc_srcext-f} + +# Object file extension for compiled fc test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# No sense in running all these tests if we already determined that +# the FC compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_disable_FC" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="\ + subroutine t + return + end +" + + # Code to be used in simple link tests + lt_simple_link_test_code="\ + program t + end +" + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_TAG_COMPILER + + # save warnings/boilerplate of simple test code + _LT_COMPILER_BOILERPLATE + _LT_LINKER_BOILERPLATE + + # Allow CC to be a program name with arguments. + lt_save_CC="$CC" + lt_save_GCC=$GCC + CC=${FC-"f95"} + compiler=$CC + GCC=$ac_cv_fc_compiler_gnu + + _LT_TAGVAR(compiler, $1)=$CC + _LT_CC_BASENAME([$compiler]) + + if test -n "$compiler"; then + AC_MSG_CHECKING([if libtool supports shared libraries]) + AC_MSG_RESULT([$can_build_shared]) + + AC_MSG_CHECKING([whether to build shared libraries]) + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + aix[[4-9]]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + AC_MSG_RESULT([$enable_shared]) + + AC_MSG_CHECKING([whether to build static libraries]) + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + AC_MSG_RESULT([$enable_static]) + + _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" + _LT_TAGVAR(LD, $1)="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + _LT_SYS_HIDDEN_LIBDEPS($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_SYS_DYNAMIC_LINKER($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) + fi # test -n "$compiler" + + GCC=$lt_save_GCC + CC="$lt_save_CC" +fi # test "$_lt_disable_FC" != yes + +AC_LANG_POP +])# _LT_LANG_FC_CONFIG + + +# _LT_LANG_GCJ_CONFIG([TAG]) +# -------------------------- +# Ensure that the configuration variables for the GNU Java Compiler compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_GCJ_CONFIG], +[AC_REQUIRE([LT_PROG_GCJ])dnl +AC_LANG_SAVE + +# Source file extension for Java test sources. +ac_ext=java + +# Object file extension for compiled Java test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="class foo {}" + +# Code to be used in simple link tests +lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC=yes +CC=${GCJ-"gcj"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_TAGVAR(LD, $1)="$LD" +_LT_CC_BASENAME([$compiler]) + +# GCJ did not exist at the time GCC didn't implicitly link libc in. +_LT_TAGVAR(archive_cmds_need_lc, $1)=no + +_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + +if test -n "$compiler"; then + _LT_COMPILER_NO_RTTI($1) + _LT_COMPILER_PIC($1) + _LT_COMPILER_C_O($1) + _LT_COMPILER_FILE_LOCKS($1) + _LT_LINKER_SHLIBS($1) + _LT_LINKER_HARDCODE_LIBPATH($1) + + _LT_CONFIG($1) +fi + +AC_LANG_RESTORE + +GCC=$lt_save_GCC +CC="$lt_save_CC" +])# _LT_LANG_GCJ_CONFIG + + +# _LT_LANG_RC_CONFIG([TAG]) +# ------------------------- +# Ensure that the configuration variables for the Windows resource compiler +# are suitably defined. These variables are subsequently used by _LT_CONFIG +# to write the compiler configuration to `libtool'. +m4_defun([_LT_LANG_RC_CONFIG], +[AC_REQUIRE([LT_PROG_RC])dnl +AC_LANG_SAVE + +# Source file extension for RC test sources. +ac_ext=rc + +# Object file extension for compiled RC test sources. +objext=o +_LT_TAGVAR(objext, $1)=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' + +# Code to be used in simple link tests +lt_simple_link_test_code="$lt_simple_compile_test_code" + +# ltmain only uses $CC for tagged configurations so make sure $CC is set. +_LT_TAG_COMPILER + +# save warnings/boilerplate of simple test code +_LT_COMPILER_BOILERPLATE +_LT_LINKER_BOILERPLATE + +# Allow CC to be a program name with arguments. +lt_save_CC="$CC" +lt_save_GCC=$GCC +GCC= +CC=${RC-"windres"} +compiler=$CC +_LT_TAGVAR(compiler, $1)=$CC +_LT_CC_BASENAME([$compiler]) +_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + +if test -n "$compiler"; then + : + _LT_CONFIG($1) +fi + +GCC=$lt_save_GCC +AC_LANG_RESTORE +CC="$lt_save_CC" +])# _LT_LANG_RC_CONFIG + + +# LT_PROG_GCJ +# ----------- +AC_DEFUN([LT_PROG_GCJ], +[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_GCJ], []) + + +# LT_PROG_RC +# ---------- +AC_DEFUN([LT_PROG_RC], +[AC_CHECK_TOOL(RC, windres,) +]) + +# Old name: +AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_RC], []) + + +# _LT_DECL_EGREP +# -------------- +# If we don't have a new enough Autoconf to choose the best grep +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_EGREP], +[AC_REQUIRE([AC_PROG_EGREP])dnl +AC_REQUIRE([AC_PROG_FGREP])dnl +test -z "$GREP" && GREP=grep +_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) +_LT_DECL([], [EGREP], [1], [An ERE matcher]) +_LT_DECL([], [FGREP], [1], [A literal string matcher]) +dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too +AC_SUBST([GREP]) +]) + + +# _LT_DECL_OBJDUMP +# -------------- +# If we don't have a new enough Autoconf to choose the best objdump +# available, choose the one first in the user's PATH. +m4_defun([_LT_DECL_OBJDUMP], +[AC_CHECK_TOOL(OBJDUMP, objdump, false) +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) +AC_SUBST([OBJDUMP]) +]) + + +# _LT_DECL_SED +# ------------ +# Check for a fully-functional sed program, that truncates +# as few characters as possible. Prefer GNU sed if found. +m4_defun([_LT_DECL_SED], +[AC_PROG_SED +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" +_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) +_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], + [Sed that helps us avoid accidentally triggering echo(1) options like -n]) +])# _LT_DECL_SED + +m4_ifndef([AC_PROG_SED], [ +# NOTE: This macro has been submitted for inclusion into # +# GNU Autoconf as AC_PROG_SED. When it is available in # +# a released version of Autoconf we should remove this # +# macro and use it instead. # + +m4_defun([AC_PROG_SED], +[AC_MSG_CHECKING([for a sed that does not truncate output]) +AC_CACHE_VAL(lt_cv_path_SED, +[# Loop through the user's path and test for sed and gsed. +# Then use that list of sed's as ones to test for truncation. +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for lt_ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then + lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" + fi + done + done +done +IFS=$as_save_IFS +lt_ac_max=0 +lt_ac_count=0 +# Add /usr/xpg4/bin/sed as it is typically found on Solaris +# along with /bin/sed that truncates output. +for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do + test ! -f $lt_ac_sed && continue + cat /dev/null > conftest.in + lt_ac_count=0 + echo $ECHO_N "0123456789$ECHO_C" >conftest.in + # Check for GNU sed and select it if it is found. + if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then + lt_cv_path_SED=$lt_ac_sed + break + fi + while true; do + cat conftest.in conftest.in >conftest.tmp + mv conftest.tmp conftest.in + cp conftest.in conftest.nl + echo >>conftest.nl + $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break + cmp -s conftest.out conftest.nl || break + # 10000 chars as input seems more than enough + test $lt_ac_count -gt 10 && break + lt_ac_count=`expr $lt_ac_count + 1` + if test $lt_ac_count -gt $lt_ac_max; then + lt_ac_max=$lt_ac_count + lt_cv_path_SED=$lt_ac_sed + fi + done +done +]) +SED=$lt_cv_path_SED +AC_SUBST([SED]) +AC_MSG_RESULT([$SED]) +])#AC_PROG_SED +])#m4_ifndef + +# Old name: +AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([LT_AC_PROG_SED], []) + + +# _LT_CHECK_SHELL_FEATURES +# ------------------------ +# Find out whether the shell is Bourne or XSI compatible, +# or has some other useful features. +m4_defun([_LT_CHECK_SHELL_FEATURES], +[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +AC_MSG_RESULT([$xsi_shell]) +_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) + +AC_MSG_CHECKING([whether the shell understands "+="]) +lt_shell_append=no +( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +AC_MSG_RESULT([$lt_shell_append]) +_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi +_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac +_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl +_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl +])# _LT_CHECK_SHELL_FEATURES + + +# _LT_PROG_XSI_SHELLFNS +# --------------------- +# Bourne and XSI compatible variants of some useful shell functions. +m4_defun([_LT_PROG_XSI_SHELLFNS], +[case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $[*] )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + +dnl func_dirname_and_basename +dnl A portable version of this function is already defined in general.m4sh +dnl so there is no need for it here. + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[[^=]]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$[@]"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]+=\$[2]" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$[1]=\$$[1]\$[2]" +} + +_LT_EOF + ;; + esac +]) + +# Helper functions for option handling. -*- Autoconf -*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 6 ltoptions.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) + + +# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) +# ------------------------------------------ +m4_define([_LT_MANGLE_OPTION], +[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) + + +# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) +# --------------------------------------- +# Set option OPTION-NAME for macro MACRO-NAME, and if there is a +# matching handler defined, dispatch to it. Other OPTION-NAMEs are +# saved as a flag. +m4_define([_LT_SET_OPTION], +[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl +m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), + _LT_MANGLE_DEFUN([$1], [$2]), + [m4_warning([Unknown $1 option `$2'])])[]dnl +]) + + +# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) +# ------------------------------------------------------------ +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +m4_define([_LT_IF_OPTION], +[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) + + +# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) +# ------------------------------------------------------- +# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME +# are set. +m4_define([_LT_UNLESS_OPTIONS], +[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), + [m4_define([$0_found])])])[]dnl +m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 +])[]dnl +]) + + +# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) +# ---------------------------------------- +# OPTION-LIST is a space-separated list of Libtool options associated +# with MACRO-NAME. If any OPTION has a matching handler declared with +# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about +# the unknown option and exit. +m4_defun([_LT_SET_OPTIONS], +[# Set options +m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), + [_LT_SET_OPTION([$1], _LT_Option)]) + +m4_if([$1],[LT_INIT],[ + dnl + dnl Simply set some default values (i.e off) if boolean options were not + dnl specified: + _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no + ]) + _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no + ]) + dnl + dnl If no reference was made to various pairs of opposing options, then + dnl we run the default mode handler for the pair. For example, if neither + dnl `shared' nor `disable-shared' was passed, we enable building of shared + dnl archives by default: + _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) + _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) + _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], + [_LT_ENABLE_FAST_INSTALL]) + ]) +])# _LT_SET_OPTIONS + + + +# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) +# ----------------------------------------- +m4_define([_LT_MANGLE_DEFUN], +[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) + + +# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) +# ----------------------------------------------- +m4_define([LT_OPTION_DEFINE], +[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl +])# LT_OPTION_DEFINE + + +# dlopen +# ------ +LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes +]) + +AU_DEFUN([AC_LIBTOOL_DLOPEN], +[_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) + + +# win32-dll +# --------- +# Declare package support for building win32 dll's. +LT_OPTION_DEFINE([LT_INIT], [win32-dll], +[enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; +esac + +test -z "$AS" && AS=as +_LT_DECL([], [AS], [0], [Assembler program])dnl + +test -z "$DLLTOOL" && DLLTOOL=dlltool +_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl + +test -z "$OBJDUMP" && OBJDUMP=objdump +_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl +])# win32-dll + +AU_DEFUN([AC_LIBTOOL_WIN32_DLL], +[AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) + + +# _LT_ENABLE_SHARED([DEFAULT]) +# ---------------------------- +# implement the --enable-shared flag, and supports the `shared' and +# `disable-shared' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_SHARED], +[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([shared], + [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) + + _LT_DECL([build_libtool_libs], [enable_shared], [0], + [Whether or not to build shared libraries]) +])# _LT_ENABLE_SHARED + +LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) + +AC_DEFUN([AC_DISABLE_SHARED], +[_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) + +AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_SHARED], []) +dnl AC_DEFUN([AM_DISABLE_SHARED], []) + + + +# _LT_ENABLE_STATIC([DEFAULT]) +# ---------------------------- +# implement the --enable-static flag, and support the `static' and +# `disable-static' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_STATIC], +[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([static], + [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_static=]_LT_ENABLE_STATIC_DEFAULT) + + _LT_DECL([build_old_libs], [enable_static], [0], + [Whether or not to build static libraries]) +])# _LT_ENABLE_STATIC + +LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) + +# Old names: +AC_DEFUN([AC_ENABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) + +AC_DEFUN([AC_DISABLE_STATIC], +[_LT_SET_OPTION([LT_INIT], [disable-static]) +]) + +AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AM_ENABLE_STATIC], []) +dnl AC_DEFUN([AM_DISABLE_STATIC], []) + + + +# _LT_ENABLE_FAST_INSTALL([DEFAULT]) +# ---------------------------------- +# implement the --enable-fast-install flag, and support the `fast-install' +# and `disable-fast-install' LT_INIT options. +# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. +m4_define([_LT_ENABLE_FAST_INSTALL], +[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl +AC_ARG_ENABLE([fast-install], + [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], + [p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac], + [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) + +_LT_DECL([fast_install], [enable_fast_install], [0], + [Whether or not to optimize for fast installation])dnl +])# _LT_ENABLE_FAST_INSTALL + +LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) +LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) + +# Old names: +AU_DEFUN([AC_ENABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) + +AU_DEFUN([AC_DISABLE_FAST_INSTALL], +[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) +dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) + + +# _LT_WITH_PIC([MODE]) +# -------------------- +# implement the --with-pic flag, and support the `pic-only' and `no-pic' +# LT_INIT options. +# MODE is either `yes' or `no'. If omitted, it defaults to `both'. +m4_define([_LT_WITH_PIC], +[AC_ARG_WITH([pic], + [AS_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + +test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) + +_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl +])# _LT_WITH_PIC + +LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) +LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) + +# Old name: +AU_DEFUN([AC_LIBTOOL_PICMODE], +[_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) + +dnl aclocal-1.4 backwards compatibility: +dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) + + +m4_define([_LTDL_MODE], []) +LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], + [m4_define([_LTDL_MODE], [nonrecursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [recursive], + [m4_define([_LTDL_MODE], [recursive])]) +LT_OPTION_DEFINE([LTDL_INIT], [subproject], + [m4_define([_LTDL_MODE], [subproject])]) + +m4_define([_LTDL_TYPE], []) +LT_OPTION_DEFINE([LTDL_INIT], [installable], + [m4_define([_LTDL_TYPE], [installable])]) +LT_OPTION_DEFINE([LTDL_INIT], [convenience], + [m4_define([_LTDL_TYPE], [convenience])]) + +# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. +# Written by Gary V. Vaughan, 2004 +# +# 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. + +# serial 6 ltsugar.m4 + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) + + +# lt_join(SEP, ARG1, [ARG2...]) +# ----------------------------- +# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their +# associated separator. +# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier +# versions in m4sugar had bugs. +m4_define([lt_join], +[m4_if([$#], [1], [], + [$#], [2], [[$2]], + [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) +m4_define([_lt_join], +[m4_if([$#$2], [2], [], + [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) + + +# lt_car(LIST) +# lt_cdr(LIST) +# ------------ +# Manipulate m4 lists. +# These macros are necessary as long as will still need to support +# Autoconf-2.59 which quotes differently. +m4_define([lt_car], [[$1]]) +m4_define([lt_cdr], +[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], + [$#], 1, [], + [m4_dquote(m4_shift($@))])]) +m4_define([lt_unquote], $1) + + +# lt_append(MACRO-NAME, STRING, [SEPARATOR]) +# ------------------------------------------ +# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. +# Note that neither SEPARATOR nor STRING are expanded; they are appended +# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). +# No SEPARATOR is output if MACRO-NAME was previously undefined (different +# than defined and empty). +# +# This macro is needed until we can rely on Autoconf 2.62, since earlier +# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. +m4_define([lt_append], +[m4_define([$1], + m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) + + + +# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) +# ---------------------------------------------------------- +# Produce a SEP delimited list of all paired combinations of elements of +# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list +# has the form PREFIXmINFIXSUFFIXn. +# Needed until we can rely on m4_combine added in Autoconf 2.62. +m4_define([lt_combine], +[m4_if(m4_eval([$# > 3]), [1], + [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl +[[m4_foreach([_Lt_prefix], [$2], + [m4_foreach([_Lt_suffix], + ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, + [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) + + +# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) +# ----------------------------------------------------------------------- +# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited +# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. +m4_define([lt_if_append_uniq], +[m4_ifdef([$1], + [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], + [lt_append([$1], [$2], [$3])$4], + [$5])], + [lt_append([$1], [$2], [$3])$4])]) + + +# lt_dict_add(DICT, KEY, VALUE) +# ----------------------------- +m4_define([lt_dict_add], +[m4_define([$1($2)], [$3])]) + + +# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) +# -------------------------------------------- +m4_define([lt_dict_add_subkey], +[m4_define([$1($2:$3)], [$4])]) + + +# lt_dict_fetch(DICT, KEY, [SUBKEY]) +# ---------------------------------- +m4_define([lt_dict_fetch], +[m4_ifval([$3], + m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), + m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) + + +# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) +# ----------------------------------------------------------------- +m4_define([lt_if_dict_fetch], +[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], + [$5], + [$6])]) + + +# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) +# -------------------------------------------------------------- +m4_define([lt_dict_filter], +[m4_if([$5], [], [], + [lt_join(m4_quote(m4_default([$4], [[, ]])), + lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), + [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl +]) + +# ltversion.m4 -- version numbers -*- Autoconf -*- +# +# Copyright (C) 2004 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004 +# +# 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. + +# Generated from ltversion.in. + +# serial 3017 ltversion.m4 +# This file is part of GNU Libtool + +m4_define([LT_PACKAGE_VERSION], [2.2.6b]) +m4_define([LT_PACKAGE_REVISION], [1.3017]) + +AC_DEFUN([LTVERSION_VERSION], +[macro_version='2.2.6b' +macro_revision='1.3017' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) + +# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- +# +# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc. +# Written by Scott James Remnant, 2004. +# +# 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. + +# serial 4 lt~obsolete.m4 + +# These exist entirely to fool aclocal when bootstrapping libtool. +# +# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) +# which have later been changed to m4_define as they aren't part of the +# exported API, or moved to Autoconf or Automake where they belong. +# +# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN +# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us +# using a macro with the same name in our local m4/libtool.m4 it'll +# pull the old libtool.m4 in (it doesn't see our shiny new m4_define +# and doesn't know about Autoconf macros at all.) +# +# So we provide this file, which has a silly filename so it's always +# included after everything else. This provides aclocal with the +# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything +# because those macros already exist, or will be overwritten later. +# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. +# +# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. +# Yes, that means every name once taken will need to remain here until +# we give up compatibility with versions before 1.7, at which point +# we need to keep only those names which we still refer to. + +# This is to help aclocal find these macros, as it can't see m4_define. +AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) + +m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) +m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) +m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) +m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) +m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) +m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) +m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) +m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) +m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) +m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) +m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) +m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) +m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) +m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) +m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) +m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) +m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) +m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) +m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) +m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) +m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) +m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) +m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) +m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) +m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) +m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) +m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) +m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) +m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) +m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) +m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) +m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) +m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) +m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) +m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) +m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) +m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) +m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) +m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) +m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) +m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])]) +m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) +m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) +m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) +m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) +m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) +m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) +m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) +m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) +m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) + +# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- +# +# Copyright © 2004 Scott James Remnant . +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# As a special exception to the GNU General Public License, if you +# distribute this file as part of a program that contains a +# configuration script generated by Autoconf, you may include it under +# the same distribution terms that you use for the rest of that program. + +# PKG_PROG_PKG_CONFIG([MIN-VERSION]) +# ---------------------------------- +AC_DEFUN([PKG_PROG_PKG_CONFIG], +[m4_pattern_forbid([^_?PKG_[A-Z_]+$]) +m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) +AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl +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. +# +# +# Similar to PKG_CHECK_MODULES, make sure that the first instance of +# this or PKG_CHECK_MODULES is called, or make sure 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_ifval([$2], [$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`], + [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 + _PKG_SHORT_ERRORS_SUPPORTED + if test $_pkg_short_errors_supported = yes; then + $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1` + else + $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD + + ifelse([$4], , [AC_MSG_ERROR(dnl +[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 +])], + [AC_MSG_RESULT([no]) + $4]) +elif test $pkg_failed = untried; then + ifelse([$4], , [AC_MSG_FAILURE(dnl +[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 .])], + [$4]) +else + $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS + $1[]_LIBS=$pkg_cv_[]$1[]_LIBS + AC_MSG_RESULT([yes]) + ifelse([$3], , :, [$3]) +fi[]dnl +])# PKG_CHECK_MODULES + +# Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 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. + +# AM_AUTOMAKE_VERSION(VERSION) +# ---------------------------- +# Automake X.Y traces this macro to ensure aclocal.m4 has been +# generated from the m4 files accompanying Automake X.Y. +# (This private macro should not be called outside this file.) +AC_DEFUN([AM_AUTOMAKE_VERSION], +[am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) + +# _AM_AUTOCONF_VERSION(VERSION) +# ----------------------------- +# aclocal traces this macro to find the Autoconf version. +# This is a private macro too. Using m4_define simplifies +# the logic in aclocal, which can simply ignore this definition. +m4_define([_AM_AUTOCONF_VERSION], []) + +# AM_SET_CURRENT_AUTOMAKE_VERSION +# ------------------------------- +# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. +# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. +AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], +[AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) + +# AM_AUX_DIR_EXPAND -*- Autoconf -*- + +# Copyright (C) 2001, 2003, 2005 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. + +# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets +# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to +# `$srcdir', `$srcdir/..', or `$srcdir/../..'. +# +# Of course, Automake must honor this variable whenever it calls a +# tool from the auxiliary directory. The problem is that $srcdir (and +# therefore $ac_aux_dir as well) can be either absolute or relative, +# depending on how configure is run. This is pretty annoying, since +# it makes $ac_aux_dir quite unusable in subdirectories: in the top +# source directory, any form will work fine, but in subdirectories a +# relative path needs to be adjusted first. +# +# $ac_aux_dir/missing +# fails when called from a subdirectory if $ac_aux_dir is relative +# $top_srcdir/$ac_aux_dir/missing +# fails if $ac_aux_dir is absolute, +# fails when called from a subdirectory in a VPATH build with +# a relative $ac_aux_dir +# +# The reason of the latter failure is that $top_srcdir and $ac_aux_dir +# are both prefixed by $srcdir. In an in-source build this is usually +# harmless because $srcdir is `.', but things will broke when you +# start a VPATH build or use an absolute $srcdir. +# +# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, +# iff we strip the leading $srcdir from $ac_aux_dir. That would be: +# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` +# and then we would define $MISSING as +# MISSING="\${SHELL} $am_aux_dir/missing" +# This will work as long as MISSING is not called from configure, because +# unfortunately $(top_srcdir) has no meaning in configure. +# However there are other variables, like CC, which are often used in +# configure, and could therefore not use this "fixed" $ac_aux_dir. +# +# Another solution, used here, is to always expand $ac_aux_dir to an +# absolute PATH. The drawback is that using absolute paths prevent a +# configured tree to be moved without reconfiguration. + +AC_DEFUN([AM_AUX_DIR_EXPAND], +[dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) + +# AM_CONDITIONAL -*- Autoconf -*- + +# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 +# 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. + +# serial 9 + +# AM_CONDITIONAL(NAME, SHELL-CONDITION) +# ------------------------------------- +# Define a conditional. +AC_DEFUN([AM_CONDITIONAL], +[AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 +# 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. + +# serial 10 + +# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be +# written in clear, in which case automake, when reading aclocal.m4, +# will think it sees a *use*, and therefore will trigger all it's +# C support machinery. Also note that it means that autoscan, seeing +# CC etc. in the Makefile, will ask for an AC_PROG_CC use... + + +# _AM_DEPENDENCIES(NAME) +# ---------------------- +# See how the compiler implements dependency checking. +# NAME is "CC", "CXX", "GCJ", or "OBJC". +# We try a few techniques and use that to set a single cache variable. +# +# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was +# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular +# dependency, and given that the user is not expected to run this macro, +# just rely on AC_PROG_CC. +AC_DEFUN([_AM_DEPENDENCIES], +[AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) + + +# AM_SET_DEPDIR +# ------------- +# Choose a directory name for dependency files. +# This macro is AC_REQUIREd in _AM_DEPENDENCIES +AC_DEFUN([AM_SET_DEPDIR], +[AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) + + +# AM_DEP_TRACK +# ------------ +AC_DEFUN([AM_DEP_TRACK], +[AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) + +# Generate code to set up dependency tracking. -*- Autoconf -*- + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 +# 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. + +#serial 5 + +# _AM_OUTPUT_DEPENDENCY_COMMANDS +# ------------------------------ +AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], +[{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +])# _AM_OUTPUT_DEPENDENCY_COMMANDS + + +# AM_OUTPUT_DEPENDENCY_COMMANDS +# ----------------------------- +# This macro should only be invoked once -- use via AC_REQUIRE. +# +# This code is only required when automatic dependency tracking +# is enabled. FIXME. This creates each `.P' file that we will +# need in order to bootstrap the dependency handling code. +AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], +[AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) + +# Do all the work for Automake. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, +# 2005, 2006, 2008, 2009 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. + +# serial 16 + +# This macro actually does too much. Some checks are only needed if +# your package does certain things. But this isn't really a big deal. + +# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) +# AM_INIT_AUTOMAKE([OPTIONS]) +# ----------------------------------------------- +# The call with PACKAGE and VERSION arguments is the old style +# call (pre autoconf-2.50), which is being phased out. PACKAGE +# and VERSION should now be passed to AC_INIT and removed from +# the call to AM_INIT_AUTOMAKE. +# We support both call styles for the transition. After +# the next Automake release, Autoconf can make the AC_INIT +# arguments mandatory, and then we can depend on a new Autoconf +# release and drop the old call support. +AC_DEFUN([AM_INIT_AUTOMAKE], +[AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) + +dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not +dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further +dnl mangled by Autoconf and run in a shell conditional statement. +m4_define([_AC_COMPILER_EXEEXT], +m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) + + +# When config.status generates a header, we must update the stamp-h file. +# This file resides in the same directory as the config header +# that is generated. The stamp files are numbered to have different names. + +# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the +# loop where config.status creates the headers, so we can generate +# our stamp files there. +AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], +[# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) + +# Copyright (C) 2001, 2003, 2005, 2008 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. + +# AM_PROG_INSTALL_SH +# ------------------ +# Define $install_sh. +AC_DEFUN([AM_PROG_INSTALL_SH], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) + +# Copyright (C) 2003, 2005 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. + +# serial 2 + +# Check whether the underlying file-system supports filenames +# with a leading dot. For instance MS-DOS doesn't. +AC_DEFUN([AM_SET_LEADING_DOT], +[rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) + +# Check to see how 'make' treats includes. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2009 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. + +# serial 4 + +# AM_MAKE_INCLUDE() +# ----------------- +# Check to see how make treats includes. +AC_DEFUN([AM_MAKE_INCLUDE], +[am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) + +# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- + +# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 +# 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. + +# serial 6 + +# AM_MISSING_PROG(NAME, PROGRAM) +# ------------------------------ +AC_DEFUN([AM_MISSING_PROG], +[AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) + + +# AM_MISSING_HAS_RUN +# ------------------ +# Define MISSING if not defined so far and test if it supports --run. +# If it does, set am_missing_run to use it, otherwise, to nothing. +AC_DEFUN([AM_MISSING_HAS_RUN], +[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) + +# Copyright (C) 2003, 2004, 2005, 2006 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. + +# AM_PROG_MKDIR_P +# --------------- +# Check for `mkdir -p'. +AC_DEFUN([AM_PROG_MKDIR_P], +[AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) + +# Helper functions for option handling. -*- Autoconf -*- + +# Copyright (C) 2001, 2002, 2003, 2005, 2008 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. + +# serial 4 + +# _AM_MANGLE_OPTION(NAME) +# ----------------------- +AC_DEFUN([_AM_MANGLE_OPTION], +[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) + +# _AM_SET_OPTION(NAME) +# ------------------------------ +# Set option NAME. Presently that only means defining a flag for this option. +AC_DEFUN([_AM_SET_OPTION], +[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) + +# _AM_SET_OPTIONS(OPTIONS) +# ---------------------------------- +# OPTIONS is a space-separated list of Automake options. +AC_DEFUN([_AM_SET_OPTIONS], +[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) + +# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) +# ------------------------------------------- +# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. +AC_DEFUN([_AM_IF_OPTION], +[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) + +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008, 2009 +# 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. + +# AM_PATH_PYTHON([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) +# --------------------------------------------------------------------------- +# Adds support for distributing Python modules and packages. To +# install modules, copy them to $(pythondir), using the python_PYTHON +# automake variable. To install a package with the same name as the +# automake package, install to $(pkgpythondir), or use the +# pkgpython_PYTHON automake variable. +# +# The variables $(pyexecdir) and $(pkgpyexecdir) are provided as +# locations to install python extension modules (shared libraries). +# Another macro is required to find the appropriate flags to compile +# extension modules. +# +# If your package is configured with a different prefix to python, +# users will have to add the install directory to the PYTHONPATH +# environment variable, or create a .pth file (see the python +# documentation for details). +# +# If the MINIMUM-VERSION argument is passed, AM_PATH_PYTHON will +# cause an error if the version of python installed on the system +# doesn't meet the requirement. MINIMUM-VERSION should consist of +# numbers and dots only. +AC_DEFUN([AM_PATH_PYTHON], + [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) + + +# AM_PYTHON_CHECK_VERSION(PROG, VERSION, [ACTION-IF-TRUE], [ACTION-IF-FALSE]) +# --------------------------------------------------------------------------- +# Run ACTION-IF-TRUE if the Python interpreter PROG has version >= VERSION. +# Run ACTION-IF-FALSE otherwise. +# This test uses sys.hexversion instead of the string equivalent (first +# word of sys.version), in order to cope with versions such as 2.2c1. +# This supports Python 2.0 or higher. (2.0 was released on October 16, 2000). +AC_DEFUN([AM_PYTHON_CHECK_VERSION], + [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) + +# Copyright (C) 2001, 2003, 2005 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. + +# AM_RUN_LOG(COMMAND) +# ------------------- +# Run COMMAND, save the exit status in ac_status, and log it. +# (This has been adapted from Autoconf's _AC_RUN_LOG macro.) +AC_DEFUN([AM_RUN_LOG], +[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) + +# Check to make sure that the build environment is sane. -*- Autoconf -*- + +# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 +# 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. + +# serial 5 + +# AM_SANITY_CHECK +# --------------- +AC_DEFUN([AM_SANITY_CHECK], +[AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) + +# Copyright (C) 2009 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. + +# serial 1 + +# AM_SILENT_RULES([DEFAULT]) +# -------------------------- +# Enable less verbose build rules; with the default set to DEFAULT +# (`yes' being less verbose, `no' or empty being verbose). +AC_DEFUN([AM_SILENT_RULES], +[AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) + +# Copyright (C) 2001, 2003, 2005 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. + +# AM_PROG_INSTALL_STRIP +# --------------------- +# One issue with vendor `install' (even GNU) is that you can't +# specify the program used to strip binaries. This is especially +# annoying in cross-compiling environments, where the build's strip +# is unlikely to handle the host's binaries. +# Fortunately install-sh will honor a STRIPPROG variable, so we +# always use install-sh in `make install-strip', and initialize +# STRIPPROG with the value of the STRIP variable (set by the user). +AC_DEFUN([AM_PROG_INSTALL_STRIP], +[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) + +# Copyright (C) 2006, 2008 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. + +# serial 2 + +# _AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. +# This macro is traced by Automake. +AC_DEFUN([_AM_SUBST_NOTMAKE]) + +# AM_SUBST_NOTMAKE(VARIABLE) +# --------------------------- +# Public sister of _AM_SUBST_NOTMAKE. +AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) + +# Check how to create a tarball. -*- Autoconf -*- + +# Copyright (C) 2004, 2005 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. + +# serial 2 + +# _AM_PROG_TAR(FORMAT) +# -------------------- +# Check how to create a tarball in format FORMAT. +# FORMAT should be one of `v7', `ustar', or `pax'. +# +# Substitute a variable $(am__tar) that is a command +# writing to stdout a FORMAT-tarball containing the directory +# $tardir. +# tardir=directory && $(am__tar) > result.tar +# +# Substitute a variable $(am__untar) that extract such +# a tarball read from stdin. +# $(am__untar) < result.tar +AC_DEFUN([_AM_PROG_TAR], +[# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) # _AM_PROG_TAR + +m4_include([m4/gettext.m4]) +m4_include([m4/iconv.m4]) +m4_include([m4/lib-ld.m4]) +m4_include([m4/lib-link.m4]) +m4_include([m4/lib-prefix.m4]) +m4_include([m4/nls.m4]) +m4_include([m4/po.m4]) +m4_include([m4/progtest.m4]) +m4_include([m4/python.m4]) diff --git a/anaconda b/anaconda new file mode 100755 index 0000000..0f54d65 --- /dev/null +++ b/anaconda @@ -0,0 +1,1237 @@ +#!/usr/bin/python +# +# anaconda: The Red Hat Linux Installation program +# +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +# Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Brent Fox +# Mike Fulbright +# Jakub Jelinek +# Jeremy Katz +# Chris Lumens +# Paul Nasrat +# Erik Troan +# Matt Wilson +# + +# This toplevel file is a little messy at the moment... + +import sys, os, re, time, subprocess +from optparse import OptionParser +from tempfile import mkstemp + +# keep up with process ID of miniwm if we start it + +miniwm_pid = None + +# Make sure messages sent through python's warnings module get logged. +def AnacondaShowWarning(message, category, filename, lineno, file=sys.stderr, line=None): + log.warning("%s" % warnings.formatwarning(message, category, filename, lineno, line)) + +# start miniWM +def startMiniWM(root='/'): + (rd, wr) = os.pipe() + childpid = os.fork() + if not childpid: + if os.access("./mini-wm", os.X_OK): + cmd = "./mini-wm" + elif os.access(root + "/usr/bin/mini-wm", os.X_OK): + cmd = root + "/usr/bin/mini-wm" + else: + return None + + os.dup2(wr, 1) + os.close(wr) + args = [cmd, '--display', ':1'] + os.execv(args[0], args) + sys.exit (1) + else: + # We need to make sure that mini-wm is the first client to + # connect to the X server (see bug #108777). Wait for mini-wm + # to write back an acknowledge token. + os.read(rd, 1) + + return childpid + +# function to handle X startup special issues for anaconda +def doStartupX11Actions(runres="800x600"): + global miniwm_pid + + setupGraphicalLinks() + + # now start up mini-wm + try: + miniwm_pid = startMiniWM() + log.info("Started mini-wm") + + except: + miniwm_pid = None + log.error("Unable to start mini-wm") + + if miniwm_pid is not None: + import xutils + import gtk + + try: + i = gtk.Invisible() + i.selection_owner_set("_ANACONDA_MINI_WM_RUNNING") + + xutils.setRootResource('Xcursor.size', '24') + xutils.setRootResource('Xcursor.theme', 'Bluecurve') + xutils.setRootResource('Xcursor.theme_core', 'true') + + xutils.setRootResource('Xft.antialias', '1') + xutils.setRootResource('Xft.hinting', '1') + xutils.setRootResource('Xft.hintstyle', 'hintslight') + xutils.setRootResource('Xft.rgba', 'none') + except: + sys.stderr.write("X SERVER STARTED, THEN FAILED"); + raise RuntimeError, "X server failed to start" + +def doShutdownX11Actions(): + global miniwm_pid + + if miniwm_pid is not None: + try: + os.kill(miniwm_pid, 15) + os.waitpid(miniwm_pid, 0) + except: + pass + +def setupPythonUpdates(): + from distutils.sysconfig import get_python_lib + + if not os.path.exists("/tmp/updates"): + return + + for pkg in os.listdir("/tmp/updates"): + d = "/tmp/updates/%s" % pkg + + if not os.path.isdir(d): + continue + + # See if the package exists in /usr/lib{64,}/python/?.?/site-packages. + # If it does, we can set it up as an update. If not, the pkg is + # likely a completely new directory and should not be looked at. + dest = "%s/%s" % (get_python_lib(), pkg) + if not os.access(dest, os.R_OK): + dest = "%s/%s" % (get_python_lib(1), pkg) + if not os.access(dest, os.R_OK): + continue + + contents = os.listdir(d) + + # Symlink over everything that's in the python libdir but not in + # the updates directory. + for f in filter(lambda fn: fn not in contents, os.listdir(dest)): + if f.endswith(".pyc") or f.endswith(".pyo"): + continue + + os.symlink("%s/%s" % (dest, f), "/tmp/updates/%s/%s" % (pkg, f)) + + if os.access("/tmp/updates/70-anaconda.rules", os.R_OK): + import shutil + shutil.copyfile("/tmp/updates/70-anaconda.rules", + "/etc/udev/rules.d/70-anaconda.rules") + +def parseOptions(): + def resolution_cb (option, opt_str, value, parser): + parser.values.runres = value + + op = OptionParser() + # Interface + op.add_option("-C", "--cmdline", dest="display_mode", action="store_const", const="c", + default="g") + op.add_option("-G", "--graphical", dest="display_mode", action="store_const", const="g") + op.add_option("-T", "--text", dest="display_mode", action="store_const", const="t") + + # Network + op.add_option("--noipv4", action="store_true", default=False) + op.add_option("--noipv6", action="store_true", default=False) + op.add_option("--proxy") + op.add_option("--proxyAuth") + + # Method of operation + op.add_option("--autostep", action="store_true", default=False) + op.add_option("-d", "--debug", dest="debug", action="store_true", default=False) + op.add_option("--kickstart", dest="ksfile") + op.add_option("--rescue", dest="rescue", action="store_true", default=False) + op.add_option("--targetarch", dest="targetArch", nargs=1, type="string") + + op.add_option("-m", "--method", dest="method", default=None) + op.add_option("--repo", dest="method", default=None) + op.add_option("--stage2", dest="stage2", default=None) + + op.add_option("--liveinst", action="store_true", default=False) + + # Display + op.add_option("--headless", dest="isHeadless", action="store_true", default=False) + op.add_option("--nofb") + op.add_option("--resolution", action="callback", callback=resolution_cb, dest="runres", + default="800x600", nargs=1, type="string") + op.add_option("--serial", action="store_true", default=False) + op.add_option("--usefbx", dest="xdriver", action="store_const", const="fbdev") + op.add_option("--virtpconsole") + op.add_option("--vnc", action="store_true", default=False) + op.add_option("--vncconnect") + op.add_option("--xdriver", dest="xdriver", action="store", type="string", default=None) + + # Language + op.add_option("--keymap") + op.add_option("--kbdtype") + op.add_option("--lang") + + # Obvious + op.add_option("--loglevel") + op.add_option("--syslog") + + op.add_option("--noselinux", dest="selinux", action="store_false", default=True) + op.add_option("--selinux", action="store_true") + + op.add_option("--nompath", dest="mpath", action="store_false", default=True) + op.add_option("--mpath", action="store_true") + + op.add_option("--nodmraid", dest="dmraid", action="store_false", default=True) + op.add_option("--dmraid", action="store_true") + + op.add_option("--noibft", dest="ibft", action="store_false", default=True) + op.add_option("--ibft", action="store_true") + op.add_option("--noiscsi", dest="iscsi", action="store_false", default=False) + op.add_option("--iscsi", action="store_true") + + # Miscellaneous + op.add_option("--module", action="append", default=[]) + op.add_option("--nomount", dest="rescue_nomount", action="store_true", default=False) + op.add_option("--updates", dest="updateSrc", action="store", type="string") + op.add_option("--dogtail", dest="dogtail", action="store", type="string") + op.add_option("--dlabel", action="store_true", default=False) + + # Deprecated, unloved, unused + op.add_option("-r", "--rootPath", dest="unsupportedMode", + action="store_const", const="root path") + op.add_option("-t", "--test", dest="unsupportedMode", + action="store_const", const="test") + + return op.parse_args() + +def setupPythonPath(): + haveUpdates = False + for ndx in range(len(sys.path)-1, -1, -1): + if sys.path[ndx].endswith('updates'): + haveUpdates = True + break + + if haveUpdates: + sys.path.insert(ndx+1, '/usr/lib/anaconda') + sys.path.insert(ndx+2, '/usr/lib/anaconda/textw') + sys.path.insert(ndx+3, '/usr/lib/anaconda/iw') + else: + sys.path.insert(0, '/usr/lib/anaconda') + sys.path.insert(1, '/usr/lib/anaconda/textw') + sys.path.insert(2, '/usr/lib/anaconda/iw') + + sys.path.append('/usr/share/system-config-date') + +def addPoPath(dir): + """ Looks to see what translations are under a given path and tells + the gettext module to use that path as the base dir """ + for d in os.listdir(dir): + if not os.path.isdir("%s/%s" %(dir,d)): + continue + if not os.path.exists("%s/%s/LC_MESSAGES" %(dir,d)): + continue + for basename in os.listdir("%s/%s/LC_MESSAGES" %(dir,d)): + if not basename.endswith(".mo"): + continue + log.info("setting %s as translation source for %s" %(dir, basename[:-3])) + gettext.bindtextdomain(basename[:-3], dir) + +def setupTranslations(): + if os.path.isdir("/tmp/updates/po"): + addPoPath("/tmp/updates/po") + gettext.textdomain("anaconda") + +def setupEnvironment(): + # Silly GNOME stuff + if os.environ.has_key('HOME') and not os.environ.has_key("XAUTHORITY"): + os.environ['XAUTHORITY'] = os.environ['HOME'] + '/.Xauthority' + os.environ['HOME'] = '/tmp' + os.environ['LC_NUMERIC'] = 'C' + os.environ["GCONF_GLOBAL_LOCKS"] = "1" + + # In theory, this gets rid of our LVM file descriptor warnings + os.environ["LVM_SUPPRESS_FD_WARNINGS"] = "1" + + # make sure we have /sbin and /usr/sbin in our path + os.environ["PATH"] += ":/sbin:/usr/sbin" + + # we can't let the LD_PRELOAD hang around because it will leak into + # rpm %post and the like. ick :/ + if os.environ.has_key("LD_PRELOAD"): + del os.environ["LD_PRELOAD"] + + os.environ["GLADEPATH"] = "/tmp/updates/:/tmp/updates/ui/:ui/:/usr/share/anaconda/ui/:/usr/share/python-meh/" + os.environ["PIXMAPPATH"] = "/tmp/updates/pixmaps/:/tmp/updates/:/tmp/product/pixmaps/:/tmp/product/:pixmaps/:/usr/share/anaconda/pixmaps/:/usr/share/pixmaps/:/usr/share/anaconda/:/usr/share/python-meh/" + +def setupLoggingFromOpts(opts): + if opts.loglevel and anaconda_log.logLevelMap.has_key(opts.loglevel): + level = anaconda_log.logLevelMap[opts.loglevel] + anaconda_log.logger.tty_loglevel = level + anaconda_log.setHandlersLevel(log, level) + anaconda_log.setHandlersLevel(storage.storage_log.logger, level) + + if opts.syslog: + anaconda_log.logger.remote_syslog = opts.syslog + if opts.syslog.find(":") != -1: + (host, port) = opts.syslog.split(":") + anaconda_log.logger.addSysLogHandler(log, host, port=int(port)) + else: + anaconda_log.logger.addSysLogHandler(log, opts.syslog) + +# ftp installs pass the password via a file in /tmp so +# ps doesn't show it +def expandFTPMethod(str): + ret = None + + try: + filename = str[1:] + ret = open(filename, "r").readline() + ret = ret[:len(ret) - 1] + os.unlink(filename) + return ret + except: + return None + +def runVNC(): + global vncS + vncS.startServer() + + child = os.fork() + if child == 0: + for p in ('/tmp/updates/pyrc.py', \ + '/usr/lib/anaconda-runtime/pyrc.py'): + if os.access(p, os.R_OK|os.X_OK): + os.environ['PYTHONSTARTUP'] = p + break + + while True: + # s390/s390x are the only places we /really/ need a shell on tty1, + # and everywhere else this just gets in the way of pdb. But we + # don't want to return, because that'll return try to start X + # a second time. + if iutil.isConsoleOnVirtualTerminal(): + time.sleep(10000) + else: + print _("Press for a shell") + sys.stdin.readline() + iutil.execConsole() + +def checkMemory(anaconda): + if iutil.memInstalled() < isys.MIN_RAM: + from snack import SnackScreen, ButtonChoiceWindow + + screen = SnackScreen() + ButtonChoiceWindow(screen, _('Fatal Error'), + _('You do not have enough RAM to install %s ' + 'on this machine.\n' + '\n' + 'Press to reboot your system.\n') + %(product.productName,), + buttons = (_("OK"),)) + screen.finish() + sys.exit(0) + + # override display mode if machine cannot nicely run X + if not flags.usevnc: + if anaconda.displayMode not in ('t', 'c') and iutil.memInstalled() < isys.MIN_GUI_RAM: + stdoutLog.warning(_("You do not have enough RAM to use the graphical " + "installer. Starting text mode.")) + anaconda.displayMode = 't' + time.sleep(2) + +def setupGraphicalLinks(): + for i in ( "imrc", "im_palette.pal", "gtk-2.0", "pango", "fonts", + "fb.modes"): + try: + if os.path.exists("/mnt/runtime/etc/%s" %(i,)): + os.symlink ("../mnt/runtime/etc/" + i, "/etc/" + i) + except: + pass + +def handleSshPw(anaconda): + import users + u = users.Users(anaconda) + + userdata = anaconda.ksdata.sshpw.dataList() + for ud in userdata: + if u.checkUserExists(ud.username, root="/"): + u.setUserPassword(username=ud.username, password=ud.password, + isCrypted=ud.isCrypted, lock=ud.lock) + else: + u.createUser(name=ud.username, password=ud.password, + isCrypted=ud.isCrypted, lock=ud.lock, + root="/") + + del u + +def createSshKey(algorithm, keyfile): + path = '/etc/ssh/%s' % (keyfile,) + argv = ['-q','-t',algorithm,'-f',path,'-C','','-N',''] + log.info("running \"%s\"" % (" ".join(['ssh-keygen']+argv),)) + + so = "/tmp/ssh-keygen-%s-stdout.log" % (algorithm,) + se = "/tmp/ssh-keygen-%s-stderr.log" % (algorithm,) + iutil.execWithRedirect('ssh-keygen', argv, stdout=so, stderr=se) + +def fork_orphan(): + """Forks an orphan. + + Returns 1 in the parent and 0 in the orphaned child. + """ + intermediate = os.fork() + if not intermediate: + if os.fork(): + # the intermediate child dies + os._exit(0) + return 0; + # the original process waits for the intermediate child + os.waitpid(intermediate, 0) + return 1 + +def startSsh(): + if not flags.sshd: + return + if iutil.isS390(): + return + + if not fork_orphan(): + os.mkdir("/var/log", 0755) + os.open("/var/log/lastlog", os.O_RDWR | os.O_CREAT, 0644) + ssh_keys = { + 'rsa1':'ssh_host_key', + 'rsa':'ssh_host_rsa_key', + 'dsa':'ssh_host_dsa_key', + } + for (algorithm, keyfile) in ssh_keys.items(): + createSshKey(algorithm, keyfile) + args = ["/sbin/sshd", "-f", "/etc/ssh/sshd_config.anaconda"] + os.execv("/sbin/sshd", args) + sys.exit(1) + +def startDebugger(signum, frame): + import epdb + epdb.serve(skip=1) + +class Anaconda(object): + def __init__(self): + import desktop, dispatch, firewall, security + import system_config_keyboard.keyboard as keyboard + from flags import flags + + self._backend = None + self._bootloader = None + self.canReIPL = False + self.desktop = desktop.Desktop() + self.dir = None + self.dispatch = dispatch.Dispatcher(self) + self.displayMode = None + self.extraModules = [] + self.firewall = firewall.Firewall() + self.id = None + self._instClass = None + self._instLanguage = None + self._intf = None + self.isHeadless = False + self.keyboard = keyboard.Keyboard() + self.ksdata = None + self.mediaDevice = None + self.methodstr = None + self._network = None + self._platform = None + self.proxy = None + self.proxyUsername = None + self.proxyPassword = None + self.reIPLMessage = None + self.rescue = False + self.rescue_mount = True + self.rootParts = None + self.rootPath = "/mnt/sysimage" + self.security = security.Security() + self.simpleFilter = True + self.stage2 = None + self._storage = None + self._timezone = None + self.updateSrc = None + self.upgrade = flags.cmdline.has_key("preupgrade") + self.upgradeRoot = None + self.upgradeSwapInfo = None + self._users = None + + # *sigh* we still need to be able to write this out + self.xdriver = None + + @property + def backend(self): + if not self._backend: + b = self.instClass.getBackend() + self._backend = apply(b, (self, )) + + return self._backend + + @property + def bootloader(self): + if not self._bootloader: + import booty + self._bootloader = booty.getBootloader(self) + + return self._bootloader + + @property + def firstboot(self): + from pykickstart.constants import FIRSTBOOT_SKIP, FIRSTBOOT_DEFAULT + + if self.ksdata: + return self.ksdata.firstboot.firstboot + elif iutil.isS390(): + return FIRSTBOOT_SKIP + else: + return FIRSTBOOT_DEFAULT + + @property + def instClass(self): + if not self._instClass: + from installclass import DefaultInstall + self._instClass = DefaultInstall() + + return self._instClass + + @property + def instLanguage(self): + if not self._instLanguage: + import language + self._instLanguage = language.Language(self.displayMode) + + return self._instLanguage + + def _getInterface(self): + return self._intf + + def _setInterface(self, v): + # "lambda cannot contain assignment" + self._intf = v + + def _delInterface(self): + del self._intf + + intf = property(_getInterface, _setInterface, _delInterface) + + @property + def network(self): + if not self._network: + import network + self._network = network.Network() + + return self._network + + @property + def platform(self): + if not self._platform: + import platform + self._platform = platform.getPlatform(self) + + return self._platform + + @property + def protected(self): + import stat + + if os.path.exists("/dev/live") and \ + stat.S_ISBLK(os.stat("/dev/live")[stat.ST_MODE]): + return [os.readlink("/dev/live")] + elif self.methodstr and self.methodstr.startswith("hd:"): + method = self.methodstr[3:] + return [method.split(":", 3)[0]] + else: + return [] + + @property + def users(self): + if not self._users: + import users + self._users = users.Users(self) + + return self._users + + @property + def storage(self): + if not self._storage: + import storage + self._storage = storage.Storage(self) + + return self._storage + + @property + def timezone(self): + if not self._timezone: + import timezone + self._timezone = timezone.Timezone() + self._timezone.setTimezoneInfo(self.instLanguage.getDefaultTimeZone(self.rootPath)) + + return self._timezone + + def dumpState(self): + from meh.dump import ReverseExceptionDump + from inspect import stack as _stack + + # Skip the frames for dumpState and the signal handler. + stack = _stack()[2:] + stack.reverse() + exn = ReverseExceptionDump((None, None, stack), self.mehConfig) + + (fd, filename) = mkstemp("", "anaconda-tb-", "/tmp") + fo = os.fdopen(fd, "w") + + exn.write(self, fo) + + def initInterface(self): + if self._intf: + raise RuntimeError, "Second attempt to initialize the InstallInterface" + + # setup links required by graphical mode if installing and verify display mode + if self.displayMode == 'g': + stdoutLog.info (_("Starting graphical installation.")) + + try: + from gui import InstallInterface + except Exception, e: + stdoutLog.error("Exception starting GUI installer: %s" %(e,)) + # if we're not going to really go into GUI mode, we need to get + # back to vc1 where the text install is going to pop up. + if not flags.livecdInstall: + isys.vtActivate (1) + stdoutLog.warning("GUI installer startup failed, falling back to text mode.") + self.displayMode = 't' + if 'DISPLAY' in os.environ.keys(): + del os.environ['DISPLAY'] + time.sleep(2) + + if self.displayMode == 't': + from text import InstallInterface + if not os.environ.has_key("LANG"): + os.environ["LANG"] = "en_US.UTF-8" + + if self.displayMode == 'c': + from cmdline import InstallInterface + + self._intf = InstallInterface() + return self._intf + + def writeXdriver(self, root = None): + # this should go away at some point, but until it does, we + # need to keep it around. + if self.xdriver is None: + return + if root is None: + root = self.rootPath + if not os.path.isdir("%s/etc/X11" %(root,)): + os.makedirs("%s/etc/X11" %(root,), mode=0755) + f = open("%s/etc/X11/xorg.conf" %(root,), 'w') + f.write('Section "Device"\n\tIdentifier "Videocard0"\n\tDriver "%s"\nEndSection\n' % self.xdriver) + f.close() + + def setMethodstr(self, methodstr): + if methodstr.startswith("cdrom://"): + (device, tree) = string.split(methodstr[8:], ":", 1) + + if not tree.startswith("/"): + tree = "/%s" %(tree,) + + if device.startswith("/dev/"): + device = device[5:] + + self.mediaDevice = device + self.methodstr = "cdrom://%s" % tree + else: + self.methodstr = methodstr + + def requiresNetworkInstall(self): + fail = False + numNetDevs = isys.getNetworkDeviceCount() + + if self.methodstr is not None: + if (self.methodstr.startswith("http") or \ + self.methodstr.startswith("ftp://") or \ + self.methodstr.startswith("nfs:")) and \ + numNetDevs == 0: + fail = True + elif self.stage2 is not None: + if self.stage2.startswith("cdrom://") and \ + not os.path.isdir("/mnt/stage2/Packages") and \ + numNetDevs == 0: + fail = True + + if fail: + log.error("network install required, but no network devices available") + + return fail + + def write(self): + self.writeXdriver() + self.instLanguage.write(self.rootPath) + + self.timezone.write(self.rootPath) + self.network.write(instPath=self.rootPath, anaconda=self) + self.desktop.write(self.rootPath) + self.users.write(self.rootPath) + self.security.write(self.rootPath) + self.firewall.write(self.rootPath) + + if self.ksdata: + for svc in self.ksdata.services.disabled: + iutil.execWithRedirect("/sbin/chkconfig", + [svc, "off"], + stdout="/dev/tty5", stderr="/dev/tty5", + root=self.rootPath) + + for svc in self.ksdata.services.enabled: + iutil.execWithRedirect("/sbin/chkconfig", + [svc, "on"], + stdout="/dev/tty5", stderr="/dev/tty5", + root=self.rootPath) + + def writeKS(self, filename): + import urllib + from pykickstart.version import versionToString, DEVEL + + f = open(filename, "w") + + f.write("# Kickstart file automatically generated by anaconda.\n\n") + f.write("#version=%s\n" % versionToString(DEVEL)) + + if self.upgrade: + f.write("upgrade\n"); + else: + f.write("install\n"); + + m = None + + if self.methodstr: + m = self.methodstr + elif self.stage2: + m = self.stage2 + + if m: + if m.startswith("cdrom:"): + f.write("cdrom\n") + elif m.startswith("hd:"): + if m.count(":") == 3: + (part, fs, dir) = string.split(m[3:], ":") + else: + (part, dir) = string.split(m[3:], ":") + + f.write("harddrive --partition=%s --dir=%s\n" % (part, dir)) + elif m.startswith("nfs:"): + if m.count(":") == 3: + (server, opts, dir) = string.split(m[4:], ":") + f.write("nfs --server=%s --opts=%s --dir=%s" % (server, opts, dir)) + else: + (server, dir) = string.split(m[4:], ":") + f.write("nfs --server=%s --dir=%s\n" % (server, dir)) + elif m.startswith("ftp://") or m.startswith("http"): + f.write("url --url=%s\n" % urllib.unquote(m)) + + # Some kickstart commands do not correspond to any anaconda UI + # component. If this is a kickstart install, we need to make sure + # the information from the input file ends up in the output file. + if self.ksdata: + f.write(self.ksdata.user.__str__()) + f.write(self.ksdata.services.__str__()) + f.write(self.ksdata.reboot.__str__()) + + self.instLanguage.writeKS(f) + + if not self.isHeadless: + self.keyboard.writeKS(f) + self.network.writeKS(f) + + self.timezone.writeKS(f) + self.users.writeKS(f) + self.security.writeKS(f) + self.firewall.writeKS(f) + + self.storage.writeKS(f) + self.bootloader.writeKS(f) + + if self.backend: + self.backend.writeKS(f) + self.backend.writePackagesKS(f, self) + + # Also write out any scripts from the input ksfile. + if self.ksdata: + for s in self.ksdata.scripts: + f.write(s.__str__()) + + # make it so only root can read, could have password + os.chmod(filename, 0600) + +if __name__ == "__main__": + setupPythonPath() + + # Allow a file to be loaded as early as possible + try: + import updates_disk_hook + except ImportError: + pass + + # Set up logging as early as possible. + import logging + import anaconda_log + + log = logging.getLogger("anaconda") + stdoutLog = logging.getLogger("anaconda.stdout") + + # pull this in to get product name and versioning + import product + + # this handles setting up updates for pypackages to minimize the set needed + setupPythonUpdates() + + import signal, string, isys, iutil, time + import warnings + import vnc + import users + import kickstart + import storage.storage_log + + from flags import flags + + # the following makes me very sad. -- katzj + # we have a slightly different set of udev rules in the second + # stage than the first stage. why this doesn't get picked up + # automatically, I don't know. but we need to trigger so that we + # have all the information about netdevs that we care about for + # NetworkManager in the udev database + from baseudev import udev_trigger, udev_settle + udev_trigger("net") + udev_settle() + # and for added fun, once doesn't seem to be enough? so we + # do it twice, it works and we scream at the world "OH WHY?" + udev_trigger("net") + udev_settle() + + import gettext + _ = lambda x: gettext.ldgettext("anaconda", x) + + anaconda = Anaconda() + warnings.showwarning = AnacondaShowWarning + setupTranslations() + + # reset python's default SIGINT handler + signal.signal(signal.SIGINT, signal.SIG_DFL) + signal.signal(signal.SIGSEGV, isys.handleSegv) + + setupEnvironment() + + pidfile = open("/var/run/anaconda.pid", "w") + pidfile.write("%s\n" % (os.getpid(),)) + del pidfile + # add our own additional signal handlers + signal.signal(signal.SIGHUP, startDebugger) + + # we need to do this really early so we make sure its done before rpm + # is imported + iutil.writeRpmPlatform() + + graphical_failed = 0 + vncS = vnc.VncServer() # The vnc Server object. + vncS.anaconda = anaconda + xserver_pid = None + + (opts, args) = parseOptions() + + if opts.unsupportedMode: + stdoutLog.error("Running anaconda in %s mode is no longer supported." % opts.unsupportedMode) + sys.exit(0) + + # Now that we've got arguments, do some extra processing. + setupLoggingFromOpts(opts) + + # Default is to prompt to mount the installed system. + anaconda.rescue_mount = not opts.rescue_nomount + + if opts.dlabel: #autodetected driverdisc in use + flags.dlabel = True + + anaconda.displayMode = opts.display_mode + anaconda.isHeadless = opts.isHeadless + + if opts.noipv4: + flags.useIPv4 = False + + if opts.noipv6: + flags.useIPv6 = False + + if opts.proxy: + anaconda.proxy = opts.proxy + + if opts.proxyAuth: + filename = opts.proxyAuth + ret = open(filename, "r").readlines() + os.unlink(filename) + + anaconda.proxyUsername = ret[0].rstrip() + if len(ret) == 2: + anaconda.proxyPassword = ret[1].rstrip() + + if opts.updateSrc: + anaconda.updateSrc = opts.updateSrc + + if opts.method: + if opts.method[0] == '@': + opts.method = expandFTPMethod(opts.method) + + anaconda.setMethodstr(opts.method) + else: + anaconda.methodstr = None + + if opts.stage2: + if opts.stage2[0] == '@': + opts.stage2 = expandFTPMethod(opts.stage2) + + anaconda.stage2 = opts.stage2 + + if opts.liveinst: + flags.livecdInstall = True + + if opts.module: + for mod in opts.module: + (path, name) = string.split(mod, ":") + anaconda.extraModules.append((path, name)) + + if opts.vnc: + flags.usevnc = 1 + anaconda.displayMode = 'g' + vncS.recoverVNCPassword() + + # Only consider vncconnect when vnc is a param + if opts.vncconnect: + cargs = string.split(opts.vncconnect, ":") + vncS.vncconnecthost = cargs[0] + if len(cargs) > 1 and len(cargs[1]) > 0: + if len(cargs[1]) > 0: + vncS.vncconnectport = cargs[1] + + if opts.ibft: + flags.ibft = 1 + + if opts.iscsi: + flags.iscsi = 1 + + if opts.targetArch: + flags.targetarch = opts.targetArch + + # set flags + flags.dmraid = opts.dmraid + flags.mpath = opts.mpath + flags.selinux = opts.selinux + + if opts.serial: + flags.serial = True + if opts.virtpconsole: + flags.virtpconsole = opts.virtpconsole + + if opts.xdriver: + anaconda.xdriver = opts.xdriver + anaconda.writeXdriver(root="/") + + if not flags.livecdInstall: + isys.auditDaemon() + + # setup links required for all install types + for i in ( "services", "protocols", "nsswitch.conf", "joe", "selinux", + "mke2fs.conf" ): + try: + if os.path.exists("/mnt/runtime/etc/" + i): + os.symlink ("../mnt/runtime/etc/" + i, "/etc/" + i) + except: + pass + + # This is the one place we do all kickstart file parsing. + if opts.ksfile: + kickstart.preScriptPass(anaconda, opts.ksfile) + anaconda.ksdata = kickstart.parseKickstart(anaconda, opts.ksfile) + opts.rescue = anaconda.ksdata.rescue.rescue + + # we need to have a libuser.conf that points to the installer root for + # sshpw, but after that we start sshd, we need one that points to the + # install target. + luserConf = users.createLuserConf(instPath="") + handleSshPw(anaconda) + startSsh() + del(os.environ["LIBUSER_CONF"]) + + users.createLuserConf(anaconda.rootPath) + + if opts.rescue: + anaconda.rescue = True + + import rescue + + if anaconda.ksdata: + anaconda.instClass.configure(anaconda) + + # We need an interface before running kickstart execute methods for + # storage. + from snack import * + screen = SnackScreen() + anaconda.intf = rescue.RescueInterface(screen) + + anaconda.ksdata.execute() + + anaconda.intf = None + screen.finish() + + # command line 'nomount' overrides kickstart /same for vnc/ + anaconda.rescue_mount = not (opts.rescue_nomount or anaconda.ksdata.rescue.nomount) + + rescue.runRescue(anaconda) + + # shouldn't get back here + sys.exit(1) + + if anaconda.ksdata: + if anaconda.ksdata.vnc.enabled: + flags.usevnc = 1 + anaconda.displayMode = 'g' + + if vncS.password == "": + vncS.password = anaconda.ksdata.vnc.password + + if vncS.vncconnecthost == "": + vncS.vncconnecthost = anaconda.ksdata.vnc.host + + if vncS.vncconnectport == "": + vncS.vncconnectport = anaconda.ksdata.vnc.port + + flags.vncquestion = False + + # disable VNC over text question when not enough memory is available + if iutil.memInstalled() < isys.MIN_GUI_RAM: + flags.vncquestion = False + + + if anaconda.displayMode == 't' and flags.vncquestion: #we prefer vnc over text mode, so ask about that + title = _("Would you like to use VNC?") + message = _("Text mode provides a limited set of installation options. " + "It does not allow you to specify your own partitioning " + "layout or package selections. Would you like to use VNC " + "mode instead?") + + ret = vnc.askVncWindow(title, message) + if ret != -1: + anaconda.displayMode = 'g' + flags.usevnc = 1 + if ret is not None: + vncS.password = ret + + if opts.debug: + flags.debug = True + + log.info("anaconda called with cmdline = %s" %(sys.argv,)) + log.info("Display mode = %s" % anaconda.displayMode) + log.info("Default encoding = %s " % sys.getdefaultencoding()) + + checkMemory(anaconda) + + # + # now determine if we're going to run in GUI or TUI mode + # + # if no X server, we have to use text mode + if not flags.livecdInstall and not iutil.isS390() and not os.access("/usr/bin/Xorg", os.X_OK): + stdoutLog.warning(_("Graphical installation is not available. " + "Starting text mode.")) + time.sleep(2) + anaconda.displayMode = 't' + + # s390/iSeries checks + if anaconda.isHeadless and anaconda.displayMode == "g" and not \ + (os.environ.has_key("DISPLAY") or flags.usevnc): + stdoutLog.warning(_("DISPLAY variable not set. Starting text mode.")) + anaconda.displayMode = 't' + graphical_failed = 1 + time.sleep(2) + + # if DISPLAY not set either vnc server failed to start or we're not + # running on a redirected X display, so start local X server + if anaconda.displayMode == 'g' and not os.environ.has_key('DISPLAY') and not flags.usevnc: + try: + # The following code depends on no SIGCHLD being delivered, possibly + # only except the one from a failing X.org. Thus make sure before + # entering this section that all the other children of anaconda have + # terminated or were forked into an orphan (which won't deliver a + # SIGCHLD to mess up the fragile signaling below). + + # start X with its USR1 handler set to ignore. this will make it send + # us SIGUSR1 if it succeeds. if it fails, catch SIGCHLD and bomb out. + + def sigchld_handler(num, frame): + raise OSError + + def sigusr1_handler(num, frame): + pass + + def preexec_fn(): + signal.signal(signal.SIGUSR1, signal.SIG_IGN) + + old_sigusr1 = signal.signal(signal.SIGUSR1, sigusr1_handler) + old_sigchld = signal.signal(signal.SIGCHLD, sigchld_handler) + xout = open("/dev/tty5", "w") + + proc = subprocess.Popen(["Xorg", "-br", "-logfile", "/tmp/X.log", + ":1", "vt6", "-s", "1440", "-ac", + "-nolisten", "tcp", "-dpi", "96"], + close_fds=True, stdout=xout, stderr=xout, + preexec_fn=preexec_fn) + + signal.pause() + + os.environ["DISPLAY"] = ":1" + doStartupX11Actions(opts.runres) + xserver_pid = proc.pid + except (OSError, RuntimeError): + stdoutLog.warning(" X startup failed, falling back to text mode") + anaconda.displayMode = 't' + graphical_failed = 1 + time.sleep(2) + finally: + signal.signal(signal.SIGUSR1, old_sigusr1) + signal.signal(signal.SIGCHLD, old_sigchld) + + if anaconda.displayMode == 't' and graphical_failed and not anaconda.ksdata: + ret = vnc.askVncWindow() + if ret != -1: + anaconda.displayMode = 'g' + flags.usevnc = 1 + if ret is not None: + vncS.password = ret + + # if they want us to use VNC do that now + if anaconda.displayMode == 'g' and flags.usevnc: + runVNC() + doStartupX11Actions(opts.runres) + + # with X running we can initialize the UI interface + anaconda.initInterface() + anaconda.instClass.configure(anaconda) + + # comment out the next line to make exceptions non-fatal + from exception import initExceptionHandling + anaconda.mehConfig = initExceptionHandling(anaconda) + + # add our own additional signal handlers + signal.signal(signal.SIGUSR2, lambda signum, frame: anaconda.dumpState()) + + # download and run Dogtail script + if opts.dogtail: + try: + import urlgrabber + + try: + fr = urlgrabber.urlopen(opts.dogtail) + except urlgrabber.grabber.URLGrabError, e: + log.error("Could not retrieve Dogtail script from %s.\nError was\n%s" % (opts.dogtail, e)) + fr = None + + if fr: + (fw, testcase) = mkstemp(prefix='testcase.py.', dir='/tmp') + os.write(fw, fr.read()) + fr.close() + os.close(fw) + + # download completed, run the test + if not os.fork(): + # we are in the child + os.chmod(testcase, 0755) + os.execv(testcase, [testcase]) + sys.exit(0) + else: + # we are in the parent, sleep to give time for the testcase to initialize + # todo: is this needed, how to avoid possible race conditions + time.sleep(1) + except Exception, e: + log.error("Exception %s while running Dogtail testcase" % e) + + if opts.lang: + # this is lame, but make things match what we expect (#443408) + opts.lang = opts.lang.replace(".utf8", ".UTF-8") + anaconda.dispatch.skipStep("language", permanent = 1) + anaconda.instLanguage.instLang = opts.lang + anaconda.instLanguage.systemLang = opts.lang + anaconda.timezone.setTimezoneInfo(anaconda.instLanguage.getDefaultTimeZone(anaconda.rootPath)) + + if opts.keymap: + anaconda.dispatch.skipStep("keyboard", permanent = 1) + anaconda.keyboard.set(opts.keymap) + anaconda.keyboard.activate() + + if anaconda.ksdata: + import storage + + # Before we set up the storage system, we need to know which disks to + # ignore, etc. Luckily that's all in the kickstart data. + anaconda.storage.zeroMbr = anaconda.ksdata.zerombr.zerombr + anaconda.storage.ignoredDisks = anaconda.ksdata.ignoredisk.ignoredisk + anaconda.storage.exclusiveDisks = anaconda.ksdata.ignoredisk.onlyuse + + if anaconda.ksdata.clearpart.type is not None: + anaconda.storage.clearPartType = anaconda.ksdata.clearpart.type + anaconda.storage.clearPartDisks = anaconda.ksdata.clearpart.drives + if anaconda.ksdata.clearpart.initAll: + anaconda.storage.reinitializeDisks = anaconda.ksdata.clearpart.initAll + + storage.storageInitialize(anaconda) + + # Now having initialized storage, we can apply all the other kickstart + # commands. This gives us the ability to check that storage commands + # are correctly formed and refer to actual devices. + anaconda.ksdata.execute() + + # set up the headless case + if anaconda.isHeadless: + anaconda.dispatch.skipStep("keyboard", permanent = 1) + + if not anaconda.ksdata: + anaconda.instClass.setSteps(anaconda) + else: + kickstart.setSteps(anaconda) + + try: + anaconda.intf.run(anaconda) + except SystemExit, code: + anaconda.intf.shutdown() + + if anaconda.ksdata and anaconda.ksdata.reboot.eject: + for drive in anaconda.storage.devicetree.devices: + if drive.type != "cdrom": + continue + + log.info("attempting to eject %s" % drive.path) + drive.eject() + + del anaconda.intf + +# vim:tw=78:ts=4:et:sw=4 diff --git a/anaconda.spec b/anaconda.spec new file mode 100644 index 0000000..cb4690e --- /dev/null +++ b/anaconda.spec @@ -0,0 +1,5069 @@ +%define livearches %{ix86} x86_64 ppc ppc64 +%define _libdir %{_prefix}/lib + +Summary: Graphical system installer +Name: anaconda +Version: 13.42 +Release: 1%{?dist} +License: GPLv2+ +Group: Applications/System +URL: http://fedoraproject.org/wiki/Anaconda + +# To generate Source0 do: +# git clone http://git.fedorahosted.org/git/anaconda.git +# git checkout -b archive-branch anaconda-%{version}-%{release} +# ./autogen.sh +# make dist +Source0: %{name}-%{version}.tar.bz2 + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +# Versions of required components (done so we make sure the buildrequires +# match the requires versions of things). +%define dmver 1.02.17-6 +%define gettextver 0.11 +%define genisoimagever 1.1.9-4 +%define intltoolver 0.31.2-3 +%define libnlver 1.0 +%define libselinuxver 1.6 +%define pykickstartver 1.68 +%define rpmpythonver 4.2-0.61 +%define slangver 2.0.6-2 +%define yumver 2.9.2 +%define partedver 1.8.1 +%define pypartedver 2.5-2 +%define syscfgdatever 1.9.48 +%define pythonpyblockver 0.45 +%define e2fsver 1.41.0 +%define nmver 1:0.7.1-3.git20090414 +%define dbusver 1.2.3 +%define createrepover 0.4.7 +%define yumutilsver 1.1.11-3 +%define iscsiver 6.2.0.870-3 +%define pythoncryptsetupver 0.0.6 +%define mehver 0.4 +%define sckeyboardver 1.3.1 + +BuildRequires: audit-libs-devel +BuildRequires: bzip2-devel +BuildRequires: device-mapper-devel >= %{dmver} +BuildRequires: e2fsprogs-devel >= %{e2fsver} +BuildRequires: elfutils-devel +BuildRequires: gettext >= %{gettextver} +BuildRequires: gtk2-devel +BuildRequires: intltool >= %{intltoolver} +BuildRequires: isomd5sum-devel +BuildRequires: libarchive-devel +BuildRequires: libX11-devel +BuildRequires: libXt-devel +BuildRequires: libXxf86misc-devel +BuildRequires: libblkid-devel +BuildRequires: libcurl-devel +BuildRequires: libnl-devel >= %{libnlver} +BuildRequires: libselinux-devel >= %{libselinuxver} +BuildRequires: libsepol-devel +BuildRequires: libxml2-python +BuildRequires: newt-devel +BuildRequires: pango-devel +BuildRequires: pykickstart >= %{pykickstartver} +BuildRequires: python-devel +BuildRequires: python-urlgrabber >= 3.9.1-5 +BuildRequires: rpm-devel +BuildRequires: rpm-python >= %{rpmpythonver} +BuildRequires: slang-devel >= %{slangver} +BuildRequires: xmlto +BuildRequires: yum >= %{yumver} +BuildRequires: zlib-devel +BuildRequires: NetworkManager-devel >= %{nmver} +BuildRequires: NetworkManager-glib-devel >= %{nmver} +BuildRequires: dbus-devel >= %{dbusver} +BuildRequires: system-config-keyboard >= %{sckeyboardver} +%ifarch %livearches +BuildRequires: desktop-file-utils +%endif +BuildRequires: iscsi-initiator-utils-devel >= %{iscsiver} +%ifarch s390 s390x +BuildRequires: s390utils-devel +%endif + +Requires: python-meh >= %{mehver} +Requires: policycoreutils +Requires: rpm-python >= %{rpmpythonver} +Requires: comps-extras +Requires: parted >= %{partedver} +Requires: pyparted >= %{pypartedver} +Requires: yum >= %{yumver} +Requires: libxml2-python +Requires: python-urlgrabber >= 3.9.1-5 +Requires: system-logos +Requires: pykickstart >= %{pykickstartver} +Requires: system-config-date >= %{syscfgdatever} +Requires: device-mapper >= %{dmver} +Requires: device-mapper-libs >= %{dmver} +Requires: dosfstools +Requires: e2fsprogs >= %{e2fsver} +Requires: gzip +Requires: libarchive +%ifarch %{ix86} x86_64 ia64 +Requires: dmidecode +%endif +Requires: python-pyblock >= %{pythonpyblockver} +Requires: libuser-python +Requires: newt-python +Requires: authconfig +Requires: system-config-firewall-base +Requires: cryptsetup-luks +Requires: python-cryptsetup >= %{pythoncryptsetupver} +Requires: mdadm +Requires: lvm2 +Requires: util-linux-ng >= 2.15.1 +Requires: system-config-keyboard >= %{sckeyboardver} +Requires: dbus-python +Requires: cracklib-python +Requires: python-bugzilla +Requires: python-nss +Requires: tigervnc-server +%ifarch %livearches +Requires: usermode +Requires: zenity +%endif +Requires: createrepo >= %{createrepover} +Requires: squashfs-tools +Requires: genisoimage >= %{genisoimagever} +%ifarch %{ix86} x86_64 +Requires: syslinux >= 3.73 +Requires: makebootfat +Requires: device-mapper +%endif +%ifarch s390 s390x +Requires: openssh +%endif +Requires: isomd5sum +Requires: yum-utils >= %{yumutilsver} +Requires: NetworkManager >= %{nmver} +Requires: dhclient +Requires: anaconda-yum-plugins +Requires: libselinux-python >= %{libselinuxver} +%ifarch %{sparc} +Requires: elftoaout piggyback +%endif +Obsoletes: anaconda-images <= 10 +Provides: anaconda-images = %{version}-%{release} +Obsoletes: anaconda-runtime < %{version}-%{release} +Provides: anaconda-runtime = %{version}-%{release} +Obsoletes: booty + +%description +The anaconda package contains the program which was used to install your +system. These files are of little use on an already installed system. + +%prep +%setup -q + +%build +%configure --disable-static +%{__make} %{?_smp_mflags} + +%install +%{__rm} -rf %{buildroot} +%{__make} install DESTDIR=%{buildroot} +find %{buildroot} -type f -name "*.la" | xargs %{__rm} + +%ifarch %livearches +desktop-file-install --vendor="" --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop +%else +%{__rm} -rf %{buildroot}%{_bindir}/liveinst %{buildroot}%{_sbindir}/liveinst +%endif + +%find_lang %{name} + +%clean +%{__rm} -rf %{buildroot} + +%ifarch %livearches +%post +update-desktop-database &> /dev/null || : +%endif + +%ifarch %livearches +%postun +update-desktop-database &> /dev/null || : +%endif + +%files -f %{name}.lang +%defattr(-,root,root) +%doc COPYING +%doc docs/command-line.txt +%doc docs/install-methods.txt +%doc docs/mediacheck.txt +%doc docs/anaconda-release-notes.txt +/lib/udev/rules.d/70-anaconda.rules +%{_bindir}/mini-wm +%{_sbindir}/anaconda +%ifarch i386 i486 i586 i686 x86_64 +%{_sbindir}/gptsync +%{_sbindir}/showpart +%endif +%{_datadir}/anaconda +%{_prefix}/lib/anaconda +%{_prefix}/lib/anaconda-runtime +%ifarch %livearches +%{_bindir}/liveinst +%{_sbindir}/liveinst +%config(noreplace) %{_sysconfdir}/pam.d/* +%config(noreplace) %{_sysconfdir}/security/console.apps/* +%{_sysconfdir}/X11/xinit/xinitrc.d/* +%{_datadir}/applications/*.desktop +%endif + +%changelog +* Wed May 12 2010 David Lehman - 13.42-1 +- bootloader timeout default should be None not 0 (#590661) (jkeating) + +* Fri May 07 2010 David Lehman - 13.41-1 +- Remove partitions after unpartitioned non-partition devices. (#588597) + (dlehman) +- Work around device node creation issues when creating EFI images. + (#589680) (pjones) +- Add support to livecd for arbitrarily complex dir structures. (#504986) + (dlehman) +- Do not automatically backtrace when telnetd quits (#588964). (clumens) + +* Tue May 04 2010 David Lehman - 13.40-1 +- Teach upd-instroot about i686 (jkeating) +- Enable network if it is needed when repo is added in UI (#577803). + (rvykydal) +- Tell dracut it should activate the first swap device (#572771) (hdegoede) +- Add boot= argument to kernel cmdline when in fips mode (hdegoede) +- Don't make all devices on the boot device selector immutable (#583028). + (clumens) +- Do not use --quiet and --nostart when doing selinux configuration + (#568528) (msivak) +- Check for not having found any disks after populating the tree (#588498) + (hdegoede) +- Don't add recovery partitions to the grub boot menu (#534066) (hdegoede) +- Default the global grub timeout to 5 for serial (jkeating) +- Make sure a given path exists before calling os.statvfs on it (#587662). + (clumens) +- Turn off BETANAG - we're getting close to the release (#587639). (clumens) +- Don't clear BIOS RAID member disks (#587066) (hdegoede) +- Remove devices from libparted's cache when destroying them (#586622) + (hdegoede) + +* Wed Apr 28 2010 David Lehman - 13.39-1 +- X input configuration has moved to /usr/share (#585621). (clumens) +- Keep the selected device count right when going back to filtering + (#572882). (clumens) +- Prune resize and format create/migrate actions if destroying a device. + (dlehman) +- Schedule actions when removing existing extended partitions. (#568219) + (dlehman) +- Don't try to zero out extended partitions. (dlehman) + +* Wed Apr 21 2010 David Lehman - 13.38-1 +- Restore storage.clearPartType after reset when backing out of GUI. + (#559233) (dlehman) +- Make Cancel button the default for 'Weak Password' dialog (#582660) (bcl) +- Set Create Storage focus to first active radio button (#582676) (bcl) +- livecd.py: set the selected keyboard (#583289). (akozumpl) +- Fix uninitialized variable compile error (#577501) (msivak) +- In groupListExists, log what groups don't exist. (notting) +- Add a questionInitializeDisk method to the rescue interface (#582304) + (hdegoede) +- Fix syntax error in kickstart.py (hdegoede) +- Add a script for running pylint on anaconda (hdegoede) +- Fix various syntax errors (hdegoede) +- Write an AUTO ... line to mdadm.conf (#537329) (hdegoede) +- filter_gui.py: fixup isProtected changes for biosraid and mpath (#581820) + (hdegoede) +- BIOS RAID sets get shown double when adding advanced storage (#574714) + (hdegoede) +- init: switch back to tty1 after the installer finishes. (#577380) + (akozumpl) +- Use None, not '', for empty repo proxy attributes (#572460) (rvykydal) +- Don't segfault if proxyUser or proxyPassword are empty (#580226). (clumens) +- Allow using pre-existing gpt labels for /boot on non EFI x86 (#572488) + (hdegoede) +- Re-Check minimum size of partition after running fsck on it (#578955) (bcl) +- Show protected devices in the filter UI, but make them immutable + (#568343). (clumens) +- Turn protected devices into a property on the Anaconda object. (clumens) +- Schedule removal actions for any format on a --onpart= device (#576976). + (clumens) +- Update the partition scheme icons to better looking ones (#579697). + (clumens) +- Sort partition create actions before other unpartitioned devices. + (#574379) (dlehman) +- Restore xdriver= functionality (#577312) (msivak) +- loader: con Newt into thinking LANG is always en_US.UTF-8 (#576541). + (akozumpl) +- Copy install.img to install target on http installs. (pjones) +- Make sure the install.img exists before attempting to copy (#578391). + (clumens) +- fix: Tackle race condition issues during X startup (#577708). (akozumpl) +- Copy install.img and remount no matter how many discs (#577196) (pjones) + +* Thu Mar 25 2010 David Lehman - 13.37-1 +- Unlock the CD tray door in isys.ejectcdrom() (#569377) (pjones) +- Texts under storage/formats missing from the .pot file (#576082). + (akozumpl) +- Translate the Back button in glade (#576082) (akozumpl) +- Add originalFormat handling to editLVMLogicalVolume. (#576529) (dlehman) +- Fix a cut&paste error that caused a traceback (#574743) (dlehman) +- yum requires the proxy settings to include a protocol (#576691). (clumens) +- Only look for extended partitions on partitioned devices (#576628) + (hdegoede) +- Fix referring to disks by-label, by-uuid, etc (#575855). (clumens) +- Fix syntax for passing a mapping to a translatable string (#576085). + (clumens) +- Catch NotImplementedError when scanning for disklabels (#566722) (hdegoede) +- Filter UI do not start / stop BIOS RAID sets to get there size (#574587) + (hdegoede) +- Make filter UI honor nodmraid cmdline option (#574684) (hdegoede) +- Properly align the first partition we create (#574220) (hdegoede) +- Update filter for translation log entries. (dlehman) + +* Mon Mar 22 2010 David Lehman - 13.36-1 +- Don't pass size=1 for autopart PVs. Use PartitionDevice's default size. + (dlehman) +- Make python start with correct default unicode encoding (#539904). + (akozumpl) +- Fixes bug #569373 - Change udev_trigger block calls to use change action + (bcl) +- Fix: execWithRedirect() unexpectedkeyword argument 'searchPath' (#572853) + (hdegoede) +- Do not crash on .autorelabel when using read only rescue mount (#568367) + (msivak) +- Do not crash when getDevices returns NULL (#567939) (msivak) + +* Mon Mar 15 2010 David Lehman - 13.35-1 +- Fully qualify _ped.IOException. (dlehman) + +* Mon Mar 15 2010 David Lehman - 13.34-1 +- parted.PartedDisk can throw IOExceptions too (#573539) (hdegoede) +- Fix recognition of partitions on mdraid arrays (#569462) (hdegoede) +- Use the disk name from kickstart in the shouldClear error message. + (clumens) +- Fix displaying error messages on cleanup/remove callback problems + (#572893). (clumens) +- Before running shouldClear, make sure a real disk was specified (#572523). + (clumens) +- exception.py: switch to tty1 before exit (#569071) (akozumpl) +- Preserve encryption setting when re-editing new encrypted LVs. (#568547) + (dlehman) +- Never pass "" as mountpoint to format constructors. + (dlehman) +- Fix up device dialogs' handling of preexisting formatting. (dlehman) +- Set up devices using their original formats for certain action types. + (#565848) (dlehman) +- Keep a handle to devices' original format instance. (#565848) (dlehman) +- Tell ld.so and friends not to use hardware optimized libs (#572178) + (pjones) +- By default, libcurl does not appear to follow redirects (#572528). + (clumens) +- Use '--keyword=P_:1,2' for plural gettext string extraction (#567417). + (dcantrell) +- fix: do not initialize the install interface whenever is is accessed + (#565872) (akozumpl) +- Select/Deselect All should only apply to the current tab (#516143, + #568875). (clumens) +- Don't try to write firewall and auth information twice (#568528). (clumens) + +* Thu Mar 04 2010 Chris Lumens - 13.33-1 +- On live installs, the syslog is /var/log/dmesg. (#568814). (clumens) +- Set up udev environment so anaconda's udev rules run in livecd. (#568460) + (dlehman) +- Ignore probably-spurious disklabels on unpartitionable devices. (#567832) + (dlehman) +- The justConfigFile parameter doesn't do anything on x86, either (#568567). + (clumens) +- Add python-devel's gdbinit, which provides useful debugging macros. + (pjones) +- Minor style fix (indent "cat" correctly") (pjones) +- doReIPL should return when going back through steps, too (#563862). + (clumens) +- Skip the filter/cleardisk steps on upgrades, too (#568334). (clumens) + +* Thu Feb 25 2010 David Lehman - 13.32-1 +- Check for the real device-mapper nodes in /proc/swaps. (#567840) (dlehman) +- It's necessary to give each vfprintf invocation a fresh va_list (#568235) + (akozumpl) +- Don't unconditionally unskip the partition step on failure (#567889). + (clumens) +- rpm doesn't always give the callback a tuple (#567878). (clumens) + +* Wed Feb 24 2010 David Cantrell - 13.31-1 +- Revert "There is no kernel-PAE package anymore, use kernel for xen + (#559347)." (dcantrell) +- logging: make loader say 'loader' (#563009). (akozumpl) +- Make loader log into syslog (so remote logging works for it as well) + (#524980) (akozumpl) + +* Tue Feb 23 2010 Chris Lumens - 13.30-1 +- Revert "Add back hald for Xorg input device queries (#553780)" (clumens) +- No longer remove persistent udev rules files (#566948). (clumens) +- When BUILDARCH==ppc64, set BASEARCH to ppc (#524235). (dcantrell) +- There is no kernel-PAE package anymore, use kernel for xen (#559347). + (dcantrell) +- Fix a typo, leaving one less string needing translation (#567427). + (clumens) +- Don't show BIOS RAID and multipath members in the cleardisks UI (#567281). + (clumens) + +* Mon Feb 22 2010 David Cantrell - 13.29-1 +- DiskLabel.status can't be determined so return False. (#563526,#561074) + (dlehman) +- Remove getDasdDevPort() and getDasdState() from isys.py. (dcantrell) +- Replace calls to isys.getDasdPorts() with calls to new getDasdPorts() + (dcantrell) +- Add getDasdPorts() to storage/dasd.py. (dcantrell) +- Remove isys/dasd.c, functions no longer needed in isys. (dcantrell) +- Fix creation of encrypted md members and pvs in kickstart. (#567396) + (dlehman) +- Don't align free space geometries in getFreeRegions. (#565692) (dlehman) +- Align extended partitions like we do other partitions. (dlehman) +- Don't allow the host's LD_LIBRARY_PATH affect get_dso_deps (#565887). + (clumens) +- Remove a couple redundant network bring up calls. (clumens) +- Reset the resolver cache after bringing up the network (#562209). (clumens) +- Let's have /etc/xorg.conf.d in stage2 (#566396) (akozumpl) +- Add the filter UI screens to the list of translatable files (#567216). + (clumens) +- Don't traceback when a user tries to put /boot on an LV (#566569) + (hdegoede) +- RescueInterface should inherit from InstallInterfaceBase too (hdegoede) + +* Fri Feb 19 2010 Chris Lumens - 13.28-1 +- Allow --ignoremissing to work for @base and @core (#566752). + (clumens) +- Add device node names to the filter UI, hidden by default (#566375). + (clumens) +- logging: initialize tty3 logging in anaconda_log, along with all other + basic loggers. (akozumpl) +- logging: introduce stderr logger and use it for critical situations in + kickstart.py. (akozumpl) +- logging: Loggers live a cosmopolitan life, forget about them after + created. (akozumpl) +- logging: remove AnacondaLog's unused default parameter. (akozumpl) +- logging, fix: setting remote logging from kicstart (akozumpl) +- logging: addFileHandler does not set autoLevel by default (akozumpl) +- Allow deleting the interface property, too (#566186). (clumens) + +* Tue Feb 16 2010 Chris Lumens - 13.27-1 +- Fix hiding the advanced button on the filter UI (#555769, #565425, + #560016). (clumens) +- PartitionDevice._setDisk: self.disk can be None. (#565930) (dlehman) +- Add currentSize method to the PartitionDevice class (#565822) (hdegoede) +- Fix instData removal mis merge (hdegoede) +- Require a format to have a mountpoint before testing for RO (#565879). + (clumens) +- The step is named cleardiskssel, not cleardisksel (#565873). (clumens) +- Use the LUKS UUID, not the filesystem UUID for dracut. (#561373) (dlehman) +- Show the correct device path when formatting as swap or luks. (dlehman) +- Fix ordering of arguments to xfs_admin for writing fs label. (#556546) + (dlehman) +- Log only the disks' names in PartitionDevice._setDisk. (dlehman) +- Check for the updates directory before using it (#565840). (clumens) +- Fix a handful of simple pychecker errors. (clumens) +- Add the .libs directories to PYTHONPATH so pychecker works again. (clumens) +- Warn when ignoring BIOS RAID members (#560932) (hdegoede) +- Intel BIOS RAID array not recognized (#565458) (hdegoede) +- Fix traceback in filter_gui.py when dealing with RAID10 BIOSRAID (#565444) + (hdegoede) +- Remove newly added partition from disk if subsequent commit fails. + (#559907) (dlehman) +- Use property() so we can assign to anaconda.intf (#565639). (clumens) +- Don't always set anaconda.upgrade to be True (#565622). (clumens) +- Re-remove the end of line from pychecker-false-positives. (clumens) +- cryptPassword is not part of any class (#565611). (clumens) +- Fix another missing import (#565599). (clumens) +- Add a missing import (#565592). (clumens) +- createLuserConf is not a part of any class (#565306). (clumens) + +* Fri Feb 12 2010 David Lehman - 13.26-1 +- Fix return values for dasd_settle_all() in linuxrc.s390 (#558881). + (dcantrell) +- Don't reset the default package selection on text installs (#564103). + (clumens) +- Remove rules handled by the device-mapper package's rules. (dlehman) +- Raise default lvm extent size from 4MB to 32MB. (dlehman) +- Add udev_settle after setup of LUKSDevice. (#534043) (dlehman) +- Pass '--force' to vgremove to avoid interactive prompts. (#563873) + (dlehman) +- Find rsyslog libs in $LIBDIR not /usr/$LIBDIR (jkeating) +- "_Do_ override BASEARCH with BUILDARCH, it does make sense (#524235)" + (msivak) +- Don't traceback during kickstart if no ignoredisk line is given (#563581). + (clumens) +- Allow any add-on python module to be updated via an updates.img. (clumens) +- Correct references to lcs and ctcm devices (#561816). (dcantrell) +- Use lsznet.raw from s390utils package (#563548). (dcantrell) +- Revert "Write ARP=no to ifcfg file when VSWITCH=1 is set on s390x + (#561926)." (dcantrell) +- Use /sys/devices/lcs instead of /sys/devices/cu3088 (#561816). (dcantrell) +- Wait for all DASDs to be online after autodetection (#558881). (dcantrell) +- Prompt user for install method when going back to STEP_METHOD. (dcantrell) +- Set initrd load address to 32MB for s390x (#546422). (dcantrell) +- Only show the error message if there was an error. (dlehman) +- Be even more clear about removing existing linux installations. (#493360) + (dlehman) +- Improve reboot modes in init.c and shutdown.c. (akozumpl) +- Be more explicit in which libraries we link with. (clumens) +- Do not override BASEARCH with BUILDARCH, it doesn't make sense (#524235) + (msivak) +- platform.checkBootRequest(): Fix use of map instead of filter (hdegoede) +- Improve platform.checkBootRequest() mdarray handling (hdegoede) +- Fix backtrace when trying to use LV for /boot (#562325) (hdegoede) +- Add lsusb to rescue mode stage2 (#562616) (hdegoede) +- No longer refer to instdata in attrSkipList. (clumens) +- Clarify which storage exceptions are bugs (#557928). (clumens) +- Merge branch 'no-instdata' (clumens) +- Fix partitioning help spelling (#562823). (clumens) +- Keep the end sector aligned when resizing partitions (#560647) (hdegoede) +- Write ARP=no to ifcfg file when VSWITCH=1 is set on s390x (#561926). + (dcantrell) +- Don't return the passphrase from hasKey. Should return a boolean. (dlehman) +- Fix splitting of error strings from program.log. (dlehman) +- Take advantage of default size for new partitions. (dlehman) +- Add a default size of 500MB for new partition requests. (dlehman) +- Remove check for MD_DEVNAME from udev_device_is_md. (#562024) (dlehman) +- Don't try to specify bitmap for RAID0 since mdadm doesn't allow it. + (#562023) (dlehman) +- Use 0 for a default max_req_size instead of None. (dlehman) +- Add missing methods to RescueInterface (pjones) +- Clean up imports in __main__. (clumens) +- Nothing uses InstallData anymore, so it can completely be removed. + (clumens) +- Last attribute out of InstallData, please turn out the lights. (clumens) +- Move firstboot into the Anaconda object. (clumens) +- Move bootloader into the Anaconda object. (clumens) +- Move escrowCertificates into the Storage object. (clumens) +- Move storage into the Anaconda class. (clumens) +- Move desktop to the Anaconda object. (clumens) +- Move timezone to the Anaconda object. (clumens) +- Move firewall into Anaconda. (clumens) +- Move users and security to the Anaconda object. (clumens) +- Move network to the Anaconda object. (clumens) +- Move keyboard to the Anaconda object. (clumens) +- Move instLanguage to the Anaconda object. (clumens) +- Move the writeKS and write methods from InstallData to Anaconda. (clumens) +- Move upgrade-related data to the Anaconda object. (clumens) +- Make a bunch of Anaconda attributes into properties. (clumens) +- Move instProgress to be an attribute on the InstallInterface. (clumens) +- Finally remove the x_already_set hack. (clumens) +- Move instClass to be an attribute on Anaconda. (clumens) +- Use anaconda.ksdata instead of anaconda.isKickstart. (clumens) +- Move ksdata to be an attribute on Anaconda. (clumens) +- Remove backend and other pointless attributes from InstallData. (clumens) +- Move the isHeadless attribute onto the Anaconda class. (clumens) +- Set displayMode on the anaconda object, then refer to that everywhere. + (clumens) +- Sort the attributes on class Anaconda for my future reference. (clumens) +- Install classes may no longer force text mode. (clumens) +- Add a Requires: for tigervnc-server (#561498). (clumens) + +* Wed Feb 03 2010 David Lehman - 13.25-1 +- Fix keymaps-override-ppc pickup in mk-images (#524235) (msivak) +- Fix typo in action sorting. Disklabels before partitions. (#560017) + (dlehman) +- Display ID_PATH for zFCP devices instead of looking for a WWID. (clumens) +- Fix a variety of filtering UI problems caused by switching models around. + (clumens) +- Add ID_SERIAL in as a backup in case there's no ID_SERIAL_SHORT. (clumens) +- Display ID_PATH instead of WWID for DASDs as well. (clumens) +- Rename the WWID column to Identifier. (clumens) +- Enforce maximum partition sizes. (#528276) (dlehman) +- Log commands as a string instead of as a list of strings. (dlehman) +- Strip off the timestamp from error output pulled from program.log. + (dlehman) +- Fix: execWithRedirect() logging stderr at wrong loglevel. (akozumpl) +- Fix: execWithCallback() not logging stderr. (akozumpl) +- Fix: ArithmeticError: Could not align to closest sector (#561278) + (hdegoede) +- Fixed parsing of strings with multiple values in pyudev (mgracik) +- On text kickstart installs, doBasePackageSelect still needs to run + (#559593). (clumens) +- Remove unused udev_parse_block_entry() function (hdegoede) +- Fixed the problem with string to list properties (#560262) (mgracik) + +* Mon Feb 01 2010 Chris Lumens - 13.24-1 +- Don't log the size of what we're unpacking anymore. (clumens) +- Fixup partition aligning (#560586) (hdegoede) +- Fix backtrace when adding mdraid arrays (#560360) (hdegoede) +- pyudev: explicitly specify all return value and argument types (#559394) + (hdegoede) +- Correctly add found multipath devices to our dict (#560029). (clumens) +- gtk.TreeStores are iterable, so use indices instead of iterators. (clumens) +- Build sorted models on top of filtered models to make column sorting work. + (clumens) +- Skip the filtering UI if there's only one disk in the machine. (clumens) +- Allow getScreen methods to indicate the screen should be skipped. (clumens) +- rename constants and a variable in anconda_log.py so the names make more + sense. (akozumpl) +- anaconda, storage and yum: log to tty3 in the same format as we log into + tty4 (akozumpl) +- Remove /sys prefix in udev_enumerate_devices() (hdegoede) +- Use libudev's enumerate_devices function (#559394) (mgracik) +- Update =~ regexps in lsznet.raw for bash-4.1 (#558537). (dcantrell) +- Startup iscsi / fcoe / zfcp before listing drives in the filter UI + (hdegoede) +- cleardisk_gui: Fix going back to the cleardisks gui (hdegoede) +- cleardisk_gui: Base autoselection of bootdev on detected BIOS order + (hdegoede) +- Fix typo in partition_ui_helpers_gui.py (hdegoede) +- Remove no longer used isys EDD code (hdegoede) +- Hookup new python EDD code (#478996) (hdegoede) +- Add pure python EDD code parsing and compareDrives substitute (#478996) + (hdegoede) +- Include /etc/netconfig in the initrd for NFS (#557704). (clumens) +- Log system messages to /tmp/syslog instead of /tmp/messages.log. (clumens) +- Make sure we always check /lib64 and /lib in find_library (#555669). + (dcantrell) +- Make sure we get required nss-softokn libs in the images. (dcantrell) +- Add 5 second ping delay for gateway and dns test on s390x (#536815). + (dcantrell) +- Update =~ regexps in linuxrc.s390 for bash-4.1 (#558537). (dcantrell) +- Add strace to the stage2 image and initrd. (clumens) +- multipath gives us CCISS devices names with ! in them, but we expect /. + (clumens) +- Fix visibility counting on filter notebook pages. (clumens) +- Fix thinko in displaying the first filter notebook page that disks. + (pjones) +- DMRaidArrayDevice don't pass major/minor to DMDevice.__init__ (#558440) + (hdegoede) +- Filter UI: don't show cciss controllers without sets (hdegoede) +- Filter UI: give BIOS RAID sets a usable model string and display that + (hdegoede) +- Make MDRaidArray description the same as DMRaidArray (hdegoede) +- Add DMRaidArrayDevice description and model properties (#558440) (hdegoede) +- DMRaidArrayDevices exist when created (#558440) (hdegoede) +- Clarify syslinux menu text (#557774) (hdegoede) +- Use description property for MDRaidArrayDevice model (hdegoede) +- MDRaidArrayDevice: Get rid of the ugly self.devices[0].type checking + (hdegoede) +- Make storage.unusedMDFoo also check mdcontainer members (hdegoede) +- Remove MDRaidArrayDevice biosraid property (hdegoede) +- Give MD BIOS RAID arrays there own type (hdegoede) +- Check for devices with no media present in filter_gui.py (#558177) + (hdegoede) +- multipath requires libaio.so (pjones) +- init, fixes a bug in getSyslog() causing a SEGV (akozumpl) + +* Fri Jan 22 2010 Chris Lumens - 13.23-1 +- Only /boot needs to be on one of the bootFSTypes. (#557718) (dlehman) +- nss files moved around again, NM needs more (#557702) (dcantrell) +- Fix broken log message. (pjones) +- MDRaidMember.__str__ add biosraid attribute to the returned string + (hdegoede) +- Remove setting of _isDisk and _partitionable from iscsi and fcoe disk code + (hdegoede) +- Add isDisk property to MDRaidArrayDevice (hdegoede) +- Make isDisk a property (hdegoede) +- Remove DMRaidDevice.mediaPresent method (hdegoede) +- Honor clearPartDisks when clearing whole disk formatting formatted disks + (hdegoede) +- Fixup MDRaidArrayDevice.biosraid (hdegoede) +- Update exclusiveDisks when handling mdraid BIOSRAID in isIgnored (hdegoede) +- MDRaidDevice does not have serial, vendor or bus arguments (hdegoede) +- Don't traceback on devices without a serial (hdegoede) +- Make addUdevPartitionDevice add lvm filters for ignored partitions + (hdegoede) +- Remove BIOSRAID see if ignored again code from addUdevPartitionDevice + (hdegoede) +- Remove special partition handling from isIgnored (hdegoede) +- Fix MDRaidArrayDevice mediaPresent to not depend on paritioned state + (hdegoede) +- Special handling for mdraid BIOS RAID sets in exclusive disks (hdegoede) +- 2 small mdraid related storage/udev.py changes (hdegoede) +- Fix an infinite loop by properly iterating over the disks store (#557856). + (clumens) +- Prevent init from telling us its story if the shutdown was planned. + (akozumpl) +- Add a description attribute to MDRaidArrayDevice (hdegoede) +- Don't do exclusiveDisks checking for BIOS RAID members (hdegoede) +- Fix a syntax error in filter_gui.py (hdegoede) +- Make multipath support use device-mapper-multipath to setup mpaths. + (pjones) +- Make PartitionDevice have its own teardown() when used with mpath. (pjones) +- Create multipath.conf (pjones) +- Make sure MultipathDevice is setup correctly. (pjones) +- List biosraids w/ disks and don't include them w/ md arrays in partgui. + (dlehman) +- Add biosraid property and use it in MDRaidArrayDevice.partitionable. + (dlehman) +- Make partitionable a property of StorageDevice instead of a plain attr. + (dlehman) +- Remove the multipath name generator, it is no longer used. (pjones) +- Set StorageDevice.exists before calling Device.__init__ (pjones) +- Add another command to .bash_history. (pjones) +- Introducing a proper syslog daemon allows us to remove the syslogd stub we + have. (akozumpl) +- Merge branch 'forward_all' (akozumpl) +- Python logging is talking to the syslog daemon. (akozumpl) +- make dracut only activate the root LV (#553295) (hdegoede) + +* Wed Jan 20 2010 David Cantrell - 13.22-1 +- Add mpath device to selection instead of its constituents. (pjones) +- Make all StorageDevice-s support .vendor and .model (pjones) +- Add a parser for 'multipath -d' output. (pjones) +- Multipath members should not be added to the ignored disk list. (pjones) +- Add udev accessor for ID_MODEL_FROM_DATABASE/ID_MODEL. (pjones) +- Add udev_device_get_multipath_name(). (pjones) +- Use mpath names instead of serials to group them. (pjones) +- Add an exception to use when multipath fails. (pjones) +- Add missing log_method_call()s. (pjones) +- Introduces rsylogd to anaconda (part of #524980) (akozumpl) +- Fix compile problem from 65a3c05. (akozumpl) +- Remove unnecessary free from the rpmextract error handler (msivak) +- Fix SIGSEGV in dlabel feature (#556390) (msivak) +- Support ignore all/reinit all on the disk reinitialization question + (#512011). (clumens) +- Handle reboot better on s390 (#533198) (dcantrell) +- Reset network setting input counters for IPv4 and IPv6 (#553761). + (dcantrell) +- Fix reading dasd status sysfs attribute (#536803). (dcantrell) +- Fix whitespace error that was introduced. (pjones) +- setStage2LocFromCmdline() shouldn't strdup so much. (pjones) +- s390 CHPID types must be treated in hex for lookup table to work (#552844) + (maier) +- Fixed the setting of LD_LIBRARY_PATH in rescue (mgracik) +- Use StorageError insead of enumerating all the different storage errors. + (pjones) +- Get rid of "stage2param" in parseCmdLineFlags(); it is unused. (pjones) +- Make clearDisksWindow use device.model not device.partedDevice.model + (pjones) +- Include device-mapper-multipath in stage2.img (pjones) +- Load all scsi_dh_* modules, since they can't be modprobe by aliases... + (pjones) +- Display the first filter notebook page that has any disks on it. (clumens) +- The firmware and additional-web-server groups no longer exist (#555609). + (clumens) +- Fix a traceback adding RAID devices to the filtering UI. (clumens) +- reIPL code cleanup in loader (dcantrell) +- Show call depth with spaces in log_method_call() (pjones) +- iutil.execWithRedirect() hasn't used searchPath= since 2006. Take it out. + (pjones) +- Look for the SSH config file in /etc/ssh on s390 as well (#555691). + (clumens) +- Changed the architecture check from __ppc64__ to __powerpc64__ (#555669) + (mgracik) +- Fix the blkid infinite loop. (#555601) (msivak) +- Testing mode was removed. (rvykydal) +- There's no reason to keep bits of mkinitrd in upd-instroot. (pjones) +- Support the new excludedGroupList in pykickstart (#554717). (clumens) +- Use passed in anaconda parameter instead of relying on handler (hdegoede) +- kickstart.py: Fix stdoutLog not being defined (hdegoede) +- pylint error fixes round 2 (hdegoede) +- Fixup various errors detected by pylint (hdegoede) +- mdraid: various changes to options for new mdraid array creation (hdegoede) +- Emit a dracut setup string for the root device itself (hdegoede) +- Fix path mistakes in dasd_settle() in loader/linuxrc.s390 (dcantrell) +- Do not write HWADDR to ifcfg file on s390x for OSA Layer 2 (#546005) + (dcantrell) +- Poll DASD status for 'online' or 'unformatted' (#536803) (dcantrell) +- Add back hald for Xorg input device queries (#553780) (dcantrell) +- Support moving multiple rows at once in the cleardisks UI. (clumens) +- Allow disks in the filter and cleardisks UIs to be selected via + double-click. (clumens) +- Don't log the big parted.Partition string every time we do a flag op. + (dlehman) +- Check for disklabels on unpartitionable devices. (#539482) (dlehman) +- Make partitioned attr depend on whether the device is partitionable. + (dlehman) +- Make sure to clear partitions before destroying a disklabel. (dlehman) +- Raise an exception when /etc/fstab contradicts detected fs type (#536906) + (dlehman) +- Don't include read-only filesystems in fsFreeSpace. (#540525) (dlehman) +- NTFS filesystems are not really modifiable in any real sense. Admit it. + (dlehman) + +* Tue Jan 12 2010 Chris Lumens - 13.21-1 +- Fix implicit declaration of things in sys/stat.h. (clumens) + +* Tue Jan 12 2010 Chris Lumens - 13.20-1 +- devicetree.devices is a list, not a dict (#554455). (clumens) +- Try to copy the correct traceback file, not anacdump.txt. (clumens) +- Make sure /tmp/DD exists before trying to copy it. (clumens) + +* Fri Jan 08 2010 David Cantrell - 13.19-1 +- st_size is off64_t on i386, off_t on others. (dcantrell) + +* Fri Jan 08 2010 David Cantrell - 13.18-1 +- RPM version check correction. (dcantrell) + +* Fri Jan 08 2010 David Cantrell - 13.17-1 +- fstat->st_size is a long unsigned int, not a long long unsigned int. + (dcantrell) +- Use libarchive and rpm pkg-config files during build. (dcantrell) +- Take ignoredDisks into account on the filter screen as well. (clumens) +- Don't wait on the filtertype screen on kickstart installs. (clumens) +- Our overridden AutoPart class must be mentioned in commandMap. (clumens) +- Reword filter UI introductory text to be less confusing. (clumens) +- Install the driver discs according to what was loaded in stage1 (msivak) +- Use the updated DriverDisc code in loader (msivak) +- Backport the RHEL5 DriverDisc functionality (msivak) +- Include depmod in stage1 and set it to prefer the DD directory (msivak) +- Add a function to get paths to loaded modules (msivak) +- Add rpm extraction routines (use librpm and libarchive) (msivak) +- Add DriverDisc v3 documentation (msivak) +- When displaying the filter UI, check devices that are in exclusiveDisks. + (clumens) +- get rid of global import of anaconda_log (akozumpl) +- introduce loglevel flag and use it in yum's tty3 logging (akozumpl) +- Remove LoggerClass but maintain loglevel= functionality (akozumpl) +- Do not duplicate exclusiveDisks when going back to filtering UI. (rvykydal) +- Fixes problems in the manual network configuration screen in loader with + IPv6. (akozumpl) +- Bring back missing IPv6 pieces that were lost in time. (dcantrell) +- Add configuration option to enable/disable IPv6 support. (dcantrell) +- Ask about LVM inconsistencies only in storageinit step. (rvykydal) +- Ask about disk initialization only in storageinit step. (rvykydal) +- Fix partition request sorting based on number of allowed disks. (#540869) + (dlehman) + +* Wed Jan 06 2010 Chris Lumens - 13.16-1 +- Add libblkid as a BuildRequires. (clumens) + +* Wed Jan 06 2010 Chris Lumens - 13.15-1 +- Also remove requirement for libbdevid (hdegoede). +- Update the python-pyblock version requirement, too. (clumens) +- Bump the required version numbers on a couple of components. (clumens) +- ID_BUS is not always defined (on virt, for instance) so handle that. + (clumens) +- opts should always be treated as a list inside isys.mount(). (clumens) + +* Mon Jan 04 2010 Chris Lumens - 13.14-1 +- Include fontconfig files needed for scaling of Meera fonts (#531742, + #551363). (clumens) +- Don't write dracut kernel cmdline paramters to anaconda-ks.cfg (hdegoede) +- Write dracut rd_NO_foo options to grub.conf (hdegoede) +- Add dracutSetupString methods to all relevant device classes (hdegoede) +- Avoid duplicate kernel cmdline options and cleanup booty dracut code + (hdegoede) + +* Wed Dec 23 2009 Chris Lumens - 13.13-1 +- lsreipl from s390-utils uses incorrect path (hamzy). +- fix for a bug in 05ce88b2 that split one line over several in program.log + (akozumpl) +- Dump the initial and final state of the system's storage devices. (dlehman) +- Add a "dict" attribute to Device and DeviceFormat classes. (dlehman) +- Sort Storage.devices by name (not path) for consistency. (dlehman) +- Put fsprofile support back in. (dlehman) +- Fix reset of lvm filtering (#527711) (rvykydal) +- Fix bootloader driveorder dialog. (rvykydal) +- Fix selection of default boot target in UI (#548695) (rvykydal) +- 'cleardiskssel' typos that made it impossible to run text install. + (akozumpl) + +* Fri Dec 18 2009 David Cantrell - 13.12-1 +- Use the per-disk flag to disable cylinder alignment for msdos disklabels. + (dlehman) +- Don't include advanced devices in the total count on the basic filter UI. + (clumens) +- For iSCSI devices, put the path into the UI instead of a WWID. (clumens) +- Add udev_device_get_path. (clumens) +- Make Callbacks._update_size_label callable from outside the object. + (clumens) +- Do not show the "Add Advanced" button on the basic filtering screen. + (clumens) +- Log into program.log through the standard python logging (part of + #524980). (akozumpl) +- Fix typo from commit 13022cc2. (dlehman) +- Restore accidentally removed line in backend.py (hdegoede) +- yuminstall: Fix indentation error (hdegoede) +- No need to special case ignoring of dmraid sets (hdegoede) + +* Wed Dec 16 2009 Chris Lumens - 13.11-1 +- Clean up setting paths on preupgrade (jvonau). (clumens) +- And call freetmp, too. (Jerry) +- Add a method to remove /tmp/install.img on low memory conditions (jvonau). + (clumens) +- Make sure /mnt/stage2 is mounted before trying to unmount. (Jerry) +- Skip the mediaDevice check before attempting to mount the install.img. + (Jerry) +- Remove install.img from /boot during preupgrade. (Jerry) +- Add __str__ methods to the DeviceFormat classes. (dlehman) +- Expand PartitionDevice.__str__ to include partition geometry and flags. + (dlehman) +- Hide biosraid member devices that contain MDRaidMember formats. (dlehman) +- Move disklabel handling into handleUdevDeviceFormat with the others. + (dlehman) +- DiskDevice.__init__ expects an "exists" parameter, so add it. (clumens) +- Fix multipath filtering. (clumens) +- Log error messages before displaying dialogs. (clumens) +- Include error messages when logging selinux context get/set failures. + (dlehman) +- Catch failures to set selinux contexts so it doesn't cause a crash. + (dlehman) +- Fix typo logging failure to get default file context. (dlehman) +- Use DiskLabel.alignment instead of getDiskAlignment. (dlehman) +- Add an alignment property to DiskLabel. (dlehman) +- iscsi.py: Do not translate log messages (hdegoede) +- Make iscsi,etc startup use the iscsi,etc Singletons (hdegoede) +- kickstart: Move onlining of fcoe/iscsi/zfcp devices to parse phase + (hdegoede) +- Make the fcoe, iscsi and zfcp classes singletons (hdegoede) +- Remove call to no longer existing isys DriveDict method (hdegoede) +- Use the correct yum configuration file when searching for the -logos + package (kanarip) +- Fix two missing closing parens in previous commits. (clumens) +- Add an interface to select the fancy filtering UI vs. the regular one. + (clumens) +- Add a step to prompt for the cleardisks UI. (clumens) +- Add a dialog to configure advanced storage devices. (clumens) +- Add an early user interface for filtering storage devices. (clumens) +- Rework the upgrade vs. install screen a bit to make it look nicer. + (clumens) +- Add the updated and simplified parttype screen. (clumens) +- Add a method to determine whether a device is a CCISS RAID device. + (clumens) +- Move identifyMultipaths from DeviceTree to devicelibs. (clumens) +- Add a method to return a device's WWID. (clumens) +- Add a method to get the bus/interconnect from udev and store it on + devices. (clumens) +- Add a vendor getting udev method, though udev doesn't always know it. + (clumens) +- Add the serial number to all DiskDevices and subclasses. (clumens) +- Put less space between rows and allow text to be longer before wrapping. + (clumens) +- Allow InstallInterfaces to modify the installation steps. (clumens) +- Default /boot to 500 MB. (clumens) +- Some iscsi cleanups (hdegoede) +- Bring auto discovered drives online before parsing the ks file (hdegoede) +- Make a better effort at tearing down everything before action processing. + (dlehman) +- Tighten restrictions on the type of disklabel on x86 and EFI boot disks. + (dlehman) +- Use string instead of parted.diskType for disklabel types. (dlehman) +- A couple of cleanups to warnings about formatting preexisting devices. + (dlehman) +- Rework udev_settle timeout handling (#544177) (hdegoede) +- Remove smp.c from the Makefile.am, too. (clumens) +- Nothing has a kernel-smp anymore so none of this code is useful. (clumens) +- Get rid of the goofy nested try statements. (clumens) +- update reIPL messages (hamzy) +- Change btrfs command line option (josef) + +* Wed Dec 09 2009 Chris Lumens - 13.10-1 +- Kickstart support for unpartitioned disks. (dlehman) +- Skip disklabel handling for biosraid and multipath members. (dlehman) +- Improve disklabel's name attr so we don't have to hide them anymore. + (dlehman) +- Hide devices with certain formatting in the main partitioning UI. (dlehman) +- Automatic partitioning support for whole-disk formatting. (dlehman) +- Add support for whole-disk formatting. (dlehman) +- Add per-row control over sensitive property for CheckList and + WideCheckList. (dlehman) +- Use a function to add a device to the partition gui. (dlehman) +- Don't crash if there's no intf passed to getLUKSPassphrase. (dlehman) +- Remove unused selinux file context functions from isys. (dlehman) +- Use selinux python module for file context operations. (dlehman) +- Obtain device alignment information from parted. (#529051) (dlehman) +- Handle roots with or without trailing "/" in FileDevice.path. (#541473) + (dlehman) +- sundries.h is no longer used. (clumens) +- Kill yet another unused lodaer flag. (clumens) +- stage1 (init): Make /tmp tmpfs large enough to hold install.img (#540146) + (hdegoede) +- With flags.setupFilesystems gone, justConfig can be removed from booty. + (clumens) +- Nothing sets flags.setupFilesystems anymore, so it can go too. (clumens) +- Remove test mode from the loader, too. (clumens) +- Complain if we're started in test or rootPath mode instead of aborting. + (clumens) +- Remove test mode. (clumens) +- Remove rootPath mode. (clumens) +- Enable method/repo nfs options in stage2. (rvykydal) +- Accept "nfs:" prefix in ks repo --baseurl setting beside "nfs://". + (rvykydal) +- Display url having invalid prefix in repo editing dialog. (rvykydal) +- Do not traceback on invalid ks repo --baseurl values (#543003) (rvykydal) +- Remove /etc/localtime before trying to copy into it (#533240). (akozumpl) +- Whenever storage code tries to log a method call, do so into the + 'tmp/storage.log' file. (a part of #524980) (akozumpl) +- Make loader log time with milliseconds (part of #524980). (akozumpl) +- Log storage in the same format as the main anaconda log (a part of + #524980) (akozumpl) + +* Tue Dec 01 2009 Chris Lumens - 13.9-1 +- Improve text mode fcoe interface (hdegoede) +- Fix udev rule to test whether we're in anaconda. (dlehman) +- Fix devicelibs.dm.device_is_multipath support for new udev rules. (pjones) +- Display progress or wait window when creating devices. (dlehman) +- Display progress or wait window when formatting devices. (dlehman) +- Add optional progress windows to devicelibs create functions. (dlehman) +- Force mkswap to do its job. (dlehman) +- Don't try to get dm node or update sysfs path for lvm vgs. (dlehman) +- Log upon leaving installer steps as well as entering (a part of #524980). + (akozumpl) +- An unitialized variable in iw/partition_gui.py and a typo in kickstart.py + (akozumpl) +- Add DCB option to text mode FCoE setup (#513011) (hdegoede) +- Add DCB option to GUI FCoE setup (#513011) (hdegoede) +- Add DCB option to kickstart FCoE code (#513011) (hdegoede) +- Add support for DCB to fcoe.py (#513011) (hdegoede) +- Include fcoemon and dcbd in install.img for FCoE DCB support (#513011) + (hdegoede) +- Add RAID4 support (#541433) (oliva) +- Clear a partition's BOOT flag when formatting it (hdegoede) +- Do not set boot flag when there is already a partition with the flag + (#533658) (hdegoede) +- Fixes a syntax error in commit b495db2cd56c881a7e661ac55bd31069510cf662. + (akozumpl) +- If /boot is too small to preupgrade, don't allow going back (#499321). + (clumens) +- One reference to earlyKS somehow survived. Kill it. (clumens) +- Quote backticks when writing out the .bash_history file, and add another + cmd. (clumens) +- Set the default keyboard based on language before showing the UI + (#532843). (clumens) +- Don't attempt to get the size of a filesystem unless it's supported + (#540598). (clumens) +- Require /boot to be on a GPT or MSDOS disk label on x86 (#540588). + (clumens) +- Fix killall -USR2 anaconda writing out a traceback file. (clumens) +- Only check for DEVICE_DASD in S390.diskLabelType, not for all platforms. + (clumens) +- Use installclass to make the bootloader timeout 5 seconds on RHEL. (pjones) +- Make sure we get tcp_wrappers-libs installed for stage 2 (pjones) +- Mount usbfs before installing packages (#532397) (mmatsuya) +- Use fs with largest amount of freespace to store install.img (hdegoede) +- Always update booty drivelist before filling bootstore (#533335) (hdegoede) +- Enhance drive specification for clearpart, ignoredisk, and partition. + (clumens) +- Add a function that determines which devices match a given shell glob. + (clumens) +- Extend udev_resolve_devspec to allow specifying devices in more ways. + (clumens) +- Name log files something that doesn't conflict with the system (#539542). + (clumens) +- Adds interactive install support for NFS options (#537764) (akozumpl) +- Introduces check_asprintf macro that checks asprintfs return value and + terminates program in OOM scenarios. (akozumpl) +- Sleep if the kickstart file read fails (#537361) (akozumpl) +- Move libcurl initialization to urlinstTransfer() (#537870). (dcantrell) +- Replace all popt use with glib's option parsing code. (dcantrell) +- Clean up initProductInfo() in loader.c. (dcantrell) +- Use glib string parsing functions in driverselect.c. (dcantrell) +- If a package has %%pre/%%post scriptlet errors, abort the install + (#531599). (clumens) +- If a package has a dependency problem, offer to continue/abort (#511801). + (clumens) +- Generate more complete device.map grub file when upgrading grub. (#533621) + (rvykydal) +- Added the libudev python bindings (mgracik) +- If the kickstart log file's path doesn't exist, make it. (clumens) +- Don't make chown or lsetfilecon errors fatal (#529940). (clumens) +- Get correct boot device in reIPL code for s390 (#537390). (hamzy) +- Expand the proxy table a little bit to reduce clutter (#537878). (clumens) +- Use glib data structures in loader's module handling code. (dcantrell) +- Various improvements to kickstart scriptlet reporting (#510636). (clumens) + +* Thu Nov 12 2009 David Cantrell - 13.8-1 +- Ignore merge commit messages when generating the rpm changelog. (dcantrell) +- Remove last references to hal. (dcantrell) +- Log calls to DiskLabel's commit and commitToDisk methods. (dlehman) +- Fix DiskLabel.status so it returns True, not self.partedDisk, when active. + (dlehman) +- Write /etc/dasd.conf to target system on s390 (#533833). (dcantrell) +- Latest dracut has new syntax for rd_DASD. (dcantrell) +- Handle case of not enough space in VG more gracefully. (#533797) (dlehman) +- Make sure partitioning-related drive lists are sorted properly. (#534065) + (dlehman) +- Remove the early kickstart processing pass (#532453). (clumens) +- Move all the important stuff out of the KickstartCommand.parse methods. + (clumens) +- These changes require a later version of pykickstart. (clumens) +- commandMap and dataMap are now updates to the existing dict. (clumens) +- Set a reference to the kickstart handler on BaseData objects. (clumens) +- Move exception setup to right after instdata is populated. (clumens) +- Leave one free logical block before each logical partition. (dlehman) +- Use Chunk's geometry attr to access the parted Geometry. (dlehman) +- Fix sorting of requests by mountpoint. It was backwards. (dlehman) +- Align logical partitions' start sector up one logical block for metadata. + (dlehman) +- Use parted.Device's sectorSize attr instead of physicalSectorSize. + (dlehman) +- Select partition layout based on potential for growth. (dlehman) +- Reimplement partition growing. (dlehman) +- Create and use a function to obtain a parted alignment for a disk. + (dlehman) +- Create and use a new function to create and add new partitions to disk. + (dlehman) +- Make and use a new function to remove non-existent partitions. (dlehman) +- Disable parted's cylinder alignment code. (dlehman) +- Use new functions for conversion between size and sector count. (dlehman) +- Consider whether a partition is growable when choosing free space. + (dlehman) +- Allocate fixed-size requests before growable requests. (dlehman) +- For the catch-all case, put the message into the UI, not the exn + (#536854). (clumens) +- Add a missing binary to KEEPFILES (#533237) (msivak) +- Set boot flag for /boot on mdraid 1 array too (#533533). (rvykydal) +- Report no media present for cpqarray controllers with no disks attached + (hdegoede) +- Honor existing RUNKS conf file variable on s390 (#513951). (dcantrell) +- Add "Hipersockets" to qeth NETTYPE description (#511962). (dcantrell) +- Set custom_icon to error for advanced storage dialog errors (hdegoede) +- When creating a new md array check we have enough members (#533027) + (hdegoede) +- Convert string.find calls into something modern (jkeating) +- rescue: Don't copy install.ing to /tmp when not enough RAM (#531304, + #529392) (jvonau) +- isys: remove stray debug printf (#533597) (hdegoede) +- Don't activate / de-activate dmraid sets on setup / teardown (hdegoede) +- Remove previous mdadm bug 523334 workaorund (hdegoede) +- Don't stop mdraid containers or their arrays (#532971) (hdegoede) +- Include the command line to put anaconda into debugger mode in history. + (pjones) +- Allow remote(ish) debugging. (pjones) +- Make sure /var/log/lastlog is there so we don't have ugly logs. (pjones) +- Correct modopts initialization in loader (take 2) (#531932). (dcantrell) +- Get rid of dead code, and fix gettimespecofday's math. (pjones) +- Don't exec without forking first when calling udevadm. (pjones) +- If init or loader exit unexpectedly, traceback. (pjones) +- Fix the vim magic in this file to work. (pjones) +- Add handling for sshpw command. (pjones) +- Improve createLuserConf behavior and chroot behavior in users.* (pjones) +- Improve logging of ssh-keygen. (pjones) +- Remove tabs in "anaconda" (pjones) +- pidof is a symlink to killall5, so we need that as well. (pjones) +- Correctly initialize modopts in loader (#531932). (dcantrell) +- Increase the size of /boot a little bit (#530555). (clumens) +- Modify autopart requests to include a separate /home (#150670). (clumens) +- Take the spec's requiredSpace into account when creating LVs. (clumens) +- Add the PartSpec.__str__ method for debugging. (clumens) +- Trim the inital / off the mountpoint before making an LV name from it. + (clumens) +- Remove "anaconda" from attributes to skip (#532612, #532737). (clumens) +- Fix status for and consolidate handling of '-' in vg/lv names. (#527302) + (dlehman) +- Rename "setupShellEnvironment" to "setupSshd". That's all it does. + (pjones) +- Put "killall -USR2 anaconda" in a pre-populated history. (pjones) +- Only try to split proxy commands out if there's actually one specified. + (pjones) +- Consolidate the parsing of nfs: locations for ks= and stage2= (#529197) + (stijn) +- Copy cio_ignore kernel parameter to zipl.conf on s390 (#475675). + (dcantrell) +- Do not modify /etc/hosts from setup package (#530343). (dcantrell) +- In execWithCallback(), support disabling stdout echo (#528386) (dcantrell) +- Select drives in partition dialog, preserving settings. (#529931) (dlehman) +- Clear pot and po updates after a 'make release' or 'make archive'. + (dcantrell) +- Use the new anaconda image in fedora-logos (#529267). (jkeating) +- Call udev_trigger with a "change" action and don't filter out dm devices. + (dlehman) +- Remove unused attr_nomatch keyword argument from baseudev.udev_trigger. + (dlehman) +- Fix logging of isys mount/umount into program.log. (rvykydal) +- Fix "resize failed: 1" errors for ext2/ext3/ext4 (#517491). (dcantrell) +- Log why we're exiting the installer in storage.DASD.startup() (dcantrell) +- Improve detailedMessageWindow() in text.py. (dcantrell) +- Use 'zerombr' kickstart command for DASDs needing dasdfmt (#528386). + (dcantrell) +- Add 'zerombr' to list of early kickstart commands we look for. (dcantrell) + +* Thu Oct 29 2009 Chris Lumens - 13.7-1 +- TypeError: '_ped.DiskType' object is not callable (#531730) (hdegoede) +- Fix upgrade of GRUB with md raid boot for versions F11 and earlier. + (rvykydal) +- Remove another code duplication in grub upgrade code. (rvykydal) +- Remove code duplication, use fixed code from writeGrub. (rvykydal) +- Remove target parameter from grub installation code - it is no more + needed. (rvykydal) +- Remove support for IUCV networking devices on s390. (#531494) (dcantrell) +- Find and format any unformatted DASD devices (#528386). (dcantrell) +- Improve detailedMessageWindow() in text.py. (dcantrell) +- Create execWithCallback() function in iutil. (dcantrell) +- preexist -> onPart (#531407). (clumens) +- Add sshd support for non-s390 platforms. (pjones) +- When doing initlabel on a dasd disk create a dasd disklabel (#531209) + (hdegoede) +- Rename platform.diskType to platform.diskLabelType (hdegoede) +- Fix arrow key cycling in the Edit Partition dialog (#519641). (clumens) +- Provide a single checkbox for a minimal install (#523839). (clumens) +- Fix DASD and zFCP device discovery (#530287). (dcantrell) +- Clarify the shrink target message (#530789). (clumens) +- Re-enable running udevadm. (clumens) +- max_logical -> max_logicals (#530786). (clumens) +- Filter out device-mapper devices when doing a udev_trigger. (dlehman) +- Expand udev_trigger to allow attr filtering and action specification. + (dlehman) +- More udev fixups for device-mapper and cryptsetup temp devices. (#526699) + (dlehman) +- Add the bcm5974 kernel module needed for some touchpads (#474225). + (clumens) +- /boot is already being checked by the superclass, so don't check again. + (clumens) +- Allow /boot to be on a variety of filesystems during kickstart (#529846). + (clumens) +- Platform.bootloaderPackage -> Platform.packages (clumens) +- Bootloader choice strings were marked with N_, but never translated + (#530017). (clumens) +- Handle more than x.y version numbers in 'make bumpver'. (dcantrell) +- Mark live device as protected instead of ignoring it. (#517260) (dlehman) +- Don't force logical with a free primary slot and an extended. (#527952) + (dlehman) +- Use rpm to determine how to set bootloader args and default runlevel + (#527520). (clumens) +- Improve message given to user for fsck failures (#527626). (dcantrell) +- 'Packages completed' string should use P_() instead of N_(). (dcantrell) +- Reintegrate reipl to trigger reboot/halt on s390x correctly. (#528380) + (maier) +- Put the icon back on the Back button on livecd installs (#526925). + (clumens) +- Make LOADER_FLAGS_NOSHELL default also for s390x not just s390 (#527063) + (maier) +- Adapt standalone shutdown to nokill changes so s390x can use it. (#528380) + (maier) +- Add dracutSetupData() method to DASDDevice (#526354). (dcantrell) +- Collect DASD kernel parameter information during device tree scan + (#526354). (dcantrell) +- Add dracutSetupString() method to ZFCPDiskDevice (#526354). (dcantrell) +- Write LAYER2 and PORTNO correctly as parts of OPTIONS to ifcfg for s390x + (maier) +- Don't set unnecessary multipath defaults. (pjones) +- Add a "File Bug" button to all possibilitys in turnOnFilesystems + (#528006). (clumens) +- For cmdline mode, add the long text to what messageWindow will print + (#528006). (clumens) +- Use /dev/mapper/live-osimg-min instead of the old device node name + (#526789). (clumens) +- Remove double slash from nfs:// ks repo value for use in UI. (rvykydal) +- Make bootLoaderInfo new-style class, so that its properties work + correctly. (rvykydal) +- liveinst: deactivate mdraid arrays before running liveinst (#528235) + (hdegoede) +- Set parted filesystemtype for swap partitions (hdegoede) + +* Tue Oct 13 2009 David Cantrell - 13.6-1 +- BR system-config-keyboard (dcantrell) + +* Tue Oct 13 2009 David Cantrell - 13.5-1 +- Remove extra echo in 'make rpmlog'. (dcantrell) +- Do not traceback if network device doesn't have HwAddress property + (#506013). (rvykydal) +- Fix liveinst to (1) not unmount /dev/pts, (2) unmount in order (509632). + (clumens) +- Do not read DASD data from /tmp/install.cfg in booty (#526354). (dcantrell) +- Merge branch 'master' of ssh://git.fedoraproject.org/git/anaconda (notting) +- Support upgrading when the language isn't in lang-table (#528317). + (clumens) +- Fix task selection when tasks contain the same group. (#528193) (notting) +- Update drivelist with bootloader --driveorder ks option instead of + replacing it (#506073). (rvykydal) +- Use ID_SERIAL to write multipath.conf, but ID_SERIAL_SHORT for UI. (pjones) +- Don't run 70-anaconda.rules on an installed system (#527781). (clumens) +- Handle Installation Repo (base repo) as any other in repo edit UI. + (rvykydal) +- Fix methodstr editing dialog. (rvykydal) +- Store methodstr url of repo (#502208, #526022). (rvykydal) +- Show user of which repository he edits the url (methodstr editing). + (rvykydal) +- Don't traceback with malformed repo= nfs: parameter. (rvykydal) + +* Mon Oct 12 2009 David Cantrell - 13.4-1 +- Missing volume_key shouldn't break LUKS support completely. (#526899) + (dlehman) +- Write multipathd.conf in anaconda so that dracut can find it. (pjones) +- We moved from dialog to newt.. (#528497) (msivak) +- Fix a segfault when stage2= boot parameter and kickstart url method is + used (#524417). (rvykydal) +- Fix parsing of optional portnr in iscsi target IP (#525118) (hdegoede) + +* Fri Oct 09 2009 David Cantrell - 13.3-1 +- Reset PartitionDevice attributes after failed edit. (#498026) (dlehman) +- Add MultipathDevice.getDMNode(), because .updateSysfsPath() needs it. + (pjones) +- Add MultipathDevice.updateSysfsPath() (pjones) +- Run implantisomd5 on boot.iso on x86. (bz#526902) (pjones) +- Consider encryption when checking for duplicate mountpoint. (#526697) + (dlehman) +- Fix grub stage1 installation for /boot on md raid1. (rvykydal) +- Do not show the VNC-over-text question, when there is not enough memory + for GUI (#527979) (msivak) +- Fix filtering out of 'Sending translation for' log messages in bumpver. + (rvykydal) +- Use addUdevPartitionDevice() for adding dmraid / multipath partitions + (#527785) (hdegoede) +- Set partedPartition system to the correct FS when creating an FS (hdegoede) +- Reset parted flags in createFormat not destroyFormat (hdegoede) +- Default to mbr bootloader target for mdraid 1 boot device too (#526822). + (rvykydal) +- Clear out state before calling XkbGetState. (clumens) + +* Thu Oct 08 2009 Radek Vykydal - 13.2-1 +- Override fstabSpec in PartitionDevice for by-path DASD (#526364). (dcantrell) +- Create DASDDevice objects for DASD devices when building devicetree. + (dcantrell) +- Add udev_device_is_dasd() to detect DASD devices. (dcantrell) +- Change existing call to deviceNameToDiskByPath(). (dcantrell) +- Make storage.devices.deviceNameToDiskByPath() more robust. (dcantrell) +- Do not copy over 70-persistent.rules if instPath is '' (#527707) (dcantrell) +- Filter out 'Sending translation for' log messages in bumpver. (dcantrell) +- Don't copy _raidSet, but merely pass around a reference (hdegoede) +- Action...Format setup device before modifying the partition table (hdegoede) +- map() -> filter() in storage.writeEscrowPackets() (dcantrell) +- lokkit has moved to a subpackage, so require that (#523709). (clumens) +- Stop trying to run xrandr (#527678). (clumens) +- Only initialize escrow packet code if there's devices that need it (#527668). + (clumens) +- On lookup of a PartedDevice also check for _ped.DeviceException (#527699) + (hdegoede) +- Set related ayum attributes if media is found when editing methodstr + (#515441). (rvykydal) +- In repo editing UI do not use object we are creating (#515441). (rvykydal) + +* Tue Oct 06 2009 David Cantrell - 13.1-1 +- Tell udev to ignore temporary cryptsetup devices. (#526699) (dlehman) +- Have redhat.exec reference generic.prm, not redhat.parm (dcantrell) +- Bring back cio_ignore=all, !0.0.0009 for generic.prm on s390x (#463544) + (dcantrell) +- Take 70-persistent-net.rules generated at installation (#526322) + (dcantrell) +- Use $LIBDIR to find the boot-wrapper file. (jkeating) +- formatByDefault: Don't traceback when mountpoint is None (#522609) + (hdegoede) +- Don't warn /usr should be formatted when "Format as:" is already selected + (hdegoede) +- Bring up network interface before trying to use it for FCoE (hdegoede) +- DMRaidArray: Don't report no media present when in teared down state + (hdegoede) +- Wait for udev to settle before trying to find dmraid sets in udev DB + (hdegoede) +- Implement the double click for free space on the bar view (jgranado) +- Pass only cCB and dcCB to the StripeGraph classes. (jgranado) +- React to a double click on a "free row" in the tree view. (jgranado) +- Create getCurrentDeviceParent function. (jgranado) +- Make sure we don't exceed the 80 character threshold (jgranado) +- Display an LVM graph on the bar view when we click on the VG's free space + (jgranado) +- Add a free row in the LVM tree view when necessary. (jgranado) +- Reorganize the tree view related to lvm. (jgranado) +- Remove unneeded variable (jgranado) + +* Mon Oct 05 2009 David Cantrell - 13.0-1 +- Remove an errant popd. Probably cut/paste error. (jkeating) +- Only add the .img file to .treeinfo if it exists. (jkeating) +- Make the netboot dir before trying to use it (jkeating) +- Only write network --netmask if one has been defined (#527083). (clumens) +- Add --label to anaconda-ks.cfg if needed (#526223). (clumens) +- Fix existing size calculation for NTFS (#520627) (dcantrell) +- Write label to filesystem if we have one set (#526226, #526242) (dcantrell) +- Add wget to the initrd, which is required for rhts. (clumens) +- Fix the check for no /boot request on PPC yet again (#526843). (clumens) +- Surround the stage2= parameter in quotes for RHEL (#526863). (clumens) +- Correct makeupdates script to work with deleted files. (jgranado) +- Stop dragging mkinitrd into the install (hdegoede) +- Add --keyword=P_ to xgettext command arguments. (dcantrell) +- Use named parameters for translatable strings with multiple params. + (dcantrell) +- Change 'support' to 'supported' in UnknownSwapError dialog (#526549) + (dcantrell) +- Force interface up before checking link status (#525071). (dcantrell) +- Only ignore partitions <1MB that are freespace. (#526445) (dlehman) +- Try to include error messages in lvm/mdadm exceptions. (dlehman) +- Add the create LV option. (jgranado) +- Give the proper orientation to the gtk objects. (jgranado) +- Show the information message when user hits a non-bar element. (jgranado) +- Control the sensitivity of the "delete" and "create" buttons (jgranado) +- Respond to double click on a VG, LV and RAID device. (jgranado) +- Remove the "Hide RAID/LVM" checkbox. (jgranado) +- Display a message in the bar view when user has no selected items. + (jgranado) +- Cosmetic changes. (jgranado) +- The StripeGraph class does not need tree nor editCB (jgranado) +- Restrain from outputing any digits after the decimal point. (jgranado) +- Add a slice when the extended partition contains "free space" (jgranado) +- Reduce message size in clone screen. (jgranado) +- Add Slice size to the bar view (jgranado) +- Select the device in the treeview when its selected in the barview. + (jgranado) +- Make canvas a class method. (jgranado) +- Incorporate all the Graph types in the custom screen. (jgranado) +- Add the Volume Group and md RAID array Graph classes (jgranado) +- Make the Bar View Code generic. (jgranado) +- Pass the device instead of the name to the add funciton. (jgranado) +- Display the device path with a smaller font and different color. (jgranado) +- Display bar view for the selected device only. (jgranado) +- Fix indentation in editCB (jgranado) +- Organize the creation of the custom screen into sections. (jgranado) +- Use a checkmark from a PNG image instead of a string. (jgranado) +- Put the size after the device name in the storage tree. (jgranado) +- Add the warning message for an invalid create. (jgranado) +- Reorganize the Customization screen a little. (jgranado) +- Remove unneeded functions & add the about messages for LVM and RAID. + (jgranado) +- Have an intermediary screen for the "Create" action. (jgranado) +- New screen for "Create" action. (jgranado) +- New function to tell us if there is free space for a new partition. + (jgranado) +- Edit LVM LV when user has a LV selected. (jgranado) +- Don't fail to commit partitions due to active lvm/md. (dlehman) +- Create and use DiskLabelCommitError for failure to commit. (dlehman) +- Work around partition renumbering in processActions. (dlehman) +- Re-get preexisting partitions using their original path. (dlehman) +- Don't store a copy of ActionDestroyFormat's device attr. (dlehman) +- Don't retry commiting partition table to disk (hdegoede) +- Stop /lib/udev/rules.d/65-md-incremental.rules from messing with mdraid + sets (hdegoede) +- Don't try to do format handling on drives without media (#523467) + (hdegoede) +- Wait for mdraid arrays to become clean before reboot / halt (hdegoede) +- Add repo --proxy= support to kickstart. (clumens) +- Pass the proxy config information to stage2. (clumens) +- Add support for proxies to the command line. (clumens) +- Add proxy support to kickstart in the loader. (clumens) +- Add a function to split up a proxy parameter into its parts. (clumens) +- libcurl supports https in addition to http, so change our tests. (clumens) +- getHostAndPath is only used by the nfs code, so move it. (clumens) +- Add initial loader UI support for proxies (#125917, #484788, #499085). + (clumens) +- We no longer need our own FTP/HTTP protocol support code. (clumens) +- Get rid of the convertURL/UI functions, make iurlinfo just store a string. + (clumens) +- Convert urlinstall.c to using the new urlinstTransfer function. (clumens) +- Add proxy support to urlinstTransfer by setting more curl options. + (clumens) +- Add the urlinstTransfer function, which replaces urlinst*Transfer. + (clumens) +- Add a function to construct an array of HTTP headers and cache the result. + (clumens) +- Add a CURL instance to the loader data. (clumens) +- Add checks for libcurl into the makefile process. (clumens) +- Add the packages needed to support libcurl. (clumens) + +* Tue Sep 29 2009 David Cantrell - 12.32-1 +- Improve loader messages in parseCmdLineFlags when passing vnc (#526350). + (maier) +- Update po/anaconda.pot during a 'bumpver' run. (dcantrell) +- Add 'make release' as a synonym for 'make archive'. (dcantrell) +- Whitespace cleanup in loader/net.c. (dcantrell) +- Clean up getHostandPath() debugging messages for host & file. (dcantrell) +- Need an extra on the PS1 line in /.profile (dcantrell) +- Korean font package name changed (#525597) (dcantrell) +- We can't prompt for new network info in cmdline mode (#526262). (clumens) +- yaboot supports /boot on ext4 (#526219). (clumens) +- bootloader --append= should append, not set the args list (#524004). + (clumens) +- Don't check if /boot is under the 4MB mark on i/p Series (#526200). + (clumens) +- "minimal" has been renamed to "core" (#526191). (clumens) +- Remove some unused isys methods. (clumens) +- Make sure the disk holding /boot is setup before setting boot flag + (#526063) (hdegoede) +- Use temporary repo id for edited object to prevent Duplicate Repo error + (#524599). (rvykydal) +- Do not delete repo twice or when it had not been added actually (#524599). + (rvykydal) +- Disable repo before deleting it (#524599). (rvykydal) +- Log more, repo editing UI. (rvykydal) +- Make _enableRepo a little more readable. (rvykydal) + +* Fri Sep 25 2009 David Cantrell - 12.31-1 +- Move S390MODS to inside makeBootImages(), remove libiscsi_tcp. (dcantrell) +- Require the latest and greatest python-meh. (clumens) +- Add a stub enableNetwork method for cmdline mode (#525779). (clumens) +- Adapt to python-meh passing a bug description around. (clumens) +- Return None for next part type if all primary slots full. (#524859) + (dlehman) +- Make sure the Minimal group is selected by default on RHEL installs + (#524561). (clumens) + +* Thu Sep 24 2009 Chris Lumens - 12.30-1 +- Simplify s390x module list generation. (dcantrell) +- Read cmsfs* commands from $IMGPATH/usr/sbin in mk-images (dcantrell) +- Use correct kernel-bootwrapper on ppc64. (dcantrell) +- Anaconda no longer requires hal. (notting) + +* Tue Sep 22 2009 David Cantrell - 12.29-1 +- Updated po/anaconda.pot (dcantrell) +- Remove ui/instkey.glade.h from po/POTFILES.in (dcantrell) + +* Tue Sep 22 2009 David Cantrell - 12.28-1 +- Preserve whitespace in $CDLABEL in mk-images.x86 (dcantrell) +- Modify rhel.py installclass for current RHEL development efforts. + (dcantrell) +- Add --brand switch support to buildinstall script. (dcantrell) +- Remove the installation number screen. (clumens) +- Remove kickstart-docs.txt, since it comes with pykickstart (#515168). + (clumens) +- ybin, mkofboot, and ofpath moved from /usr/sbin to /sbin (#524608). + (clumens) +- Honor ignoredisk --only-use. (#514353) (dlehman) +- Make sure user-selected mountpoint is not already in use. (#524584) + (dlehman) +- Do not raise UI dialog in stage2 if network is set in ks (#487503). + (rvykydal) +- Use whiptail instead of dialog in rescue mode, supports serial line better + and looks nicer (msivak) + +* Mon Sep 21 2009 David Cantrell - 12.27-1 +- Require at least system-config-keyboard 1.3.1 or higher. (dcantrell) +- Fixes for rhel installclass. (dcantrell) +- Start with all modules from kernel/drivers/s390 on s390x (#524566) + (dcantrell) +- Do not require dhcpv6-client, package is now obsolete. (dcantrell) +- Take into account snapshots and mirrored volumes in lvm dialogs. (dlehman) +- Add handling for snapshot and mirrored logical volumes to DeviceTree. + (dlehman) +- Add attrs to LVMLogicalVolumeDevice class for snapshots and mirrored lvs. + (dlehman) +- Add function lvorigin to determine the name of a snapshot's origin lv. + (dlehman) +- Add function udev_device_get_lv_attr to retrieve lv attribute strings. + (dlehman) +- Include hidden volumes and lv attributes in udev db. (dlehman) +- Add 'install' user to start anaconda on s390x. (dcantrell) +- Set a default shell prompt for s390x installs. (dcantrell) +- Do not assume we found a module in addOption() in loader/modules.c + (dcantrell) +- Do not try to load floppy, edd, pcspkr, or iscsi_ibft on s390x. (dcantrell) +- Handle Esc keypress in (some more) dialogs as Cancel - (#520110). + (rvykydal) +- All the nss libraries have moved from /lib to /usr/lib (#524410). (clumens) +- Add python-nss as a requirement (#524307, #524313). (clumens) +- Call $LDSO --verify for the binary file -inside- the chroot. This fixes + building x86 boot images on a x86_64 host system. (thomas.jarosch) +- Just grab everything in a /usr/share/fonts/lohit* directory (#523906). + (clumens) +- Don't write an empty mdadm.conf (hdegoede) +- Write mdraid arrays to mdadm.conf in sorted order (hdegoede) +- containers and their sets must only have a UUID= parameter in mdamd.conf + (hdegoede) +- Updated anaconda.pot file. (dcantrell) + +* Thu Sep 17 2009 David Cantrell - 12.26-1 +- NetworkManagerSystemSettings.service no longer exists. (jkeating) +- udevsettle is no longer used (udevadm settle is called instead) so don't + put it in images. (jkeating) +- nm-system-settings is no longer shipped. (jkeating) +- Port from PolicyKit to polkit (jkeating) +- Keep po/anaconda.pot in the source tree (#522072) (dcantrell) +- Do not show Unknown as filesystem type for free space. (dcantrell) +- Catch failures from write(2) in utils/snarffont.c (dcantrell) +- Don't leak fds (#520154) (jgranado) +- Initialize the opts variable. (jgranado) +- Add the help messages for the new options of makeupdates script. (jgranado) +- Revert "The Madan font should no longer be used (apparently). (#523906)." + (clumens) +- Fix going back from hd install UI when stage2 is given as boot param + (#519206). (rvykydal) +- The Madan font should no longer be used (apparently). (#523906). (clumens) +- Update the pykickstart requirement to reflect the escrow stuff. (clumens) +- add requires for sparc arches on elftoaout and piggyback we need them to + make the tftp image (dennis) +- copy the sparc boot loader on all sparc arches (dennis) +- make sure we include sparc boot loaders on all sparc arches (dennis) +- make sure we get the sparc64 kernel on sparc (dennis) +- Check whatever contains /boot on PPC as well as the bootable part + (#523747). (clumens) +- make a call to rpmutils to get the basearch works on all arches that dont + have anaconda built on the basearch (dennis) +- s-c-keyboard is now provided on all architectures (#523445). (clumens) + +* Tue Sep 15 2009 David Cantrell - 12.25-1 +- Use pyblock for device-mapper devices' status. (dlehman) +- load_policy has moved from /usr/sbin to /sbin (#523506). (clumens) +- Collect all modules from modules.{ccwmap|networking} on s390x (#522519) + (dcantrell) +- Copy cmsfscat from /usr/sbin, not /usr/bin. (dcantrell) +- Remove duplicate search_cu() in linuxrc.s390 (dcantrell) +- Try harder to stop mdraid arrays (hdegoede) +- Log when we are skipping disks without media (hdegoede) +- Don't scan stopped md devices (hdegoede) +- Make udev_get_block_device() return None on failure (hdegoede) +- Do not pass --update=super-minor to mdadm for containers and sets there in + (hdegoede) +- Write mdadm.conf lines for mdraid container formats (imsm) (hdegoede) +- Really put appended kernel cmdline arguments at the end (hdegoede) +- Install dracut-network when using network storage (hdegoede) +- Make recreateInitrd() generate a dracut initrd (hdegoede) +- Use type of device rather than name in booty target selection. (hdegoede) +- write netroot=fcoe:... to kernel cmdline in grub.conf for dracut (hdegoede) +- write ifname=eth#:MAC to kernel cmdline in grub.conf for dracut (hdegoede) +- write iscsi initiator name to kernel cmdline in grub.conf for dracut + (hdegoede) +- Make iswmd the default (hdegoede) +- Use new icons in anaconda so we don't look so dated (#515601). (clumens) +- Prevent infinite loop in doClearPartitionedDevice. (dlehman) +- Rename doDeleteDependentDevices to doClearPartitionedDevice for clarity. + (dlehman) +- Handle Esc keypress in dialogs as Cancel (#520110). (rvykydal) +- Don't use baseurl containing space in yum repo object (#516042). (rvykydal) +- Add escrow support (mitr) +- Add python-{nss,volume_key} to stage2, volume_key to rescue (mitr) +- Update for pykickstart with escrow support (mitr) +- Fix --encrypted when creating volumes in kickstart (mitr) +- Remove the "Remove dmraid Device" button, which isn't even hooked up. + (clumens) +- Require the right version of system-config-date (#523107). (clumens) +- Fix setting of "Add repository" dialog title. (rvykydal) +- Update state and name of repository in list after editing. (rvykydal) +- Fix busy cursor in repo editing (#518529) (rvykydal) +- Fix busy cursor stack popping when creating formats (#518529). (rvykydal) +- Remove partitions in reverse order when clearing disks. (dlehman) +- Improve the info provided to DeviceAction.__str__. (dlehman) +- Include device id in log lines since partitions can get renumbered. + (dlehman) +- Don't try to preserve old format attrs when reinitializing pvs. (dlehman) +- remove the no longer used initcb and initlabel DiskDevice.__init__ + arguments (hdegoede) + +* Thu Sep 10 2009 Chris Lumens - 12.24-1 +- dmidecode is in /usr/sbin, not /usr/bin. (clumens) +- Add cmsfscat to the initrd on s390 as well (#522535). (clumens) +- Fix the gawk/awk symlink mess in the initrd (#522535). (clumens) +- No longer use /usr/bin/env (#521337). (clumens) +- It's controlunits, not controlunits.sh. (clumens) +- Get DMRaidArrayDevice's a DiskLabel format when they are added to the tree + (hdegoede) +- Fix askmethod + stage2= (#516973, #519288, #518194) (rvykydal) + +* Wed Sep 09 2009 David Cantrell - 12.23-1 +- initrd-generic.img -> initramfs.img (hdegoede) + +* Wed Sep 09 2009 David Cantrell - 12.22-1 +- No longer require xfsdump, since anaconda doesn't use it anywhere + (#522180). (clumens) +- The zonetab module has moved (#521986). (clumens) +- No longer copy over the CD/DVD repodata or repo config file (#521358). + (clumens) +- language dracut kernel cmdline should be space seperated (#521113) + (hdegoede) + +* Mon Sep 07 2009 David Cantrell - 12.21-1 +- Require python-meh (#521661) (dcantrell) +- Handle UnknownSwapError when turning on existing swap volumes. (dcantrell) +- Check for a valid interface in swapErrorDialog, exit without one. + (dcantrell) +- On SuspendError, allow users to skip/format/exit like OldSwapError. + (dcantrell) +- Raise exception if detected swap volumes are not Linux v1 swap space. + (dcantrell) +- Handle OldSwapError (#510817) (dcantrell) +- Support a force=True argument on SwapSpace.create() (dcantrell) +- Skip all Makefiles and the liveinst subdirectory in 'make updates' + (dcantrell) +- Make anaconda know its version number (#520061) (dcantrell) +- Add top back to the stage2 image. (clumens) +- Do not put device node path, but the fs UUID in fstab for mdraid: + (#519337) (hdegoede) +- Expose common fsset methods and properties in class Storage. (dcantrell) +- Don't display the warning about not enough memory on a VNC install + (#521109). (clumens) +- The vtoc.h header has moved from the kernel to s390utils (karsten, + #520830). (clumens) + +* Wed Sep 02 2009 David Cantrell - 12.20-1 +- Rename mostlyclean-glade to mostlyclean-liveinst. (dcantrell) +- Handle rootPath referencing a chroot value or actual path (#519665) + (dcantrell) +- We convert cmdline args to longs in several places, so reduce to a + function. (clumens) +- Support rootpath overrides in fsset.rootDevice (#519665) (dcantrell) +- Pass anaconda.rootPath to FSSet() (dcantrell) +- Include ui, liveinst, and lang-table strings in po updates (#515411) + (dcantrell) +- Add some silent make support for sed, mkctype, and other commands. + (dcantrell) +- Recheck if a partition should be ignored after getting its disk (#518971) + (hdegoede) +- Fix traceback when editing a pre-existing logical volume (hdegoede) +- Do not traceback on an usb cardreader with no card present (hdegoede) +- Don't identify multi lun usb card readers as multipath (#517603) (hdegoede) +- Device class does not have a format member (hdegoede) +- Device class does not have a path member (hdegoede) +- Simplify language.py to two basic settings, and a lot of support + (#517569). (clumens) +- clobber is a method of PartedDevice not PartedDisk (hdegoede) +- Remove unused fsFromConfig method (hdegoede) +- allocatePartitions: PartitionCount is a member of PartedDisk not + DiskDevice (hdegoede) +- New version. (clumens) +- Fix storage/__init__.py:1857: non-keyword arg after keyword arg (hdegoede) +- Remove a bunch of unnecessary semicolons (hdegoede) +- pylint does not like ) +- Fix 55:udev_resolve_devspec: Using possibly undefined loop variable 'dev' + (hdegoede) +- MDRaidArrayDevice.totalDevices is a read only property so don't write it + (hdegoede) +- storage/__init__.py:471:Storage.exceptionDisks: Undefined variable 'udev' + (hdegoede) + +* Tue Sep 01 2009 Chris Lumens - 12.19-1 +- NetworkManager changed *again*, use libnm-glib.pc now. (dcantrell) +- Save duplicates from /etc/fstab and don't traceback (#517498). (clumens) +- Update fstab header to reference blkid instead of vol_id. (dlehman) +- Sort fstab entries by mountpoint. (#498354) (dlehman) +- Don't hardcode path to tune2fs. (dlehman) + +* Fri Aug 28 2009 David Cantrell - 12.18-1 +- Append s390x packages to PACKAGES list, exclude /sbin/qetharp-2.4 + (dcantrell) +- On kickstart installs, you can't select a different parttype + (#519137, #520058). (clumens) +- Don't try to create a primary partition if all slots are taken. (#519784) + (dlehman) +- Fix handling of locked preexisting LUKS devices. (#502310) (dlehman) +- Fix up handling of preexisting partitions. (dlehman) +- Pick up mountpoint set for protected partitions. (#498591) (dlehman) +- Ignore partitions belonging to disks we've reinitialized. (dlehman) +- Handle newly initialized disklabels whether via ks or prompt. (#519235) + (dlehman) +- Fix some indentation in the disklabel initialization block. (dlehman) +- Use commitToDisk() instead of commit() when only changing flags (hdegoede) +- Update PartitionDevice's partedPartition when the PartedDisks get reset + (hdegoede) +- Add --localscripts option to buildinstall. (dcantrell) +- Add missing dependencies for linuxrc.s390 and lsznet in mk-images + (dcantrell) +- Re-enable login of root user in initrd.img (dcantrell) +- Less log clutter with fixing ld64.so.1 symlink in instbin on s390x + (dcantrell) +- Fix typo in get_dso_deps() for searching /lib on s390x (dcantrell) +- Add hfsplus and netconsole kernel modules (#519756, #519785). (clumens) +- Adapt expandLangs to work with three character base lang names (#517770). + (clumens) +- Prevent resizes that would go past the end of the disk (#495520) + (dcantrell) + +* Wed Aug 26 2009 Chris Lumens - 12.17-1 +- dracut has initrd-generic- instead of initrd- (#519185) + (hdegoede) +- Do not try to commit disks changes to the os while partitions are in use + (hdegoede) +- disklabel.commit(): DeviceError -> DeviceFormatError (hdegoede) +- A "partition" having no partedPartition shouldn't be a traceback + (#519128). (clumens) +- Add some debugging code so we know what's going on for #504986 (katzj) +- Fix going back in "Inst. Method" and "Configure TCP/IP" screens in stage 1 + (#515450) (rvykydal) +- Fix going back from stage1 nfs/url setup dialog. (rvykydal) +- When bringing up network in UI, update only ifcfg file of selected device + (#507084). (rvykydal) +- Update Optional packages button via popup menu too (#515912). (rvykydal) +- Remove the firstadkit-plugin-grub from non-grub archs (msivak) +- Use the path instead of the name for the questionInitialize function. + (#517926) (jgranado) +- Only add "rhgb quiet" to boot args for non-serial installs (#506508, + #510523). (clumens) +- On rpm unpack errors, display a fatal error message (#452724). (clumens) +- Use tee thread to ensure line buffered output to screen and log file at + the same moment... (#506664) (msivak) +- Ensure libraries are copied to initrd.img for xauth (#516369) (maier) +- Import shutil for upgrades (#519011). (clumens) +- Fix focus grabbing on both the password and hostname screens. (clumens) +- x86 and EFI platforms can now have /boot on ext4. (clumens) +- Use the Platform's idea of what filesystem /boot can be on. (clumens) +- zz-liveinst.sh: Restore the #! line (ajax) +- Import _ped so it can be used for _ped.DiskLabelException. (pjones) +- Make sure LV and VG names fit within LVM limits (#517483) (dcantrell) +- Fix updates target to honor KEEP variable correctly. (dcantrell) +- Add support for the reiserfs filesystem (#504401) (dcantrell) +- Update instructions on how to generate source archive. (dcantrell) +- Use disk.description instead of trying to access parted attrs. (#518212) + (dlehman) +- Fix disk.partedDisk -> disk.format.partedDisk. (dlehman) +- Fix a stupid typo in the logging. (clumens) +- If modifying a repo fails, do not delete it (#516053). (clumens) +- If repo setup fails, also make sure to delete it from yum. (clumens) +- Allow configuring additional NFS repositories, not just the base. (clumens) +- Consolidate "base repo" setup into an extra function. (clumens) +- Allocate memory for login and password and do not meddle with host pointer + so we can correctly free it (#483818) (msivak) +- Run make in silent mode by default. (jgranado) +- Allow creation of an updates image from a tag offset. (jgranado) + +* Tue Aug 18 2009 David Cantrell - 12.16-1 +- correctly deactivate zFCP LUN on s390 (maier) +- correctly activate zFCP LUN on s390 (maier) +- prevent getting started up or shutdown again while already in such state + (maier) +- Remove unused reipl code in linuxrc.s390 (maier) +- Fix copying of shutdown to initrd.img in mk-images for s390x (#517888) + (maier) +- 64 bit sparc linux does not define __sparc64__ we need to use + "(defined(__sparc__) && defined(__arch64__))" fixes building 64 bit sparc + (dennis) +- make tftp images as small as possible. we have a 10mb hardware limitation + on there size (dennis) +- make sure we correctly make the sparc tftp image (dennis) +- make sure we have glibc.sparcv9 installed in sparc installers not + glibc.sparcv9v (dennis) +- add the sparc screen font (dennis) +- add the files for sparc boot config setup configure.ac to define IS_SPARC + (dennis) +- add mk-images.sparc script (dennis) +- add support for making sparc images (dennis) +- sparc no longer needs and special keyboard handling. it uses the standard + api's interfaces (dennis) +- setup termcap for sparc (dennis) +- Close %%packages with a %%end (#518063) (katzj) +- Call udev_settle from DiskLabel.commit to ensure it happens. (dlehman) +- Fix traceback in text mode upgrade. (#505435) (dlehman) +- Don't traceback if Delete button is hit when no device is selected. + (dlehman) +- Clean up management of extended partitions we create. (#497293) (dlehman) +- Don't use StorageDevice for partitions w/ biosraid formatting. (#504002) + (dlehman) +- Don't try to get the size of fstypes w/ no infofsProg defined. (dlehman) +- Change all disklabel manipulations to use the DiskLabel format class. + (dlehman) +- Create a DiskLabel format class for partition tables. (dlehman) +- Add support for specifying a tag to makeupdates. (dlehman) +- Include changed files from the top level in the updates. (dlehman) +- If asked, put the system SN (as given by dmidecode) into an HTTP header. + (clumens) +- Add dmidecode to the initrd. (clumens) +- Add the kssendsn parameter and corresponding flag. (clumens) +- Don't keep testing if we're doing URL_METHOD_HTTP. (clumens) +- Later pyparted will define DEVICE_DM, so change the test to use it. + (clumens) +- Use the new GTK Tooltip API (#517389). (clumens) +- Fix a typo in a kickstart error string (#517760). (clumens) +- Be sure we have a sorted list of mountpoints for live mangling (#504986) + (katzj) +- Fix askmethod to work with stage= being specified (#516973) (katzj) +- Fix ordering on device list returned from identifyMultipaths() (pjones) +- Fix typo in mpath support. (pjones) + +* Wed Aug 12 2009 David Cantrell - 12.15-1 +- Make sure we have the ca cert to handle https repo connections. (517171) + (jkeating) + +* Wed Aug 12 2009 David Cantrell - 12.14-1 +- Correctly inform the user once about obsolete parm/conf file options on + s390 (maier) +- Handle activation of DASDs in linuxrc.s390 since loader no longer works + (maier) +- make IPv4 configuration in linuxrc.s390 compatible with NM in loader + (maier) +- suggest disabled X11-forwarding for ssh login in linuxrc.s390 (maier) +- Fix an erroneous "!" in the test for doKill, and make reboot explicit. + (pjones) + +* Mon Aug 10 2009 David Cantrell - 12.13-1 +- Fix syntax error in identifyMultipaths() (dcantrell) + +* Mon Aug 10 2009 David Cantrell - 12.12-1 +- Honor network config boot params for CD-booted ks installs (#433214) + (dcantrell) +- Include ipcalc command in all initrd.img files, not just s390 (#516084) + (dcantrell) +- Don't to unmount /mnt/source unless something's mounted there (#516304). + (clumens) +- Honor nodmraid commandline option (#499733) (hdegoede) +- Don't try to multipath CD devices. (#516362) (pjones) +- booty: Do not strip the trailing p from a devicename like + mapper/isw_Vol0_tmp (hdegoede) +- booty: isw_Vol0_Stripe is not a disk isw_Vol0_Stri with an e part + (#505205) (hdegoede) + +* Fri Aug 07 2009 Chris Lumens - 12.11-1 +- upd-instroot: Inspect gtkrc for cursor theme (ajax) +- Support NFS repos in kickstart (#495620, #507093). (clumens) +- upd-instroot: xorg-x11-auth -> xorg-x11-xauth (ajax) +- Check to see if the arch string starts with ppc64. (#516144) (jgranado) +- vtActivate doesn't work on some ppc64 machines, so don't traceback + (#516206). (clumens) +- Make all sysfs path's be _without_ /sys prefix (#516168) (hdegoede) +- Do not go interactive if timezone in ks is not valid (#473647) (rvykydal) +- Fix going back from "NFS Setup" screen in stage 1 (#507064) (rvykydal) + +* Thu Aug 06 2009 David Cantrell - 12.10-1 +- Add missing 'i' in loader/loader.c for non-s390 arches. (dcantrell) + +* Thu Aug 06 2009 David Cantrell - 12.9-1 +- Avoid finding the word 'engine' in comments. (jkeating) +- Don't try to get dso deps of statically linked files. (jkeating) +- Call shutDown() correctly for s390 (karsten) +- Remove unused variable from loader/loader.c (karsten) +- Delete unpackaged files on non-livearches. (karsten) +- Do not set parted.PARTITION_BOOTABLE on s390. (root) +- Complete udev setup in linuxrc.s390 for automatic module loading (root) +- Recognize mpath devices when we see them. (pjones) +- Make DiskDevice.partedDisk a property. (pjones) +- Make questionInitializeDisk() somewhat less ugly. (pjones) +- Add a description to DiskDevice, and use it in the UI. (pjones) +- Get rid of Device.description, it is unused. (pjones) +- Close the opened file descriptors when necessary. (#499854) (jgranado) +- Add the glade files to the install image so save-to-bugzilla works + (#515444). (clumens) +- New system-config-keyboard has a different version then I expected + (hdegoede) + +* Wed Aug 05 2009 Chris Lumens - 12.8-1 +- Don't try to unmount the CD before we later unmount the CD (#515564). + (clumens) +- Do not offer going back when ugrade root for ks upgrade is not found + (#499321) (rvykydal) +- Rebuild .pot file and update translations. (clumens) +- Import the logging stuff (#515564). (clumens) +- Add keyboard kernel cmdline options to grub.conf for dracut (hdegoede) +- Fix backtrace in network.dracutSetupString in the static ip case (hdegoede) +- Write dracut i18n cmdline options to grub.conf (hdegoede) +- Pass InstalltData to booty __init__ as it needs access to many of its + members (hdegoede) +- Fix ctrl-alt-deleter behavior /before/ end of install. (pjones) +- Merge branch 'master' of ssh://git.fedoraproject.org/git/anaconda (notting) +- No longer use HAL in list-harddrives. (clumens) +- The names of a couple basic udev methods has changed. (clumens) +- Move basic udev methods out of the storage module (#514592). (clumens) +- We do not actually require gtkhtml2 or the python bindings for it. + (notting) +- Fix some typos in rescue mode (#515091) (msivak) +- Add a dracutSetupString method to network.py (hdegoede) +- Fix backtrace due to iscsi.getNode() not finding the iscsi node (hdegoede) +- Use dracutSetupString() method to add the kernel parameters needed for + dracut (hdegoede) +- Add a dracutSetupString method to devices.py classes (hdegoede) +- Differentiate between ibft discovered and manually added iscsi disks + (hdegoede) +- Store iscsi node pointer in iScsiDiskDevice objects (hdegoede) +- When checking logical partition dependcies, make sure the are one the same + disk (hdegoede) +- Only set iscsi nodes to autostart when none of the LUN's contain / + (hdegoede) +- Add functions to go from an iScsiDiskDevice to an libiscsi node (hdegoede) + +* Fri Jul 31 2009 Chris Lumens - 12.7-1 +- Fix up udev sillies (related to #514501) (katzj) +- Log when we unmount filesystems so we have a match for mount messages. + (clumens) +- Let's not exit from buildinstall.functions, say, ever (katzj) +- Rework shutDown() to better accomidate "nokill" better. (pjones) +- Make upgradeany boot option work again (#513227) (rvykydal) +- Update device.map when upgrading (#513393) (rvykydal) +- Catch None devs (katzj) + +* Wed Jul 29 2009 Chris Lumens - 12.6-1 +- Fix CDLABEL substitution in syslinux.cfg for x86 boot.iso (katzj) +- And finish off the removal of rhpl (katzj) +- Use keyboard bits from system-config-keyboard now (katzj) +- Use python-meh instead of our own exception handling now (clumens) +- NM no longer exposes information through HAL (#514501). (clumens) +- Put mkdir into /sbin on the initrd, too. (clumens) +- Make sure controlunits.sh is installed to initrd on s390 (dcantrell) +- Remove ChangeLog (#512502) (dcantrell) +- Add s390utils-cmsfs in upd-instroot for s390 (dcantrell) +- Make sure s390 gets /lib/ld64.so.1 (dcantrell) +- Skip writeDisabledNetInfo() when loader starts on s390 (dcantrell) +- Fix part --onpart= to print the device name instead of the __str__. + (clumens) +- Just pull in all python modules for stage2 (katzj) +- Trim PACKAGES list in upd-instroot. (dcantrell) +- Update linuxrc.s390 and friends to reflect review comments. (maier) +- Log non-upgradable upgrade candidate roots. (rvykydal) +- unmountFilesystems -> umountFilesystems (#510970). (clumens) +- Disable devel repos on release (#503798) (katzj) +- Work around problems with live installs and dpi other than 96 (#506512) + (katzj) +- Fix obvious typo in font name (katzj) + +* Wed Jul 22 2009 David Cantrell - 12.5-1 +- New build because koji hates me. + +* Wed Jul 22 2009 David Cantrell - 12.4-1 +- Add scripts/makeupdates to generate updates.img files. (dcantrell) +- Add python-decorator to the stage2 image for pyparted (#513175). (clumens) +- Set stage2= on x86 boot.iso (katzj) +- Try to auto-find the CD even if stage2= is specified (katzj) +- Make sure we have a device before check if it's protected. (#510033) + (dlehman) +- Remove unresolvable file devices from the devicetree. (#503830) (dlehman) +- Support multiple fstab entries of a single nodev fstype. (#505969) + (dlehman) +- Refer to nodev devices as "none", not "nodev". (dlehman) +- Change DeviceTree.devices from a dict to a list. (dlehman) +- Show locked LUKS devices as "Encrypted (LUKS)", not "LUKS". (dlehman) +- Allow creation of four primary partitions on a disk. (#505269) (dlehman) +- Add a bunch more stuff to the initrd needed for networking. (clumens) +- Add more things to /sbin on the initrd that udev requires. (clumens) +- Add dmesg to the images. (clumens) + +* Mon Jul 20 2009 David Cantrell - 12.3-1 +- Set GECOS field for new user accounts specific in ks files (dcantrell) +- Show MAC address of network device in text mode too. (rvykydal) +- Fix selection of alternative iface in UI after fail (#507084). (rvykydal) +- Stop the cdrom device before ejecting (#505067) (msivak) +- Add hipersockets to NETTYPE description (bhinson, #511962). (clumens) +- Don't show formatting progress bar after mkfs has exited. (eric_kerin) +- Run firstaidkit-qs script instead of the shell (shows rescue menu) + (#508512) Add dialog package required for firstaidkit Create /etc/fstab in + ramdisk to make mount commands easier (#440327) (msivak) +- When ignoring partitions make sure lvm also ignores them (hdegoede) +- 70-anaconda.rules: pass --ignorelockingfailure to lvm invocation (hdegoede) +- Call mdadm -I with --no-degraded for all disks but the last (hdegoede) +- There is no /bin on the initrd so sleep needs to go into /sbin. (clumens) +- Add deviceNameToDiskByPath(). (dcantrell) +- Display drive model and size in MB in partitioning UI (#460697) (dcantrell) +- Lots of small grammar and wording changes. (pjones) +- Edit user-visible dialogs for style. (pjones) +- Get rid of sloppy elipses usage. (pjones) +- Don't write optical devices to /etc/fstab (#505697). (clumens) +- error messages of zFCP on s390: log or pass to the UI (maier) +- correctly delete a SCSI device provided by a zFCP LUN on s390 (maier) +- All other teardown methods take a "recursive" argument (#506166). (clumens) +- Clean yum caches following preupgrade, too (#503096). (clumens) + +* Thu Jul 09 2009 David Cantrell - 12.2-1 +- mdmon added to install.img (Jacek.Danecki) +- Remove some unnecessary code. (clumens) +- Use a method yum provides, rather than inventing our own. (clumens) +- Remove _catchallCategory. yum handles this for us now. (clumens) +- Write out NM_CONTROLLED=no for NICs used for FCoE (hdegoede) +- Add support for biosraid using mdadm (hdegoede) +- Reverse: "Support for MD containers" (hdegoede) +- When all udev_is-foo() checks fail return instead of backtracing (hdegoede) +- 70-anaconda.rules: always import blkid output (hdegoede) +- Make sure to have "self" as an argument. (clumens) +- Add kickstart fcoe command (hdegoede) +- Use the yum preconf object to do $releasever substitution. (clumens) +- Indicate LV status according to lv_attr active bit (#491754) (dcantrell) +- Include lv_attr in lvm.lvs() return value. (dcantrell) +- Fix list of 64-bit arches. (notting) +- We also need -DUSESELINUX if we want to call matchPathContext. (clumens) +- Clean up some arch code. (notting) +- Update /etc/hosts with hostname for loopback IP address (#506384) + (rvykydal) +- Add missing LAYER2 and PORTNO handling for s390x. (dcantrell) +- Ignore configure.ac when generating updates.img (dcantrell) +- AC_ARG_WITH -> AC_ARG_ENABLE (dcantrell) +- dhclient now reads config files from /etc/dhcp (dcantrell) +- no "rhgb quiet" on s390 to enable visible boot progress and system + automation (#509881) (maier) +- fix backtrace in s390 reipl support due to missing anaconda.id.fsset + (#509877) (maier) +- Put sleep in /bin on the initrd (#505639). (clumens) +- Also include the grep programs. (clumens) +- Add programs from vim-minimal, coreutils, and util-linux-ng. (clumens) +- Move programs that aren't s390-specific into the main image. (clumens) +- Look for /bin/sh, not /sbin/busybox. (clumens) +- No longer symlink binaries to busybox. (clumens) +- No longer require busybox. (clumens) + +* Mon Jul 06 2009 Chris Lumens - 12.1-1 +- Include the rest of the libs isys needs to link against (#509572). + (clumens) +- Add FCoE disks to the devicetree with a type of FcoeDiskDevice (hdegoede) +- Add FcoeDiskDevice class to storage/devices.py (hdegoede) +- Add FCoE support to storage/udev.py (hdegoede) +- Write out configuration of FCoE to installed system (hdegoede) +- Initial FCoE support (hdegoede) + +* Thu Jul 02 2009 Chris Lumens - 12.0-1 +- network --bootproto no longer implies DHCP. (clumens) +- Don't unconditionally skip the network config screen in kickstart. (clumens) +- Allow creating new groups through kickstart. (clumens) +- Set focus on hostname entry in network UI screen (#494135) (rvykydal) +- Fix upgrade selected in UI after storage reset (#503302) (rvykydal) +- Add support for specifying upgrade partition in ks (#471232) (rvykydal) +- Add missing liveinst/* files. (dcantrell) +- Update code that checks for devices that contain install media. (dlehman) +- Rework tracking of devices containing installation media. (#497087) (dlehman) +- Add function storage.udev.udev_resolve_devspec. (dlehman) +- Prevent false positives in devtree's device lookup methods. (dlehman) +- Skip exceptionDisks if exn originated in devtree.populate. (#497240) (dlehman) +- Stop using rhpl.arch in writeRpmPlatform() (katzj) +- Move simpleconfig (back) into anaconda from rhpl (katzj) +- Use iutil arch specifiers rather than rhpl (katzj) +- Remove unused rhpl imports (katzj) +- Switch to using iutil.isS390 instead of rhpl.getArch (katzj) +- Stop using rhpl.translate (katzj) +- Default to /boot on ext4 (katzj) +- Allow /boot on ext4 now that we have a grub that allows it (katzj) +- Make sure the library directory is always set (notting) +- Write out "MAILADDR root" into mdadm.conf (#508321) (rvykydal) +- Do not install grub more times than needed. (rvykydal) +- Ensure we set the SELinux context correctly on symlinks (#505054) (katzj) +- udev dropped vol_id (#506360) (katzj) +- Handle installing multilib into the installer intramfs correctly. (notting) +- Set LIBDIR appropriately on PPC64. (notting) +- Fix grub upgrade (#505966) (rvykydal) +- Include yum.log in anacdump.txt too. (rvykydal) +- Access format options property instead of mountopts attr. (#506219) (dlehman) +- Be more careful about identifying NFS fstab entries. (dlehman) +- Don't add leading directory for files twice. (#503830) (dlehman) +- booty changes for iswmd (Jacek.Danecki) +- Support for MD containers. (Jacek.Danecki) +- New iswmd parameter for kernel cmdline (Jacek.Danecki) +- New udev rule for using mdadm for isw_raid_member (Jacek.Danecki) +- Use isohybrid to make boot.iso a hybrid image (katzj) +- Log yum messages. (rvykydal) +- Tell booty to rescan for bootable drivers when an extra disks get + added (hdegoede) +- Do not encourage VNC when doing kickstart text installs (#506534) (dcantrell) +- Rename bootstrap to autogen.sh (dcantrell) +- Include the contents of /proc/cmdline in exception reports (katzj) +- Include libwrap library for sshd and telnet in s390 installs (jgranado) +- Enforcing matching rootfs type on LVs as well as for partitions + (#504743) (katzj) +- Remove problem packages before attempting a re-download (#501887). (clumens) +- Be more explicit about what's lacking on EFI systems (#501341). (clumens) +- If not enough memory is installed, enforce swap partition creation + (#498742). (clumens) +- Convert to using automake/autoconf. (dcantrell) +- Convert po/ subdirectory to GNU gettext template system. (dcantrell) +- Restructure liveinst/ for the new build system. (dcantrell) +- Add m4/ subdirectory with autoconf macros. (dcantrell) +- Removed py-compile script. (dcantrell) +- Rename anaconda.spec to anaconda.spec.in (dcantrell) +- Ignore autoconf and automake files in the tree. (dcantrell) +- Removed toplevel Makefile and Makefile.inc (dcantrell) +- Show MAC address of network device in combo box (#504216) (dcantrell) +- Remove loader/tr/.cvsignore (dcantrell) +- Increase max NIC identification duration to 5 minutes (#473747). (dcantrell) +- Use /sbin/ipcalc for IP address validation (#460579) (dcantrell) +- Fix an obvious traceback when doing part --ondisk= (#504687). (clumens) +- Catch errors from bootloader installation (#502210). (clumens) +- Remove umask temporarily so device permissions are correct + (#383531, wmealing). +- Remove the name check on driver disk packages (#472951). (clumens) +- Make the installation key text more descriptive (#474375). (clumens) +- Fix discovery of existing raid/lvm for ks install without clearpart + (#503310, #503681) (rvykydal) +- Use the F12 version of the bootloader command. (clumens) +- It's /sbin/fsadm, not /sbin/e2fsadm (#504043). (clumens) +- Remove the bootloader --lba32 option. (clumens) +- Use gettext.ldngettext when necessary (#467603) (dcantrell) +- Test NM_CONTROLLED setting correctly in network.py (#502466) (dcantrell) +- Show unknown partitions as "Unknown" in partition editor. (dcantrell) +- Add a type hint on popup windows (rstrode). (clumens) +- Use the F12 version of the driverdisk command. (clumens) +- Remove driverdisk --type, since mount can figure that out. (clumens) +- Fix an error when editing an unreachable repo (#503454). (clumens) +- If /etc/rpm/platform is found, move it out of the way. (clumens) +- We no longer write out /etc/rpm/platform, so don't offer to upgrade + it. (clumens) +- Remove locals containing "passphrase" or "password" from exns + (#503442). (clumens) +- Make progress bars modal (#493263, #498553, rstrode). (clumens) +- Make sure to import os.path if we are going to use it. (jgranado) +- ipcalc is copied to /usr/lib. (jgranado) +- Limit the trigger to block type devices. (jgranado) +- We need ipcalc for new s390 installation script. (jgranado) +- Fix off-by-one errors in read. (notting) +- sysconfig file changed names for system-config-firewall (katzj) +- Don't write out firewall settings if they already exist (#502479) (katzj) +- Make sure that the devices are correctly detected (#491700) (jgranado) +- Make the save-to-bugzilla dupe detection smarter. (clumens) +- If network --device=MAC is given, translate to device name + (#185522). (clumens) +- Add a function to convert MAC addresses to device names. (clumens) +- Move /boot checks from sanityCheck into Platform.checkBootRequest. (clumens) +- Return translated strings from checkBootRequest. (clumens) +- Check that /boot is on a Mac disk label for PPC installs (#497745). (clumens) +- Call checkBootRequest from sanityCheck. (clumens) +- Put some space in that big scary warning. (clumens) +- fond -> found (clumens) +- Use powers of two in swapSuggestion (#463885). (clumens) +- Trim "mapper/" off device names in the bootloader UI (#501057). (clumens) +- Make the weak password dialog comply with the HIG (#487435). (clumens) +- Add a newline to a cmdline mode string (#497575). (clumens) + +* Tue Jun 02 2009 Chris Lumens - 11.5.0.59-1 +- Do not show disabled repos such as rawhide during the install (#503798). + (jkeating) + +* Sun May 31 2009 David Lehman - 11.5.0.58-1 +- Pass --force to lvresize so it doesn't ask for confirmation. (dlehman) +- Fix a typo in action sorting for resize actions (fs vs. device). (#501000) + (dlehman) +- Sending translation for French (mrtom) + +* Thu May 28 2009 Chris Lumens - 11.5.0.57-1 +- Create and use unique ids for Device instances. (#500808) (dlehman) +- Adjust remaining PartitionDevices' names after removing a partition. + (dlehman) + +* Tue May 26 2009 Chris Lumens - 11.5.0.56-1 +- Ensure matching rootfs type to live type with autopart (#501876) (katzj) + +* Tue May 26 2009 Chris Lumens - 11.5.0.55-1 +- Fix blank network device descriptions in the loader. (#501757) (notting) +- Make sure the right _isMigratable gets used for Ext3FS (#501585). (clumens) + +* Tue May 19 2009 Chris Lumens - 11.5.0.54-1 +- We are not guaranteed to have a partedDisk in the udev code (#501556, + #501428). (clumens) +- The location of the options wiki page has changed. (clumens) +- Disable BETANAG. (clumens) +- Install a en_US.UTF-8 locale in the first stage image. (notting) +- Reset font when changing language. (notting) +- Set locale to en_US.UTF-8 when initializing the console. (notting) + +* Mon May 18 2009 David Cantrell - 11.5.0.53-1 +- LVMVolumeGroupDevice stores pesize in MB, kickstart expects it in KB. + (dlehman) +- Don't schedule a format resize if reformat scheduled. (#500991) (dlehman) +- Deactivate md arrays regardless of state if the device is present. + (#496441) (dlehman) +- Lame hack to make sure --size= is never 0 (#500905). (clumens) +- Don't filter out partitions that haven't been allocated (#500932). + (clumens) +- Write out PE size as an integer, since that's what anaconda wants + (#501049). (clumens) +- Set clearPartType to None on preupgrade too (#499321). (clumens) +- Fix indentation of line to remove cancelled actions from the list. + (#500932) (dlehman) +- Consider active-idle state of md device as accepatable status of device + (#497407) (rvykydal) +- Fix detection of cciss disks (#499408) (dchapman) +- Get existing fs size for xfs. (dcantrell) +- Get existing fs size for ntfs. (dcantrell) +- Get existing fs size for jfs. (dcantrell) +- Get existing fs size for ext2, ext3, and ext4. (dcantrell) +- Compute existing filesystem size using fs info utility. (dcantrell) +- Do not allow users to migrate ext4 to ext4. (dcantrell) +- Correct handling of formats on encrypted preexisting LVs. (#499828) + (dlehman) +- Ignore unrecognized device-mapper devices we find. (#499967) (dlehman) +- loader: Mount /tmp as tmpfs not ramfs so we can swap it out (ajax) +- format.mountpoint -> lvd.mountpoint (#500913). (clumens) +- Treat the loop labels as devices without a label.(#493219) (jgranado) +- Add the partition table partition after initializing (#498602). (clumens) + +* Wed May 13 2009 David Cantrell - 11.5.0.52-1 +- Add a Mac OS boot line to yaboot.conf (#499964). (clumens) +- Catch IOError when enabling repos (#500439). (clumens) +- Use a newer version of the kickstart Partition command. (clumens) +- Fix a traceback when installing over previous installs on PPC (#499963). + (clumens) +- Fix a typo when probing exception disks. (clumens) +- Add support for --noformat too. (clumens) +- Add support for --onpart, --ondrive, and --useexisting. (clumens) +- Make the storage.writeKS method useful and called from instdata (#493703). + (clumens) +- Add writeKS methods to the device objects. (clumens) +- Add writeKS methods to all the format objects. (clumens) +- upd-instroot: Add gdbserver (ajax) +- Remove text-mode syslinux help (katzj) +- If clearPartType is None, don't attempt to clear a device (#499321). + (clumens) +- Only set clearpart data if the command was provided in the kickstart file. + (clumens) +- Override previously defined mountpoints in kickstart (#499746). (clumens) +- Yet another font package name has changed (#499322). (clumens) +- Set new mountpoint correctly for existing encrypted LVs. (#496363) + (dlehman) +- Once a partition is part of another device it cannot be modified. + (#496760) (dlehman) +- Maintain request sort order by using req_disks instead of parents. + (dlehman) +- Do not set a parent on the /mnt/sysimage/dev bind mount object (#499724). + (clumens) +- Skip .pyc files in subdirectories when running make updates. (clumens) +- Remove 'lowres' option. (ajax) +- Run tune2fs on newly formatted ext[34] filesystems. (#495476) (dlehman) + +* Thu May 07 2009 David Cantrell - 11.5.0.51-1 +- Don't clear the first partition on any disk with a Mac disk label + (#492154). (clumens) +- Add detailedMessageWindow to the cmdline class (#499700). (clumens) +- Don't traceback when a freespace partition is present (#499662). (clumens) +- Do nomodeset when doing xdriver=vesa (ajax) +- Fix calculation of smallest PV's size in the lvm dialog. (#493753) + (dlehman) +- Fix KeyError when partition numbers change during allocation. (#497911) + (dlehman) +- Update EFI CD booting code in mk-images (pjones) + +* Wed May 06 2009 Chris Lumens - 11.5.0.50-1 +- Use storage objects throughout the partition editing UI code (#491806, + #496002). (clumens) +- Verify filesystems after the live resize (katzj) +- Verify with fsck after resizing filesystems (katzj) +- IBM improvements to linuxrc.s390 (#475350) (dcantrell) +- Write out correct hostname during LiveCD installs (#492515) (dcantrell) +- Enter in hostname entry field advances to next screen (#494135) (dcantrell) +- Check if we'll clear a partition after setting its format attr. (#499251) + (dlehman) +- Don't pass the default clearPartType value to the device tree. (dlehman) +- Fix some logic errors in storage.partitioning.shouldClear. (dlehman) +- Forward port various iscsi fixes from 5.4 iscsi work (hdegoede) +- Avoid writing out NAME= in ifcfg files (#497485) (dcantrell) +- Retry network configuration in loader (#492009) (dcantrell) +- Make sure /boot ends up on the same disk as Apple Bootstrap (#497390). + (clumens) +- Handle that the default bootloader entry can sometimes be None (#496618). + (clumens) +- The PS3 bootloader allows booting from ext4 filesystems (#498539). + (clumens) +- Support LVM PE sizes > 128MB (#497733) (cristian.ciupitu) +- Set ANACONDAVERSION on most livecd installs. (clumens) +- getDependentDevices is in devicetree, not storage (#499144). (clumens) + +* Mon May 04 2009 David Cantrell - 11.5.0.49-1 +- Collect network interfaces from NetworkManager (#493995) (dcantrell) +- Handle fstab entries whose filesystem we don't recognize.(#498120) + (dlehman) +- Add an error signifying an unrecognized entry in /etc/fstab. (dlehman) +- Don't drop discovered format with unknown devices when parsing fstab. + (dlehman) +- Fix display of paths for device-mapper device in bootloader widget. + (dlehman) +- Don't call udevDeviceFormat if we're just going to clear the device + (#497323). (clumens) +- Pass clearPartType to the devicetree as well. (clumens) +- Break the complex should-clear logic out of clearPartitions. (clumens) +- Handle clearpart in the early kickstart pass too. (clumens) +- Correct setting the SELinux context on mountpoints (#494995). (clumens) +- make resetFileContext return the context set (wwoods) +- Allow editing of the hdiso source partition so it can be mounted + (#498591). (clumens) +- Add a ignoreProtected= parameter to deviceImmutable that does the obvious. + (clumens) +- Be more aggressive unmounting before install starts (#498260) (katzj) +- Add %%{?dist} to the release number in the spec file. (dcantrell) +- Configure network in kickstartNetworkUp() iff NM is not connected + (#490518) (dcantrell) +- Don't segfault with "ks someotherparam" (#498307). (clumens) +- Fix the arch upgrade check in yuminstall.py, too (#498280). (clumens) +- Move _resetRpmDb into iutil so we can access it everywhere. (clumens) +- Don't mount bind mounts last, that makes /dev break. (pjones) +- Pass anaconda to storage.FSSet.turnOnSwap. (dlehman) +- Ignore spurious formatting on partitioned devices. (dlehman) +- Revert "DeviceError only returns a message, not (message, device) tuple + (#496343)." (dlehman) +- Fix action sorting for partitions on the same disk. (#498064) (dlehman) +- Fix traceback in second editing of existing raid dev (#497234). (rvykydal) +- Allow existing LVs with filesystems to be resized (#490913) (dcantrell) +- Rate limit pulse() calls to ProgressWindow. (pjones) +- Don't populate flags.cmdline with "True" values when no = is used. (pjones) +- Add "nomodeset" to the list of command line arguments copied to grub.conf + (pjones) +- Use device.format.mountType insead of device.format.type for fstab. + (pjones) +- Initialize x86 class variables before efiBootloaderInfo.__init__() (pjones) +- Fix a segfault on nfs+kickstart (pjones) +- Fix an error when raising FormatCreateException. (clumens) +- Add more windows to the rescue interface class (#498014). (clumens) +- Remove requirement for EFI machines to be x86, since IA64 is too + (#497934). (clumens) +- Fix the kernel package selection on ppc64 machines (#497264). (clumens) +- Include fsck.ext4 and mkfs.ext4 in the images (#497996). (clumens) +- Properly restore SIGCHLD if X startup fails (wwoods) +- Fix kickstart PV references handling for lvm on raid (#497352). (rvykydal) + +* Fri Apr 24 2009 Chris Lumens - 11.5.0.48-1 +- Fix handling of swap files. (#496529) (dlehman) +- Pass anaconda to turnOnSwap so we can use swap files. (dlehman) +- Fix incorrect attribute name use for retrofit flag. (dlehman) +- Use slightly better checks when testing for 0 size (#493656, #497186, + #497389). (clumens) +- If the LV has no child, don't attempt to grab its format (#497239). + (clumens) +- Apply the global passphrase when doing kickstart autopart (#497533). + (clumens) +- Add support for encryption passphrase retrofits. (dlehman) +- Bring luks_add_key and luks_remove_key back into devicelibs.crypto. + (dlehman) +- Don't let lvremove failures from incomplete vgs crash the install. + (#497401) (dlehman) +- Allow setting a mountpoint w/o formatting an encrypted partition. + (#495417) (dlehman) +- Remove encryption from preexisting device if "Encrypt" is deactivated. + (dlehman) +- Fix indentation of preexisting partition handling block. (dlehman) +- The device passed to the luks passphrase dialogs is a string. (#492123) + (dlehman) +- Protect against tracebacks from the partition isFoo properties. (dlehman) +- Fix handling of bind mounts. (#496406) (dlehman) +- Add more filesystem checks. (clumens) +- Support vfat filesystems in the partitioning UI (#496351). (clumens) +- Remove devices in leaves first order (#496630) (hdegoede) +- Don't remove an inconsistent lvm partition from the devicetree (#496638) + (hdegoede) +- Move isEfi to be a property on Platform instead of on X86 (#497394). + (clumens) +- Support --encrypted --useexisting on kickstart installs (#497147). + (clumens) +- When making a RAID device, require that some members be selected + (#491932). (clumens) +- When catching an OSError, handle it as an object instead of a tuple + (#497374). (clumens) +- Enforce the fstype that holds /boot on kickstart installs (#497238). + (clumens) +- Fix ps3 platform support (#497203) (katzj) +- Clean up rpmdb locks at the end of the install (#496961) (katzj) +- Don't allow /boot to be on an encrypted device (#496866). (clumens) +- Use the correct unmount method (#496764). (clumens) + +* Tue Apr 21 2009 David Cantrell - 11.5.0.47-1 +- Fix adding of fifth partition in UI (#496930). (rvykydal) +- Define the fd variable before it can ever be referenced (#496930). + (clumens) +- Fix preservation of format attrs for preexisting luks partitions. (dlehman) +- Set md member devices' uuids after creating an array. (dlehman) +- Don't try to get size for nodev and bind filesystems. (dlehman) +- Include the device path in DeviceError exceptions. (dlehman) +- Mdadm's incremental mode ignores the auto option, so don't use it. + (dlehman) +- Use incremental mode for all md member addition during probing. (dlehman) +- Try to name existing md arrays based on their preferred minor. (dlehman) +- Reimplement mdexamine using a more easily parseable output format. + (dlehman) +- Fix position of "--run" option to mdadm assemble. (dlehman) +- Handle passphrase prompts without a traceback in cmdline mode. (#492123) + (dlehman) +- Fix another device vs. string problem in EFI bootloader config (#496669). + (clumens) +- Add the device's name to mdadm.conf (#496390). (clumens) +- Show normal cursor during passphrase entry (#496534) (msivak) +- Fix traceback in cmdline mode after exception handling cleanup (#496644) + (katzj) +- DeviceError only returns a message, not (message, device) tuple (#496343). + (clumens) + +* Fri Apr 17 2009 David Cantrell - 11.5.0.46-1 +- Clean up argument list after changing from rhpl to iutil for + execWithRedirect (jkeating) +- Fix NameError traceback setting up bootloader in EFI installs (wwoods) +- No longer force ISOs to be on ext2, ext3, or vfat partitions. (clumens) +- Sending translation for German (ckpinguin) +- Split text mode exn saving into multiple screren (#469380). (clumens) +- Copy /tmp/program.log to /mnt/sysimage/var/log/. (clumens) +- Fix member preselection in raid UI. (rvykydal) +- Fix editing of raid device (persistence of level choice) (#496159) + (rvykydal) +- Fix ks --useexisting and --noformat options of logvol and volgroup + (rvykydal) +- Make sure inconsistencies dont screw us up. (jgranado) +- Re-implement the inconsistency functionality. (jgranado) +- Allow the use of "-" in the lvm names. (495329) (jgranado) +- Make sure we "insist" on mdadm commands. (491729) (jgranado) +- [PATCH] Possible fix for some encryption related bugs during the Custom + Layout editation (#495848) (msivak) + +* Thu Apr 16 2009 Chris Lumens - 11.5.0.45-1 +- Touch /.autorelabel when running under rescue mode (#491747). (clumens) +- Add support for fingerprint-based logins (#481273). (clumens) +- Add a "File Bug" button to the catch-all partitioning exception handler. + (clumens) +- Remove the early catch-all exception handler (#495933). (clumens) +- Implement the save to USB using devicetree devices. (jgranado) +- Use size instead of currentSize when comparing lv sizes (hdegoede) +- Make sure all pv's of an lv's vg are setup before resizing an lv (hdegoede) +- Do not try to teardown a non existing format (hdegoede) +- Center the bootloader configuration dialog (#495802). (clumens) +- Destroy (potential) stale metadata when creating a new partition (hdegoede) +- use partition req_base_size instead of size in partitionCompare() + (hdegoede) +- Fix changing size of newly created partitions (hdegoede) +- Don't traceback on invalid filesystem detection (#495156) (dcantrell) +- Check to see if formatcb is None. (jgranado) +- Use the PV name when logging error messages. (jgranado) +- Don't set up the device to obtain minSize anymore. (dlehman) +- Improve estimate of md arrays' size. (dlehman) +- Determine minimum size for filesystems once, from constructor. (dlehman) +- Fix estimate of LUKS header size for newly encrypted devices. (#493575) + (dlehman) +- Fix two syntax problems with generated mdadm.conf entries. (#495552) + (dlehman) +- Default to AES-XTS cipher mode with 512 bit key for new LUKS devices. + (dlehman) +- When going back from a failed shrink, reset the device action set. + (clumens) +- If we can't communicate while logging in to bugzilla, error (#492470). + (clumens) +- Make save to usb work. (jgranado) +- We don't always have a formatcb either (#495665). (clumens) +- The entry is named lvsizeentry now. (jgranado) + +* Mon Apr 13 2009 David Cantrell - 11.5.0.44-1 +- Default to SHA512 password encoding algorithm. (dcantrell) +- Handle format combo box not existing (#495288) (dcantrell) + +* Mon Apr 13 2009 Chris Lumens - 11.5.0.43-1 +- Run programs with LC_ALL=C in case we're parsing output (#492549). + (clumens) +- A volume group device has a "peSize" attribute (not "pesize"). (dlehman) +- Remove uncommitted new lv from dict on cancel. (dlehman) +- Use the correct value when setting new extent size. (#493753) (dlehman) +- Fix image generation so all ELF binaries have their deps included + (#495231). (clumens) +- Clean up the code in editLogicalVolume function. (jgranado) +- Setup the disks before partitioning as the nodes are needed. (jgranado) +- Rescan the devices when we are saving a traceback. (jgranado) +- Close file descriptors when an error occurs. (jgranado) +- Aesthetic changes to "editLogicalVolume" function. (jgranado) +- When deallocating a partition also set its disk attribute to None + (hdegoede) +- Check self.partedPartition not being None before using it (#495077) + (hdegoede) +- growPartitions: Change op_func (back to) add when an iteration succeeds + (hdegoede) +- partedPartition can be None while growing partitions (#495076) (hdegoede) + +* Thu Apr 09 2009 Chris Lumens - 11.5.0.42-1 +- Fix display of format type for devices. (dlehman) +- Fix handling of priority option from swap fstab entries. (#494992) + (dlehman) +- Some fs types cannot be passed to programs (#495061, #493075). (clumens) +- When a new module is loaded, update the kernel_filesystems list. (clumens) +- Add more Indic fonts (#494261, pnemade). +- Remove the message saying you can make your own layout (#495015). (clumens) +- Put e100 (and other) firmware in its own directory if needed (#494778). + (clumens) +- Run /bin/umount instead of calling umount(2) in _isys.umount (#493333) + (dcantrell) +- Add doPwUmount() and mountCommandWrapper() to isys (#493333) (dcantrell) +- Preserve symlinks and only collect deps on ELF executables. (dcantrell) +- Use $(ARCHIVE_TAG) throughout the updates target. (dcantrell) +- partedUtils doesn't exist anymore (katzj) +- Revert "Show the header in certain non-lowres cases" (#493153) (katzj) +- Pre-existing partitions names may change (#494833) (hdegoede) +- Use getDeviceNodeName() instead of basename of device node. (hdegoede) +- Fix ks raid --useexisting and --noformat (rvykydal) +- Fix processing of --level and --device options of ks raid commands. + (rvykydal) +- Don't start pdb immediately in debug mode (katzj) +- Fix EDD BIOS disk order detection in general and make it work with dmraid + (hdegoede) +- Update extended partition geometry when we change it (hdegoede) + +* Tue Apr 07 2009 David Cantrell - 11.5.0.41-1 +- Make sure we have a clean lvm ignore list when we initialize. (jgranado) +- We need to search by name without the "mapper" prefix. (jgranado) +- Create a min_max constraint to avoid alignments issues. (jgranado) +- Don't exit the installer from filesystem errors. (dlehman) +- Try not to raise exceptions from minSize calculators. (dlehman) +- Don't traceback when PVs are encrypted or are not partitions. (dlehman) +- Adjust device dependencies when backing out device encryption. (#493257) + (dlehman) +- Include filesystem type in mount log message. (dlehman) +- Load filesystem modules on demand (#490795, #494108). (clumens) +- Use existing partitions when --onpart is used for PVs or raid members + (#493065) (rvykydal) +- Raise message, not exception when size set in LV dialog is too big. + (rvykydal) +- Raise an error when remofing an extended part with logical parts. + (jgranado) +- Esthetic changes to storage/partitioning.py. (jgranado) +- dmraid.py is no longer being used by anything, so remove it. (clumens) +- Remove partedUtils.py. (clumens) +- This is the only place isEfiSystemPartition is used, so pull it in. + (clumens) +- getReleaseString now lives in the storage module. (clumens) +- Stop lying about our support for dmraid and multipath in kickstart. + (clumens) +- Remove some old, unused code that also uses biosGeometry. (clumens) +- For very small disks, don't try to display a stripe in the graph + (#480484). (clumens) +- Fix reading the console= parameter from the cmdline (#490731). (clumens) +- For dmraid partititons device node name != name (hdegoede) +- When a partition request gets unallocated, set the name back to req# + (hdegoede) +- Do not use getPartitionByPath() in allocatePartitions() (hdegoede) +- Remove no longer used iscsi_get_node_record function (hdegoede) +- Try to handle devices which live in a subdir of /dev properly (hdegoede) +- Split DeviceTree.addUdevDevice into several smaller methods. (dlehman) +- Don't traceback from failure finding minimum fs size. (#494070) (dlehman) +- udev_settle after format teardown to avoid EBUSY on device teardown. + (#492670) (dlehman) +- Add a parted.Device attribute to all existing StorageDevices. (dlehman) +- If no partitioning commands are given, apply the UI selections (#490880). + (clumens) +- Update font package names for ml_IN, si_LK, etc. (#493792, #493794). + (clumens) +- Fix a typo in the city name for Nepali (#493803). (clumens) +- Fix writing out the partition= line on PPC (#492732). (clumens) +- Do not check size when adding LV to growing VG (bug #492264) (rvykydal) + +* Thu Apr 02 2009 David Cantrell - 11.5.0.40-1 +- Don't let device names affect action order in general case. (dlehman) +- Round up when aligning to pesize for space used. (#493656) (dlehman) +- Improve handling for various nodev filesystems in fstab. (#493685, + #493202) (dlehman) +- Present the correct max lv size in the dialog. (dlehman) +- Use the head of the current branch, not master, for scratch archives. + (dlehman) +- Make a top level StorageError that all others are based on. (dlehman) +- Remove unused PRePDevice class. (dlehman) +- Make the disk model an attribute of DiskDevice. (dlehman) +- Handle format actions in cancelAction() (dcantrell) +- Fix format check box for pre-existing partitions (#491675) (dcantrell) +- Remove temporary directory used in _getExistingSize() (dcantrell) +- Activate storage before looking up the hdiso source drive (#491781). + (clumens) +- Remove isys.getDeviceByToken since it is no longer used. (clumens) +- Don't allow the rootfs on live installs to not match (#493206, #492727) + (katzj) +- Create setup and teardown functs for dmraid devs. (jgranado) +- put xfs back where it belongs (sandeen) +- Fix up the other caller of unmountCD to pass in a device (#493537). + (clumens) + +* Wed Apr 01 2009 Chris Lumens - 11.5.0.39-1 +- Prevent sensitive information in kickstart files from ending up in + tracebacks. (clumens) +- It's 2009, let's ignore floppy drives now (#493338, #493377). (clumens) +- Remove DmRaidArrayDevice level attribute (#493293) (hdegoede) +- get_containing_device takes two arguments (#493266). (clumens) +- Fix the check for if there's enough space available on / and /usr + (#492614). (clumens) +- Fix testing if a PPC partition is bootable (#492726). (clumens) +- Look for a PReP "partition" by examining the format, not the flags + (#492426). (clumens) +- Fix a few more pylint warnings and errors in storage/* (hdegoede) +- Fix some pylint warnings in iw/*.py (hdegoede) +- Don't start our audit daemon with the livecd installer (katzj) +- If there's a problem finding removable disks, disable save-to-disk. + (clumens) +- Move %%pre processing to much earlier in the install process. (clumens) +- If there are no installs to rescue via kickstart, display an error. + (clumens) +- Add an early kickstart processing pass. (clumens) +- Fixes of errors shown by pylint that didn't get into the beta build. + (mgracik) +- Adjust the dmraid ignoring logic. (jgranado) +- Reference the format by type, not name.(#492596) (jgranado) +- Sending translation for Chinese (Simplified) (leahliu) +- Increase udev_settle timeout in udev_get_block_devices. (#492049) (dlehman) +- Fix check for fully defined md array when raidlevel is 0. (#491796) + (dlehman) +- Fix a typo ('isEFI' should be 'isEfi'). (dlehman) +- Make sure the pvs are set up before doing lvremove or vgremove. (dlehman) +- Don't write out md member devices to a config file for assemble. (dlehman) +- Fix the supported property of filesystems and prepboot format. (dlehman) +- Return early from doAutoPartition if partition allocation fails. (dlehman) +- Reset storage instance if autopart fails. (#492158) (dlehman) +- Assign weights to partition requests when doing manual or kickstart + installs. (clumens) +- Refresh windows immediately to make sure they appear. (clumens) +- Fix problem with format and migrate combo box activation. (dcantrell) +- Fix typo in upgrade.py (dcantrell) +- Move _scheduleLVs and growLVM calls to be inside try/except (dcantrell) +- Correct bounds checking problems in 'Shrink current system' (dcantrell) +- Require libselinux-python (#489107) (dcantrell) +- Do not prompt for NIC selection in cmdline mode (#492586) (dcantrell) +- Do not write /etc/hosts since setup owns that now (#491808) (dcantrell) +- Remove unused self._resize variable. (dcantrell) +- Having 2 raidsets in the same group of devs is possible. (jgranado) +- getDevice returns a string. Use that to look up the device object + (#492465). (clumens) +- Take into account i386->i586 when warning on upgrade arch mismatch. + (clumens) +- Remove unused getVG{Free,Used}Space methods. (clumens) +- We can no longer display Russian correctly in text mode (#491394). + (clumens) +- Clean up the reinitialize LVM warning message (#491888). (clumens) +- Update translation files (#484784). (clumens) +- Include the storage directory when building the .po files. (clumens) +- Merge commit 'origin/anaconda-storage-branch' (clumens) +- Keep VG size property non-negative (rvykydal) +- Grow LVs for kickstart requests too (rvykydal) +- Handle not finding the upgrade root gracefully. (jgranado) +- Use self.name to report that we could not eject cd. (jgranado) +- Fix ppoll() timeout=infinity usage in auditd (#484721). (pjones) +- Use correct parse method for the upgrade command (#471232) (wwoods) +- Rename /etc/modprobe.d/anaconda to /etc/modprobe.d/anaconda.conf (clumens) +- Handle FTP servers that both want and don't want PASS after USER + (#490350). (clumens) +- Only select the Core group in text mode (#488754). (clumens) +- Add created user to default group created for the user. (rvykydal) + +* Wed Mar 25 2009 Chris Lumens - 11.5.0.38-1 +- Fix pylint errors in iw/*.py (hdegoede) +- Rework CryptTab.parse (dlehman). +- Code fixes of errors shown by pylint (mgracik). +- Don't underflow on the busy cursor stack. (clumens) +- "vg" is not valide inside this if. (jgranado) +- Device is sometimes None. (jgranado) +- Fix typo. (#492042) (dlehman) + +* Tue Mar 24 2009 David Cantrell - 11.5.0.37-1 +- Start with a basic /etc/hosts file (#491634) (dcantrell) +- Do not flag every existing partition for resize (#491803) (dcantrell) +- Remove unused noformatCB() function. (dcantrell) +- Remove unnecessary istruefalse() function. (dcantrell) +- Build new _isys.so for updates.img if needed. (dcantrell) +- Get the UUID of each md array we create. (#491796) (dlehman) +- Call udev_settle after committing changes to a disk (#491529) (hdegoede) +- Be a little bit smarter about allocating space to grow parts. (#491761) + (dlehman) +- Check that partition is on the disk before trying to remove it. (#491997) + (dlehman) +- Work around a bug in mdadm incremental assembly. (dlehman) +- Use the same units (MB) for extent size that we do for everything else. + (dlehman) +- Put line breaks in between crypttab entries. (#491938) (dlehman) +- Register the NoDevFS class. (clumens) +- fslabels -> labels. (clumens) +- NFSDevice does not take exists= as a parameter. (clumens) +- Override _setDevice and _getDevice in NFS. (clumens) +- Move resolveDevice into the DeviceTree class. (clumens) +- Move most of the parseFSTab logic into its own function. (clumens) +- We don't even use partedUtils in this module. (clumens) +- PReP formats can never be active. (#491865) (dlehman) +- Move protectedPartition setup into storageInitialize (#491781). (clumens) +- Use the mount and unmount methods on OpticalDevice.format now. (clumens) +- Add a format for ISO9660 filesystems. (clumens) +- getDeviceByName does not expect the CD device to start with "/dev/" + (#491768). (clumens) +- Write the same arch to .discinfo as iutil.getArch() gives us (#490977). + (clumens) +- Don't remove partitions twice. (jgranado) + +* Mon Mar 23 2009 David Cantrell - 11.5.0.36-1 +- Add EFI, Apple Bootstrap, and PPC PReP Boot formats. (dlehman) +- Remove all implicit calls to self.format.destroy from Device classes. + (dlehman) +- Pop the busy cursor when we're done with the wait window (#491736). + (clumens) +- If the new size and old size are the same, treat as a no-op (#491496). + (clumens) +- Let mountFilesystems handling bind mounting /dev (#490772). (clumens) +- Not all FileDevices have parents, so don't assume. (clumens) +- Bind mount formats are mountable. (clumens) +- If a filesystem is already mounted, don't raise an error. (clumens) +- Fix a typo calling the superclass's constructor. (clumens) +- Add a fake device for bind mounting /dev. (clumens) +- If there was an exception leading to the urlgrabber error, log it. + (clumens) +- Fix the import of checkbootloader (#491574). (clumens) +- Add a missing import (#491605). (clumens) + +* Fri Mar 20 2009 David Cantrell - 11.5.0.35-1 +- Fix traceback in FSSet.crypttab. (#491160) (dlehman) +- Fix traceback on upgrade. (#491446) (dlehman) +- Do not include .h and .sh files in updates.img (dcantrell) +- Make PartitionDevice resize work. (dcantrell) +- Reset mouse pointer if we find an unreadable disk. (dcantrell) +- Use label attr instead of non-existent fslabel attr. (#491120) (dlehman) +- Need to notify the kernel of changes before udev settle (katzj) +- Revert "mount and umount commands are in /sbin now, remove from /usr/sbin" + (dcantrell) +- Make some fixes to the rescue mode system selection UI (#489973, #489977). + (clumens) +- Fix text mode autopartitioning (#491282). (clumens) +- Do not use _rnetdev as fstab option for network based / (hdegoede) +- Make root= line in grub.conf and path spec in fstab consistent (hdegoede) +- Fix a reference to the partitions list (#491335). (clumens) +- Do not traceback at the very beginning of rescue mode (msivak) +- Fix traceback when editing encrypted mdraid device in UI. (rvykydal) + +* Thu Mar 19 2009 David Cantrell - 11.5.0.34-1 +- Catch FSError when detecting storage, prevent user from continuing. + (dcantrell) +- If we have no error string, place None in the tuple. (dcantrell) +- Move OUTPUT_TERMINAL definition to isys.h (dcantrell) +- mount and umount commands are in /sbin now, remove from /usr/sbin + (dcantrell) +- Avoid SIGSEGV in doPwMount() when NULL is last parameter (#491192) + (dcantrell) +- Attempt disk commits 5 times before raising an exception. (dcantrell) +- Add boot partition size limit properties and size validation method. + (dlehman) +- Make sure boot flag gets set. (#491170) (dlehman) +- Make bootable a property of PartitionDevice. (dlehman) +- After setting up our random UUID, inform the storage layer (katzj) +- Handle system crappyness. (jgranado) +- Fix up checking for live image backing (katzj) +- Let's not remove our mountpoints (katzj) +- Fix writing the default= line in grub.conf (#490756). (clumens) +- Revert "Fix pruning of destroy actions for preexisting devices." (dlehman) +- Add more blacklisting (katzj) +- Blacklist the live image backing device (katzj) +- Move blockdev blacklisting to be a function (katzj) +- Inhibit devkit-disks during a live install (katzj) +- try to unmount everything from /media on live installs (katzj) +- Fix live installs to not traceback (katzj) +- Fix New partition in UI (rvykydal) + +* Thu Mar 19 2009 David Lehman - 11.5.0.33-1 +- Rework the lvm dialog. (#490301,#490966,#490681,#489870) (dlehman) +- Improve chances of uniqueness from Storage.createSuggestedLVName. (dlehman) +- Fix pruning of destroy actions for preexisting devices. (dlehman) +- Devices should not be resizable unless they exist. (dlehman) +- Try to activate an existing md array after adding each member. (dlehman) +- Indicate filesystem is mountable if we have a mount command. (dcantrell) +- Mount existing filesystems read-only when getting size. (dcantrell) +- Fix some errors in the updates target. (dcantrell) +- Place all mount.* commands in /sbin (dcantrell) +- Fix error message reading and writing in doPwMount() (dcantrell) +- Use booleans in isys.mount() and isys.umount() (dcantrell) +- Add a FIXME comment for setting uuid in VG / LV create (hdegoede) +- Do not traceback when writing anaconda.ks with iscsi with auth info. + (hdegoede) +- Do not write LV uuid to grub.conf, but the filesystem uuid (hdegoede) +- If a mountpoint depends on a network disk at _netdev to its fstab options + (hdegoede) +- Do not hang when creating raid array with member having filesystem + detected (#490891) (rvykydal) +- Destroy and create luks child of raid array too when editing in UI. + (rvykydal) +- Editing non-existent raid device by destroying and creating actions + (rvykydal) +- actionDestroyFormat call takes device, not format (rvykydal) +- Fix getChildren call in partition UI (rvykydal) +- Fix removing of devices with the same name from tree when adding + create action. (rvykydal) +- Do not duplicate requested minor number in edit raid UI list. (rvykydal) +- Offer available partitions when editing non-preexisting raid request. + (rvykydal) +- Don't try to fit the whole StorageDevice.__str__ output into the UI + (#490406). (clumens) +- Make PartitionDevice handle both normal and dmraid partitions (hdegoede) +- Stop overriding __init__ in DMRaidPartitionDevice (hdegoede) +- Set format UUID after creating a format (hdegoede) +- Fix result of updateSysfsPath to be consistent with initial sysfsPath + values (hdegoede) +- Use getDevicesByInstance() for storage.partitions (hdegoede) +- We no longer use iscsiadm anywhere (hdegoede) + +* Tue Mar 17 2009 Jesse Keating - 11.5.0.32-1 +- Typo fix. (clumens) +- Make platform.checkBootRequest work better and not use diskset anymore. (clumens) +- Fix a traceback when looking for PS3 boot partitions (#490738). (clumens) +- FormatArgs -> FormatOptions (#490737). (clumens) +- Fix ppoll() timeout=infinity usage in auditd (#484721). (pjones) +- Simplify kernel package selection. (clumens) +- Look at CPU flags instead of /proc/iomem to determine PAE-ness (#484941). (clumens) +- Tell NM not to touch interfaces when / is on a network disk (hdegoede) +- Get iscsi going with the new storage code (hdegoede) +- Use minihal instead of isys.hardDriveDict in list-harddrives (#488122). (clumens) +- storage.disks never includes disks without media present. (clumens) +- Changed the getDevicebyLabel() to getDeviceByLabel() in devicetree.py (mgracik) + +* Mon Mar 16 2009 David Cantrell - 11.5.0.31-1 +- Don't use disk.maximizePartition anymore. (dlehman) +- Only schedule implicit format destruction if there is formatting to + destroy. (dlehman) +- Reset encryptionPassphrase when we reset the rest of storage. (dlehman) +- Do not create a LUKSDevice if we do not have a way to map the device. + (dlehman) +- Fix handling of new extended partitions during partition allocation. + (dlehman) +- Fix bug in dependency list for partitions. (dlehman) +- Fix inconsistency in variable use in search for free space. (dlehman) +- Check for disk name being in disk.name not in clearPartDisks (dcantrell) +- Create a Makefile target to generate updates.img automatically. (dcantrell) +- When creating free space, handle cases other than clearpart --drives= + (clumens) +- Ignore loop and ram devices (hdegoede) +- devicetree: fix slave addition of incomplete dm / md devices (hdegoede) +- Catch LVMErrors too when tearing down devices (hdegoede) +- Install udev rules in /lib/udev/rules.d instead of in runtime dir + (hdegoede) +- Ignore disk devices with missing media (#488800). (clumens) +- Use correct parse method for the upgrade command (#471232) (wwoods) +- Fix creation of fs options for preexisting encrypted devices. (dlehman) +- Fix lots of buggy behavior in the partition dialog. (dlehman) +- Handle FTP servers that both want and don't want PASS after USER + (#490350). (clumens) +- Fixed the names of the variables for lvm.py functions. (mgracik) +- editPartitionRequest -> editPartition in iw/partition_gui.py (#490384). + (clumens) +- clampPVSize -> clampSize in lvm.py (#490295). (clumens) +- Fix the obvious and stupid typo (#490296). (clumens) +- isys.umount removes mount directory by default (rvykydal) +- Fix tempfile.mkdtemp call. (rvykydal) +- Initialize attribute _mountpoint before using it (rvykydal) +- devicetree.py has _ignoredDisks instead of ignoredDisks. (jgranado) +- Create separate resize actions for formats and devices. (dcantrell) +- Use os.statvfs() to get existing filesystem size. (dcantrell) +- Add resizeArgs for Ext2FS and fix it for BtrFS. (dcantrell) +- Report when we cannot find any free space partitions. (dcantrell) +- Improve resizeDialog text. (dcantrell) +- Raise FSResizeError if filesystem cannot be resized. (dcantrell) +- Handle resizing when setting targetSize for PartitionDevice (dcantrell) +- Let users set the size property of StorageDevices. (dcantrell) +- Add support for kickstart's '--initlabel' option to clearpart. (dlehman) +- Fix display of LV format type for encrypted LVs. (dlehman) +- Make paths somewhat flexible so we'll work in normal environments. + (dlehman) + +* Fri Mar 13 2009 David Lehman - 11.5.0.30-1 +- Fix supportable attribute for cmdline-enabled fstypes. (dlehman) +- Access private attribute for luks dict. (dlehman) +- Schedule format create for newly encrypted preexisting partition. (dlehman) +- Don't traceback if vg.teardown fails in recursive teardown. (dlehman) +- Schedule format create action for newly encrypted preexisting LV. (dlehman) +- Make sure we return something other than None for new requests. (dlehman) +- Add __str__ methods to Device objects. (clumens) +- Add mediaPresent and eject to the OpticalDevice class. (clumens) +- Use the right import path for checkbootloader (#490049). (clumens) +- Rename /etc/modprobe.d/anaconda to /etc/modprobe.d/anaconda.conf (clumens) +- Don't clear partitions containing the install media. (dlehman) +- Wait til everyone knows the format/fs is no longer active. (dlehman) +- Save a copy of the device stack so we can destroy the format. (#489975) + (dlehman) +- Add a deep copy method to Device since we can't just use copy.deepcopy. + (dlehman) +- Fix infinite loops in partition screen populate. (#490051) (dlehman) +- Default to a name based on the uuid for existing luks mappings. (dlehman) +- Use the correct keyword for luks map names ('name', not 'mapName'). + (dlehman) +- Fix getting of number of total devices of sw raid. (rvykydal) +- Only select the Core group in text mode (#488754). (clumens) +- Added test case for devicelib mdraid.py. (mgracik) +- Add created user to default group created for the user. (rvykydal) +- Fix editing of existing logical volume. (rvykydal) +- Add a list that lvm should ignore. (jgranado) + +* Thu Mar 12 2009 David Lehman - 11.5.0.29-1 +- Don't create a PartitionDevice for devices that do not exist (#489122). + (clumens) +- A getter doesn't usually take a parameter (#489965). (clumens) +- Do not write "Running..." to stdout, as that could be tty1. (clumens) +- Call storage.exceptionDisks, not diskset.exceptionDisks. (#489615) + (dlehman) +- Fix typo. (jgranado) +- Fix typo. (dlehman) +- Add udev rules for handling for mdraid arrays. (dlehman) +- Honor the zerombr kickstart directive. (dlehman) +- currentSize is expected to be a float, so convert it to one (#489882). + (clumens) +- It's clearPartDisks, not clearPartDrives. (clumens) +- Get rid of the mappings and ksID as well. (clumens) +- Make sure the device has a diskType before attempting to check what it is. + (clumens) +- Update the volgroup command to work with the new storage code. (clumens) +- Update the raid command to work with the new storage code. (clumens) +- Update the part command to work with the new storage code. (clumens) +- Update the logvol command to work with the new storage code. (clumens) +- addPartRequest is no longer needed. (clumens) +- Don't set default partitioning in every kickstart case. (clumens) +- Clear partitions before scheduling requests. (clumens) +- Always go through doAutoPart. (clumens) +- Format modules import fix (mgracik) +- Fixed the format modules import (mgracik) +- Allow overriding the anaconda udev rules from an updates.img (hdegoede) +- If a pv somehow does not contain a vg_name, do not try to get other vg + info (hdegoede) + +* Wed Mar 11 2009 David Cantrell - 11.5.0.28-1 +- Fix a few bugs in the lvm dialog. (#489022) (dlehman) +- Modify livecd.py to work with new storage backend. (dlehman) +- Be explicit about resetting Disks' partedDisk attribute. (#489678) + (dlehman) +- Deactivate devices after we've finished scanning them. (dlehman) +- Handle the case of removing an unallocated partition from the tree. + (dlehman) +- Try again to set up LVs when we've just added a new PV to the VG. (dlehman) +- Set partition flags in format create/destroy execute methods. (dlehman) +- Make sure we use the newly committed parted.Partition after create. + (dlehman) +- Make device teardown methods more resilient. (dlehman) +- Initialize storage in rescue mode so we can find roots (#488984). (clumens) +- We also need to pack up the extra args tuple, too. (clumens) +- doLoggingSetup keeps growing new arguments, so put them into a dict + (#489709). (clumens) +- Fix anaconda udev rules to not require pre-existing device nodes (hdegoede) +- Hook up 'Shrink current system' dialog to new storage code. (dcantrell) +- Fix _getCheckArgs() in class FS. (dcantrell) + +* Tue Mar 10 2009 David Cantrell - 11.5.0.27-1 +- Fix action pruning to handle more complex scenarios. (dlehman) +- Schedule destruction of any existing formatting along with the device. + (dlehman) +- Add a size attribute to mdraid arrays. (dlehman) +- Speed up partitioning screen redraws by trimming workload where possible. + (dlehman) +- Create partitions with exactly the geometry we calculate. (dlehman) +- Fix name collision between formats.mdraid and devicelibs.mdraid. (dlehman) +- Destruction of the member device formatting will be handled elsewhere. + (dlehman) +- Fix a typo (jkeating) +- Fix pruning between two destroy actions on the same device (rvykydal) +- Use the pyblock functions when possible. (jgranado) +- We are searching a list, not a dict now (rvykydal) + +* Mon Mar 09 2009 David Cantrell - 11.5.0.26-1 +- Move the recursive teardown of all devices out of processActions. (dlehman) +- Clean up handling of /proc, /sys, /dev/pts, /dev/shm entries. (dlehman) +- Fix several minor bugs preventing upgrade/rescue mount. (#488946) (dlehman) +- Only populate the device tree on demand. (dlehman) +- Prune actions by device based on path, not object-id. (dlehman) +- Rewrite action sort so it works correctly. (dlehman) +- Do a separate disk.commit for each partition add/remove. (dlehman) +- Fix bug keeping track of best free region/type/disk info. (dlehman) +- Return early if doAutoPart is False, but clearpart first if kickstart. + (dlehman) +- Recognize PS3 as a valid machine type (#489263). (clumens) +- Move the mdRaidBootArches logic into the platform module. (clumens) +- stdout and stderr may also need to be created. (clumens) +- Fix booty for dmraid (hdegoede) +- It's self.origrequest, not self.origreqest (#489036). (clumens) +- Added crypto.py unittest; Updated devicelibs tests baseclass.py and lvm.py + (mgracik) +- Start storage before parsing the kickstart file. (clumens) +- Make sure autopart without any clearpart command will fail. (clumens) +- Update storage flag on ks autopart (rvykydal) +- Use correct storage attribute for ks clearpart (rvykydal) +- Catch the new _ped.DiskLabelException for unrecognized disklabels. + (dlehman) +- Catch all failures from making parted objects in exceptionDisks. (dlehman) +- various dmraid fixes. (jgranado) +- Implement the format disk question as a callback. (jgranado) +- Add dmraid functionality to new storage code. (jgranado) +- Do not pass None values into nonmandatory arguments, you are screwing the + default values.. (msivak) + +* Thu Mar 05 2009 David Cantrell - 11.5.0.25-1 +- Schedule device destroy actions for partitions last. (dlehman) +- Pass storage.disks, not storage, to createAllowed.... (#488860) (dlehman) +- Nodev filesystems always exist. And the device is arbitrary. (dlehman) +- Include proc, &c filesystems in fstab and FSSet.{mount/umount}Filesystems. + (dlehman) +- Remove FSSet.writeFSTab. That job is handled elsewhere. (dlehman) +- Add properties to FSSet to provide the nodev entries. (dlehman) +- Fix incomplete format in Storage.deviceImmutable. (dlehman) +- Make sure we use the same disk the free space is on. (#488807) (dlehman) +- Prevent clobbering of name 'mdraid' by qualifying it. (dlehman) +- Handle unformatted disks and cdroms in Storage.exceptionDisks. (dlehman) +- Add resizeArgs property for resizable filesystems. (dcantrell) +- Fill out class NTFS a bit more. (dcantrell) +- Add fsckProg property to class FS. (dcantrell) +- Ext2FS.migratable(self) -> Ext2FS.migratable (dcantrell) +- Fix StorageDevice.minSize() and PartitionDevice.maxSize() (dcantrell) +- Center resize window on the screen. (dcantrell) +- Do not raise DeviceError if not bootable device is found. (dcantrell) +- Do an even more thorough job of ignoring disks libparted doesn't like. + (clumens) +- Fix a couple problems on the "Change device" bootloader dialog. (clumens) +- Fix a typo when writing out the mdadm config file. (clumens) +- Remove all uses of isys.cdromList, which no longer exists. (clumens) +- Check to see if we're on S390 on the congrats screen (#488747). (clumens) +- Handle non-fatal errors more gracefully in addUdevDevice. (dlehman) +- partRequests no longer exists, so don't try to import it (#488743). + (clumens) +- When building the exceptionDisks list, skip devices libparted doesn't + like. (clumens) +- Iterate over devicetree.devices.values, not devicetree. (dlehman) +- Add a get() method to Flags, since it pretends to be a dictionary. + (clumens) +- Stop with the fsset usage. (dlehman) +- Format message string after translation not before (msivak) +- We need newer python-cryptsetup because of the default values for cipher + and keysize for luskFormat (msivak) +- If a drive is not initialized, offer reinitialization or ignoring the + drive to the user (msivak) +- More syntax errors / traceback fixes (hdegoede) +- Fix syntax errors (rvykydal) +- Implement Storage.sanityCheck, mostly from old partitions code. (dlehman) + +* Thu Mar 5 2009 Dave Lehman - 11.5.0.24-3 +- Fix booty's desire to import fsset. +- Fix attempt to set read-only attr "removable" in DiskDevice.__init__ + +* Thu Mar 05 2009 Peter Jones - 11.5.0.24-2 +- Add EFI boot.iso generation. + +* Wed Mar 4 2009 Dave Lehman - 11.5.0.24-1 +- Storage test day. + +* Fri Feb 20 2009 David Cantrell - 11.5.0.23-1 +- Remove old content from utils/ (dcantrell) +- Ensure request.drive is always a list (#485622) (dcantrell) +- Pick up pyblock if it exists in block/ on an updates.img. (dcantrell) +- Don't check for a swapfs on things that aren't partitions (#485977). + (clumens) +- Perform ext3->ext4 filesystem migration if ext4migrate is given (#484330). + (clumens) +- Translate i?86 into i386 as a base arch. (jkeating) +- Teach upd-instroot about i586 arch, for sake of glibc.i586/openssl.i586 + (jkeating) +- Fix the obvious typo. (clumens) +- filer.login raises an exception with it can't login, not returns None + (#486454). (clumens) +- Take into account that a parted.Partition's _fileSystem can be None + (#485644). (clumens) + +* Thu Feb 19 2009 Chris Lumens - 11.5.0.22-1 +- Updated Romanian translation (alexxed) +- Remove the qla2xxx line from mk-images again (wwoods). +- Fix broken shell syntax from 3bdcd64d2 (jkeating) +- The VLGothic-fonts package has changed name and location (#486080). + (clumens) + +* Tue Feb 17 2009 David Cantrell - 11.5.0.21-1 +- Building for i586 only now in Fedora. (dcantrell) + +* Tue Feb 17 2009 David Cantrell - 11.5.0.20-1 +- Fix indentation on upd-instroot (kanarip) +- Fix the indentation in mk-images (kanarip) +- Remove unused iface_netmask2prefix() function. (dcantrell) +- A parted.Disk has no attribute named "dev". It's named "device" + (#486007). (clumens) +- Use brandpkgname for the efi art too (katzj) +- Let's use the product string for a brandpackage name. (kanarip) +- Fix indentation in mk-images.efi (kanarip) +- Fix indentation in buildinstall script (kanarip) +- It's part.active, not part.is_active(). (clumens) +- File the basic traceback as the first comment instead of a generic + message. (clumens) +- Encode our upgrade policy in productMatches/versionMatches and enforce it. + (clumens) +- If we'd show package selection on kickstart installs, also show tasksel. + (clumens) + +* Fri Feb 13 2009 Chris Lumens - 11.5.0.19-1 +- Fix build errors in the new net.c code. (clumens) + +* Fri Feb 13 2009 Chris Lumens - 11.5.0.18-1 +- Require pyparted >= 2.0.0 (dcantrell) +- Update to use the new pyparted. (dcantrell, clumens) +- Replace non UTF-8 char for hiding password chars with UTF-8 (#485218) + (hdegoede) +- Use a better test for when we're in text mode (#484881). (clumens) +- Add iBFT support to loader (msivak) +- Hardlink the initrd.img since we're linking the vmlinuz as well. (jkeating) +- Check if ld-linux.so.2 is a link already, before removing it (dcantrell) + +* Wed Feb 11 2009 Hans de Goede - 11.5.0.17-1 +- Revert broken German translation fixes so that we will build again +- Sync up module list (#484984) (katzj) + +* Wed Feb 11 2009 Hans de Goede - 11.5.0.16-1 +- Rewrite iscsi support using libiscsi (hdegoede) + +* Mon Feb 09 2009 David Cantrell - 11.5.0.15-1 +- Fix gptsync/lib.c for gcc strict aliasing rules. (dcantrell) +- Fix gcc warning for gptsync memset() usage. (dcantrell) + +* Mon Feb 09 2009 David Cantrell - 11.5.0.14-1 +- Rewrite mdio_read() in linkdetect.c for strict aliasing rules. (dcantrell) + +* Mon Feb 09 2009 Chris Lumens - 11.5.0.13-1 +- Check that required kickstart commands are present early on (#483048). + (clumens) +- Simplify the text mode interface. (clumens) +- Fix truncated translation string for livecd installs (#484430). (clumens) +- Calcutta -> Kolkata (#484638). (clumens) +- Fix runpychecker.sh to find zonetab module (hdegoede) +- Strip invalid characters from automatically made VG/LV names (#483571). + (clumens) +- Fix systemtime setting during installation (#6175, #461526). (rvykydal) +- Workaround MMC block devs showing up not as disks from hal (#481431) + (katzj) +- Add some new false positives to pychecker false positives filtering + (hdegoede) +- Make kickstart timezone value check consistent with system-config-date + (#483094) (rvykydal) +- Make ext4 default in UI filesystem selection (bug #481112) (rvykydal) +- Redirect iscsiadm's stderr away from the console. (clumens) +- Pay attention to the stderr parameter to execWithCapture. (clumens) +- For python2.6, our showwarnings function must take a line= parameter. + (clumens) +- If ext4dev is seen in the /etc/fstab, treat it as ext4 instead (#474484). + (clumens) +- Make sure to call _getConfig from our YumSorter subclass. (clumens) +- Set proper text mode font for Greeks (#470589) (msivak) +- Lots of translation updates. + +* Thu Jan 29 2009 David Cantrell - 11.5.0.12-1 +- If ks=nfs:... is given, don't try to find the file via boot options + (#480210). (clumens) +- Fix cdrom install on machines with no network devices (wwoods) +- updated fuzzy strings (jsingh) +- Use modinfo to find out what firmware we need in initrd (wwoods) +- Use the preconf object for yum configuration now (jantill). (clumens) +- Updated Dutch translation adn only 1 -fuzzy- string left (zuma) +- Add a boot target for the xdriver=vesa parameter and document it. (clumens) +- repo.proxy is now a property, so check before setting it (#481342). + (clumens) + +* Wed Jan 21 2009 David Cantrell - 11.5.0.11-1 +- Fix a logic problem with network file write outs. (480769) (jkeating) +- Only run selectBestKernel, selectBootloader, etc. for new installs. + (wwoods) + +* Mon Jan 19 2009 Chris Lumens - 11.5.0.10-1 +- btrfs install support (sandeen) +- Default / to be ext4 (katzj) +- Allow live installs to use ext4 as root and make the error message clearer + (katzj) +- Add support for Maithili and Nepali (#473209). (clumens) + +* Fri Jan 16 2009 Chris Lumens - 11.5.0.9-1 +- Cracklib moved locations, account for this in our keepfiles. (jkeating) +- Look in the right path for kernel module lists. (jkeating) +- Fix more problems in expandModuleSet, based on a patch from markmc + (#480307). (clumens) +- Allow ext4 without magic argument (keep a flag for migrate) (katzj) +- Fix pulling in network modules (katzj) +- Support mounting NTFS filesystems (#430084) (katzj) +- dejavu fonts changed package names, pick up new names. (jkeating) +- TightVNC is now the default VNC server in Fedora (#480308). (clumens) +- Only skip (over)writing netconfig if we have an actual instPath (jkeating) +- The sets module is deprecated, so no longer use it. (clumens) + +* Wed Jan 14 2009 David Cantrell - 11.5.0.8-1 +- Fix D-Bus usage in get_connection in loader (jkeating) + +* Wed Jan 14 2009 Chris Lumens - 11.5.0.7-1 +- How to get raw pages from the wiki has changed again. (clumens) +- Make sure the 'anaconda' file gets the right detected type (alsadi, + #479574). +- Include the missing import. (clumens) + +* Thu Jan 08 2009 David Cantrell - 11.5.0.6-1 +- Collect DSO deps for NetworkManager plugins. (dcantrell) + +* Thu Jan 08 2009 Chris Lumens - 11.5.0.5-1 +- NetworkManager system settings plugins were renamed, change mk-images. + (dcantrell) +- Add a message to install.log when package installation is done (#476953). + (clumens) +- Add support for specifying which partition to upgrade (atodorov, #471232). + (clumens) +- pykickstart has a new version of the upgrade command. (clumens) +- Log all calls to mount to /tmp/program.log as well. (clumens) +- Log everything from execWithRedirect or execWithCapture (#467690). + (clumens) +- Update partedUtils.py:findExistingRootPartitions to return UUID + (atodorov). (clumens) +- Don't skip the method screen when going back and forth (#477991). (clumens) +- Die on errors from upd-instroot/mk-images rather than continuing on (katzj) +- The FTP USER command does not need to be followed by a PASS (#477536). + (clumens) + +* Mon Jan 05 2009 David Cantrell - 11.5.0.4-1 +- Workaround compile error due to (# 478663) (hdegoede) +- Various packaging fixed from review (#225246) (hdegoede) +- Show the header in certain non-lowres cases (#478765, alsadi AT + ojuba.org). (clumens) +- Remove doMultiMount. (clumens) +- Use mount -t auto instead of passing a list of valid fstypes (#477328). + (clumens) +- Fix case sensitivity when searching for headers (kanarip) +- Fix a traceback in checking for network install (ricky AT + fedoraproject.org). (clumens) + +* Tue Dec 23 2008 David Cantrell - 11.5.0.3-1 +- Initialize domainname to None (#477831) (dcantrell) +- Do not import unused modules. (dcantrell) +- Call '/sbin/udevadm settle' instead of /sbin/udevsettle (dcantrell) + +* Tue Dec 23 2008 David Cantrell - 11.5.0.2-1 +- Require latest pykickstart for repo command (clumens) +- Remove libdhcp* from scripts/upd-instroot (dcantrell) +- methodstr -> self.methodstr (dcantrell) +- Rewrite iface_ip2str() to use libnm-glib (dcantrell) +- Fix a few syntax error caugh by pychecker (hdegoede) +- Remove isys.e2fslabel() and isys.getraidsb() (dcantrell) + +* Thu Dec 18 2008 David Cantrell - 11.5.0.1-1 +- Remove plural forms from po/tg.mo (katzj) + +* Thu Dec 18 2008 David Cantrell - 11.5.0.0-1 +- Reduce direct D-Bus calls in isys/iface.c. (dcantrell) +- Allow 'ks' to function as it once did (#471812) (dcantrell) +- Fix telnet install support (#471082) (dcantrell) +- Call 'udevadm settle' instead of 'udevsettle'. (dcantrell) +- When using anaconda with kickstart file with UI mode - do not show the VNC + question (#476548) (msivak) +- Check error from asprintf() correctly for dhcpclass handling. (dcantrell) +- Use libnm_glib in net.c:get_connection() (dcantrell) +- Add libnm_glib CFLAGS and LIBS to loader's Makefile. (dcantrell) +- BR NetworkManager-glib-devel. (dcantrell) +- Only write the short hostname to the localhost line (#474086) (dcantrell) +- Updated Tajik Translation - Victor Ibragimov (victor.ibragimov) +- Copy /etc/dhclient-DEV.conf file to target system (#476364) (dcantrell) +- Use macros for D-Bus paths (dcantrell) +- Let X tell us when it's launched rather than just sleeping. (ajax) +- When there's no baseurl, set a default of [] instead of [''] (#476208). + (clumens) +- cracklib now raises exceptions on bad passwords (rzhou, #476312). (clumens) +- Make sure ssh doesn't get duplicated in the open port list (#474937). + (clumens) +- mdraid1: default to putting grub on partition instead of mbr (#217176) + (hdegoede) +- Don't install the games group as part of office/productivity (#472324). + (clumens) +- Don't dump encryption passphrases. (dlehman) +- Write anacdump.txt upon receipt of SIGUSR2 (from clumens). (dlehman) +- Use stacks instead of tracebacks in traceback handlers. (dlehman) +- Unmount swap devices when migrating filesystems, then reactivate + (#473260). (clumens) +- Handle both /dev/sr0 and sr0, since that's what cdromList gives (#475083). + (clumens) +- In iface_ip2str(), make sure to advance to next item before continue. + (dcantrell) +- We already have _GNU_SOURCE defined in Makefile.inc (dcantrell) +- Remove XXX comment in net.c about GATEWAY (dcantrell) +- Use strverscmp() from glibc in place of rpmvercmp() (dcantrell) +- Remove readLine() function from loader/loadermisc.c (dcantrell) +- Do not write SEARCH line to ifcfg-DEVICE file (#474858) (dcantrell) +- Preserve existing network configuration files during install (#461550) + (dcantrell) +- Send unique vendor class identifier unless user specifies one. (dcantrell) +- Avoid tracebacks when filling in static network config fields (#474275) + (dcantrell) +- Prevent network install when no network devices are found (#470144) + (dcantrell) +- Remove markup from text before printing it in cmdline mode (#470253). + (clumens) +- Move strip_markup() into iutil. (clumens) +- Fix up plural forms header so that python doesn't blow up for us (katzj) +- Change text to reflect Jesse's comments (katzj) +- Add support for the Tajik language (#455963). (clumens) +- Add a button to the UI to ignore all missing packages. (clumens) +- First small eu.po transtation, just to be sure that the system is set up + OK. (mikel.paskual) +- mini-wm: Turn on automatic window redirection. (ajax) +- Better naming for LVM volume groups and logical volumes (#461682) + (dcantrell) +- Partition requests can be None when populating the tree. (#474284) + (dlehman) +- Say we are unable to configure the network interface (#467960) (dcantrell) +- Match textw/network_text.py strings to iw/network_gui.py (#470145) + (dcantrell) +- In addSnap(), check snapshots for data key before continuing (#433824) + (dcantrell) +- Load FCP modules early for CD/DVD install (#184648) (dcantrell) +- Update mk-s390-cdboot.c to work with large kernel images (#184648) + (dcantrell) +- Make sure fstype exists before we try to test it (#473498). (clumens) +- Updated a small correction in kn locale (svenkate) +- Use modules.* files for finding modules of a type rather than modinfo + (katzj) +- Make complete text mention updates (#244431) (katzj) +- Make text for autopartitioning types clearer (#441350) (katzj) +- Allow installing grub on the MBR if /boot is on mdraid (#217176) (hdegoede) +- Fix some spelling errors in German translation (fabian) +- Make the required media dialog less wordy (#469557). (clumens) +- returnNewestByName now raises an error instead of returning [] (#472462). + (clumens) +- Fix death on login of an OLPC on a live image (katzj) +- Fix ld-*.so globbing for glibc-2.9 . (pjones) +- Do not bring up network for non-remote kickstart locations (#471658) + (dcantrell) +- Resolve dm-X devices returned by pvdisplay. (#448129) (dlehman) +- More shell script syntax fixing (katzj) +- Only bring up the network dialog on package failures if required + (#471502). (clumens) + +* Wed Nov 12 2008 Chris Lumens - 11.4.1.58-1 +- Add comps groups for new repos that are added (#470653) (katzj) +- Support upgrades of systems whose rootfs is on an LV. (#471288) (dlehman) +- Use hasPassphrase() instead of directly accessing passphrase member. + (dlehman) +- Don't dump private class members (those with leading "__") (dlehman) +- Explicitly close the CD drive after the user hits "continue" (#375011) + (pjones) +- Fix shell syntax error (#471090) (ivazqueznet) +- Save the /etc/fstab before overwriting it on upgrades (#452768, #470392). + (clumens) + +* Tue Nov 11 2008 David Cantrell - 11.4.1.57-1 +- Fix more UnicodeDecodeErrors, hopefully for good this time (#470733). + (clumens) +- iscsi do missing value check only once (hdegoede) +- Don't try to label XFS filesystems on livecd installs (#470951). (clumens) +- Include cracklib .mo files and look up strings in the right domain. + (clumens) +- Bugzilla has changed its return values for a couple queries. (clumens) +- Set the default keyboard based on the language (#470446). (clumens) +- Prevent traceback for vnc installs on KVM guests (#470559) (dcantrell) +- Bring up networking early enough for syslog= param (#470513) (dcantrell) +- Sleep a bit before calling udevsettle in iscsiTarget.login (#470073, + #466661) (hdegoede) +- kickstart, iscsi do not call iscsi.startup after startIBFT has been called + (hdegoede) +- Do not stop and restart iscsid when rescanning disks/partitions (#470223) + (hdegoede) +- iscsi.startup should not login to targets as we are already logged in + (#470230) (hdegoede) +- Remove obsolete normally never reached code from _stopIscsiDaemon + (#470229) (hdegoede) +- The function getEncryptedDevice gets called correctly expect when we are + in (jgranado) +- More translations + +* Thu Nov 06 2008 David Cantrell - 11.4.1.56-1 +- Don't have the key icon take up so much space on the LUKS dialog + (#470338). (clumens) +- Avoid getting linux-base in the kernel list (katzj) +- Deselect groups when we reset things also (#469854) (katzj) +- make iscsi login code wait for udev to create the devices (#466661, + #470073) (hdegoede) +- Set the correct path when using the directory chooser. (clumens) +- We always need a wait window, not just when the repo has a name. (clumens) +- Set initial state of IP configuration fields in text mode (#469933) + (dcantrell) +- Prevent traceback when there are no network devices (#469339) (dcantrell) +- Indentation fix. (pjones) +- Let users edit net settings on network failure in stage 1 (#465887) + (dcantrell) +- Move startNewt later to avoid printing extra messages on the screen + (#469687). (clumens) + +* Mon Nov 03 2008 David Cantrell - 11.4.1.55-1 +- Revert "Make sure dialog deletions take effect sooner (#455676)." (clumens) +- Don't set up the launcher for the installer on XO (katzj) +- Whitespace cleanups for timezone.py (dcantrell) +- Do not store mount options in loaderData->instRepo (#467760) (dcantrell) +- Make sure we look up the IP address for the correct device (#469439) + (dcantrell) +- Remove unused bool() function. (dcantrell) +- Check for required space for / on live installs (#468867) (katzj) +- Add a basic method for checking the minimal size needed for a backend + (katzj) +- Fix typo that somehow snuck in (katzj) +- If there's no language selected, don't traceback (#469578). (clumens) +- Improve filtering of non-available groups (#469438) (katzj) +- filer.py: set defaultProduct in __init__ (hdegoede) +- Fix indentation error in filer.py (again) (hdegoede) +- Rebuild keymaps to get rid of trq.map (#469433). (clumens) +- Provide sample punch card reader script for s390x (#462953) (dcantrell) +- Fix a typo that shouldn't have even gotten though. (clumens) +- Check that the platform and product are also correct (#469367). (clumens) +- Remove cio_ignore functionality for s390x (dcantrell) +- Remove bootdisk/s390 (dcantrell) +- If method=nfs: is given, check if it's really an NFSISO install (#468885). + (clumens) +- Get the right list elements for the iscsi text interface (#466902). + (clumens) +- Don't traceback when displaying error messages (#469372). (clumens) +- Make sure we differentiate locked luks devs from deleted ones. (dlehman) +- Fix a typo that breaks kickstart with encryption. (#469318) (dlehman) + +* Thu Oct 30 2008 David Cantrell - 11.4.1.54-1 +- Call startNewt earlier than network bring up (#469171). (clumens) +- Write out the path to the repo, not anaconda-ks.cfg (#467753). (clumens) +- Allow specifying devices by path if they're files (#468504) (katzj) +- Fix the last pychecker warnings in master (hdegoede) +- Add --strict option to runpychecker.sh (hdegoede) + +* Wed Oct 29 2008 David Cantrell - 11.4.1.53-1 +- Don't sleep(5) after xrandr (ajax) +- Force DPI to 96 even harder (#458738) (ajax) +- Don't try to switch VT to the one that X is on (ajax) +- Only copy /etc/resolv.conf if instPath != '/' (dcantrell) +- 'is not' -> '!=' (dcantrell) +- Write --dhcpclass instead of --class to the anaconda ks file. (jgranado) +- Fix 2 issues in pyparted found by pychecker (hdegoede) +- Add a bit of documentation to the top of runpychecker.sh (hdegoede) +- Add runpychecker.sh script and pychecker-false-positives file (hdegoede) +- Fix saving tracebacks via scp while in text mode. (clumens) +- Search for the hash in the whiteboard, not as the entire whiteboard. + (clumens) +- Fix various syntax errors caught by PyChecker (hdegoede) +- Wouldn't it be nice to have some real documentation in filer.py? (clumens) +- Make sure the productVersion given by .treeinfo exists in bugzilla + (#468657). (clumens) + +* Mon Oct 27 2008 David Cantrell - 11.4.1.52-1 +- Let DNS lookups work from %%post scripts (#468132) (dcantrell) +- Do not use /.tmp for temporary files (#468720) (dcantrell) +- Don't treat encrypted PVs as available if we don't have the key. (#465240) + (dlehman) +- Do all new device passphrase prompting from partitioningComplete. (dlehman) +- Fix the obviously stupid typo. (clumens) +- There's a new version of the firewall command for F10 (#467753). (clumens) +- Another fix for printing package summaries in text mode (#468283). + (clumens) +- Fix traceback in network.bringUp() (#468651) (dcantrell) +- lvresize requires a --force arg now (#468478) (katzj) +- Include return code on resize failure error message (#468479) (katzj) + +* Fri Oct 24 2008 David Cantrell - 11.4.1.51-1 +- Catch UnicodeDecodeError so traceback messages display anyway. (dcantrell) +- Do not write NM_CONTROLLED=yes to ifcfg files (#468028) (dcantrell) +- Log D-Bus messages at ERROR or INFO level. (dcantrell) +- Write dhcpclass to the dhclient conf file for the device (#468436) + (dcantrell) +- Tell NetworkManager not to touch network interfaces when / is a netfs + (hans) +- Catch more X failures and fallback to text (#467158). (clumens) +- Fix a typo when using network --gateway (#468364). (clumens) +- Fix icon (#468273) (katzj) +- Remove extra debug info. (pjones) +- Fix the damn spinner in the progress bar. (pjones) +- Fix whitespace. (pjones) +- Fix "looking for installation images" when there's no disc at all. (pjones) +- Make sure dialog deletions take effect sooner (#455676). (clumens) +- Make cdrom drive door status messages be INFO not DEBUG. (pjones) +- Don't switch to tty6 on vnc installs. (clumens) +- Update font list (#462295). (clumens) +- Don't display the entire lengthy device description (#467825). (clumens) +- Fix ext4 detection on existing partitions (#467047) (rvykydal) +- Make sure we handle the /tmp/method file for FTP correctly (#467753). + (clumens) +- Do not write NM_CONTROLLED=yes to ifcfg files (#468028) (dcantrell) +- Revert "dhclient-script not needed for NetworkManager" (clumens) +- Skip Installation Repo when writing out repo kickstart lines. (clumens) +- Correct media check docs (#468061). (clumens) +- Many translation updates + +* Fri Oct 17 2008 Chris Lumens - 11.4.1.50-1 +- Update several font package names that we were missing. (clumens) +- Only bring up the netconfig dialog if the repo requires networking. + (clumens) +- cmdline.py: Fix a small typo in a message (rh 467338) (hansg) +- Enable CCW devices used for installation (#253075) (dcantrell) +- I don't know what trq.map.trq-map is, but let's not include it. (clumens) +- If networking is needed for yum repos, bring it up before fetching + repodata. (clumens) +- Force DPI to 96 when launching X. (#458738) (ajax) +- Lots of translation updates. + +* Tue Oct 14 2008 David Cantrell - 11.4.1.49-1 +- Make kickstart installs work again (#374271, #392021, #448096, #466340, + #466304) (dcantrell) +- Let users go Back when loading updates. (dcantrell) +- Write ifcfg files to /etc/sysconfig/network-scripts instead of /.tmp + (dcantrell) +- Handle unknown hosts in getDefaultHostname (#466775) (dcantrell) +- Try to look up the hostname by the IP address NM reports (#466775) + (dcantrell) +- NM no longer provides the hostname as a property (#466775). (clumens) +- ext4dev -> ext4 (esandeen). (clumens) +- Move persistent network udev rule to under /etc (#464844). (clumens) +- Update keymaps to include latest Romanian settings (#466117). (clumens) +- Take ip= parameter values by not resetting ipinfo_set. (dcantrell) + +* Fri Oct 10 2008 David Cantrell - 11.4.1.48-1 +- Remove unnecessary STEP_IP code. (dcantrell) +- Fix how configureTCPIP() returns. (dcantrell) +- Write new sysconfig data to a tmpdir first, then move in place. (dcantrell) +- Write NM_CONTROLLED=yes rather than NM_CONTROLLED= (dcantrell) +- Get rid of some iface flags that were not doing anything anymore. + (dcantrell) +- Generate new config files in /.tmp in writeEnabledNetInfo() (dcantrell) +- Remove unused variables from configureTCPIP() (dcantrell) +- Do not call get_connection() twice for DHCP. (dcantrell) +- Ask for language and keyboard in rescue mode (#466525). (clumens) +- Fix bringing up the network in rescue mode (#466523). (clumens) +- If we don't have a translation for a lang name, just use the English + (#466515) (katzj) +- Disable some more IPv6 checks. (clumens) +- Fix a typo (second part of #466374) (katzj) + +* Thu Oct 09 2008 David Cantrell - 11.4.1.47-1 +- Tag problems in pkgcvs. Wish we still had force-tag + +* Thu Oct 09 2008 David Cantrell - 11.4.1.46-1 +- Pull in static network settings from the boot: line (#465270) (dcantrell) +- Do not segfault when going back to select a new interface (#465887) + (dcantrell) +- Do not test for DNS settings in mountNfsImage() (dcantrell) +- Populate struct iface correctly in setupIfaceStruct() (dcantrell) + +* Thu Oct 09 2008 Chris Lumens - 11.4.1.45-1 +- Fix sorting of repos so we always return an integer value (#466174). + (clumens) +- Change the upgrade progress bar to pulse (#466053). (clumens) +- Mark iscsi disks not used for / as autostart (rh461840) (hans) +- Always display the wait window when fetching repo information. (clumens) +- Lazily unmount everything before killing NetworkManager (#463959). + (clumens) +- lang-names really does need to depend on subdirs (katzj) +- Reset targetLang on language change (#465981) (katzj) +- Honor static net parameters with NM (#465270) (dcantrell) + +* Mon Oct 06 2008 David Cantrell - 11.4.1.44-1 +- Do not rely on loaderData->noDns to tell if we have DNS configured. + (dcantrell) +- Skip askmethod dialog if user passes repo= and stage2= (dcantrell) +- Reset resolver in get_connection() (dcantrell) +- Fix problems dealing with PXE boot and the ksdevice= parameter. (dcantrell) +- Disable more IPv6 code in loader for now. (dcantrell) +- Write BOOTPROTO=static for manual IPv4 config. (dcantrell) +- Disable IPv6 widgets for F-10. (dcantrell) +- Add iwlagn driver firmware (#465508). (clumens) +- Move starting HAL to after we've probed for hardware. (clumens) +- Don't try to load a couple modules that no longer exist. (clumens) +- The Chinese font package has changed names (#465290). (clumens) +- Fix a traceback when there's no ksdevice given (#465638). (clumens) +- Fix traceback in post install configuration (hans) + +* Fri Oct 03 2008 David Cantrell - 11.4.1.43-1 +- Disable IPv6 interface widgets in loader for now. (dcantrell) +- Start NetworkManager earlier (#462083) (hans) +- Work around gtk2 bug (#465541) (hans) +- Move our yum.conf out of /etc (#465160) (katzj) +- Correctly display the IP address a vnc viewer should connect to (#465353). + (clumens) +- lohit-fonts-malayam has been replaced by smc-fonts-meera (#456449). + (clumens) +- Fix a typo in cleaning up repos. (clumens) +- Fix the mount error reading for real this time (pjones, #465250). (clumens) +- Support ksdevice=link when booting from boot.iso. (dcantrell) +- Automatically select NIC based on ksdevice= boot parameter. (dcantrell) + +* Wed Oct 01 2008 David Cantrell - 11.4.1.42-1 +- Revert "Finally controlled the plural issue at #508 in Japanese" + (dcantrell) + +* Wed Oct 01 2008 David Cantrell - 11.4.1.41-1 +- Fix text inconsistency (#465165). (clumens) +- If there's an error running Xvnc, also print it to the console. (clumens) +- Set the installation repo when using the askmethod UI (#463472). (clumens) +- Fix a segfault when the wrong HDISO repo parameter is given. (clumens) +- Remove the 'Installation Repo' cache directory after install (#464853). + (clumens) +- If there aren't any usable NICs, don't write out a config (#465127). + (clumens) +- It helps to specify what the method string should be split on (#464855). + (clumens) +- Gateway and nameserver are optional for static network configuration. + (dcantrell) +- Store nameserver in NetworkDevice object. (dcantrell) +- Fix a traceback calling enableNetwork (#464849). (clumens) +- Enable groups when creating new repos since yum doesn't do that now. + (clumens) +- Update FQDN patch to fix a couple tracebacks (#464191). (clumens) +- Fix static network configuration from boot.iso installs. (dcantrell) +- Use all caps naming for the netdev keys. (dcantrell) +- Left justify text in ui/netconfig.glade interface. (dcantrell) +- Use the right attribute for repo URLs. (clumens) +- Use fullscreen for small screens (#444943) (katzj) +- Another try at fixing up reading errors from mount. (clumens) +- Don't traceback if no baseurl has been set yet. (clumens) +- Allow users to enter a hostname or FQDN during installation (#464191) + (dcantrell) +- Whitespace cleanups. (dcantrell) +- Fix mk-s390-cdboot on s390x (#184648) (dcantrell) +- Run all text through unicode() before putting it into the TextBuffer. + (clumens) +- Add reverse chap iscsi bits for kickstart (hans) +- Properly center the passphrase entry dialog. (clumens) +- Fix test for an empty hostname. (clumens) +- Support installs to SD via MMC (#461884) (katzj) +- Set ANACONDA_PRODUCTNAME, etc from /etc/system-release (#464120) (alsadi) +- Reduce code duplication by moving methods into backend (katzj) +- Select packages after repos are set up (#457583) (katzj) +- Add a basic reset method (katzj) +- Cleanups and simplifications to repo setup (clumens) (katzj) +- Revert "Revert "lang-names should really only depend on lang-table"" + (katzj) +- Fix lang-name generation + fix traceback with LANG=C (katzj) +- Allow going back to the method selection screen on error (#463473). + (clumens) +- Make the boot loader device dialog less ugly (#463489). (clumens) +- Look in images/ for install.img on HDISO (#463474). (clumens) +- Sort Installation Repo to the top of the repo list. (clumens) +- Fuzzy string to fix translation build (katzj) + +* Wed Sep 24 2008 David Cantrell - 11.4.1.40-1 +- Fix network interface bring up in text mode (#463861, #462592) (dcantrell) +- Bring back isys.resetResolv() and fix NetworkManager polling in + network.py. (dcantrell) +- Poll 'State' property from NetworkManager in network.bringUp() (dcantrell) +- Log error in rescue mode is network.bringUp() fails. (dcantrell) +- Set the first network device in the list to active. (dcantrell) +- Get rid of firstnetdevice in Network (dcantrell) +- Do not write /lib/udev.d rules if instPath is '' (dcantrell) +- Fix problems with bringDeviceUp() calls (#463512) (dcantrell) + +* Mon Sep 22 2008 David Cantrell - 11.4.1.39-1 +- Fix a traceback when getting the interface settings (#462592). (clumens) +- self.anaconda -> anaconda (clumens) + +* Sat Sep 20 2008 David Cantrell - 11.4.1.38-1 +- Restore old lang-names generation method (dcantrell) +- Remount /mnt/sysimage/dev after migrating filesystems. (clumens) +- Use the instroot parameter like we should be doing. (clumens) + +* Fri Sep 19 2008 Chris Lumens - 11.4.1.37-1 +- Set the filename on the traceback when we upload it (wwoods). +- Don't worry about errors looking up protected partitions on upgrades. + (clumens) +- Fix test for allowing the installation source to be on the root fs + (#462769). (clumens) +- lang-names should really only depend on lang-table (katzj) +- Don't make the .desktop file unless we actually need to (katzj) +- Fix lang-name generation (katzj) +- Look for xrandr in the search path. (clumens) +- Make the textw network screen match the iw interface by only prompting for + hostname (#462592) (dcantrell) +- Pick up hostname if we have it, otherwise use localhost.localdomain + (#461933) (dcantrell) +- dhclient-script not needed for NetworkManager (dcantrell) +- Add getDefaultHostname() to network.py (dcantrel) +- Write out NETMASK and BROADCAST correctly in loader. (dcantrel) +- Fix problems with manual network configuration in loader. (dcantrel) +- anaconda-yum-plugins is now in its own source repo. (clumens) +- Remove most of the network configuration from text mode as well (#462691). + (clumens) +- Add an extra newline to the empty partition table message. (clumens) +- Fixup DiskSet._askForLabelPermission() (markmc) + +* Mon Sep 15 2008 David Cantrell - 11.4.1.36-1 +- Remove invalid i18n stuff to let anaconda build. (dcantrell) +- Remove doConfigNetDevice() prototype. (dcantrell) + +* Mon Sep 15 2008 David Cantrell - 11.4.1.35-1 +- Call network.bringDeviceUp() instead of old isys functions. (dcantrell) +- Pass device name to network.setDNS() and network.setGateway(). (dcantrell) +- NetworkManager fixes in network.py (dcantrell) +- Remove code from isys not needed for NetworkManager. (dcantrell) +- Avoid writing out NM_CONTROLLED more than once. (dcantrell) +- Write out final ifcfg-DEVICE files correctly. (dcantrell) +- Use POSIX and LSB hostname length limit. (dcantrell) +- Consistent whitespace usage in network.py (dcantrell) +- Do not try to start hald or dbus-daemon from anaconda. (dcantrell) +- On HDISO installs, mark LABEL= and UUID= partitions as protected. (clumens) +- Do encrypted device passphrase retrofits while activating partitioning. + (dlehman) +- Use one passphrase for all new LUKS devices and offer retrofit to old + ones. (dlehman) +- There's only one passphrase member (encryptionPassphrase) in Partitions. + (dlehman) +- Only add LUKSDevice instances to PV requests as needed. (dlehman) +- New device passphrase is now always global w/ option to retrofit. (dlehman) +- Don't prompt for a passphrase when creating encrypted devices. (dlehman) +- Define a method to add a passphrase to an existing LUKS device. (dlehman) +- Fix a traceback when starting a shell in rescue mode (#462148). (clumens) +- md, lock_nolock, and dm_emc kernel modules no longer exist. (clumens) +- Fix iscsi disk detection with newer kernels (rh 461839, 461841) (hans) +- Fix the crash reported in bug 454135 (hans) +- Make iBFT reading explicit from a higher level (hans) +- Add ibft flag to ease in testing. (hans) +- Support iSCSI CHAP and Reverse CHAP authentication (rhbz#402431, + rhbz#432819) (hans) +- Don't set iscsi devices to autostart (rhbz#437891) (hans) +- Add full CHAP support to iSCSI. (rhbz#432819) (hans) +- Do not try to initialize iSCSI, when no portal (#435173) (hans) +- Fix wrong function names for iscsi login/start (rhbz#295154) (hans) +- Set an attribute when iscsid is started (#431904). (hans) +- Better fixes for iscsi probing (patch from jlaska) (hans) +- Make sure ISCSIADM and such are defined (rhbz#431924) (hans) +- Fix iscsi so that mkinitrd can actually talk to the running daemon (hans) +- Make iscsi/ibft work (hans) +- Add mk-images changes forgotten in previous commit (hans) +- Add support for iSCSI iBFT table (#307761) (hans) + +* Thu Sep 11 2008 Chris Lumens - 11.4.1.34-1 +- Always start NM so we can talk to it in the boot.iso case (#461071). + (clumens) +- Use the device path to identify LUKS devs in /etc/fstab. (#460700) + (dlehman) +- Use the LUKS UUID instead of device nodes in all references. (#460700) + (dlehman) +- LUKSDevice.getScheme() no longer cares if the dev has a passphrase. + (#461203) (dlehman) +- Correct translation to fix the build. (clumens) +- Add the method string back into anaconda-ks.cfg. (clumens) +- Let's try pulling libsqlite into the initrd one more time. (clumens) +- Don't traceback at the end of live installs (katzj) +- Correct the message telling you to use a VNC password. (clumens) +- Remove unused TIMEZONES= crud. (clumens) +- print doesn't yet support the file= syntax in our version of python. + (clumens) +- Catch errors from using the wrong bugzilla field and display them. + (clumens) +- Fix line wrapping on part type screen (jlaska, #461759). +- rep_platform has been renamed to platform. (clumens) + +* Tue Sep 09 2008 Chris Lumens - 11.4.1.33-1 +- Include NetworkManager and dbus libraries on 64-bit arches (#461632). + (clumens) +- We need libsqlite3.so in upd-instroot before it can be in the initrd. + (clumens) +- Fix partitions growing (backport of rhbz #442628) (rvykydal) +- Kickstart timezone validity check fixed (#461526) (rvykydal) +- Add more kernel crypto modules (#443545). (clumens) +- Make the progress bar move when downloading the install.img (#461182). + (clumens) +- Add overrideDHCPhostname as an attribute. (clumens) +- Fix saving to remote hosts (#461500). (clumens) +- short_desc is now summary. (clumens) +- Use print() as a function. (pjones) + +* Sat Sep 06 2008 David Cantrell - 11.4.1.32-1 +- Use struct audit_reply instead of struct auditd_reply_list (dcantrell) + +* Sat Sep 06 2008 David Cantrell - 11.4.1.31-1 +- Use --service=NAME in firewall.py when calling lokkit (dcantrell) +- Make NM work for the DHCP case, at least (dcbw) (#461071). (clumens) +- Sleep a little after dbus to give it time before HAL connects. (clumens) +- Add libsqlite to the initrd, which is needed by NSS libs. (clumens) +- Add more dlopen()ed libraries to the initrd. (clumens) +- Fix various problems with the exn saving UI (#461129). (clumens) +- Fail gracefully if we can't talk to NetworkManager over DBus. (dcantrell) +- Reword text for easy of translating plurals (#460728). (clumens) +- Make sure /bin/sh is linked to /bin/bash (dcantrell) +- Do not include /usr/lib/gconv in install.img (dcantrell) +- Add /etc/NetworkManager/dispatcher.d to the install.img. (clumens) +- Remove last vestiges of rhpxl and pirut. (clumens) +- Only one list of packages in upd-instroot, thanks. (clumens) +- Add xrandr back into the install.img (#458738). (clumens) +- Add a couple more directories to search paths. (clumens) +- Do repo setup and sack setup as separate steps. (clumens) +- Fix a typo that was causing repos in the kickstart file to be skipped + (#451020). (clumens) + +* Fri Aug 29 2008 David Cantrell - 11.4.1.30-1 +- Fix a traceback with unencrypted autopart. (dlehman) +- doLoggingSetup has grown some new arguments (#460654). (clumens) +- Updated German translation (fabian) +- Remove references to isConfigured in network.py (dcantrell) +- Define the NM_STATE_* constants in isys.py (dcantrell) +- Rewrite NetworkWindow to only prompt for hostname. (dcantrell) +- Pad the icon more in network.glade (dcantrell) +- Removed iface_dns_lookup() (dcantrell) +- Don't pass NULL to dbus_message_unref() (dcantrell) +- New network configuration screen for GTK+ UI. (dcantrell) +- Pass family to iface_ip2str() call (dcantrell) +- Rewrite iface_ip2str() to talk to NetworkManager over D-Bus (dcantrell) +- New translation (besnik) +- Pull in the gtkrc file so we can find the theme. (clumens) +- Use signed git tags (katzj) +- Skip networkDeviceCheck in dispatch.py (dcantrell) +- Do not call has_key() on NetworkDevice, use isys.NM_* (dcantrell) +- Separate lines per BR. (dcantrell) +- Remove invalid line iw/autopart_type.py (dcantrell) +- Fix syntax error in yuminstall.py, fix pychecker warnings. (dcantrell) +- Updated Hungarian translation (sulyokpeti) +- Add missing () to function definitions. (dcantrell) +- Fix err handling in doMultiMount() (dcantrell) +- Revert "Pass --follow to git-log" (dcantrell) +- Remove references to /tmp/netinfo (dcantrell) +- Gather network settings from NetworkManager and ifcfg files. (dcantrell) +- Update the pot file and refresh the pos (katzj) +- For all HTTP/FTP repos, keep the cached repodata (#173441). (clumens) +- Fix a traceback when trying to set the status whiteboard on a bug. + (clumens) +- When the wrong filesystem type is used, raise a more explicit error. + (clumens) +- Don't copy the install.img over in single media cases (#216167). (clumens) +- Remove isys.getopt() (dcantrell) +- Remove code not used in net.c (dcantrell) +- Write to /etc/sysconfig/network-scripts/ifcfg-INTERFACE (dcantrell) +- mystrstr() -> strstr() (dcantrell) +- Expand getDeviceProperties to return all devices. (dcantrell) +- Pass --follow to git-log (dcantrell) +- Support accessing preexisting LUKS devs using LRW or XTS ciphers. + (#455063) (dlehman) +- Use yum's handling of optional/default/mandatory package selection + (#448172). (clumens) +- List iSCSI multipath devices in the installer UI. (dcantrell) +- Fix text wrap width on the partition type combo, for real this time + (#221791) (dlehman) +- For /dev/hvc0 terminals, set TERM to vt320 (#219556). (dcantrell) +- The Timer class is no longer used. (clumens) +- Handle preexisting swraid w/ encrypted member disks/partitions. (dlehman) +- Don't try to close a dm-crypt mapping that is not open. (dlehman) +- Remove unused silo code that wouldn't even build if it were used. (clumens) +- Remove some really old, really unused code. (clumens) +- Add another mount function that takes a list of fstypes to try. (clumens) +- Download progress indicator for FTP and HTTP in stage 1. (dcantrell) +- Make sure we wait for NetworkManager. (dcantrell) +- Renamed loader2 subdirectory to loader (hooray for git) (dcantrell) +- Do not include wireless.h or call is_wireless_device() (dcantrell) +- Add getDeviceProperties() and rewrite getMacAddress() (dcantrell) +- Do not include wireless.h (dcantrell) +- Rewrite isys.isWireless() to use D-Bus and NetworkManager (dcantrell) +- Rewrite isys.getIPAddress() to use D-Bus and NetworkManager. (dcantrell) +- Include ../isys/ethtool.h instead of ../isys/net.h. (dcantrell) +- Rename isys/net.h to isys/ethtool.h, removed unnecessary typedefs. + (dcantrell) +- Removed waitForLink() function in loader. (dcantrell) +- Remove initLoopback() function in loader (dcantrell) +- Use D-Bus properties to get current NM state. (dcantrell) +- Use dbus in hasActiveNetDev() and _anyUsing() (dcantrell) +- Use NetworkManager instead of libdhcp. (#458183) (dcantrell) +- When mount fails, pass the error message up to the UI layer. (clumens) +- Bring askmethod back to prompt for the location of install.img. (clumens) + +* Fri Aug 22 2008 Chris Lumens - 11.4.1.29-1 +- Enable yum plugins. (clumens) +- In the preupgrade case, repo=hd: means an exploded tree on the hard drive. + (clumens) +- Remove preupgrade-specific hacks. (clumens) +- Add conf files for our yum plugins so they can be enabled. (clumens) +- Create a subpackage containing the yum plugins. (clumens) +- Add the new blacklist and whiteout yum plugins. (clumens) +- Allow retrying if the ISO images aren't found (for the USB case). (clumens) +- Include "--encrypted" in anaconda-ks.cfg partitioning as needed. (#459430) + (dlehman) +- Support establishing a global passphrase when creating encrypted devices. + (dlehman) +- Display the lock icon for encrypted RAID members. (#459123) (dlehman) +- More descriptive drive message when warning on format. (dcantrell) +- Need to import rhpl for things like switching to pdb. (clumens) +- Fix traceback in passphrase handling code for encrypted RAID requests. + (#459121) (dlehman) +- Copy the install.img to /tmp on HD installs. (clumens) +- Fix a typo (dcantrell). +- Expert mode was disabled in 2004. Remove it now. (clumens) +- Remove an extra "Local disk" option (#459128). (clumens) +- Clear up error reporting on upgrades when devices are listed by UUID. + (clumens) +- If the UI was used to specify a repo, construct a repo param (#458899). + (clumens) +- Fix a traceback calling createMapping. (clumens) +- First crack at upgrade of systems with encrypted block devices. (#437604) + (dlehman) +- In kickstart, prompt for new LUKS dev passphrase if not specified. + (#446930) (dlehman) +- Remove passphrase check hack from LUKSDevice.getScheme. (dlehman) +- Allow specification of a device string for display in passphrase dialog. + (dlehman) +- Add encrypted device passphrase dialog for text mode. (dlehman) +- Fix PartitionDevice.getDevice to take asBoot into account. (dlehman) +- Make passphrase dialogs appear in the center of the screen. (#458114) + (dlehman) +- Consider clearpart and ignoredisk when scanning for encrypted partitions. + (dlehman) +- Correctly handle typos in the stage2 location when inferred from repo=. + (clumens) +- Fix the loader UI when prompting for stage2.img on HDISO. (clumens) +- Rename stage2.img to install.img (dcantrell) +- Bring up the network before saving a bug via scp. (clumens) +- Make it more explicit we want the stage2.img URL, not the repo URL. + (clumens) +- Add the match type so we don't find all bugs. (clumens) +- Make upd-updates create the updates.img you specify if it doesn't already + exist. (pjones) +- Don't base mpath/dmraid/raid startup/stopping based on if lvm is activated + yet, (pjones) +- Add diskset.devicesOpen boolean, so we can tell if devices should be + started (pjones) +- Add dirCleanup back in so we don't leave install metadata behind. (clumens) +- Move betanag to after keyboard and language are setup. (clumens) +- Add module dependencies of qeth.ko (#431922). (clumens) +- Copy the changes from RHEL5 for the linuxrc.s390 over. (clumens) +- Disable SCSI devices so we can safely remove a LUN (bhinson, #249341). + (dcantrell) + +* Tue Aug 12 2008 Chris Lumens - 11.4.1.28-1 +- More fixes to include udev rules in the initrd (#458570). (clumens) +- Catch the first non-generic-logo package that provides system-logos. + (clumens) +- Remove extra ')' in install-buildrequires (dcantrell) + +* Mon Aug 11 2008 Chris Lumens - 11.4.1.27-1 +- Handle 'rescue' and %%post in rescue mode (atodorov) +- Delay the duplicate label error until the label is actually used + (#458505). (clumens) +- Enable wireless modules again for now as a test (#443545). (clumens) +- udev rules have changed location (#458570). (clumens) +- Add install-buildrequires target. (dcantrell) + +* Fri Aug 08 2008 Chris Lumens - 11.4.1.26-1 +- Remove a bunch of cachedir setting code that is no longer needed. (clumens) +- Fix segfaults on interactive NFS installs (#458416). (clumens) +- Fix LVM error handling so the exceptions actually get into the namespace. + (pjones) +- yuminstall: don't look for kernel-xen anymore (markmc) +- console: kill the /proc/xen hack (markmc) +- yuminstall: don't ever stop people installing the virt group (markmc) +- lang: kill xen keymap hack (markmc) +- bootloader: remove old kernel-xen-{guest, hypervisor} handling (markmc) +- Preserve baseurl/mirrorlist and mirrorlist checkbox settings across loads. + (clumens) +- It's BETANAG, not betanag. (clumens) +- Various string fixes (clumens). +- Wrap spec file changelog lines. (dcantrell) +- mk-images: replace kernel-xen with pv_ops kernel (markmc) +- Use a temporary location for yum cache data (#457632). (clumens) +- Remove extra newtPopWindow() call that was causing a crash (#260621). + (dcantrell) +- Add /sbin/sfdisk (#224297). (dcantrell) +- Do not call _isys.vtActivate() on s390 or s390x platforms (#217563). + (dcantrell) +- Change the maximum recommended swap size to "2000 + (current + ram)".(#447372) (jgranado) +- Make it >= not > for the memory size comparison (#207573) (pjones) +- Allow float comparison between nic names in isys.py. (#246135) (joel) +- Fix formatting on disk sizes >1TB (pjones) +- Don't traceback when trying to remove /mnt/sysimage (#227650). (dcantrell) +- If we're booting off the boot.iso, don't prompt for lang or kbd (#457595). + (clumens) +- Don't mention images/diskboot.img anymore (#441092). (clumens) +- Remove iSeries image generation (#456878) (dcantrell) +- Display capslock status correctly (#442258) (dcantrell) + +* Mon Aug 04 2008 Chris Lumens - 11.4.1.25-1 +- Eject the CD/DVD if we booted off a boot.iso as well (#442088). (clumens) +- Fix a GTK warning that only appears with s-c-ks running from a + shell (#431844). (clumens) +- Break a few functions out of yuminstall.py into their own file. (clumens) +- We're not actually activating new filesystems quite yet. (clumens) +- Fix a typo in the initial partitioning screen. (clumens) +- Use system-logos instead of hardcoding fedora-logos (#457378). (clumens) +- anaconda can no longer be None when we create a DiskSet instance. (clumens) +- Remove LabelFactory since we now rely on UUIDs for everything. (clumens) +- Filter out repos that aren't enabled when running in betanag mode. (clumens) +- Close the transaction between CDs (#457126). (clumens) +- Split media fixes. (clumens) +- Handling (ask user) of invalid timezone value in kickstart added + (#404323) (rvykydal) + +* Thu Jul 31 2008 Jeremy Katz - 11.4.1.24-1 +- Don't try to use self.tree as the mode to open .discinfo. (clumens) +- Remove all the RPM lock files before creating a new + transaction (#456949). (clumens) +- Support VDSK devices on s390x (#264061) (dcantrell) + +* Wed Jul 30 2008 Chris Lumens - 11.4.1.23-1 +- Fix mke2fs argument passing (#457285). (clumens) +- Disable logging in the firmware loader, since it clobbers other + log messages. (pjones) + +* Wed Jul 30 2008 Chris Lumens - 11.4.1.22-1 +- udevsettle takes forever, so display a waitWindow. (clumens) +- Leave anaconda-runtime around for mk-images run. (dcantrell) + +* Tue Jul 29 2008 Jeremy Katz - 11.4.1.21-1 +- Remove an instance of NEEDGR still existing to fix graphical + isolinux (#457144) (katzj) +- use newer mke2fs arguments for different filesystems (sandeen) +- Use attributes to tell us whether filesystems are + bootable (#457037). (clumens) +- Make sure we drag in gzip, used by the image creation stuff. (jkeating) + +* Fri Jul 25 2008 Chris Lumens - 11.4.1.20-1 +- Clean up some mistakes in the minstg2 removal. (dcantrell) +- Fix passing the language to anaconda (katzj) + +* Thu Jul 24 2008 Chris Lumens - 11.4.1.19-1 +- Fix another NFS kickstart segfault (#456461). (clumens) +- Remove support for generating a minstg2.img image. (dcantrell) +- If the xconfig command is given, do something with it (#455938). (clumens) +- METHOD_CDROM is now supported on s390 (jgranado). (clumens) +- Fix test for if we could access stage2.img on the CD (wwoods). +- Look for updates.img and product.img on the boot.iso. (clumens) +- Suspend the curses interface before calling scripts and resume afterwards + (#435314) (msivak) + +* Wed Jul 23 2008 Chris Lumens - 11.4.1.18-1 +- MD_NEW_SIZE_BLOCKS no longer exists in newer kernel headers. (clumens) + +* Wed Jul 23 2008 Chris Lumens - 11.4.1.17-1 +- Add support for filing bugs straight into bugzilla. (clumens) +- Running git-tag -f from a makefile rule is a bad idea (katzj) +- A text message in rescue.py is not gettext-ized (atodorov) +- Code cleanup - handling of --serial (atodorov) +- Offer physical NIC identification in stage 1 (#261101) (dcantrell) +- Specify a default cio_ignore parameter for s390x (#253075) (dcantrell) +- Fix getting the stage2 image when doing kickstart installs. (clumens) +- Convert package names to unicode before displaying the error message + (#446826). (clumens) +- When there is text mode specified in the kickstart file, disable the vnc + question (#455612) (msivak) +- We no longer add the fstype to the hd: method in loader. (clumens) +- Check DHCP by default on the text network configurator screen. (clumens) +- Support booting from FCP-attached CD/DVD drive on s390 (#184648) (dcantrell) + +* Thu Jul 17 2008 Chris Lumens - 11.4.1.16-1 +- Support xdriver= again (katzj) +- Fix loadkeys on serial console (niels.devos) +- don't change from cmdline to textmode on lowmem systems (niels.devos) +- Update the VNC over text mode patch, so it correctly passes the password + to VNC server (#455612) (msivak) +- Set interface MTU if user specified mtu= param (#435874) (dcantrell) +- Bring up the network before attempting to mount the NFSISO source. (clumens) +- Catch mount errors when adding NFS repos (#455645). (clumens) +- Fix a traceback when trying to save exceptiona via scp. (clumens) +- Give a progress bar when cleaning up after upgrades (#208725). (clumens) +- Look for repo config files in /etc/anaconda.repos.d. (clumens) +- baseurl should be a list, mirrorlist should not. (clumens) +- It's called crypto_blkcipher.ko these days. (clumens) + +* Tue Jul 15 2008 David Cantrell - 11.4.1.15-1 +- Add a text-mode network config dialog so default installs can work. (clumens) +- Use the right format for the NFS methodstr, but harder this time. (clumens) +- Ask the user if he wants to use VNC instead of text mode (#453551) (msivak) +- Fix a segfault when displaying the wrong CD message. (clumens) +- Use the right format for the NFS methodstr. (clumens) +- Use correct path for FAK plugins in upd-instroot (jgranado) + +* Fri Jul 11 2008 Chris Lumens - 11.4.1.14-1 +- Remove an extra tab that was causing problems with the Iloko + translation. (clumens) +- Use the right stage2.img path for kickstart URL installs (#452140). (clumens) +- Convert package errors to unicode before displaying them (#441200). (clumens) +- Display a status message while waiting for the CD to become ready. (clumens) +- Fix window title to be the same as all others. (clumens) +- In cmdline mode, give some feedback when transferring loader files. (clumens) +- If network config info isn't provided for cmdline, abort. (clumens) +- If we're not given a method in cmdline mode, we have to quit. (clumens) +- In cmdline mode, set language to the default if none is provided. (clumens) +- Don't stop on the method screen if stage2= is provided. (clumens) +- Add support for NFS to the repo editor (#443733). (clumens) +- Fix whitespace silliness. (pjones) +- Fix closing the drive door so that if the kernel happens to start giving us + the right error code, we'll handle it correctly... (pjones) +- Fix the mysterious Error: OK message. (clumens) +- The return value from mediaCheckCdrom is totally useless. (clumens) +- Add better error handling when initializing yum (#453695). (clumens) +- Add functions for creating repos as well. (clumens) +- Don't handle all possible exceptions as if they were repo errors. (clumens) +- Reorganize to make it easier to reset the "base" repository. (clumens) +- Remove the pkgSack when a repo is disabled. (clumens) +- Use the new method of calling the NetworkConfigurator. (clumens) +- Add an updated repo editor. (clumens) +- Don't suggest text mode to the poor, poor user. (pjones) + +* Wed Jul 09 2008 Chris Lumens - 11.4.1.13-1 +- Filter out source and debuginfo repos from the UI. (clumens) +- Add the MD5 sum to the boot.iso to avoid errors in loader + (#453698). (clumens) +- Don't strip too much off the NFS directory path. (clumens) +- Log stage2 url better. (pjones) +- Fix minor whitespace nits. (pjones) +- Use %%m rather than strerror() where appropriate. (pjones) +- Make setupCdrom() actually return the path to the stage2 image it + found. (pjones) +- Don't unconditionally pass --lang for live installs (#454101) (katzj) +- Set up rhgb for plymouth on live. And conditionalize rhgb + runlevel 5 (katzj) +- Set up rhgb if plymouth is installed as well as rhgb (katzj) +- Get the math right on how many usec per second... (pjones) +- Import missing module "network". (pjones) +- Wait up to 45 seconds for "No medium found" to stop happening (pjones) + +* Thu Jul 03 2008 Peter Jones - 11.4.1.12-1 +- Add dmraid-libs to PACKAGES so new dmraid won't break installs. + +* Thu Jul 03 2008 Peter Jones - 11.4.1.11-1 +- Fix double free in setupCdrom +- Fix missing psudo->pseudo spelling fix (katzj, #453843) +- Include missing X libraries in stage2.img + +* Tue Jul 01 2008 Chris Lumens - 11.4.1.10-1 +- Remove old livecd flag (katzj) +- Explicitly setup livecd install by passing --liveinst to anaconda (katzj) +- Check return value of asprintf() consistently (dcantrell) +- Per strtol(3) man page, set errno=0 before call. (dcantrell) +- Rescue mode no longer needs access to a methodstr (#453044). (clumens) +- Use strtol() instead of atoi() (dcantrell) +- Spell pseudo correctly. (pjones) + +* Wed Jun 25 2008 Chris Lumens 11.4.1.9-1 +- Query for anaconda rather than anaconda-runtime in buildinstall (jkeating). + +* Mon Jun 23 2008 Jeremy Katz - 11.4.1.8-1 +- Remove from being installed too (katzj) +- Remove anaconda-runtime as a separate subpackage (katzj) +- Remove the stuff we're not calling. (pjones) +- Remove this since we don't use it anymore (katzj) +- Don't continue on using the base installclass if we can't find one (katzj) +- Get rid of wlite and unicode-lite; these were necessary to support (pjones) +- Remove pkgorder and splittree; these should be in pungi (katzj) +- Add the .treeinfo file into the exception report. (clumens) +- Fix a typo (#452140). (clumens) + +* Fri Jun 20 2008 Chris Lumens - 11.4.1.7-1 +- Remove ancient block of code to upgrade Netscape Communicator. (clumens) +- Move enableNetwork into the interface. Bring network up for scp. (clumens) +- If we can't mount for some reason, don't traceback (#452159). (clumens) +- Fix the upgrade button traceback (#374891). (clumens) + +* Wed Jun 18 2008 Chris Lumens - 11.4.1.6-1 +- Enable media check again, and let it check the boot.iso. (clumens) +- Substitute the version from buildstamp for $releasever if needed. (clumens) +- Remove the askmethod cmdline option. (clumens) +- Lots of work to make loader only look for stage2.img, and stage2 do + all the install method configuration. (clumens) +- Add the --stage2= and --repo= options, deprecate --method=. (clumens) +- Fix pkgorder to include deps of kernel early. (pjones) +- Deal with udev losing udevcontrol/udevtrigger (katzj) +- Boot in graphical mode if /usr/bin/kdm exists. (clumens) +- bootProto isn't a global variable (#451689). (clumens) + +* Fri Jun 13 2008 Chris Lumens - 11.4.1.5-1 +- Add a mirrorlist option. (jkeating) +- Don't display garbage when prompting for the updates device. (clumens) +- Don't write out yum repo config files in kickstart.py. (clumens) +- It doesn't make sense to insert a disk into a partition, so don't + ask. (clumens) +- Unmount /mnt/sysimage/dev manually since it doesn't get an entry. (clumens) +- Link ld-linux.so.2 to ld-*.*.*.so (dcantrell) +- Quote the repo name in anaconda-ks.cfg in case it includes spaces. (clumens) +- Move all the exception classes into a single file. (clumens) +- And import iutil a the end as well. (clumens) +- Don't display obsoleted packages in the UI. (clumens) + +* Thu Jun 05 2008 Chris Lumens - 11.4.1.4-1 +- Fix text mode button translations (#450176). (clumens) +- Remove a rogue call to textdomain. (clumens) +- Make "upd-updates /tmp/updates.img" update everything newer in the + current (pjones) +- _xmltrans is undefined. Try xmltrans instead. (clumens) +- Fix reference to cost vs. priority (#450168). (clumens) +- Don't do the "exec shell on tty1" thing in vnc if we've got virtual + terminals. (pjones) +- Import N_ (#450163). (clumens) +- raise "NotImplementedError", not "NotImplemented" (pjones) +- Need to import iutil before we use it. (clumens) +- Don't reference PartitioningError.value . (pjones) + +* Wed Jun 04 2008 Chris Lumens - 11.4.1.3-1 +- Can't reference iutil.whatever from inside iutil.py. (clumens) +- When using the boot.iso and URL installs, download the .treeinfo + file. (clumens) +- Fix a couple typos in the getArch commit. (clumens) +- Be consistent with data type. (dcantrell) +- Replace rhpl.getArch() calls with iutil calls. (dcantrell) +- Expand iutil.isX86() and added iutil.getArch() (dcantrell) +- Add isAlpha() test function to iutil. (dcantrell) +- Create architecture test functions in iutil (dcantrell) +- Removed mystrstr() function in loader2/init.c (dcantrell) +- Don't support Arabic in text mode installs since we don't even do + RTL. (clumens) +- Removed old strace debugging in loader2/init (dcantrell) +- Keep only one copy of this code for group sorting/display around (katzj) +- Stop using rhpl.translate and use gettext directly (katzj) +- Add a descriptive comment to the top of /etc/fstab (#448966). (clumens) +- Use "message" instead of "value" on errors, and stringify on the front + side. (pjones) +- Translate package descriptions (#449455). (clumens) +- Translate password error messages (#439981). (clumens) +- Fix traceback starting vnc (#449295) (katzj) +- Add Hewbrew to lang-table (oron) +- Fix errors in python string formatting (#449130). (clumens) + +* Thu May 29 2008 Chris Lumens - 11.4.1.2-1 +- Allow ext4 migration again for testing at least (katzj) +- Remount filesystems after migration (#440055) (katzj) +- Add blkid to the keepfiles list so jkeating will whine less (pjones) +- Don't allow vfat /boot (katzj) +- Use the base yum doConfigSetup method. (clumens) +- Include the yum repo files from fedora-release in stage2. (clumens) +- No longer maintain our own list of extra repos. (clumens) +- Sort the repos in the UI. (clumens) +- Add cost, includepkgs, and excludepkgs to the ks repo + objects (#448501). (clumens) +- Stop pretending to support Greek text mode (#208841) (katzj) +- Make it clear you need to reboot to use the installed + system (#238297) (katzj) +- Activate LVM for when we do meta-resizing (#441706) (katzj) +- List Norweigian as Bokmål (#437355) (katzj) +- Simplify the install classes. (clumens) +- Don't show the EFI filesystem unless we're on an EFI platform (katzj) +- Add nfsv4 so that we don't nuke them on upgrades (#448145) (katzj) +- When there are errors reading the live CD, offer a retry. (clumens) +- Can't recover from buildTransaction errors on a per-repo + basis (#447796). (clumens) +- Set default partition size to 200 MB in the custom partitioning + UI. (clumens) +- Limit the size of things in exception dumps to 1k. (clumens) +- Catch IOErrors one place they seem to happen most. (clumens) +- Add a unique user agent for anaconda's grabbing in stage2 (katzj) +- Remove text mode help support as well. (clumens) +- Check for all the non-mkfs utilities required for each filesystem + type. (clumens) +- More partitioning error handling fixes (#446453). (clumens) +- Require cracklib-python for the rootpassword screen. (notting) +- Use pykickstart's deprecated versions of the xconfig and monitor + classes. (clumens) +- Fix tyop in upgrade migrate screen (#446363) (katzj) + +* Tue May 13 2008 Jeremy Katz - 11.4.1.1-1 +- Just call the XStartupCB() function directly and randr to the + desired resolution (katzj) +- Stop writing out an xorg.conf (katzj) +- Make the "dump to removable device" option work in anaconda. (jgranado) + +* Mon May 12 2008 Jeremy Katz - 11.4.0.79-1 +- Stop neutering DRI (notting) +- make scripts/buildinstall take multiple repos (wwoods) +- Don't worry about telling people that interactive text mode is in + wrong lang (katzj) +- Allow cpio updates.img in the tree for URL installs. (dlehman) +- Declare unpackCpioBall for use from within urlinstall.c. (dlehman) +- Don't unlink an image we retrieved but could not mount as it + could be .cgz. (dlehman) +- Don't run lspci with an explicit path (katzj) +- Include lspci on all images (#445974) (katzj) +- Add support for attaching gdbserver to the loader early on. (clumens) +- Add virtio max partition count (markmc) +- Sort virtio devices first (markmc) +- Merge branch 'master' of ssh://git.fedorahosted.org/git/anaconda (andrewm) +- 2008-05-08 Andrew Martynov - 11.4.0.78-1 +- Write per-interface DNS info to ifcfg files (#443244) (dcantrell) +- Clean up sanityCheckHostname() in network.py (dcantrell) +- Activate autorepeat for GUI installs. (jgranado) + +* Fri Apr 25 2008 David Cantrell - 11.4.0.77-1 +- Preserve 'set the hostname' setting when going Next/Back (#443414) (dcantrell) +- Avoid traceback on network configuration screen (#444184) (dcantrell) +- Add missing backslashes for the .profile here document. (dcantrell) +- Label the efi boot filesystem on ia64 as well. (pjones) +- Don't use size to determine if a partition is an EFI system + partition; instead, (pjones) +- Handle the DVD having a disknumber of ALL. (443291) (jkeating) +- Make the LUKS passphrase prompt fit on an 80x25 screen. (#442100) (dlehman) +- Don't dd the image from /dev/zero _and_ use + "mkdosfs -C " (pjones) +- label the filesystem in efidisk.img so that HAL and such won't try to + mount it. (pjones) +- fix testiso Makefile target - boot.iso, not netinst.iso (wwoods) + +* Thu Apr 24 2008 Chris Lumens - 11.4.0.76-1 +- Use the execWithCapture wrapper to be consistent. (jgranado) +- Call the mdadm with full path. (jgranado) +- Use the correct ls(1) alias. (dcantrell) +- Set PS1 and ls(1) alias for tty2 shell. (dcantrell) +- Lookinig for the capabilities file in xen is valid in more cases. (jgranado) +- Avoid putting virtualization option when in Xen or VMware. + (#443373) (jgranado) +- If the stage2 image is on a CD, don't bother copying it (#441336). (clumens) +- Once we've found the stage2 media on CD, always use it (#443736). (clumens) +- Change mount point for CD to /mnt/stage2 when looking for stage2 + (#443755). (clumens) +- Switch to using 'yum clean all' to clean up after preupgrade + (#374921) (katzj) +- Handle .utf8 vs .UTF-8 (#443408) (katzj) +- Avoid dividing by zero (#439160) (katzj) +- Changes related to BZ #230949 (dcantrell) +- $XORGDRIVERS no longer exists (markmc) +- Bump version. (katzj) +- Write IPv6 values to /etc/sysconfig/... correctly (#433290) (dcantrell) +- Use the right base class for autopart handler. (clumens) + +* Fri Apr 18 2008 Jeremy Katz - 11.4.0.75-1 +- Listing the directories before expiring yum caches helps (katzj) + +* Fri Apr 18 2008 Jeremy Katz - 11.4.0.74-1 +- Don't look for .discinfo on the rescue CD (#442098). (clumens) +- Use /var/cache/yum as the cachedir since /tmp might be + too small (#443083). (clumens) +- Revert "Don't look for a .discinfo file in rescue + mode (jvonau, #442098)." (clumens) +- Revert "Fix figuring out that the CD has stage2 on it and should + be mounted." (clumens) +- We've always expected devices to be strings, not unicode (#443040) (katzj) +- Resizing lvs on top of RAID fails, make the error not a traceback (katzj) +- Don't put an extra slash on the error message (jgranado) +- Kernel changed howw the uevent API works for firmware + loading *AGAIN*. (pjones) +- Expose the log file descriptors so fwloader can avoid closing + them (pjones) +- Minor UI tweaks to passphrase dialogs (katzj) +- Nuke preupgrade cache once we're done (#442832) (katzj) +- Support bringing up the network if needed with preupgrade (#442610) (katzj) +- Use a real GtkDialog instead of some crazy hacked up dialog (katzj) +- Fix handling of pre-existing raids for the upgrade/rescue + case (#441770) (katzj) +- Add missing / (Doug Chapman, #442751) (katzj) + +* Wed Apr 16 2008 David Cantrell - 11.4.0.73-1 +- Fix figuring out that the CD has stage2 on it and should be mounted. (clumens) +- Don't copy the stage2 image on NFS installs (#438377). (clumens) + +* Tue Apr 15 2008 Jeremy Katz - 11.4.0.72-1 +- Don't use megabytes for the livecd size for copying. (notting) +- find moved (katzj) +- Fix up silly syntax error that crept in to this commit (katzj) +- Back to using the raw version of the docs (#442540) (katzj) +- Expire yum caches on upgrade (#374921) (katzj) +- Include KERNEL== in udev rules (#440568) (dwmw2) +- Don't look for a .discinfo file in rescue + mode (jvonau, #442098). (clumens) +- Slower machines may take more than five seconds for hal + to start (#442113) (katzj) +- Pass the full device path (notting) +- Only include the parts of grub that will work without + crazy tricks (#429785) (katzj) + +* Thu Apr 10 2008 Peter Jones - 11.4.0.71-1 +- Fix destdir handling in upd-kernel (markmc) +- Get rid of module ball remnants in mk-images (markmc) +- Make upd-kernel handle version numbers the way we do them now (markmc) +- Fix ia64 kernel path problems (katzj, #441846) +- Don't tag more than one partRequest with mountpoint=/boot/efi (pjones) +- Don't treat tiny disks as EFI System Partitions during autopart (pjones) + +* Thu Apr 10 2008 Chris Lumens - 11.4.0.70-1 +- ide-cd_mod, not ide-cd_rom (thanks to jwb) (katzj) + +* Wed Apr 09 2008 Peter Jones - 11.4.0.69-1 +- Ignore some warnings copying into /etc and /var (clumens) +- Try to mount the NFS source in the loader to verify it is correct (clumens) +- Be as clean as possible when looking for files/directories (jgranado, #431392) +- More ia64 kernel finding fixage (katzj, #441708) +- Fix read permissions on efidisk.img (pjones) +- Use the mount flags passed to isys.mount() (pjones) + +* Wed Apr 09 2008 Peter Jones - 11.4.0.68-2 +- Fix device-mapper dep. + +* Tue Apr 08 2008 Peter Jones - 11.4.0.68-1 +- Handle EFI partitions somewhat better (pjones) +- Fix typo in mk-images.efi's parted usage (pjones) + +* Tue Apr 08 2008 Jeremy Katz - 11.4.0.67-1 +- Set the initial state of the auto-encrypt checkbutton (#441018) (katzj) +- Don't treat RAID devices as "disks" to avoid lots of odd + behavior (#438358) (katzj) +- Log a message if we disable selinux on upgrade (katzj) +- Build efiboot.img on x86_64 and i386 . (pjones) +- When splitting srpms, only link srpms, nothing else. (jkeating) +- Don't cause the text to flicker between installed packages. (clumens) +- Don't cause the screen to jump up and down between + packages (#441160). (clumens) +- Fix zooming and centering in the timezone screen (#439832). (clumens) +- Handle ia64 kernel path (katzj) +- And add nas to the list (#439255) (katzj) +- Set parent so that the dialog centers (#441361) (katzj) +- Don't show the label column (#441352) (katzj) +- Do string substitution after we've translated (#441053) (katzj) +- Set domain on glade file so translations show up (#441053) (katzj) +- fix compression of modules (notting) +- More build fixing due to translation breakage. (katzj) +- Add code to create efiboot.img on i386 and x86_64 (pjones) +- Remove gnome-panel too, it's no longer multilib. (jkeating) +- Fix raising new NoSuchGroup exception. (clumens) +- remove debugging print (notting) +- Support encrypted RAID member devices. (#429600) (dlehman) +- No longer require Amiga partitions on Pegasos (dwmw2) +- Don't copy the stage2 image every time or on the way back. (clumens) +- Make lukscb.get_data("encrypt") always return a valid value. (pjones) +- Set the scrollbar color so it doesn't surprise me the same way in + the future. (pjones) +- Translation updates. + +* Sun Apr 06 2008 Jeremy Katz - 11.4.0.66-1 +- Another day, another broken translation commit to fix. (katzj) +- Work around GL crashes in anaconda X by disabling them. (jkeating) +- Clean up "finishing upgrade" wait window (katzj) +- Stop refreshing like mad in text-mode on WaitWindow.refresh() (katzj) +- Avoid progress bars going off the end and making newt unhappy (katzj) +- Brute force hack to avoid the number of packages + overflowing (#436588) (katzj) +- Revert "Change the default level in /etc/sysconfig/init now + (#440058)." (notting) +- Add gnome-applets to the upgrade blacklist, fix kmymoney2 typo. (jkeating) +- Don't enable encryption by default (katzj) +- Print our mount commands to /dev/tty5 for easier debugging. (clumens) +- Change the default level in /etc/sysconfig/init now (#440058). (clumens) +- Make the Back button work when asking for tcp/ip information in + loader.c. (#233655) (jgranado) +- Have work in the network configuration stage (#250982) (jgranado) +- Use a better test to see if a package group doesn't exist (#439922). (clumens) +- avoid behavior in (#208970) (jgranado) +- Correctly label the xen images in the .treeinfo file (jgranado) +- Translation updates + +* Wed Apr 02 2008 Chris Lumens - 11.4.0.65-1 +- Only do verbose hal logging if loglevel=debug (katzj) +- Avoid AttributeError in HardDriveDict (#432362) (pjones) +- Don't use %%n with gettext to avoid segfaults (#439861) (katzj) +- Require live installs to be to an ext2 or ext3 filesystem (#397871) (katzj) +- Don't allow migrations to ext4 for now (katzj) +- Change ext4 parameter to ext4, not iamanext4developer (katzj) +- Bootable requests can not be on logical volumes (#439270). (clumens) +- Don't allow /boot to be migrated to ext4 (#439944) (katzj) +- Fix for ia64 (#439876) (katzj) +- Update pkgorder group listings to match current Fedora defaults. (jkeating) +- Lame attempt to try to avoid race condition with udev creating device + nodes (katzj) +- Don't traceback if stdout is an fd either (katzj) +- iutil doesn't need isys anymore (katzj) +- Free memory only after we're done using it (#439642). (clumens) +- Fix a segfault freeing memory on boot.iso+hdiso installs. (clumens) + +* Mon Mar 31 2008 Jeremy Katz - 11.4.0.64-1 +- Fix my tyop (katzj) +- Fuzzy broken string again (katzj) + +* Sun Mar 30 2008 Jeremy Katz - 11.4.0.63-1 +- Fix broken translations. Again. (katzj) + +* Sun Mar 30 2008 Jeremy Katz - 11.4.0.62-1 +- Translation updates +- Allow GPT disk labels on ppc/ppc64. (dcantrell) +- Tear down the right loopback device before going to stage2. (clumens) +- Don't pass None as stdout or stderr. (clumens) +- Make sure there's a stdout to write to. (clumens) +- Handle fstype munging in isys.readFSType instead of in various + other places. (dlehman) +- Fix a typo in new encrypted LV code. (dlehman) +- Partitioning UI for handling of preexisting encrypted devices. (dlehman) +- Support discovery of preexisting rootfs on LV. (dlehman) +- Improve handling of logical volume device names when encrypted. (dlehman) +- Add support for discovery of preexisting LUKS encrypted devices. (dlehman) +- Add support for retrieving LUKS UUIDs. (dlehman) +- Refresh po files (katzj) +- Mark for translation based on feedback from translators (katzj) +- Just relabel all of /etc/sysconfig (#439315) (katzj) +- When dhcp is selected ensure that bootproto is set to + dhcp (RPL-2301) (elliot) +- Fix for test mode repo bits (katzj) +- Try to make the size flow a little more for weird resolution + screens (#439297) (katzj) +- Add kmymoney to upgrade remove list (#439255) (katzj) + +* Thu Mar 27 2008 Chris Lumens - 11.4.0.61-1 +- Fix broken translation. (clumens) + +* Thu Mar 27 2008 Chris Lumens - 11.4.0.60-1 +- Have a fallback empty description for devices (#432362) (katzj) +- os.path.join does not work the way we think it should. (clumens) +- Remove the stage2 in all cases now that we're copying it basically + all the time (katzj) +- Add support for saving the exception to a local directory for live + installs (katzj) +- Catch errors on resize and present a dialog to the user (katzj) +- Save resize output to a file (/tmp/resize.out) so that it's more + useful (katzj) +- Make sure we give the command that's run on stdout so that it's + logged (katzj) +- more mouse-related removals (notting) +- Fix up autopart resizing for the multiple partitions to resize case (katzj) +- Fix up the case where both method= and stage2= are given (katzj) +- Remove mouse screens that haven't been used in 4 years (katzj) + +* Wed Mar 26 2008 Chris Lumens - 11.4.0.59-1 +- Only remove duplicate slashes from the front of the prefix. (clumens) +- Ensure that we take into account new repos (katzj) +- Handle kernel variants a little better at install time too (katzj) +- Make a little bit more future proof for kernel version changing (katzj) +- Add confirmation of closing the installer window (#437772) (katzj) +- Fix SIGSEGV on all mounts without options (katzj) +- Add support for encrypted logical volumes in kickstart. (clumens) +- Add support for encrypted LVs. (dlehman) +- Put in some handling for redundant method calls and devices containing '/'. + (dlehman) + +* Tue Mar 25 2008 Jeremy Katz - 11.4.0.58-1 +- Fuzzy broken string (katzj) + +* Tue Mar 25 2008 Jeremy Katz - 11.4.0.57-1 +- Use anaconda-upgrade dir in the preupgrade case (katzj) +- Have 'preupgrade' key doing an upgrade (katzj) +- Fix what we expect to be the message from ntfsprogs (katzj) +- Fix up compile error for new newt (katzj) +- Don't traceback if we have little freespace partitions (#438696) (katzj) +- Translation updates (ko, ru) + +* Mon Mar 24 2008 Jeremy Katz - 11.4.0.56-1 +- Translation updates (hi, fr, kn, de, ml, es, mr, ko, te) +- Fix up more unicode shenanigans (#437993) (katzj) +- Move /tmp/stage2.img to /mnt/sysimage to free up some + memory (#438377). (clumens) +- Be a little smarter about downloading repo metadata (#437972). (clumens) +- Make sure that devices are set up before using them. (#437858) (dlehman) +- Don't prepend /dev/ on bind mounts either. (clumens) +- Use the repo name instead of id in the group file error + message (#437972). (clumens) +- Handle /dev being on hard drive devices in the second stage (katzj) +- Fix the build (katzj) +- The units for /sys/block/foo/size aren't bytes. Fixes finding some + disks (katzj) +- Remove the check for .discinfo on URL installs. (clumens) +- Always unmount /mnt/source on hdiso installs before starting + stage2. (clumens) +- Always unmount /mnt/source on nfsiso installs before starting + stage2. (clumens) +- Make sure the first disc image is mounted before setting up repos. (clumens) +- Fix $UPDATES for real (katzj) +- Avoid piling up slashes in the UI when retrying (#437516). (clumens) +- Require comps-extras now that we don't require pirut bringing it in (notting) +- Put "ide-cd_mod" in the list of modules to pull in. (pjones) + +* Tue Mar 18 2008 Chris Lumens - 11.4.0.55-1 +- Fix format of method=hd: parameter (#438075). (clumens) +- Work on support for NFSISO installs when using boot.iso. (clumens) +- If a file doesn't exist, don't continue trying to loopback mount + it. (clumens) +- Make loopback mount error messages more useful. (clumens) +- Focus root password entry box (#436885). (dcantrell) +- Fix a traceback writing out the method string for hdiso installs. (clumens) +- Fix use of sizeof on a malloc()'d char ** (pjones) +- Fix up ppc boot check (#438005) (katzj) +- Support reading the UUID from the disk like we do with labels. (clumens) +- If the protected partition is not yet mounted, mount it now. (clumens) +- Don't add /dev/ to LABEL= or UUID= devices either. (clumens) +- Use arch instead of the name again in package nevra. (clumens) +- Fix traceback with preexisting LUKS partitions in setFromDisk. + (part of #437858) (dlehman) + +* Mon Mar 17 2008 Jeremy Katz - 11.4.0.54-1 +- Translation updates (de, fi, it, gu, ta, pa) +- Fix a typo. (clumens) +- Fix the build. (clumens) +- Make sure we return the same kind of exception in all cases. (clumens) +- Filter so we don't show LVM and RAID components when adding + boot entry (#437501) (katzj) +- Only print the filename we're fetching, as newt doesn't like + long names. (clumens) +- Fix off by one error reading .buildstamp (pjones) +- Use the right path when trying to fetch .discinfo. (clumens) +- Don't prepend /dev/ onto nfs devices. Also log mount + errors to tty5. (pjones) + +* Sun Mar 16 2008 Jeremy Katz - 11.4.0.53-1 +- Update translations (pl, de) +- Use i586 kernel (#437641) (katzj) +- Give indication of success or failure for mediacheck (#437577) (katzj) +- Ensure the UUID for the rootfs is random and not the same for every + live image (katzj) +- Make migration from ext3 -> ext4 saner on upgrade (#437567) (katzj) +- Force filesystem mount options on /boot/efi . (pjones) +- On HDISO installs, look for the stage2.img file in the right + directory. (clumens) +- Accept devices with or without a leading /dev/. (clumens) +- .buildstamp no longer contains productPath, so change + the default (#437509). (clumens) +- Remove references to an uninitialized variable. (clumens) +- Use shortname=winnt instead of shortname=win95 when + mounting /boot/efi (pjones) +- Do not strip leading or trailing whiltespace from + passphrases. (#437499) (dlehman) +- Set methodstr for nfsiso installs (#437541). (clumens) +- Create and check /boot/efi correctly, and use preexisting + one if available. (pjones) +- Handle /boot/efi and /boot both as bootrequests (pjones) +- Emit "efi" as /boot/efi's filesystem type (pjones) +- Add EFI handling to the bootloader setup choices. (pjones) +- Add efi to the ignoreable filesystem list. (pjones) +- Add EFIFileSystem, and getMountName() to hide that it's really vfat. (pjones) +- Add isEfiSystemPartition(), and use it where appropriate (pjones) +- Call getAutoPartitionBoot with our partition list as an arg. (pjones) +- Don't show the epoch in package selection either (#437502). (clumens) +- Fix some errors on reporting which files are being downloaded. (clumens) +- Revert "Handle /boot and /boot/efi separately, plus fixes" (pjones) +- Handle /boot and /boot/efi separately, plus fixes (pjones) +- Get rid of unused >1024 cylindar check, fix text of boot + check exceptions. (pjones) +- Make bootRequestCheck() check /each/ boot partition like it's + supposed to, (pjones) +- Fix shell quoting on numbers > 9, and fix an error message. (pjones) +- Don't show the epoch in the progress bar (#437502). (clumens) +- Include efibootmgr in the instroot (pjones) + +* Thu Mar 13 2008 Chris Lumens - 11.4.0.52-1 +- Don't unmount NFS source so NFSISO will work. (clumens) +- Fix the format of the method=hd: parameter. (clumens) +- Fix creating new users in kickstart. (clumens) +- "gtk-edit" isn't valid in text mode. (clumens) +- Ignore LUKS headers on partitions containing RAID signatures. + (#437051) (dlehman) +- The xconfig command with no X running doesn't make sense. (clumens) + +* Wed Mar 12 2008 Jeremy Katz - 11.4.0.51-1 +- yum.remove removes installed packages, not to be installed + packages (#436226) (katzj) +- Make the /tmp/updates vs RHupdates code at least a little readable. (pjones) +- Allow vfat update images. (pjones) +- Fix syntax error (pjones) +- Add a progress bar for when we're downloading headers (#186789). (clumens) +- mount will set up the loopback device if we let it. (clumens) +- Fix mounting problems with NFSISO images. (clumens) +- Simplify the logic for the upgrade arch check (katzj) +- Add a fallback method for determining the architecture of installed + system during an upgrade (#430115) (msivak) +- Avoid a traceback (#436826) (katzj) +- Make sure host lookups work for manual net config (#435574). (dcantrell) + +* Tue Mar 11 2008 Jeremy Katz - 11.4.0.50-1 +- Focus root password entry box (#436885). (dcantrell) +- Make sure default is SHA-512 for libuser.conf. (dcantrell) +- Fix detection of ISO images on a hard drive partition. (clumens) +- Devices names aren't prefixed with /dev/. (clumens) +- Filter out /dev/ram* devices from the list of hdiso partitions. (clumens) +- But make sure that we've activated the keymap now that X + follows its defaults (katzj) +- Don't set a keyboard in the X config, we should just do this + at runtime (katzj) +- Writing out the nfs method line is a lot simpler now. (clumens) +- Use /mnt/sysimage/tmp/cache for the yum cache, instead of the + ramdisk. (clumens) +- Translation updates (nl, gu, ml, mr, pa) + +* Mon Mar 10 2008 Chris Lumens - 11.4.0.49-1 +- Use the full path to the .discinfo file (#436855). (clumens) +- List netinst.iso/boot.iso in .treeinfo (#436089) (katzj) +- Convinced to change the name back to boot.iso (katzj) +- Only pass the file path to {ftp,http}GetFileDesc. (clumens) +- Pass the correct NFS method parameter to stage2 (#436360). (clumens) +- Fix logging messages to not display the hostname twice. (clumens) +- Fix traceback with text mode adding iscsi (#436480) (katzj) + +* Thu Mar 06 2008 Jeremy Katz - 11.4.0.48-1 +- Don't use the bits from $UPDATES unless $UPDATES exists (katzj) +- Fix horkage with busybox stuff. There's now start-stop-daemon (katzj) +- Require new enough version of yum-utils (katzj) +- Pass the --archlist option to yumdownloader (jkeating) +- Update pt_BR translation + +* Wed Mar 05 2008 Jeremy Katz - 11.4.0.47-1 +- Fix the build again (katzj) + +* Wed Mar 05 2008 Jeremy Katz - 11.4.0.46-1 +- Don't require some things which we fall back gracefully when not there (katzj) +- Check for filesystem utilities to see if a filesystem is supported (katzj) +- Write out keyboard settings before installing packages. (related + to #429358) (dlehman) +- Update pl translation +- Make sure http:// or ftp:// is specified (#436089) (katzj) +- Fix segfault when port is specified (#435219) (katzj) +- Use ntfsresize -m to get minimum size (#431124) (katzj) +- Use the right path to the .discinfo file when validating a tree. (clumens) + +* Tue Mar 04 2008 Jeremy Katz - 11.4.0.45-1 +- Fix the build. + +* Tue Mar 04 2008 Jeremy Katz - 11.4.0.44-1 +- Add --archlist to repoquery call. (jkeating) +- Translation updates (pl, nl, ja) +- Handle efibootmgr and grub.efi in upd-instroot. (pjones) +- Merge in branch to implement stage2= parameter. (clumens) +- Revert the memtest86 bits for EFI, since this gets run on + multiple arches. (pjones) +- Use iutil.isEfi() instead of testing for ia64-ness. (pjones) +- Only do gptsync if we're not using EFI. (pjones) +- Don't do gptsync if we're using EFI. (pjones) +- Use gpt on all efi platforms. (pjones) +- Rework isEfi() to be slightly more conservative. (pjones) +- Test for using efi rather than arch==ia64 (pjones) +- Don't copy memtest86 in on EFI since it won't work. (pjones) +- Add comment regarding usage of elilo (pjones) +- Free some variables so we can http GET twice if needed. (clumens) +- Change the method config prompts. (clumens) +- Support stage2= for CD installs in loader. (clumens) +- Support stage2= for HD installs. (clumens) +- Support stage2= for NFS installs. (clumens) +- Support stage2= for URL installs. (clumens) +- Update the method string handling for NFS and URL installs. (clumens) +- mountStage2 now needs to take an extra argument for updates. (clumens) +- If stage2= is given, it overrides the check for a CD stage2 image. (clumens) +- Support the stage2= parameter, and add a flag for it. (clumens) + +* Mon Mar 03 2008 Jeremy Katz - 11.4.0.43-1 +- Only use UUID= for devices we would have labeled. Related to #435228 (katzj) +- If we don't find a kernel package, then give a better error (katzj) +- Translation updates (cs, de) + +* Sun Mar 02 2008 Jeremy Katz - 11.4.0.42-1 +- Fix a traceback when we have an error. Related to #433658 (katzj) +- Add virtio_pci in hopes of getting virtio working (katzj) +- Pull in the bits of pirut that we use so that we don't depend on pirut (katzj) +- Default to RAID1 instead of RAID0 (#435579) (katzj) +- Refresh po (katzj) +- Fix traceback leaving task selection screen (#435556) (katzj) +- More ext4 vs ext4dev nonsense. (#435517) (katzj) +- Fix reverse name lookup. (pjones) + +* Thu Feb 28 2008 Jeremy Katz - 11.4.0.41-1 +- Don't write out /etc/rpm/platform anymore. (katzj) +- anaconda-runtime now needs yum-utils (katzj) +- Add 'testiso' target (katzj) +- Remove rescue cd creation scripts (katzj) +- Take --updates with location of additional updates beyond the package + set used (katzj) +- Change the ISOs we build (katzj) +- Take advantage of yum repos being available (katzj) +- Allow recovery from some missing repodata conditions. (clumens) +- Rework the repo editor screen to be more modular. (clumens) +- Move doPostImages to be run after the second stage build (katzj) +- Ensure that group info for txmbrs is accurate after we reset (katzj) +- Fix backwards logic for yum verbosity (katzj) +- No more arc (#435175) (katzj) +- Remove an unused method. (clumens) + +* Tue Feb 26 2008 Jeremy Katz - 11.4.0.40-1 +- Use non-deprecated HAL properties. (notting) +- More crud to deal with the fact that rawhide trees are composed weird (katzj) +- Gtk does not have the error type, use custom with proper + icons. (#224636) (msivak) + +* Mon Feb 25 2008 Jeremy Katz - 11.4.0.39-1 +- Fix up symlinks that could be broken with our movement here (#434882) (wwoods) +- pvops xen uses hvc as its console (#434763) (katzj) +- Follow symlinks when looking for the anaconda-runtime package. (jkeating) + +* Sun Feb 24 2008 Jeremy Katz - 11.4.0.38-1 +- Write out UUID in the fstab (#364441) (katzj) +- Add support for getting UUID using libblkid (katzj) +- Fix calculation of sizes of LVs when resizing (#433024) (katzj) +- Add back some bits for text mode (katzj) +- Remove advanced bootloader bits (katzj) +- Add support for actually changing where the boot loader gets + installed as well (katzj) +- Less text. (katzj) +- Reorder things a little, clean up spacing (katzj) +- Use a tooltip instead of a long bit of text that most people + don't read (katzj) +- Remove advanced checkbox (katzj) +- Switch the grub installation radio to be a checkbutton. Cleanups for + grub only (katzj) +- Lets redirect to /dev/null to ensure that what we get in DIR is the + result of pwd. (jgranado) +- Catch the error emmited by lvm tools during logical volume + creation process (#224636). (msivak) +- Don't try to lock /etc/mtab, fix error detection when mount fails. (clumens) +- Don't append (null) to the NFS mount options. (clumens) +- There's no need to wait if the last download retry failed. (clumens) +- the '-o' is appended to the mount command in imount.c (jgranado) +- Use full path to device for mount in findExistingRootPartitions. (dlehman) +- Map preexisting encrypted devs before mounting everything + in mountRootPartition. (dlehman) +- Fix traceback on test mount in findExistingRootPartitions. (dlehman) +- Use SHA-512 by default for password encryption. (dcantrell) +- Clean up root password user interfaces. (dcantrell) + +* Tue Feb 19 2008 Chris Lumens - 11.4.0.37-1 +- Default to the right timezone when language is changed (#432158). (clumens) +- Fix another text mode network config traceback (#433475). (clumens) +- More scripts cleanups. (jgranado) +- Remove more references to ARC (#433229). (clumens) +- Mount flags should be an optional argument (#433279, #433280). (clumens) +- We don't need productpath anymore, so stop taking it as an option (katzj) +- Set yum output level based on whether or not we've passed --debug or + not (katzj) +- Clean up invocation of mk-images from buildinstall (katzj) +- Clean up invocation of upd-instroot from buildinstall (katzj) +- Remove some legacy stuff that's no longer relevant from + .discinfo/.treeinfo (katzj) +- Don't depend on product path for finding the anaconda-runtime + package (katzj) +- Make buildinstall a little clearer (katzj) +- Use $LIBDIR instead of lib globbing to avoid problems with chroots (katzj) +- Add some error handling around populateTs. (clumens) + +* Thu Feb 14 2008 David Cantrell - 11.4.0.36-1 +- Fix up firmware inclusion. This didn't actually ever work. (katzj) +- Fix up the groff related stuff for man pages to be done in the correct + place (katzj) +- remove yumcache (katzj) +- Don't do fixmtimes anymore (katzj) +- Don't compress translations (katzj) +- Don't manually duplicate things from package %%post scripts (katzj) +- Remove some unused options (--discs and --buildinstdir) (katzj) +- Keep /etc/nsswitch.conf and /etc/shells (katzj) +- Stop forcing passive mode for FTP by patching urllib (katzj) +- We don't use timezones.gz anymore anywhere (katzj) +- We shouldn't need to remove files that are only in -devel packages (katzj) +- Remove some obsolete files from the list to clean up noise in the + output (katzj) +- We want nss bits on all arches these days (katzj) +- Just use default /etc/nsswitch.conf and /etc/shells (katzj) +- alpha should have translations probably (katzj) +- Remove some things that aren't used anymore (katzj) +- Don't run pkgorder as a part of buildinstall anymore (katzj) +- Remove duplicate file from the file lists (katzj) +- Don't use the static versions of these anymore as they're likely to go + away (katzj) +- Remove weird s390 hack that shouldn't be needed any more (katzj) +- Make makebootfat less noisy (katzj) +- Get rid of dangling fobpath stuff; now that we're not mounting to + create (katzj) +- Ignore .bak files created by glade (katzj) +- Get rid of duplication for yaboot stuff to make scripts less noisy (katzj) +- Correct internationalization of exception handler text (msw) +- More fixing of mount paths (#432720) (katzj) +- securitylevel -> firewall in the spec file. (clumens) +- Include util-linux-ng, which contains mount (#432720). (clumens) +- When mounting stage2 on loopback, add -o loop to mount opts. (clumens) + +* Tue Feb 12 2008 Jeremy Katz - 11.4.0.35-1 +- Fix the build (katzj) + +* Tue Feb 12 2008 Jeremy Katz - 11.4.0.34-1 +- Handle modules with more than one description (#432414) (katzj) +- Finish HDISO installs, at least for DVDs (#431132). (clumens) +- Move migration to before mounting filesystems (katzj) +- Fix silly thinko in Eric's patch (katzj) +- Allow ext3->ext4 upgrades (sandeen) +- Do the man pages in rescue mode the right way. (jgranado) +- Merge branch 'master' of ssh://git.fedorahosted.org/git/anaconda (notting) +- Use /etc/adjtime as the configuration file for UTC/not-UTC. (notting) +- Remove all our own mount code. (clumens) +- Use the mount program instead of our own code. (clumens) +- Add the real mount programs to stage1. (clumens) +- Use the correct variables to get the ipv6 info. (#432035) (jgranado) +- Update error messages to match function names. (dcantrell) +- Rename nl.c to iface.c and functions to iface_* (dcantrell) +- In rescue mode, show interface configuration (#429953) (dcantrell) +- Add qla2xxx firmware (#377921) (katzj) +- Rename base repo (#430806). (clumens) +- Remove dep on anaconda from pkgorder (katzj) +- Remove no longer used dumphdrlist script (katzj) + +* Thu Feb 07 2008 Jeremy Katz - 11.4.0.33-1 +- Fix error message on continuing after changing cds with mediacheck (katzj) +- Fix the progress bar during mediacheck (#431138) (katzj) +- Ensure we disable SELinux if the live image isn't using it (#417601) (katzj) +- Correct nl_ip2str() cache iteration. (dcantrell) +- Check the fstype of the live image (katzj) +- Check for device existence rather than starting with /dev (katzj) +- The FL_TEXT flag has no reason to be here. (#207657) (jgranado) +- Don't traceback when getLabels is called with DiskSet.anaconda set + to None. (dlehman) +- Pass arguments correctly to anaconda (katzj) +- Cancel on escape being pressed with autopart resizing (katzj) + +* Wed Feb 06 2008 Chris Lumens - 11.4.0.32-1 +- Make passwordEntry appear on the exn saving screen. (clumens) +- Don't allow disabling default repositories. (clumens) +- Make loopback device purposes line up with what stage2 expects. (clumens) +- Fix methodstr handling for hdiso installs (#431132). (clumens) +- Remove our own DNS functions, since glibc's are available now. (clumens) + +* Tue Feb 05 2008 Chris Lumens - 11.4.0.31-1 +- Copy over repodata from media after the install is done (#381721) (katzj) +- Add resizing support in autopartitioning (katzj) +- Fix test mode with python-fedora installed (katzj) +- Add support for encrypted devices in rescue mode (dlehman). +- Allow creation of LUKSDevice with no passphrase. (dlehman) +- Fix hdiso installs in loader and in methodstr (#431132). (clumens) +- Avoid infinite loop in nl_ip2str(). (dcantrell) +- Force users to set a hostname (#408921) (dcantrell) +- Forward-port RHEL-5 fixes for s390x issues. (dcantrell) +- fsset.py tweaks for ext4dev & xfs (sandeen) +- When editing the raid partitions show raid memebers. (#352721) (jgranado) +- mdadm to create the mdadm.conf (#395881) (jgranado) + +* Wed Jan 30 2008 David Cantrell - 11.4.0.30-1 +- Initialize int in doConfigNetDevice() to fix compiler warnings. (dcantrell) + +* Wed Jan 30 2008 David Cantrell - 11.4.0.29-1 +- Handle putting updates ahead of anaconda in the updates= case too. (clumens) +- Make sure the device name starts with /dev (#430811). (clumens) +- Revert "Initial support for network --bootproto=ask (#401531)." (clumens) +- (#186439) handle lv names with "-" when doing kickstart. (jgranado) +- Remove the last references to makeDevInode (#430784). (clumens) +- Don't traceback trying to raise an exception when making + users (#430772). (clumens) + +* Mon Jan 28 2008 David Cantrell - 11.4.0.28-1 +- Go back to the method screen if back is hit on nfs config (#430477). (clumens) +- Fix dmidecode dependency (#430394, Josh Boyer - 11.4.0.27-1 +- Fix generation of stage1 images. (notting) +- Fix a typo in mk-images. (clumens) +- Allow removing packages by glob now that yum supports it. (clumens) + +* Thu Jan 24 2008 Chris Lumens - 11.4.0.26-1 +- Fix a traceback on the driver selection screen (#428810). (clumens) +- Map 'nousb', 'nofirewire', etc. to be proper module blacklists. (notting) +- Clean off leading and trailing whitespace from descriptions. (notting) +- Write out /etc/rpm/platform on livecd installs. (clumens) + +* Wed Jan 23 2008 David Cantrell - 11.4.0.25-1 +- Include new firstboot module. (clumens) +- Conditionalize ntfsprogs as not all arches include it. (clumens) +- Remove kudzu-probe-stub. (clumens) +- Remove rogue references to kudzu. (clumens) +- Add dogtail support (#172891, #239024). (clumens) +- Fix some error reporting tracebacks. (clumens) + +* Tue Jan 22 2008 Chris Lumens - 11.4.0.24-1 +- Avoid possible SIGSEGV from empty loaderData values. (dcantrell) +- Do not require glib2-devel for building. (dcantrell) +- Use libnl to get interface MAC and IP addresses (dcantrell) +- Don't refer to the libuser.conf when creating users (#428891). (clumens) +- pcspkr works (or isn't even present), per testing on #fedora-devel (notting) +- Inline spufs loading for ppc. (notting) +- Load iscsi_tcp, so that iSCSI actually works (notting) +- inline ipv6 module loading (notting) +- If we execWith a program, require the package containing it. (clumens) +- Add a repository editor. (clumens) +- Add the default repo to the UI so it can be edited later. (clumens) +- Fix non-latin-1 locale display in the loader. (notting) +- Make sure anaconda has precedence in the search path (#331091). (clumens) +- When starting RAID arrays, the device node may not already exist. (notting) +- Fix a typo that's breaking kickstart network installs. (clumens) +- Don't allow backing up to partitioning (#429618). (clumens) +- Update font paths. (clumens) + +* Mon Jan 21 2008 David Cantrell - 11.4.0.23-1 +- Try to fix a problem creating users via kickstart (#428891, clumens) +- Fix a loader segfault doing kickstart nfs installs (clumens) +- Move more interactive steps ahead of partitioning (clumens) +- If we can't possibly add advanced devices, don't offer it (#429210, clumens) +- Don't flush after rescanning so recently attached disks are + available (clumens) +- If bootproto is dhcp, unset any static settings (#218489, dcantrell) +- Add some groups to pkgorder to make the CDs come out right (pjones) +- Fix traceback when using non-encrypted RAID (notting) +- Complete the patch for dhcptimeout (#198147, #254032, msivak) + +* Wed Jan 16 2008 David L. Cantrell Jr. - 11.4.0.22-1 +- Require the latest libdhcp (dcantrell) +- Don't set currentMedia when we're on a network install (#428927, clumens) +- Don't offer two reboot options (clumens) +- Remove fsopts that are already defaults (#429039, clumens) +- Remove isofs module to get rid of a FATAL message (clumens) +- Add the crc32c kernel module for iscsi (#405911, clumens) +- Add MAC address to the network device selection screen (#428229, clumens) +- Initial support for network --bootproto=ask (#401531, clumens) +- Remove an extra newline (clumens) +- Add firstaidkit to the rescue image (jgranado) +- Fix the progress bar to hit 100%% on the last package (#428790, clumens) +- Add some output so the startup delay doesn't seem quite so long (clumens) +- Initial kickstart support for encrypted partitions (clumens) + +* Mon Jan 14 2008 David Cantrell - 11.4.0.21-1 +- Inherit from the right versions of pykickstart classes (clumens) +- Update for nss files moving to /lib (clumens) +- Remove unneeded arguments from detectHardware function (notting) +- Symlink all udev support binaries to udevadm (notting) +- /sbin/restorecon on /etc/modprobe.d (notting) +- Add the kickstart syntax version to the kickstart file (clumens) +- Require latest libdhcp to fix x86_64 SIGABRT problems + +* Sun Jan 13 2008 Chris Lumens - 11.4.0.20-1 +- Install new udev paths so HAL can talk to it (notting) +- Also get DSO deps for setuid binaries (like X). (clumens) +- Fix a bunch of pychecker errors. (clumens) + +* Fri Jan 11 2008 Chris Lumens - 11.4.0.19-1 +- Make sure the arch is listedat the top of all loader screens. (clumens) +- Add the version number really early in the log file too. (clumens) +- Require latest libdhcp (dcantrell) +- Add nicdelay parameter to loader, so we can wait before sending DHCP + requests. (msivak) +- Add dhcpdelay to loader so we can modify the default dhcp timeout + (#198147, #254032). (msivak) +- Fix the selected device when disabling entries in Add advanced drive + dialog. (#248447) (msivak) +- Include mkfs.gfs2 (#356661). (clumens) +- Use the new default Japanese font (#428070). (clumens) +- More urlinstall loader fixes. (clumens) + +* Wed Jan 09 2008 Chris Lumens - 11.4.0.18-1 +- Fix encrypted autopart traceback. (dlehman) +- Allow for better recovery if the CD/DVD is bad. (clumens) +- If downloading the updates image fails, prompt for a new location. (clumens) +- X now relies on libpciaccess, so add it to our list. (clumens) +- Erase temporary packages after installing them on all methods. (clumens) + +* Mon Jan 07 2008 Chris Lumens - 11.4.0.17-1 +- Make text mode root password dialog default match GUI. (clumens) +- Fix a segfault in making the URL dialog box. (clumens) + +* Sun Jan 06 2008 Chris Lumens - 11.4.0.16-1 +- Fix checking the timestamps on split media installs. (clumens) +- Fix reference to isodir to avoid a post-install traceback. (clumens) +- Use a better test when populating the URL panel in loader. (clumens) +- Don't use error messages from dosfslabel as the label (#427457). (clumens) +- No longer require kudzu (#427680). (clumens) + +* Thu Jan 03 2008 David Cantrell - 11.4.0.15-1 +- Require latest libdhcp (#378641) (dcantrell) + +* Thu Jan 03 2008 David Cantrell - 11.4.0.14-1 +- Precreate /etc/modprobe.d in installroot (jkeating) +- 'import sets' in image.py (jkeating) +- Fix traceback when displaying required media (clumens) + +* Tue Jan 01 2008 Jeremy Katz - 11.4.0.13-1 +- Make it obvious which partitions are being formatted and encrypted (katzj) +- Set initial sensitivity of encrypt button correctly (katzj) +- Fix traceback on invalid passphrase (#426887) (katzj) +- Use mkstemp() instead of tempnam() (katzj) +- Don't resize filesystems which are being formatted (#426466) (katzj) +- Add cracklib-dicts (#426444) (katzj) +- Fix build (notting) diff --git a/anaconda.spec.in b/anaconda.spec.in new file mode 100644 index 0000000..018a63d --- /dev/null +++ b/anaconda.spec.in @@ -0,0 +1,5069 @@ +%define livearches %{ix86} x86_64 ppc ppc64 +%define _libdir %{_prefix}/lib + +Summary: Graphical system installer +Name: anaconda +Version: #VERSION# +Release: 1%{?dist} +License: GPLv2+ +Group: Applications/System +URL: http://fedoraproject.org/wiki/Anaconda + +# To generate Source0 do: +# git clone http://git.fedorahosted.org/git/anaconda.git +# git checkout -b archive-branch anaconda-%{version}-%{release} +# ./autogen.sh +# make dist +Source0: %{name}-%{version}.tar.bz2 + +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +# Versions of required components (done so we make sure the buildrequires +# match the requires versions of things). +%define dmver 1.02.17-6 +%define gettextver 0.11 +%define genisoimagever 1.1.9-4 +%define intltoolver 0.31.2-3 +%define libnlver 1.0 +%define libselinuxver 1.6 +%define pykickstartver 1.68 +%define rpmpythonver 4.2-0.61 +%define slangver 2.0.6-2 +%define yumver 2.9.2 +%define partedver 1.8.1 +%define pypartedver 2.5-2 +%define syscfgdatever 1.9.48 +%define pythonpyblockver 0.45 +%define e2fsver 1.41.0 +%define nmver 1:0.7.1-3.git20090414 +%define dbusver 1.2.3 +%define createrepover 0.4.7 +%define yumutilsver 1.1.11-3 +%define iscsiver 6.2.0.870-3 +%define pythoncryptsetupver 0.0.6 +%define mehver 0.4 +%define sckeyboardver 1.3.1 + +BuildRequires: audit-libs-devel +BuildRequires: bzip2-devel +BuildRequires: device-mapper-devel >= %{dmver} +BuildRequires: e2fsprogs-devel >= %{e2fsver} +BuildRequires: elfutils-devel +BuildRequires: gettext >= %{gettextver} +BuildRequires: gtk2-devel +BuildRequires: intltool >= %{intltoolver} +BuildRequires: isomd5sum-devel +BuildRequires: libarchive-devel +BuildRequires: libX11-devel +BuildRequires: libXt-devel +BuildRequires: libXxf86misc-devel +BuildRequires: libblkid-devel +BuildRequires: libcurl-devel +BuildRequires: libnl-devel >= %{libnlver} +BuildRequires: libselinux-devel >= %{libselinuxver} +BuildRequires: libsepol-devel +BuildRequires: libxml2-python +BuildRequires: newt-devel +BuildRequires: pango-devel +BuildRequires: pykickstart >= %{pykickstartver} +BuildRequires: python-devel +BuildRequires: python-urlgrabber >= 3.9.1-5 +BuildRequires: rpm-devel +BuildRequires: rpm-python >= %{rpmpythonver} +BuildRequires: slang-devel >= %{slangver} +BuildRequires: xmlto +BuildRequires: yum >= %{yumver} +BuildRequires: zlib-devel +BuildRequires: NetworkManager-devel >= %{nmver} +BuildRequires: NetworkManager-glib-devel >= %{nmver} +BuildRequires: dbus-devel >= %{dbusver} +BuildRequires: system-config-keyboard >= %{sckeyboardver} +%ifarch %livearches +BuildRequires: desktop-file-utils +%endif +BuildRequires: iscsi-initiator-utils-devel >= %{iscsiver} +%ifarch s390 s390x +BuildRequires: s390utils-devel +%endif + +Requires: python-meh >= %{mehver} +Requires: policycoreutils +Requires: rpm-python >= %{rpmpythonver} +Requires: comps-extras +Requires: parted >= %{partedver} +Requires: pyparted >= %{pypartedver} +Requires: yum >= %{yumver} +Requires: libxml2-python +Requires: python-urlgrabber >= 3.9.1-5 +Requires: system-logos +Requires: pykickstart >= %{pykickstartver} +Requires: system-config-date >= %{syscfgdatever} +Requires: device-mapper >= %{dmver} +Requires: device-mapper-libs >= %{dmver} +Requires: dosfstools +Requires: e2fsprogs >= %{e2fsver} +Requires: gzip +Requires: libarchive +%ifarch %{ix86} x86_64 ia64 +Requires: dmidecode +%endif +Requires: python-pyblock >= %{pythonpyblockver} +Requires: libuser-python +Requires: newt-python +Requires: authconfig +Requires: system-config-firewall-base +Requires: cryptsetup-luks +Requires: python-cryptsetup >= %{pythoncryptsetupver} +Requires: mdadm +Requires: lvm2 +Requires: util-linux-ng >= 2.15.1 +Requires: system-config-keyboard >= %{sckeyboardver} +Requires: dbus-python +Requires: cracklib-python +Requires: python-bugzilla +Requires: python-nss +Requires: tigervnc-server +%ifarch %livearches +Requires: usermode +Requires: zenity +%endif +Requires: createrepo >= %{createrepover} +Requires: squashfs-tools +Requires: genisoimage >= %{genisoimagever} +%ifarch %{ix86} x86_64 +Requires: syslinux >= 3.73 +Requires: makebootfat +Requires: device-mapper +%endif +%ifarch s390 s390x +Requires: openssh +%endif +Requires: isomd5sum +Requires: yum-utils >= %{yumutilsver} +Requires: NetworkManager >= %{nmver} +Requires: dhclient +Requires: anaconda-yum-plugins +Requires: libselinux-python >= %{libselinuxver} +%ifarch %{sparc} +Requires: elftoaout piggyback +%endif +Obsoletes: anaconda-images <= 10 +Provides: anaconda-images = %{version}-%{release} +Obsoletes: anaconda-runtime < %{version}-%{release} +Provides: anaconda-runtime = %{version}-%{release} +Obsoletes: booty + +%description +The anaconda package contains the program which was used to install your +system. These files are of little use on an already installed system. + +%prep +%setup -q + +%build +%configure --disable-static +%{__make} %{?_smp_mflags} + +%install +%{__rm} -rf %{buildroot} +%{__make} install DESTDIR=%{buildroot} +find %{buildroot} -type f -name "*.la" | xargs %{__rm} + +%ifarch %livearches +desktop-file-install --vendor="" --dir=%{buildroot}%{_datadir}/applications %{buildroot}%{_datadir}/applications/liveinst.desktop +%else +%{__rm} -rf %{buildroot}%{_bindir}/liveinst %{buildroot}%{_sbindir}/liveinst +%endif + +%find_lang %{name} + +%clean +%{__rm} -rf %{buildroot} + +%ifarch %livearches +%post +update-desktop-database &> /dev/null || : +%endif + +%ifarch %livearches +%postun +update-desktop-database &> /dev/null || : +%endif + +%files -f %{name}.lang +%defattr(-,root,root) +%doc COPYING +%doc docs/command-line.txt +%doc docs/install-methods.txt +%doc docs/mediacheck.txt +%doc docs/anaconda-release-notes.txt +/lib/udev/rules.d/70-anaconda.rules +%{_bindir}/mini-wm +%{_sbindir}/anaconda +%ifarch i386 i486 i586 i686 x86_64 +%{_sbindir}/gptsync +%{_sbindir}/showpart +%endif +%{_datadir}/anaconda +%{_prefix}/lib/anaconda +%{_prefix}/lib/anaconda-runtime +%ifarch %livearches +%{_bindir}/liveinst +%{_sbindir}/liveinst +%config(noreplace) %{_sysconfdir}/pam.d/* +%config(noreplace) %{_sysconfdir}/security/console.apps/* +%{_sysconfdir}/X11/xinit/xinitrc.d/* +%{_datadir}/applications/*.desktop +%endif + +%changelog +* Wed May 12 2010 David Lehman - 13.42-1 +- bootloader timeout default should be None not 0 (#590661) (jkeating) + +* Fri May 07 2010 David Lehman - 13.41-1 +- Remove partitions after unpartitioned non-partition devices. (#588597) + (dlehman) +- Work around device node creation issues when creating EFI images. + (#589680) (pjones) +- Add support to livecd for arbitrarily complex dir structures. (#504986) + (dlehman) +- Do not automatically backtrace when telnetd quits (#588964). (clumens) + +* Tue May 04 2010 David Lehman - 13.40-1 +- Teach upd-instroot about i686 (jkeating) +- Enable network if it is needed when repo is added in UI (#577803). + (rvykydal) +- Tell dracut it should activate the first swap device (#572771) (hdegoede) +- Add boot= argument to kernel cmdline when in fips mode (hdegoede) +- Don't make all devices on the boot device selector immutable (#583028). + (clumens) +- Do not use --quiet and --nostart when doing selinux configuration + (#568528) (msivak) +- Check for not having found any disks after populating the tree (#588498) + (hdegoede) +- Don't add recovery partitions to the grub boot menu (#534066) (hdegoede) +- Default the global grub timeout to 5 for serial (jkeating) +- Make sure a given path exists before calling os.statvfs on it (#587662). + (clumens) +- Turn off BETANAG - we're getting close to the release (#587639). (clumens) +- Don't clear BIOS RAID member disks (#587066) (hdegoede) +- Remove devices from libparted's cache when destroying them (#586622) + (hdegoede) + +* Wed Apr 28 2010 David Lehman - 13.39-1 +- X input configuration has moved to /usr/share (#585621). (clumens) +- Keep the selected device count right when going back to filtering + (#572882). (clumens) +- Prune resize and format create/migrate actions if destroying a device. + (dlehman) +- Schedule actions when removing existing extended partitions. (#568219) + (dlehman) +- Don't try to zero out extended partitions. (dlehman) + +* Wed Apr 21 2010 David Lehman - 13.38-1 +- Restore storage.clearPartType after reset when backing out of GUI. + (#559233) (dlehman) +- Make Cancel button the default for 'Weak Password' dialog (#582660) (bcl) +- Set Create Storage focus to first active radio button (#582676) (bcl) +- livecd.py: set the selected keyboard (#583289). (akozumpl) +- Fix uninitialized variable compile error (#577501) (msivak) +- In groupListExists, log what groups don't exist. (notting) +- Add a questionInitializeDisk method to the rescue interface (#582304) + (hdegoede) +- Fix syntax error in kickstart.py (hdegoede) +- Add a script for running pylint on anaconda (hdegoede) +- Fix various syntax errors (hdegoede) +- Write an AUTO ... line to mdadm.conf (#537329) (hdegoede) +- filter_gui.py: fixup isProtected changes for biosraid and mpath (#581820) + (hdegoede) +- BIOS RAID sets get shown double when adding advanced storage (#574714) + (hdegoede) +- init: switch back to tty1 after the installer finishes. (#577380) + (akozumpl) +- Use None, not '', for empty repo proxy attributes (#572460) (rvykydal) +- Don't segfault if proxyUser or proxyPassword are empty (#580226). (clumens) +- Allow using pre-existing gpt labels for /boot on non EFI x86 (#572488) + (hdegoede) +- Re-Check minimum size of partition after running fsck on it (#578955) (bcl) +- Show protected devices in the filter UI, but make them immutable + (#568343). (clumens) +- Turn protected devices into a property on the Anaconda object. (clumens) +- Schedule removal actions for any format on a --onpart= device (#576976). + (clumens) +- Update the partition scheme icons to better looking ones (#579697). + (clumens) +- Sort partition create actions before other unpartitioned devices. + (#574379) (dlehman) +- Restore xdriver= functionality (#577312) (msivak) +- loader: con Newt into thinking LANG is always en_US.UTF-8 (#576541). + (akozumpl) +- Copy install.img to install target on http installs. (pjones) +- Make sure the install.img exists before attempting to copy (#578391). + (clumens) +- fix: Tackle race condition issues during X startup (#577708). (akozumpl) +- Copy install.img and remount no matter how many discs (#577196) (pjones) + +* Thu Mar 25 2010 David Lehman - 13.37-1 +- Unlock the CD tray door in isys.ejectcdrom() (#569377) (pjones) +- Texts under storage/formats missing from the .pot file (#576082). + (akozumpl) +- Translate the Back button in glade (#576082) (akozumpl) +- Add originalFormat handling to editLVMLogicalVolume. (#576529) (dlehman) +- Fix a cut&paste error that caused a traceback (#574743) (dlehman) +- yum requires the proxy settings to include a protocol (#576691). (clumens) +- Only look for extended partitions on partitioned devices (#576628) + (hdegoede) +- Fix referring to disks by-label, by-uuid, etc (#575855). (clumens) +- Fix syntax for passing a mapping to a translatable string (#576085). + (clumens) +- Catch NotImplementedError when scanning for disklabels (#566722) (hdegoede) +- Filter UI do not start / stop BIOS RAID sets to get there size (#574587) + (hdegoede) +- Make filter UI honor nodmraid cmdline option (#574684) (hdegoede) +- Properly align the first partition we create (#574220) (hdegoede) +- Update filter for translation log entries. (dlehman) + +* Mon Mar 22 2010 David Lehman - 13.36-1 +- Don't pass size=1 for autopart PVs. Use PartitionDevice's default size. + (dlehman) +- Make python start with correct default unicode encoding (#539904). + (akozumpl) +- Fixes bug #569373 - Change udev_trigger block calls to use change action + (bcl) +- Fix: execWithRedirect() unexpectedkeyword argument 'searchPath' (#572853) + (hdegoede) +- Do not crash on .autorelabel when using read only rescue mount (#568367) + (msivak) +- Do not crash when getDevices returns NULL (#567939) (msivak) + +* Mon Mar 15 2010 David Lehman - 13.35-1 +- Fully qualify _ped.IOException. (dlehman) + +* Mon Mar 15 2010 David Lehman - 13.34-1 +- parted.PartedDisk can throw IOExceptions too (#573539) (hdegoede) +- Fix recognition of partitions on mdraid arrays (#569462) (hdegoede) +- Use the disk name from kickstart in the shouldClear error message. + (clumens) +- Fix displaying error messages on cleanup/remove callback problems + (#572893). (clumens) +- Before running shouldClear, make sure a real disk was specified (#572523). + (clumens) +- exception.py: switch to tty1 before exit (#569071) (akozumpl) +- Preserve encryption setting when re-editing new encrypted LVs. (#568547) + (dlehman) +- Never pass "" as mountpoint to format constructors. + (dlehman) +- Fix up device dialogs' handling of preexisting formatting. (dlehman) +- Set up devices using their original formats for certain action types. + (#565848) (dlehman) +- Keep a handle to devices' original format instance. (#565848) (dlehman) +- Tell ld.so and friends not to use hardware optimized libs (#572178) + (pjones) +- By default, libcurl does not appear to follow redirects (#572528). + (clumens) +- Use '--keyword=P_:1,2' for plural gettext string extraction (#567417). + (dcantrell) +- fix: do not initialize the install interface whenever is is accessed + (#565872) (akozumpl) +- Select/Deselect All should only apply to the current tab (#516143, + #568875). (clumens) +- Don't try to write firewall and auth information twice (#568528). (clumens) + +* Thu Mar 04 2010 Chris Lumens - 13.33-1 +- On live installs, the syslog is /var/log/dmesg. (#568814). (clumens) +- Set up udev environment so anaconda's udev rules run in livecd. (#568460) + (dlehman) +- Ignore probably-spurious disklabels on unpartitionable devices. (#567832) + (dlehman) +- The justConfigFile parameter doesn't do anything on x86, either (#568567). + (clumens) +- Add python-devel's gdbinit, which provides useful debugging macros. + (pjones) +- Minor style fix (indent "cat" correctly") (pjones) +- doReIPL should return when going back through steps, too (#563862). + (clumens) +- Skip the filter/cleardisk steps on upgrades, too (#568334). (clumens) + +* Thu Feb 25 2010 David Lehman - 13.32-1 +- Check for the real device-mapper nodes in /proc/swaps. (#567840) (dlehman) +- It's necessary to give each vfprintf invocation a fresh va_list (#568235) + (akozumpl) +- Don't unconditionally unskip the partition step on failure (#567889). + (clumens) +- rpm doesn't always give the callback a tuple (#567878). (clumens) + +* Wed Feb 24 2010 David Cantrell - 13.31-1 +- Revert "There is no kernel-PAE package anymore, use kernel for xen + (#559347)." (dcantrell) +- logging: make loader say 'loader' (#563009). (akozumpl) +- Make loader log into syslog (so remote logging works for it as well) + (#524980) (akozumpl) + +* Tue Feb 23 2010 Chris Lumens - 13.30-1 +- Revert "Add back hald for Xorg input device queries (#553780)" (clumens) +- No longer remove persistent udev rules files (#566948). (clumens) +- When BUILDARCH==ppc64, set BASEARCH to ppc (#524235). (dcantrell) +- There is no kernel-PAE package anymore, use kernel for xen (#559347). + (dcantrell) +- Fix a typo, leaving one less string needing translation (#567427). + (clumens) +- Don't show BIOS RAID and multipath members in the cleardisks UI (#567281). + (clumens) + +* Mon Feb 22 2010 David Cantrell - 13.29-1 +- DiskLabel.status can't be determined so return False. (#563526,#561074) + (dlehman) +- Remove getDasdDevPort() and getDasdState() from isys.py. (dcantrell) +- Replace calls to isys.getDasdPorts() with calls to new getDasdPorts() + (dcantrell) +- Add getDasdPorts() to storage/dasd.py. (dcantrell) +- Remove isys/dasd.c, functions no longer needed in isys. (dcantrell) +- Fix creation of encrypted md members and pvs in kickstart. (#567396) + (dlehman) +- Don't align free space geometries in getFreeRegions. (#565692) (dlehman) +- Align extended partitions like we do other partitions. (dlehman) +- Don't allow the host's LD_LIBRARY_PATH affect get_dso_deps (#565887). + (clumens) +- Remove a couple redundant network bring up calls. (clumens) +- Reset the resolver cache after bringing up the network (#562209). (clumens) +- Let's have /etc/xorg.conf.d in stage2 (#566396) (akozumpl) +- Add the filter UI screens to the list of translatable files (#567216). + (clumens) +- Don't traceback when a user tries to put /boot on an LV (#566569) + (hdegoede) +- RescueInterface should inherit from InstallInterfaceBase too (hdegoede) + +* Fri Feb 19 2010 Chris Lumens - 13.28-1 +- Allow --ignoremissing to work for @base and @core (#566752). + (clumens) +- Add device node names to the filter UI, hidden by default (#566375). + (clumens) +- logging: initialize tty3 logging in anaconda_log, along with all other + basic loggers. (akozumpl) +- logging: introduce stderr logger and use it for critical situations in + kickstart.py. (akozumpl) +- logging: Loggers live a cosmopolitan life, forget about them after + created. (akozumpl) +- logging: remove AnacondaLog's unused default parameter. (akozumpl) +- logging, fix: setting remote logging from kicstart (akozumpl) +- logging: addFileHandler does not set autoLevel by default (akozumpl) +- Allow deleting the interface property, too (#566186). (clumens) + +* Tue Feb 16 2010 Chris Lumens - 13.27-1 +- Fix hiding the advanced button on the filter UI (#555769, #565425, + #560016). (clumens) +- PartitionDevice._setDisk: self.disk can be None. (#565930) (dlehman) +- Add currentSize method to the PartitionDevice class (#565822) (hdegoede) +- Fix instData removal mis merge (hdegoede) +- Require a format to have a mountpoint before testing for RO (#565879). + (clumens) +- The step is named cleardiskssel, not cleardisksel (#565873). (clumens) +- Use the LUKS UUID, not the filesystem UUID for dracut. (#561373) (dlehman) +- Show the correct device path when formatting as swap or luks. (dlehman) +- Fix ordering of arguments to xfs_admin for writing fs label. (#556546) + (dlehman) +- Log only the disks' names in PartitionDevice._setDisk. (dlehman) +- Check for the updates directory before using it (#565840). (clumens) +- Fix a handful of simple pychecker errors. (clumens) +- Add the .libs directories to PYTHONPATH so pychecker works again. (clumens) +- Warn when ignoring BIOS RAID members (#560932) (hdegoede) +- Intel BIOS RAID array not recognized (#565458) (hdegoede) +- Fix traceback in filter_gui.py when dealing with RAID10 BIOSRAID (#565444) + (hdegoede) +- Remove newly added partition from disk if subsequent commit fails. + (#559907) (dlehman) +- Use property() so we can assign to anaconda.intf (#565639). (clumens) +- Don't always set anaconda.upgrade to be True (#565622). (clumens) +- Re-remove the end of line from pychecker-false-positives. (clumens) +- cryptPassword is not part of any class (#565611). (clumens) +- Fix another missing import (#565599). (clumens) +- Add a missing import (#565592). (clumens) +- createLuserConf is not a part of any class (#565306). (clumens) + +* Fri Feb 12 2010 David Lehman - 13.26-1 +- Fix return values for dasd_settle_all() in linuxrc.s390 (#558881). + (dcantrell) +- Don't reset the default package selection on text installs (#564103). + (clumens) +- Remove rules handled by the device-mapper package's rules. (dlehman) +- Raise default lvm extent size from 4MB to 32MB. (dlehman) +- Add udev_settle after setup of LUKSDevice. (#534043) (dlehman) +- Pass '--force' to vgremove to avoid interactive prompts. (#563873) + (dlehman) +- Find rsyslog libs in $LIBDIR not /usr/$LIBDIR (jkeating) +- "_Do_ override BASEARCH with BUILDARCH, it does make sense (#524235)" + (msivak) +- Don't traceback during kickstart if no ignoredisk line is given (#563581). + (clumens) +- Allow any add-on python module to be updated via an updates.img. (clumens) +- Correct references to lcs and ctcm devices (#561816). (dcantrell) +- Use lsznet.raw from s390utils package (#563548). (dcantrell) +- Revert "Write ARP=no to ifcfg file when VSWITCH=1 is set on s390x + (#561926)." (dcantrell) +- Use /sys/devices/lcs instead of /sys/devices/cu3088 (#561816). (dcantrell) +- Wait for all DASDs to be online after autodetection (#558881). (dcantrell) +- Prompt user for install method when going back to STEP_METHOD. (dcantrell) +- Set initrd load address to 32MB for s390x (#546422). (dcantrell) +- Only show the error message if there was an error. (dlehman) +- Be even more clear about removing existing linux installations. (#493360) + (dlehman) +- Improve reboot modes in init.c and shutdown.c. (akozumpl) +- Be more explicit in which libraries we link with. (clumens) +- Do not override BASEARCH with BUILDARCH, it doesn't make sense (#524235) + (msivak) +- platform.checkBootRequest(): Fix use of map instead of filter (hdegoede) +- Improve platform.checkBootRequest() mdarray handling (hdegoede) +- Fix backtrace when trying to use LV for /boot (#562325) (hdegoede) +- Add lsusb to rescue mode stage2 (#562616) (hdegoede) +- No longer refer to instdata in attrSkipList. (clumens) +- Clarify which storage exceptions are bugs (#557928). (clumens) +- Merge branch 'no-instdata' (clumens) +- Fix partitioning help spelling (#562823). (clumens) +- Keep the end sector aligned when resizing partitions (#560647) (hdegoede) +- Write ARP=no to ifcfg file when VSWITCH=1 is set on s390x (#561926). + (dcantrell) +- Don't return the passphrase from hasKey. Should return a boolean. (dlehman) +- Fix splitting of error strings from program.log. (dlehman) +- Take advantage of default size for new partitions. (dlehman) +- Add a default size of 500MB for new partition requests. (dlehman) +- Remove check for MD_DEVNAME from udev_device_is_md. (#562024) (dlehman) +- Don't try to specify bitmap for RAID0 since mdadm doesn't allow it. + (#562023) (dlehman) +- Use 0 for a default max_req_size instead of None. (dlehman) +- Add missing methods to RescueInterface (pjones) +- Clean up imports in __main__. (clumens) +- Nothing uses InstallData anymore, so it can completely be removed. + (clumens) +- Last attribute out of InstallData, please turn out the lights. (clumens) +- Move firstboot into the Anaconda object. (clumens) +- Move bootloader into the Anaconda object. (clumens) +- Move escrowCertificates into the Storage object. (clumens) +- Move storage into the Anaconda class. (clumens) +- Move desktop to the Anaconda object. (clumens) +- Move timezone to the Anaconda object. (clumens) +- Move firewall into Anaconda. (clumens) +- Move users and security to the Anaconda object. (clumens) +- Move network to the Anaconda object. (clumens) +- Move keyboard to the Anaconda object. (clumens) +- Move instLanguage to the Anaconda object. (clumens) +- Move the writeKS and write methods from InstallData to Anaconda. (clumens) +- Move upgrade-related data to the Anaconda object. (clumens) +- Make a bunch of Anaconda attributes into properties. (clumens) +- Move instProgress to be an attribute on the InstallInterface. (clumens) +- Finally remove the x_already_set hack. (clumens) +- Move instClass to be an attribute on Anaconda. (clumens) +- Use anaconda.ksdata instead of anaconda.isKickstart. (clumens) +- Move ksdata to be an attribute on Anaconda. (clumens) +- Remove backend and other pointless attributes from InstallData. (clumens) +- Move the isHeadless attribute onto the Anaconda class. (clumens) +- Set displayMode on the anaconda object, then refer to that everywhere. + (clumens) +- Sort the attributes on class Anaconda for my future reference. (clumens) +- Install classes may no longer force text mode. (clumens) +- Add a Requires: for tigervnc-server (#561498). (clumens) + +* Wed Feb 03 2010 David Lehman - 13.25-1 +- Fix keymaps-override-ppc pickup in mk-images (#524235) (msivak) +- Fix typo in action sorting. Disklabels before partitions. (#560017) + (dlehman) +- Display ID_PATH for zFCP devices instead of looking for a WWID. (clumens) +- Fix a variety of filtering UI problems caused by switching models around. + (clumens) +- Add ID_SERIAL in as a backup in case there's no ID_SERIAL_SHORT. (clumens) +- Display ID_PATH instead of WWID for DASDs as well. (clumens) +- Rename the WWID column to Identifier. (clumens) +- Enforce maximum partition sizes. (#528276) (dlehman) +- Log commands as a string instead of as a list of strings. (dlehman) +- Strip off the timestamp from error output pulled from program.log. + (dlehman) +- Fix: execWithRedirect() logging stderr at wrong loglevel. (akozumpl) +- Fix: execWithCallback() not logging stderr. (akozumpl) +- Fix: ArithmeticError: Could not align to closest sector (#561278) + (hdegoede) +- Fixed parsing of strings with multiple values in pyudev (mgracik) +- On text kickstart installs, doBasePackageSelect still needs to run + (#559593). (clumens) +- Remove unused udev_parse_block_entry() function (hdegoede) +- Fixed the problem with string to list properties (#560262) (mgracik) + +* Mon Feb 01 2010 Chris Lumens - 13.24-1 +- Don't log the size of what we're unpacking anymore. (clumens) +- Fixup partition aligning (#560586) (hdegoede) +- Fix backtrace when adding mdraid arrays (#560360) (hdegoede) +- pyudev: explicitly specify all return value and argument types (#559394) + (hdegoede) +- Correctly add found multipath devices to our dict (#560029). (clumens) +- gtk.TreeStores are iterable, so use indices instead of iterators. (clumens) +- Build sorted models on top of filtered models to make column sorting work. + (clumens) +- Skip the filtering UI if there's only one disk in the machine. (clumens) +- Allow getScreen methods to indicate the screen should be skipped. (clumens) +- rename constants and a variable in anconda_log.py so the names make more + sense. (akozumpl) +- anaconda, storage and yum: log to tty3 in the same format as we log into + tty4 (akozumpl) +- Remove /sys prefix in udev_enumerate_devices() (hdegoede) +- Use libudev's enumerate_devices function (#559394) (mgracik) +- Update =~ regexps in lsznet.raw for bash-4.1 (#558537). (dcantrell) +- Startup iscsi / fcoe / zfcp before listing drives in the filter UI + (hdegoede) +- cleardisk_gui: Fix going back to the cleardisks gui (hdegoede) +- cleardisk_gui: Base autoselection of bootdev on detected BIOS order + (hdegoede) +- Fix typo in partition_ui_helpers_gui.py (hdegoede) +- Remove no longer used isys EDD code (hdegoede) +- Hookup new python EDD code (#478996) (hdegoede) +- Add pure python EDD code parsing and compareDrives substitute (#478996) + (hdegoede) +- Include /etc/netconfig in the initrd for NFS (#557704). (clumens) +- Log system messages to /tmp/syslog instead of /tmp/messages.log. (clumens) +- Make sure we always check /lib64 and /lib in find_library (#555669). + (dcantrell) +- Make sure we get required nss-softokn libs in the images. (dcantrell) +- Add 5 second ping delay for gateway and dns test on s390x (#536815). + (dcantrell) +- Update =~ regexps in linuxrc.s390 for bash-4.1 (#558537). (dcantrell) +- Add strace to the stage2 image and initrd. (clumens) +- multipath gives us CCISS devices names with ! in them, but we expect /. + (clumens) +- Fix visibility counting on filter notebook pages. (clumens) +- Fix thinko in displaying the first filter notebook page that disks. + (pjones) +- DMRaidArrayDevice don't pass major/minor to DMDevice.__init__ (#558440) + (hdegoede) +- Filter UI: don't show cciss controllers without sets (hdegoede) +- Filter UI: give BIOS RAID sets a usable model string and display that + (hdegoede) +- Make MDRaidArray description the same as DMRaidArray (hdegoede) +- Add DMRaidArrayDevice description and model properties (#558440) (hdegoede) +- DMRaidArrayDevices exist when created (#558440) (hdegoede) +- Clarify syslinux menu text (#557774) (hdegoede) +- Use description property for MDRaidArrayDevice model (hdegoede) +- MDRaidArrayDevice: Get rid of the ugly self.devices[0].type checking + (hdegoede) +- Make storage.unusedMDFoo also check mdcontainer members (hdegoede) +- Remove MDRaidArrayDevice biosraid property (hdegoede) +- Give MD BIOS RAID arrays there own type (hdegoede) +- Check for devices with no media present in filter_gui.py (#558177) + (hdegoede) +- multipath requires libaio.so (pjones) +- init, fixes a bug in getSyslog() causing a SEGV (akozumpl) + +* Fri Jan 22 2010 Chris Lumens - 13.23-1 +- Only /boot needs to be on one of the bootFSTypes. (#557718) (dlehman) +- nss files moved around again, NM needs more (#557702) (dcantrell) +- Fix broken log message. (pjones) +- MDRaidMember.__str__ add biosraid attribute to the returned string + (hdegoede) +- Remove setting of _isDisk and _partitionable from iscsi and fcoe disk code + (hdegoede) +- Add isDisk property to MDRaidArrayDevice (hdegoede) +- Make isDisk a property (hdegoede) +- Remove DMRaidDevice.mediaPresent method (hdegoede) +- Honor clearPartDisks when clearing whole disk formatting formatted disks + (hdegoede) +- Fixup MDRaidArrayDevice.biosraid (hdegoede) +- Update exclusiveDisks when handling mdraid BIOSRAID in isIgnored (hdegoede) +- MDRaidDevice does not have serial, vendor or bus arguments (hdegoede) +- Don't traceback on devices without a serial (hdegoede) +- Make addUdevPartitionDevice add lvm filters for ignored partitions + (hdegoede) +- Remove BIOSRAID see if ignored again code from addUdevPartitionDevice + (hdegoede) +- Remove special partition handling from isIgnored (hdegoede) +- Fix MDRaidArrayDevice mediaPresent to not depend on paritioned state + (hdegoede) +- Special handling for mdraid BIOS RAID sets in exclusive disks (hdegoede) +- 2 small mdraid related storage/udev.py changes (hdegoede) +- Fix an infinite loop by properly iterating over the disks store (#557856). + (clumens) +- Prevent init from telling us its story if the shutdown was planned. + (akozumpl) +- Add a description attribute to MDRaidArrayDevice (hdegoede) +- Don't do exclusiveDisks checking for BIOS RAID members (hdegoede) +- Fix a syntax error in filter_gui.py (hdegoede) +- Make multipath support use device-mapper-multipath to setup mpaths. + (pjones) +- Make PartitionDevice have its own teardown() when used with mpath. (pjones) +- Create multipath.conf (pjones) +- Make sure MultipathDevice is setup correctly. (pjones) +- List biosraids w/ disks and don't include them w/ md arrays in partgui. + (dlehman) +- Add biosraid property and use it in MDRaidArrayDevice.partitionable. + (dlehman) +- Make partitionable a property of StorageDevice instead of a plain attr. + (dlehman) +- Remove the multipath name generator, it is no longer used. (pjones) +- Set StorageDevice.exists before calling Device.__init__ (pjones) +- Add another command to .bash_history. (pjones) +- Introducing a proper syslog daemon allows us to remove the syslogd stub we + have. (akozumpl) +- Merge branch 'forward_all' (akozumpl) +- Python logging is talking to the syslog daemon. (akozumpl) +- make dracut only activate the root LV (#553295) (hdegoede) + +* Wed Jan 20 2010 David Cantrell - 13.22-1 +- Add mpath device to selection instead of its constituents. (pjones) +- Make all StorageDevice-s support .vendor and .model (pjones) +- Add a parser for 'multipath -d' output. (pjones) +- Multipath members should not be added to the ignored disk list. (pjones) +- Add udev accessor for ID_MODEL_FROM_DATABASE/ID_MODEL. (pjones) +- Add udev_device_get_multipath_name(). (pjones) +- Use mpath names instead of serials to group them. (pjones) +- Add an exception to use when multipath fails. (pjones) +- Add missing log_method_call()s. (pjones) +- Introduces rsylogd to anaconda (part of #524980) (akozumpl) +- Fix compile problem from 65a3c05. (akozumpl) +- Remove unnecessary free from the rpmextract error handler (msivak) +- Fix SIGSEGV in dlabel feature (#556390) (msivak) +- Support ignore all/reinit all on the disk reinitialization question + (#512011). (clumens) +- Handle reboot better on s390 (#533198) (dcantrell) +- Reset network setting input counters for IPv4 and IPv6 (#553761). + (dcantrell) +- Fix reading dasd status sysfs attribute (#536803). (dcantrell) +- Fix whitespace error that was introduced. (pjones) +- setStage2LocFromCmdline() shouldn't strdup so much. (pjones) +- s390 CHPID types must be treated in hex for lookup table to work (#552844) + (maier) +- Fixed the setting of LD_LIBRARY_PATH in rescue (mgracik) +- Use StorageError insead of enumerating all the different storage errors. + (pjones) +- Get rid of "stage2param" in parseCmdLineFlags(); it is unused. (pjones) +- Make clearDisksWindow use device.model not device.partedDevice.model + (pjones) +- Include device-mapper-multipath in stage2.img (pjones) +- Load all scsi_dh_* modules, since they can't be modprobe by aliases... + (pjones) +- Display the first filter notebook page that has any disks on it. (clumens) +- The firmware and additional-web-server groups no longer exist (#555609). + (clumens) +- Fix a traceback adding RAID devices to the filtering UI. (clumens) +- reIPL code cleanup in loader (dcantrell) +- Show call depth with spaces in log_method_call() (pjones) +- iutil.execWithRedirect() hasn't used searchPath= since 2006. Take it out. + (pjones) +- Look for the SSH config file in /etc/ssh on s390 as well (#555691). + (clumens) +- Changed the architecture check from __ppc64__ to __powerpc64__ (#555669) + (mgracik) +- Fix the blkid infinite loop. (#555601) (msivak) +- Testing mode was removed. (rvykydal) +- There's no reason to keep bits of mkinitrd in upd-instroot. (pjones) +- Support the new excludedGroupList in pykickstart (#554717). (clumens) +- Use passed in anaconda parameter instead of relying on handler (hdegoede) +- kickstart.py: Fix stdoutLog not being defined (hdegoede) +- pylint error fixes round 2 (hdegoede) +- Fixup various errors detected by pylint (hdegoede) +- mdraid: various changes to options for new mdraid array creation (hdegoede) +- Emit a dracut setup string for the root device itself (hdegoede) +- Fix path mistakes in dasd_settle() in loader/linuxrc.s390 (dcantrell) +- Do not write HWADDR to ifcfg file on s390x for OSA Layer 2 (#546005) + (dcantrell) +- Poll DASD status for 'online' or 'unformatted' (#536803) (dcantrell) +- Add back hald for Xorg input device queries (#553780) (dcantrell) +- Support moving multiple rows at once in the cleardisks UI. (clumens) +- Allow disks in the filter and cleardisks UIs to be selected via + double-click. (clumens) +- Don't log the big parted.Partition string every time we do a flag op. + (dlehman) +- Check for disklabels on unpartitionable devices. (#539482) (dlehman) +- Make partitioned attr depend on whether the device is partitionable. + (dlehman) +- Make sure to clear partitions before destroying a disklabel. (dlehman) +- Raise an exception when /etc/fstab contradicts detected fs type (#536906) + (dlehman) +- Don't include read-only filesystems in fsFreeSpace. (#540525) (dlehman) +- NTFS filesystems are not really modifiable in any real sense. Admit it. + (dlehman) + +* Tue Jan 12 2010 Chris Lumens - 13.21-1 +- Fix implicit declaration of things in sys/stat.h. (clumens) + +* Tue Jan 12 2010 Chris Lumens - 13.20-1 +- devicetree.devices is a list, not a dict (#554455). (clumens) +- Try to copy the correct traceback file, not anacdump.txt. (clumens) +- Make sure /tmp/DD exists before trying to copy it. (clumens) + +* Fri Jan 08 2010 David Cantrell - 13.19-1 +- st_size is off64_t on i386, off_t on others. (dcantrell) + +* Fri Jan 08 2010 David Cantrell - 13.18-1 +- RPM version check correction. (dcantrell) + +* Fri Jan 08 2010 David Cantrell - 13.17-1 +- fstat->st_size is a long unsigned int, not a long long unsigned int. + (dcantrell) +- Use libarchive and rpm pkg-config files during build. (dcantrell) +- Take ignoredDisks into account on the filter screen as well. (clumens) +- Don't wait on the filtertype screen on kickstart installs. (clumens) +- Our overridden AutoPart class must be mentioned in commandMap. (clumens) +- Reword filter UI introductory text to be less confusing. (clumens) +- Install the driver discs according to what was loaded in stage1 (msivak) +- Use the updated DriverDisc code in loader (msivak) +- Backport the RHEL5 DriverDisc functionality (msivak) +- Include depmod in stage1 and set it to prefer the DD directory (msivak) +- Add a function to get paths to loaded modules (msivak) +- Add rpm extraction routines (use librpm and libarchive) (msivak) +- Add DriverDisc v3 documentation (msivak) +- When displaying the filter UI, check devices that are in exclusiveDisks. + (clumens) +- get rid of global import of anaconda_log (akozumpl) +- introduce loglevel flag and use it in yum's tty3 logging (akozumpl) +- Remove LoggerClass but maintain loglevel= functionality (akozumpl) +- Do not duplicate exclusiveDisks when going back to filtering UI. (rvykydal) +- Fixes problems in the manual network configuration screen in loader with + IPv6. (akozumpl) +- Bring back missing IPv6 pieces that were lost in time. (dcantrell) +- Add configuration option to enable/disable IPv6 support. (dcantrell) +- Ask about LVM inconsistencies only in storageinit step. (rvykydal) +- Ask about disk initialization only in storageinit step. (rvykydal) +- Fix partition request sorting based on number of allowed disks. (#540869) + (dlehman) + +* Wed Jan 06 2010 Chris Lumens - 13.16-1 +- Add libblkid as a BuildRequires. (clumens) + +* Wed Jan 06 2010 Chris Lumens - 13.15-1 +- Also remove requirement for libbdevid (hdegoede). +- Update the python-pyblock version requirement, too. (clumens) +- Bump the required version numbers on a couple of components. (clumens) +- ID_BUS is not always defined (on virt, for instance) so handle that. + (clumens) +- opts should always be treated as a list inside isys.mount(). (clumens) + +* Mon Jan 04 2010 Chris Lumens - 13.14-1 +- Include fontconfig files needed for scaling of Meera fonts (#531742, + #551363). (clumens) +- Don't write dracut kernel cmdline paramters to anaconda-ks.cfg (hdegoede) +- Write dracut rd_NO_foo options to grub.conf (hdegoede) +- Add dracutSetupString methods to all relevant device classes (hdegoede) +- Avoid duplicate kernel cmdline options and cleanup booty dracut code + (hdegoede) + +* Wed Dec 23 2009 Chris Lumens - 13.13-1 +- lsreipl from s390-utils uses incorrect path (hamzy). +- fix for a bug in 05ce88b2 that split one line over several in program.log + (akozumpl) +- Dump the initial and final state of the system's storage devices. (dlehman) +- Add a "dict" attribute to Device and DeviceFormat classes. (dlehman) +- Sort Storage.devices by name (not path) for consistency. (dlehman) +- Put fsprofile support back in. (dlehman) +- Fix reset of lvm filtering (#527711) (rvykydal) +- Fix bootloader driveorder dialog. (rvykydal) +- Fix selection of default boot target in UI (#548695) (rvykydal) +- 'cleardiskssel' typos that made it impossible to run text install. + (akozumpl) + +* Fri Dec 18 2009 David Cantrell - 13.12-1 +- Use the per-disk flag to disable cylinder alignment for msdos disklabels. + (dlehman) +- Don't include advanced devices in the total count on the basic filter UI. + (clumens) +- For iSCSI devices, put the path into the UI instead of a WWID. (clumens) +- Add udev_device_get_path. (clumens) +- Make Callbacks._update_size_label callable from outside the object. + (clumens) +- Do not show the "Add Advanced" button on the basic filtering screen. + (clumens) +- Log into program.log through the standard python logging (part of + #524980). (akozumpl) +- Fix typo from commit 13022cc2. (dlehman) +- Restore accidentally removed line in backend.py (hdegoede) +- yuminstall: Fix indentation error (hdegoede) +- No need to special case ignoring of dmraid sets (hdegoede) + +* Wed Dec 16 2009 Chris Lumens - 13.11-1 +- Clean up setting paths on preupgrade (jvonau). (clumens) +- And call freetmp, too. (Jerry) +- Add a method to remove /tmp/install.img on low memory conditions (jvonau). + (clumens) +- Make sure /mnt/stage2 is mounted before trying to unmount. (Jerry) +- Skip the mediaDevice check before attempting to mount the install.img. + (Jerry) +- Remove install.img from /boot during preupgrade. (Jerry) +- Add __str__ methods to the DeviceFormat classes. (dlehman) +- Expand PartitionDevice.__str__ to include partition geometry and flags. + (dlehman) +- Hide biosraid member devices that contain MDRaidMember formats. (dlehman) +- Move disklabel handling into handleUdevDeviceFormat with the others. + (dlehman) +- DiskDevice.__init__ expects an "exists" parameter, so add it. (clumens) +- Fix multipath filtering. (clumens) +- Log error messages before displaying dialogs. (clumens) +- Include error messages when logging selinux context get/set failures. + (dlehman) +- Catch failures to set selinux contexts so it doesn't cause a crash. + (dlehman) +- Fix typo logging failure to get default file context. (dlehman) +- Use DiskLabel.alignment instead of getDiskAlignment. (dlehman) +- Add an alignment property to DiskLabel. (dlehman) +- iscsi.py: Do not translate log messages (hdegoede) +- Make iscsi,etc startup use the iscsi,etc Singletons (hdegoede) +- kickstart: Move onlining of fcoe/iscsi/zfcp devices to parse phase + (hdegoede) +- Make the fcoe, iscsi and zfcp classes singletons (hdegoede) +- Remove call to no longer existing isys DriveDict method (hdegoede) +- Use the correct yum configuration file when searching for the -logos + package (kanarip) +- Fix two missing closing parens in previous commits. (clumens) +- Add an interface to select the fancy filtering UI vs. the regular one. + (clumens) +- Add a step to prompt for the cleardisks UI. (clumens) +- Add a dialog to configure advanced storage devices. (clumens) +- Add an early user interface for filtering storage devices. (clumens) +- Rework the upgrade vs. install screen a bit to make it look nicer. + (clumens) +- Add the updated and simplified parttype screen. (clumens) +- Add a method to determine whether a device is a CCISS RAID device. + (clumens) +- Move identifyMultipaths from DeviceTree to devicelibs. (clumens) +- Add a method to return a device's WWID. (clumens) +- Add a method to get the bus/interconnect from udev and store it on + devices. (clumens) +- Add a vendor getting udev method, though udev doesn't always know it. + (clumens) +- Add the serial number to all DiskDevices and subclasses. (clumens) +- Put less space between rows and allow text to be longer before wrapping. + (clumens) +- Allow InstallInterfaces to modify the installation steps. (clumens) +- Default /boot to 500 MB. (clumens) +- Some iscsi cleanups (hdegoede) +- Bring auto discovered drives online before parsing the ks file (hdegoede) +- Make a better effort at tearing down everything before action processing. + (dlehman) +- Tighten restrictions on the type of disklabel on x86 and EFI boot disks. + (dlehman) +- Use string instead of parted.diskType for disklabel types. (dlehman) +- A couple of cleanups to warnings about formatting preexisting devices. + (dlehman) +- Rework udev_settle timeout handling (#544177) (hdegoede) +- Remove smp.c from the Makefile.am, too. (clumens) +- Nothing has a kernel-smp anymore so none of this code is useful. (clumens) +- Get rid of the goofy nested try statements. (clumens) +- update reIPL messages (hamzy) +- Change btrfs command line option (josef) + +* Wed Dec 09 2009 Chris Lumens - 13.10-1 +- Kickstart support for unpartitioned disks. (dlehman) +- Skip disklabel handling for biosraid and multipath members. (dlehman) +- Improve disklabel's name attr so we don't have to hide them anymore. + (dlehman) +- Hide devices with certain formatting in the main partitioning UI. (dlehman) +- Automatic partitioning support for whole-disk formatting. (dlehman) +- Add support for whole-disk formatting. (dlehman) +- Add per-row control over sensitive property for CheckList and + WideCheckList. (dlehman) +- Use a function to add a device to the partition gui. (dlehman) +- Don't crash if there's no intf passed to getLUKSPassphrase. (dlehman) +- Remove unused selinux file context functions from isys. (dlehman) +- Use selinux python module for file context operations. (dlehman) +- Obtain device alignment information from parted. (#529051) (dlehman) +- Handle roots with or without trailing "/" in FileDevice.path. (#541473) + (dlehman) +- sundries.h is no longer used. (clumens) +- Kill yet another unused lodaer flag. (clumens) +- stage1 (init): Make /tmp tmpfs large enough to hold install.img (#540146) + (hdegoede) +- With flags.setupFilesystems gone, justConfig can be removed from booty. + (clumens) +- Nothing sets flags.setupFilesystems anymore, so it can go too. (clumens) +- Remove test mode from the loader, too. (clumens) +- Complain if we're started in test or rootPath mode instead of aborting. + (clumens) +- Remove test mode. (clumens) +- Remove rootPath mode. (clumens) +- Enable method/repo nfs options in stage2. (rvykydal) +- Accept "nfs:" prefix in ks repo --baseurl setting beside "nfs://". + (rvykydal) +- Display url having invalid prefix in repo editing dialog. (rvykydal) +- Do not traceback on invalid ks repo --baseurl values (#543003) (rvykydal) +- Remove /etc/localtime before trying to copy into it (#533240). (akozumpl) +- Whenever storage code tries to log a method call, do so into the + 'tmp/storage.log' file. (a part of #524980) (akozumpl) +- Make loader log time with milliseconds (part of #524980). (akozumpl) +- Log storage in the same format as the main anaconda log (a part of + #524980) (akozumpl) + +* Tue Dec 01 2009 Chris Lumens - 13.9-1 +- Improve text mode fcoe interface (hdegoede) +- Fix udev rule to test whether we're in anaconda. (dlehman) +- Fix devicelibs.dm.device_is_multipath support for new udev rules. (pjones) +- Display progress or wait window when creating devices. (dlehman) +- Display progress or wait window when formatting devices. (dlehman) +- Add optional progress windows to devicelibs create functions. (dlehman) +- Force mkswap to do its job. (dlehman) +- Don't try to get dm node or update sysfs path for lvm vgs. (dlehman) +- Log upon leaving installer steps as well as entering (a part of #524980). + (akozumpl) +- An unitialized variable in iw/partition_gui.py and a typo in kickstart.py + (akozumpl) +- Add DCB option to text mode FCoE setup (#513011) (hdegoede) +- Add DCB option to GUI FCoE setup (#513011) (hdegoede) +- Add DCB option to kickstart FCoE code (#513011) (hdegoede) +- Add support for DCB to fcoe.py (#513011) (hdegoede) +- Include fcoemon and dcbd in install.img for FCoE DCB support (#513011) + (hdegoede) +- Add RAID4 support (#541433) (oliva) +- Clear a partition's BOOT flag when formatting it (hdegoede) +- Do not set boot flag when there is already a partition with the flag + (#533658) (hdegoede) +- Fixes a syntax error in commit b495db2cd56c881a7e661ac55bd31069510cf662. + (akozumpl) +- If /boot is too small to preupgrade, don't allow going back (#499321). + (clumens) +- One reference to earlyKS somehow survived. Kill it. (clumens) +- Quote backticks when writing out the .bash_history file, and add another + cmd. (clumens) +- Set the default keyboard based on language before showing the UI + (#532843). (clumens) +- Don't attempt to get the size of a filesystem unless it's supported + (#540598). (clumens) +- Require /boot to be on a GPT or MSDOS disk label on x86 (#540588). + (clumens) +- Fix killall -USR2 anaconda writing out a traceback file. (clumens) +- Only check for DEVICE_DASD in S390.diskLabelType, not for all platforms. + (clumens) +- Use installclass to make the bootloader timeout 5 seconds on RHEL. (pjones) +- Make sure we get tcp_wrappers-libs installed for stage 2 (pjones) +- Mount usbfs before installing packages (#532397) (mmatsuya) +- Use fs with largest amount of freespace to store install.img (hdegoede) +- Always update booty drivelist before filling bootstore (#533335) (hdegoede) +- Enhance drive specification for clearpart, ignoredisk, and partition. + (clumens) +- Add a function that determines which devices match a given shell glob. + (clumens) +- Extend udev_resolve_devspec to allow specifying devices in more ways. + (clumens) +- Name log files something that doesn't conflict with the system (#539542). + (clumens) +- Adds interactive install support for NFS options (#537764) (akozumpl) +- Introduces check_asprintf macro that checks asprintfs return value and + terminates program in OOM scenarios. (akozumpl) +- Sleep if the kickstart file read fails (#537361) (akozumpl) +- Move libcurl initialization to urlinstTransfer() (#537870). (dcantrell) +- Replace all popt use with glib's option parsing code. (dcantrell) +- Clean up initProductInfo() in loader.c. (dcantrell) +- Use glib string parsing functions in driverselect.c. (dcantrell) +- If a package has %%pre/%%post scriptlet errors, abort the install + (#531599). (clumens) +- If a package has a dependency problem, offer to continue/abort (#511801). + (clumens) +- Generate more complete device.map grub file when upgrading grub. (#533621) + (rvykydal) +- Added the libudev python bindings (mgracik) +- If the kickstart log file's path doesn't exist, make it. (clumens) +- Don't make chown or lsetfilecon errors fatal (#529940). (clumens) +- Get correct boot device in reIPL code for s390 (#537390). (hamzy) +- Expand the proxy table a little bit to reduce clutter (#537878). (clumens) +- Use glib data structures in loader's module handling code. (dcantrell) +- Various improvements to kickstart scriptlet reporting (#510636). (clumens) + +* Thu Nov 12 2009 David Cantrell - 13.8-1 +- Ignore merge commit messages when generating the rpm changelog. (dcantrell) +- Remove last references to hal. (dcantrell) +- Log calls to DiskLabel's commit and commitToDisk methods. (dlehman) +- Fix DiskLabel.status so it returns True, not self.partedDisk, when active. + (dlehman) +- Write /etc/dasd.conf to target system on s390 (#533833). (dcantrell) +- Latest dracut has new syntax for rd_DASD. (dcantrell) +- Handle case of not enough space in VG more gracefully. (#533797) (dlehman) +- Make sure partitioning-related drive lists are sorted properly. (#534065) + (dlehman) +- Remove the early kickstart processing pass (#532453). (clumens) +- Move all the important stuff out of the KickstartCommand.parse methods. + (clumens) +- These changes require a later version of pykickstart. (clumens) +- commandMap and dataMap are now updates to the existing dict. (clumens) +- Set a reference to the kickstart handler on BaseData objects. (clumens) +- Move exception setup to right after instdata is populated. (clumens) +- Leave one free logical block before each logical partition. (dlehman) +- Use Chunk's geometry attr to access the parted Geometry. (dlehman) +- Fix sorting of requests by mountpoint. It was backwards. (dlehman) +- Align logical partitions' start sector up one logical block for metadata. + (dlehman) +- Use parted.Device's sectorSize attr instead of physicalSectorSize. + (dlehman) +- Select partition layout based on potential for growth. (dlehman) +- Reimplement partition growing. (dlehman) +- Create and use a function to obtain a parted alignment for a disk. + (dlehman) +- Create and use a new function to create and add new partitions to disk. + (dlehman) +- Make and use a new function to remove non-existent partitions. (dlehman) +- Disable parted's cylinder alignment code. (dlehman) +- Use new functions for conversion between size and sector count. (dlehman) +- Consider whether a partition is growable when choosing free space. + (dlehman) +- Allocate fixed-size requests before growable requests. (dlehman) +- For the catch-all case, put the message into the UI, not the exn + (#536854). (clumens) +- Add a missing binary to KEEPFILES (#533237) (msivak) +- Set boot flag for /boot on mdraid 1 array too (#533533). (rvykydal) +- Report no media present for cpqarray controllers with no disks attached + (hdegoede) +- Honor existing RUNKS conf file variable on s390 (#513951). (dcantrell) +- Add "Hipersockets" to qeth NETTYPE description (#511962). (dcantrell) +- Set custom_icon to error for advanced storage dialog errors (hdegoede) +- When creating a new md array check we have enough members (#533027) + (hdegoede) +- Convert string.find calls into something modern (jkeating) +- rescue: Don't copy install.ing to /tmp when not enough RAM (#531304, + #529392) (jvonau) +- isys: remove stray debug printf (#533597) (hdegoede) +- Don't activate / de-activate dmraid sets on setup / teardown (hdegoede) +- Remove previous mdadm bug 523334 workaorund (hdegoede) +- Don't stop mdraid containers or their arrays (#532971) (hdegoede) +- Include the command line to put anaconda into debugger mode in history. + (pjones) +- Allow remote(ish) debugging. (pjones) +- Make sure /var/log/lastlog is there so we don't have ugly logs. (pjones) +- Correct modopts initialization in loader (take 2) (#531932). (dcantrell) +- Get rid of dead code, and fix gettimespecofday's math. (pjones) +- Don't exec without forking first when calling udevadm. (pjones) +- If init or loader exit unexpectedly, traceback. (pjones) +- Fix the vim magic in this file to work. (pjones) +- Add handling for sshpw command. (pjones) +- Improve createLuserConf behavior and chroot behavior in users.* (pjones) +- Improve logging of ssh-keygen. (pjones) +- Remove tabs in "anaconda" (pjones) +- pidof is a symlink to killall5, so we need that as well. (pjones) +- Correctly initialize modopts in loader (#531932). (dcantrell) +- Increase the size of /boot a little bit (#530555). (clumens) +- Modify autopart requests to include a separate /home (#150670). (clumens) +- Take the spec's requiredSpace into account when creating LVs. (clumens) +- Add the PartSpec.__str__ method for debugging. (clumens) +- Trim the inital / off the mountpoint before making an LV name from it. + (clumens) +- Remove "anaconda" from attributes to skip (#532612, #532737). (clumens) +- Fix status for and consolidate handling of '-' in vg/lv names. (#527302) + (dlehman) +- Rename "setupShellEnvironment" to "setupSshd". That's all it does. + (pjones) +- Put "killall -USR2 anaconda" in a pre-populated history. (pjones) +- Only try to split proxy commands out if there's actually one specified. + (pjones) +- Consolidate the parsing of nfs: locations for ks= and stage2= (#529197) + (stijn) +- Copy cio_ignore kernel parameter to zipl.conf on s390 (#475675). + (dcantrell) +- Do not modify /etc/hosts from setup package (#530343). (dcantrell) +- In execWithCallback(), support disabling stdout echo (#528386) (dcantrell) +- Select drives in partition dialog, preserving settings. (#529931) (dlehman) +- Clear pot and po updates after a 'make release' or 'make archive'. + (dcantrell) +- Use the new anaconda image in fedora-logos (#529267). (jkeating) +- Call udev_trigger with a "change" action and don't filter out dm devices. + (dlehman) +- Remove unused attr_nomatch keyword argument from baseudev.udev_trigger. + (dlehman) +- Fix logging of isys mount/umount into program.log. (rvykydal) +- Fix "resize failed: 1" errors for ext2/ext3/ext4 (#517491). (dcantrell) +- Log why we're exiting the installer in storage.DASD.startup() (dcantrell) +- Improve detailedMessageWindow() in text.py. (dcantrell) +- Use 'zerombr' kickstart command for DASDs needing dasdfmt (#528386). + (dcantrell) +- Add 'zerombr' to list of early kickstart commands we look for. (dcantrell) + +* Thu Oct 29 2009 Chris Lumens - 13.7-1 +- TypeError: '_ped.DiskType' object is not callable (#531730) (hdegoede) +- Fix upgrade of GRUB with md raid boot for versions F11 and earlier. + (rvykydal) +- Remove another code duplication in grub upgrade code. (rvykydal) +- Remove code duplication, use fixed code from writeGrub. (rvykydal) +- Remove target parameter from grub installation code - it is no more + needed. (rvykydal) +- Remove support for IUCV networking devices on s390. (#531494) (dcantrell) +- Find and format any unformatted DASD devices (#528386). (dcantrell) +- Improve detailedMessageWindow() in text.py. (dcantrell) +- Create execWithCallback() function in iutil. (dcantrell) +- preexist -> onPart (#531407). (clumens) +- Add sshd support for non-s390 platforms. (pjones) +- When doing initlabel on a dasd disk create a dasd disklabel (#531209) + (hdegoede) +- Rename platform.diskType to platform.diskLabelType (hdegoede) +- Fix arrow key cycling in the Edit Partition dialog (#519641). (clumens) +- Provide a single checkbox for a minimal install (#523839). (clumens) +- Fix DASD and zFCP device discovery (#530287). (dcantrell) +- Clarify the shrink target message (#530789). (clumens) +- Re-enable running udevadm. (clumens) +- max_logical -> max_logicals (#530786). (clumens) +- Filter out device-mapper devices when doing a udev_trigger. (dlehman) +- Expand udev_trigger to allow attr filtering and action specification. + (dlehman) +- More udev fixups for device-mapper and cryptsetup temp devices. (#526699) + (dlehman) +- Add the bcm5974 kernel module needed for some touchpads (#474225). + (clumens) +- /boot is already being checked by the superclass, so don't check again. + (clumens) +- Allow /boot to be on a variety of filesystems during kickstart (#529846). + (clumens) +- Platform.bootloaderPackage -> Platform.packages (clumens) +- Bootloader choice strings were marked with N_, but never translated + (#530017). (clumens) +- Handle more than x.y version numbers in 'make bumpver'. (dcantrell) +- Mark live device as protected instead of ignoring it. (#517260) (dlehman) +- Don't force logical with a free primary slot and an extended. (#527952) + (dlehman) +- Use rpm to determine how to set bootloader args and default runlevel + (#527520). (clumens) +- Improve message given to user for fsck failures (#527626). (dcantrell) +- 'Packages completed' string should use P_() instead of N_(). (dcantrell) +- Reintegrate reipl to trigger reboot/halt on s390x correctly. (#528380) + (maier) +- Put the icon back on the Back button on livecd installs (#526925). + (clumens) +- Make LOADER_FLAGS_NOSHELL default also for s390x not just s390 (#527063) + (maier) +- Adapt standalone shutdown to nokill changes so s390x can use it. (#528380) + (maier) +- Add dracutSetupData() method to DASDDevice (#526354). (dcantrell) +- Collect DASD kernel parameter information during device tree scan + (#526354). (dcantrell) +- Add dracutSetupString() method to ZFCPDiskDevice (#526354). (dcantrell) +- Write LAYER2 and PORTNO correctly as parts of OPTIONS to ifcfg for s390x + (maier) +- Don't set unnecessary multipath defaults. (pjones) +- Add a "File Bug" button to all possibilitys in turnOnFilesystems + (#528006). (clumens) +- For cmdline mode, add the long text to what messageWindow will print + (#528006). (clumens) +- Use /dev/mapper/live-osimg-min instead of the old device node name + (#526789). (clumens) +- Remove double slash from nfs:// ks repo value for use in UI. (rvykydal) +- Make bootLoaderInfo new-style class, so that its properties work + correctly. (rvykydal) +- liveinst: deactivate mdraid arrays before running liveinst (#528235) + (hdegoede) +- Set parted filesystemtype for swap partitions (hdegoede) + +* Tue Oct 13 2009 David Cantrell - 13.6-1 +- BR system-config-keyboard (dcantrell) + +* Tue Oct 13 2009 David Cantrell - 13.5-1 +- Remove extra echo in 'make rpmlog'. (dcantrell) +- Do not traceback if network device doesn't have HwAddress property + (#506013). (rvykydal) +- Fix liveinst to (1) not unmount /dev/pts, (2) unmount in order (509632). + (clumens) +- Do not read DASD data from /tmp/install.cfg in booty (#526354). (dcantrell) +- Merge branch 'master' of ssh://git.fedoraproject.org/git/anaconda (notting) +- Support upgrading when the language isn't in lang-table (#528317). + (clumens) +- Fix task selection when tasks contain the same group. (#528193) (notting) +- Update drivelist with bootloader --driveorder ks option instead of + replacing it (#506073). (rvykydal) +- Use ID_SERIAL to write multipath.conf, but ID_SERIAL_SHORT for UI. (pjones) +- Don't run 70-anaconda.rules on an installed system (#527781). (clumens) +- Handle Installation Repo (base repo) as any other in repo edit UI. + (rvykydal) +- Fix methodstr editing dialog. (rvykydal) +- Store methodstr url of repo (#502208, #526022). (rvykydal) +- Show user of which repository he edits the url (methodstr editing). + (rvykydal) +- Don't traceback with malformed repo= nfs: parameter. (rvykydal) + +* Mon Oct 12 2009 David Cantrell - 13.4-1 +- Missing volume_key shouldn't break LUKS support completely. (#526899) + (dlehman) +- Write multipathd.conf in anaconda so that dracut can find it. (pjones) +- We moved from dialog to newt.. (#528497) (msivak) +- Fix a segfault when stage2= boot parameter and kickstart url method is + used (#524417). (rvykydal) +- Fix parsing of optional portnr in iscsi target IP (#525118) (hdegoede) + +* Fri Oct 09 2009 David Cantrell - 13.3-1 +- Reset PartitionDevice attributes after failed edit. (#498026) (dlehman) +- Add MultipathDevice.getDMNode(), because .updateSysfsPath() needs it. + (pjones) +- Add MultipathDevice.updateSysfsPath() (pjones) +- Run implantisomd5 on boot.iso on x86. (bz#526902) (pjones) +- Consider encryption when checking for duplicate mountpoint. (#526697) + (dlehman) +- Fix grub stage1 installation for /boot on md raid1. (rvykydal) +- Do not show the VNC-over-text question, when there is not enough memory + for GUI (#527979) (msivak) +- Fix filtering out of 'Sending translation for' log messages in bumpver. + (rvykydal) +- Use addUdevPartitionDevice() for adding dmraid / multipath partitions + (#527785) (hdegoede) +- Set partedPartition system to the correct FS when creating an FS (hdegoede) +- Reset parted flags in createFormat not destroyFormat (hdegoede) +- Default to mbr bootloader target for mdraid 1 boot device too (#526822). + (rvykydal) +- Clear out state before calling XkbGetState. (clumens) + +* Thu Oct 08 2009 Radek Vykydal - 13.2-1 +- Override fstabSpec in PartitionDevice for by-path DASD (#526364). (dcantrell) +- Create DASDDevice objects for DASD devices when building devicetree. + (dcantrell) +- Add udev_device_is_dasd() to detect DASD devices. (dcantrell) +- Change existing call to deviceNameToDiskByPath(). (dcantrell) +- Make storage.devices.deviceNameToDiskByPath() more robust. (dcantrell) +- Do not copy over 70-persistent.rules if instPath is '' (#527707) (dcantrell) +- Filter out 'Sending translation for' log messages in bumpver. (dcantrell) +- Don't copy _raidSet, but merely pass around a reference (hdegoede) +- Action...Format setup device before modifying the partition table (hdegoede) +- map() -> filter() in storage.writeEscrowPackets() (dcantrell) +- lokkit has moved to a subpackage, so require that (#523709). (clumens) +- Stop trying to run xrandr (#527678). (clumens) +- Only initialize escrow packet code if there's devices that need it (#527668). + (clumens) +- On lookup of a PartedDevice also check for _ped.DeviceException (#527699) + (hdegoede) +- Set related ayum attributes if media is found when editing methodstr + (#515441). (rvykydal) +- In repo editing UI do not use object we are creating (#515441). (rvykydal) + +* Tue Oct 06 2009 David Cantrell - 13.1-1 +- Tell udev to ignore temporary cryptsetup devices. (#526699) (dlehman) +- Have redhat.exec reference generic.prm, not redhat.parm (dcantrell) +- Bring back cio_ignore=all, !0.0.0009 for generic.prm on s390x (#463544) + (dcantrell) +- Take 70-persistent-net.rules generated at installation (#526322) + (dcantrell) +- Use $LIBDIR to find the boot-wrapper file. (jkeating) +- formatByDefault: Don't traceback when mountpoint is None (#522609) + (hdegoede) +- Don't warn /usr should be formatted when "Format as:" is already selected + (hdegoede) +- Bring up network interface before trying to use it for FCoE (hdegoede) +- DMRaidArray: Don't report no media present when in teared down state + (hdegoede) +- Wait for udev to settle before trying to find dmraid sets in udev DB + (hdegoede) +- Implement the double click for free space on the bar view (jgranado) +- Pass only cCB and dcCB to the StripeGraph classes. (jgranado) +- React to a double click on a "free row" in the tree view. (jgranado) +- Create getCurrentDeviceParent function. (jgranado) +- Make sure we don't exceed the 80 character threshold (jgranado) +- Display an LVM graph on the bar view when we click on the VG's free space + (jgranado) +- Add a free row in the LVM tree view when necessary. (jgranado) +- Reorganize the tree view related to lvm. (jgranado) +- Remove unneeded variable (jgranado) + +* Mon Oct 05 2009 David Cantrell - 13.0-1 +- Remove an errant popd. Probably cut/paste error. (jkeating) +- Only add the .img file to .treeinfo if it exists. (jkeating) +- Make the netboot dir before trying to use it (jkeating) +- Only write network --netmask if one has been defined (#527083). (clumens) +- Add --label to anaconda-ks.cfg if needed (#526223). (clumens) +- Fix existing size calculation for NTFS (#520627) (dcantrell) +- Write label to filesystem if we have one set (#526226, #526242) (dcantrell) +- Add wget to the initrd, which is required for rhts. (clumens) +- Fix the check for no /boot request on PPC yet again (#526843). (clumens) +- Surround the stage2= parameter in quotes for RHEL (#526863). (clumens) +- Correct makeupdates script to work with deleted files. (jgranado) +- Stop dragging mkinitrd into the install (hdegoede) +- Add --keyword=P_ to xgettext command arguments. (dcantrell) +- Use named parameters for translatable strings with multiple params. + (dcantrell) +- Change 'support' to 'supported' in UnknownSwapError dialog (#526549) + (dcantrell) +- Force interface up before checking link status (#525071). (dcantrell) +- Only ignore partitions <1MB that are freespace. (#526445) (dlehman) +- Try to include error messages in lvm/mdadm exceptions. (dlehman) +- Add the create LV option. (jgranado) +- Give the proper orientation to the gtk objects. (jgranado) +- Show the information message when user hits a non-bar element. (jgranado) +- Control the sensitivity of the "delete" and "create" buttons (jgranado) +- Respond to double click on a VG, LV and RAID device. (jgranado) +- Remove the "Hide RAID/LVM" checkbox. (jgranado) +- Display a message in the bar view when user has no selected items. + (jgranado) +- Cosmetic changes. (jgranado) +- The StripeGraph class does not need tree nor editCB (jgranado) +- Restrain from outputing any digits after the decimal point. (jgranado) +- Add a slice when the extended partition contains "free space" (jgranado) +- Reduce message size in clone screen. (jgranado) +- Add Slice size to the bar view (jgranado) +- Select the device in the treeview when its selected in the barview. + (jgranado) +- Make canvas a class method. (jgranado) +- Incorporate all the Graph types in the custom screen. (jgranado) +- Add the Volume Group and md RAID array Graph classes (jgranado) +- Make the Bar View Code generic. (jgranado) +- Pass the device instead of the name to the add funciton. (jgranado) +- Display the device path with a smaller font and different color. (jgranado) +- Display bar view for the selected device only. (jgranado) +- Fix indentation in editCB (jgranado) +- Organize the creation of the custom screen into sections. (jgranado) +- Use a checkmark from a PNG image instead of a string. (jgranado) +- Put the size after the device name in the storage tree. (jgranado) +- Add the warning message for an invalid create. (jgranado) +- Reorganize the Customization screen a little. (jgranado) +- Remove unneeded functions & add the about messages for LVM and RAID. + (jgranado) +- Have an intermediary screen for the "Create" action. (jgranado) +- New screen for "Create" action. (jgranado) +- New function to tell us if there is free space for a new partition. + (jgranado) +- Edit LVM LV when user has a LV selected. (jgranado) +- Don't fail to commit partitions due to active lvm/md. (dlehman) +- Create and use DiskLabelCommitError for failure to commit. (dlehman) +- Work around partition renumbering in processActions. (dlehman) +- Re-get preexisting partitions using their original path. (dlehman) +- Don't store a copy of ActionDestroyFormat's device attr. (dlehman) +- Don't retry commiting partition table to disk (hdegoede) +- Stop /lib/udev/rules.d/65-md-incremental.rules from messing with mdraid + sets (hdegoede) +- Don't try to do format handling on drives without media (#523467) + (hdegoede) +- Wait for mdraid arrays to become clean before reboot / halt (hdegoede) +- Add repo --proxy= support to kickstart. (clumens) +- Pass the proxy config information to stage2. (clumens) +- Add support for proxies to the command line. (clumens) +- Add proxy support to kickstart in the loader. (clumens) +- Add a function to split up a proxy parameter into its parts. (clumens) +- libcurl supports https in addition to http, so change our tests. (clumens) +- getHostAndPath is only used by the nfs code, so move it. (clumens) +- Add initial loader UI support for proxies (#125917, #484788, #499085). + (clumens) +- We no longer need our own FTP/HTTP protocol support code. (clumens) +- Get rid of the convertURL/UI functions, make iurlinfo just store a string. + (clumens) +- Convert urlinstall.c to using the new urlinstTransfer function. (clumens) +- Add proxy support to urlinstTransfer by setting more curl options. + (clumens) +- Add the urlinstTransfer function, which replaces urlinst*Transfer. + (clumens) +- Add a function to construct an array of HTTP headers and cache the result. + (clumens) +- Add a CURL instance to the loader data. (clumens) +- Add checks for libcurl into the makefile process. (clumens) +- Add the packages needed to support libcurl. (clumens) + +* Tue Sep 29 2009 David Cantrell - 12.32-1 +- Improve loader messages in parseCmdLineFlags when passing vnc (#526350). + (maier) +- Update po/anaconda.pot during a 'bumpver' run. (dcantrell) +- Add 'make release' as a synonym for 'make archive'. (dcantrell) +- Whitespace cleanup in loader/net.c. (dcantrell) +- Clean up getHostandPath() debugging messages for host & file. (dcantrell) +- Need an extra on the PS1 line in /.profile (dcantrell) +- Korean font package name changed (#525597) (dcantrell) +- We can't prompt for new network info in cmdline mode (#526262). (clumens) +- yaboot supports /boot on ext4 (#526219). (clumens) +- bootloader --append= should append, not set the args list (#524004). + (clumens) +- Don't check if /boot is under the 4MB mark on i/p Series (#526200). + (clumens) +- "minimal" has been renamed to "core" (#526191). (clumens) +- Remove some unused isys methods. (clumens) +- Make sure the disk holding /boot is setup before setting boot flag + (#526063) (hdegoede) +- Use temporary repo id for edited object to prevent Duplicate Repo error + (#524599). (rvykydal) +- Do not delete repo twice or when it had not been added actually (#524599). + (rvykydal) +- Disable repo before deleting it (#524599). (rvykydal) +- Log more, repo editing UI. (rvykydal) +- Make _enableRepo a little more readable. (rvykydal) + +* Fri Sep 25 2009 David Cantrell - 12.31-1 +- Move S390MODS to inside makeBootImages(), remove libiscsi_tcp. (dcantrell) +- Require the latest and greatest python-meh. (clumens) +- Add a stub enableNetwork method for cmdline mode (#525779). (clumens) +- Adapt to python-meh passing a bug description around. (clumens) +- Return None for next part type if all primary slots full. (#524859) + (dlehman) +- Make sure the Minimal group is selected by default on RHEL installs + (#524561). (clumens) + +* Thu Sep 24 2009 Chris Lumens - 12.30-1 +- Simplify s390x module list generation. (dcantrell) +- Read cmsfs* commands from $IMGPATH/usr/sbin in mk-images (dcantrell) +- Use correct kernel-bootwrapper on ppc64. (dcantrell) +- Anaconda no longer requires hal. (notting) + +* Tue Sep 22 2009 David Cantrell - 12.29-1 +- Updated po/anaconda.pot (dcantrell) +- Remove ui/instkey.glade.h from po/POTFILES.in (dcantrell) + +* Tue Sep 22 2009 David Cantrell - 12.28-1 +- Preserve whitespace in $CDLABEL in mk-images.x86 (dcantrell) +- Modify rhel.py installclass for current RHEL development efforts. + (dcantrell) +- Add --brand switch support to buildinstall script. (dcantrell) +- Remove the installation number screen. (clumens) +- Remove kickstart-docs.txt, since it comes with pykickstart (#515168). + (clumens) +- ybin, mkofboot, and ofpath moved from /usr/sbin to /sbin (#524608). + (clumens) +- Honor ignoredisk --only-use. (#514353) (dlehman) +- Make sure user-selected mountpoint is not already in use. (#524584) + (dlehman) +- Do not raise UI dialog in stage2 if network is set in ks (#487503). + (rvykydal) +- Use whiptail instead of dialog in rescue mode, supports serial line better + and looks nicer (msivak) + +* Mon Sep 21 2009 David Cantrell - 12.27-1 +- Require at least system-config-keyboard 1.3.1 or higher. (dcantrell) +- Fixes for rhel installclass. (dcantrell) +- Start with all modules from kernel/drivers/s390 on s390x (#524566) + (dcantrell) +- Do not require dhcpv6-client, package is now obsolete. (dcantrell) +- Take into account snapshots and mirrored volumes in lvm dialogs. (dlehman) +- Add handling for snapshot and mirrored logical volumes to DeviceTree. + (dlehman) +- Add attrs to LVMLogicalVolumeDevice class for snapshots and mirrored lvs. + (dlehman) +- Add function lvorigin to determine the name of a snapshot's origin lv. + (dlehman) +- Add function udev_device_get_lv_attr to retrieve lv attribute strings. + (dlehman) +- Include hidden volumes and lv attributes in udev db. (dlehman) +- Add 'install' user to start anaconda on s390x. (dcantrell) +- Set a default shell prompt for s390x installs. (dcantrell) +- Do not assume we found a module in addOption() in loader/modules.c + (dcantrell) +- Do not try to load floppy, edd, pcspkr, or iscsi_ibft on s390x. (dcantrell) +- Handle Esc keypress in (some more) dialogs as Cancel - (#520110). + (rvykydal) +- All the nss libraries have moved from /lib to /usr/lib (#524410). (clumens) +- Add python-nss as a requirement (#524307, #524313). (clumens) +- Call $LDSO --verify for the binary file -inside- the chroot. This fixes + building x86 boot images on a x86_64 host system. (thomas.jarosch) +- Just grab everything in a /usr/share/fonts/lohit* directory (#523906). + (clumens) +- Don't write an empty mdadm.conf (hdegoede) +- Write mdraid arrays to mdadm.conf in sorted order (hdegoede) +- containers and their sets must only have a UUID= parameter in mdamd.conf + (hdegoede) +- Updated anaconda.pot file. (dcantrell) + +* Thu Sep 17 2009 David Cantrell - 12.26-1 +- NetworkManagerSystemSettings.service no longer exists. (jkeating) +- udevsettle is no longer used (udevadm settle is called instead) so don't + put it in images. (jkeating) +- nm-system-settings is no longer shipped. (jkeating) +- Port from PolicyKit to polkit (jkeating) +- Keep po/anaconda.pot in the source tree (#522072) (dcantrell) +- Do not show Unknown as filesystem type for free space. (dcantrell) +- Catch failures from write(2) in utils/snarffont.c (dcantrell) +- Don't leak fds (#520154) (jgranado) +- Initialize the opts variable. (jgranado) +- Add the help messages for the new options of makeupdates script. (jgranado) +- Revert "The Madan font should no longer be used (apparently). (#523906)." + (clumens) +- Fix going back from hd install UI when stage2 is given as boot param + (#519206). (rvykydal) +- The Madan font should no longer be used (apparently). (#523906). (clumens) +- Update the pykickstart requirement to reflect the escrow stuff. (clumens) +- add requires for sparc arches on elftoaout and piggyback we need them to + make the tftp image (dennis) +- copy the sparc boot loader on all sparc arches (dennis) +- make sure we include sparc boot loaders on all sparc arches (dennis) +- make sure we get the sparc64 kernel on sparc (dennis) +- Check whatever contains /boot on PPC as well as the bootable part + (#523747). (clumens) +- make a call to rpmutils to get the basearch works on all arches that dont + have anaconda built on the basearch (dennis) +- s-c-keyboard is now provided on all architectures (#523445). (clumens) + +* Tue Sep 15 2009 David Cantrell - 12.25-1 +- Use pyblock for device-mapper devices' status. (dlehman) +- load_policy has moved from /usr/sbin to /sbin (#523506). (clumens) +- Collect all modules from modules.{ccwmap|networking} on s390x (#522519) + (dcantrell) +- Copy cmsfscat from /usr/sbin, not /usr/bin. (dcantrell) +- Remove duplicate search_cu() in linuxrc.s390 (dcantrell) +- Try harder to stop mdraid arrays (hdegoede) +- Log when we are skipping disks without media (hdegoede) +- Don't scan stopped md devices (hdegoede) +- Make udev_get_block_device() return None on failure (hdegoede) +- Do not pass --update=super-minor to mdadm for containers and sets there in + (hdegoede) +- Write mdadm.conf lines for mdraid container formats (imsm) (hdegoede) +- Really put appended kernel cmdline arguments at the end (hdegoede) +- Install dracut-network when using network storage (hdegoede) +- Make recreateInitrd() generate a dracut initrd (hdegoede) +- Use type of device rather than name in booty target selection. (hdegoede) +- write netroot=fcoe:... to kernel cmdline in grub.conf for dracut (hdegoede) +- write ifname=eth#:MAC to kernel cmdline in grub.conf for dracut (hdegoede) +- write iscsi initiator name to kernel cmdline in grub.conf for dracut + (hdegoede) +- Make iswmd the default (hdegoede) +- Use new icons in anaconda so we don't look so dated (#515601). (clumens) +- Prevent infinite loop in doClearPartitionedDevice. (dlehman) +- Rename doDeleteDependentDevices to doClearPartitionedDevice for clarity. + (dlehman) +- Handle Esc keypress in dialogs as Cancel (#520110). (rvykydal) +- Don't use baseurl containing space in yum repo object (#516042). (rvykydal) +- Add escrow support (mitr) +- Add python-{nss,volume_key} to stage2, volume_key to rescue (mitr) +- Update for pykickstart with escrow support (mitr) +- Fix --encrypted when creating volumes in kickstart (mitr) +- Remove the "Remove dmraid Device" button, which isn't even hooked up. + (clumens) +- Require the right version of system-config-date (#523107). (clumens) +- Fix setting of "Add repository" dialog title. (rvykydal) +- Update state and name of repository in list after editing. (rvykydal) +- Fix busy cursor in repo editing (#518529) (rvykydal) +- Fix busy cursor stack popping when creating formats (#518529). (rvykydal) +- Remove partitions in reverse order when clearing disks. (dlehman) +- Improve the info provided to DeviceAction.__str__. (dlehman) +- Include device id in log lines since partitions can get renumbered. + (dlehman) +- Don't try to preserve old format attrs when reinitializing pvs. (dlehman) +- remove the no longer used initcb and initlabel DiskDevice.__init__ + arguments (hdegoede) + +* Thu Sep 10 2009 Chris Lumens - 12.24-1 +- dmidecode is in /usr/sbin, not /usr/bin. (clumens) +- Add cmsfscat to the initrd on s390 as well (#522535). (clumens) +- Fix the gawk/awk symlink mess in the initrd (#522535). (clumens) +- No longer use /usr/bin/env (#521337). (clumens) +- It's controlunits, not controlunits.sh. (clumens) +- Get DMRaidArrayDevice's a DiskLabel format when they are added to the tree + (hdegoede) +- Fix askmethod + stage2= (#516973, #519288, #518194) (rvykydal) + +* Wed Sep 09 2009 David Cantrell - 12.23-1 +- initrd-generic.img -> initramfs.img (hdegoede) + +* Wed Sep 09 2009 David Cantrell - 12.22-1 +- No longer require xfsdump, since anaconda doesn't use it anywhere + (#522180). (clumens) +- The zonetab module has moved (#521986). (clumens) +- No longer copy over the CD/DVD repodata or repo config file (#521358). + (clumens) +- language dracut kernel cmdline should be space seperated (#521113) + (hdegoede) + +* Mon Sep 07 2009 David Cantrell - 12.21-1 +- Require python-meh (#521661) (dcantrell) +- Handle UnknownSwapError when turning on existing swap volumes. (dcantrell) +- Check for a valid interface in swapErrorDialog, exit without one. + (dcantrell) +- On SuspendError, allow users to skip/format/exit like OldSwapError. + (dcantrell) +- Raise exception if detected swap volumes are not Linux v1 swap space. + (dcantrell) +- Handle OldSwapError (#510817) (dcantrell) +- Support a force=True argument on SwapSpace.create() (dcantrell) +- Skip all Makefiles and the liveinst subdirectory in 'make updates' + (dcantrell) +- Make anaconda know its version number (#520061) (dcantrell) +- Add top back to the stage2 image. (clumens) +- Do not put device node path, but the fs UUID in fstab for mdraid: + (#519337) (hdegoede) +- Expose common fsset methods and properties in class Storage. (dcantrell) +- Don't display the warning about not enough memory on a VNC install + (#521109). (clumens) +- The vtoc.h header has moved from the kernel to s390utils (karsten, + #520830). (clumens) + +* Wed Sep 02 2009 David Cantrell - 12.20-1 +- Rename mostlyclean-glade to mostlyclean-liveinst. (dcantrell) +- Handle rootPath referencing a chroot value or actual path (#519665) + (dcantrell) +- We convert cmdline args to longs in several places, so reduce to a + function. (clumens) +- Support rootpath overrides in fsset.rootDevice (#519665) (dcantrell) +- Pass anaconda.rootPath to FSSet() (dcantrell) +- Include ui, liveinst, and lang-table strings in po updates (#515411) + (dcantrell) +- Add some silent make support for sed, mkctype, and other commands. + (dcantrell) +- Recheck if a partition should be ignored after getting its disk (#518971) + (hdegoede) +- Fix traceback when editing a pre-existing logical volume (hdegoede) +- Do not traceback on an usb cardreader with no card present (hdegoede) +- Don't identify multi lun usb card readers as multipath (#517603) (hdegoede) +- Device class does not have a format member (hdegoede) +- Device class does not have a path member (hdegoede) +- Simplify language.py to two basic settings, and a lot of support + (#517569). (clumens) +- clobber is a method of PartedDevice not PartedDisk (hdegoede) +- Remove unused fsFromConfig method (hdegoede) +- allocatePartitions: PartitionCount is a member of PartedDisk not + DiskDevice (hdegoede) +- New version. (clumens) +- Fix storage/__init__.py:1857: non-keyword arg after keyword arg (hdegoede) +- Remove a bunch of unnecessary semicolons (hdegoede) +- pylint does not like ) +- Fix 55:udev_resolve_devspec: Using possibly undefined loop variable 'dev' + (hdegoede) +- MDRaidArrayDevice.totalDevices is a read only property so don't write it + (hdegoede) +- storage/__init__.py:471:Storage.exceptionDisks: Undefined variable 'udev' + (hdegoede) + +* Tue Sep 01 2009 Chris Lumens - 12.19-1 +- NetworkManager changed *again*, use libnm-glib.pc now. (dcantrell) +- Save duplicates from /etc/fstab and don't traceback (#517498). (clumens) +- Update fstab header to reference blkid instead of vol_id. (dlehman) +- Sort fstab entries by mountpoint. (#498354) (dlehman) +- Don't hardcode path to tune2fs. (dlehman) + +* Fri Aug 28 2009 David Cantrell - 12.18-1 +- Append s390x packages to PACKAGES list, exclude /sbin/qetharp-2.4 + (dcantrell) +- On kickstart installs, you can't select a different parttype + (#519137, #520058). (clumens) +- Don't try to create a primary partition if all slots are taken. (#519784) + (dlehman) +- Fix handling of locked preexisting LUKS devices. (#502310) (dlehman) +- Fix up handling of preexisting partitions. (dlehman) +- Pick up mountpoint set for protected partitions. (#498591) (dlehman) +- Ignore partitions belonging to disks we've reinitialized. (dlehman) +- Handle newly initialized disklabels whether via ks or prompt. (#519235) + (dlehman) +- Fix some indentation in the disklabel initialization block. (dlehman) +- Use commitToDisk() instead of commit() when only changing flags (hdegoede) +- Update PartitionDevice's partedPartition when the PartedDisks get reset + (hdegoede) +- Add --localscripts option to buildinstall. (dcantrell) +- Add missing dependencies for linuxrc.s390 and lsznet in mk-images + (dcantrell) +- Re-enable login of root user in initrd.img (dcantrell) +- Less log clutter with fixing ld64.so.1 symlink in instbin on s390x + (dcantrell) +- Fix typo in get_dso_deps() for searching /lib on s390x (dcantrell) +- Add hfsplus and netconsole kernel modules (#519756, #519785). (clumens) +- Adapt expandLangs to work with three character base lang names (#517770). + (clumens) +- Prevent resizes that would go past the end of the disk (#495520) + (dcantrell) + +* Wed Aug 26 2009 Chris Lumens - 12.17-1 +- dracut has initrd-generic- instead of initrd- (#519185) + (hdegoede) +- Do not try to commit disks changes to the os while partitions are in use + (hdegoede) +- disklabel.commit(): DeviceError -> DeviceFormatError (hdegoede) +- A "partition" having no partedPartition shouldn't be a traceback + (#519128). (clumens) +- Add some debugging code so we know what's going on for #504986 (katzj) +- Fix going back in "Inst. Method" and "Configure TCP/IP" screens in stage 1 + (#515450) (rvykydal) +- Fix going back from stage1 nfs/url setup dialog. (rvykydal) +- When bringing up network in UI, update only ifcfg file of selected device + (#507084). (rvykydal) +- Update Optional packages button via popup menu too (#515912). (rvykydal) +- Remove the firstadkit-plugin-grub from non-grub archs (msivak) +- Use the path instead of the name for the questionInitialize function. + (#517926) (jgranado) +- Only add "rhgb quiet" to boot args for non-serial installs (#506508, + #510523). (clumens) +- On rpm unpack errors, display a fatal error message (#452724). (clumens) +- Use tee thread to ensure line buffered output to screen and log file at + the same moment... (#506664) (msivak) +- Ensure libraries are copied to initrd.img for xauth (#516369) (maier) +- Import shutil for upgrades (#519011). (clumens) +- Fix focus grabbing on both the password and hostname screens. (clumens) +- x86 and EFI platforms can now have /boot on ext4. (clumens) +- Use the Platform's idea of what filesystem /boot can be on. (clumens) +- zz-liveinst.sh: Restore the #! line (ajax) +- Import _ped so it can be used for _ped.DiskLabelException. (pjones) +- Make sure LV and VG names fit within LVM limits (#517483) (dcantrell) +- Fix updates target to honor KEEP variable correctly. (dcantrell) +- Add support for the reiserfs filesystem (#504401) (dcantrell) +- Update instructions on how to generate source archive. (dcantrell) +- Use disk.description instead of trying to access parted attrs. (#518212) + (dlehman) +- Fix disk.partedDisk -> disk.format.partedDisk. (dlehman) +- Fix a stupid typo in the logging. (clumens) +- If modifying a repo fails, do not delete it (#516053). (clumens) +- If repo setup fails, also make sure to delete it from yum. (clumens) +- Allow configuring additional NFS repositories, not just the base. (clumens) +- Consolidate "base repo" setup into an extra function. (clumens) +- Allocate memory for login and password and do not meddle with host pointer + so we can correctly free it (#483818) (msivak) +- Run make in silent mode by default. (jgranado) +- Allow creation of an updates image from a tag offset. (jgranado) + +* Tue Aug 18 2009 David Cantrell - 12.16-1 +- correctly deactivate zFCP LUN on s390 (maier) +- correctly activate zFCP LUN on s390 (maier) +- prevent getting started up or shutdown again while already in such state + (maier) +- Remove unused reipl code in linuxrc.s390 (maier) +- Fix copying of shutdown to initrd.img in mk-images for s390x (#517888) + (maier) +- 64 bit sparc linux does not define __sparc64__ we need to use + "(defined(__sparc__) && defined(__arch64__))" fixes building 64 bit sparc + (dennis) +- make tftp images as small as possible. we have a 10mb hardware limitation + on there size (dennis) +- make sure we correctly make the sparc tftp image (dennis) +- make sure we have glibc.sparcv9 installed in sparc installers not + glibc.sparcv9v (dennis) +- add the sparc screen font (dennis) +- add the files for sparc boot config setup configure.ac to define IS_SPARC + (dennis) +- add mk-images.sparc script (dennis) +- add support for making sparc images (dennis) +- sparc no longer needs and special keyboard handling. it uses the standard + api's interfaces (dennis) +- setup termcap for sparc (dennis) +- Close %%packages with a %%end (#518063) (katzj) +- Call udev_settle from DiskLabel.commit to ensure it happens. (dlehman) +- Fix traceback in text mode upgrade. (#505435) (dlehman) +- Don't traceback if Delete button is hit when no device is selected. + (dlehman) +- Clean up management of extended partitions we create. (#497293) (dlehman) +- Don't use StorageDevice for partitions w/ biosraid formatting. (#504002) + (dlehman) +- Don't try to get the size of fstypes w/ no infofsProg defined. (dlehman) +- Change all disklabel manipulations to use the DiskLabel format class. + (dlehman) +- Create a DiskLabel format class for partition tables. (dlehman) +- Add support for specifying a tag to makeupdates. (dlehman) +- Include changed files from the top level in the updates. (dlehman) +- If asked, put the system SN (as given by dmidecode) into an HTTP header. + (clumens) +- Add dmidecode to the initrd. (clumens) +- Add the kssendsn parameter and corresponding flag. (clumens) +- Don't keep testing if we're doing URL_METHOD_HTTP. (clumens) +- Later pyparted will define DEVICE_DM, so change the test to use it. + (clumens) +- Use the new GTK Tooltip API (#517389). (clumens) +- Fix a typo in a kickstart error string (#517760). (clumens) +- Be sure we have a sorted list of mountpoints for live mangling (#504986) + (katzj) +- Fix askmethod to work with stage= being specified (#516973) (katzj) +- Fix ordering on device list returned from identifyMultipaths() (pjones) +- Fix typo in mpath support. (pjones) + +* Wed Aug 12 2009 David Cantrell - 12.15-1 +- Make sure we have the ca cert to handle https repo connections. (517171) + (jkeating) + +* Wed Aug 12 2009 David Cantrell - 12.14-1 +- Correctly inform the user once about obsolete parm/conf file options on + s390 (maier) +- Handle activation of DASDs in linuxrc.s390 since loader no longer works + (maier) +- make IPv4 configuration in linuxrc.s390 compatible with NM in loader + (maier) +- suggest disabled X11-forwarding for ssh login in linuxrc.s390 (maier) +- Fix an erroneous "!" in the test for doKill, and make reboot explicit. + (pjones) + +* Mon Aug 10 2009 David Cantrell - 12.13-1 +- Fix syntax error in identifyMultipaths() (dcantrell) + +* Mon Aug 10 2009 David Cantrell - 12.12-1 +- Honor network config boot params for CD-booted ks installs (#433214) + (dcantrell) +- Include ipcalc command in all initrd.img files, not just s390 (#516084) + (dcantrell) +- Don't to unmount /mnt/source unless something's mounted there (#516304). + (clumens) +- Honor nodmraid commandline option (#499733) (hdegoede) +- Don't try to multipath CD devices. (#516362) (pjones) +- booty: Do not strip the trailing p from a devicename like + mapper/isw_Vol0_tmp (hdegoede) +- booty: isw_Vol0_Stripe is not a disk isw_Vol0_Stri with an e part + (#505205) (hdegoede) + +* Fri Aug 07 2009 Chris Lumens - 12.11-1 +- upd-instroot: Inspect gtkrc for cursor theme (ajax) +- Support NFS repos in kickstart (#495620, #507093). (clumens) +- upd-instroot: xorg-x11-auth -> xorg-x11-xauth (ajax) +- Check to see if the arch string starts with ppc64. (#516144) (jgranado) +- vtActivate doesn't work on some ppc64 machines, so don't traceback + (#516206). (clumens) +- Make all sysfs path's be _without_ /sys prefix (#516168) (hdegoede) +- Do not go interactive if timezone in ks is not valid (#473647) (rvykydal) +- Fix going back from "NFS Setup" screen in stage 1 (#507064) (rvykydal) + +* Thu Aug 06 2009 David Cantrell - 12.10-1 +- Add missing 'i' in loader/loader.c for non-s390 arches. (dcantrell) + +* Thu Aug 06 2009 David Cantrell - 12.9-1 +- Avoid finding the word 'engine' in comments. (jkeating) +- Don't try to get dso deps of statically linked files. (jkeating) +- Call shutDown() correctly for s390 (karsten) +- Remove unused variable from loader/loader.c (karsten) +- Delete unpackaged files on non-livearches. (karsten) +- Do not set parted.PARTITION_BOOTABLE on s390. (root) +- Complete udev setup in linuxrc.s390 for automatic module loading (root) +- Recognize mpath devices when we see them. (pjones) +- Make DiskDevice.partedDisk a property. (pjones) +- Make questionInitializeDisk() somewhat less ugly. (pjones) +- Add a description to DiskDevice, and use it in the UI. (pjones) +- Get rid of Device.description, it is unused. (pjones) +- Close the opened file descriptors when necessary. (#499854) (jgranado) +- Add the glade files to the install image so save-to-bugzilla works + (#515444). (clumens) +- New system-config-keyboard has a different version then I expected + (hdegoede) + +* Wed Aug 05 2009 Chris Lumens - 12.8-1 +- Don't try to unmount the CD before we later unmount the CD (#515564). + (clumens) +- Do not offer going back when ugrade root for ks upgrade is not found + (#499321) (rvykydal) +- Rebuild .pot file and update translations. (clumens) +- Import the logging stuff (#515564). (clumens) +- Add keyboard kernel cmdline options to grub.conf for dracut (hdegoede) +- Fix backtrace in network.dracutSetupString in the static ip case (hdegoede) +- Write dracut i18n cmdline options to grub.conf (hdegoede) +- Pass InstalltData to booty __init__ as it needs access to many of its + members (hdegoede) +- Fix ctrl-alt-deleter behavior /before/ end of install. (pjones) +- Merge branch 'master' of ssh://git.fedoraproject.org/git/anaconda (notting) +- No longer use HAL in list-harddrives. (clumens) +- The names of a couple basic udev methods has changed. (clumens) +- Move basic udev methods out of the storage module (#514592). (clumens) +- We do not actually require gtkhtml2 or the python bindings for it. + (notting) +- Fix some typos in rescue mode (#515091) (msivak) +- Add a dracutSetupString method to network.py (hdegoede) +- Fix backtrace due to iscsi.getNode() not finding the iscsi node (hdegoede) +- Use dracutSetupString() method to add the kernel parameters needed for + dracut (hdegoede) +- Add a dracutSetupString method to devices.py classes (hdegoede) +- Differentiate between ibft discovered and manually added iscsi disks + (hdegoede) +- Store iscsi node pointer in iScsiDiskDevice objects (hdegoede) +- When checking logical partition dependcies, make sure the are one the same + disk (hdegoede) +- Only set iscsi nodes to autostart when none of the LUN's contain / + (hdegoede) +- Add functions to go from an iScsiDiskDevice to an libiscsi node (hdegoede) + +* Fri Jul 31 2009 Chris Lumens - 12.7-1 +- Fix up udev sillies (related to #514501) (katzj) +- Log when we unmount filesystems so we have a match for mount messages. + (clumens) +- Let's not exit from buildinstall.functions, say, ever (katzj) +- Rework shutDown() to better accomidate "nokill" better. (pjones) +- Make upgradeany boot option work again (#513227) (rvykydal) +- Update device.map when upgrading (#513393) (rvykydal) +- Catch None devs (katzj) + +* Wed Jul 29 2009 Chris Lumens - 12.6-1 +- Fix CDLABEL substitution in syslinux.cfg for x86 boot.iso (katzj) +- And finish off the removal of rhpl (katzj) +- Use keyboard bits from system-config-keyboard now (katzj) +- Use python-meh instead of our own exception handling now (clumens) +- NM no longer exposes information through HAL (#514501). (clumens) +- Put mkdir into /sbin on the initrd, too. (clumens) +- Make sure controlunits.sh is installed to initrd on s390 (dcantrell) +- Remove ChangeLog (#512502) (dcantrell) +- Add s390utils-cmsfs in upd-instroot for s390 (dcantrell) +- Make sure s390 gets /lib/ld64.so.1 (dcantrell) +- Skip writeDisabledNetInfo() when loader starts on s390 (dcantrell) +- Fix part --onpart= to print the device name instead of the __str__. + (clumens) +- Just pull in all python modules for stage2 (katzj) +- Trim PACKAGES list in upd-instroot. (dcantrell) +- Update linuxrc.s390 and friends to reflect review comments. (maier) +- Log non-upgradable upgrade candidate roots. (rvykydal) +- unmountFilesystems -> umountFilesystems (#510970). (clumens) +- Disable devel repos on release (#503798) (katzj) +- Work around problems with live installs and dpi other than 96 (#506512) + (katzj) +- Fix obvious typo in font name (katzj) + +* Wed Jul 22 2009 David Cantrell - 12.5-1 +- New build because koji hates me. + +* Wed Jul 22 2009 David Cantrell - 12.4-1 +- Add scripts/makeupdates to generate updates.img files. (dcantrell) +- Add python-decorator to the stage2 image for pyparted (#513175). (clumens) +- Set stage2= on x86 boot.iso (katzj) +- Try to auto-find the CD even if stage2= is specified (katzj) +- Make sure we have a device before check if it's protected. (#510033) + (dlehman) +- Remove unresolvable file devices from the devicetree. (#503830) (dlehman) +- Support multiple fstab entries of a single nodev fstype. (#505969) + (dlehman) +- Refer to nodev devices as "none", not "nodev". (dlehman) +- Change DeviceTree.devices from a dict to a list. (dlehman) +- Show locked LUKS devices as "Encrypted (LUKS)", not "LUKS". (dlehman) +- Allow creation of four primary partitions on a disk. (#505269) (dlehman) +- Add a bunch more stuff to the initrd needed for networking. (clumens) +- Add more things to /sbin on the initrd that udev requires. (clumens) +- Add dmesg to the images. (clumens) + +* Mon Jul 20 2009 David Cantrell - 12.3-1 +- Set GECOS field for new user accounts specific in ks files (dcantrell) +- Show MAC address of network device in text mode too. (rvykydal) +- Fix selection of alternative iface in UI after fail (#507084). (rvykydal) +- Stop the cdrom device before ejecting (#505067) (msivak) +- Add hipersockets to NETTYPE description (bhinson, #511962). (clumens) +- Don't show formatting progress bar after mkfs has exited. (eric_kerin) +- Run firstaidkit-qs script instead of the shell (shows rescue menu) + (#508512) Add dialog package required for firstaidkit Create /etc/fstab in + ramdisk to make mount commands easier (#440327) (msivak) +- When ignoring partitions make sure lvm also ignores them (hdegoede) +- 70-anaconda.rules: pass --ignorelockingfailure to lvm invocation (hdegoede) +- Call mdadm -I with --no-degraded for all disks but the last (hdegoede) +- There is no /bin on the initrd so sleep needs to go into /sbin. (clumens) +- Add deviceNameToDiskByPath(). (dcantrell) +- Display drive model and size in MB in partitioning UI (#460697) (dcantrell) +- Lots of small grammar and wording changes. (pjones) +- Edit user-visible dialogs for style. (pjones) +- Get rid of sloppy elipses usage. (pjones) +- Don't write optical devices to /etc/fstab (#505697). (clumens) +- error messages of zFCP on s390: log or pass to the UI (maier) +- correctly delete a SCSI device provided by a zFCP LUN on s390 (maier) +- All other teardown methods take a "recursive" argument (#506166). (clumens) +- Clean yum caches following preupgrade, too (#503096). (clumens) + +* Thu Jul 09 2009 David Cantrell - 12.2-1 +- mdmon added to install.img (Jacek.Danecki) +- Remove some unnecessary code. (clumens) +- Use a method yum provides, rather than inventing our own. (clumens) +- Remove _catchallCategory. yum handles this for us now. (clumens) +- Write out NM_CONTROLLED=no for NICs used for FCoE (hdegoede) +- Add support for biosraid using mdadm (hdegoede) +- Reverse: "Support for MD containers" (hdegoede) +- When all udev_is-foo() checks fail return instead of backtracing (hdegoede) +- 70-anaconda.rules: always import blkid output (hdegoede) +- Make sure to have "self" as an argument. (clumens) +- Add kickstart fcoe command (hdegoede) +- Use the yum preconf object to do $releasever substitution. (clumens) +- Indicate LV status according to lv_attr active bit (#491754) (dcantrell) +- Include lv_attr in lvm.lvs() return value. (dcantrell) +- Fix list of 64-bit arches. (notting) +- We also need -DUSESELINUX if we want to call matchPathContext. (clumens) +- Clean up some arch code. (notting) +- Update /etc/hosts with hostname for loopback IP address (#506384) + (rvykydal) +- Add missing LAYER2 and PORTNO handling for s390x. (dcantrell) +- Ignore configure.ac when generating updates.img (dcantrell) +- AC_ARG_WITH -> AC_ARG_ENABLE (dcantrell) +- dhclient now reads config files from /etc/dhcp (dcantrell) +- no "rhgb quiet" on s390 to enable visible boot progress and system + automation (#509881) (maier) +- fix backtrace in s390 reipl support due to missing anaconda.id.fsset + (#509877) (maier) +- Put sleep in /bin on the initrd (#505639). (clumens) +- Also include the grep programs. (clumens) +- Add programs from vim-minimal, coreutils, and util-linux-ng. (clumens) +- Move programs that aren't s390-specific into the main image. (clumens) +- Look for /bin/sh, not /sbin/busybox. (clumens) +- No longer symlink binaries to busybox. (clumens) +- No longer require busybox. (clumens) + +* Mon Jul 06 2009 Chris Lumens - 12.1-1 +- Include the rest of the libs isys needs to link against (#509572). + (clumens) +- Add FCoE disks to the devicetree with a type of FcoeDiskDevice (hdegoede) +- Add FcoeDiskDevice class to storage/devices.py (hdegoede) +- Add FCoE support to storage/udev.py (hdegoede) +- Write out configuration of FCoE to installed system (hdegoede) +- Initial FCoE support (hdegoede) + +* Thu Jul 02 2009 Chris Lumens - 12.0-1 +- network --bootproto no longer implies DHCP. (clumens) +- Don't unconditionally skip the network config screen in kickstart. (clumens) +- Allow creating new groups through kickstart. (clumens) +- Set focus on hostname entry in network UI screen (#494135) (rvykydal) +- Fix upgrade selected in UI after storage reset (#503302) (rvykydal) +- Add support for specifying upgrade partition in ks (#471232) (rvykydal) +- Add missing liveinst/* files. (dcantrell) +- Update code that checks for devices that contain install media. (dlehman) +- Rework tracking of devices containing installation media. (#497087) (dlehman) +- Add function storage.udev.udev_resolve_devspec. (dlehman) +- Prevent false positives in devtree's device lookup methods. (dlehman) +- Skip exceptionDisks if exn originated in devtree.populate. (#497240) (dlehman) +- Stop using rhpl.arch in writeRpmPlatform() (katzj) +- Move simpleconfig (back) into anaconda from rhpl (katzj) +- Use iutil arch specifiers rather than rhpl (katzj) +- Remove unused rhpl imports (katzj) +- Switch to using iutil.isS390 instead of rhpl.getArch (katzj) +- Stop using rhpl.translate (katzj) +- Default to /boot on ext4 (katzj) +- Allow /boot on ext4 now that we have a grub that allows it (katzj) +- Make sure the library directory is always set (notting) +- Write out "MAILADDR root" into mdadm.conf (#508321) (rvykydal) +- Do not install grub more times than needed. (rvykydal) +- Ensure we set the SELinux context correctly on symlinks (#505054) (katzj) +- udev dropped vol_id (#506360) (katzj) +- Handle installing multilib into the installer intramfs correctly. (notting) +- Set LIBDIR appropriately on PPC64. (notting) +- Fix grub upgrade (#505966) (rvykydal) +- Include yum.log in anacdump.txt too. (rvykydal) +- Access format options property instead of mountopts attr. (#506219) (dlehman) +- Be more careful about identifying NFS fstab entries. (dlehman) +- Don't add leading directory for files twice. (#503830) (dlehman) +- booty changes for iswmd (Jacek.Danecki) +- Support for MD containers. (Jacek.Danecki) +- New iswmd parameter for kernel cmdline (Jacek.Danecki) +- New udev rule for using mdadm for isw_raid_member (Jacek.Danecki) +- Use isohybrid to make boot.iso a hybrid image (katzj) +- Log yum messages. (rvykydal) +- Tell booty to rescan for bootable drivers when an extra disks get + added (hdegoede) +- Do not encourage VNC when doing kickstart text installs (#506534) (dcantrell) +- Rename bootstrap to autogen.sh (dcantrell) +- Include the contents of /proc/cmdline in exception reports (katzj) +- Include libwrap library for sshd and telnet in s390 installs (jgranado) +- Enforcing matching rootfs type on LVs as well as for partitions + (#504743) (katzj) +- Remove problem packages before attempting a re-download (#501887). (clumens) +- Be more explicit about what's lacking on EFI systems (#501341). (clumens) +- If not enough memory is installed, enforce swap partition creation + (#498742). (clumens) +- Convert to using automake/autoconf. (dcantrell) +- Convert po/ subdirectory to GNU gettext template system. (dcantrell) +- Restructure liveinst/ for the new build system. (dcantrell) +- Add m4/ subdirectory with autoconf macros. (dcantrell) +- Removed py-compile script. (dcantrell) +- Rename anaconda.spec to anaconda.spec.in (dcantrell) +- Ignore autoconf and automake files in the tree. (dcantrell) +- Removed toplevel Makefile and Makefile.inc (dcantrell) +- Show MAC address of network device in combo box (#504216) (dcantrell) +- Remove loader/tr/.cvsignore (dcantrell) +- Increase max NIC identification duration to 5 minutes (#473747). (dcantrell) +- Use /sbin/ipcalc for IP address validation (#460579) (dcantrell) +- Fix an obvious traceback when doing part --ondisk= (#504687). (clumens) +- Catch errors from bootloader installation (#502210). (clumens) +- Remove umask temporarily so device permissions are correct + (#383531, wmealing). +- Remove the name check on driver disk packages (#472951). (clumens) +- Make the installation key text more descriptive (#474375). (clumens) +- Fix discovery of existing raid/lvm for ks install without clearpart + (#503310, #503681) (rvykydal) +- Use the F12 version of the bootloader command. (clumens) +- It's /sbin/fsadm, not /sbin/e2fsadm (#504043). (clumens) +- Remove the bootloader --lba32 option. (clumens) +- Use gettext.ldngettext when necessary (#467603) (dcantrell) +- Test NM_CONTROLLED setting correctly in network.py (#502466) (dcantrell) +- Show unknown partitions as "Unknown" in partition editor. (dcantrell) +- Add a type hint on popup windows (rstrode). (clumens) +- Use the F12 version of the driverdisk command. (clumens) +- Remove driverdisk --type, since mount can figure that out. (clumens) +- Fix an error when editing an unreachable repo (#503454). (clumens) +- If /etc/rpm/platform is found, move it out of the way. (clumens) +- We no longer write out /etc/rpm/platform, so don't offer to upgrade + it. (clumens) +- Remove locals containing "passphrase" or "password" from exns + (#503442). (clumens) +- Make progress bars modal (#493263, #498553, rstrode). (clumens) +- Make sure to import os.path if we are going to use it. (jgranado) +- ipcalc is copied to /usr/lib. (jgranado) +- Limit the trigger to block type devices. (jgranado) +- We need ipcalc for new s390 installation script. (jgranado) +- Fix off-by-one errors in read. (notting) +- sysconfig file changed names for system-config-firewall (katzj) +- Don't write out firewall settings if they already exist (#502479) (katzj) +- Make sure that the devices are correctly detected (#491700) (jgranado) +- Make the save-to-bugzilla dupe detection smarter. (clumens) +- If network --device=MAC is given, translate to device name + (#185522). (clumens) +- Add a function to convert MAC addresses to device names. (clumens) +- Move /boot checks from sanityCheck into Platform.checkBootRequest. (clumens) +- Return translated strings from checkBootRequest. (clumens) +- Check that /boot is on a Mac disk label for PPC installs (#497745). (clumens) +- Call checkBootRequest from sanityCheck. (clumens) +- Put some space in that big scary warning. (clumens) +- fond -> found (clumens) +- Use powers of two in swapSuggestion (#463885). (clumens) +- Trim "mapper/" off device names in the bootloader UI (#501057). (clumens) +- Make the weak password dialog comply with the HIG (#487435). (clumens) +- Add a newline to a cmdline mode string (#497575). (clumens) + +* Tue Jun 02 2009 Chris Lumens - 11.5.0.59-1 +- Do not show disabled repos such as rawhide during the install (#503798). + (jkeating) + +* Sun May 31 2009 David Lehman - 11.5.0.58-1 +- Pass --force to lvresize so it doesn't ask for confirmation. (dlehman) +- Fix a typo in action sorting for resize actions (fs vs. device). (#501000) + (dlehman) +- Sending translation for French (mrtom) + +* Thu May 28 2009 Chris Lumens - 11.5.0.57-1 +- Create and use unique ids for Device instances. (#500808) (dlehman) +- Adjust remaining PartitionDevices' names after removing a partition. + (dlehman) + +* Tue May 26 2009 Chris Lumens - 11.5.0.56-1 +- Ensure matching rootfs type to live type with autopart (#501876) (katzj) + +* Tue May 26 2009 Chris Lumens - 11.5.0.55-1 +- Fix blank network device descriptions in the loader. (#501757) (notting) +- Make sure the right _isMigratable gets used for Ext3FS (#501585). (clumens) + +* Tue May 19 2009 Chris Lumens - 11.5.0.54-1 +- We are not guaranteed to have a partedDisk in the udev code (#501556, + #501428). (clumens) +- The location of the options wiki page has changed. (clumens) +- Disable BETANAG. (clumens) +- Install a en_US.UTF-8 locale in the first stage image. (notting) +- Reset font when changing language. (notting) +- Set locale to en_US.UTF-8 when initializing the console. (notting) + +* Mon May 18 2009 David Cantrell - 11.5.0.53-1 +- LVMVolumeGroupDevice stores pesize in MB, kickstart expects it in KB. + (dlehman) +- Don't schedule a format resize if reformat scheduled. (#500991) (dlehman) +- Deactivate md arrays regardless of state if the device is present. + (#496441) (dlehman) +- Lame hack to make sure --size= is never 0 (#500905). (clumens) +- Don't filter out partitions that haven't been allocated (#500932). + (clumens) +- Write out PE size as an integer, since that's what anaconda wants + (#501049). (clumens) +- Set clearPartType to None on preupgrade too (#499321). (clumens) +- Fix indentation of line to remove cancelled actions from the list. + (#500932) (dlehman) +- Consider active-idle state of md device as accepatable status of device + (#497407) (rvykydal) +- Fix detection of cciss disks (#499408) (dchapman) +- Get existing fs size for xfs. (dcantrell) +- Get existing fs size for ntfs. (dcantrell) +- Get existing fs size for jfs. (dcantrell) +- Get existing fs size for ext2, ext3, and ext4. (dcantrell) +- Compute existing filesystem size using fs info utility. (dcantrell) +- Do not allow users to migrate ext4 to ext4. (dcantrell) +- Correct handling of formats on encrypted preexisting LVs. (#499828) + (dlehman) +- Ignore unrecognized device-mapper devices we find. (#499967) (dlehman) +- loader: Mount /tmp as tmpfs not ramfs so we can swap it out (ajax) +- format.mountpoint -> lvd.mountpoint (#500913). (clumens) +- Treat the loop labels as devices without a label.(#493219) (jgranado) +- Add the partition table partition after initializing (#498602). (clumens) + +* Wed May 13 2009 David Cantrell - 11.5.0.52-1 +- Add a Mac OS boot line to yaboot.conf (#499964). (clumens) +- Catch IOError when enabling repos (#500439). (clumens) +- Use a newer version of the kickstart Partition command. (clumens) +- Fix a traceback when installing over previous installs on PPC (#499963). + (clumens) +- Fix a typo when probing exception disks. (clumens) +- Add support for --noformat too. (clumens) +- Add support for --onpart, --ondrive, and --useexisting. (clumens) +- Make the storage.writeKS method useful and called from instdata (#493703). + (clumens) +- Add writeKS methods to the device objects. (clumens) +- Add writeKS methods to all the format objects. (clumens) +- upd-instroot: Add gdbserver (ajax) +- Remove text-mode syslinux help (katzj) +- If clearPartType is None, don't attempt to clear a device (#499321). + (clumens) +- Only set clearpart data if the command was provided in the kickstart file. + (clumens) +- Override previously defined mountpoints in kickstart (#499746). (clumens) +- Yet another font package name has changed (#499322). (clumens) +- Set new mountpoint correctly for existing encrypted LVs. (#496363) + (dlehman) +- Once a partition is part of another device it cannot be modified. + (#496760) (dlehman) +- Maintain request sort order by using req_disks instead of parents. + (dlehman) +- Do not set a parent on the /mnt/sysimage/dev bind mount object (#499724). + (clumens) +- Skip .pyc files in subdirectories when running make updates. (clumens) +- Remove 'lowres' option. (ajax) +- Run tune2fs on newly formatted ext[34] filesystems. (#495476) (dlehman) + +* Thu May 07 2009 David Cantrell - 11.5.0.51-1 +- Don't clear the first partition on any disk with a Mac disk label + (#492154). (clumens) +- Add detailedMessageWindow to the cmdline class (#499700). (clumens) +- Don't traceback when a freespace partition is present (#499662). (clumens) +- Do nomodeset when doing xdriver=vesa (ajax) +- Fix calculation of smallest PV's size in the lvm dialog. (#493753) + (dlehman) +- Fix KeyError when partition numbers change during allocation. (#497911) + (dlehman) +- Update EFI CD booting code in mk-images (pjones) + +* Wed May 06 2009 Chris Lumens - 11.5.0.50-1 +- Use storage objects throughout the partition editing UI code (#491806, + #496002). (clumens) +- Verify filesystems after the live resize (katzj) +- Verify with fsck after resizing filesystems (katzj) +- IBM improvements to linuxrc.s390 (#475350) (dcantrell) +- Write out correct hostname during LiveCD installs (#492515) (dcantrell) +- Enter in hostname entry field advances to next screen (#494135) (dcantrell) +- Check if we'll clear a partition after setting its format attr. (#499251) + (dlehman) +- Don't pass the default clearPartType value to the device tree. (dlehman) +- Fix some logic errors in storage.partitioning.shouldClear. (dlehman) +- Forward port various iscsi fixes from 5.4 iscsi work (hdegoede) +- Avoid writing out NAME= in ifcfg files (#497485) (dcantrell) +- Retry network configuration in loader (#492009) (dcantrell) +- Make sure /boot ends up on the same disk as Apple Bootstrap (#497390). + (clumens) +- Handle that the default bootloader entry can sometimes be None (#496618). + (clumens) +- The PS3 bootloader allows booting from ext4 filesystems (#498539). + (clumens) +- Support LVM PE sizes > 128MB (#497733) (cristian.ciupitu) +- Set ANACONDAVERSION on most livecd installs. (clumens) +- getDependentDevices is in devicetree, not storage (#499144). (clumens) + +* Mon May 04 2009 David Cantrell - 11.5.0.49-1 +- Collect network interfaces from NetworkManager (#493995) (dcantrell) +- Handle fstab entries whose filesystem we don't recognize.(#498120) + (dlehman) +- Add an error signifying an unrecognized entry in /etc/fstab. (dlehman) +- Don't drop discovered format with unknown devices when parsing fstab. + (dlehman) +- Fix display of paths for device-mapper device in bootloader widget. + (dlehman) +- Don't call udevDeviceFormat if we're just going to clear the device + (#497323). (clumens) +- Pass clearPartType to the devicetree as well. (clumens) +- Break the complex should-clear logic out of clearPartitions. (clumens) +- Handle clearpart in the early kickstart pass too. (clumens) +- Correct setting the SELinux context on mountpoints (#494995). (clumens) +- make resetFileContext return the context set (wwoods) +- Allow editing of the hdiso source partition so it can be mounted + (#498591). (clumens) +- Add a ignoreProtected= parameter to deviceImmutable that does the obvious. + (clumens) +- Be more aggressive unmounting before install starts (#498260) (katzj) +- Add %%{?dist} to the release number in the spec file. (dcantrell) +- Configure network in kickstartNetworkUp() iff NM is not connected + (#490518) (dcantrell) +- Don't segfault with "ks someotherparam" (#498307). (clumens) +- Fix the arch upgrade check in yuminstall.py, too (#498280). (clumens) +- Move _resetRpmDb into iutil so we can access it everywhere. (clumens) +- Don't mount bind mounts last, that makes /dev break. (pjones) +- Pass anaconda to storage.FSSet.turnOnSwap. (dlehman) +- Ignore spurious formatting on partitioned devices. (dlehman) +- Revert "DeviceError only returns a message, not (message, device) tuple + (#496343)." (dlehman) +- Fix action sorting for partitions on the same disk. (#498064) (dlehman) +- Fix traceback in second editing of existing raid dev (#497234). (rvykydal) +- Allow existing LVs with filesystems to be resized (#490913) (dcantrell) +- Rate limit pulse() calls to ProgressWindow. (pjones) +- Don't populate flags.cmdline with "True" values when no = is used. (pjones) +- Add "nomodeset" to the list of command line arguments copied to grub.conf + (pjones) +- Use device.format.mountType insead of device.format.type for fstab. + (pjones) +- Initialize x86 class variables before efiBootloaderInfo.__init__() (pjones) +- Fix a segfault on nfs+kickstart (pjones) +- Fix an error when raising FormatCreateException. (clumens) +- Add more windows to the rescue interface class (#498014). (clumens) +- Remove requirement for EFI machines to be x86, since IA64 is too + (#497934). (clumens) +- Fix the kernel package selection on ppc64 machines (#497264). (clumens) +- Include fsck.ext4 and mkfs.ext4 in the images (#497996). (clumens) +- Properly restore SIGCHLD if X startup fails (wwoods) +- Fix kickstart PV references handling for lvm on raid (#497352). (rvykydal) + +* Fri Apr 24 2009 Chris Lumens - 11.5.0.48-1 +- Fix handling of swap files. (#496529) (dlehman) +- Pass anaconda to turnOnSwap so we can use swap files. (dlehman) +- Fix incorrect attribute name use for retrofit flag. (dlehman) +- Use slightly better checks when testing for 0 size (#493656, #497186, + #497389). (clumens) +- If the LV has no child, don't attempt to grab its format (#497239). + (clumens) +- Apply the global passphrase when doing kickstart autopart (#497533). + (clumens) +- Add support for encryption passphrase retrofits. (dlehman) +- Bring luks_add_key and luks_remove_key back into devicelibs.crypto. + (dlehman) +- Don't let lvremove failures from incomplete vgs crash the install. + (#497401) (dlehman) +- Allow setting a mountpoint w/o formatting an encrypted partition. + (#495417) (dlehman) +- Remove encryption from preexisting device if "Encrypt" is deactivated. + (dlehman) +- Fix indentation of preexisting partition handling block. (dlehman) +- The device passed to the luks passphrase dialogs is a string. (#492123) + (dlehman) +- Protect against tracebacks from the partition isFoo properties. (dlehman) +- Fix handling of bind mounts. (#496406) (dlehman) +- Add more filesystem checks. (clumens) +- Support vfat filesystems in the partitioning UI (#496351). (clumens) +- Remove devices in leaves first order (#496630) (hdegoede) +- Don't remove an inconsistent lvm partition from the devicetree (#496638) + (hdegoede) +- Move isEfi to be a property on Platform instead of on X86 (#497394). + (clumens) +- Support --encrypted --useexisting on kickstart installs (#497147). + (clumens) +- When making a RAID device, require that some members be selected + (#491932). (clumens) +- When catching an OSError, handle it as an object instead of a tuple + (#497374). (clumens) +- Enforce the fstype that holds /boot on kickstart installs (#497238). + (clumens) +- Fix ps3 platform support (#497203) (katzj) +- Clean up rpmdb locks at the end of the install (#496961) (katzj) +- Don't allow /boot to be on an encrypted device (#496866). (clumens) +- Use the correct unmount method (#496764). (clumens) + +* Tue Apr 21 2009 David Cantrell - 11.5.0.47-1 +- Fix adding of fifth partition in UI (#496930). (rvykydal) +- Define the fd variable before it can ever be referenced (#496930). + (clumens) +- Fix preservation of format attrs for preexisting luks partitions. (dlehman) +- Set md member devices' uuids after creating an array. (dlehman) +- Don't try to get size for nodev and bind filesystems. (dlehman) +- Include the device path in DeviceError exceptions. (dlehman) +- Mdadm's incremental mode ignores the auto option, so don't use it. + (dlehman) +- Use incremental mode for all md member addition during probing. (dlehman) +- Try to name existing md arrays based on their preferred minor. (dlehman) +- Reimplement mdexamine using a more easily parseable output format. + (dlehman) +- Fix position of "--run" option to mdadm assemble. (dlehman) +- Handle passphrase prompts without a traceback in cmdline mode. (#492123) + (dlehman) +- Fix another device vs. string problem in EFI bootloader config (#496669). + (clumens) +- Add the device's name to mdadm.conf (#496390). (clumens) +- Show normal cursor during passphrase entry (#496534) (msivak) +- Fix traceback in cmdline mode after exception handling cleanup (#496644) + (katzj) +- DeviceError only returns a message, not (message, device) tuple (#496343). + (clumens) + +* Fri Apr 17 2009 David Cantrell - 11.5.0.46-1 +- Clean up argument list after changing from rhpl to iutil for + execWithRedirect (jkeating) +- Fix NameError traceback setting up bootloader in EFI installs (wwoods) +- No longer force ISOs to be on ext2, ext3, or vfat partitions. (clumens) +- Sending translation for German (ckpinguin) +- Split text mode exn saving into multiple screren (#469380). (clumens) +- Copy /tmp/program.log to /mnt/sysimage/var/log/. (clumens) +- Fix member preselection in raid UI. (rvykydal) +- Fix editing of raid device (persistence of level choice) (#496159) + (rvykydal) +- Fix ks --useexisting and --noformat options of logvol and volgroup + (rvykydal) +- Make sure inconsistencies dont screw us up. (jgranado) +- Re-implement the inconsistency functionality. (jgranado) +- Allow the use of "-" in the lvm names. (495329) (jgranado) +- Make sure we "insist" on mdadm commands. (491729) (jgranado) +- [PATCH] Possible fix for some encryption related bugs during the Custom + Layout editation (#495848) (msivak) + +* Thu Apr 16 2009 Chris Lumens - 11.5.0.45-1 +- Touch /.autorelabel when running under rescue mode (#491747). (clumens) +- Add support for fingerprint-based logins (#481273). (clumens) +- Add a "File Bug" button to the catch-all partitioning exception handler. + (clumens) +- Remove the early catch-all exception handler (#495933). (clumens) +- Implement the save to USB using devicetree devices. (jgranado) +- Use size instead of currentSize when comparing lv sizes (hdegoede) +- Make sure all pv's of an lv's vg are setup before resizing an lv (hdegoede) +- Do not try to teardown a non existing format (hdegoede) +- Center the bootloader configuration dialog (#495802). (clumens) +- Destroy (potential) stale metadata when creating a new partition (hdegoede) +- use partition req_base_size instead of size in partitionCompare() + (hdegoede) +- Fix changing size of newly created partitions (hdegoede) +- Don't traceback on invalid filesystem detection (#495156) (dcantrell) +- Check to see if formatcb is None. (jgranado) +- Use the PV name when logging error messages. (jgranado) +- Don't set up the device to obtain minSize anymore. (dlehman) +- Improve estimate of md arrays' size. (dlehman) +- Determine minimum size for filesystems once, from constructor. (dlehman) +- Fix estimate of LUKS header size for newly encrypted devices. (#493575) + (dlehman) +- Fix two syntax problems with generated mdadm.conf entries. (#495552) + (dlehman) +- Default to AES-XTS cipher mode with 512 bit key for new LUKS devices. + (dlehman) +- When going back from a failed shrink, reset the device action set. + (clumens) +- If we can't communicate while logging in to bugzilla, error (#492470). + (clumens) +- Make save to usb work. (jgranado) +- We don't always have a formatcb either (#495665). (clumens) +- The entry is named lvsizeentry now. (jgranado) + +* Mon Apr 13 2009 David Cantrell - 11.5.0.44-1 +- Default to SHA512 password encoding algorithm. (dcantrell) +- Handle format combo box not existing (#495288) (dcantrell) + +* Mon Apr 13 2009 Chris Lumens - 11.5.0.43-1 +- Run programs with LC_ALL=C in case we're parsing output (#492549). + (clumens) +- A volume group device has a "peSize" attribute (not "pesize"). (dlehman) +- Remove uncommitted new lv from dict on cancel. (dlehman) +- Use the correct value when setting new extent size. (#493753) (dlehman) +- Fix image generation so all ELF binaries have their deps included + (#495231). (clumens) +- Clean up the code in editLogicalVolume function. (jgranado) +- Setup the disks before partitioning as the nodes are needed. (jgranado) +- Rescan the devices when we are saving a traceback. (jgranado) +- Close file descriptors when an error occurs. (jgranado) +- Aesthetic changes to "editLogicalVolume" function. (jgranado) +- When deallocating a partition also set its disk attribute to None + (hdegoede) +- Check self.partedPartition not being None before using it (#495077) + (hdegoede) +- growPartitions: Change op_func (back to) add when an iteration succeeds + (hdegoede) +- partedPartition can be None while growing partitions (#495076) (hdegoede) + +* Thu Apr 09 2009 Chris Lumens - 11.5.0.42-1 +- Fix display of format type for devices. (dlehman) +- Fix handling of priority option from swap fstab entries. (#494992) + (dlehman) +- Some fs types cannot be passed to programs (#495061, #493075). (clumens) +- When a new module is loaded, update the kernel_filesystems list. (clumens) +- Add more Indic fonts (#494261, pnemade). +- Remove the message saying you can make your own layout (#495015). (clumens) +- Put e100 (and other) firmware in its own directory if needed (#494778). + (clumens) +- Run /bin/umount instead of calling umount(2) in _isys.umount (#493333) + (dcantrell) +- Add doPwUmount() and mountCommandWrapper() to isys (#493333) (dcantrell) +- Preserve symlinks and only collect deps on ELF executables. (dcantrell) +- Use $(ARCHIVE_TAG) throughout the updates target. (dcantrell) +- partedUtils doesn't exist anymore (katzj) +- Revert "Show the header in certain non-lowres cases" (#493153) (katzj) +- Pre-existing partitions names may change (#494833) (hdegoede) +- Use getDeviceNodeName() instead of basename of device node. (hdegoede) +- Fix ks raid --useexisting and --noformat (rvykydal) +- Fix processing of --level and --device options of ks raid commands. + (rvykydal) +- Don't start pdb immediately in debug mode (katzj) +- Fix EDD BIOS disk order detection in general and make it work with dmraid + (hdegoede) +- Update extended partition geometry when we change it (hdegoede) + +* Tue Apr 07 2009 David Cantrell - 11.5.0.41-1 +- Make sure we have a clean lvm ignore list when we initialize. (jgranado) +- We need to search by name without the "mapper" prefix. (jgranado) +- Create a min_max constraint to avoid alignments issues. (jgranado) +- Don't exit the installer from filesystem errors. (dlehman) +- Try not to raise exceptions from minSize calculators. (dlehman) +- Don't traceback when PVs are encrypted or are not partitions. (dlehman) +- Adjust device dependencies when backing out device encryption. (#493257) + (dlehman) +- Include filesystem type in mount log message. (dlehman) +- Load filesystem modules on demand (#490795, #494108). (clumens) +- Use existing partitions when --onpart is used for PVs or raid members + (#493065) (rvykydal) +- Raise message, not exception when size set in LV dialog is too big. + (rvykydal) +- Raise an error when remofing an extended part with logical parts. + (jgranado) +- Esthetic changes to storage/partitioning.py. (jgranado) +- dmraid.py is no longer being used by anything, so remove it. (clumens) +- Remove partedUtils.py. (clumens) +- This is the only place isEfiSystemPartition is used, so pull it in. + (clumens) +- getReleaseString now lives in the storage module. (clumens) +- Stop lying about our support for dmraid and multipath in kickstart. + (clumens) +- Remove some old, unused code that also uses biosGeometry. (clumens) +- For very small disks, don't try to display a stripe in the graph + (#480484). (clumens) +- Fix reading the console= parameter from the cmdline (#490731). (clumens) +- For dmraid partititons device node name != name (hdegoede) +- When a partition request gets unallocated, set the name back to req# + (hdegoede) +- Do not use getPartitionByPath() in allocatePartitions() (hdegoede) +- Remove no longer used iscsi_get_node_record function (hdegoede) +- Try to handle devices which live in a subdir of /dev properly (hdegoede) +- Split DeviceTree.addUdevDevice into several smaller methods. (dlehman) +- Don't traceback from failure finding minimum fs size. (#494070) (dlehman) +- udev_settle after format teardown to avoid EBUSY on device teardown. + (#492670) (dlehman) +- Add a parted.Device attribute to all existing StorageDevices. (dlehman) +- If no partitioning commands are given, apply the UI selections (#490880). + (clumens) +- Update font package names for ml_IN, si_LK, etc. (#493792, #493794). + (clumens) +- Fix a typo in the city name for Nepali (#493803). (clumens) +- Fix writing out the partition= line on PPC (#492732). (clumens) +- Do not check size when adding LV to growing VG (bug #492264) (rvykydal) + +* Thu Apr 02 2009 David Cantrell - 11.5.0.40-1 +- Don't let device names affect action order in general case. (dlehman) +- Round up when aligning to pesize for space used. (#493656) (dlehman) +- Improve handling for various nodev filesystems in fstab. (#493685, + #493202) (dlehman) +- Present the correct max lv size in the dialog. (dlehman) +- Use the head of the current branch, not master, for scratch archives. + (dlehman) +- Make a top level StorageError that all others are based on. (dlehman) +- Remove unused PRePDevice class. (dlehman) +- Make the disk model an attribute of DiskDevice. (dlehman) +- Handle format actions in cancelAction() (dcantrell) +- Fix format check box for pre-existing partitions (#491675) (dcantrell) +- Remove temporary directory used in _getExistingSize() (dcantrell) +- Activate storage before looking up the hdiso source drive (#491781). + (clumens) +- Remove isys.getDeviceByToken since it is no longer used. (clumens) +- Don't allow the rootfs on live installs to not match (#493206, #492727) + (katzj) +- Create setup and teardown functs for dmraid devs. (jgranado) +- put xfs back where it belongs (sandeen) +- Fix up the other caller of unmountCD to pass in a device (#493537). + (clumens) + +* Wed Apr 01 2009 Chris Lumens - 11.5.0.39-1 +- Prevent sensitive information in kickstart files from ending up in + tracebacks. (clumens) +- It's 2009, let's ignore floppy drives now (#493338, #493377). (clumens) +- Remove DmRaidArrayDevice level attribute (#493293) (hdegoede) +- get_containing_device takes two arguments (#493266). (clumens) +- Fix the check for if there's enough space available on / and /usr + (#492614). (clumens) +- Fix testing if a PPC partition is bootable (#492726). (clumens) +- Look for a PReP "partition" by examining the format, not the flags + (#492426). (clumens) +- Fix a few more pylint warnings and errors in storage/* (hdegoede) +- Fix some pylint warnings in iw/*.py (hdegoede) +- Don't start our audit daemon with the livecd installer (katzj) +- If there's a problem finding removable disks, disable save-to-disk. + (clumens) +- Move %%pre processing to much earlier in the install process. (clumens) +- If there are no installs to rescue via kickstart, display an error. + (clumens) +- Add an early kickstart processing pass. (clumens) +- Fixes of errors shown by pylint that didn't get into the beta build. + (mgracik) +- Adjust the dmraid ignoring logic. (jgranado) +- Reference the format by type, not name.(#492596) (jgranado) +- Sending translation for Chinese (Simplified) (leahliu) +- Increase udev_settle timeout in udev_get_block_devices. (#492049) (dlehman) +- Fix check for fully defined md array when raidlevel is 0. (#491796) + (dlehman) +- Fix a typo ('isEFI' should be 'isEfi'). (dlehman) +- Make sure the pvs are set up before doing lvremove or vgremove. (dlehman) +- Don't write out md member devices to a config file for assemble. (dlehman) +- Fix the supported property of filesystems and prepboot format. (dlehman) +- Return early from doAutoPartition if partition allocation fails. (dlehman) +- Reset storage instance if autopart fails. (#492158) (dlehman) +- Assign weights to partition requests when doing manual or kickstart + installs. (clumens) +- Refresh windows immediately to make sure they appear. (clumens) +- Fix problem with format and migrate combo box activation. (dcantrell) +- Fix typo in upgrade.py (dcantrell) +- Move _scheduleLVs and growLVM calls to be inside try/except (dcantrell) +- Correct bounds checking problems in 'Shrink current system' (dcantrell) +- Require libselinux-python (#489107) (dcantrell) +- Do not prompt for NIC selection in cmdline mode (#492586) (dcantrell) +- Do not write /etc/hosts since setup owns that now (#491808) (dcantrell) +- Remove unused self._resize variable. (dcantrell) +- Having 2 raidsets in the same group of devs is possible. (jgranado) +- getDevice returns a string. Use that to look up the device object + (#492465). (clumens) +- Take into account i386->i586 when warning on upgrade arch mismatch. + (clumens) +- Remove unused getVG{Free,Used}Space methods. (clumens) +- We can no longer display Russian correctly in text mode (#491394). + (clumens) +- Clean up the reinitialize LVM warning message (#491888). (clumens) +- Update translation files (#484784). (clumens) +- Include the storage directory when building the .po files. (clumens) +- Merge commit 'origin/anaconda-storage-branch' (clumens) +- Keep VG size property non-negative (rvykydal) +- Grow LVs for kickstart requests too (rvykydal) +- Handle not finding the upgrade root gracefully. (jgranado) +- Use self.name to report that we could not eject cd. (jgranado) +- Fix ppoll() timeout=infinity usage in auditd (#484721). (pjones) +- Use correct parse method for the upgrade command (#471232) (wwoods) +- Rename /etc/modprobe.d/anaconda to /etc/modprobe.d/anaconda.conf (clumens) +- Handle FTP servers that both want and don't want PASS after USER + (#490350). (clumens) +- Only select the Core group in text mode (#488754). (clumens) +- Add created user to default group created for the user. (rvykydal) + +* Wed Mar 25 2009 Chris Lumens - 11.5.0.38-1 +- Fix pylint errors in iw/*.py (hdegoede) +- Rework CryptTab.parse (dlehman). +- Code fixes of errors shown by pylint (mgracik). +- Don't underflow on the busy cursor stack. (clumens) +- "vg" is not valide inside this if. (jgranado) +- Device is sometimes None. (jgranado) +- Fix typo. (#492042) (dlehman) + +* Tue Mar 24 2009 David Cantrell - 11.5.0.37-1 +- Start with a basic /etc/hosts file (#491634) (dcantrell) +- Do not flag every existing partition for resize (#491803) (dcantrell) +- Remove unused noformatCB() function. (dcantrell) +- Remove unnecessary istruefalse() function. (dcantrell) +- Build new _isys.so for updates.img if needed. (dcantrell) +- Get the UUID of each md array we create. (#491796) (dlehman) +- Call udev_settle after committing changes to a disk (#491529) (hdegoede) +- Be a little bit smarter about allocating space to grow parts. (#491761) + (dlehman) +- Check that partition is on the disk before trying to remove it. (#491997) + (dlehman) +- Work around a bug in mdadm incremental assembly. (dlehman) +- Use the same units (MB) for extent size that we do for everything else. + (dlehman) +- Put line breaks in between crypttab entries. (#491938) (dlehman) +- Register the NoDevFS class. (clumens) +- fslabels -> labels. (clumens) +- NFSDevice does not take exists= as a parameter. (clumens) +- Override _setDevice and _getDevice in NFS. (clumens) +- Move resolveDevice into the DeviceTree class. (clumens) +- Move most of the parseFSTab logic into its own function. (clumens) +- We don't even use partedUtils in this module. (clumens) +- PReP formats can never be active. (#491865) (dlehman) +- Move protectedPartition setup into storageInitialize (#491781). (clumens) +- Use the mount and unmount methods on OpticalDevice.format now. (clumens) +- Add a format for ISO9660 filesystems. (clumens) +- getDeviceByName does not expect the CD device to start with "/dev/" + (#491768). (clumens) +- Write the same arch to .discinfo as iutil.getArch() gives us (#490977). + (clumens) +- Don't remove partitions twice. (jgranado) + +* Mon Mar 23 2009 David Cantrell - 11.5.0.36-1 +- Add EFI, Apple Bootstrap, and PPC PReP Boot formats. (dlehman) +- Remove all implicit calls to self.format.destroy from Device classes. + (dlehman) +- Pop the busy cursor when we're done with the wait window (#491736). + (clumens) +- If the new size and old size are the same, treat as a no-op (#491496). + (clumens) +- Let mountFilesystems handling bind mounting /dev (#490772). (clumens) +- Not all FileDevices have parents, so don't assume. (clumens) +- Bind mount formats are mountable. (clumens) +- If a filesystem is already mounted, don't raise an error. (clumens) +- Fix a typo calling the superclass's constructor. (clumens) +- Add a fake device for bind mounting /dev. (clumens) +- If there was an exception leading to the urlgrabber error, log it. + (clumens) +- Fix the import of checkbootloader (#491574). (clumens) +- Add a missing import (#491605). (clumens) + +* Fri Mar 20 2009 David Cantrell - 11.5.0.35-1 +- Fix traceback in FSSet.crypttab. (#491160) (dlehman) +- Fix traceback on upgrade. (#491446) (dlehman) +- Do not include .h and .sh files in updates.img (dcantrell) +- Make PartitionDevice resize work. (dcantrell) +- Reset mouse pointer if we find an unreadable disk. (dcantrell) +- Use label attr instead of non-existent fslabel attr. (#491120) (dlehman) +- Need to notify the kernel of changes before udev settle (katzj) +- Revert "mount and umount commands are in /sbin now, remove from /usr/sbin" + (dcantrell) +- Make some fixes to the rescue mode system selection UI (#489973, #489977). + (clumens) +- Fix text mode autopartitioning (#491282). (clumens) +- Do not use _rnetdev as fstab option for network based / (hdegoede) +- Make root= line in grub.conf and path spec in fstab consistent (hdegoede) +- Fix a reference to the partitions list (#491335). (clumens) +- Do not traceback at the very beginning of rescue mode (msivak) +- Fix traceback when editing encrypted mdraid device in UI. (rvykydal) + +* Thu Mar 19 2009 David Cantrell - 11.5.0.34-1 +- Catch FSError when detecting storage, prevent user from continuing. + (dcantrell) +- If we have no error string, place None in the tuple. (dcantrell) +- Move OUTPUT_TERMINAL definition to isys.h (dcantrell) +- mount and umount commands are in /sbin now, remove from /usr/sbin + (dcantrell) +- Avoid SIGSEGV in doPwMount() when NULL is last parameter (#491192) + (dcantrell) +- Attempt disk commits 5 times before raising an exception. (dcantrell) +- Add boot partition size limit properties and size validation method. + (dlehman) +- Make sure boot flag gets set. (#491170) (dlehman) +- Make bootable a property of PartitionDevice. (dlehman) +- After setting up our random UUID, inform the storage layer (katzj) +- Handle system crappyness. (jgranado) +- Fix up checking for live image backing (katzj) +- Let's not remove our mountpoints (katzj) +- Fix writing the default= line in grub.conf (#490756). (clumens) +- Revert "Fix pruning of destroy actions for preexisting devices." (dlehman) +- Add more blacklisting (katzj) +- Blacklist the live image backing device (katzj) +- Move blockdev blacklisting to be a function (katzj) +- Inhibit devkit-disks during a live install (katzj) +- try to unmount everything from /media on live installs (katzj) +- Fix live installs to not traceback (katzj) +- Fix New partition in UI (rvykydal) + +* Thu Mar 19 2009 David Lehman - 11.5.0.33-1 +- Rework the lvm dialog. (#490301,#490966,#490681,#489870) (dlehman) +- Improve chances of uniqueness from Storage.createSuggestedLVName. (dlehman) +- Fix pruning of destroy actions for preexisting devices. (dlehman) +- Devices should not be resizable unless they exist. (dlehman) +- Try to activate an existing md array after adding each member. (dlehman) +- Indicate filesystem is mountable if we have a mount command. (dcantrell) +- Mount existing filesystems read-only when getting size. (dcantrell) +- Fix some errors in the updates target. (dcantrell) +- Place all mount.* commands in /sbin (dcantrell) +- Fix error message reading and writing in doPwMount() (dcantrell) +- Use booleans in isys.mount() and isys.umount() (dcantrell) +- Add a FIXME comment for setting uuid in VG / LV create (hdegoede) +- Do not traceback when writing anaconda.ks with iscsi with auth info. + (hdegoede) +- Do not write LV uuid to grub.conf, but the filesystem uuid (hdegoede) +- If a mountpoint depends on a network disk at _netdev to its fstab options + (hdegoede) +- Do not hang when creating raid array with member having filesystem + detected (#490891) (rvykydal) +- Destroy and create luks child of raid array too when editing in UI. + (rvykydal) +- Editing non-existent raid device by destroying and creating actions + (rvykydal) +- actionDestroyFormat call takes device, not format (rvykydal) +- Fix getChildren call in partition UI (rvykydal) +- Fix removing of devices with the same name from tree when adding + create action. (rvykydal) +- Do not duplicate requested minor number in edit raid UI list. (rvykydal) +- Offer available partitions when editing non-preexisting raid request. + (rvykydal) +- Don't try to fit the whole StorageDevice.__str__ output into the UI + (#490406). (clumens) +- Make PartitionDevice handle both normal and dmraid partitions (hdegoede) +- Stop overriding __init__ in DMRaidPartitionDevice (hdegoede) +- Set format UUID after creating a format (hdegoede) +- Fix result of updateSysfsPath to be consistent with initial sysfsPath + values (hdegoede) +- Use getDevicesByInstance() for storage.partitions (hdegoede) +- We no longer use iscsiadm anywhere (hdegoede) + +* Tue Mar 17 2009 Jesse Keating - 11.5.0.32-1 +- Typo fix. (clumens) +- Make platform.checkBootRequest work better and not use diskset anymore. (clumens) +- Fix a traceback when looking for PS3 boot partitions (#490738). (clumens) +- FormatArgs -> FormatOptions (#490737). (clumens) +- Fix ppoll() timeout=infinity usage in auditd (#484721). (pjones) +- Simplify kernel package selection. (clumens) +- Look at CPU flags instead of /proc/iomem to determine PAE-ness (#484941). (clumens) +- Tell NM not to touch interfaces when / is on a network disk (hdegoede) +- Get iscsi going with the new storage code (hdegoede) +- Use minihal instead of isys.hardDriveDict in list-harddrives (#488122). (clumens) +- storage.disks never includes disks without media present. (clumens) +- Changed the getDevicebyLabel() to getDeviceByLabel() in devicetree.py (mgracik) + +* Mon Mar 16 2009 David Cantrell - 11.5.0.31-1 +- Don't use disk.maximizePartition anymore. (dlehman) +- Only schedule implicit format destruction if there is formatting to + destroy. (dlehman) +- Reset encryptionPassphrase when we reset the rest of storage. (dlehman) +- Do not create a LUKSDevice if we do not have a way to map the device. + (dlehman) +- Fix handling of new extended partitions during partition allocation. + (dlehman) +- Fix bug in dependency list for partitions. (dlehman) +- Fix inconsistency in variable use in search for free space. (dlehman) +- Check for disk name being in disk.name not in clearPartDisks (dcantrell) +- Create a Makefile target to generate updates.img automatically. (dcantrell) +- When creating free space, handle cases other than clearpart --drives= + (clumens) +- Ignore loop and ram devices (hdegoede) +- devicetree: fix slave addition of incomplete dm / md devices (hdegoede) +- Catch LVMErrors too when tearing down devices (hdegoede) +- Install udev rules in /lib/udev/rules.d instead of in runtime dir + (hdegoede) +- Ignore disk devices with missing media (#488800). (clumens) +- Use correct parse method for the upgrade command (#471232) (wwoods) +- Fix creation of fs options for preexisting encrypted devices. (dlehman) +- Fix lots of buggy behavior in the partition dialog. (dlehman) +- Handle FTP servers that both want and don't want PASS after USER + (#490350). (clumens) +- Fixed the names of the variables for lvm.py functions. (mgracik) +- editPartitionRequest -> editPartition in iw/partition_gui.py (#490384). + (clumens) +- clampPVSize -> clampSize in lvm.py (#490295). (clumens) +- Fix the obvious and stupid typo (#490296). (clumens) +- isys.umount removes mount directory by default (rvykydal) +- Fix tempfile.mkdtemp call. (rvykydal) +- Initialize attribute _mountpoint before using it (rvykydal) +- devicetree.py has _ignoredDisks instead of ignoredDisks. (jgranado) +- Create separate resize actions for formats and devices. (dcantrell) +- Use os.statvfs() to get existing filesystem size. (dcantrell) +- Add resizeArgs for Ext2FS and fix it for BtrFS. (dcantrell) +- Report when we cannot find any free space partitions. (dcantrell) +- Improve resizeDialog text. (dcantrell) +- Raise FSResizeError if filesystem cannot be resized. (dcantrell) +- Handle resizing when setting targetSize for PartitionDevice (dcantrell) +- Let users set the size property of StorageDevices. (dcantrell) +- Add support for kickstart's '--initlabel' option to clearpart. (dlehman) +- Fix display of LV format type for encrypted LVs. (dlehman) +- Make paths somewhat flexible so we'll work in normal environments. + (dlehman) + +* Fri Mar 13 2009 David Lehman - 11.5.0.30-1 +- Fix supportable attribute for cmdline-enabled fstypes. (dlehman) +- Access private attribute for luks dict. (dlehman) +- Schedule format create for newly encrypted preexisting partition. (dlehman) +- Don't traceback if vg.teardown fails in recursive teardown. (dlehman) +- Schedule format create action for newly encrypted preexisting LV. (dlehman) +- Make sure we return something other than None for new requests. (dlehman) +- Add __str__ methods to Device objects. (clumens) +- Add mediaPresent and eject to the OpticalDevice class. (clumens) +- Use the right import path for checkbootloader (#490049). (clumens) +- Rename /etc/modprobe.d/anaconda to /etc/modprobe.d/anaconda.conf (clumens) +- Don't clear partitions containing the install media. (dlehman) +- Wait til everyone knows the format/fs is no longer active. (dlehman) +- Save a copy of the device stack so we can destroy the format. (#489975) + (dlehman) +- Add a deep copy method to Device since we can't just use copy.deepcopy. + (dlehman) +- Fix infinite loops in partition screen populate. (#490051) (dlehman) +- Default to a name based on the uuid for existing luks mappings. (dlehman) +- Use the correct keyword for luks map names ('name', not 'mapName'). + (dlehman) +- Fix getting of number of total devices of sw raid. (rvykydal) +- Only select the Core group in text mode (#488754). (clumens) +- Added test case for devicelib mdraid.py. (mgracik) +- Add created user to default group created for the user. (rvykydal) +- Fix editing of existing logical volume. (rvykydal) +- Add a list that lvm should ignore. (jgranado) + +* Thu Mar 12 2009 David Lehman - 11.5.0.29-1 +- Don't create a PartitionDevice for devices that do not exist (#489122). + (clumens) +- A getter doesn't usually take a parameter (#489965). (clumens) +- Do not write "Running..." to stdout, as that could be tty1. (clumens) +- Call storage.exceptionDisks, not diskset.exceptionDisks. (#489615) + (dlehman) +- Fix typo. (jgranado) +- Fix typo. (dlehman) +- Add udev rules for handling for mdraid arrays. (dlehman) +- Honor the zerombr kickstart directive. (dlehman) +- currentSize is expected to be a float, so convert it to one (#489882). + (clumens) +- It's clearPartDisks, not clearPartDrives. (clumens) +- Get rid of the mappings and ksID as well. (clumens) +- Make sure the device has a diskType before attempting to check what it is. + (clumens) +- Update the volgroup command to work with the new storage code. (clumens) +- Update the raid command to work with the new storage code. (clumens) +- Update the part command to work with the new storage code. (clumens) +- Update the logvol command to work with the new storage code. (clumens) +- addPartRequest is no longer needed. (clumens) +- Don't set default partitioning in every kickstart case. (clumens) +- Clear partitions before scheduling requests. (clumens) +- Always go through doAutoPart. (clumens) +- Format modules import fix (mgracik) +- Fixed the format modules import (mgracik) +- Allow overriding the anaconda udev rules from an updates.img (hdegoede) +- If a pv somehow does not contain a vg_name, do not try to get other vg + info (hdegoede) + +* Wed Mar 11 2009 David Cantrell - 11.5.0.28-1 +- Fix a few bugs in the lvm dialog. (#489022) (dlehman) +- Modify livecd.py to work with new storage backend. (dlehman) +- Be explicit about resetting Disks' partedDisk attribute. (#489678) + (dlehman) +- Deactivate devices after we've finished scanning them. (dlehman) +- Handle the case of removing an unallocated partition from the tree. + (dlehman) +- Try again to set up LVs when we've just added a new PV to the VG. (dlehman) +- Set partition flags in format create/destroy execute methods. (dlehman) +- Make sure we use the newly committed parted.Partition after create. + (dlehman) +- Make device teardown methods more resilient. (dlehman) +- Initialize storage in rescue mode so we can find roots (#488984). (clumens) +- We also need to pack up the extra args tuple, too. (clumens) +- doLoggingSetup keeps growing new arguments, so put them into a dict + (#489709). (clumens) +- Fix anaconda udev rules to not require pre-existing device nodes (hdegoede) +- Hook up 'Shrink current system' dialog to new storage code. (dcantrell) +- Fix _getCheckArgs() in class FS. (dcantrell) + +* Tue Mar 10 2009 David Cantrell - 11.5.0.27-1 +- Fix action pruning to handle more complex scenarios. (dlehman) +- Schedule destruction of any existing formatting along with the device. + (dlehman) +- Add a size attribute to mdraid arrays. (dlehman) +- Speed up partitioning screen redraws by trimming workload where possible. + (dlehman) +- Create partitions with exactly the geometry we calculate. (dlehman) +- Fix name collision between formats.mdraid and devicelibs.mdraid. (dlehman) +- Destruction of the member device formatting will be handled elsewhere. + (dlehman) +- Fix a typo (jkeating) +- Fix pruning between two destroy actions on the same device (rvykydal) +- Use the pyblock functions when possible. (jgranado) +- We are searching a list, not a dict now (rvykydal) + +* Mon Mar 09 2009 David Cantrell - 11.5.0.26-1 +- Move the recursive teardown of all devices out of processActions. (dlehman) +- Clean up handling of /proc, /sys, /dev/pts, /dev/shm entries. (dlehman) +- Fix several minor bugs preventing upgrade/rescue mount. (#488946) (dlehman) +- Only populate the device tree on demand. (dlehman) +- Prune actions by device based on path, not object-id. (dlehman) +- Rewrite action sort so it works correctly. (dlehman) +- Do a separate disk.commit for each partition add/remove. (dlehman) +- Fix bug keeping track of best free region/type/disk info. (dlehman) +- Return early if doAutoPart is False, but clearpart first if kickstart. + (dlehman) +- Recognize PS3 as a valid machine type (#489263). (clumens) +- Move the mdRaidBootArches logic into the platform module. (clumens) +- stdout and stderr may also need to be created. (clumens) +- Fix booty for dmraid (hdegoede) +- It's self.origrequest, not self.origreqest (#489036). (clumens) +- Added crypto.py unittest; Updated devicelibs tests baseclass.py and lvm.py + (mgracik) +- Start storage before parsing the kickstart file. (clumens) +- Make sure autopart without any clearpart command will fail. (clumens) +- Update storage flag on ks autopart (rvykydal) +- Use correct storage attribute for ks clearpart (rvykydal) +- Catch the new _ped.DiskLabelException for unrecognized disklabels. + (dlehman) +- Catch all failures from making parted objects in exceptionDisks. (dlehman) +- various dmraid fixes. (jgranado) +- Implement the format disk question as a callback. (jgranado) +- Add dmraid functionality to new storage code. (jgranado) +- Do not pass None values into nonmandatory arguments, you are screwing the + default values.. (msivak) + +* Thu Mar 05 2009 David Cantrell - 11.5.0.25-1 +- Schedule device destroy actions for partitions last. (dlehman) +- Pass storage.disks, not storage, to createAllowed.... (#488860) (dlehman) +- Nodev filesystems always exist. And the device is arbitrary. (dlehman) +- Include proc, &c filesystems in fstab and FSSet.{mount/umount}Filesystems. + (dlehman) +- Remove FSSet.writeFSTab. That job is handled elsewhere. (dlehman) +- Add properties to FSSet to provide the nodev entries. (dlehman) +- Fix incomplete format in Storage.deviceImmutable. (dlehman) +- Make sure we use the same disk the free space is on. (#488807) (dlehman) +- Prevent clobbering of name 'mdraid' by qualifying it. (dlehman) +- Handle unformatted disks and cdroms in Storage.exceptionDisks. (dlehman) +- Add resizeArgs property for resizable filesystems. (dcantrell) +- Fill out class NTFS a bit more. (dcantrell) +- Add fsckProg property to class FS. (dcantrell) +- Ext2FS.migratable(self) -> Ext2FS.migratable (dcantrell) +- Fix StorageDevice.minSize() and PartitionDevice.maxSize() (dcantrell) +- Center resize window on the screen. (dcantrell) +- Do not raise DeviceError if not bootable device is found. (dcantrell) +- Do an even more thorough job of ignoring disks libparted doesn't like. + (clumens) +- Fix a couple problems on the "Change device" bootloader dialog. (clumens) +- Fix a typo when writing out the mdadm config file. (clumens) +- Remove all uses of isys.cdromList, which no longer exists. (clumens) +- Check to see if we're on S390 on the congrats screen (#488747). (clumens) +- Handle non-fatal errors more gracefully in addUdevDevice. (dlehman) +- partRequests no longer exists, so don't try to import it (#488743). + (clumens) +- When building the exceptionDisks list, skip devices libparted doesn't + like. (clumens) +- Iterate over devicetree.devices.values, not devicetree. (dlehman) +- Add a get() method to Flags, since it pretends to be a dictionary. + (clumens) +- Stop with the fsset usage. (dlehman) +- Format message string after translation not before (msivak) +- We need newer python-cryptsetup because of the default values for cipher + and keysize for luskFormat (msivak) +- If a drive is not initialized, offer reinitialization or ignoring the + drive to the user (msivak) +- More syntax errors / traceback fixes (hdegoede) +- Fix syntax errors (rvykydal) +- Implement Storage.sanityCheck, mostly from old partitions code. (dlehman) + +* Thu Mar 5 2009 Dave Lehman - 11.5.0.24-3 +- Fix booty's desire to import fsset. +- Fix attempt to set read-only attr "removable" in DiskDevice.__init__ + +* Thu Mar 05 2009 Peter Jones - 11.5.0.24-2 +- Add EFI boot.iso generation. + +* Wed Mar 4 2009 Dave Lehman - 11.5.0.24-1 +- Storage test day. + +* Fri Feb 20 2009 David Cantrell - 11.5.0.23-1 +- Remove old content from utils/ (dcantrell) +- Ensure request.drive is always a list (#485622) (dcantrell) +- Pick up pyblock if it exists in block/ on an updates.img. (dcantrell) +- Don't check for a swapfs on things that aren't partitions (#485977). + (clumens) +- Perform ext3->ext4 filesystem migration if ext4migrate is given (#484330). + (clumens) +- Translate i?86 into i386 as a base arch. (jkeating) +- Teach upd-instroot about i586 arch, for sake of glibc.i586/openssl.i586 + (jkeating) +- Fix the obvious typo. (clumens) +- filer.login raises an exception with it can't login, not returns None + (#486454). (clumens) +- Take into account that a parted.Partition's _fileSystem can be None + (#485644). (clumens) + +* Thu Feb 19 2009 Chris Lumens - 11.5.0.22-1 +- Updated Romanian translation (alexxed) +- Remove the qla2xxx line from mk-images again (wwoods). +- Fix broken shell syntax from 3bdcd64d2 (jkeating) +- The VLGothic-fonts package has changed name and location (#486080). + (clumens) + +* Tue Feb 17 2009 David Cantrell - 11.5.0.21-1 +- Building for i586 only now in Fedora. (dcantrell) + +* Tue Feb 17 2009 David Cantrell - 11.5.0.20-1 +- Fix indentation on upd-instroot (kanarip) +- Fix the indentation in mk-images (kanarip) +- Remove unused iface_netmask2prefix() function. (dcantrell) +- A parted.Disk has no attribute named "dev". It's named "device" + (#486007). (clumens) +- Use brandpkgname for the efi art too (katzj) +- Let's use the product string for a brandpackage name. (kanarip) +- Fix indentation in mk-images.efi (kanarip) +- Fix indentation in buildinstall script (kanarip) +- It's part.active, not part.is_active(). (clumens) +- File the basic traceback as the first comment instead of a generic + message. (clumens) +- Encode our upgrade policy in productMatches/versionMatches and enforce it. + (clumens) +- If we'd show package selection on kickstart installs, also show tasksel. + (clumens) + +* Fri Feb 13 2009 Chris Lumens - 11.5.0.19-1 +- Fix build errors in the new net.c code. (clumens) + +* Fri Feb 13 2009 Chris Lumens - 11.5.0.18-1 +- Require pyparted >= 2.0.0 (dcantrell) +- Update to use the new pyparted. (dcantrell, clumens) +- Replace non UTF-8 char for hiding password chars with UTF-8 (#485218) + (hdegoede) +- Use a better test for when we're in text mode (#484881). (clumens) +- Add iBFT support to loader (msivak) +- Hardlink the initrd.img since we're linking the vmlinuz as well. (jkeating) +- Check if ld-linux.so.2 is a link already, before removing it (dcantrell) + +* Wed Feb 11 2009 Hans de Goede - 11.5.0.17-1 +- Revert broken German translation fixes so that we will build again +- Sync up module list (#484984) (katzj) + +* Wed Feb 11 2009 Hans de Goede - 11.5.0.16-1 +- Rewrite iscsi support using libiscsi (hdegoede) + +* Mon Feb 09 2009 David Cantrell - 11.5.0.15-1 +- Fix gptsync/lib.c for gcc strict aliasing rules. (dcantrell) +- Fix gcc warning for gptsync memset() usage. (dcantrell) + +* Mon Feb 09 2009 David Cantrell - 11.5.0.14-1 +- Rewrite mdio_read() in linkdetect.c for strict aliasing rules. (dcantrell) + +* Mon Feb 09 2009 Chris Lumens - 11.5.0.13-1 +- Check that required kickstart commands are present early on (#483048). + (clumens) +- Simplify the text mode interface. (clumens) +- Fix truncated translation string for livecd installs (#484430). (clumens) +- Calcutta -> Kolkata (#484638). (clumens) +- Fix runpychecker.sh to find zonetab module (hdegoede) +- Strip invalid characters from automatically made VG/LV names (#483571). + (clumens) +- Fix systemtime setting during installation (#6175, #461526). (rvykydal) +- Workaround MMC block devs showing up not as disks from hal (#481431) + (katzj) +- Add some new false positives to pychecker false positives filtering + (hdegoede) +- Make kickstart timezone value check consistent with system-config-date + (#483094) (rvykydal) +- Make ext4 default in UI filesystem selection (bug #481112) (rvykydal) +- Redirect iscsiadm's stderr away from the console. (clumens) +- Pay attention to the stderr parameter to execWithCapture. (clumens) +- For python2.6, our showwarnings function must take a line= parameter. + (clumens) +- If ext4dev is seen in the /etc/fstab, treat it as ext4 instead (#474484). + (clumens) +- Make sure to call _getConfig from our YumSorter subclass. (clumens) +- Set proper text mode font for Greeks (#470589) (msivak) +- Lots of translation updates. + +* Thu Jan 29 2009 David Cantrell - 11.5.0.12-1 +- If ks=nfs:... is given, don't try to find the file via boot options + (#480210). (clumens) +- Fix cdrom install on machines with no network devices (wwoods) +- updated fuzzy strings (jsingh) +- Use modinfo to find out what firmware we need in initrd (wwoods) +- Use the preconf object for yum configuration now (jantill). (clumens) +- Updated Dutch translation adn only 1 -fuzzy- string left (zuma) +- Add a boot target for the xdriver=vesa parameter and document it. (clumens) +- repo.proxy is now a property, so check before setting it (#481342). + (clumens) + +* Wed Jan 21 2009 David Cantrell - 11.5.0.11-1 +- Fix a logic problem with network file write outs. (480769) (jkeating) +- Only run selectBestKernel, selectBootloader, etc. for new installs. + (wwoods) + +* Mon Jan 19 2009 Chris Lumens - 11.5.0.10-1 +- btrfs install support (sandeen) +- Default / to be ext4 (katzj) +- Allow live installs to use ext4 as root and make the error message clearer + (katzj) +- Add support for Maithili and Nepali (#473209). (clumens) + +* Fri Jan 16 2009 Chris Lumens - 11.5.0.9-1 +- Cracklib moved locations, account for this in our keepfiles. (jkeating) +- Look in the right path for kernel module lists. (jkeating) +- Fix more problems in expandModuleSet, based on a patch from markmc + (#480307). (clumens) +- Allow ext4 without magic argument (keep a flag for migrate) (katzj) +- Fix pulling in network modules (katzj) +- Support mounting NTFS filesystems (#430084) (katzj) +- dejavu fonts changed package names, pick up new names. (jkeating) +- TightVNC is now the default VNC server in Fedora (#480308). (clumens) +- Only skip (over)writing netconfig if we have an actual instPath (jkeating) +- The sets module is deprecated, so no longer use it. (clumens) + +* Wed Jan 14 2009 David Cantrell - 11.5.0.8-1 +- Fix D-Bus usage in get_connection in loader (jkeating) + +* Wed Jan 14 2009 Chris Lumens - 11.5.0.7-1 +- How to get raw pages from the wiki has changed again. (clumens) +- Make sure the 'anaconda' file gets the right detected type (alsadi, + #479574). +- Include the missing import. (clumens) + +* Thu Jan 08 2009 David Cantrell - 11.5.0.6-1 +- Collect DSO deps for NetworkManager plugins. (dcantrell) + +* Thu Jan 08 2009 Chris Lumens - 11.5.0.5-1 +- NetworkManager system settings plugins were renamed, change mk-images. + (dcantrell) +- Add a message to install.log when package installation is done (#476953). + (clumens) +- Add support for specifying which partition to upgrade (atodorov, #471232). + (clumens) +- pykickstart has a new version of the upgrade command. (clumens) +- Log all calls to mount to /tmp/program.log as well. (clumens) +- Log everything from execWithRedirect or execWithCapture (#467690). + (clumens) +- Update partedUtils.py:findExistingRootPartitions to return UUID + (atodorov). (clumens) +- Don't skip the method screen when going back and forth (#477991). (clumens) +- Die on errors from upd-instroot/mk-images rather than continuing on (katzj) +- The FTP USER command does not need to be followed by a PASS (#477536). + (clumens) + +* Mon Jan 05 2009 David Cantrell - 11.5.0.4-1 +- Workaround compile error due to (# 478663) (hdegoede) +- Various packaging fixed from review (#225246) (hdegoede) +- Show the header in certain non-lowres cases (#478765, alsadi AT + ojuba.org). (clumens) +- Remove doMultiMount. (clumens) +- Use mount -t auto instead of passing a list of valid fstypes (#477328). + (clumens) +- Fix case sensitivity when searching for headers (kanarip) +- Fix a traceback in checking for network install (ricky AT + fedoraproject.org). (clumens) + +* Tue Dec 23 2008 David Cantrell - 11.5.0.3-1 +- Initialize domainname to None (#477831) (dcantrell) +- Do not import unused modules. (dcantrell) +- Call '/sbin/udevadm settle' instead of /sbin/udevsettle (dcantrell) + +* Tue Dec 23 2008 David Cantrell - 11.5.0.2-1 +- Require latest pykickstart for repo command (clumens) +- Remove libdhcp* from scripts/upd-instroot (dcantrell) +- methodstr -> self.methodstr (dcantrell) +- Rewrite iface_ip2str() to use libnm-glib (dcantrell) +- Fix a few syntax error caugh by pychecker (hdegoede) +- Remove isys.e2fslabel() and isys.getraidsb() (dcantrell) + +* Thu Dec 18 2008 David Cantrell - 11.5.0.1-1 +- Remove plural forms from po/tg.mo (katzj) + +* Thu Dec 18 2008 David Cantrell - 11.5.0.0-1 +- Reduce direct D-Bus calls in isys/iface.c. (dcantrell) +- Allow 'ks' to function as it once did (#471812) (dcantrell) +- Fix telnet install support (#471082) (dcantrell) +- Call 'udevadm settle' instead of 'udevsettle'. (dcantrell) +- When using anaconda with kickstart file with UI mode - do not show the VNC + question (#476548) (msivak) +- Check error from asprintf() correctly for dhcpclass handling. (dcantrell) +- Use libnm_glib in net.c:get_connection() (dcantrell) +- Add libnm_glib CFLAGS and LIBS to loader's Makefile. (dcantrell) +- BR NetworkManager-glib-devel. (dcantrell) +- Only write the short hostname to the localhost line (#474086) (dcantrell) +- Updated Tajik Translation - Victor Ibragimov (victor.ibragimov) +- Copy /etc/dhclient-DEV.conf file to target system (#476364) (dcantrell) +- Use macros for D-Bus paths (dcantrell) +- Let X tell us when it's launched rather than just sleeping. (ajax) +- When there's no baseurl, set a default of [] instead of [''] (#476208). + (clumens) +- cracklib now raises exceptions on bad passwords (rzhou, #476312). (clumens) +- Make sure ssh doesn't get duplicated in the open port list (#474937). + (clumens) +- mdraid1: default to putting grub on partition instead of mbr (#217176) + (hdegoede) +- Don't install the games group as part of office/productivity (#472324). + (clumens) +- Don't dump encryption passphrases. (dlehman) +- Write anacdump.txt upon receipt of SIGUSR2 (from clumens). (dlehman) +- Use stacks instead of tracebacks in traceback handlers. (dlehman) +- Unmount swap devices when migrating filesystems, then reactivate + (#473260). (clumens) +- Handle both /dev/sr0 and sr0, since that's what cdromList gives (#475083). + (clumens) +- In iface_ip2str(), make sure to advance to next item before continue. + (dcantrell) +- We already have _GNU_SOURCE defined in Makefile.inc (dcantrell) +- Remove XXX comment in net.c about GATEWAY (dcantrell) +- Use strverscmp() from glibc in place of rpmvercmp() (dcantrell) +- Remove readLine() function from loader/loadermisc.c (dcantrell) +- Do not write SEARCH line to ifcfg-DEVICE file (#474858) (dcantrell) +- Preserve existing network configuration files during install (#461550) + (dcantrell) +- Send unique vendor class identifier unless user specifies one. (dcantrell) +- Avoid tracebacks when filling in static network config fields (#474275) + (dcantrell) +- Prevent network install when no network devices are found (#470144) + (dcantrell) +- Remove markup from text before printing it in cmdline mode (#470253). + (clumens) +- Move strip_markup() into iutil. (clumens) +- Fix up plural forms header so that python doesn't blow up for us (katzj) +- Change text to reflect Jesse's comments (katzj) +- Add support for the Tajik language (#455963). (clumens) +- Add a button to the UI to ignore all missing packages. (clumens) +- First small eu.po transtation, just to be sure that the system is set up + OK. (mikel.paskual) +- mini-wm: Turn on automatic window redirection. (ajax) +- Better naming for LVM volume groups and logical volumes (#461682) + (dcantrell) +- Partition requests can be None when populating the tree. (#474284) + (dlehman) +- Say we are unable to configure the network interface (#467960) (dcantrell) +- Match textw/network_text.py strings to iw/network_gui.py (#470145) + (dcantrell) +- In addSnap(), check snapshots for data key before continuing (#433824) + (dcantrell) +- Load FCP modules early for CD/DVD install (#184648) (dcantrell) +- Update mk-s390-cdboot.c to work with large kernel images (#184648) + (dcantrell) +- Make sure fstype exists before we try to test it (#473498). (clumens) +- Updated a small correction in kn locale (svenkate) +- Use modules.* files for finding modules of a type rather than modinfo + (katzj) +- Make complete text mention updates (#244431) (katzj) +- Make text for autopartitioning types clearer (#441350) (katzj) +- Allow installing grub on the MBR if /boot is on mdraid (#217176) (hdegoede) +- Fix some spelling errors in German translation (fabian) +- Make the required media dialog less wordy (#469557). (clumens) +- returnNewestByName now raises an error instead of returning [] (#472462). + (clumens) +- Fix death on login of an OLPC on a live image (katzj) +- Fix ld-*.so globbing for glibc-2.9 . (pjones) +- Do not bring up network for non-remote kickstart locations (#471658) + (dcantrell) +- Resolve dm-X devices returned by pvdisplay. (#448129) (dlehman) +- More shell script syntax fixing (katzj) +- Only bring up the network dialog on package failures if required + (#471502). (clumens) + +* Wed Nov 12 2008 Chris Lumens - 11.4.1.58-1 +- Add comps groups for new repos that are added (#470653) (katzj) +- Support upgrades of systems whose rootfs is on an LV. (#471288) (dlehman) +- Use hasPassphrase() instead of directly accessing passphrase member. + (dlehman) +- Don't dump private class members (those with leading "__") (dlehman) +- Explicitly close the CD drive after the user hits "continue" (#375011) + (pjones) +- Fix shell syntax error (#471090) (ivazqueznet) +- Save the /etc/fstab before overwriting it on upgrades (#452768, #470392). + (clumens) + +* Tue Nov 11 2008 David Cantrell - 11.4.1.57-1 +- Fix more UnicodeDecodeErrors, hopefully for good this time (#470733). + (clumens) +- iscsi do missing value check only once (hdegoede) +- Don't try to label XFS filesystems on livecd installs (#470951). (clumens) +- Include cracklib .mo files and look up strings in the right domain. + (clumens) +- Bugzilla has changed its return values for a couple queries. (clumens) +- Set the default keyboard based on the language (#470446). (clumens) +- Prevent traceback for vnc installs on KVM guests (#470559) (dcantrell) +- Bring up networking early enough for syslog= param (#470513) (dcantrell) +- Sleep a bit before calling udevsettle in iscsiTarget.login (#470073, + #466661) (hdegoede) +- kickstart, iscsi do not call iscsi.startup after startIBFT has been called + (hdegoede) +- Do not stop and restart iscsid when rescanning disks/partitions (#470223) + (hdegoede) +- iscsi.startup should not login to targets as we are already logged in + (#470230) (hdegoede) +- Remove obsolete normally never reached code from _stopIscsiDaemon + (#470229) (hdegoede) +- The function getEncryptedDevice gets called correctly expect when we are + in (jgranado) +- More translations + +* Thu Nov 06 2008 David Cantrell - 11.4.1.56-1 +- Don't have the key icon take up so much space on the LUKS dialog + (#470338). (clumens) +- Avoid getting linux-base in the kernel list (katzj) +- Deselect groups when we reset things also (#469854) (katzj) +- make iscsi login code wait for udev to create the devices (#466661, + #470073) (hdegoede) +- Set the correct path when using the directory chooser. (clumens) +- We always need a wait window, not just when the repo has a name. (clumens) +- Set initial state of IP configuration fields in text mode (#469933) + (dcantrell) +- Prevent traceback when there are no network devices (#469339) (dcantrell) +- Indentation fix. (pjones) +- Let users edit net settings on network failure in stage 1 (#465887) + (dcantrell) +- Move startNewt later to avoid printing extra messages on the screen + (#469687). (clumens) + +* Mon Nov 03 2008 David Cantrell - 11.4.1.55-1 +- Revert "Make sure dialog deletions take effect sooner (#455676)." (clumens) +- Don't set up the launcher for the installer on XO (katzj) +- Whitespace cleanups for timezone.py (dcantrell) +- Do not store mount options in loaderData->instRepo (#467760) (dcantrell) +- Make sure we look up the IP address for the correct device (#469439) + (dcantrell) +- Remove unused bool() function. (dcantrell) +- Check for required space for / on live installs (#468867) (katzj) +- Add a basic method for checking the minimal size needed for a backend + (katzj) +- Fix typo that somehow snuck in (katzj) +- If there's no language selected, don't traceback (#469578). (clumens) +- Improve filtering of non-available groups (#469438) (katzj) +- filer.py: set defaultProduct in __init__ (hdegoede) +- Fix indentation error in filer.py (again) (hdegoede) +- Rebuild keymaps to get rid of trq.map (#469433). (clumens) +- Provide sample punch card reader script for s390x (#462953) (dcantrell) +- Fix a typo that shouldn't have even gotten though. (clumens) +- Check that the platform and product are also correct (#469367). (clumens) +- Remove cio_ignore functionality for s390x (dcantrell) +- Remove bootdisk/s390 (dcantrell) +- If method=nfs: is given, check if it's really an NFSISO install (#468885). + (clumens) +- Get the right list elements for the iscsi text interface (#466902). + (clumens) +- Don't traceback when displaying error messages (#469372). (clumens) +- Make sure we differentiate locked luks devs from deleted ones. (dlehman) +- Fix a typo that breaks kickstart with encryption. (#469318) (dlehman) + +* Thu Oct 30 2008 David Cantrell - 11.4.1.54-1 +- Call startNewt earlier than network bring up (#469171). (clumens) +- Write out the path to the repo, not anaconda-ks.cfg (#467753). (clumens) +- Allow specifying devices by path if they're files (#468504) (katzj) +- Fix the last pychecker warnings in master (hdegoede) +- Add --strict option to runpychecker.sh (hdegoede) + +* Wed Oct 29 2008 David Cantrell - 11.4.1.53-1 +- Don't sleep(5) after xrandr (ajax) +- Force DPI to 96 even harder (#458738) (ajax) +- Don't try to switch VT to the one that X is on (ajax) +- Only copy /etc/resolv.conf if instPath != '/' (dcantrell) +- 'is not' -> '!=' (dcantrell) +- Write --dhcpclass instead of --class to the anaconda ks file. (jgranado) +- Fix 2 issues in pyparted found by pychecker (hdegoede) +- Add a bit of documentation to the top of runpychecker.sh (hdegoede) +- Add runpychecker.sh script and pychecker-false-positives file (hdegoede) +- Fix saving tracebacks via scp while in text mode. (clumens) +- Search for the hash in the whiteboard, not as the entire whiteboard. + (clumens) +- Fix various syntax errors caught by PyChecker (hdegoede) +- Wouldn't it be nice to have some real documentation in filer.py? (clumens) +- Make sure the productVersion given by .treeinfo exists in bugzilla + (#468657). (clumens) + +* Mon Oct 27 2008 David Cantrell - 11.4.1.52-1 +- Let DNS lookups work from %%post scripts (#468132) (dcantrell) +- Do not use /.tmp for temporary files (#468720) (dcantrell) +- Don't treat encrypted PVs as available if we don't have the key. (#465240) + (dlehman) +- Do all new device passphrase prompting from partitioningComplete. (dlehman) +- Fix the obviously stupid typo. (clumens) +- There's a new version of the firewall command for F10 (#467753). (clumens) +- Another fix for printing package summaries in text mode (#468283). + (clumens) +- Fix traceback in network.bringUp() (#468651) (dcantrell) +- lvresize requires a --force arg now (#468478) (katzj) +- Include return code on resize failure error message (#468479) (katzj) + +* Fri Oct 24 2008 David Cantrell - 11.4.1.51-1 +- Catch UnicodeDecodeError so traceback messages display anyway. (dcantrell) +- Do not write NM_CONTROLLED=yes to ifcfg files (#468028) (dcantrell) +- Log D-Bus messages at ERROR or INFO level. (dcantrell) +- Write dhcpclass to the dhclient conf file for the device (#468436) + (dcantrell) +- Tell NetworkManager not to touch network interfaces when / is a netfs + (hans) +- Catch more X failures and fallback to text (#467158). (clumens) +- Fix a typo when using network --gateway (#468364). (clumens) +- Fix icon (#468273) (katzj) +- Remove extra debug info. (pjones) +- Fix the damn spinner in the progress bar. (pjones) +- Fix whitespace. (pjones) +- Fix "looking for installation images" when there's no disc at all. (pjones) +- Make sure dialog deletions take effect sooner (#455676). (clumens) +- Make cdrom drive door status messages be INFO not DEBUG. (pjones) +- Don't switch to tty6 on vnc installs. (clumens) +- Update font list (#462295). (clumens) +- Don't display the entire lengthy device description (#467825). (clumens) +- Fix ext4 detection on existing partitions (#467047) (rvykydal) +- Make sure we handle the /tmp/method file for FTP correctly (#467753). + (clumens) +- Do not write NM_CONTROLLED=yes to ifcfg files (#468028) (dcantrell) +- Revert "dhclient-script not needed for NetworkManager" (clumens) +- Skip Installation Repo when writing out repo kickstart lines. (clumens) +- Correct media check docs (#468061). (clumens) +- Many translation updates + +* Fri Oct 17 2008 Chris Lumens - 11.4.1.50-1 +- Update several font package names that we were missing. (clumens) +- Only bring up the netconfig dialog if the repo requires networking. + (clumens) +- cmdline.py: Fix a small typo in a message (rh 467338) (hansg) +- Enable CCW devices used for installation (#253075) (dcantrell) +- I don't know what trq.map.trq-map is, but let's not include it. (clumens) +- If networking is needed for yum repos, bring it up before fetching + repodata. (clumens) +- Force DPI to 96 when launching X. (#458738) (ajax) +- Lots of translation updates. + +* Tue Oct 14 2008 David Cantrell - 11.4.1.49-1 +- Make kickstart installs work again (#374271, #392021, #448096, #466340, + #466304) (dcantrell) +- Let users go Back when loading updates. (dcantrell) +- Write ifcfg files to /etc/sysconfig/network-scripts instead of /.tmp + (dcantrell) +- Handle unknown hosts in getDefaultHostname (#466775) (dcantrell) +- Try to look up the hostname by the IP address NM reports (#466775) + (dcantrell) +- NM no longer provides the hostname as a property (#466775). (clumens) +- ext4dev -> ext4 (esandeen). (clumens) +- Move persistent network udev rule to under /etc (#464844). (clumens) +- Update keymaps to include latest Romanian settings (#466117). (clumens) +- Take ip= parameter values by not resetting ipinfo_set. (dcantrell) + +* Fri Oct 10 2008 David Cantrell - 11.4.1.48-1 +- Remove unnecessary STEP_IP code. (dcantrell) +- Fix how configureTCPIP() returns. (dcantrell) +- Write new sysconfig data to a tmpdir first, then move in place. (dcantrell) +- Write NM_CONTROLLED=yes rather than NM_CONTROLLED= (dcantrell) +- Get rid of some iface flags that were not doing anything anymore. + (dcantrell) +- Generate new config files in /.tmp in writeEnabledNetInfo() (dcantrell) +- Remove unused variables from configureTCPIP() (dcantrell) +- Do not call get_connection() twice for DHCP. (dcantrell) +- Ask for language and keyboard in rescue mode (#466525). (clumens) +- Fix bringing up the network in rescue mode (#466523). (clumens) +- If we don't have a translation for a lang name, just use the English + (#466515) (katzj) +- Disable some more IPv6 checks. (clumens) +- Fix a typo (second part of #466374) (katzj) + +* Thu Oct 09 2008 David Cantrell - 11.4.1.47-1 +- Tag problems in pkgcvs. Wish we still had force-tag + +* Thu Oct 09 2008 David Cantrell - 11.4.1.46-1 +- Pull in static network settings from the boot: line (#465270) (dcantrell) +- Do not segfault when going back to select a new interface (#465887) + (dcantrell) +- Do not test for DNS settings in mountNfsImage() (dcantrell) +- Populate struct iface correctly in setupIfaceStruct() (dcantrell) + +* Thu Oct 09 2008 Chris Lumens - 11.4.1.45-1 +- Fix sorting of repos so we always return an integer value (#466174). + (clumens) +- Change the upgrade progress bar to pulse (#466053). (clumens) +- Mark iscsi disks not used for / as autostart (rh461840) (hans) +- Always display the wait window when fetching repo information. (clumens) +- Lazily unmount everything before killing NetworkManager (#463959). + (clumens) +- lang-names really does need to depend on subdirs (katzj) +- Reset targetLang on language change (#465981) (katzj) +- Honor static net parameters with NM (#465270) (dcantrell) + +* Mon Oct 06 2008 David Cantrell - 11.4.1.44-1 +- Do not rely on loaderData->noDns to tell if we have DNS configured. + (dcantrell) +- Skip askmethod dialog if user passes repo= and stage2= (dcantrell) +- Reset resolver in get_connection() (dcantrell) +- Fix problems dealing with PXE boot and the ksdevice= parameter. (dcantrell) +- Disable more IPv6 code in loader for now. (dcantrell) +- Write BOOTPROTO=static for manual IPv4 config. (dcantrell) +- Disable IPv6 widgets for F-10. (dcantrell) +- Add iwlagn driver firmware (#465508). (clumens) +- Move starting HAL to after we've probed for hardware. (clumens) +- Don't try to load a couple modules that no longer exist. (clumens) +- The Chinese font package has changed names (#465290). (clumens) +- Fix a traceback when there's no ksdevice given (#465638). (clumens) +- Fix traceback in post install configuration (hans) + +* Fri Oct 03 2008 David Cantrell - 11.4.1.43-1 +- Disable IPv6 interface widgets in loader for now. (dcantrell) +- Start NetworkManager earlier (#462083) (hans) +- Work around gtk2 bug (#465541) (hans) +- Move our yum.conf out of /etc (#465160) (katzj) +- Correctly display the IP address a vnc viewer should connect to (#465353). + (clumens) +- lohit-fonts-malayam has been replaced by smc-fonts-meera (#456449). + (clumens) +- Fix a typo in cleaning up repos. (clumens) +- Fix the mount error reading for real this time (pjones, #465250). (clumens) +- Support ksdevice=link when booting from boot.iso. (dcantrell) +- Automatically select NIC based on ksdevice= boot parameter. (dcantrell) + +* Wed Oct 01 2008 David Cantrell - 11.4.1.42-1 +- Revert "Finally controlled the plural issue at #508 in Japanese" + (dcantrell) + +* Wed Oct 01 2008 David Cantrell - 11.4.1.41-1 +- Fix text inconsistency (#465165). (clumens) +- If there's an error running Xvnc, also print it to the console. (clumens) +- Set the installation repo when using the askmethod UI (#463472). (clumens) +- Fix a segfault when the wrong HDISO repo parameter is given. (clumens) +- Remove the 'Installation Repo' cache directory after install (#464853). + (clumens) +- If there aren't any usable NICs, don't write out a config (#465127). + (clumens) +- It helps to specify what the method string should be split on (#464855). + (clumens) +- Gateway and nameserver are optional for static network configuration. + (dcantrell) +- Store nameserver in NetworkDevice object. (dcantrell) +- Fix a traceback calling enableNetwork (#464849). (clumens) +- Enable groups when creating new repos since yum doesn't do that now. + (clumens) +- Update FQDN patch to fix a couple tracebacks (#464191). (clumens) +- Fix static network configuration from boot.iso installs. (dcantrell) +- Use all caps naming for the netdev keys. (dcantrell) +- Left justify text in ui/netconfig.glade interface. (dcantrell) +- Use the right attribute for repo URLs. (clumens) +- Use fullscreen for small screens (#444943) (katzj) +- Another try at fixing up reading errors from mount. (clumens) +- Don't traceback if no baseurl has been set yet. (clumens) +- Allow users to enter a hostname or FQDN during installation (#464191) + (dcantrell) +- Whitespace cleanups. (dcantrell) +- Fix mk-s390-cdboot on s390x (#184648) (dcantrell) +- Run all text through unicode() before putting it into the TextBuffer. + (clumens) +- Add reverse chap iscsi bits for kickstart (hans) +- Properly center the passphrase entry dialog. (clumens) +- Fix test for an empty hostname. (clumens) +- Support installs to SD via MMC (#461884) (katzj) +- Set ANACONDA_PRODUCTNAME, etc from /etc/system-release (#464120) (alsadi) +- Reduce code duplication by moving methods into backend (katzj) +- Select packages after repos are set up (#457583) (katzj) +- Add a basic reset method (katzj) +- Cleanups and simplifications to repo setup (clumens) (katzj) +- Revert "Revert "lang-names should really only depend on lang-table"" + (katzj) +- Fix lang-name generation + fix traceback with LANG=C (katzj) +- Allow going back to the method selection screen on error (#463473). + (clumens) +- Make the boot loader device dialog less ugly (#463489). (clumens) +- Look in images/ for install.img on HDISO (#463474). (clumens) +- Sort Installation Repo to the top of the repo list. (clumens) +- Fuzzy string to fix translation build (katzj) + +* Wed Sep 24 2008 David Cantrell - 11.4.1.40-1 +- Fix network interface bring up in text mode (#463861, #462592) (dcantrell) +- Bring back isys.resetResolv() and fix NetworkManager polling in + network.py. (dcantrell) +- Poll 'State' property from NetworkManager in network.bringUp() (dcantrell) +- Log error in rescue mode is network.bringUp() fails. (dcantrell) +- Set the first network device in the list to active. (dcantrell) +- Get rid of firstnetdevice in Network (dcantrell) +- Do not write /lib/udev.d rules if instPath is '' (dcantrell) +- Fix problems with bringDeviceUp() calls (#463512) (dcantrell) + +* Mon Sep 22 2008 David Cantrell - 11.4.1.39-1 +- Fix a traceback when getting the interface settings (#462592). (clumens) +- self.anaconda -> anaconda (clumens) + +* Sat Sep 20 2008 David Cantrell - 11.4.1.38-1 +- Restore old lang-names generation method (dcantrell) +- Remount /mnt/sysimage/dev after migrating filesystems. (clumens) +- Use the instroot parameter like we should be doing. (clumens) + +* Fri Sep 19 2008 Chris Lumens - 11.4.1.37-1 +- Set the filename on the traceback when we upload it (wwoods). +- Don't worry about errors looking up protected partitions on upgrades. + (clumens) +- Fix test for allowing the installation source to be on the root fs + (#462769). (clumens) +- lang-names should really only depend on lang-table (katzj) +- Don't make the .desktop file unless we actually need to (katzj) +- Fix lang-name generation (katzj) +- Look for xrandr in the search path. (clumens) +- Make the textw network screen match the iw interface by only prompting for + hostname (#462592) (dcantrell) +- Pick up hostname if we have it, otherwise use localhost.localdomain + (#461933) (dcantrell) +- dhclient-script not needed for NetworkManager (dcantrell) +- Add getDefaultHostname() to network.py (dcantrel) +- Write out NETMASK and BROADCAST correctly in loader. (dcantrel) +- Fix problems with manual network configuration in loader. (dcantrel) +- anaconda-yum-plugins is now in its own source repo. (clumens) +- Remove most of the network configuration from text mode as well (#462691). + (clumens) +- Add an extra newline to the empty partition table message. (clumens) +- Fixup DiskSet._askForLabelPermission() (markmc) + +* Mon Sep 15 2008 David Cantrell - 11.4.1.36-1 +- Remove invalid i18n stuff to let anaconda build. (dcantrell) +- Remove doConfigNetDevice() prototype. (dcantrell) + +* Mon Sep 15 2008 David Cantrell - 11.4.1.35-1 +- Call network.bringDeviceUp() instead of old isys functions. (dcantrell) +- Pass device name to network.setDNS() and network.setGateway(). (dcantrell) +- NetworkManager fixes in network.py (dcantrell) +- Remove code from isys not needed for NetworkManager. (dcantrell) +- Avoid writing out NM_CONTROLLED more than once. (dcantrell) +- Write out final ifcfg-DEVICE files correctly. (dcantrell) +- Use POSIX and LSB hostname length limit. (dcantrell) +- Consistent whitespace usage in network.py (dcantrell) +- Do not try to start hald or dbus-daemon from anaconda. (dcantrell) +- On HDISO installs, mark LABEL= and UUID= partitions as protected. (clumens) +- Do encrypted device passphrase retrofits while activating partitioning. + (dlehman) +- Use one passphrase for all new LUKS devices and offer retrofit to old + ones. (dlehman) +- There's only one passphrase member (encryptionPassphrase) in Partitions. + (dlehman) +- Only add LUKSDevice instances to PV requests as needed. (dlehman) +- New device passphrase is now always global w/ option to retrofit. (dlehman) +- Don't prompt for a passphrase when creating encrypted devices. (dlehman) +- Define a method to add a passphrase to an existing LUKS device. (dlehman) +- Fix a traceback when starting a shell in rescue mode (#462148). (clumens) +- md, lock_nolock, and dm_emc kernel modules no longer exist. (clumens) +- Fix iscsi disk detection with newer kernels (rh 461839, 461841) (hans) +- Fix the crash reported in bug 454135 (hans) +- Make iBFT reading explicit from a higher level (hans) +- Add ibft flag to ease in testing. (hans) +- Support iSCSI CHAP and Reverse CHAP authentication (rhbz#402431, + rhbz#432819) (hans) +- Don't set iscsi devices to autostart (rhbz#437891) (hans) +- Add full CHAP support to iSCSI. (rhbz#432819) (hans) +- Do not try to initialize iSCSI, when no portal (#435173) (hans) +- Fix wrong function names for iscsi login/start (rhbz#295154) (hans) +- Set an attribute when iscsid is started (#431904). (hans) +- Better fixes for iscsi probing (patch from jlaska) (hans) +- Make sure ISCSIADM and such are defined (rhbz#431924) (hans) +- Fix iscsi so that mkinitrd can actually talk to the running daemon (hans) +- Make iscsi/ibft work (hans) +- Add mk-images changes forgotten in previous commit (hans) +- Add support for iSCSI iBFT table (#307761) (hans) + +* Thu Sep 11 2008 Chris Lumens - 11.4.1.34-1 +- Always start NM so we can talk to it in the boot.iso case (#461071). + (clumens) +- Use the device path to identify LUKS devs in /etc/fstab. (#460700) + (dlehman) +- Use the LUKS UUID instead of device nodes in all references. (#460700) + (dlehman) +- LUKSDevice.getScheme() no longer cares if the dev has a passphrase. + (#461203) (dlehman) +- Correct translation to fix the build. (clumens) +- Add the method string back into anaconda-ks.cfg. (clumens) +- Let's try pulling libsqlite into the initrd one more time. (clumens) +- Don't traceback at the end of live installs (katzj) +- Correct the message telling you to use a VNC password. (clumens) +- Remove unused TIMEZONES= crud. (clumens) +- print doesn't yet support the file= syntax in our version of python. + (clumens) +- Catch errors from using the wrong bugzilla field and display them. + (clumens) +- Fix line wrapping on part type screen (jlaska, #461759). +- rep_platform has been renamed to platform. (clumens) + +* Tue Sep 09 2008 Chris Lumens - 11.4.1.33-1 +- Include NetworkManager and dbus libraries on 64-bit arches (#461632). + (clumens) +- We need libsqlite3.so in upd-instroot before it can be in the initrd. + (clumens) +- Fix partitions growing (backport of rhbz #442628) (rvykydal) +- Kickstart timezone validity check fixed (#461526) (rvykydal) +- Add more kernel crypto modules (#443545). (clumens) +- Make the progress bar move when downloading the install.img (#461182). + (clumens) +- Add overrideDHCPhostname as an attribute. (clumens) +- Fix saving to remote hosts (#461500). (clumens) +- short_desc is now summary. (clumens) +- Use print() as a function. (pjones) + +* Sat Sep 06 2008 David Cantrell - 11.4.1.32-1 +- Use struct audit_reply instead of struct auditd_reply_list (dcantrell) + +* Sat Sep 06 2008 David Cantrell - 11.4.1.31-1 +- Use --service=NAME in firewall.py when calling lokkit (dcantrell) +- Make NM work for the DHCP case, at least (dcbw) (#461071). (clumens) +- Sleep a little after dbus to give it time before HAL connects. (clumens) +- Add libsqlite to the initrd, which is needed by NSS libs. (clumens) +- Add more dlopen()ed libraries to the initrd. (clumens) +- Fix various problems with the exn saving UI (#461129). (clumens) +- Fail gracefully if we can't talk to NetworkManager over DBus. (dcantrell) +- Reword text for easy of translating plurals (#460728). (clumens) +- Make sure /bin/sh is linked to /bin/bash (dcantrell) +- Do not include /usr/lib/gconv in install.img (dcantrell) +- Add /etc/NetworkManager/dispatcher.d to the install.img. (clumens) +- Remove last vestiges of rhpxl and pirut. (clumens) +- Only one list of packages in upd-instroot, thanks. (clumens) +- Add xrandr back into the install.img (#458738). (clumens) +- Add a couple more directories to search paths. (clumens) +- Do repo setup and sack setup as separate steps. (clumens) +- Fix a typo that was causing repos in the kickstart file to be skipped + (#451020). (clumens) + +* Fri Aug 29 2008 David Cantrell - 11.4.1.30-1 +- Fix a traceback with unencrypted autopart. (dlehman) +- doLoggingSetup has grown some new arguments (#460654). (clumens) +- Updated German translation (fabian) +- Remove references to isConfigured in network.py (dcantrell) +- Define the NM_STATE_* constants in isys.py (dcantrell) +- Rewrite NetworkWindow to only prompt for hostname. (dcantrell) +- Pad the icon more in network.glade (dcantrell) +- Removed iface_dns_lookup() (dcantrell) +- Don't pass NULL to dbus_message_unref() (dcantrell) +- New network configuration screen for GTK+ UI. (dcantrell) +- Pass family to iface_ip2str() call (dcantrell) +- Rewrite iface_ip2str() to talk to NetworkManager over D-Bus (dcantrell) +- New translation (besnik) +- Pull in the gtkrc file so we can find the theme. (clumens) +- Use signed git tags (katzj) +- Skip networkDeviceCheck in dispatch.py (dcantrell) +- Do not call has_key() on NetworkDevice, use isys.NM_* (dcantrell) +- Separate lines per BR. (dcantrell) +- Remove invalid line iw/autopart_type.py (dcantrell) +- Fix syntax error in yuminstall.py, fix pychecker warnings. (dcantrell) +- Updated Hungarian translation (sulyokpeti) +- Add missing () to function definitions. (dcantrell) +- Fix err handling in doMultiMount() (dcantrell) +- Revert "Pass --follow to git-log" (dcantrell) +- Remove references to /tmp/netinfo (dcantrell) +- Gather network settings from NetworkManager and ifcfg files. (dcantrell) +- Update the pot file and refresh the pos (katzj) +- For all HTTP/FTP repos, keep the cached repodata (#173441). (clumens) +- Fix a traceback when trying to set the status whiteboard on a bug. + (clumens) +- When the wrong filesystem type is used, raise a more explicit error. + (clumens) +- Don't copy the install.img over in single media cases (#216167). (clumens) +- Remove isys.getopt() (dcantrell) +- Remove code not used in net.c (dcantrell) +- Write to /etc/sysconfig/network-scripts/ifcfg-INTERFACE (dcantrell) +- mystrstr() -> strstr() (dcantrell) +- Expand getDeviceProperties to return all devices. (dcantrell) +- Pass --follow to git-log (dcantrell) +- Support accessing preexisting LUKS devs using LRW or XTS ciphers. + (#455063) (dlehman) +- Use yum's handling of optional/default/mandatory package selection + (#448172). (clumens) +- List iSCSI multipath devices in the installer UI. (dcantrell) +- Fix text wrap width on the partition type combo, for real this time + (#221791) (dlehman) +- For /dev/hvc0 terminals, set TERM to vt320 (#219556). (dcantrell) +- The Timer class is no longer used. (clumens) +- Handle preexisting swraid w/ encrypted member disks/partitions. (dlehman) +- Don't try to close a dm-crypt mapping that is not open. (dlehman) +- Remove unused silo code that wouldn't even build if it were used. (clumens) +- Remove some really old, really unused code. (clumens) +- Add another mount function that takes a list of fstypes to try. (clumens) +- Download progress indicator for FTP and HTTP in stage 1. (dcantrell) +- Make sure we wait for NetworkManager. (dcantrell) +- Renamed loader2 subdirectory to loader (hooray for git) (dcantrell) +- Do not include wireless.h or call is_wireless_device() (dcantrell) +- Add getDeviceProperties() and rewrite getMacAddress() (dcantrell) +- Do not include wireless.h (dcantrell) +- Rewrite isys.isWireless() to use D-Bus and NetworkManager (dcantrell) +- Rewrite isys.getIPAddress() to use D-Bus and NetworkManager. (dcantrell) +- Include ../isys/ethtool.h instead of ../isys/net.h. (dcantrell) +- Rename isys/net.h to isys/ethtool.h, removed unnecessary typedefs. + (dcantrell) +- Removed waitForLink() function in loader. (dcantrell) +- Remove initLoopback() function in loader (dcantrell) +- Use D-Bus properties to get current NM state. (dcantrell) +- Use dbus in hasActiveNetDev() and _anyUsing() (dcantrell) +- Use NetworkManager instead of libdhcp. (#458183) (dcantrell) +- When mount fails, pass the error message up to the UI layer. (clumens) +- Bring askmethod back to prompt for the location of install.img. (clumens) + +* Fri Aug 22 2008 Chris Lumens - 11.4.1.29-1 +- Enable yum plugins. (clumens) +- In the preupgrade case, repo=hd: means an exploded tree on the hard drive. + (clumens) +- Remove preupgrade-specific hacks. (clumens) +- Add conf files for our yum plugins so they can be enabled. (clumens) +- Create a subpackage containing the yum plugins. (clumens) +- Add the new blacklist and whiteout yum plugins. (clumens) +- Allow retrying if the ISO images aren't found (for the USB case). (clumens) +- Include "--encrypted" in anaconda-ks.cfg partitioning as needed. (#459430) + (dlehman) +- Support establishing a global passphrase when creating encrypted devices. + (dlehman) +- Display the lock icon for encrypted RAID members. (#459123) (dlehman) +- More descriptive drive message when warning on format. (dcantrell) +- Need to import rhpl for things like switching to pdb. (clumens) +- Fix traceback in passphrase handling code for encrypted RAID requests. + (#459121) (dlehman) +- Copy the install.img to /tmp on HD installs. (clumens) +- Fix a typo (dcantrell). +- Expert mode was disabled in 2004. Remove it now. (clumens) +- Remove an extra "Local disk" option (#459128). (clumens) +- Clear up error reporting on upgrades when devices are listed by UUID. + (clumens) +- If the UI was used to specify a repo, construct a repo param (#458899). + (clumens) +- Fix a traceback calling createMapping. (clumens) +- First crack at upgrade of systems with encrypted block devices. (#437604) + (dlehman) +- In kickstart, prompt for new LUKS dev passphrase if not specified. + (#446930) (dlehman) +- Remove passphrase check hack from LUKSDevice.getScheme. (dlehman) +- Allow specification of a device string for display in passphrase dialog. + (dlehman) +- Add encrypted device passphrase dialog for text mode. (dlehman) +- Fix PartitionDevice.getDevice to take asBoot into account. (dlehman) +- Make passphrase dialogs appear in the center of the screen. (#458114) + (dlehman) +- Consider clearpart and ignoredisk when scanning for encrypted partitions. + (dlehman) +- Correctly handle typos in the stage2 location when inferred from repo=. + (clumens) +- Fix the loader UI when prompting for stage2.img on HDISO. (clumens) +- Rename stage2.img to install.img (dcantrell) +- Bring up the network before saving a bug via scp. (clumens) +- Make it more explicit we want the stage2.img URL, not the repo URL. + (clumens) +- Add the match type so we don't find all bugs. (clumens) +- Make upd-updates create the updates.img you specify if it doesn't already + exist. (pjones) +- Don't base mpath/dmraid/raid startup/stopping based on if lvm is activated + yet, (pjones) +- Add diskset.devicesOpen boolean, so we can tell if devices should be + started (pjones) +- Add dirCleanup back in so we don't leave install metadata behind. (clumens) +- Move betanag to after keyboard and language are setup. (clumens) +- Add module dependencies of qeth.ko (#431922). (clumens) +- Copy the changes from RHEL5 for the linuxrc.s390 over. (clumens) +- Disable SCSI devices so we can safely remove a LUN (bhinson, #249341). + (dcantrell) + +* Tue Aug 12 2008 Chris Lumens - 11.4.1.28-1 +- More fixes to include udev rules in the initrd (#458570). (clumens) +- Catch the first non-generic-logo package that provides system-logos. + (clumens) +- Remove extra ')' in install-buildrequires (dcantrell) + +* Mon Aug 11 2008 Chris Lumens - 11.4.1.27-1 +- Handle 'rescue' and %%post in rescue mode (atodorov) +- Delay the duplicate label error until the label is actually used + (#458505). (clumens) +- Enable wireless modules again for now as a test (#443545). (clumens) +- udev rules have changed location (#458570). (clumens) +- Add install-buildrequires target. (dcantrell) + +* Fri Aug 08 2008 Chris Lumens - 11.4.1.26-1 +- Remove a bunch of cachedir setting code that is no longer needed. (clumens) +- Fix segfaults on interactive NFS installs (#458416). (clumens) +- Fix LVM error handling so the exceptions actually get into the namespace. + (pjones) +- yuminstall: don't look for kernel-xen anymore (markmc) +- console: kill the /proc/xen hack (markmc) +- yuminstall: don't ever stop people installing the virt group (markmc) +- lang: kill xen keymap hack (markmc) +- bootloader: remove old kernel-xen-{guest, hypervisor} handling (markmc) +- Preserve baseurl/mirrorlist and mirrorlist checkbox settings across loads. + (clumens) +- It's BETANAG, not betanag. (clumens) +- Various string fixes (clumens). +- Wrap spec file changelog lines. (dcantrell) +- mk-images: replace kernel-xen with pv_ops kernel (markmc) +- Use a temporary location for yum cache data (#457632). (clumens) +- Remove extra newtPopWindow() call that was causing a crash (#260621). + (dcantrell) +- Add /sbin/sfdisk (#224297). (dcantrell) +- Do not call _isys.vtActivate() on s390 or s390x platforms (#217563). + (dcantrell) +- Change the maximum recommended swap size to "2000 + (current + ram)".(#447372) (jgranado) +- Make it >= not > for the memory size comparison (#207573) (pjones) +- Allow float comparison between nic names in isys.py. (#246135) (joel) +- Fix formatting on disk sizes >1TB (pjones) +- Don't traceback when trying to remove /mnt/sysimage (#227650). (dcantrell) +- If we're booting off the boot.iso, don't prompt for lang or kbd (#457595). + (clumens) +- Don't mention images/diskboot.img anymore (#441092). (clumens) +- Remove iSeries image generation (#456878) (dcantrell) +- Display capslock status correctly (#442258) (dcantrell) + +* Mon Aug 04 2008 Chris Lumens - 11.4.1.25-1 +- Eject the CD/DVD if we booted off a boot.iso as well (#442088). (clumens) +- Fix a GTK warning that only appears with s-c-ks running from a + shell (#431844). (clumens) +- Break a few functions out of yuminstall.py into their own file. (clumens) +- We're not actually activating new filesystems quite yet. (clumens) +- Fix a typo in the initial partitioning screen. (clumens) +- Use system-logos instead of hardcoding fedora-logos (#457378). (clumens) +- anaconda can no longer be None when we create a DiskSet instance. (clumens) +- Remove LabelFactory since we now rely on UUIDs for everything. (clumens) +- Filter out repos that aren't enabled when running in betanag mode. (clumens) +- Close the transaction between CDs (#457126). (clumens) +- Split media fixes. (clumens) +- Handling (ask user) of invalid timezone value in kickstart added + (#404323) (rvykydal) + +* Thu Jul 31 2008 Jeremy Katz - 11.4.1.24-1 +- Don't try to use self.tree as the mode to open .discinfo. (clumens) +- Remove all the RPM lock files before creating a new + transaction (#456949). (clumens) +- Support VDSK devices on s390x (#264061) (dcantrell) + +* Wed Jul 30 2008 Chris Lumens - 11.4.1.23-1 +- Fix mke2fs argument passing (#457285). (clumens) +- Disable logging in the firmware loader, since it clobbers other + log messages. (pjones) + +* Wed Jul 30 2008 Chris Lumens - 11.4.1.22-1 +- udevsettle takes forever, so display a waitWindow. (clumens) +- Leave anaconda-runtime around for mk-images run. (dcantrell) + +* Tue Jul 29 2008 Jeremy Katz - 11.4.1.21-1 +- Remove an instance of NEEDGR still existing to fix graphical + isolinux (#457144) (katzj) +- use newer mke2fs arguments for different filesystems (sandeen) +- Use attributes to tell us whether filesystems are + bootable (#457037). (clumens) +- Make sure we drag in gzip, used by the image creation stuff. (jkeating) + +* Fri Jul 25 2008 Chris Lumens - 11.4.1.20-1 +- Clean up some mistakes in the minstg2 removal. (dcantrell) +- Fix passing the language to anaconda (katzj) + +* Thu Jul 24 2008 Chris Lumens - 11.4.1.19-1 +- Fix another NFS kickstart segfault (#456461). (clumens) +- Remove support for generating a minstg2.img image. (dcantrell) +- If the xconfig command is given, do something with it (#455938). (clumens) +- METHOD_CDROM is now supported on s390 (jgranado). (clumens) +- Fix test for if we could access stage2.img on the CD (wwoods). +- Look for updates.img and product.img on the boot.iso. (clumens) +- Suspend the curses interface before calling scripts and resume afterwards + (#435314) (msivak) + +* Wed Jul 23 2008 Chris Lumens - 11.4.1.18-1 +- MD_NEW_SIZE_BLOCKS no longer exists in newer kernel headers. (clumens) + +* Wed Jul 23 2008 Chris Lumens - 11.4.1.17-1 +- Add support for filing bugs straight into bugzilla. (clumens) +- Running git-tag -f from a makefile rule is a bad idea (katzj) +- A text message in rescue.py is not gettext-ized (atodorov) +- Code cleanup - handling of --serial (atodorov) +- Offer physical NIC identification in stage 1 (#261101) (dcantrell) +- Specify a default cio_ignore parameter for s390x (#253075) (dcantrell) +- Fix getting the stage2 image when doing kickstart installs. (clumens) +- Convert package names to unicode before displaying the error message + (#446826). (clumens) +- When there is text mode specified in the kickstart file, disable the vnc + question (#455612) (msivak) +- We no longer add the fstype to the hd: method in loader. (clumens) +- Check DHCP by default on the text network configurator screen. (clumens) +- Support booting from FCP-attached CD/DVD drive on s390 (#184648) (dcantrell) + +* Thu Jul 17 2008 Chris Lumens - 11.4.1.16-1 +- Support xdriver= again (katzj) +- Fix loadkeys on serial console (niels.devos) +- don't change from cmdline to textmode on lowmem systems (niels.devos) +- Update the VNC over text mode patch, so it correctly passes the password + to VNC server (#455612) (msivak) +- Set interface MTU if user specified mtu= param (#435874) (dcantrell) +- Bring up the network before attempting to mount the NFSISO source. (clumens) +- Catch mount errors when adding NFS repos (#455645). (clumens) +- Fix a traceback when trying to save exceptiona via scp. (clumens) +- Give a progress bar when cleaning up after upgrades (#208725). (clumens) +- Look for repo config files in /etc/anaconda.repos.d. (clumens) +- baseurl should be a list, mirrorlist should not. (clumens) +- It's called crypto_blkcipher.ko these days. (clumens) + +* Tue Jul 15 2008 David Cantrell - 11.4.1.15-1 +- Add a text-mode network config dialog so default installs can work. (clumens) +- Use the right format for the NFS methodstr, but harder this time. (clumens) +- Ask the user if he wants to use VNC instead of text mode (#453551) (msivak) +- Fix a segfault when displaying the wrong CD message. (clumens) +- Use the right format for the NFS methodstr. (clumens) +- Use correct path for FAK plugins in upd-instroot (jgranado) + +* Fri Jul 11 2008 Chris Lumens - 11.4.1.14-1 +- Remove an extra tab that was causing problems with the Iloko + translation. (clumens) +- Use the right stage2.img path for kickstart URL installs (#452140). (clumens) +- Convert package errors to unicode before displaying them (#441200). (clumens) +- Display a status message while waiting for the CD to become ready. (clumens) +- Fix window title to be the same as all others. (clumens) +- In cmdline mode, give some feedback when transferring loader files. (clumens) +- If network config info isn't provided for cmdline, abort. (clumens) +- If we're not given a method in cmdline mode, we have to quit. (clumens) +- In cmdline mode, set language to the default if none is provided. (clumens) +- Don't stop on the method screen if stage2= is provided. (clumens) +- Add support for NFS to the repo editor (#443733). (clumens) +- Fix whitespace silliness. (pjones) +- Fix closing the drive door so that if the kernel happens to start giving us + the right error code, we'll handle it correctly... (pjones) +- Fix the mysterious Error: OK message. (clumens) +- The return value from mediaCheckCdrom is totally useless. (clumens) +- Add better error handling when initializing yum (#453695). (clumens) +- Add functions for creating repos as well. (clumens) +- Don't handle all possible exceptions as if they were repo errors. (clumens) +- Reorganize to make it easier to reset the "base" repository. (clumens) +- Remove the pkgSack when a repo is disabled. (clumens) +- Use the new method of calling the NetworkConfigurator. (clumens) +- Add an updated repo editor. (clumens) +- Don't suggest text mode to the poor, poor user. (pjones) + +* Wed Jul 09 2008 Chris Lumens - 11.4.1.13-1 +- Filter out source and debuginfo repos from the UI. (clumens) +- Add the MD5 sum to the boot.iso to avoid errors in loader + (#453698). (clumens) +- Don't strip too much off the NFS directory path. (clumens) +- Log stage2 url better. (pjones) +- Fix minor whitespace nits. (pjones) +- Use %%m rather than strerror() where appropriate. (pjones) +- Make setupCdrom() actually return the path to the stage2 image it + found. (pjones) +- Don't unconditionally pass --lang for live installs (#454101) (katzj) +- Set up rhgb for plymouth on live. And conditionalize rhgb + runlevel 5 (katzj) +- Set up rhgb if plymouth is installed as well as rhgb (katzj) +- Get the math right on how many usec per second... (pjones) +- Import missing module "network". (pjones) +- Wait up to 45 seconds for "No medium found" to stop happening (pjones) + +* Thu Jul 03 2008 Peter Jones - 11.4.1.12-1 +- Add dmraid-libs to PACKAGES so new dmraid won't break installs. + +* Thu Jul 03 2008 Peter Jones - 11.4.1.11-1 +- Fix double free in setupCdrom +- Fix missing psudo->pseudo spelling fix (katzj, #453843) +- Include missing X libraries in stage2.img + +* Tue Jul 01 2008 Chris Lumens - 11.4.1.10-1 +- Remove old livecd flag (katzj) +- Explicitly setup livecd install by passing --liveinst to anaconda (katzj) +- Check return value of asprintf() consistently (dcantrell) +- Per strtol(3) man page, set errno=0 before call. (dcantrell) +- Rescue mode no longer needs access to a methodstr (#453044). (clumens) +- Use strtol() instead of atoi() (dcantrell) +- Spell pseudo correctly. (pjones) + +* Wed Jun 25 2008 Chris Lumens 11.4.1.9-1 +- Query for anaconda rather than anaconda-runtime in buildinstall (jkeating). + +* Mon Jun 23 2008 Jeremy Katz - 11.4.1.8-1 +- Remove from being installed too (katzj) +- Remove anaconda-runtime as a separate subpackage (katzj) +- Remove the stuff we're not calling. (pjones) +- Remove this since we don't use it anymore (katzj) +- Don't continue on using the base installclass if we can't find one (katzj) +- Get rid of wlite and unicode-lite; these were necessary to support (pjones) +- Remove pkgorder and splittree; these should be in pungi (katzj) +- Add the .treeinfo file into the exception report. (clumens) +- Fix a typo (#452140). (clumens) + +* Fri Jun 20 2008 Chris Lumens - 11.4.1.7-1 +- Remove ancient block of code to upgrade Netscape Communicator. (clumens) +- Move enableNetwork into the interface. Bring network up for scp. (clumens) +- If we can't mount for some reason, don't traceback (#452159). (clumens) +- Fix the upgrade button traceback (#374891). (clumens) + +* Wed Jun 18 2008 Chris Lumens - 11.4.1.6-1 +- Enable media check again, and let it check the boot.iso. (clumens) +- Substitute the version from buildstamp for $releasever if needed. (clumens) +- Remove the askmethod cmdline option. (clumens) +- Lots of work to make loader only look for stage2.img, and stage2 do + all the install method configuration. (clumens) +- Add the --stage2= and --repo= options, deprecate --method=. (clumens) +- Fix pkgorder to include deps of kernel early. (pjones) +- Deal with udev losing udevcontrol/udevtrigger (katzj) +- Boot in graphical mode if /usr/bin/kdm exists. (clumens) +- bootProto isn't a global variable (#451689). (clumens) + +* Fri Jun 13 2008 Chris Lumens - 11.4.1.5-1 +- Add a mirrorlist option. (jkeating) +- Don't display garbage when prompting for the updates device. (clumens) +- Don't write out yum repo config files in kickstart.py. (clumens) +- It doesn't make sense to insert a disk into a partition, so don't + ask. (clumens) +- Unmount /mnt/sysimage/dev manually since it doesn't get an entry. (clumens) +- Link ld-linux.so.2 to ld-*.*.*.so (dcantrell) +- Quote the repo name in anaconda-ks.cfg in case it includes spaces. (clumens) +- Move all the exception classes into a single file. (clumens) +- And import iutil a the end as well. (clumens) +- Don't display obsoleted packages in the UI. (clumens) + +* Thu Jun 05 2008 Chris Lumens - 11.4.1.4-1 +- Fix text mode button translations (#450176). (clumens) +- Remove a rogue call to textdomain. (clumens) +- Make "upd-updates /tmp/updates.img" update everything newer in the + current (pjones) +- _xmltrans is undefined. Try xmltrans instead. (clumens) +- Fix reference to cost vs. priority (#450168). (clumens) +- Don't do the "exec shell on tty1" thing in vnc if we've got virtual + terminals. (pjones) +- Import N_ (#450163). (clumens) +- raise "NotImplementedError", not "NotImplemented" (pjones) +- Need to import iutil before we use it. (clumens) +- Don't reference PartitioningError.value . (pjones) + +* Wed Jun 04 2008 Chris Lumens - 11.4.1.3-1 +- Can't reference iutil.whatever from inside iutil.py. (clumens) +- When using the boot.iso and URL installs, download the .treeinfo + file. (clumens) +- Fix a couple typos in the getArch commit. (clumens) +- Be consistent with data type. (dcantrell) +- Replace rhpl.getArch() calls with iutil calls. (dcantrell) +- Expand iutil.isX86() and added iutil.getArch() (dcantrell) +- Add isAlpha() test function to iutil. (dcantrell) +- Create architecture test functions in iutil (dcantrell) +- Removed mystrstr() function in loader2/init.c (dcantrell) +- Don't support Arabic in text mode installs since we don't even do + RTL. (clumens) +- Removed old strace debugging in loader2/init (dcantrell) +- Keep only one copy of this code for group sorting/display around (katzj) +- Stop using rhpl.translate and use gettext directly (katzj) +- Add a descriptive comment to the top of /etc/fstab (#448966). (clumens) +- Use "message" instead of "value" on errors, and stringify on the front + side. (pjones) +- Translate package descriptions (#449455). (clumens) +- Translate password error messages (#439981). (clumens) +- Fix traceback starting vnc (#449295) (katzj) +- Add Hewbrew to lang-table (oron) +- Fix errors in python string formatting (#449130). (clumens) + +* Thu May 29 2008 Chris Lumens - 11.4.1.2-1 +- Allow ext4 migration again for testing at least (katzj) +- Remount filesystems after migration (#440055) (katzj) +- Add blkid to the keepfiles list so jkeating will whine less (pjones) +- Don't allow vfat /boot (katzj) +- Use the base yum doConfigSetup method. (clumens) +- Include the yum repo files from fedora-release in stage2. (clumens) +- No longer maintain our own list of extra repos. (clumens) +- Sort the repos in the UI. (clumens) +- Add cost, includepkgs, and excludepkgs to the ks repo + objects (#448501). (clumens) +- Stop pretending to support Greek text mode (#208841) (katzj) +- Make it clear you need to reboot to use the installed + system (#238297) (katzj) +- Activate LVM for when we do meta-resizing (#441706) (katzj) +- List Norweigian as Bokmål (#437355) (katzj) +- Simplify the install classes. (clumens) +- Don't show the EFI filesystem unless we're on an EFI platform (katzj) +- Add nfsv4 so that we don't nuke them on upgrades (#448145) (katzj) +- When there are errors reading the live CD, offer a retry. (clumens) +- Can't recover from buildTransaction errors on a per-repo + basis (#447796). (clumens) +- Set default partition size to 200 MB in the custom partitioning + UI. (clumens) +- Limit the size of things in exception dumps to 1k. (clumens) +- Catch IOErrors one place they seem to happen most. (clumens) +- Add a unique user agent for anaconda's grabbing in stage2 (katzj) +- Remove text mode help support as well. (clumens) +- Check for all the non-mkfs utilities required for each filesystem + type. (clumens) +- More partitioning error handling fixes (#446453). (clumens) +- Require cracklib-python for the rootpassword screen. (notting) +- Use pykickstart's deprecated versions of the xconfig and monitor + classes. (clumens) +- Fix tyop in upgrade migrate screen (#446363) (katzj) + +* Tue May 13 2008 Jeremy Katz - 11.4.1.1-1 +- Just call the XStartupCB() function directly and randr to the + desired resolution (katzj) +- Stop writing out an xorg.conf (katzj) +- Make the "dump to removable device" option work in anaconda. (jgranado) + +* Mon May 12 2008 Jeremy Katz - 11.4.0.79-1 +- Stop neutering DRI (notting) +- make scripts/buildinstall take multiple repos (wwoods) +- Don't worry about telling people that interactive text mode is in + wrong lang (katzj) +- Allow cpio updates.img in the tree for URL installs. (dlehman) +- Declare unpackCpioBall for use from within urlinstall.c. (dlehman) +- Don't unlink an image we retrieved but could not mount as it + could be .cgz. (dlehman) +- Don't run lspci with an explicit path (katzj) +- Include lspci on all images (#445974) (katzj) +- Add support for attaching gdbserver to the loader early on. (clumens) +- Add virtio max partition count (markmc) +- Sort virtio devices first (markmc) +- Merge branch 'master' of ssh://git.fedorahosted.org/git/anaconda (andrewm) +- 2008-05-08 Andrew Martynov - 11.4.0.78-1 +- Write per-interface DNS info to ifcfg files (#443244) (dcantrell) +- Clean up sanityCheckHostname() in network.py (dcantrell) +- Activate autorepeat for GUI installs. (jgranado) + +* Fri Apr 25 2008 David Cantrell - 11.4.0.77-1 +- Preserve 'set the hostname' setting when going Next/Back (#443414) (dcantrell) +- Avoid traceback on network configuration screen (#444184) (dcantrell) +- Add missing backslashes for the .profile here document. (dcantrell) +- Label the efi boot filesystem on ia64 as well. (pjones) +- Don't use size to determine if a partition is an EFI system + partition; instead, (pjones) +- Handle the DVD having a disknumber of ALL. (443291) (jkeating) +- Make the LUKS passphrase prompt fit on an 80x25 screen. (#442100) (dlehman) +- Don't dd the image from /dev/zero _and_ use + "mkdosfs -C " (pjones) +- label the filesystem in efidisk.img so that HAL and such won't try to + mount it. (pjones) +- fix testiso Makefile target - boot.iso, not netinst.iso (wwoods) + +* Thu Apr 24 2008 Chris Lumens - 11.4.0.76-1 +- Use the execWithCapture wrapper to be consistent. (jgranado) +- Call the mdadm with full path. (jgranado) +- Use the correct ls(1) alias. (dcantrell) +- Set PS1 and ls(1) alias for tty2 shell. (dcantrell) +- Lookinig for the capabilities file in xen is valid in more cases. (jgranado) +- Avoid putting virtualization option when in Xen or VMware. + (#443373) (jgranado) +- If the stage2 image is on a CD, don't bother copying it (#441336). (clumens) +- Once we've found the stage2 media on CD, always use it (#443736). (clumens) +- Change mount point for CD to /mnt/stage2 when looking for stage2 + (#443755). (clumens) +- Switch to using 'yum clean all' to clean up after preupgrade + (#374921) (katzj) +- Handle .utf8 vs .UTF-8 (#443408) (katzj) +- Avoid dividing by zero (#439160) (katzj) +- Changes related to BZ #230949 (dcantrell) +- $XORGDRIVERS no longer exists (markmc) +- Bump version. (katzj) +- Write IPv6 values to /etc/sysconfig/... correctly (#433290) (dcantrell) +- Use the right base class for autopart handler. (clumens) + +* Fri Apr 18 2008 Jeremy Katz - 11.4.0.75-1 +- Listing the directories before expiring yum caches helps (katzj) + +* Fri Apr 18 2008 Jeremy Katz - 11.4.0.74-1 +- Don't look for .discinfo on the rescue CD (#442098). (clumens) +- Use /var/cache/yum as the cachedir since /tmp might be + too small (#443083). (clumens) +- Revert "Don't look for a .discinfo file in rescue + mode (jvonau, #442098)." (clumens) +- Revert "Fix figuring out that the CD has stage2 on it and should + be mounted." (clumens) +- We've always expected devices to be strings, not unicode (#443040) (katzj) +- Resizing lvs on top of RAID fails, make the error not a traceback (katzj) +- Don't put an extra slash on the error message (jgranado) +- Kernel changed howw the uevent API works for firmware + loading *AGAIN*. (pjones) +- Expose the log file descriptors so fwloader can avoid closing + them (pjones) +- Minor UI tweaks to passphrase dialogs (katzj) +- Nuke preupgrade cache once we're done (#442832) (katzj) +- Support bringing up the network if needed with preupgrade (#442610) (katzj) +- Use a real GtkDialog instead of some crazy hacked up dialog (katzj) +- Fix handling of pre-existing raids for the upgrade/rescue + case (#441770) (katzj) +- Add missing / (Doug Chapman, #442751) (katzj) + +* Wed Apr 16 2008 David Cantrell - 11.4.0.73-1 +- Fix figuring out that the CD has stage2 on it and should be mounted. (clumens) +- Don't copy the stage2 image on NFS installs (#438377). (clumens) + +* Tue Apr 15 2008 Jeremy Katz - 11.4.0.72-1 +- Don't use megabytes for the livecd size for copying. (notting) +- find moved (katzj) +- Fix up silly syntax error that crept in to this commit (katzj) +- Back to using the raw version of the docs (#442540) (katzj) +- Expire yum caches on upgrade (#374921) (katzj) +- Include KERNEL== in udev rules (#440568) (dwmw2) +- Don't look for a .discinfo file in rescue + mode (jvonau, #442098). (clumens) +- Slower machines may take more than five seconds for hal + to start (#442113) (katzj) +- Pass the full device path (notting) +- Only include the parts of grub that will work without + crazy tricks (#429785) (katzj) + +* Thu Apr 10 2008 Peter Jones - 11.4.0.71-1 +- Fix destdir handling in upd-kernel (markmc) +- Get rid of module ball remnants in mk-images (markmc) +- Make upd-kernel handle version numbers the way we do them now (markmc) +- Fix ia64 kernel path problems (katzj, #441846) +- Don't tag more than one partRequest with mountpoint=/boot/efi (pjones) +- Don't treat tiny disks as EFI System Partitions during autopart (pjones) + +* Thu Apr 10 2008 Chris Lumens - 11.4.0.70-1 +- ide-cd_mod, not ide-cd_rom (thanks to jwb) (katzj) + +* Wed Apr 09 2008 Peter Jones - 11.4.0.69-1 +- Ignore some warnings copying into /etc and /var (clumens) +- Try to mount the NFS source in the loader to verify it is correct (clumens) +- Be as clean as possible when looking for files/directories (jgranado, #431392) +- More ia64 kernel finding fixage (katzj, #441708) +- Fix read permissions on efidisk.img (pjones) +- Use the mount flags passed to isys.mount() (pjones) + +* Wed Apr 09 2008 Peter Jones - 11.4.0.68-2 +- Fix device-mapper dep. + +* Tue Apr 08 2008 Peter Jones - 11.4.0.68-1 +- Handle EFI partitions somewhat better (pjones) +- Fix typo in mk-images.efi's parted usage (pjones) + +* Tue Apr 08 2008 Jeremy Katz - 11.4.0.67-1 +- Set the initial state of the auto-encrypt checkbutton (#441018) (katzj) +- Don't treat RAID devices as "disks" to avoid lots of odd + behavior (#438358) (katzj) +- Log a message if we disable selinux on upgrade (katzj) +- Build efiboot.img on x86_64 and i386 . (pjones) +- When splitting srpms, only link srpms, nothing else. (jkeating) +- Don't cause the text to flicker between installed packages. (clumens) +- Don't cause the screen to jump up and down between + packages (#441160). (clumens) +- Fix zooming and centering in the timezone screen (#439832). (clumens) +- Handle ia64 kernel path (katzj) +- And add nas to the list (#439255) (katzj) +- Set parent so that the dialog centers (#441361) (katzj) +- Don't show the label column (#441352) (katzj) +- Do string substitution after we've translated (#441053) (katzj) +- Set domain on glade file so translations show up (#441053) (katzj) +- fix compression of modules (notting) +- More build fixing due to translation breakage. (katzj) +- Add code to create efiboot.img on i386 and x86_64 (pjones) +- Remove gnome-panel too, it's no longer multilib. (jkeating) +- Fix raising new NoSuchGroup exception. (clumens) +- remove debugging print (notting) +- Support encrypted RAID member devices. (#429600) (dlehman) +- No longer require Amiga partitions on Pegasos (dwmw2) +- Don't copy the stage2 image every time or on the way back. (clumens) +- Make lukscb.get_data("encrypt") always return a valid value. (pjones) +- Set the scrollbar color so it doesn't surprise me the same way in + the future. (pjones) +- Translation updates. + +* Sun Apr 06 2008 Jeremy Katz - 11.4.0.66-1 +- Another day, another broken translation commit to fix. (katzj) +- Work around GL crashes in anaconda X by disabling them. (jkeating) +- Clean up "finishing upgrade" wait window (katzj) +- Stop refreshing like mad in text-mode on WaitWindow.refresh() (katzj) +- Avoid progress bars going off the end and making newt unhappy (katzj) +- Brute force hack to avoid the number of packages + overflowing (#436588) (katzj) +- Revert "Change the default level in /etc/sysconfig/init now + (#440058)." (notting) +- Add gnome-applets to the upgrade blacklist, fix kmymoney2 typo. (jkeating) +- Don't enable encryption by default (katzj) +- Print our mount commands to /dev/tty5 for easier debugging. (clumens) +- Change the default level in /etc/sysconfig/init now (#440058). (clumens) +- Make the Back button work when asking for tcp/ip information in + loader.c. (#233655) (jgranado) +- Have work in the network configuration stage (#250982) (jgranado) +- Use a better test to see if a package group doesn't exist (#439922). (clumens) +- avoid behavior in (#208970) (jgranado) +- Correctly label the xen images in the .treeinfo file (jgranado) +- Translation updates + +* Wed Apr 02 2008 Chris Lumens - 11.4.0.65-1 +- Only do verbose hal logging if loglevel=debug (katzj) +- Avoid AttributeError in HardDriveDict (#432362) (pjones) +- Don't use %%n with gettext to avoid segfaults (#439861) (katzj) +- Require live installs to be to an ext2 or ext3 filesystem (#397871) (katzj) +- Don't allow migrations to ext4 for now (katzj) +- Change ext4 parameter to ext4, not iamanext4developer (katzj) +- Bootable requests can not be on logical volumes (#439270). (clumens) +- Don't allow /boot to be migrated to ext4 (#439944) (katzj) +- Fix for ia64 (#439876) (katzj) +- Update pkgorder group listings to match current Fedora defaults. (jkeating) +- Lame attempt to try to avoid race condition with udev creating device + nodes (katzj) +- Don't traceback if stdout is an fd either (katzj) +- iutil doesn't need isys anymore (katzj) +- Free memory only after we're done using it (#439642). (clumens) +- Fix a segfault freeing memory on boot.iso+hdiso installs. (clumens) + +* Mon Mar 31 2008 Jeremy Katz - 11.4.0.64-1 +- Fix my tyop (katzj) +- Fuzzy broken string again (katzj) + +* Sun Mar 30 2008 Jeremy Katz - 11.4.0.63-1 +- Fix broken translations. Again. (katzj) + +* Sun Mar 30 2008 Jeremy Katz - 11.4.0.62-1 +- Translation updates +- Allow GPT disk labels on ppc/ppc64. (dcantrell) +- Tear down the right loopback device before going to stage2. (clumens) +- Don't pass None as stdout or stderr. (clumens) +- Make sure there's a stdout to write to. (clumens) +- Handle fstype munging in isys.readFSType instead of in various + other places. (dlehman) +- Fix a typo in new encrypted LV code. (dlehman) +- Partitioning UI for handling of preexisting encrypted devices. (dlehman) +- Support discovery of preexisting rootfs on LV. (dlehman) +- Improve handling of logical volume device names when encrypted. (dlehman) +- Add support for discovery of preexisting LUKS encrypted devices. (dlehman) +- Add support for retrieving LUKS UUIDs. (dlehman) +- Refresh po files (katzj) +- Mark for translation based on feedback from translators (katzj) +- Just relabel all of /etc/sysconfig (#439315) (katzj) +- When dhcp is selected ensure that bootproto is set to + dhcp (RPL-2301) (elliot) +- Fix for test mode repo bits (katzj) +- Try to make the size flow a little more for weird resolution + screens (#439297) (katzj) +- Add kmymoney to upgrade remove list (#439255) (katzj) + +* Thu Mar 27 2008 Chris Lumens - 11.4.0.61-1 +- Fix broken translation. (clumens) + +* Thu Mar 27 2008 Chris Lumens - 11.4.0.60-1 +- Have a fallback empty description for devices (#432362) (katzj) +- os.path.join does not work the way we think it should. (clumens) +- Remove the stage2 in all cases now that we're copying it basically + all the time (katzj) +- Add support for saving the exception to a local directory for live + installs (katzj) +- Catch errors on resize and present a dialog to the user (katzj) +- Save resize output to a file (/tmp/resize.out) so that it's more + useful (katzj) +- Make sure we give the command that's run on stdout so that it's + logged (katzj) +- more mouse-related removals (notting) +- Fix up autopart resizing for the multiple partitions to resize case (katzj) +- Fix up the case where both method= and stage2= are given (katzj) +- Remove mouse screens that haven't been used in 4 years (katzj) + +* Wed Mar 26 2008 Chris Lumens - 11.4.0.59-1 +- Only remove duplicate slashes from the front of the prefix. (clumens) +- Ensure that we take into account new repos (katzj) +- Handle kernel variants a little better at install time too (katzj) +- Make a little bit more future proof for kernel version changing (katzj) +- Add confirmation of closing the installer window (#437772) (katzj) +- Fix SIGSEGV on all mounts without options (katzj) +- Add support for encrypted logical volumes in kickstart. (clumens) +- Add support for encrypted LVs. (dlehman) +- Put in some handling for redundant method calls and devices containing '/'. + (dlehman) + +* Tue Mar 25 2008 Jeremy Katz - 11.4.0.58-1 +- Fuzzy broken string (katzj) + +* Tue Mar 25 2008 Jeremy Katz - 11.4.0.57-1 +- Use anaconda-upgrade dir in the preupgrade case (katzj) +- Have 'preupgrade' key doing an upgrade (katzj) +- Fix what we expect to be the message from ntfsprogs (katzj) +- Fix up compile error for new newt (katzj) +- Don't traceback if we have little freespace partitions (#438696) (katzj) +- Translation updates (ko, ru) + +* Mon Mar 24 2008 Jeremy Katz - 11.4.0.56-1 +- Translation updates (hi, fr, kn, de, ml, es, mr, ko, te) +- Fix up more unicode shenanigans (#437993) (katzj) +- Move /tmp/stage2.img to /mnt/sysimage to free up some + memory (#438377). (clumens) +- Be a little smarter about downloading repo metadata (#437972). (clumens) +- Make sure that devices are set up before using them. (#437858) (dlehman) +- Don't prepend /dev/ on bind mounts either. (clumens) +- Use the repo name instead of id in the group file error + message (#437972). (clumens) +- Handle /dev being on hard drive devices in the second stage (katzj) +- Fix the build (katzj) +- The units for /sys/block/foo/size aren't bytes. Fixes finding some + disks (katzj) +- Remove the check for .discinfo on URL installs. (clumens) +- Always unmount /mnt/source on hdiso installs before starting + stage2. (clumens) +- Always unmount /mnt/source on nfsiso installs before starting + stage2. (clumens) +- Make sure the first disc image is mounted before setting up repos. (clumens) +- Fix $UPDATES for real (katzj) +- Avoid piling up slashes in the UI when retrying (#437516). (clumens) +- Require comps-extras now that we don't require pirut bringing it in (notting) +- Put "ide-cd_mod" in the list of modules to pull in. (pjones) + +* Tue Mar 18 2008 Chris Lumens - 11.4.0.55-1 +- Fix format of method=hd: parameter (#438075). (clumens) +- Work on support for NFSISO installs when using boot.iso. (clumens) +- If a file doesn't exist, don't continue trying to loopback mount + it. (clumens) +- Make loopback mount error messages more useful. (clumens) +- Focus root password entry box (#436885). (dcantrell) +- Fix a traceback writing out the method string for hdiso installs. (clumens) +- Fix use of sizeof on a malloc()'d char ** (pjones) +- Fix up ppc boot check (#438005) (katzj) +- Support reading the UUID from the disk like we do with labels. (clumens) +- If the protected partition is not yet mounted, mount it now. (clumens) +- Don't add /dev/ to LABEL= or UUID= devices either. (clumens) +- Use arch instead of the name again in package nevra. (clumens) +- Fix traceback with preexisting LUKS partitions in setFromDisk. + (part of #437858) (dlehman) + +* Mon Mar 17 2008 Jeremy Katz - 11.4.0.54-1 +- Translation updates (de, fi, it, gu, ta, pa) +- Fix a typo. (clumens) +- Fix the build. (clumens) +- Make sure we return the same kind of exception in all cases. (clumens) +- Filter so we don't show LVM and RAID components when adding + boot entry (#437501) (katzj) +- Only print the filename we're fetching, as newt doesn't like + long names. (clumens) +- Fix off by one error reading .buildstamp (pjones) +- Use the right path when trying to fetch .discinfo. (clumens) +- Don't prepend /dev/ onto nfs devices. Also log mount + errors to tty5. (pjones) + +* Sun Mar 16 2008 Jeremy Katz - 11.4.0.53-1 +- Update translations (pl, de) +- Use i586 kernel (#437641) (katzj) +- Give indication of success or failure for mediacheck (#437577) (katzj) +- Ensure the UUID for the rootfs is random and not the same for every + live image (katzj) +- Make migration from ext3 -> ext4 saner on upgrade (#437567) (katzj) +- Force filesystem mount options on /boot/efi . (pjones) +- On HDISO installs, look for the stage2.img file in the right + directory. (clumens) +- Accept devices with or without a leading /dev/. (clumens) +- .buildstamp no longer contains productPath, so change + the default (#437509). (clumens) +- Remove references to an uninitialized variable. (clumens) +- Use shortname=winnt instead of shortname=win95 when + mounting /boot/efi (pjones) +- Do not strip leading or trailing whiltespace from + passphrases. (#437499) (dlehman) +- Set methodstr for nfsiso installs (#437541). (clumens) +- Create and check /boot/efi correctly, and use preexisting + one if available. (pjones) +- Handle /boot/efi and /boot both as bootrequests (pjones) +- Emit "efi" as /boot/efi's filesystem type (pjones) +- Add EFI handling to the bootloader setup choices. (pjones) +- Add efi to the ignoreable filesystem list. (pjones) +- Add EFIFileSystem, and getMountName() to hide that it's really vfat. (pjones) +- Add isEfiSystemPartition(), and use it where appropriate (pjones) +- Call getAutoPartitionBoot with our partition list as an arg. (pjones) +- Don't show the epoch in package selection either (#437502). (clumens) +- Fix some errors on reporting which files are being downloaded. (clumens) +- Revert "Handle /boot and /boot/efi separately, plus fixes" (pjones) +- Handle /boot and /boot/efi separately, plus fixes (pjones) +- Get rid of unused >1024 cylindar check, fix text of boot + check exceptions. (pjones) +- Make bootRequestCheck() check /each/ boot partition like it's + supposed to, (pjones) +- Fix shell quoting on numbers > 9, and fix an error message. (pjones) +- Don't show the epoch in the progress bar (#437502). (clumens) +- Include efibootmgr in the instroot (pjones) + +* Thu Mar 13 2008 Chris Lumens - 11.4.0.52-1 +- Don't unmount NFS source so NFSISO will work. (clumens) +- Fix the format of the method=hd: parameter. (clumens) +- Fix creating new users in kickstart. (clumens) +- "gtk-edit" isn't valid in text mode. (clumens) +- Ignore LUKS headers on partitions containing RAID signatures. + (#437051) (dlehman) +- The xconfig command with no X running doesn't make sense. (clumens) + +* Wed Mar 12 2008 Jeremy Katz - 11.4.0.51-1 +- yum.remove removes installed packages, not to be installed + packages (#436226) (katzj) +- Make the /tmp/updates vs RHupdates code at least a little readable. (pjones) +- Allow vfat update images. (pjones) +- Fix syntax error (pjones) +- Add a progress bar for when we're downloading headers (#186789). (clumens) +- mount will set up the loopback device if we let it. (clumens) +- Fix mounting problems with NFSISO images. (clumens) +- Simplify the logic for the upgrade arch check (katzj) +- Add a fallback method for determining the architecture of installed + system during an upgrade (#430115) (msivak) +- Avoid a traceback (#436826) (katzj) +- Make sure host lookups work for manual net config (#435574). (dcantrell) + +* Tue Mar 11 2008 Jeremy Katz - 11.4.0.50-1 +- Focus root password entry box (#436885). (dcantrell) +- Make sure default is SHA-512 for libuser.conf. (dcantrell) +- Fix detection of ISO images on a hard drive partition. (clumens) +- Devices names aren't prefixed with /dev/. (clumens) +- Filter out /dev/ram* devices from the list of hdiso partitions. (clumens) +- But make sure that we've activated the keymap now that X + follows its defaults (katzj) +- Don't set a keyboard in the X config, we should just do this + at runtime (katzj) +- Writing out the nfs method line is a lot simpler now. (clumens) +- Use /mnt/sysimage/tmp/cache for the yum cache, instead of the + ramdisk. (clumens) +- Translation updates (nl, gu, ml, mr, pa) + +* Mon Mar 10 2008 Chris Lumens - 11.4.0.49-1 +- Use the full path to the .discinfo file (#436855). (clumens) +- List netinst.iso/boot.iso in .treeinfo (#436089) (katzj) +- Convinced to change the name back to boot.iso (katzj) +- Only pass the file path to {ftp,http}GetFileDesc. (clumens) +- Pass the correct NFS method parameter to stage2 (#436360). (clumens) +- Fix logging messages to not display the hostname twice. (clumens) +- Fix traceback with text mode adding iscsi (#436480) (katzj) + +* Thu Mar 06 2008 Jeremy Katz - 11.4.0.48-1 +- Don't use the bits from $UPDATES unless $UPDATES exists (katzj) +- Fix horkage with busybox stuff. There's now start-stop-daemon (katzj) +- Require new enough version of yum-utils (katzj) +- Pass the --archlist option to yumdownloader (jkeating) +- Update pt_BR translation + +* Wed Mar 05 2008 Jeremy Katz - 11.4.0.47-1 +- Fix the build again (katzj) + +* Wed Mar 05 2008 Jeremy Katz - 11.4.0.46-1 +- Don't require some things which we fall back gracefully when not there (katzj) +- Check for filesystem utilities to see if a filesystem is supported (katzj) +- Write out keyboard settings before installing packages. (related + to #429358) (dlehman) +- Update pl translation +- Make sure http:// or ftp:// is specified (#436089) (katzj) +- Fix segfault when port is specified (#435219) (katzj) +- Use ntfsresize -m to get minimum size (#431124) (katzj) +- Use the right path to the .discinfo file when validating a tree. (clumens) + +* Tue Mar 04 2008 Jeremy Katz - 11.4.0.45-1 +- Fix the build. + +* Tue Mar 04 2008 Jeremy Katz - 11.4.0.44-1 +- Add --archlist to repoquery call. (jkeating) +- Translation updates (pl, nl, ja) +- Handle efibootmgr and grub.efi in upd-instroot. (pjones) +- Merge in branch to implement stage2= parameter. (clumens) +- Revert the memtest86 bits for EFI, since this gets run on + multiple arches. (pjones) +- Use iutil.isEfi() instead of testing for ia64-ness. (pjones) +- Only do gptsync if we're not using EFI. (pjones) +- Don't do gptsync if we're using EFI. (pjones) +- Use gpt on all efi platforms. (pjones) +- Rework isEfi() to be slightly more conservative. (pjones) +- Test for using efi rather than arch==ia64 (pjones) +- Don't copy memtest86 in on EFI since it won't work. (pjones) +- Add comment regarding usage of elilo (pjones) +- Free some variables so we can http GET twice if needed. (clumens) +- Change the method config prompts. (clumens) +- Support stage2= for CD installs in loader. (clumens) +- Support stage2= for HD installs. (clumens) +- Support stage2= for NFS installs. (clumens) +- Support stage2= for URL installs. (clumens) +- Update the method string handling for NFS and URL installs. (clumens) +- mountStage2 now needs to take an extra argument for updates. (clumens) +- If stage2= is given, it overrides the check for a CD stage2 image. (clumens) +- Support the stage2= parameter, and add a flag for it. (clumens) + +* Mon Mar 03 2008 Jeremy Katz - 11.4.0.43-1 +- Only use UUID= for devices we would have labeled. Related to #435228 (katzj) +- If we don't find a kernel package, then give a better error (katzj) +- Translation updates (cs, de) + +* Sun Mar 02 2008 Jeremy Katz - 11.4.0.42-1 +- Fix a traceback when we have an error. Related to #433658 (katzj) +- Add virtio_pci in hopes of getting virtio working (katzj) +- Pull in the bits of pirut that we use so that we don't depend on pirut (katzj) +- Default to RAID1 instead of RAID0 (#435579) (katzj) +- Refresh po (katzj) +- Fix traceback leaving task selection screen (#435556) (katzj) +- More ext4 vs ext4dev nonsense. (#435517) (katzj) +- Fix reverse name lookup. (pjones) + +* Thu Feb 28 2008 Jeremy Katz - 11.4.0.41-1 +- Don't write out /etc/rpm/platform anymore. (katzj) +- anaconda-runtime now needs yum-utils (katzj) +- Add 'testiso' target (katzj) +- Remove rescue cd creation scripts (katzj) +- Take --updates with location of additional updates beyond the package + set used (katzj) +- Change the ISOs we build (katzj) +- Take advantage of yum repos being available (katzj) +- Allow recovery from some missing repodata conditions. (clumens) +- Rework the repo editor screen to be more modular. (clumens) +- Move doPostImages to be run after the second stage build (katzj) +- Ensure that group info for txmbrs is accurate after we reset (katzj) +- Fix backwards logic for yum verbosity (katzj) +- No more arc (#435175) (katzj) +- Remove an unused method. (clumens) + +* Tue Feb 26 2008 Jeremy Katz - 11.4.0.40-1 +- Use non-deprecated HAL properties. (notting) +- More crud to deal with the fact that rawhide trees are composed weird (katzj) +- Gtk does not have the error type, use custom with proper + icons. (#224636) (msivak) + +* Mon Feb 25 2008 Jeremy Katz - 11.4.0.39-1 +- Fix up symlinks that could be broken with our movement here (#434882) (wwoods) +- pvops xen uses hvc as its console (#434763) (katzj) +- Follow symlinks when looking for the anaconda-runtime package. (jkeating) + +* Sun Feb 24 2008 Jeremy Katz - 11.4.0.38-1 +- Write out UUID in the fstab (#364441) (katzj) +- Add support for getting UUID using libblkid (katzj) +- Fix calculation of sizes of LVs when resizing (#433024) (katzj) +- Add back some bits for text mode (katzj) +- Remove advanced bootloader bits (katzj) +- Add support for actually changing where the boot loader gets + installed as well (katzj) +- Less text. (katzj) +- Reorder things a little, clean up spacing (katzj) +- Use a tooltip instead of a long bit of text that most people + don't read (katzj) +- Remove advanced checkbox (katzj) +- Switch the grub installation radio to be a checkbutton. Cleanups for + grub only (katzj) +- Lets redirect to /dev/null to ensure that what we get in DIR is the + result of pwd. (jgranado) +- Catch the error emmited by lvm tools during logical volume + creation process (#224636). (msivak) +- Don't try to lock /etc/mtab, fix error detection when mount fails. (clumens) +- Don't append (null) to the NFS mount options. (clumens) +- There's no need to wait if the last download retry failed. (clumens) +- the '-o' is appended to the mount command in imount.c (jgranado) +- Use full path to device for mount in findExistingRootPartitions. (dlehman) +- Map preexisting encrypted devs before mounting everything + in mountRootPartition. (dlehman) +- Fix traceback on test mount in findExistingRootPartitions. (dlehman) +- Use SHA-512 by default for password encryption. (dcantrell) +- Clean up root password user interfaces. (dcantrell) + +* Tue Feb 19 2008 Chris Lumens - 11.4.0.37-1 +- Default to the right timezone when language is changed (#432158). (clumens) +- Fix another text mode network config traceback (#433475). (clumens) +- More scripts cleanups. (jgranado) +- Remove more references to ARC (#433229). (clumens) +- Mount flags should be an optional argument (#433279, #433280). (clumens) +- We don't need productpath anymore, so stop taking it as an option (katzj) +- Set yum output level based on whether or not we've passed --debug or + not (katzj) +- Clean up invocation of mk-images from buildinstall (katzj) +- Clean up invocation of upd-instroot from buildinstall (katzj) +- Remove some legacy stuff that's no longer relevant from + .discinfo/.treeinfo (katzj) +- Don't depend on product path for finding the anaconda-runtime + package (katzj) +- Make buildinstall a little clearer (katzj) +- Use $LIBDIR instead of lib globbing to avoid problems with chroots (katzj) +- Add some error handling around populateTs. (clumens) + +* Thu Feb 14 2008 David Cantrell - 11.4.0.36-1 +- Fix up firmware inclusion. This didn't actually ever work. (katzj) +- Fix up the groff related stuff for man pages to be done in the correct + place (katzj) +- remove yumcache (katzj) +- Don't do fixmtimes anymore (katzj) +- Don't compress translations (katzj) +- Don't manually duplicate things from package %%post scripts (katzj) +- Remove some unused options (--discs and --buildinstdir) (katzj) +- Keep /etc/nsswitch.conf and /etc/shells (katzj) +- Stop forcing passive mode for FTP by patching urllib (katzj) +- We don't use timezones.gz anymore anywhere (katzj) +- We shouldn't need to remove files that are only in -devel packages (katzj) +- Remove some obsolete files from the list to clean up noise in the + output (katzj) +- We want nss bits on all arches these days (katzj) +- Just use default /etc/nsswitch.conf and /etc/shells (katzj) +- alpha should have translations probably (katzj) +- Remove some things that aren't used anymore (katzj) +- Don't run pkgorder as a part of buildinstall anymore (katzj) +- Remove duplicate file from the file lists (katzj) +- Don't use the static versions of these anymore as they're likely to go + away (katzj) +- Remove weird s390 hack that shouldn't be needed any more (katzj) +- Make makebootfat less noisy (katzj) +- Get rid of dangling fobpath stuff; now that we're not mounting to + create (katzj) +- Ignore .bak files created by glade (katzj) +- Get rid of duplication for yaboot stuff to make scripts less noisy (katzj) +- Correct internationalization of exception handler text (msw) +- More fixing of mount paths (#432720) (katzj) +- securitylevel -> firewall in the spec file. (clumens) +- Include util-linux-ng, which contains mount (#432720). (clumens) +- When mounting stage2 on loopback, add -o loop to mount opts. (clumens) + +* Tue Feb 12 2008 Jeremy Katz - 11.4.0.35-1 +- Fix the build (katzj) + +* Tue Feb 12 2008 Jeremy Katz - 11.4.0.34-1 +- Handle modules with more than one description (#432414) (katzj) +- Finish HDISO installs, at least for DVDs (#431132). (clumens) +- Move migration to before mounting filesystems (katzj) +- Fix silly thinko in Eric's patch (katzj) +- Allow ext3->ext4 upgrades (sandeen) +- Do the man pages in rescue mode the right way. (jgranado) +- Merge branch 'master' of ssh://git.fedorahosted.org/git/anaconda (notting) +- Use /etc/adjtime as the configuration file for UTC/not-UTC. (notting) +- Remove all our own mount code. (clumens) +- Use the mount program instead of our own code. (clumens) +- Add the real mount programs to stage1. (clumens) +- Use the correct variables to get the ipv6 info. (#432035) (jgranado) +- Update error messages to match function names. (dcantrell) +- Rename nl.c to iface.c and functions to iface_* (dcantrell) +- In rescue mode, show interface configuration (#429953) (dcantrell) +- Add qla2xxx firmware (#377921) (katzj) +- Rename base repo (#430806). (clumens) +- Remove dep on anaconda from pkgorder (katzj) +- Remove no longer used dumphdrlist script (katzj) + +* Thu Feb 07 2008 Jeremy Katz - 11.4.0.33-1 +- Fix error message on continuing after changing cds with mediacheck (katzj) +- Fix the progress bar during mediacheck (#431138) (katzj) +- Ensure we disable SELinux if the live image isn't using it (#417601) (katzj) +- Correct nl_ip2str() cache iteration. (dcantrell) +- Check the fstype of the live image (katzj) +- Check for device existence rather than starting with /dev (katzj) +- The FL_TEXT flag has no reason to be here. (#207657) (jgranado) +- Don't traceback when getLabels is called with DiskSet.anaconda set + to None. (dlehman) +- Pass arguments correctly to anaconda (katzj) +- Cancel on escape being pressed with autopart resizing (katzj) + +* Wed Feb 06 2008 Chris Lumens - 11.4.0.32-1 +- Make passwordEntry appear on the exn saving screen. (clumens) +- Don't allow disabling default repositories. (clumens) +- Make loopback device purposes line up with what stage2 expects. (clumens) +- Fix methodstr handling for hdiso installs (#431132). (clumens) +- Remove our own DNS functions, since glibc's are available now. (clumens) + +* Tue Feb 05 2008 Chris Lumens - 11.4.0.31-1 +- Copy over repodata from media after the install is done (#381721) (katzj) +- Add resizing support in autopartitioning (katzj) +- Fix test mode with python-fedora installed (katzj) +- Add support for encrypted devices in rescue mode (dlehman). +- Allow creation of LUKSDevice with no passphrase. (dlehman) +- Fix hdiso installs in loader and in methodstr (#431132). (clumens) +- Avoid infinite loop in nl_ip2str(). (dcantrell) +- Force users to set a hostname (#408921) (dcantrell) +- Forward-port RHEL-5 fixes for s390x issues. (dcantrell) +- fsset.py tweaks for ext4dev & xfs (sandeen) +- When editing the raid partitions show raid memebers. (#352721) (jgranado) +- mdadm to create the mdadm.conf (#395881) (jgranado) + +* Wed Jan 30 2008 David Cantrell - 11.4.0.30-1 +- Initialize int in doConfigNetDevice() to fix compiler warnings. (dcantrell) + +* Wed Jan 30 2008 David Cantrell - 11.4.0.29-1 +- Handle putting updates ahead of anaconda in the updates= case too. (clumens) +- Make sure the device name starts with /dev (#430811). (clumens) +- Revert "Initial support for network --bootproto=ask (#401531)." (clumens) +- (#186439) handle lv names with "-" when doing kickstart. (jgranado) +- Remove the last references to makeDevInode (#430784). (clumens) +- Don't traceback trying to raise an exception when making + users (#430772). (clumens) + +* Mon Jan 28 2008 David Cantrell - 11.4.0.28-1 +- Go back to the method screen if back is hit on nfs config (#430477). (clumens) +- Fix dmidecode dependency (#430394, Josh Boyer - 11.4.0.27-1 +- Fix generation of stage1 images. (notting) +- Fix a typo in mk-images. (clumens) +- Allow removing packages by glob now that yum supports it. (clumens) + +* Thu Jan 24 2008 Chris Lumens - 11.4.0.26-1 +- Fix a traceback on the driver selection screen (#428810). (clumens) +- Map 'nousb', 'nofirewire', etc. to be proper module blacklists. (notting) +- Clean off leading and trailing whitespace from descriptions. (notting) +- Write out /etc/rpm/platform on livecd installs. (clumens) + +* Wed Jan 23 2008 David Cantrell - 11.4.0.25-1 +- Include new firstboot module. (clumens) +- Conditionalize ntfsprogs as not all arches include it. (clumens) +- Remove kudzu-probe-stub. (clumens) +- Remove rogue references to kudzu. (clumens) +- Add dogtail support (#172891, #239024). (clumens) +- Fix some error reporting tracebacks. (clumens) + +* Tue Jan 22 2008 Chris Lumens - 11.4.0.24-1 +- Avoid possible SIGSEGV from empty loaderData values. (dcantrell) +- Do not require glib2-devel for building. (dcantrell) +- Use libnl to get interface MAC and IP addresses (dcantrell) +- Don't refer to the libuser.conf when creating users (#428891). (clumens) +- pcspkr works (or isn't even present), per testing on #fedora-devel (notting) +- Inline spufs loading for ppc. (notting) +- Load iscsi_tcp, so that iSCSI actually works (notting) +- inline ipv6 module loading (notting) +- If we execWith a program, require the package containing it. (clumens) +- Add a repository editor. (clumens) +- Add the default repo to the UI so it can be edited later. (clumens) +- Fix non-latin-1 locale display in the loader. (notting) +- Make sure anaconda has precedence in the search path (#331091). (clumens) +- When starting RAID arrays, the device node may not already exist. (notting) +- Fix a typo that's breaking kickstart network installs. (clumens) +- Don't allow backing up to partitioning (#429618). (clumens) +- Update font paths. (clumens) + +* Mon Jan 21 2008 David Cantrell - 11.4.0.23-1 +- Try to fix a problem creating users via kickstart (#428891, clumens) +- Fix a loader segfault doing kickstart nfs installs (clumens) +- Move more interactive steps ahead of partitioning (clumens) +- If we can't possibly add advanced devices, don't offer it (#429210, clumens) +- Don't flush after rescanning so recently attached disks are + available (clumens) +- If bootproto is dhcp, unset any static settings (#218489, dcantrell) +- Add some groups to pkgorder to make the CDs come out right (pjones) +- Fix traceback when using non-encrypted RAID (notting) +- Complete the patch for dhcptimeout (#198147, #254032, msivak) + +* Wed Jan 16 2008 David L. Cantrell Jr. - 11.4.0.22-1 +- Require the latest libdhcp (dcantrell) +- Don't set currentMedia when we're on a network install (#428927, clumens) +- Don't offer two reboot options (clumens) +- Remove fsopts that are already defaults (#429039, clumens) +- Remove isofs module to get rid of a FATAL message (clumens) +- Add the crc32c kernel module for iscsi (#405911, clumens) +- Add MAC address to the network device selection screen (#428229, clumens) +- Initial support for network --bootproto=ask (#401531, clumens) +- Remove an extra newline (clumens) +- Add firstaidkit to the rescue image (jgranado) +- Fix the progress bar to hit 100%% on the last package (#428790, clumens) +- Add some output so the startup delay doesn't seem quite so long (clumens) +- Initial kickstart support for encrypted partitions (clumens) + +* Mon Jan 14 2008 David Cantrell - 11.4.0.21-1 +- Inherit from the right versions of pykickstart classes (clumens) +- Update for nss files moving to /lib (clumens) +- Remove unneeded arguments from detectHardware function (notting) +- Symlink all udev support binaries to udevadm (notting) +- /sbin/restorecon on /etc/modprobe.d (notting) +- Add the kickstart syntax version to the kickstart file (clumens) +- Require latest libdhcp to fix x86_64 SIGABRT problems + +* Sun Jan 13 2008 Chris Lumens - 11.4.0.20-1 +- Install new udev paths so HAL can talk to it (notting) +- Also get DSO deps for setuid binaries (like X). (clumens) +- Fix a bunch of pychecker errors. (clumens) + +* Fri Jan 11 2008 Chris Lumens - 11.4.0.19-1 +- Make sure the arch is listedat the top of all loader screens. (clumens) +- Add the version number really early in the log file too. (clumens) +- Require latest libdhcp (dcantrell) +- Add nicdelay parameter to loader, so we can wait before sending DHCP + requests. (msivak) +- Add dhcpdelay to loader so we can modify the default dhcp timeout + (#198147, #254032). (msivak) +- Fix the selected device when disabling entries in Add advanced drive + dialog. (#248447) (msivak) +- Include mkfs.gfs2 (#356661). (clumens) +- Use the new default Japanese font (#428070). (clumens) +- More urlinstall loader fixes. (clumens) + +* Wed Jan 09 2008 Chris Lumens - 11.4.0.18-1 +- Fix encrypted autopart traceback. (dlehman) +- Allow for better recovery if the CD/DVD is bad. (clumens) +- If downloading the updates image fails, prompt for a new location. (clumens) +- X now relies on libpciaccess, so add it to our list. (clumens) +- Erase temporary packages after installing them on all methods. (clumens) + +* Mon Jan 07 2008 Chris Lumens - 11.4.0.17-1 +- Make text mode root password dialog default match GUI. (clumens) +- Fix a segfault in making the URL dialog box. (clumens) + +* Sun Jan 06 2008 Chris Lumens - 11.4.0.16-1 +- Fix checking the timestamps on split media installs. (clumens) +- Fix reference to isodir to avoid a post-install traceback. (clumens) +- Use a better test when populating the URL panel in loader. (clumens) +- Don't use error messages from dosfslabel as the label (#427457). (clumens) +- No longer require kudzu (#427680). (clumens) + +* Thu Jan 03 2008 David Cantrell - 11.4.0.15-1 +- Require latest libdhcp (#378641) (dcantrell) + +* Thu Jan 03 2008 David Cantrell - 11.4.0.14-1 +- Precreate /etc/modprobe.d in installroot (jkeating) +- 'import sets' in image.py (jkeating) +- Fix traceback when displaying required media (clumens) + +* Tue Jan 01 2008 Jeremy Katz - 11.4.0.13-1 +- Make it obvious which partitions are being formatted and encrypted (katzj) +- Set initial sensitivity of encrypt button correctly (katzj) +- Fix traceback on invalid passphrase (#426887) (katzj) +- Use mkstemp() instead of tempnam() (katzj) +- Don't resize filesystems which are being formatted (#426466) (katzj) +- Add cracklib-dicts (#426444) (katzj) +- Fix build (notting) diff --git a/anaconda_log.py b/anaconda_log.py new file mode 100644 index 0000000..b6f26f4 --- /dev/null +++ b/anaconda_log.py @@ -0,0 +1,167 @@ +# +# anaconda_log.py: Support for logging to multiple destinations with log +# levels. +# +# Copyright (C) 2000, 2001, 2002, 2005 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Chris Lumens +# Matt Wilson +# Michael Fulbright +# + +import os +import signal +import sys +import logging +from logging.handlers import SysLogHandler, SYSLOG_UDP_PORT +import types + +import iutil + +DEFAULT_TTY_LEVEL = logging.INFO +ENTRY_FORMAT = "%(asctime)s,%(msecs)03d %(levelname)s %(name)s: %(message)s" +TTY_FORMAT = "%(levelname)s %(name)s: %(message)s" +STDOUT_FORMAT = "%(asctime)s %(message)s" +DATE_FORMAT = "%H:%M:%S" + +MAIN_LOG_FILE = "/tmp/anaconda.log" +MAIN_LOG_TTY = "/dev/tty3" +PROGRAM_LOG_FILE = "/tmp/program.log" +ANACONDA_SYSLOG_FACILITY = SysLogHandler.LOG_LOCAL1 + +logLevelMap = {"debug": logging.DEBUG, "info": logging.INFO, + "warning": logging.WARNING, "error": logging.ERROR, + "critical": logging.CRITICAL} + +# sets autoSetLevel for the given handler +def autoSetLevel(handler, value): + handler.autoSetLevel = value + +# all handlers of given logger with autoSetLevel == True are set to level +def setHandlersLevel(logger, level): + map(lambda hdlr: hdlr.setLevel(level), + filter (lambda hdlr: hasattr(hdlr, "autoSetLevel") and hdlr.autoSetLevel, logger.handlers)) + +class AnacondaSyslogHandler(SysLogHandler): + def __init__(self, + address=('localhost', SYSLOG_UDP_PORT), + facility=SysLogHandler.LOG_USER, + tag=''): + self.tag = tag + SysLogHandler.__init__(self, address, facility) + + def emit(self, record): + original_msg = record.msg + record.msg = '%s: %s' %(self.tag, original_msg) + SysLogHandler.emit(self, record) + record.msg = original_msg + +class AnacondaLog: + def __init__ (self): + self.tty_loglevel = DEFAULT_TTY_LEVEL + self.remote_syslog = None + # Create the base of the logger hierarcy. + logger = logging.getLogger("anaconda") + logger.setLevel(logging.DEBUG) + self.addFileHandler(MAIN_LOG_FILE, logger, + minLevel=logging.DEBUG) + self.forwardToSyslog(logger) + # Log to tty3. + if not iutil.isS390() and os.access(MAIN_LOG_TTY, os.W_OK): + self.addFileHandler(MAIN_LOG_TTY, logger, + fmtStr=TTY_FORMAT, + autoLevel=True) + + # External program output log + program_logger = logging.getLogger("program") + program_logger.setLevel(logging.DEBUG) + self.addFileHandler(PROGRAM_LOG_FILE, program_logger, + minLevel=logging.DEBUG) + self.forwardToSyslog(program_logger) + + # Create a second logger for just the stuff we want to dup on + # stdout. Anything written here will also get passed up to the + # parent loggers for processing and possibly be written to the + # log. + stdoutLogger = logging.getLogger("anaconda.stdout") + stdoutLogger.setLevel(logging.INFO) + # Add a handler for the duped stuff. No fancy formatting, thanks. + self.addFileHandler(sys.stdout, stdoutLogger, + fmtStr=STDOUT_FORMAT, minLevel=logging.INFO) + + # Stderr logger + stderrLogger = logging.getLogger("anaconda.stderr") + stderrLogger.setLevel(logging.INFO) + self.addFileHandler(sys.stderr, stderrLogger, + fmtStr=STDOUT_FORMAT, minLevel=logging.INFO) + + # Add a simple handler - file or stream, depending on what we're given. + def addFileHandler (self, file, addToLogger, minLevel=DEFAULT_TTY_LEVEL, + fmtStr=ENTRY_FORMAT, + autoLevel=False): + if isinstance(file, types.StringTypes): + logfileHandler = logging.FileHandler(file) + else: + logfileHandler = logging.StreamHandler(file) + + logfileHandler.setLevel(minLevel) + logfileHandler.setFormatter(logging.Formatter(fmtStr, DATE_FORMAT)) + autoSetLevel(logfileHandler, autoLevel) + addToLogger.addHandler(logfileHandler) + + # Add another logger to the hierarchy. For best results, make sure + # name falls under anaconda in the tree. + def addLogger (self, name, minLevel=DEFAULT_TTY_LEVEL): + newLogger = logging.getLogger(name) + newLogger.setLevel(minLevel) + + # Add a handler for remote syslogs. + def addSysLogHandler (self, logger, host, port=SYSLOG_UDP_PORT, + minLevel=DEFAULT_TTY_LEVEL): + fmt = logging.Formatter("%(levelname)-8s %(message)s") + syslogHandler = SysLogHandler((host, port)) + syslogHandler.setLevel(minLevel) + syslogHandler.setFormatter(fmt) + logger.addHandler(syslogHandler) + + def forwardToSyslog(self, logger): + """Forward everything that goes in the logger to the syslog daemon. + """ + syslogHandler = AnacondaSyslogHandler( + '/dev/log', + ANACONDA_SYSLOG_FACILITY, + logger.name) + syslogHandler.setLevel(logging.DEBUG) + logger.addHandler(syslogHandler) + + def updateRemote(self, remote_syslog): + """Updates the location of remote rsyslogd to forward to. + + Requires updating rsyslogd config and sending SIGHUP to the daemon. + """ + PIDFILE = "/var/run/syslogd.pid" + CFGFILE = "/etc/rsyslog.conf" + TEMPLATE = "*.* @@%s\n" + + self.remote_syslog = remote_syslog + with open(CFGFILE, 'a') as cfgfile: + forward_line = TEMPLATE % remote_syslog + cfgfile.write(forward_line) + with open(PIDFILE, 'r') as pidfile: + pid = int(pidfile.read()) + os.kill(pid, signal.SIGHUP) + +logger = AnacondaLog() diff --git a/backend.py b/backend.py new file mode 100644 index 0000000..2ec2109 --- /dev/null +++ b/backend.py @@ -0,0 +1,314 @@ +# +# backend.py: Interface for installation backends +# +# Copyright (C) 2005, 2006, 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Paul Nasrat +# Jeremy Katz +# + +import glob +import shutil +import iutil +import os, sys +import logging +import backend_log +from constants import * + +import isys +import kickstart +import packages +import storage + +from flags import flags +log = logging.getLogger("anaconda") + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class AnacondaBackend: + def __init__(self, anaconda): + """Abstract backend class all backends should inherit from this + @param instPath: root path for the installation to occur""" + self.anaconda = anaconda + self.instPath = anaconda.rootPath + self.instLog = None + self.modeText = "" + + # some backends may not support upgrading + self.supportsUpgrades = True + self.supportsPackageSelection = False + + # some backends may have a special case for rootfs formatting + # FIXME: we should handle this a little more elegantly + self.skipFormatRoot = False + self.rootFsType = None + + self._loopbackFile = None + + def postAction(self, anaconda): + pass + + def doPreSelection(self, intf, id, instPath): + pass + + def doPostSelection(self, anaconda): + pass + + def doPreInstall(self, anaconda): + self.initLog(anaconda.rootPath) + + def copyFirmware(self, anaconda): + # Multiple driver disks may be loaded, so we need to glob for all + # the firmware files in the common DD firmware directory + for f in glob.glob(DD_EXTRACTED+"/lib/firmware/*"): + try: + shutil.copyfile(f, "%s/lib/firmware/" % anaconda.rootPath) + except IOError, e: + log.error("Could not copy firmware file %s: %s" % (f, e.strerror)) + + def doPostInstall(self, anaconda): + has_iscsi_disk = False + + # See if we have an iscsi disk. If we do we rerun mkinitrd, as + # the initrd might need iscsi-initiator-utils, and chances are + # it was not installed yet the first time mkinitrd was run, as + # mkinitrd does not require it. + root = anaconda.storage.rootDevice + disks = anaconda.storage.devicetree.getDevicesByType("iscsi") + for disk in disks: + if root.dependsOn(disk): + has_iscsi_disk = True + break + + #always copy the firmware files from DD + self.copyFirmware(anaconda) + + if anaconda.extraModules or has_iscsi_disk: + for (n, arch, tag) in self.kernelVersionList(anaconda.rootPath): + packages.recreateInitrd(n, anaconda.rootPath) + + #copy RPMS + for d in glob.glob(DD_RPMS): + shutil.copytree(d, anaconda.rootPath + "/root/" + os.path.basename(d)) + + #copy modules and firmware + if os.path.exists(DD_EXTRACTED): + try: + shutil.copytree(DD_EXTRACTED, anaconda.rootPath + "/root/DD") + except IOError, e: + pass + + storage.writeEscrowPackets(anaconda) + sys.stdout.flush() + backend_log.log.stop() + + def doInstall(self, anaconda): + log.warning("doInstall not implemented for backend!") + raise NotImplementedError + + def initLog(self, instPath): + if not os.path.isdir(instPath + "/root"): + iutil.mkdirChain(instPath + "/root") + + if self.anaconda.upgrade: + logname = '/root/upgrade.log' + else: + logname = '/root/install.log' + + instLogName = instPath + logname + try: + shutil.rmtree (instLogName) + except OSError: + pass + + self.instLog = open(instLogName, "w+") + + syslogname = "%s%s.syslog" % (instPath, logname) + try: + shutil.rmtree (syslogname) + except OSError: + pass + backend_log.log.start(instPath, syslogname) + + if self.anaconda.upgrade: + self.modeText = _("Upgrading %s\n") + else: + self.modeText = _("Installing %s\n") + + def mountInstallImage(self, anaconda, installimg): + if self._loopbackFile and os.path.exists(self._loopbackFile): + return + + # Copy the install.img to the filesystem and switch loopback devices + # to there. Otherwise we won't be able to unmount and swap media. + free = anaconda.storage.fsFreeSpace + self._loopbackFile = "%s%s/rhinstall-install.img" % (anaconda.rootPath, + free[-1][0]) + try: + log.info("transferring install image to install target") + win = anaconda.intf.waitWindow(_("Copying File"), + _("Transferring install image to hard drive")) + shutil.copyfile(installimg, self._loopbackFile) + win.pop() + except Exception, e: + if win: + win.pop() + + log.critical("error transferring install.img: %s" %(e,)) + + if isinstance(e, IOError) and e.errno == 5: + msg = _("An error occurred transferring the install image " + "to your hard drive. This is often cause by " + "damaged or low quality media.") + else: + msg = _("An error occurred transferring the install image " + "to your hard drive. You are probably out of disk " + "space.") + + anaconda.intf.messageWindow(_("Error"), msg) + try: + os.unlink(self._loopbackFile) + except: + pass + + return 1 + + isys.lochangefd("/dev/loop0", self._loopbackFile) + if os.path.ismount("/mnt/stage2"): + isys.umount("/mnt/stage2") + + def removeInstallImage(self): + if self._loopbackFile: + try: + os.unlink(self._loopbackFile) + except SystemError: + pass + + def freetmp(self, anaconda): + # installs that don't use /mnt/stage2 hold the install.img on + # a tmpfs, free this ram if things are tight. + stage2img = "/tmp/install.img" + if os.path.exists(stage2img): + # free up /tmp for more memory before yum is called, + if self.mountInstallImage(anaconda, stage2img): + return DISPATCH_BACK + try: + os.unlink(stage2img) + except SystemError: + log.info("clearing /tmp failed") + return DISPATCH_BACK + + def kernelVersionList(self, rootPath="/"): + return [] + + def getMinimumSizeMB(self, part): + """Return the minimal size for part in megabytes if we can.""" + return 0 + + def doBackendSetup(self, anaconda): + log.warning("doBackendSetup not implemented for backend!") + raise NotImplementedError + + def groupExists(self, group): + log.warning("groupExists not implemented for backend!") + raise NotImplementedError + + def selectGroup(self, group, *args): + log.warning("selectGroup not implemented for backend!") + raise NotImplementedError + + def deselectGroup(self, group, *args): + log.warning("deselectGroup not implemented for backend!") + raise NotImplementedError + + def packageExists(self, pkg): + log.warning("packageExists not implemented for backend!") + raise NotImplementedError + + def selectPackage(self, pkg, *args): + log.warning("selectPackage not implemented for backend!") + raise NotImplementedError + + def deselectPackage(self, pkg, *args): + log.warning("deselectPackage not implemented for backend!") + raise NotImplementedError + + def getDefaultGroups(self, anaconda): + log.warning("getDefaultGroups not implemented for backend!") + raise NotImplementedError + + def resetPackageSelections(self): + # we just leave this one unimplemented if it's not needed + pass + + # write out the %packages section of anaconda-ks.cfg + def writePackagesKS(self, f, anaconda): + log.warning("writePackagesKS not implemented for backend!") + raise NotImplementedError + + # write out any config files that live on the installed system + # (e.g., /etc/yum.repos.d/* files) + def writeConfiguration(self): + log.warning("writeConfig not implemented for backend!") + raise NotImplementedError + + # write out any other kickstart bits the backend requires - no warning + # here because this may not be needed + def writeKS(self, f): + pass + + def getRequiredMedia(self): + log.warning("getRequiredMedia not implmented for backend!") + raise NotImplementedError + + def complete(self, anaconda): + pass + +def doBackendSetup(anaconda): + if anaconda.backend.doBackendSetup(anaconda) == DISPATCH_BACK: + return DISPATCH_BACK + + if anaconda.upgrade: + anaconda.backend.checkSupportedUpgrade(anaconda) + iutil.writeRpmPlatform(anaconda.rootPath) + +def doPostSelection(anaconda): + return anaconda.backend.doPostSelection(anaconda) + +def doPreInstall(anaconda): + anaconda.backend.doPreInstall(anaconda) + +def doPostInstall(anaconda): + anaconda.backend.doPostInstall(anaconda) + +def doInstall(anaconda): + return anaconda.backend.doInstall(anaconda) + +# does this need to be per-backend? we'll just leave here until it does :) +def doBasePackageSelect(anaconda): + if anaconda.ksdata: + anaconda.backend.resetPackageSelections() + kickstart.selectPackages(anaconda) + elif anaconda.displayMode != 't': + anaconda.backend.resetPackageSelections() + anaconda.instClass.setPackageSelection(anaconda) + anaconda.instClass.setGroupSelection(anaconda) + +def writeConfiguration(anaconda): + log.info("Writing main configuration") + anaconda.write() + anaconda.backend.writeConfiguration() diff --git a/backend_log.py b/backend_log.py new file mode 100644 index 0000000..fd11692 --- /dev/null +++ b/backend_log.py @@ -0,0 +1,88 @@ +# backend_log.py +# Logging infrastructure for Anaconda's backend. +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties 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. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Ales Kozumplik +# + +import logging +import os +import signal + +import anaconda_log +import iutil + +SYSLOG_PATH = '/sbin/rsyslogd' +SYSLOG_PIDFILE = '/var/run/rsyslog_backend.pid' +SYSLOG_CFGFILE = '/etc/rsyslog_backend.conf' + +CFG_TEMPLATE = """ +$ModLoad imuxsock +$InputUnixListenSocketHostName sysimage +$AddUnixListenSocket %(socket)s ++sysimage +*.* %(logfile)s;RSYSLOG_TraditionalFileFormat +%(remote_syslog)s +""" + +global_log = logging.getLogger("anaconda") +class BackendSyslog: + def __init__(self): + pass + + def build_cfg(self, root, log): + socket = "%s/dev/log" % (root, ) + remote_syslog = '' + if anaconda_log.logger.remote_syslog: + remote_syslog = "*.* @@%s" % (anaconda_log.logger.remote_syslog, ) + + cfg = CFG_TEMPLATE % { + 'socket' : socket, + 'logfile' : log, + 'remote_syslog' : remote_syslog + } + with open(SYSLOG_CFGFILE, 'w') as cfg_file: + cfg_file.write(cfg) + + def start(self, root, log): + """ Start an rsyslogd instance dedicated for the sysimage. + + Other possibility would be to change configuration and SIGHUP the + existing instance, but it could lose some of its internal queues and + give us problems with remote logging. + """ + self.build_cfg(root, log) + args = ['-c', '4', + '-f', SYSLOG_CFGFILE, + '-i', str(SYSLOG_PIDFILE)] + status = iutil.execWithRedirect(SYSLOG_PATH, args) + if status == 0: + global_log.info("Backend logger started.") + else: + global_log.error("Unable to start backend logger") + + def stop(self): + try: + with open(SYSLOG_PIDFILE, 'r') as pidfile: + pid = int(pidfile.read()) + os.kill(pid, signal.SIGKILL) + except: + return + global_log.info("Backend logger stopped.") + +log = BackendSyslog() diff --git a/baseudev.py b/baseudev.py new file mode 100644 index 0000000..3d9ee45 --- /dev/null +++ b/baseudev.py @@ -0,0 +1,92 @@ +# udev.py +# Python module for querying the udev database for device information. +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This copyrighted material is made available to anyone wishing to use, +# modify, copy, or redistribute it subject to the terms and conditions of +# the GNU General Public License v.2, or (at your option) any later version. +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY expressed or implied, including the implied warranties 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. Any Red Hat trademarks that are incorporated in the +# source code or documentation are not subject to the GNU General Public +# License and may only be used or replicated with the express permission of +# Red Hat, Inc. +# +# Red Hat Author(s): Dave Lehman +# Chris Lumens +# + +import iutil +import os + +import pyudev +global_udev = pyudev.Udev() + +import logging +log = logging.getLogger("storage") + +def udev_enumerate_devices(deviceClass="block"): + devices = global_udev.enumerate_devices(subsystem=deviceClass) + return [path[4:] for path in devices] + +def udev_get_device(sysfs_path): + if not os.path.exists("/sys%s" % sysfs_path): + log.debug("%s does not exist" % sysfs_path) + return None + + # XXX we remove the /sys part when enumerating devices, + # so we have to prepend it when creating the device + dev = global_udev.create_device("/sys" + sysfs_path) + + if dev: + dev["name"] = dev.sysname + dev["sysfs_path"] = sysfs_path + + # now add in the contents of the uevent file since they're handy + dev = udev_parse_uevent_file(dev) + + return dev + +def udev_get_devices(deviceClass="block"): + udev_settle() + entries = [] + for path in udev_enumerate_devices(deviceClass): + entry = udev_get_device(path) + if entry: + entries.append(entry) + return entries + +def udev_parse_uevent_file(dev): + path = os.path.normpath("/sys/%s/uevent" % dev['sysfs_path']) + if not os.access(path, os.R_OK): + return dev + + with open(path) as f: + for line in f.readlines(): + (key, equals, value) = line.strip().partition("=") + if not equals: + continue + + dev[key] = value + + return dev + +def udev_settle(): + # wait maximal 300 seconds for udev to be done running blkid, lvm, + # mdadm etc. This large timeout is needed when running on machines with + # lots of disks, or with slow disks + argv = ["settle", "--timeout=300"] + + iutil.execWithRedirect("udevadm", argv, stderr="/dev/null") + +def udev_trigger(subsystem=None, action="add"): + argv = ["trigger", "--action=%s" % action] + if subsystem: + argv.append("--subsystem-match=%s" % subsystem) + + iutil.execWithRedirect("udevadm", argv, stderr="/dev/null") diff --git a/bootdisk/Makefile.am b/bootdisk/Makefile.am new file mode 100644 index 0000000..8615f6a --- /dev/null +++ b/bootdisk/Makefile.am @@ -0,0 +1,22 @@ +# bootdisk/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +SUBDIRS = i386 ppc s390x x86_64 + +MAINTAINERCLEANFILES = Makefile.in diff --git a/bootdisk/Makefile.in b/bootdisk/Makefile.in new file mode 100644 index 0000000..771d9ac --- /dev/null +++ b/bootdisk/Makefile.in @@ -0,0 +1,654 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# bootdisk/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bootdisk +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ + html-recursive info-recursive install-data-recursive \ + install-dvi-recursive install-exec-recursive \ + install-html-recursive install-info-recursive \ + install-pdf-recursive install-ps-recursive install-recursive \ + installcheck-recursive installdirs-recursive pdf-recursive \ + ps-recursive uninstall-recursive +RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ + distclean-recursive maintainer-clean-recursive +AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ + $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ + distdir +ETAGS = etags +CTAGS = ctags +DIST_SUBDIRS = $(SUBDIRS) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +am__relativize = \ + dir0=`pwd`; \ + sed_first='s,^\([^/]*\)/.*$$,\1,'; \ + sed_rest='s,^[^/]*/*,,'; \ + sed_last='s,^.*/\([^/]*\)$$,\1,'; \ + sed_butlast='s,/*[^/]*$$,,'; \ + while test -n "$$dir1"; do \ + first=`echo "$$dir1" | sed -e "$$sed_first"`; \ + if test "$$first" != "."; then \ + if test "$$first" = ".."; then \ + dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ + dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ + else \ + first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ + if test "$$first2" = "$$first"; then \ + dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ + else \ + dir2="../$$dir2"; \ + fi; \ + dir0="$$dir0"/"$$first"; \ + fi; \ + fi; \ + dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ + done; \ + reldir="$$dir2" +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +SUBDIRS = i386 ppc s390x x86_64 +MAINTAINERCLEANFILES = Makefile.in +all: all-recursive + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bootdisk/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bootdisk/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +# This directory's subdirectories are mostly independent; you can cd +# into them and run `make' without going through this Makefile. +# To change the values of `make' variables: instead of editing Makefiles, +# (1) if the variable is set in `config.status', edit `config.status' +# (which will cause the Makefiles to be regenerated when you run `make'); +# (2) otherwise, pass the desired values on the `make' command line. +$(RECURSIVE_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + target=`echo $@ | sed s/-recursive//`; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + dot_seen=yes; \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done; \ + if test "$$dot_seen" = "no"; then \ + $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ + fi; test -z "$$fail" + +$(RECURSIVE_CLEAN_TARGETS): + @fail= failcom='exit 1'; \ + for f in x $$MAKEFLAGS; do \ + case $$f in \ + *=* | --[!k]*);; \ + *k*) failcom='fail=yes';; \ + esac; \ + done; \ + dot_seen=no; \ + case "$@" in \ + distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ + *) list='$(SUBDIRS)' ;; \ + esac; \ + rev=''; for subdir in $$list; do \ + if test "$$subdir" = "."; then :; else \ + rev="$$subdir $$rev"; \ + fi; \ + done; \ + rev="$$rev ."; \ + target=`echo $@ | sed s/-recursive//`; \ + for subdir in $$rev; do \ + echo "Making $$target in $$subdir"; \ + if test "$$subdir" = "."; then \ + local_target="$$target-am"; \ + else \ + local_target="$$target"; \ + fi; \ + ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ + || eval $$failcom; \ + done && test -z "$$fail" +tags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ + done +ctags-recursive: + list='$(SUBDIRS)'; for subdir in $$list; do \ + test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ + done + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ + include_option=--etags-include; \ + empty_fix=.; \ + else \ + include_option=--include; \ + empty_fix=; \ + fi; \ + list='$(SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test ! -f $$subdir/TAGS || \ + set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ + fi; \ + done; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + test -d "$(distdir)/$$subdir" \ + || $(MKDIR_P) "$(distdir)/$$subdir" \ + || exit 1; \ + fi; \ + done + @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ + if test "$$subdir" = .; then :; else \ + dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ + $(am__relativize); \ + new_distdir=$$reldir; \ + dir1=$$subdir; dir2="$(top_distdir)"; \ + $(am__relativize); \ + new_top_distdir=$$reldir; \ + echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ + echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ + ($(am__cd) $$subdir && \ + $(MAKE) $(AM_MAKEFLAGS) \ + top_distdir="$$new_top_distdir" \ + distdir="$$new_distdir" \ + am__remove_distdir=: \ + am__skip_length_check=: \ + am__skip_mode_fix=: \ + distdir) \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-recursive +all-am: Makefile +installdirs: installdirs-recursive +installdirs-am: +install: install-recursive +install-exec: install-exec-recursive +install-data: install-data-recursive +uninstall: uninstall-recursive + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-recursive +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-recursive + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-recursive + -rm -f Makefile +distclean-am: clean-am distclean-generic distclean-tags + +dvi: dvi-recursive + +dvi-am: + +html: html-recursive + +html-am: + +info: info-recursive + +info-am: + +install-data-am: + +install-dvi: install-dvi-recursive + +install-dvi-am: + +install-exec-am: + +install-html: install-html-recursive + +install-html-am: + +install-info: install-info-recursive + +install-info-am: + +install-man: + +install-pdf: install-pdf-recursive + +install-pdf-am: + +install-ps: install-ps-recursive + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-recursive + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-recursive + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-recursive + +pdf-am: + +ps: ps-recursive + +ps-am: + +uninstall-am: + +.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ + install-am install-strip tags-recursive + +.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ + all all-am check check-am clean clean-generic clean-libtool \ + ctags ctags-recursive distclean distclean-generic \ + distclean-libtool distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \ + uninstall uninstall-am + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bootdisk/i386/Makefile.am b/bootdisk/i386/Makefile.am new file mode 100644 index 0000000..32f1188 --- /dev/null +++ b/bootdisk/i386/Makefile.am @@ -0,0 +1,25 @@ +# bootdisk/i386/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +if IS_I386 +bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +dist_boot_DATA = boot.msg grub.conf syslinux.cfg +endif + +MAINTAINERCLEANFILES = Makefile.in diff --git a/bootdisk/i386/Makefile.in b/bootdisk/i386/Makefile.in new file mode 100644 index 0000000..e185e77 --- /dev/null +++ b/bootdisk/i386/Makefile.in @@ -0,0 +1,503 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# bootdisk/i386/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bootdisk/i386 +DIST_COMMON = $(am__dist_boot_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__dist_boot_DATA_DIST = boot.msg grub.conf syslinux.cfg +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bootdir)" +DATA = $(dist_boot_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@IS_I386_TRUE@bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +@IS_I386_TRUE@dist_boot_DATA = boot.msg grub.conf syslinux.cfg +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bootdisk/i386/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bootdisk/i386/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_bootDATA: $(dist_boot_DATA) + @$(NORMAL_INSTALL) + test -z "$(bootdir)" || $(MKDIR_P) "$(DESTDIR)$(bootdir)" + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bootdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bootdir)" || exit $$?; \ + done + +uninstall-dist_bootDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bootdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bootdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bootdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_bootDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_bootDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_bootDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dist_bootDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bootdisk/i386/boot.msg b/bootdisk/i386/boot.msg new file mode 100644 index 0000000..ff54899 --- /dev/null +++ b/bootdisk/i386/boot.msg @@ -0,0 +1,5 @@ + +splash.lss + + - Press the 0107 key to begin the installation process. + diff --git a/bootdisk/i386/grub.conf b/bootdisk/i386/grub.conf new file mode 100644 index 0000000..6e94d05 --- /dev/null +++ b/bootdisk/i386/grub.conf @@ -0,0 +1,8 @@ +#debug --graphics +default=0 +splashimage=@SPLASHPATH@ +timeout 5 +hiddenmenu +title @PRODUCT@ @VERSION@ + kernel @KERNELPATH@ + initrd @INITRDPATH@ diff --git a/bootdisk/i386/syslinux.cfg b/bootdisk/i386/syslinux.cfg new file mode 100644 index 0000000..06a0842 --- /dev/null +++ b/bootdisk/i386/syslinux.cfg @@ -0,0 +1,33 @@ +default linux +prompt 1 +timeout 600 + +display boot.msg + +menu background splash.jpg +menu title Welcome to @PRODUCT@ @VERSION@! +menu color border 0 #ffffffff #00000000 +menu color sel 7 #ffffffff #ff000000 +menu color title 0 #ffffffff #00000000 +menu color tabmsg 0 #ffffffff #00000000 +menu color unsel 0 #ffffffff #00000000 +menu color hotsel 0 #ff000000 #ffffffff +menu color hotkey 7 #ffffffff #ff000000 +menu color scrollbar 0 #ffffffff #00000000 + +label linux + menu label ^Install a new system or upgrade an existing system + menu default + kernel vmlinuz + append initrd=initrd.img +label vesa + menu label Install system with ^basic video driver + kernel vmlinuz + append initrd=initrd.img xdriver=vesa nomodeset +label rescue + menu label ^Rescue installed system + kernel vmlinuz + append initrd=initrd.img rescue +label local + menu label Boot from ^local drive + localboot 0xffff diff --git a/bootdisk/ppc/Makefile.am b/bootdisk/ppc/Makefile.am new file mode 100644 index 0000000..f754c3b --- /dev/null +++ b/bootdisk/ppc/Makefile.am @@ -0,0 +1,26 @@ +# bootdisk/ppc/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +if IS_PPC +bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +dist_boot_DATA = magic ofboot.b yaboot.conf.in bootinfo.txt mapping \ + yaboot.conf.3264 +endif + +MAINTAINERCLEANFILES = Makefile.in diff --git a/bootdisk/ppc/Makefile.in b/bootdisk/ppc/Makefile.in new file mode 100644 index 0000000..74543f7 --- /dev/null +++ b/bootdisk/ppc/Makefile.in @@ -0,0 +1,506 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# bootdisk/ppc/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bootdisk/ppc +DIST_COMMON = $(am__dist_boot_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__dist_boot_DATA_DIST = magic ofboot.b yaboot.conf.in bootinfo.txt \ + mapping yaboot.conf.3264 +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bootdir)" +DATA = $(dist_boot_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@IS_PPC_TRUE@bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +@IS_PPC_TRUE@dist_boot_DATA = magic ofboot.b yaboot.conf.in bootinfo.txt mapping \ +@IS_PPC_TRUE@ yaboot.conf.3264 + +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bootdisk/ppc/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bootdisk/ppc/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_bootDATA: $(dist_boot_DATA) + @$(NORMAL_INSTALL) + test -z "$(bootdir)" || $(MKDIR_P) "$(DESTDIR)$(bootdir)" + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bootdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bootdir)" || exit $$?; \ + done + +uninstall-dist_bootDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bootdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bootdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bootdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_bootDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_bootDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_bootDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dist_bootDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bootdisk/ppc/bootinfo.txt b/bootdisk/ppc/bootinfo.txt new file mode 100644 index 0000000..ac766d4 --- /dev/null +++ b/bootdisk/ppc/bootinfo.txt @@ -0,0 +1,169 @@ + Linux +Linux +boot &device;:\ppc\chrp\yaboot + + FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF +FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 +00 00 00 00 00 00 diff --git a/bootdisk/ppc/magic b/bootdisk/ppc/magic new file mode 100644 index 0000000..387727c --- /dev/null +++ b/bootdisk/ppc/magic @@ -0,0 +1,81 @@ +# +# Example magic file for mkhybrid +# +# The "message" for the offset MUST be 4 characters for the CREATOR +# and 4 characters for the TYPE - white space is optional between them. +# Any other characters on this line are ignored. Continuation lines (starting +# with '>') are also ignored i.e. only the initial offset lines are used. +# +# The continuation lines are given here, but they do not need to exist. + +# +# James Pearson 20/5/98 + +# off type test message + +# GIF +0 string GIF8 8BIM GIFf +>4 string 7a \b, version 8%s, +>4 string 9a \b, version 8%s, +>6 leshort >0 %hd x +>8 leshort >0 %hd, +#>10 byte &0x80 color mapped, +#>10 byte&0x07 =0x00 2 colors +#>10 byte&0x07 =0x01 4 colors +#>10 byte&0x07 =0x02 8 colors +#>10 byte&0x07 =0x03 16 colors +#>10 byte&0x07 =0x04 32 colors +#>10 byte&0x07 =0x05 64 colors +#>10 byte&0x07 =0x06 128 colors +#>10 byte&0x07 =0x07 256 colors + +# JPEG images +# +0 ubeshort 0xffd8 8BIM JPEG image data + +# StuffIt +# +0 string SIT! SIT!SIT! + +# standard unix compress +0 string \037\235 LZIV ZIVU +>2 byte&0x80 >0 block compressed +>2 byte&0x1f x %d bits + +# gzip (GNU zip, not to be confused with Info-ZIP or PKWARE zip archiver) +0 string \037\213 GNUz ZIVU gzip compressed data +>2 byte <8 \b, reserved method, +>2 byte 8 \b, deflated, +>3 byte &0x01 ASCII, +>3 byte &0x02 continuation, +>3 byte &0x04 extra field, +>3 byte &0x08 original filename, +>3 byte &0x10 comment, +>3 byte &0x20 encrypted, +>4 ledate x last modified: %s, +>8 byte 2 max compression, +>8 byte 4 max speed, +>9 byte =0x00 os: MS-DOS +>9 byte =0x01 os: Amiga +>9 byte =0x02 os: VMS +>9 byte =0x03 os: Unix +>9 byte =0x05 os: Atari +>9 byte =0x06 os: OS/2 +>9 byte =0x07 os: MacOS +>9 byte =0x0A os: Tops/20 +>9 byte =0x0B os: Win/32 + +# Postscript +0 string %! ASPSTEXT +>2 string PS-Adobe- conforming +>>11 string >\0 at level %.3s +>>>15 string EPS - type %s +>>>15 string Query - type %s +>>>15 string ExitServer - type %s +# Some PCs have the annoying habit of adding a ^D as a document separator +0 string \004%! ASPS TEXT PostScript document text +>3 string PS-Adobe- conforming +>>12 string >\0 at level %.3s +>>>16 string EPS - type %s +>>>16 string Query - type %s +>>>16 string ExitServer - type %s diff --git a/bootdisk/ppc/mapping b/bootdisk/ppc/mapping new file mode 100644 index 0000000..cf83076 --- /dev/null +++ b/bootdisk/ppc/mapping @@ -0,0 +1,27 @@ +# Example filename mapping file +# +# yaboot Raw 'UNIX' 'boot' "Bootstrap" +# vmlinux Raw 'UNIX' 'boot' "Bootstrap" +# +# EXTN XLate CREATOR TYPE Comment +COPYING Ascii 'ttxt' 'ttro' "Text File" +CREDITS Ascii 'ttxt' 'ttro' "Text File" +README Ascii 'ttxt' 'ttro' "Text File" +RPM-GPG-KEY Ascii 'ttxt' 'ttro' "Text File" +RELEASE_NOTES Ascii 'ttxt' 'ttro' "Text File" +.b Raw 'chrp' 'tbxi' "Macintosh Toolbox ROM file" +.gif Raw '8BIM' 'GIFf' "Gif File" +.jpg Raw '8BIM' 'JPEG' "Jpeg File" +.tif Raw '8BIM' 'TIFF' "Photoshop TIFF image" +.hqx Ascii 'BnHq' 'TEXT' "BinHex file" +.doc Raw 'MSWD' 'WDBN' "Word file" +.mov Raw 'TVOD' 'MooV' "QuickTime Movie" +.html Ascii 'MOSS' 'TEXT' "HTML File" +.htm Ascii 'MOSS' 'TEXT' "HTML File" +.conf Ascii 'ttxt' 'TEXT' "config file" +.txt Ascii 'ttxt' 'TEXT' "Text File" +.tbxi Raw 'chrp' 'tbxi' "Macintosh Toolbox ROM file" +.sea Raw 'aust' 'APPL' "Self Expanding Archive" +.sit Raw 'SIT!' 'SITD' "Stuffit Expander file" +* Raw '????' '????' "Unknown" + diff --git a/bootdisk/ppc/ofboot.b b/bootdisk/ppc/ofboot.b new file mode 100644 index 0000000..c811894 --- /dev/null +++ b/bootdisk/ppc/ofboot.b @@ -0,0 +1,74 @@ + + +MacRISC MacRISC3 MacRISC4 + + + +Boot Chooser + + + +" screen" output +load-base release-load-area +" /cpus/@0" find-package if + " 64-bit" rot get-package-property 0= if + 2drop + " boot cd:,\ppc\mac\yaboot conf=cd:,\ppc\ppc64\yaboot.conf" eval + else + " boot cd:,\ppc\mac\yaboot conf=cd:,\ppc\ppc32\yaboot.conf" eval + then +then + + + +1010 +000000000000F8FEACF6000000000000 +0000000000F5FFFFFEFEF50000000000 +00000000002BFAFEFAFCF70000000000 +0000000000F65D5857812B0000000000 +0000000000F5350B2F88560000000000 +0000000000F6335708F8FE0000000000 +00000000005600F600F5FD8100000000 +00000000F9F8000000F5FAFFF8000000 +000000008100F5F50000F6FEFE000000 +000000F8F700F500F50000FCFFF70000 +00000088F70000F50000F5FCFF2B0000 +0000002F582A00F5000008ADE02C0000 +00090B0A35A62B0000002D3B350A0000 +000A0A0B0B3BF60000505E0B0A0B0A00 +002E350B0B2F87FAFCF45F0B2E090000 +00000007335FF82BF72B575907000000 +000000000000ACFFFF81000000000000 +000000000081FFFFFFFF810000000000 +0000000000FBFFFFFFFFAC0000000000 +000000000081DFDFDFFFFB0000000000 +000000000081DD5F83FFFD0000000000 +000000000081DDDF5EACFF0000000000 +0000000000FDF981F981FFFF00000000 +00000000FFACF9F9F981FFFFAC000000 +00000000FFF98181F9F981FFFF000000 +000000ACACF981F981F9F9FFFFAC0000 +000000FFACF9F981F9F981FFFFFB0000 +00000083DFFBF981F9F95EFFFFFC0000 +005F5F5FDDFFFBF9F9F983DDDD5F0000 +005F5F5F5FDD81F9F9E7DF5F5F5F5F00 +0083DD5F5F83FFFFFFFFDF5F835F0000 +000000FBDDDFACFBACFBDFDFFB000000 +000000000000FFFFFFFF000000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFF0000000000 +0000000000FFFFFFFFFFFFFF00000000 +00000000FFFFFFFFFFFFFFFFFF000000 +00000000FFFFFFFFFFFFFFFFFF000000 +000000FFFFFFFFFFFFFFFFFFFFFF0000 +000000FFFFFFFFFFFFFFFFFFFFFF0000 +000000FFFFFFFFFFFFFFFFFFFFFF0000 +00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 +00FFFFFFFFFFFFFFFFFFFFFFFFFFFF00 +00FFFFFFFFFFFFFFFFFFFFFFFFFF0000 +000000FFFFFFFFFFFFFFFFFFFF000000 + + diff --git a/bootdisk/ppc/yaboot.conf.3264 b/bootdisk/ppc/yaboot.conf.3264 new file mode 100644 index 0000000..8b5af08 --- /dev/null +++ b/bootdisk/ppc/yaboot.conf.3264 @@ -0,0 +1,14 @@ +init-message = "\nWelcome to the %PRODUCT% %VERSION% installer!\nUse 'linux32' for 32-bit kernel.\n\n" +timeout=6000 +default=linux + +image=/ppc/ppc64/vmlinuz + label=linux64 + alias=linux + initrd=/ppc/ppc64/ramdisk.image.gz + read-only + +image=/ppc/ppc32/vmlinuz + label=linux32 + initrd=/ppc/ppc32/ramdisk.image.gz + read-only diff --git a/bootdisk/ppc/yaboot.conf.in b/bootdisk/ppc/yaboot.conf.in new file mode 100644 index 0000000..d06768a --- /dev/null +++ b/bootdisk/ppc/yaboot.conf.in @@ -0,0 +1,8 @@ +init-message = "\nWelcome to the %BITS%-bit %PRODUCT% %VERSION% installer!\nHit for boot options.\n\n" +timeout=6000 +default=linux + +image=/ppc/ppc%BITS%/vmlinuz + label=linux + initrd=/ppc/ppc%BITS%/ramdisk.image.gz + read-only diff --git a/bootdisk/s390x/Makefile.am b/bootdisk/s390x/Makefile.am new file mode 100644 index 0000000..3c21560 --- /dev/null +++ b/bootdisk/s390x/Makefile.am @@ -0,0 +1,25 @@ +# bootdisk/s390x/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +if IS_S390 +bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +dist_boot_DATA = generic.ins generic.prm redhat.exec +endif + +MAINTAINERCLEANFILES = Makefile.in diff --git a/bootdisk/s390x/Makefile.in b/bootdisk/s390x/Makefile.in new file mode 100644 index 0000000..0b8e740 --- /dev/null +++ b/bootdisk/s390x/Makefile.in @@ -0,0 +1,503 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# bootdisk/s390x/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bootdisk/s390x +DIST_COMMON = $(am__dist_boot_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__dist_boot_DATA_DIST = generic.ins generic.prm redhat.exec +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bootdir)" +DATA = $(dist_boot_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@IS_S390_TRUE@bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +@IS_S390_TRUE@dist_boot_DATA = generic.ins generic.prm redhat.exec +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bootdisk/s390x/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bootdisk/s390x/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_bootDATA: $(dist_boot_DATA) + @$(NORMAL_INSTALL) + test -z "$(bootdir)" || $(MKDIR_P) "$(DESTDIR)$(bootdir)" + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bootdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bootdir)" || exit $$?; \ + done + +uninstall-dist_bootDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bootdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bootdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bootdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_bootDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_bootDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_bootDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dist_bootDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bootdisk/s390x/generic.ins b/bootdisk/s390x/generic.ins new file mode 100644 index 0000000..9f67e58 --- /dev/null +++ b/bootdisk/s390x/generic.ins @@ -0,0 +1,5 @@ +* minimal lpar ins file +images/kernel.img 0x00000000 +images/initrd.img 0x02000000 +images/generic.prm 0x00010480 +images/initrd.size 0x00010410 diff --git a/bootdisk/s390x/generic.prm b/bootdisk/s390x/generic.prm new file mode 100644 index 0000000..e953ce2 --- /dev/null +++ b/bootdisk/s390x/generic.prm @@ -0,0 +1 @@ +root=/dev/ram0 ro ip=off ramdisk_size=40000 cio_ignore=all,!0.0.0009 diff --git a/bootdisk/s390x/redhat.exec b/bootdisk/s390x/redhat.exec new file mode 100644 index 0000000..f1e5931 --- /dev/null +++ b/bootdisk/s390x/redhat.exec @@ -0,0 +1,9 @@ +/* */ +'CL RDR' +'PURGE RDR ALL' +'SPOOL PUNCH * RDR' +'PUNCH KERNEL IMG A (NOH' +'PUNCH GENERIC PRM A (NOH' +'PUNCH INITRD IMG A (NOH' +'CH RDR ALL KEEP NOHOLD' +'I 00C' diff --git a/bootdisk/x86_64/Makefile.am b/bootdisk/x86_64/Makefile.am new file mode 100644 index 0000000..78886cd --- /dev/null +++ b/bootdisk/x86_64/Makefile.am @@ -0,0 +1,25 @@ +# bootdisk/x86_64/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +if IS_X86_64 +bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +dist_boot_DATA = boot.msg grub.conf syslinux.cfg +endif + +MAINTAINERCLEANFILES = Makefile.in diff --git a/bootdisk/x86_64/Makefile.in b/bootdisk/x86_64/Makefile.in new file mode 100644 index 0000000..fda555c --- /dev/null +++ b/bootdisk/x86_64/Makefile.in @@ -0,0 +1,503 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# bootdisk/x86_64/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = bootdisk/x86_64 +DIST_COMMON = $(am__dist_boot_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__dist_boot_DATA_DIST = boot.msg grub.conf syslinux.cfg +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bootdir)" +DATA = $(dist_boot_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@IS_X86_64_TRUE@bootdir = $(libdir)/$(PACKAGE_NAME)-runtime/boot +@IS_X86_64_TRUE@dist_boot_DATA = boot.msg grub.conf syslinux.cfg +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign bootdisk/x86_64/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign bootdisk/x86_64/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_bootDATA: $(dist_boot_DATA) + @$(NORMAL_INSTALL) + test -z "$(bootdir)" || $(MKDIR_P) "$(DESTDIR)$(bootdir)" + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bootdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bootdir)" || exit $$?; \ + done + +uninstall-dist_bootDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_boot_DATA)'; test -n "$(bootdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(bootdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bootdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(bootdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_bootDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_bootDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_bootDATA install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-dist_bootDATA + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/bootdisk/x86_64/boot.msg b/bootdisk/x86_64/boot.msg new file mode 100644 index 0000000..ff54899 --- /dev/null +++ b/bootdisk/x86_64/boot.msg @@ -0,0 +1,5 @@ + +splash.lss + + - Press the 0107 key to begin the installation process. + diff --git a/bootdisk/x86_64/grub.conf b/bootdisk/x86_64/grub.conf new file mode 100644 index 0000000..6e94d05 --- /dev/null +++ b/bootdisk/x86_64/grub.conf @@ -0,0 +1,8 @@ +#debug --graphics +default=0 +splashimage=@SPLASHPATH@ +timeout 5 +hiddenmenu +title @PRODUCT@ @VERSION@ + kernel @KERNELPATH@ + initrd @INITRDPATH@ diff --git a/bootdisk/x86_64/syslinux.cfg b/bootdisk/x86_64/syslinux.cfg new file mode 100644 index 0000000..06a0842 --- /dev/null +++ b/bootdisk/x86_64/syslinux.cfg @@ -0,0 +1,33 @@ +default linux +prompt 1 +timeout 600 + +display boot.msg + +menu background splash.jpg +menu title Welcome to @PRODUCT@ @VERSION@! +menu color border 0 #ffffffff #00000000 +menu color sel 7 #ffffffff #ff000000 +menu color title 0 #ffffffff #00000000 +menu color tabmsg 0 #ffffffff #00000000 +menu color unsel 0 #ffffffff #00000000 +menu color hotsel 0 #ff000000 #ffffffff +menu color hotkey 7 #ffffffff #ff000000 +menu color scrollbar 0 #ffffffff #00000000 + +label linux + menu label ^Install a new system or upgrade an existing system + menu default + kernel vmlinuz + append initrd=initrd.img +label vesa + menu label Install system with ^basic video driver + kernel vmlinuz + append initrd=initrd.img xdriver=vesa nomodeset +label rescue + menu label ^Rescue installed system + kernel vmlinuz + append initrd=initrd.img rescue +label local + menu label Boot from ^local drive + localboot 0xffff diff --git a/bootloader.py b/bootloader.py new file mode 100644 index 0000000..e2b06a8 --- /dev/null +++ b/bootloader.py @@ -0,0 +1,241 @@ +# +# bootloader.py: anaconda bootloader shims +# +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Erik Troan +# Jeremy Katz +# + +import isys +import parted +import os, sys +import iutil +import string +from flags import flags +from constants import * +from storage.devices import devicePathToName +from storage import getReleaseString +from booty.util import getDiskPart + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") + +import booty +from booty import bootloaderInfo, checkbootloader + +def isEfiSystemPartition(part): + if not part.active: + return False + return (part.disk.type == "gpt" and + part.name == "EFI System Partition" and + part.getFlag(parted.PARTITION_BOOT) and + part.fileSystem.type in ("fat16", "fat32") and + isys.readFSLabel(part.getDeviceNodeName()) != "ANACONDA") + +def bootloaderSetupChoices(anaconda): + if anaconda.dir == DISPATCH_BACK: + rc = anaconda.intf.messageWindow(_("Warning"), + _("Filesystems have already been activated. You " + "cannot go back past this point.\n\nWould you like to " + "continue with the installation?"), + type="custom", custom_icon=["error","error"], + custom_buttons=[_("_Exit installer"), _("_Continue")]) + + if rc == 0: + sys.exit(0) + return DISPATCH_FORWARD + + if anaconda.ksdata and anaconda.ksdata.bootloader.driveorder: + anaconda.bootloader.updateDriveList(anaconda.ksdata.bootloader.driveorder) + else: + #We want the selected bootloader drive to be preferred + pref = anaconda.bootloader.drivelist[:1] + anaconda.bootloader.updateDriveList(pref) + + if iutil.isEfi() and not anaconda.bootloader.device: + bootPart = None + partitions = anaconda.storage.partitions + for part in partitions: + if part.partedPartition.active and isEfiSystemPartition(part.partedPartition): + bootPart = part.name + break + if bootPart: + anaconda.bootloader.setDevice(bootPart) + +# iSeries bootloader on upgrades + if iutil.getPPCMachine() == "iSeries" and not anaconda.bootloader.device: + bootPart = None + partitions = anaconda.storage.partitions + for part in partitions: + if part.partedPartition.active and \ + part.partedPartition.getFlag(parted.PARTITION_PREP): + bootPart = part.name + break + if bootPart: + anaconda.bootloader.setDevice(bootPart) + + choices = anaconda.platform.bootloaderChoices(anaconda.bootloader) + if not choices and iutil.getPPCMachine() != "iSeries": + anaconda.dispatch.skipStep("instbootloader") + else: + anaconda.dispatch.skipStep("instbootloader", skip = 0) + + # FIXME: ... + anaconda.bootloader.images.setup(anaconda.storage) + + if anaconda.bootloader.defaultDevice != None and choices: + keys = choices.keys() + # there are only two possible things that can be in the keys + # mbr and boot. boot is ALWAYS present. so if the dev isn't + # listed, it was mbr and we should nicely fall back to boot + if anaconda.bootloader.defaultDevice not in keys: + log.warning("MBR not suitable as boot device; installing to partition") + anaconda.bootloader.defaultDevice = "boot" + anaconda.bootloader.setDevice(choices[anaconda.bootloader.defaultDevice][0]) + elif choices and iutil.isMactel() and choices.has_key("boot"): # haccckkkk + anaconda.bootloader.setDevice(choices["boot"][0]) + elif choices and choices.has_key("mbr"): + anaconda.bootloader.setDevice(choices["mbr"][0]) + elif choices and choices.has_key("boot"): + anaconda.bootloader.setDevice(choices["boot"][0]) + +def fixedMdraidGrubTarget(anaconda, grubTarget): + # handle change made in F12 - before F12 mdX used to mean installation + # into mbrs of mdX members' disks + fixedGrubTarget = grubTarget + (product, version) = getReleaseString(anaconda.rootPath) + try: + if float(version) < 12: + stage1Devs = anaconda.bootloader.getPhysicalDevices(grubTarget) + fixedGrubTarget = getDiskPart(stage1Devs[0], anaconda.storage)[0] + log.info("Mdraid grub upgrade: %s -> %s" % (grubTarget, + fixedGrubTarget)) + except ValueError: + log.warning("Can't decide mdraid grub upgrade fix, product: %s, version: %s" % (product, version)) + + return fixedGrubTarget + +def writeBootloader(anaconda): + def dosync(): + isys.sync() + isys.sync() + isys.sync() + + if anaconda.bootloader.defaultDevice == -1: + return + + if anaconda.bootloader.doUpgradeOnly: + (bootType, theDev) = checkbootloader.getBootloaderTypeAndBoot(anaconda.rootPath, storage=anaconda.storage) + + anaconda.bootloader.doUpgradeonly = 1 + if bootType == "GRUB": + if theDev.startswith('/dev/md'): + theDev = fixedMdraidGrubTarget(anaconda, + devicePathToName(theDev)) + anaconda.bootloader.useGrubVal = 1 + anaconda.bootloader.setDevice(devicePathToName(theDev)) + else: + anaconda.bootloader.doUpgradeOnly = 0 + + w = anaconda.intf.waitWindow(_("Bootloader"), _("Installing bootloader.")) + + kernelList = [] + otherList = [] + # getDefault needs to return a device, but that's too invasive for now. + rootDev = anaconda.storage.rootDevice + + if not anaconda.bootloader.images.getDefault(): + defaultDev = None + else: + defaultDev = anaconda.storage.devicetree.getDeviceByName(anaconda.bootloader.images.getDefault()) + + kernelLabel = None + kernelLongLabel = None + + for (dev, (label, longlabel, type)) in anaconda.bootloader.images.getImages().items(): + if (rootDev is None and kernelLabel is None) or (dev == rootDev.name): + kernelLabel = label + kernelLongLabel = longlabel + elif (not defaultDev and not dev) or (defaultDev and dev == defaultDev.name): + otherList = [(label, longlabel, dev)] + otherList + else: + otherList.append((label, longlabel, dev)) + + if kernelLabel is None: + log.error("unable to find default image, bailing") + w.pop() + return + + plainLabelUsed = 0 + defkern = "kernel" + for (version, arch, nick) in \ + anaconda.backend.kernelVersionList(anaconda.rootPath): + if plainLabelUsed: + kernelList.append(("%s-%s" %(kernelLabel, nick), + "%s-%s" %(kernelLongLabel, nick), + version)) + else: + kernelList.append((kernelLabel, kernelLongLabel, version)) + if nick != "base": + defkern = "kernel-%s" %(nick,) + plainLabelUsed = 1 + + f = open(anaconda.rootPath + "/etc/sysconfig/kernel", "w+") + f.write("# UPDATEDEFAULT specifies if new-kernel-pkg should make\n" + "# new kernels the default\n") + # only update the default if we're setting the default to linux (#156678) + if (not defaultDev and not rootDev) or (defaultDev and rootDev.name == defaultDev.name): + f.write("UPDATEDEFAULT=yes\n") + else: + f.write("UPDATEDEFAULT=no\n") + f.write("\n") + f.write("# DEFAULTKERNEL specifies the default kernel package type\n") + f.write("DEFAULTKERNEL=%s\n" %(defkern,)) + f.close() + + dosync() + try: + rc = anaconda.bootloader.write(anaconda.rootPath, anaconda.bootloader, + kernelList, otherList, defaultDev) + w.pop() + + if rc and anaconda.intf: + anaconda.intf.messageWindow(_("Warning"), + _("There was an error installing the bootloader. " + "The system may not be bootable.")) + except booty.BootyNoKernelWarning: + w.pop() + if anaconda.intf: + anaconda.intf.messageWindow(_("Warning"), + _("No kernel packages were installed on the " + "system. Bootloader configuration " + "will not be changed.")) + + dosync() + +def hasWindows(bl): + foundWindows = False + for (k,v) in bl.images.getImages().iteritems(): + if v[0].lower() == 'other' and v[2] in bootloaderInfo.dosFilesystems: + foundWindows = True + break + + return foundWindows diff --git a/booty/Makefile.am b/booty/Makefile.am new file mode 100644 index 0000000..7cfc29f --- /dev/null +++ b/booty/Makefile.am @@ -0,0 +1,23 @@ +# booty/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +bootydir = $(libdir)/$(PACKAGE_NAME)/booty +booty_PYTHON = *.py + +MAINTAINERCLEANFILES = Makefile.in diff --git a/booty/Makefile.in b/booty/Makefile.in new file mode 100644 index 0000000..92cc32c --- /dev/null +++ b/booty/Makefile.in @@ -0,0 +1,519 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# booty/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = booty +DIST_COMMON = $(booty_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(bootydir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +bootydir = $(libdir)/$(PACKAGE_NAME)/booty +booty_PYTHON = *.py +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign booty/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign booty/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-bootyPYTHON: $(booty_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(bootydir)" || $(MKDIR_P) "$(DESTDIR)$(bootydir)" + @list='$(booty_PYTHON)'; dlist=; list2=; test -n "$(bootydir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(bootydir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(bootydir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(bootydir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(bootydir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-bootyPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(booty_PYTHON)'; test -n "$(bootydir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(bootydir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(bootydir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(bootydir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(bootydir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(bootydir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(bootydir)" && rm -f $$fileso +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(bootydir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-bootyPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-bootyPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-bootyPYTHON install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-bootyPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/booty/__init__.py b/booty/__init__.py new file mode 100644 index 0000000..b54e194 --- /dev/null +++ b/booty/__init__.py @@ -0,0 +1,52 @@ +# +# bootloader.py - generic boot loader handling backend for up2date and anaconda +# +# Jeremy Katz +# Adrian Likins +# Peter Jones +# +# Copyright 2001-2005 Red Hat, Inc. +# +# This software may be freely redistributed under the terms of the GNU +# library public license. +# +# You should have received a copy of the GNU Library Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# +"""Module for manipulation and creation of boot loader configurations""" + +import iutil +from bootloaderInfo import * +from bootloader import * + +class BootyNoKernelWarning(Exception): + def __init__ (self, value=""): + self.value = value + + def __str__ (self): + return self.value + +# return instance of the appropriate bootloader for our arch +def getBootloader(anaconda): + """Get the bootloader info object for your architecture""" + if iutil.isX86(): + import x86 + return x86.x86BootloaderInfo(anaconda) + elif iutil.isIA64(): + import ia64 + return ia64.ia64BootloaderInfo(anaconda) + elif iutil.isS390(): + import s390 + return s390.s390BootloaderInfo(anaconda) + elif iutil.isAlpha(): + import alpha + return alpha.alphaBootloaderInfo(anaconda) + elif iutil.isPPC(): + import ppc + return ppc.ppcBootloaderInfo(anaconda) + elif iutil.isSparc(): + import sparc + return sparc.sparcBootloaderInfo(anaconda) + else: + return bootloaderInfo(anaconda) diff --git a/booty/alpha.py b/booty/alpha.py new file mode 100644 index 0000000..0ed0b8a --- /dev/null +++ b/booty/alpha.py @@ -0,0 +1,150 @@ +import os +import iutil + +from booty import BootyNoKernelWarning +from bootloaderInfo import * +from util import getDiskPart + +class alphaBootloaderInfo(bootloaderInfo): + def wholeDevice (self, path): + (device, foo) = getDiskPart(path, self.storage) + return device + + def partitionNum (self, path): + # getDiskPart returns part numbers 0-based; we need it one based + # *sigh* + (foo, partitionNumber) = getDiskPart(path, self.storage) + return partitionNumber + 1 + + def writeAboot(self, instRoot, bl, kernelList, + chainList, defaultDev): + rootDevice = self.storage.rootDevice + try: + bootDevice = self.storage.mountpoints["/boot"] + except KeyError: + bootDevice = rootDevice + + bootnotroot = bootDevice != rootDevice + + confFile = instRoot + self.configfile + + # If /etc/aboot.conf already exists we rename it + # /etc/aboot.conf.rpmsave. + if os.path.isfile(confFile): + os.rename (confFile, confFile + ".rpmsave") + + # Then we create the necessary files. If the root device isn't + # the boot device, we create /boot/etc/ where the aboot.conf + # will live, and we create /etc/aboot.conf as a symlink to it. + if bootnotroot: + # Do we have /boot/etc ? If not, create one + if not os.path.isdir (instRoot + '/boot/etc'): + os.mkdir(instRoot + '/boot/etc', 0755) + + # We install the symlink (/etc/aboot.conf has already been + # renamed in necessary.) + os.symlink("../boot" + self.configfile, confFile) + + cfPath = instRoot + "/boot" + self.configfile + # Kernel path is set to / because a boot partition will + # be a root on its own. + kernelPath = '/' + # Otherwise, we just need to create /etc/aboot.conf. + else: + cfPath = confFile + kernelPath = self.kernelLocation + + # If we already have an aboot.conf, rename it + if os.access (cfPath, os.R_OK): + self.perms = os.stat(cfPath)[0] & 0777 + os.rename(cfPath, cfPath + '.rpmsave') + + # Now we're going to create and populate cfPath. + f = open (cfPath, 'w+') + f.write ("# aboot default configurations\n") + + if bootnotroot: + f.write ("# NOTICE: You have a /boot partition. This means that\n") + f.write ("# all kernel paths are relative to /boot/\n") + + # bpn is the boot partition number. + bpn = self.partitionNum(bootDevice.path) + lines = 0 + + # We write entries line using the following format: + # root= [options] + # We get all the kernels we need to know about in kernelList. + + for (kernel, tag, version) in kernelList: + kernelTag = "-" + version + kernelFile = "%svmlinuz%s" %(kernelPath, kernelTag) + + f.write("%d:%d%s" %(lines, bpn, kernelFile)) + + # See if we can come up with an initrd argument that exists + initrd = self.makeInitrd(kernelTag, instRoot) + if initrd: + f.write(" initrd=%s%s" %(kernelPath, initrd)) + + realroot = rootDevice.fstabSpec + f.write(" root=%s" %(realroot,)) + + args = self.args.get() + if args: + f.write(" %s" %(args,)) + + f.write("\n") + lines = lines + 1 + + # We're done writing the file + f.close () + del f + + # Now we're ready to write the relevant boot information. wbd + # is the whole boot device, bdpn is the boot device partition + # number. + wbd = self.wholeDevice (bootDevice.path) + bdpn = self.partitionNum (bootDevice.path) + + # Calling swriteboot. The first argument is the disk to write + # to and the second argument is a path to the bootstrap loader + # file. + args = [("/dev/%s" % wbd), "/boot/bootlx"] + rc = iutil.execWithRedirect ('/sbin/swriteboot', args, + root = instRoot, + stdout = "/dev/tty5", + stderr = "/dev/tty5") + if rc: + return rc + + # Calling abootconf to configure the installed aboot. The + # first argument is the disk to use, the second argument is + # the number of the partition on which aboot.conf resides. + # It's always the boot partition whether it's / or /boot (with + # the mount point being omitted.) + args = [("/dev/%s" % wbd), str (bdpn)] + rc = iutil.execWithRedirect ('/sbin/abootconf', args, + root = instRoot, + stdout = "/dev/tty5", + stderr = "/dev/tty5") + if rc: + return rc + + return 0 + + + def write(self, instRoot, bl, kernelList, chainList, defaultDev): + if len(kernelList) < 1: + raise BootyNoKernelWarning + + return self.writeAboot(instRoot, bl, kernelList, + chainList, defaultDev) + + def __init__(self, anaconda): + bootloaderInfo.__init__(self, anaconda) + self.useGrubVal = 0 + self._configdir = "/etc" + self._configname = "aboot.conf" + # self.kernelLocation is already set to what we need. + self.password = None + self.pure = None diff --git a/booty/bootloaderInfo.py b/booty/bootloaderInfo.py new file mode 100644 index 0000000..40c2855 --- /dev/null +++ b/booty/bootloaderInfo.py @@ -0,0 +1,699 @@ +# +# bootloaderInfo.py - bootloader config object used in creation of new +# bootloader configs. Originally from anaconda +# +# Jeremy Katz +# Erik Troan +# Peter Jones +# +# Copyright 2005-2008 Red Hat, Inc. +# +# This software may be freely redistributed under the terms of the GNU +# library public license. +# +# You should have received a copy of the GNU Library Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +import os, sys +import crypt +import random +import shutil +import string +import struct +from copy import copy + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) +N_ = lambda x: x + +from lilo import LiloConfigFile + +from flags import flags +import iutil +import isys +from product import * + +import booty +import checkbootloader +from util import getDiskPart + +if not iutil.isS390(): + import block + +dosFilesystems = ('FAT', 'fat16', 'fat32', 'ntfs', 'hpfs') + +def doesDualBoot(): + if iutil.isX86(): + return 1 + return 0 + +def checkForBootBlock(device): + fd = os.open(device, os.O_RDONLY) + buf = os.read(fd, 512) + os.close(fd) + if len(buf) >= 512 and \ + struct.unpack("H", buf[0x1fe: 0x200]) == (0xaa55,): + return True + return False + +# hack and a half +# there's no guarantee that data is written to the disk and grub +# reads both the filesystem and the disk. suck. +def syncDataToDisk(dev, mntpt, instRoot = "/"): + isys.sync() + isys.sync() + isys.sync() + + # and xfs is even more "special" (#117968) + if isys.readFSType(dev) == "xfs": + iutil.execWithRedirect("/usr/sbin/xfs_freeze", + ["-f", mntpt], + stdout = "/dev/tty5", + stderr = "/dev/tty5", + root = instRoot) + iutil.execWithRedirect("/usr/sbin/xfs_freeze", + ["-u", mntpt], + stdout = "/dev/tty5", + stderr = "/dev/tty5", + root = instRoot) + +def rootIsDevice(dev): + if dev.startswith("LABEL=") or dev.startswith("UUID="): + return False + return True + +class KernelArguments: + + def getDracutStorageArgs(self, devices): + args = [] + types = {} + for device in devices: + for d in self.anaconda.storage.devices: + if d is not device and not device.dependsOn(d): + continue + + s = d.dracutSetupString() + types[s.split("=")[0]] = True + if s not in args: + args.append(s) + + import storage + if isinstance(d, storage.devices.NetworkStorageDevice): + s = self.anaconda.network.dracutSetupString(d) + if s not in args: + args.append(s) + + for i in [ [ "rd_LUKS_UUID", "rd_NO_LUKS" ], + [ "rd_LVM_LV", "rd_NO_LVM" ], + [ "rd_MD_UUID", "rd_NO_MD" ], + [ "rd_DM_UUID", "rd_NO_DM" ] ]: + if not types.has_key(i[0]): + args.append(i[1]) + + return args + + def get(self): + args = "" + bootArgs = [] + rootDev = self.anaconda.storage.rootDevice + neededDevs = [ rootDev ] + + if flags.cmdline.get("fips") == "1": + bootDev = self.anaconda.storage.mountpoints.get("/boot", rootDev) + bootArgs = [ "boot=%s" % bootDev.fstabSpec ] + if bootDev is not rootDev: + neededDevs = [ rootDev, bootDev ] + + if self.anaconda.storage.fsset.swapDevices: + neededDevs.append(self.anaconda.storage.fsset.swapDevices[0]) + + for s in bootArgs + \ + self.getDracutStorageArgs(neededDevs) + [ + self.anaconda.instLanguage.dracutSetupString(), + self.anaconda.keyboard.dracutSetupString(), + self.args, + self.appendArgs ]: + s = s.strip() + if not s: + continue + if args: + args += " " + args += s + + return args + + def set(self, args): + self.args = args + self.appendArgs = "" + + def getNoDracut(self): + args = self.args.strip() + " " + self.appendArgs.strip() + return args.strip() + + def chandevget(self): + return self.cargs + + def chandevset(self, args): + self.cargs = args + + def append(self, args): + # don't duplicate the addition of an argument (#128492) + if self.args.find(args) != -1: + return + if self.appendArgs.find(args) != -1: + return + + if self.appendArgs: + self.appendArgs += " " + + self.appendArgs += args + + def __init__(self, anaconda): + newArgs = [] + cfgFilename = "/tmp/install.cfg" + + self.anaconda = anaconda + + if iutil.isS390(): + self.cargs = [] + f = open(cfgFilename) + for line in f: + try: + (vname,vparm) = line.split('=', 1) + vname = vname.strip() + vparm = vparm.replace('"','') + vparm = vparm.strip() + if vname == "CHANDEV": + self.cargs.append(vparm) + if vname == "QETHPARM": + self.cargs.append(vparm) + except Exception, e: + pass + f.close() + + # look for kernel arguments we know should be preserved and add them + ourargs = ["speakup_synth", "apic", "noapic", "apm", "ide", "noht", + "acpi", "video", "pci", "nodmraid", "nompath", "nomodeset", + "noiswmd"] + + if iutil.isS390(): + ourargs.append("cio_ignore") + + for arg in ourargs: + if not flags.cmdline.has_key(arg): + continue + + val = flags.cmdline.get(arg, "") + if val: + newArgs.append("%s=%s" % (arg, val)) + else: + newArgs.append(arg) + + self.args = " ".join(newArgs) + self.appendArgs = "" + + +class BootImages: + """A collection to keep track of boot images available on the system. + Examples would be: + ('linux', 'Red Hat Linux', 'ext2'), + ('Other', 'Other', 'fat32'), ... + """ + def __init__(self): + self.default = None + self.images = {} + + def getImages(self): + """returns dictionary of (label, longlabel, devtype) pairs + indexed by device""" + # return a copy so users can modify it w/o affecting us + return copy(self.images) + + def setDefault(self, default): + # default is a device + self.default = default + + def getDefault(self): + return self.default + + # Construct a dictionary mapping device names to (OS, product, type) + # tuples. + def setup(self, storage): + devices = {} + bootDevs = self.availableBootDevices(storage) + + for (dev, type) in bootDevs: + devices[dev.name] = 1 + + # These partitions have disappeared + for dev in self.images.keys(): + if not devices.has_key(dev): + del self.images[dev] + + # These have appeared + for (dev, type) in bootDevs: + if not self.images.has_key(dev.name): + if type in dosFilesystems and doesDualBoot(): + self.images[dev.name] = ("Other", "Other", type) + elif type in ("hfs", "hfs+") and iutil.getPPCMachine() == "PMac": + self.images[dev.name] = ("Other", "Other", type) + else: + self.images[dev.name] = (None, None, type) + + if not self.images.has_key(self.default): + self.default = storage.rootDevice.name + (label, longlabel, type) = self.images[self.default] + if not label: + self.images[self.default] = ("linux", productName, type) + + # Return a list of (storage.Device, string) tuples that are bootable + # devices. The string is the type of the device, which is just a string + # like "vfat" or "swap" or "lvm". + def availableBootDevices(self, storage): + import parted + retval = [] + foundDos = False + foundAppleBootstrap = False + + for part in [p for p in storage.partitions if p.exists]: + # Skip extended, metadata, freespace, etc. + if part.partType not in (parted.PARTITION_NORMAL, parted.PARTITION_LOGICAL) or not part.format: + continue + + type = part.format.type + + if type in dosFilesystems and not foundDos and doesDualBoot() and \ + not part.getFlag(parted.PARTITION_DIAG): + try: + bootable = checkForBootBlock(part.path) + retval.append((part, type)) + foundDos = True + except: + pass + elif type in ["ntfs", "hpfs"] and not foundDos and \ + doesDualBoot() and not part.getFlag(parted.PARTITION_DIAG): + retval.append((part, type)) + # maybe questionable, but the first ntfs or fat is likely to + # be the correct one to boot with XP using ntfs + foundDos = True + elif type == "appleboot" and iutil.getPPCMachine() == "PMac" and part.bootable: + foundAppleBootstrap = True + elif type in ["hfs", "hfs+"] and foundAppleBootstrap: + # questionable for same reason as above, but on mac this time + retval.append((part, type)) + + rootDevice = storage.rootDevice + + if not rootDevice or not rootDevice.format: + raise ValueError, ("Trying to pick boot devices but do not have a " + "sane root partition. Aborting install.") + + retval.append((rootDevice, rootDevice.format.type)) + retval.sort() + return retval + +class bootloaderInfo(object): + def getConfigFileName(self): + if not self._configname: + raise NotImplementedError + return self._configname + configname = property(getConfigFileName, None, None, \ + "bootloader config file name") + + def getConfigFileDir(self): + if not self._configdir: + raise NotImplementedError + return self._configdir + configdir = property(getConfigFileDir, None, None, \ + "bootloader config file directory") + + def getConfigFilePath(self): + return "%s/%s" % (self.configdir, self.configname) + configfile = property(getConfigFilePath, None, None, \ + "full path and name of the real config file") + + def setUseGrub(self, val): + pass + + def useGrub(self): + return self.useGrubVal + + def setPassword(self, val, isCrypted = 1): + pass + + def getPassword(self): + pass + + def getDevice(self): + return self.device + + def setDevice(self, device): + self.device = device + + (dev, part) = getDiskPart(device, self.storage) + if part is None: + self.defaultDevice = "mbr" + else: + self.defaultDevice = "partition" + + def makeInitrd(self, kernelTag, instRoot): + initrd = "initrd%s.img" % kernelTag + if os.access(instRoot + "/boot/" + initrd, os.R_OK): + return initrd + + initrd = "initramfs%s.img" % kernelTag + if os.access(instRoot + "/boot/" + initrd, os.R_OK): + return initrd + + return None + + def getBootloaderConfig(self, instRoot, bl, kernelList, + chainList, defaultDev): + images = bl.images.getImages() + + confFile = instRoot + self.configfile + + # on upgrade read in the lilo config file + lilo = LiloConfigFile () + self.perms = 0600 + if os.access (confFile, os.R_OK): + self.perms = os.stat(confFile)[0] & 0777 + lilo.read(confFile) + os.rename(confFile, confFile + ".rpmsave") + # if it's an absolute symlink, just get it out of our way + elif (os.path.islink(confFile) and os.readlink(confFile)[0] == '/'): + os.rename(confFile, confFile + ".rpmsave") + + # Remove any invalid entries that are in the file; we probably + # just removed those kernels. + for label in lilo.listImages(): + (fsType, sl, path, other) = lilo.getImage(label) + if fsType == "other": continue + + if not os.access(instRoot + sl.getPath(), os.R_OK): + lilo.delImage(label) + + lilo.addEntry("prompt", replace = 0) + lilo.addEntry("timeout", self.timeout or "20", replace = 0) + + rootDev = self.storage.rootDevice + + if rootDev.name == defaultDev.name: + lilo.addEntry("default", kernelList[0][0]) + else: + lilo.addEntry("default", chainList[0][0]) + + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = self.kernelLocation + "vmlinuz" + kernelTag + + try: + lilo.delImage(label) + except IndexError, msg: + pass + + sl = LiloConfigFile(imageType = "image", path = kernelFile) + + initrd = self.makeInitrd(kernelTag, instRoot) + + sl.addEntry("label", label) + if initrd: + sl.addEntry("initrd", "%s%s" %(self.kernelLocation, initrd)) + + sl.addEntry("read-only") + + append = "%s" %(self.args.get(),) + realroot = rootDev.fstabSpec + if rootIsDevice(realroot): + sl.addEntry("root", rootDev.path) + else: + if len(append) > 0: + append = "%s root=%s" %(append,realroot) + else: + append = "root=%s" %(realroot,) + + if len(append) > 0: + sl.addEntry('append', '"%s"' % (append,)) + + lilo.addImage (sl) + + for (label, longlabel, device) in chainList: + if ((not label) or (label == "")): + continue + try: + (fsType, sl, path, other) = lilo.getImage(label) + lilo.delImage(label) + except IndexError: + sl = LiloConfigFile(imageType = "other", + path = "/dev/%s" %(device)) + sl.addEntry("optional") + + sl.addEntry("label", label) + lilo.addImage (sl) + + # Sanity check #1. There could be aliases in sections which conflict + # with the new images we just created. If so, erase those aliases + imageNames = {} + for label in lilo.listImages(): + imageNames[label] = 1 + + for label in lilo.listImages(): + (fsType, sl, path, other) = lilo.getImage(label) + if sl.testEntry('alias'): + alias = sl.getEntry('alias') + if imageNames.has_key(alias): + sl.delEntry('alias') + imageNames[alias] = 1 + + # Sanity check #2. If single-key is turned on, go through all of + # the image names (including aliases) (we just built the list) and + # see if single-key will still work. + if lilo.testEntry('single-key'): + singleKeys = {} + turnOff = 0 + for label in imageNames.keys(): + l = label[0] + if singleKeys.has_key(l): + turnOff = 1 + singleKeys[l] = 1 + if turnOff: + lilo.delEntry('single-key') + + return lilo + + def write(self, instRoot, bl, kernelList, chainList, defaultDev): + rc = 0 + + if len(kernelList) >= 1: + config = self.getBootloaderConfig(instRoot, bl, + kernelList, chainList, + defaultDev) + rc = config.write(instRoot + self.configfile, perms = self.perms) + else: + raise booty.BootyNoKernelWarning + + return rc + + def getArgList(self): + args = [] + + if self.defaultDevice is None: + args.append("--location=none") + return args + + args.append("--location=%s" % (self.defaultDevice,)) + args.append("--driveorder=%s" % (",".join(self.drivelist))) + + if self.args.getNoDracut(): + args.append("--append=\"%s\"" %(self.args.getNoDracut())) + + return args + + def writeKS(self, f): + f.write("bootloader") + for arg in self.getArgList(): + f.write(" " + arg) + f.write("\n") + + def updateDriveList(self, sortedList=[]): + # bootloader is unusual in that we only want to look at disks that + # have disklabels -- no partitioned md or unpartitioned disks + disks = self.storage.disks + partitioned = self.storage.partitioned + self._drivelist = [d.name for d in disks if d in partitioned] + self._drivelist.sort(self.storage.compareDisks) + + # If we're given a sort order, make sure the drives listed in it + # are put at the head of the drivelist in that order. All other + # drives follow behind in whatever order they're found. + if sortedList != []: + revSortedList = sortedList + revSortedList.reverse() + + for i in revSortedList: + try: + ele = self._drivelist.pop(self._drivelist.index(i)) + self._drivelist.insert(0, ele) + except: + pass + + def _getDriveList(self): + if self._drivelist is not None: + return self._drivelist + self.updateDriveList() + return self._drivelist + def _setDriveList(self, val): + self._drivelist = val + drivelist = property(_getDriveList, _setDriveList) + + def __init__(self, anaconda): + self.args = KernelArguments(anaconda) + self.images = BootImages() + self.device = None + self.defaultDevice = None # XXX hack, used by kickstart + self.useGrubVal = 0 # only used on x86 + self._configdir = None + self._configname = None + self.kernelLocation = "/boot/" + self.password = None + self.pure = None + self.above1024 = 0 + self.timeout = None + self.storage = anaconda.storage + + # this has somewhat strange semantics. if 0, act like a normal + # "install" case. if 1, update lilo.conf (since grubby won't do that) + # and then run lilo or grub only. + # XXX THIS IS A HACK. implementation details are only there for x86 + self.doUpgradeOnly = 0 + self.kickstart = 0 + + self._drivelist = None + + if flags.serial != 0: + options = "" + device = "" + console = flags.cmdline.get("console", "") + + # the options are everything after the comma + comma = console.find(",") + if comma != -1: + options = console[comma:] + device = console[:comma] + else: + device = console + + if not device and iutil.isIA64(): + self.serialDevice = "ttyS0" + self.serialOptions = "" + else: + self.serialDevice = device + # don't keep the comma in the options + self.serialOptions = options[1:] + + if self.serialDevice: + self.args.append("console=%s%s" %(self.serialDevice, options)) + self.serial = 1 + self.timeout = 5 + else: + self.serial = 0 + self.serialDevice = None + self.serialOptions = None + + if flags.virtpconsole is not None: + if flags.virtpconsole.startswith("/dev/"): + con = flags.virtpconsole[5:] + else: + con = flags.virtpconsole + self.args.append("console=%s" %(con,)) + +class efiBootloaderInfo(bootloaderInfo): + def getBootloaderName(self): + return self._bootloader + bootloader = property(getBootloaderName, None, None, \ + "name of the bootloader to install") + + # XXX wouldn't it be nice to have a real interface to use efibootmgr from? + def removeOldEfiEntries(self, instRoot): + p = os.pipe() + rc = iutil.execWithRedirect('/usr/sbin/efibootmgr', [], + root = instRoot, stdout = p[1]) + os.close(p[1]) + if rc: + return rc + + c = os.read(p[0], 1) + buf = c + while (c): + c = os.read(p[0], 1) + buf = buf + c + os.close(p[0]) + lines = string.split(buf, '\n') + for line in lines: + fields = string.split(line) + if len(fields) < 2: + continue + if string.join(fields[1:], " ") == productName: + entry = fields[0][4:8] + rc = iutil.execWithRedirect('/usr/sbin/efibootmgr', + ["-b", entry, "-B"], + root = instRoot, + stdout="/dev/tty5", stderr="/dev/tty5") + if rc: + return rc + + return 0 + + def addNewEfiEntry(self, instRoot): + try: + bootdev = self.storage.mountpoints["/boot/efi"].name + except: + bootdev = "sda1" + + link = "%s%s/%s" % (instRoot, "/etc/", self.configname) + if not os.access(link, os.R_OK): + os.symlink("../%s" % (self.configfile), link) + + ind = len(bootdev) + try: + while (bootdev[ind-1] in string.digits): + ind = ind - 1 + except IndexError: + ind = len(bootdev) - 1 + + bootdisk = bootdev[:ind] + bootpart = bootdev[ind:] + if (bootdisk.startswith('ida/') or bootdisk.startswith('cciss/') or + bootdisk.startswith('rd/') or bootdisk.startswith('sx8/')): + bootdisk = bootdisk[:-1] + + argv = [ "/usr/sbin/efibootmgr", "-c" , "-w", "-L", + productName, "-d", "/dev/%s" % bootdisk, + "-p", bootpart, "-l", "\\EFI\\redhat\\" + self.bootloader ] + rc = iutil.execWithRedirect(argv[0], argv[1:], root = instRoot, + stdout = "/dev/tty5", + stderr = "/dev/tty5") + return rc + + def installGrub(self, instRoot, bootDev, grubTarget, grubPath, cfPath): + if not iutil.isEfi(): + raise EnvironmentError + rc = self.removeOldEfiEntries(instRoot) + if rc: + return rc + return self.addNewEfiEntry(instRoot) + + def __init__(self, anaconda, initialize = True): + if initialize: + bootloaderInfo.__init__(self, anaconda) + else: + self.storage = anaconda.storage + + if iutil.isEfi(): + self._configdir = "/boot/efi/EFI/redhat" + self._configname = "grub.conf" + self._bootloader = "grub.efi" + self.useGrubVal = 1 + self.kernelLocation = "" diff --git a/booty/checkbootloader.py b/booty/checkbootloader.py new file mode 100644 index 0000000..1b1ca1d --- /dev/null +++ b/booty/checkbootloader.py @@ -0,0 +1,207 @@ +#!/usr/bin/python +# +# Check to see whether it looks like GRUB or LILO is the boot loader +# being used on the system. +# +# Jeremy Katz +# Peter Jones +# +# Copyright 2001,2005 Red Hat, Inc. +# +# This software may be freely redistributed under the terms of the GNU +# library public license. +# +# You should have received a copy of the GNU Library Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +import os +import string + +from util import getDiskPart +import iutil + +grubConfigFile = "/etc/grub.conf" +liloConfigFile = "/etc/lilo.conf" +yabootConfigFile = "/etc/yaboot.conf" +siloConfigFile = "/etc/silo.conf" + +def getRaidDisks(raidDevice, storage, raidLevel=None, stripPart=1): + rc = [] + if raidLevel is not None: + try: + raidLevel = "raid%d" % (int(raidLevel),) + except ValueError: + pass + + try: + f = open("/proc/mdstat", "r") + lines = f.readlines() + f.close() + except: + return rc + + for line in lines: + fields = string.split(line, ' ') + if fields[0] == raidDevice: + if raidLevel is not None and fields[3] != raidLevel: + continue + for field in fields[4:]: + if string.find(field, "[") == -1: + continue + dev = string.split(field, '[')[0] + if len(dev) == 0: + continue + if stripPart: + disk = getDiskPart(dev, storage)[0] + rc.append(disk) + else: + rc.append(dev) + + return rc + + +def getBootBlock(bootDev, instRoot, storage, seekBlocks=0): + """Get the boot block from bootDev. Return a 512 byte string.""" + block = " " * 512 + if bootDev is None: + return block + + # get the devices in the raid device + if bootDev[5:7] == "md": + bootDevs = getRaidDisks(bootDev[5:], storage) + bootDevs.sort() + else: + bootDevs = [ bootDev[5:] ] + + # FIXME: this is kind of a hack + # look at all of the devs in the raid device until we can read the + # boot block for one of them. should do this better at some point + # by looking at all of the drives properly + for dev in bootDevs: + try: + fd = os.open("%s/dev/%s" % (instRoot, dev), os.O_RDONLY) + if seekBlocks > 0: + os.lseek(fd, seekBlocks * 512, 0) + block = os.read(fd, 512) + os.close(fd) + return block + except: + pass + return block + +# takes a line like #boot=/dev/hda and returns /dev/hda +# also handles cases like quoted versions and other nonsense +def getBootDevString(line): + dev = string.split(line, '=')[1] + dev = string.strip(dev) + dev = string.replace(dev, '"', '') + dev = string.replace(dev, "'", "") + return dev + +def getBootDevList(line): + devs = string.split(line, '=')[1] + rets = [] + for dev in devs: + dev = getBootDevString("=%s" % (dev,)) + rets.append(dev) + return string.join(rets) + +def getBootloaderTypeAndBoot(instRoot, storage): + haveGrubConf = 1 + haveLiloConf = 1 + haveYabootConf = 1 + haveSiloConf = 1 + + bootDev = None + + # make sure they have the config file, otherwise we definitely can't + # use that bootloader + if not os.access(instRoot + grubConfigFile, os.R_OK): + haveGrubConf = 0 + if not os.access(instRoot + liloConfigFile, os.R_OK): + haveLiloConf = 0 + if not os.access(instRoot + yabootConfigFile, os.R_OK): + haveYabootConf = 0 + if not os.access(instRoot + siloConfigFile, os.R_OK): + haveSiloConf = 0 + + if haveGrubConf: + bootDev = None + for (fn, stanza) in [ ("/etc/sysconfig/grub", "boot="), + (grubConfigFile, "#boot=") ]: + try: + f = open(instRoot + fn, "r") + except: + continue + + # the following bits of code are straight from checkbootloader.py + lines = f.readlines() + f.close() + for line in lines: + if line.startswith(stanza): + bootDev = getBootDevString(line) + break + if bootDev is not None: + break + + if iutil.isEfi(): + return ("GRUB", bootDev) + + if bootDev is not None: + block = getBootBlock(bootDev, instRoot, storage) + # XXX I don't like this, but it's what the maintainer suggested :( + if string.find(block, "GRUB") >= 0: + return ("GRUB", bootDev) + + if haveLiloConf: + f = open(instRoot + liloConfigFile, "r") + lines = f.readlines() + for line in lines: + if line[0:5] == "boot=": + bootDev = getBootDevString(line) + break + + block = getBootBlock(bootDev, instRoot, storage) + # this at least is well-defined + if block[6:10] == "LILO": + return ("LILO", bootDev) + + if haveYabootConf: + f = open(instRoot + yabootConfigFile, "r") + lines = f.readlines() + for line in lines: + if line[0:5] == "boot=": + bootDev = getBootDevList(line) + + if bootDev: + return ("YABOOT", bootDev) + + if haveSiloConf: + bootDev = None + # We've never done the /etc/sysconfig/silo thing, but maybe + # we should start... + for (fn, stanza) in [ ("/etc/sysconfig/silo", "boot="), + (grubConfigFile, "#boot=") ]: + try: + f = open(instRoot + fn, "r") + except: + continue + + lines = f.readlines() + f.close() + for line in lines: + if line.startswith(stanza): + bootDev = getBootDevString(line) + break + if bootDev is not None: + break + + if bootDev is not None: + # XXX SILO sucks just like grub. + if getDiskPart(bootDev, storage)[1] != 3: + block = getBootBlock(bootDev, instRoot, storage, 1) + if block[24:28] == "SILO": + return ("SILO", bootDev) + + return (None, None) diff --git a/booty/ia64.py b/booty/ia64.py new file mode 100644 index 0000000..f0f0146 --- /dev/null +++ b/booty/ia64.py @@ -0,0 +1,38 @@ +from booty import BootyNoKernelWarning +from bootloaderInfo import * + +class ia64BootloaderInfo(efiBootloaderInfo): + def getBootloaderConfig(self, instRoot, bl, kernelList, + chainList, defaultDev): + config = bootloaderInfo.getBootloaderConfig(self, instRoot, + bl, kernelList, chainList, + defaultDev) + # altix boxes need relocatable (#120851) + config.addEntry("relocatable") + + return config + + def writeLilo(self, instRoot, bl, kernelList, + chainList, defaultDev): + config = self.getBootloaderConfig(instRoot, bl, + kernelList, chainList, defaultDev) + return config.write(instRoot + self.configfile, perms = 0755) + + def write(self, instRoot, bl, kernelList, chainList, defaultDev): + if len(kernelList) >= 1: + rc = self.writeLilo(instRoot, bl, kernelList, + chainList, defaultDev) + if rc: + return rc + else: + raise BootyNoKernelWarning + + rc = self.removeOldEfiEntries(instRoot) + if rc: + return rc + return self.addNewEfiEntry(instRoot) + + def __init__(self, anaconda): + efiBootloaderInfo.__init__(self, anaconda) + self._configname = "elilo.conf" + self._bootloader = "elilo.efi" diff --git a/booty/lilo.py b/booty/lilo.py new file mode 100644 index 0000000..dc2328e --- /dev/null +++ b/booty/lilo.py @@ -0,0 +1,308 @@ +#!/usr/bin/python +# +# Module for manipulation of lilo.conf files. Original found +# in the anaconda installer +# Copyright (c) 1999-2001 Red Hat, Inc. Distributed under GPL. +# +# Author: Matt Wilson +# Eric Troan +# Adrian Likins +"""Module for manipulation of lilo.conf files.""" +import string +import os + +from UserDict import UserDict + + +class UserDictCase(UserDict): + """A dictionary with case insensitive keys""" + def __init__(self, data = {}): + UserDict.__init__(self) + # if we are passed a dictionary transfer it over... + for k in data.keys(): + kl = string.lower(k) + self.data[kl] = data[k] + # some methods used to make the class work as a dictionary + def __setitem__(self, key, value): + key = string.lower(key) + self.data[key] = value + def __getitem__(self, key): + key = string.lower(key) + if not self.data.has_key(key): + return None + return self.data[key] + get = __getitem__ + def __delitem__(self, key): + key = string.lower(key) + del self.data[key] + def has_key(self, key): + key = string.lower(key) + return self.data.has_key(key) + # return this data as a real hash + def get_hash(self): + return self.data + # return the data for marshalling + def __getstate__(self): + return self.data + # we need a setstate because of the __getstate__ presence screws up deepcopy + def __setstate__(self, state): + self.__init__(state) + # get a dictionary out of this instance ({}.update doesn't get instances) + def dict(self): + return self.data + +class LiloConfigFile: + """class representing a lilo.conf lilo configuration file. Used to + manipulate the file directly""" + + def __repr__ (self, tab = 0): + s = "" + for n in self.order: + if (tab): + s = s + '\t' + if n[0] == '#': + s = s + n[1:] + else: + s = s + n + if self.items[n]: + s = s + "=" + self.items[n] + s = s + '\n' + for count in range(len(self.diskRemaps)): + s = s + "disk = %s\n" % self.diskRemaps[count][1] + s = s + "\tbios = %s\n" % self.biosRemaps[count][1] + for cl in self.images: + s = s + "\n%s=%s\n" % (cl.imageType, cl.path) + s = s + cl.__repr__(1) + return s + + def addEntry(self, item, val = None, replace = 1): + if not self.items.has_key(item): + self.order.append(item) + elif not replace: + return + + if (val): + self.items[item] = str(val) + else: + self.items[item] = None + + def getEntry(self, item): + if self.items.has_key(item): + return self.items[item] + else: + return None + + def delEntry(self, item): + newOrder = [] + for i in self.order: + if item != i: newOrder.append(i) + self.order = newOrder + + del self.items[item] + + def listEntries(self): + foo = self.items + return foo + + def testEntry(self, item): + if self.items.has_key(item): + return 1 + else: + return 0 + + def getImage(self, label): + for config in self.images: + # sanity check + if label is None: + break + if config.getEntry('label'): + if string.lower(config.getEntry('label')) == string.lower(label): + return (config.imageType, config, config.path, config.other) + if config.getEntry('alias'): + if string.lower(config.getEntry('alias')) == string.lower(label): + return (config.imageType, config, config.path, config.other) + + + raise IndexError, "unknown image %s" % (label) + + def addImage (self, config,first=None): + # make sure the config has a valid label + config.getEntry('label') + if not config.path or not config.imageType: + raise ValueError, "subconfig missing path or image type" + + if first: + self.images = [config] + self.images + else: + self.images.append(config) + + def delImage (self, label): + for config in self.images: + # sanity check + if label is None: + break + if config.getEntry('label'): + if string.lower(config.getEntry('label')) == string.lower(label): + self.images.remove (config) + return + + raise IndexError, "unknown image %s" % (label,) + + def getDefault (self): + default = None + try: + default = self.getEntry("default") + except: + pass + + if not default: + default = self.listImages()[0] + + theDefault = self.getImage(default) + + return theDefault[1] + + def getDefaultLinux (self): + defaultIsOther = None + + # XXX ick... this code badly needs work =\ + theDefault = self.getDefault() + + if theDefault.other: + defaultIsOther = 1 + + # if the default is other, look for the first linux image + if theDefault.other: + for image_label in self.listImages(): + image = self.getImage(image_label)[1] + if not image.other: + theDefault = image + break + + # if we get here and are *still* an other, then we have no linux + # images. ick + if theDefault.other: + return None + else: + return theDefault + + def listImages (self): + l = [] + for config in self.images: + l.append(config.getEntry('label')) + return l + + def listAliases (self): + l = [] + for config in self.images: + if config.getEntry('alias'): + l.append(config.getEntry('alias')) + return l + + def getPath (self): + return self.path + + def write(self, file, perms = 0644): + f = open(file, "w") + f.write(self.__repr__()) + f.close() + os.chmod(file, perms) + + def read (self, file): + f = open(file, "r") + image = None + for l in f.readlines(): + l = l[:-1] + orig = l + while (l and (l[0] == ' ' or l[0] == '\t')): + l = l[1:] + if not l: + continue + if l[0] == '#' and not image: + self.order.append('#' + orig) + continue + fields = string.split(l, '=', 1) + if l[0] == '#' and image: + args = ('#' + l,) + elif (len(fields) == 2): + f0 = string.strip (fields [0]) + f1 = string.strip (fields [1]) + if (f0 != "append"): + # people are silly and put quotes brokenly in their + # lilo.conf but you have to use them for append. ARGH! + f1 = string.replace(f1, '"', '') + f1 = string.replace(f1, "'", "") + if (f0 == "image" or f0 == "other"): + if image: self.addImage(image) + image = LiloConfigFile(imageType = f0, + path = f1) + if (f0 == "other"): + image.other = 1 + args = None + else: + args = (f0, f1) + if (f0 == "disk"): + self.diskRemaps.append((f0,f1)) + args = None + if (f0 == "bios"): + self.biosRemaps.append((f0,f1)) + args = None + + else: + args = (string.strip (l),) + + if (args and image): + apply(image.addEntry, args) + elif args: + apply(self.addEntry, args) + + if image: self.addImage(image) + + f.close() + + def __init__(self, imageType = None, path = None): + self.imageType = imageType + self.path = path + self.order = [] + self.images = [] + self.other = None + self.items = UserDictCase() + self.biosRemaps = [] + self.diskRemaps = [] + self.unsupported = [] + + +if __name__ == "__main__": + import sys + #sys.path.append("") + config = LiloConfigFile () + config.read ('/etc/lilo.conf') + print config + print "image list", config.listImages() + config.delImage ('linux') + print '----------------------------------' + config = LiloConfigFile () + config.read ('/etc/lilo.conf') + print config + print '----------------------------------' + print '----------------------------------' + print "list images" + print config.listImages() + print config.getImage('linux') + print "----------------------------------" + print "addimage (testlinux)" + blip = """ +read-only +blippy-blob=sdfsdf +append=\"sdfasdfasdf\" +root=/dev/hda6 +""" + sl = LiloConfigFile(imageType = "image", path="/boot/somevmlinuz-2.4.0") + sl.addEntry("label", "newkernel") + sl.addEntry("initrd", "blipppy") + config.addImage(sl) + + print '-------------------------------------' + print "writing out /tmp/lilo.conf" + print config.write("/tmp/lilo.conf") + print config diff --git a/booty/ppc.py b/booty/ppc.py new file mode 100644 index 0000000..a640344 --- /dev/null +++ b/booty/ppc.py @@ -0,0 +1,180 @@ +import string +import os + +from booty import BootyNoKernelWarning +from util import getDiskPart +from bootloaderInfo import * +import iutil + +class ppcBootloaderInfo(bootloaderInfo): + def getBootDevs(self, bl): + import parted + + retval = [] + machine = iutil.getPPCMachine() + + if machine == 'pSeries': + for dev in self.storage.fsset.devices: + if dev.format.type == "prepboot": + retval.append(dev.path) + elif machine == 'PMac': + for dev in self.storage.fsset.devices: + if dev.format.type == "hfs" and dev.format.bootable: + retval.append(dev.path) + + if len(retval) == 0: + # Try to get a boot device; bplan OF understands ext3 + if machine == 'Pegasos' or machine == 'Efika': + try: + device = self.storage.mountpoints["/boot"] + except KeyError: + # Try / if we don't have this we're not going to work + device = self.storage.rootDevice + + retval.append(device.path) + else: + if bl.getDevice(): + d = bl.getDevice() + retval.append(self.storage.devicetree.getDeviceByName(d).path) + + return retval + + def writeYaboot(self, instRoot, bl, kernelList, + chainList, defaultDev): + + yabootTarget = string.join(self.getBootDevs(bl)) + + try: + bootDev = self.storage.mountpoints["/boot"] + + cf = "/boot/etc/yaboot.conf" + cfPath = "" + if not os.path.isdir(instRoot + "/boot/etc"): + os.mkdir(instRoot + "/boot/etc") + except KeyError: + bootDev = self.storage.rootDevice + + cfPath = "/boot" + cf = "/etc/yaboot.conf" + + f = open(instRoot + cf, "w+") + + f.write("# yaboot.conf generated by anaconda\n\n") + f.write("boot=%s\n" %(yabootTarget,)) + f.write("init-message=\"Welcome to %s!\\nHit for boot options\"\n\n" + % productName) + + f.write("partition=%s\n" % bootDev.partedPartition.number) + f.write("timeout=%s\n" % (self.timeout or 80)) + f.write("install=/usr/lib/yaboot/yaboot\n") + f.write("delay=5\n") + f.write("enablecdboot\n") + f.write("enableofboot\n") + f.write("enablenetboot\n") + + yabootProg = "/sbin/mkofboot" + if iutil.getPPCMachine() == "PMac": + # write out the first hfs/hfs+ partition as being macosx + for (label, longlabel, device) in chainList: + if ((not label) or (label == "")): + continue + f.write("macosx=/dev/%s\n" %(device,)) + break + + f.write("magicboot=/usr/lib/yaboot/ofboot\n") + + elif iutil.getPPCMachine() == "pSeries": + f.write("nonvram\n") + f.write("fstype=raw\n") + + else: # Default non-destructive case for anything else. + f.write("nonvram\n") + f.write("mntpoint=/boot/yaboot\n") + f.write("usemount\n") + if not os.access(instRoot + "/boot/yaboot", os.R_OK): + os.mkdir(instRoot + "/boot/yaboot") + yabootProg = "/sbin/ybin" + + if self.password: + f.write("password=%s\n" %(self.password,)) + f.write("restricted\n") + + f.write("\n") + + rootDev = self.storage.rootDevice + + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = "%s/vmlinuz%s" %(cfPath, kernelTag) + + f.write("image=%s\n" %(kernelFile,)) + f.write("\tlabel=%s\n" %(label,)) + f.write("\tread-only\n") + + initrd = self.makeInitrd(kernelTag, instRoot) + if initrd: + f.write("\tinitrd=%s/%s\n" %(cfPath, initrd)) + + append = "%s" %(self.args.get(),) + + realroot = rootDev.fstabSpec + if rootIsDevice(realroot): + f.write("\troot=%s\n" %(realroot,)) + else: + if len(append) > 0: + append = "%s root=%s" %(append,realroot) + else: + append = "root=%s" %(realroot,) + + if len(append) > 0: + f.write("\tappend=\"%s\"\n" %(append,)) + f.write("\n") + + f.close() + os.chmod(instRoot + cf, 0600) + + # FIXME: hack to make sure things are written to disk + import isys + isys.sync() + isys.sync() + isys.sync() + + ybinargs = [ yabootProg, "-f", "-C", cf ] + + rc = iutil.execWithRedirect(ybinargs[0], + ybinargs[1:], + stdout = "/dev/tty5", + stderr = "/dev/tty5", + root = instRoot) + if rc: + return rc + + if (not os.access(instRoot + "/etc/yaboot.conf", os.R_OK) and + os.access(instRoot + "/boot/etc/yaboot.conf", os.R_OK)): + os.symlink("../boot/etc/yaboot.conf", + instRoot + "/etc/yaboot.conf") + + return 0 + + def setPassword(self, val, isCrypted = 1): + # yaboot just handles the password and doesn't care if its crypted + # or not + self.password = val + + def write(self, instRoot, bl, kernelList, chainList, defaultDev): + if len(kernelList) >= 1: + rc = self.writeYaboot(instRoot, bl, kernelList, + chainList, defaultDev) + if rc: + return rc + else: + raise BootyNoKernelWarning + + return 0 + + def __init__(self, anaconda): + bootloaderInfo.__init__(self, anaconda) + self.useYabootVal = 1 + self.kernelLocation = "/boot" + self._configdir = "/etc" + self._configname = "yaboot.conf" diff --git a/booty/s390.py b/booty/s390.py new file mode 100644 index 0000000..1a4c9f3 --- /dev/null +++ b/booty/s390.py @@ -0,0 +1,178 @@ +import os + +from bootloaderInfo import * +import iutil + +class s390BootloaderInfo(bootloaderInfo): + def getBootloaderConfig(self, instRoot, bl, kernelList, + chainList, defaultDev): + # on upgrade read in the lilo config file + lilo = LiloConfigFile () + self.perms = 0600 + confFile = instRoot + self.configfile + + if os.access (confFile, os.R_OK): + self.perms = os.stat(confFile)[0] & 0777 + lilo.read(confFile) + os.rename(confFile, confFile + ".rpmsave") + + # Remove any invalid entries that are in the file; we probably + # just removed those kernels. + for label in lilo.listImages(): + (fsType, sl, path, other) = lilo.getImage(label) + if fsType == "other": continue + + if not os.access(instRoot + sl.getPath(), os.R_OK): + lilo.delImage(label) + + rootDev = self.storage.rootDevice + + if rootDev.name == defaultDev.name: + lilo.addEntry("default", kernelList[0][0]) + else: + lilo.addEntry("default", chainList[0][0]) + + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = self.kernelLocation + "vmlinuz" + kernelTag + + try: + lilo.delImage(label) + except IndexError, msg: + pass + + sl = LiloConfigFile(imageType = "image", path = kernelFile) + + initrd = self.makeInitrd(kernelTag, instRoot) + + sl.addEntry("label", label) + if initrd: + sl.addEntry("initrd", "%s%s" %(self.kernelLocation, initrd)) + + sl.addEntry("read-only") + sl.addEntry("root", rootDev.path) + sl.addEntry("ipldevice", rootDev.path[:-1]) + + if self.args.get(): + sl.addEntry('append', '"%s"' % self.args.get()) + + lilo.addImage (sl) + + for (label, longlabel, device) in chainList: + if ((not label) or (label == "")): + continue + try: + (fsType, sl, path, other) = lilo.getImage(label) + lilo.delImage(label) + except IndexError: + sl = LiloConfigFile(imageType = "other", + path = "/dev/%s" %(device)) + sl.addEntry("optional") + + sl.addEntry("label", label) + lilo.addImage (sl) + + # Sanity check #1. There could be aliases in sections which conflict + # with the new images we just created. If so, erase those aliases + imageNames = {} + for label in lilo.listImages(): + imageNames[label] = 1 + + for label in lilo.listImages(): + (fsType, sl, path, other) = lilo.getImage(label) + if sl.testEntry('alias'): + alias = sl.getEntry('alias') + if imageNames.has_key(alias): + sl.delEntry('alias') + imageNames[alias] = 1 + + # Sanity check #2. If single-key is turned on, go through all of + # the image names (including aliases) (we just built the list) and + # see if single-key will still work. + if lilo.testEntry('single-key'): + singleKeys = {} + turnOff = 0 + for label in imageNames.keys(): + l = label[0] + if singleKeys.has_key(l): + turnOff = 1 + singleKeys[l] = 1 + if turnOff: + lilo.delEntry('single-key') + + return lilo + + def writeChandevConf(self, bl, instroot): # S/390 only + cf = "/etc/chandev.conf" + self.perms = 0644 + if bl.args.chandevget(): + fd = os.open(instroot + "/etc/chandev.conf", + os.O_WRONLY | os.O_CREAT) + os.write(fd, "noauto\n") + for cdev in bl.args.chandevget(): + os.write(fd,'%s\n' % cdev) + os.close(fd) + return "" + + + def writeZipl(self, instRoot, bl, kernelList, chainList, + defaultDev, justConfigFile): + rootDev = self.storage.rootDevice + + cf = '/etc/zipl.conf' + self.perms = 0600 + if os.access (instRoot + cf, os.R_OK): + self.perms = os.stat(instRoot + cf)[0] & 0777 + os.rename(instRoot + cf, + instRoot + cf + '.rpmsave') + + f = open(instRoot + cf, "w+") + + f.write('[defaultboot]\n') + f.write('default=' + kernelList[0][0] + '\n') + f.write('target=%s\n' % (self.kernelLocation)) + + cfPath = "/boot/" + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = "%svmlinuz%s" % (cfPath, kernelTag) + + initrd = self.makeInitrd(kernelTag, instRoot) + f.write('[%s]\n' % (label)) + f.write('\timage=%s\n' % (kernelFile)) + if initrd: + f.write('\tramdisk=%s%s\n' %(self.kernelLocation, initrd)) + + realroot = rootDev.fstabSpec + f.write('\tparameters="root=%s' %(realroot,)) + if bl.args.get(): + f.write(' %s' % (bl.args.get())) + f.write('"\n') + + f.close() + + if not justConfigFile: + rc = iutil.execWithRedirect("/sbin/zipl", [], root = instRoot, + stdout = "/dev/stdout", + stderr = "/dev/stderr") + if rc: + return rc + + return 0 + + def write(self, instRoot, bl, kernelList, chainList, + defaultDev): + rc = self.writeZipl(instRoot, bl, kernelList, + chainList, defaultDev, + not self.useZiplVal) + if rc: + return rc + + return self.writeChandevConf(bl, instRoot) + + def __init__(self, anaconda): + bootloaderInfo.__init__(self, anaconda) + self.useZiplVal = 1 # only used on s390 + self.kernelLocation = "/boot/" + self._configdir = "/etc" + self._configname = "zipl.conf" diff --git a/booty/sparc.py b/booty/sparc.py new file mode 100644 index 0000000..8b8c78b --- /dev/null +++ b/booty/sparc.py @@ -0,0 +1,128 @@ +import os + +from booty import BootyNoKernelWarning +from bootloaderInfo import * + +class sparcBootloaderInfo(bootloaderInfo): + def writeSilo(self, instRoot, bl, kernelList, + chainList, defaultDev): + + try: + bootDev = self.storage.mountpoints["/boot"] + + mf = '/silo.message' + cf = "/boot/silo.conf" + mfdir = '/boot' + cfPath = "" + if not os.path.isdir(instRoot + "/boot"): + os.mkdir(instRoot + "/boot") + except KeyError: + bootDev = self.storage.rootDevice + + cf = "/etc/silo.conf" + mfdir = '/etc' + cfPath = "/boot" + + f = open(instRoot + mfdir + mf, "w+") + f.write("Welcome to %s!\nHit for boot options\n\n" % productName) + f.close() + os.chmod(instRoot + mfdir + mf, 0600) + + f = open(instRoot + cf, "w+") + f.write("# silo.conf generated by anaconda\n\n") + + f.write("#boot=%s\n" % (bootDev.path,)) + f.write("message=%s\n" % (mf,)) + f.write("timeout=%s\n" % (self.timeout or 50)) + + (name, partNum) = getDiskPart(bootDev, self.storage) + partno = partNum + 1 + f.write("partition=%s\n" % (partno,)) + + if self.password: + f.write("password=%s\n" % (self.password,)) + f.write("restricted\n") + + f.write("default=%s\n" % (kernelList[0][0],)) + f.write("\n") + + rootDev = self.storage.rootDevice + + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = "%s/vmlinuz%s" % (cfPath, kernelTag) + + f.write("image=%s\n" % (kernelFile,)) + f.write("\tlabel=%s\n" % (label,)) + f.write("\tread-only\n") + + initrd = self.makeInitrd(kernelTag, instRoot) + if initrd: + f.write("\tinitrd=%s/%s\n" % (cfPath, initrd)) + + append = "%s" % (self.args.get(),) + + realroot = rootDev.fstabSpec + if rootIsDevice(realroot): + f.write("\troot=%s\n" % (realroot,)) + else: + if len(append) > 0: + append = "%s root=%s" % (append, realroot) + else: + append = "root=%s" % (realroot,) + + if len(append) > 0: + f.write("\tappend=\"%s\"\n" % (append,)) + f.write("\n") + + f.close() + os.chmod(instRoot + cf, 0600) + + # FIXME: hack to make sure things are written to disk + import isys + isys.sync() + isys.sync() + isys.sync() + + backup = "%s/backup.b" % (cfPath,) + sbinargs = ["/sbin/silo", "-f", "-C", cf, "-S", backup] + # TODO!!! FIXME!!! XXX!!! + # butil is not defined!!! - assume this is in rhpl now? + if butil.getSparcMachine() == "sun4u": + sbinargs += ["-u"] + else: + sbinargs += ["-U"] + + rc = iutil.execWithRedirect(sbinargs[0], + sbinargs[1:], + stdout = "/dev/tty5", + stderr = "/dev/tty5", + root = instRoot) + if rc: + return rc + + if (not os.access(instRoot + "/etc/silo.conf", os.R_OK) and + os.access(instRoot + "/boot/etc/silo.conf", os.R_OK)): + os.symlink("../boot/etc/silo.conf", + instRoot + "/etc/silo.conf") + + return 0 + + def setPassword(self, val, isCrypted = 1): + # silo just handles the password unencrypted + self.password = val + + def write(self, instRoot, bl, kernelList, chainList, + defaultDev): + if len(kernelList) >= 1: + return self.writeSilo(instRoot, bl, kernelList, chainList, + defaultDev) + else: + raise BootyNoKernelWarning + + def __init__(self, anaconda): + bootloaderInfo.__init__(self, anaconda) + self.useSiloVal = 1 + self.kernelLocation = "/boot" + self._configdir = "/etc" + self._configname = "silo.conf" diff --git a/booty/util.py b/booty/util.py new file mode 100644 index 0000000..48c3194 --- /dev/null +++ b/booty/util.py @@ -0,0 +1,33 @@ +import string +from flags import flags + +def getDiskPart(dev, storage): + path = storage.devicetree.getDeviceByName(dev).path[5:] + cut = len(dev) + if dev[-1] in string.digits: + if (path.startswith('rd/') or path.startswith('ida/') or + path.startswith('cciss/') or path.startswith('sx8/') or + path.startswith('mapper/') or path.startswith('mmcblk') or + path.startswith('md')): + if dev[-2] == 'p': + cut = -2 + elif dev[-3] == 'p' and dev[-2] in string.digits: + cut = -3 + else: + if dev[-2] in string.digits: + cut = -2 + else: + cut = -1 + + name = dev[:cut] + + if cut < 0: + part = dev[cut:] + if part[0] == 'p': + part = part[1:] + partNum = int(part) - 1 + else: + partNum = None + + return (name, partNum) + diff --git a/booty/x86.py b/booty/x86.py new file mode 100644 index 0000000..89d6393 --- /dev/null +++ b/booty/x86.py @@ -0,0 +1,544 @@ +import os +import string + +from booty import BootyNoKernelWarning +from util import getDiskPart +from bootloaderInfo import * +from flags import flags +import checkbootloader +import iutil + +class x86BootloaderInfo(efiBootloaderInfo): + def setPassword(self, val, isCrypted = 1): + if not val: + self.password = val + self.pure = val + return + + if isCrypted and self.useGrubVal == 0: + self.pure = None + return + elif isCrypted: + self.password = val + self.pure = None + else: + salt = "$1$" + saltLen = 8 + + saltchars = string.letters + string.digits + './' + for i in range(saltLen): + salt += random.choice(saltchars) + + self.password = crypt.crypt(val, salt) + self.pure = val + + def getPassword (self): + return self.pure + + def setUseGrub(self, val): + self.useGrubVal = val + + def getPhysicalDevices(self, device): + # This finds a list of devices on which the given device name resides. + # Accepted values for "device" are raid1 md devices (i.e. "md0"), + # physical disks ("hda"), and real partitions on physical disks + # ("hda1"). Volume groups/logical volumes are not accepted. + dev = self.storage.devicetree.getDeviceByName(device) + path = dev.path[5:] + + if device in map (lambda x: x.name, self.storage.lvs + self.storage.vgs): + return [] + + if path.startswith("mapper/luks-"): + return [] + + if dev.type == "mdarray": + bootable = 0 + parts = checkbootloader.getRaidDisks(device, self.storage, + raidLevel=1, stripPart=0) + parts.sort() + return parts + + return [device] + + def runGrubInstall(self, instRoot, bootDev, cmds, cfPath): + if cfPath == "/": + syncDataToDisk(bootDev, "/boot", instRoot) + else: + syncDataToDisk(bootDev, "/", instRoot) + + # copy the stage files over into /boot + rc = iutil.execWithRedirect("/sbin/grub-install", + ["--just-copy"], + stdout = "/dev/tty5", stderr = "/dev/tty5", + root = instRoot) + if rc: + return rc + + # really install the bootloader + for cmd in cmds: + p = os.pipe() + os.write(p[1], cmd + '\n') + os.close(p[1]) + + # FIXME: hack to try to make sure everything is written + # to the disk + if cfPath == "/": + syncDataToDisk(bootDev, "/boot", instRoot) + else: + syncDataToDisk(bootDev, "/", instRoot) + + rc = iutil.execWithRedirect('/sbin/grub' , + [ "--batch", "--no-floppy", + "--device-map=/boot/grub/device.map" ], + stdin = p[0], + stdout = "/dev/tty5", stderr = "/dev/tty5", + root = instRoot) + os.close(p[0]) + + if rc: + return rc + + def matchingBootTargets(self, stage1Devs, bootDevs): + matches = [] + for stage1Dev in stage1Devs: + for mdBootPart in bootDevs: + if getDiskPart(stage1Dev, self.storage)[0] == getDiskPart(mdBootPart, self.storage)[0]: + matches.append((stage1Dev, mdBootPart)) + return matches + + def addMemberMbrs(self, matches, bootDevs): + updatedMatches = list(matches) + bootDevsHavingStage1Dev = [match[1] for match in matches] + for mdBootPart in bootDevs: + if mdBootPart not in bootDevsHavingStage1Dev: + updatedMatches.append((getDiskPart(mdBootPart, self.storage)[0], mdBootPart)) + return updatedMatches + + def installGrub(self, instRoot, bootDev, grubTarget, grubPath, cfPath): + if iutil.isEfi(): + return efiBootloaderInfo.installGrub(self, instRoot, bootDev, grubTarget, + grubPath, cfPath) + + args = "--stage2=/boot/grub/stage2 " + + stage1Devs = self.getPhysicalDevices(grubTarget) + bootDevs = self.getPhysicalDevices(bootDev.name) + + installs = [(None, + self.grubbyPartitionName(stage1Devs[0]), + self.grubbyPartitionName(bootDevs[0]))] + + if bootDev.type == "mdarray": + + matches = self.matchingBootTargets(stage1Devs, bootDevs) + + # If the stage1 target disk contains member of boot raid array (mbr + # case) or stage1 target partition is member of boot raid array + # (partition case) + if matches: + # 1) install stage1 on target disk/partiton + stage1Dev, mdMemberBootPart = matches[0] + installs = [(None, + self.grubbyPartitionName(stage1Dev), + self.grubbyPartitionName(mdMemberBootPart))] + firstMdMemberDiskGrubbyName = self.grubbyDiskName(getDiskPart(mdMemberBootPart, self.storage)[0]) + + # 2) and install stage1 on other members' disks/partitions too + # NOTES: + # - the goal is to be able to boot after a members' disk removal + # - so we have to use grub device names as if after removal + # (i.e. the same disk name (e.g. (hd0)) for both member disks) + # - if member partitions have different numbers only removal of + # specific one of members will work because stage2 containing + # reference to config file is shared and therefore can contain + # only one value + + # if target is mbr, we want to install also to mbr of other + # members, so extend the matching list + matches = self.addMemberMbrs(matches, bootDevs) + for stage1Target, mdMemberBootPart in matches[1:]: + # prepare special device mapping corresponding to member removal + mdMemberBootDisk = getDiskPart(mdMemberBootPart, self.storage)[0] + # It can happen due to ks --driveorder option, but is it ok? + if not mdMemberBootDisk in self.drivelist: + continue + mdRaidDeviceRemap = (firstMdMemberDiskGrubbyName, + mdMemberBootDisk) + + stage1TargetGrubbyName = self.grubbyPartitionName(stage1Target) + rootPartGrubbyName = self.grubbyPartitionName(mdMemberBootPart) + + # now replace grub disk name part according to special device + # mapping + old = self.grubbyDiskName(mdMemberBootDisk).strip('() ') + new = firstMdMemberDiskGrubbyName.strip('() ') + rootPartGrubbyName = rootPartGrubbyName.replace(old, new) + stage1TargetGrubbyName = stage1TargetGrubbyName.replace(old, new) + + installs.append((mdRaidDeviceRemap, + stage1TargetGrubbyName, + rootPartGrubbyName)) + + # This is needed for case when /boot member partitions have + # different numbers. Shared stage2 can contain only one reference + # to grub.conf file, so let's ensure that it is reference to partition + # on disk which we will boot from - that is, install grub to + # this disk as last so that its reference is not overwritten. + installs.reverse() + + cmds = [] + for mdRaidDeviceRemap, stage1Target, rootPart in installs: + if mdRaidDeviceRemap: + cmd = "device (%s) /dev/%s\n" % tuple(mdRaidDeviceRemap) + else: + cmd = '' + cmd += "root %s\n" % (rootPart,) + cmd += "install %s%s/stage1 d %s %s/stage2 p %s%s/grub.conf" % \ + (args, grubPath, stage1Target, grubPath, rootPart, grubPath) + cmds.append(cmd) + return self.runGrubInstall(instRoot, bootDev.name, cmds, cfPath) + + def writeGrub(self, instRoot, bl, kernelList, chainList, + defaultDev, upgrade=False): + + rootDev = self.storage.rootDevice + grubTarget = bl.getDevice() + + try: + bootDev = self.storage.mountpoints["/boot"] + grubPath = "/grub" + cfPath = "/" + except KeyError: + bootDev = rootDev + grubPath = "/boot/grub" + cfPath = "/boot/" + + if not upgrade: + self.writeGrubConf(instRoot, bootDev, rootDev, defaultDev, kernelList, + chainList, grubTarget, grubPath, cfPath) + + # keep track of which devices are used for the device.map + usedDevs = set() + usedDevs.update(self.getPhysicalDevices(grubTarget)) + usedDevs.update(self.getPhysicalDevices(rootDev.name)) + usedDevs.update(self.getPhysicalDevices(bootDev.name)) + usedDevs.update([dev for (label, longlabel, dev) in chainList if longlabel]) + + if not upgrade: + self.writeDeviceMap(instRoot, usedDevs, upgrade) + self.writeSysconfig(instRoot, grubTarget, upgrade) + + return self.installGrub(instRoot, bootDev, grubTarget, grubPath, cfPath) + + def writeGrubConf(self, instRoot, bootDev, rootDev, defaultDev, kernelList, + chainList, grubTarget, grubPath, cfPath): + + bootDevs = self.getPhysicalDevices(bootDev.name) + + # XXX old config file should be read here for upgrade + + cf = "%s%s" % (instRoot, self.configfile) + self.perms = 0600 + if os.access (cf, os.R_OK): + self.perms = os.stat(cf)[0] & 0777 + os.rename(cf, cf + '.rpmsave') + + f = open(cf, "w+") + + f.write("# grub.conf generated by anaconda\n") + f.write("#\n") + f.write("# Note that you do not have to rerun grub " + "after making changes to this file\n") + + if grubPath == "/grub": + f.write("# NOTICE: You have a /boot partition. This means " + "that\n") + f.write("# all kernel and initrd paths are relative " + "to /boot/, eg.\n") + else: + f.write("# NOTICE: You do not have a /boot partition. " + "This means that\n") + f.write("# all kernel and initrd paths are relative " + "to /, eg.\n") + + f.write('# root %s\n' % self.grubbyPartitionName(bootDevs[0])) + f.write("# kernel %svmlinuz-version ro root=%s\n" % (cfPath, rootDev.path)) + f.write("# initrd %sinitrd-[generic-]version.img\n" % (cfPath)) + f.write("#boot=/dev/%s\n" % (grubTarget)) + + # get the default image to boot... we have to walk and find it + # since grub indexes by where it is in the config file + if defaultDev.name == rootDev.name: + default = 0 + else: + # if the default isn't linux, it's the first thing in the + # chain list + default = len(kernelList) + + + f.write('default=%s\n' % (default)) + + if self.serial == 1: + # Set the global timeout in serial case + f.write('timeout=%d\n' % (self.timeout or 5)) + # grub the 0-based number of the serial console device + unit = self.serialDevice[-1] + + # and we want to set the speed too + speedend = 0 + for char in self.serialOptions: + if char not in string.digits: + break + speedend = speedend + 1 + if speedend != 0: + speed = self.serialOptions[:speedend] + else: + # reasonable default + speed = "9600" + + f.write("serial --unit=%s --speed=%s\n" %(unit, speed)) + f.write("terminal --timeout=%s serial console\n" % (self.timeout or 5)) + else: + # Default to 0 timeout in the non-serial case + f.write('timeout=%d\n' % (self.timeout or 0)) + # we only want splashimage if they're not using a serial console + if os.access("%s/boot/grub/splash.xpm.gz" %(instRoot,), os.R_OK): + f.write('splashimage=%s%sgrub/splash.xpm.gz\n' + % (self.grubbyPartitionName(bootDevs[0]), cfPath)) + f.write("hiddenmenu\n") + + + if self.password: + f.write('password --md5 %s\n' %(self.password)) + + for (label, longlabel, version) in kernelList: + kernelTag = "-" + version + kernelFile = "%svmlinuz%s" % (cfPath, kernelTag) + + initrd = self.makeInitrd(kernelTag, instRoot) + + f.write('title %s (%s)\n' % (longlabel, version)) + f.write('\troot %s\n' % self.grubbyPartitionName(bootDevs[0])) + + realroot = " root=%s" % rootDev.fstabSpec + + if version.endswith("xen0") or (version.endswith("xen") and not os.path.exists("/proc/xen")): + # hypervisor case + sermap = { "ttyS0": "com1", "ttyS1": "com2", + "ttyS2": "com3", "ttyS3": "com4" } + if self.serial and sermap.has_key(self.serialDevice) and \ + self.serialOptions: + hvs = "%s=%s" %(sermap[self.serialDevice], + self.serialOptions) + else: + hvs = "" + if version.endswith("xen0"): + hvFile = "%sxen.gz-%s %s" %(cfPath, + version.replace("xen0", ""), + hvs) + else: + hvFile = "%sxen.gz-%s %s" %(cfPath, + version.replace("xen", ""), + hvs) + f.write('\tkernel %s\n' %(hvFile,)) + f.write('\tmodule %s ro%s' %(kernelFile, realroot)) + if self.args.get(): + f.write(' %s' % self.args.get()) + f.write('\n') + + if initrd: + f.write('\tmodule %s%s\n' % (cfPath, initrd)) + else: # normal kernel + f.write('\tkernel %s ro%s' % (kernelFile, realroot)) + if self.args.get(): + f.write(' %s' % self.args.get()) + f.write('\n') + + if initrd: + f.write('\tinitrd %s%s\n' % (cfPath, initrd)) + + for (label, longlabel, device) in chainList: + if ((not longlabel) or (longlabel == "")): + continue + f.write('title %s\n' % (longlabel)) + f.write('\trootnoverify %s\n' % self.grubbyPartitionName(device)) +# f.write('\tmakeactive\n') + f.write('\tchainloader +1') + f.write('\n') + + f.close() + + if not "/efi/" in cf: + os.chmod(cf, self.perms) + + try: + # make symlink for menu.lst (default config file name) + menulst = "%s%s/menu.lst" % (instRoot, self.configdir) + if os.access (menulst, os.R_OK): + os.rename(menulst, menulst + ".rpmsave") + os.symlink("./grub.conf", menulst) + except: + pass + + try: + # make symlink for /etc/grub.conf (config files belong in /etc) + etcgrub = "%s%s" % (instRoot, "/etc/grub.conf") + if os.access (etcgrub, os.R_OK): + os.rename(etcgrub, etcgrub + ".rpmsave") + os.symlink(".." + self.configfile, etcgrub) + except: + pass + + def writeDeviceMap(self, instRoot, usedDevs, upgrade=False): + + if os.access(instRoot + "/boot/grub/device.map", os.R_OK): + # For upgrade, we want also e.g. devs that has been added + # to file during install for chainloading. + if upgrade: + f = open(instRoot + "/boot/grub/device.map", "r") + for line in f: + if line.startswith('(hd'): + (grubdisk, dev) = line.split()[:2] + dev = dev[5:] + if dev in self.drivelist: + usedDevs.add(dev) + f.close() + os.rename(instRoot + "/boot/grub/device.map", + instRoot + "/boot/grub/device.map.rpmsave") + + f = open(instRoot + "/boot/grub/device.map", "w+") + f.write("# this device map was generated by anaconda\n") + usedDiskDevs = set() + for dev in usedDevs: + drive = getDiskPart(dev, self.storage)[0] + usedDiskDevs.add(drive) + devs = list(usedDiskDevs) + devs.sort() + for drive in devs: + # XXX hack city. If they're not the sort of thing that'll + # be in the device map, they shouldn't still be in the list. + dev = self.storage.devicetree.getDeviceByName(drive) + if not dev.type == "mdarray": + f.write("(%s) %s\n" % (self.grubbyDiskName(drive), dev.path)) + f.close() + + def writeSysconfig(self, instRoot, grubTarget, upgrade): + sysconf = '/etc/sysconfig/grub' + if os.access (instRoot + sysconf, os.R_OK): + if upgrade: + return + self.perms = os.stat(instRoot + sysconf)[0] & 0777 + os.rename(instRoot + sysconf, + instRoot + sysconf + '.rpmsave') + # if it's an absolute symlink, just get it out of our way + elif (os.path.islink(instRoot + sysconf) and + os.readlink(instRoot + sysconf)[0] == '/'): + if upgrade: + return + os.rename(instRoot + sysconf, + instRoot + sysconf + '.rpmsave') + f = open(instRoot + sysconf, 'w+') + f.write("boot=/dev/%s\n" %(grubTarget,)) + f.write("forcelba=0\n") + f.close() + + def grubbyDiskName(self, name): + return "hd%d" % self.drivelist.index(name) + + def grubbyPartitionName(self, dev): + (name, partNum) = getDiskPart(dev, self.storage) + if partNum != None: + return "(%s,%d)" % (self.grubbyDiskName(name), partNum) + else: + return "(%s)" %(self.grubbyDiskName(name)) + + + def getBootloaderConfig(self, instRoot, bl, kernelList, + chainList, defaultDev): + config = bootloaderInfo.getBootloaderConfig(self, instRoot, + bl, kernelList, chainList, + defaultDev) + + liloTarget = bl.getDevice() + + config.addEntry("boot", '/dev/' + liloTarget, replace = 0) + config.addEntry("map", "/boot/map", replace = 0) + config.addEntry("install", "/boot/boot.b", replace = 0) + message = "/boot/message" + + if self.pure is not None and not self.useGrubVal: + config.addEntry("restricted", replace = 0) + config.addEntry("password", self.pure, replace = 0) + + if self.serial == 1: + # grab the 0-based number of the serial console device + unit = self.serialDevice[-1] + # FIXME: we should probably put some options, but lilo + # only supports up to 9600 baud so just use the defaults + # it's better than nothing :( + config.addEntry("serial=%s" %(unit,)) + else: + # message screws up serial console + if os.access(instRoot + message, os.R_OK): + config.addEntry("message", message, replace = 0) + + if not config.testEntry('lba32'): + if bl.above1024 and not iutil.isX86(bits=32): + config.addEntry("lba32", replace = 0) + + return config + + def write(self, instRoot, bl, kernelList, chainList, + defaultDev): + if self.timeout is None and chainList: + self.timeout = 5 + + # XXX HACK ALERT - see declaration above + if self.doUpgradeOnly: + if self.useGrubVal: + return self.writeGrub(instRoot, bl, kernelList, + chainList, defaultDev, + upgrade = True) + return 0 + + if len(kernelList) < 1: + raise BootyNoKernelWarning + + rc = self.writeGrub(instRoot, bl, kernelList, + chainList, defaultDev, + not self.useGrubVal) + if rc: + return rc + + # XXX move the lilo.conf out of the way if they're using GRUB + # so that /sbin/installkernel does a more correct thing + if self.useGrubVal and os.access(instRoot + '/etc/lilo.conf', os.R_OK): + os.rename(instRoot + "/etc/lilo.conf", + instRoot + "/etc/lilo.conf.anaconda") + + return 0 + + def getArgList(self): + args = bootloaderInfo.getArgList(self) + + if self.password: + args.append("--md5pass=%s" %(self.password)) + + return args + + def __init__(self, anaconda): + bootloaderInfo.__init__(self, anaconda) + + # these have to be set /before/ efiBootloaderInfo.__init__(), or + # they'll be overwritten. + self._configdir = "/boot/grub" + self._configname = "grub.conf" + + efiBootloaderInfo.__init__(self, anaconda, initialize=False) + + # XXX use checkbootloader to determine what to default to + self.useGrubVal = 1 + self.kernelLocation = "/boot/" + self.password = None + self.pure = None diff --git a/cmdline.py b/cmdline.py new file mode 100644 index 0000000..a3fbf23 --- /dev/null +++ b/cmdline.py @@ -0,0 +1,221 @@ +# +# cmdline.py - non-interactive, very very simple frontend to anaconda +# +# Copyright (C) 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz . +# +# Author: David Cantrell + +commandstubsdir = $(libdir)/$(PACKAGE_NAME) +dist_commandstubs_SCRIPTS = *-stub + +MAINTAINERCLEANFILES = Makefile.in diff --git a/command-stubs/Makefile.in b/command-stubs/Makefile.in new file mode 100644 index 0000000..fdae86a --- /dev/null +++ b/command-stubs/Makefile.in @@ -0,0 +1,517 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# command-stubs/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = command-stubs +DIST_COMMON = $(dist_commandstubs_SCRIPTS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(commandstubsdir)" +SCRIPTS = $(dist_commandstubs_SCRIPTS) +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +commandstubsdir = $(libdir)/$(PACKAGE_NAME) +dist_commandstubs_SCRIPTS = *-stub +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign command-stubs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign command-stubs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-dist_commandstubsSCRIPTS: $(dist_commandstubs_SCRIPTS) + @$(NORMAL_INSTALL) + test -z "$(commandstubsdir)" || $(MKDIR_P) "$(DESTDIR)$(commandstubsdir)" + @list='$(dist_commandstubs_SCRIPTS)'; test -n "$(commandstubsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n' \ + -e 'h;s|.*|.|' \ + -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) { files[d] = files[d] " " $$1; \ + if (++n[d] == $(am__install_max)) { \ + print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ + else { print "f", d "/" $$4, $$1 } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(commandstubsdir)$$dir'"; \ + $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(commandstubsdir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-dist_commandstubsSCRIPTS: + @$(NORMAL_UNINSTALL) + @list='$(dist_commandstubs_SCRIPTS)'; test -n "$(commandstubsdir)" || exit 0; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 's,.*/,,;$(transform)'`; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(commandstubsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(commandstubsdir)" && rm -f $$files + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(SCRIPTS) +installdirs: + for dir in "$(DESTDIR)$(commandstubsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_commandstubsSCRIPTS + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_commandstubsSCRIPTS + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_commandstubsSCRIPTS \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am \ + uninstall-dist_commandstubsSCRIPTS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/command-stubs/list-harddrives-stub b/command-stubs/list-harddrives-stub new file mode 100755 index 0000000..e854d6c --- /dev/null +++ b/command-stubs/list-harddrives-stub @@ -0,0 +1,39 @@ +#!/usr/bin/python +# +# scan system for harddrives and output device name/size +# +# Copyright (C) 2007, 2009 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import sys +import parted + +def main(argv): + lst = set() + + for dev in filter(lambda d: d.type != parted.DEVICE_DM, parted.getAllDevices()): + disk = parted.Disk(dev) + + for part in disk.partitions: + lst.add("%s %s" % (part.path, int(part.getSize()))) + + lst = list(lst) + lst.sort() + for entry in lst: + print entry + +if __name__ == "__main__": + main(sys.argv) diff --git a/command-stubs/loadkeys-stub b/command-stubs/loadkeys-stub new file mode 100755 index 0000000..1752717 --- /dev/null +++ b/command-stubs/loadkeys-stub @@ -0,0 +1,47 @@ +#!/usr/bin/python +# +# loadkeys-stub +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os +import sys + +# for testing +if (os.path.exists('isys')): + sys.path.append('isys') + +sys.path.append('/usr/lib/anaconda') + +import isys + +def usage(): + print "usage: %s keymap" %(sys.argv[0],) + sys.exit(1) + +def main(): + if len(sys.argv) != 2: + usage() + + try: + isys.loadKeymap(sys.argv[1]) + except SystemError: + pass + sys.exit(0) + +if __name__ == "__main__": + main() diff --git a/command-stubs/losetup-stub b/command-stubs/losetup-stub new file mode 100755 index 0000000..bf186a1 --- /dev/null +++ b/command-stubs/losetup-stub @@ -0,0 +1,56 @@ +#!/usr/bin/python +# +# losetup-stub +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os +import sys + +# for testing +if (os.path.exists('isys')): + sys.path.append('isys') + +sys.path.append('/usr/lib/anaconda') + +import isys +from sys import argv + +def usage(): + print "usage: losetup [-d] /dev/loopN [image]" + sys.exit(1) + +if len(argv) < 3: + usage() + +if argv[1] == "-d" and len(argv[2]) > 4 and argv[2][-5:-1] == "loop": + try: + isys.unlosetup(argv[2]) + except SystemError, (errno, msg): + print msg + sys.exit (1) + sys.exit(0) + +if len(argv[1]) > 4 and argv[1][-5:-1] == "loop": + try: + isys.losetup(argv[1], argv[2]) + except SystemError, (errno, msg): + print msg + sys.exit (1) + sys.exit(0) + +usage() diff --git a/command-stubs/mknod-stub b/command-stubs/mknod-stub new file mode 100755 index 0000000..dd72aeb --- /dev/null +++ b/command-stubs/mknod-stub @@ -0,0 +1,58 @@ +#!/usr/bin/python +# +# mknod-stub +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import sys, os +sys.path.append('/usr/lib/anaconda') +import isys +import string +import stat +import os + +def usage(): + sys.stderr.write("Usage: %s [b|c] \n" %(sys.argv[0],)) + sys.exit(1) + +def main(): + if len(sys.argv) < 2: + usage() + + if (sys.argv[1] == '-h') or (sys.argv[1] == '--help'): + usage() + + path = sys.argv[1] + + if len(sys.argv) < 5: + usage() + + if (sys.argv[2] == 'b'): + type = stat.S_IFBLK + elif (sys.argv[2] == 'c'): + type = stat.S_IFCHR + else: + usage() + + major = int(sys.argv[3]) + minor = int(sys.argv[4]) + path = sys.argv[1] + + os.mknod(path, 0644 | type, os.makedev(major, minor)) + +if __name__ == "__main__": + main() diff --git a/command-stubs/raidstart-stub b/command-stubs/raidstart-stub new file mode 100755 index 0000000..2a0d8b3 --- /dev/null +++ b/command-stubs/raidstart-stub @@ -0,0 +1,57 @@ +#!/usr/bin/python +# +# raidstart-stub +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os +import sys + +# for testing +if (os.path.exists('rpmmodule')): + sys.path.append('rpmmodule') + sys.path.append('libfdisk') + sys.path.append('balkan') + sys.path.append('gnome-map') + sys.path.append('isys') + +sys.path.append('/usr/lib/anaconda') + +import anaconda_log +import fsset +import raid +import isys +from sys import argv + +if len(argv) != 2 or argv[1][:7] != "/dev/md": + print "usage: raidstart /dev/md[minornum]" + sys.exit(1) + +targMinor = int(argv[1][7:]) + +drives = isys.hardDriveDict().keys() +drives.sort (isys.compareDrives) + +raidDevices = raid.scanForRaid(drives) +for (minor, devices, level, totalDisks) in raidDevices: + if targMinor == minor: + devName = "md%d" % (minor,) + isys.raidstart(devName, devices[0]) + sys.exit(0) + +print "could not find devices associated with raid device md%d" % targMinor +sys.exit(1) diff --git a/command-stubs/raidstop-stub b/command-stubs/raidstop-stub new file mode 100755 index 0000000..942c29e --- /dev/null +++ b/command-stubs/raidstop-stub @@ -0,0 +1,44 @@ +#!/usr/bin/python +# +# raidstop-stub +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os +import sys + +# for testing +if (os.path.exists('rpmmodule')): + sys.path.append('rpmmodule') + sys.path.append('libfdisk') + sys.path.append('balkan') + sys.path.append('gnome-map') + sys.path.append('isys') + +sys.path.append('/usr/lib/anaconda') + +import anaconda_log +import fsset +import raid +import isys +from sys import argv + +if len(argv) != 2 or argv[1][:7] != "/dev/md": + print "usage: raidstop /dev/md[minornum]" + sys.exit(1) + +isys.raidstop(argv[1][5:]) diff --git a/compssort.py b/compssort.py new file mode 100644 index 0000000..3ad9795 --- /dev/null +++ b/compssort.py @@ -0,0 +1,69 @@ +# +# compssort.py +# +# Copyright (C) 2005, 2006, 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +def _getDefaultLangs(): + languages = [] + for envar in ('LANGUAGE', 'LC_ALL', 'LC_MESSAGES', 'LANG'): + val = os.environ.get(envar) + if val: + languages = val.split(':') + break + if 'C' not in languages: + languages.append('C') + + # now normalize and expand the languages + nelangs = [] + for lang in languages: + for nelang in gettext._expand_lang(lang): + if nelang not in nelangs: + nelangs.append(nelang) + return nelangs + +# kind of lame caching of translations so we don't always have +# to do all the looping +strs = {} +def xmltrans(base, thedict): + if strs.has_key(base): + return strs[base] + + langs = _getDefaultLangs() + for l in langs: + if thedict.has_key(l): + strs[base] = thedict[l] + return strs[base] + strs[base] = base + return base + +def ui_comps_sort(one, two): + if one.display_order > two.display_order: + return 1 + elif one.display_order < two.display_order: + return -1 + elif xmltrans(one.name, one.translated_name) > \ + xmltrans(two.name, two.translated_name): + return 1 + elif xmltrans(one.name, one.translated_name) < \ + xmltrans(two.name, two.translated_name): + return -1 + return 0 diff --git a/config.guess b/config.guess new file mode 100755 index 0000000..dc84c68 --- /dev/null +++ b/config.guess @@ -0,0 +1,1501 @@ +#! /bin/sh +# Attempt to guess a canonical system name. +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 +# Free Software Foundation, Inc. + +timestamp='2009-11-20' + +# 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 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. + + +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. +# +# This script attempts to guess a canonical system name similar to +# config.sub. If it succeeds, it prints the system name on stdout, and +# exits with 0. Otherwise, it exits with 1. +# +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD + +me=`echo "$0" | sed -e 's,.*/,,'` + +usage="\ +Usage: $0 [OPTION] + +Output the configuration name of the system \`$me' is run on. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.guess ($timestamp) + +Originally written by Per Bothner. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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 + +# 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 tupples: *-*-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=`(/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 ;; + *) machine=${UNAME_MACHINE_ARCH}-unknown ;; + esac + # The Operating System including object format, if it has switched + # to ELF recently, or will in the future. + case "${UNAME_MACHINE_ARCH}" in + 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 + # 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/[-_].*/\./'` + ;; + 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}" + exit ;; + *:OpenBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${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 ;; + 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'` + exit ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit ;; + *:z/VM:*:*) + echo s390-ibm-zvmoe + exit ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit ;; + arm:riscos:*:*|arm:RISCOS:*:*) + echo arm-unknown-riscos + exit ;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit ;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. + if test "`(/bin/universe) 2>/dev/null`" = att ; then + echo pyramid-pyramid-sysv3 + else + echo pyramid-pyramid-bsd + fi + exit ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit ;; + DRS?6000:unix:4.0:6*) + echo sparc-icl-nx6 + exit ;; + DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7; exit ;; + esac ;; + s390x:SunOS:*:*) + echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; + i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) + eval $set_cc_for_build + SUN_ARCH="i386" + # If there is a compiler, see if it is configured for 64-bit objects. + # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. + # This test works for both compilers. + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + SUN_ARCH="x86_64" + fi + fi + echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:6*:*) + # According to config.sub, this is the proper way to canonicalize + # SunOS6. Hard to guess exactly what SunOS6 will be like, but + # it's likely to be more like Solaris than SunOS4. + echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + sun4*:SunOS:*:*) + case "`/usr/bin/arch -k`" in + Series*|S4*) + UNAME_RELEASE=`uname -v` + ;; + esac + # Japanese Language versions have a version number like `4.1.3-JL'. + echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` + exit ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit ;; + sun*:*:4.2BSD:*) + UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) + echo m68k-sun-sunos${UNAME_RELEASE} + ;; + sun4) + echo sparc-sun-sunos${UNAME_RELEASE} + ;; + esac + exit ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit ;; + mips:*:*:UMIPS | mips:*:*:RISCos) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus +#include /* for printf() prototype */ + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif + #if defined (host_mips) && defined (MIPSEB) + #if defined (SYSTYPE_SYSV) + printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_SVR4) + printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); + #endif + #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) + printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); + #endif + #endif + exit (-1); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && + dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && + SYSTEM_NAME=`$dummy $dummyarg` && + { echo "$SYSTEM_NAME"; exit; } + echo mips-mips-riscos${UNAME_RELEASE} + exit ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit ;; + AViiON:dgux:*:*) + # DG/UX returns AViiON for all architectures + UNAME_PROCESSOR=`/usr/bin/uname -p` + if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] + then + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ + [ ${TARGET_BINARY_INTERFACE}x = x ] + then + echo m88k-dg-dgux${UNAME_RELEASE} + else + echo m88k-dg-dguxbcs${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} + fi + exit ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit ;; + ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. + echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id + exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit ;; + ia64:AIX:*:*) + if [ -x /usr/bin/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} + exit ;; + *:AIX:2:3) + if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + + main() + { + if (!__power_pc()) + exit(1); + puts("powerpc-ibm-aix3.2.5"); + exit(0); + } +EOF + if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` + then + echo "$SYSTEM_NAME" + else + echo rs6000-ibm-aix3.2.5 + fi + elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then + echo rs6000-ibm-aix3.2.4 + else + echo rs6000-ibm-aix3.2 + fi + exit ;; + *:AIX:*:[456]) + 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/oslevel ] ; then + IBM_REV=`/usr/bin/oslevel` + else + IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} + fi + echo ${IBM_ARCH}-ibm-aix${IBM_REV} + exit ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit ;; + 9000/[34678]??:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + case "${UNAME_MACHINE}" in + 9000/31? ) HP_ARCH=m68000 ;; + 9000/[34]?? ) HP_ARCH=m68k ;; + 9000/[678][0-9][0-9]) + if [ -x /usr/bin/getconf ]; then + sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` + sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + case "${sc_cpu_version}" in + 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 + 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 532) # CPU_PA_RISC2_0 + case "${sc_kernel_bits}" in + 32) HP_ARCH="hppa2.0n" ;; + 64) HP_ARCH="hppa2.0w" ;; + '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + esac ;; + esac + fi + if [ "${HP_ARCH}" = "" ]; then + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + + #define _HPUX_SOURCE + #include + #include + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + test -z "$HP_ARCH" && HP_ARCH=hppa + fi ;; + esac + if [ ${HP_ARCH} = "hppa2.0w" ] + then + eval $set_cc_for_build + + # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating + # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler + # generating 64-bit code. GNU and HP use different nomenclature: + # + # $ CC_FOR_BUILD=cc ./config.guess + # => hppa2.0w-hp-hpux11.23 + # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess + # => hppa64-hp-hpux11.23 + + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + grep -q __LP64__ + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit ;; + 3050*:HI-UX:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + int + main () + { + long cpu = sysconf (_SC_CPU_VERSION); + /* The order matters, because CPU_IS_HP_MC68K erroneously returns + true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct + results, however. */ + if (CPU_IS_PA_RISC (cpu)) + { + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; + case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; + default: puts ("hppa-hitachi-hiuxwe2"); break; + } + } + else if (CPU_IS_HP_MC68K (cpu)) + puts ("m68k-hitachi-hiuxwe2"); + else puts ("unknown-hitachi-hiuxwe2"); + exit (0); + } +EOF + $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + echo unknown-hitachi-hiuxwe2 + exit ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*[A-Z]90:*:*:*) + echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ + | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ + -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ + -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + *:UNICOS/mp:*:*) + echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit ;; + F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) + FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` + echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit ;; + *:FreeBSD:*:*) + case ${UNAME_MACHINE} in + pc98) + echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + amd64) + echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + *) + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + esac + exit ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit ;; + *:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit ;; + i*:windows32*:*) + # uname -m includes "-pc" on this system. + echo ${UNAME_MACHINE}-mingw32 + exit ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit ;; + *:Interix*:*) + case ${UNAME_MACHINE} in + x86) + echo i586-pc-interix${UNAME_RELEASE} + exit ;; + authenticamd | genuineintel | EM64T) + echo x86_64-unknown-interix${UNAME_RELEASE} + exit ;; + IA64) + echo ia64-unknown-interix${UNAME_RELEASE} + exit ;; + esac ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i586-pc-interix + exit ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit ;; + amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) + echo x86_64-unknown-cygwin + exit ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit ;; + *:GNU:*:*) + # the GNU system + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`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 '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu + exit ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + 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="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu + else + echo ${UNAME_MACHINE}-unknown-linux-gnueabi + fi + exit ;; + avr32*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + cris:Linux:*:*) + echo cris-axis-linux-gnu + exit ;; + crisv32:Linux:*:*) + echo crisv32-axis-linux-gnu + exit ;; + frv:Linux:*:*) + echo frv-unknown-linux-gnu + exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + 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-gnu"; exit; } + ;; + or32:Linux:*:*) + echo or32-unknown-linux-gnu + exit ;; + padre:Linux:*:*) + echo sparc-unknown-linux-gnu + exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + 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-gnu ;; + PA8*) echo hppa2.0-unknown-linux-gnu ;; + *) echo hppa-unknown-linux-gnu ;; + esac + exit ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit ;; + sh64*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + vax:Linux:*:*) + echo ${UNAME_MACHINE}-dec-linux-gnu + exit ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit ;; + xtensa*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit ;; + i*86:DYNIX/ptx:4*:*) + # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. + # earlier versions are messed up and put the nodename in both + # sysname and nodename. + echo i386-sequent-sysv4 + exit ;; + i*86:UNIX_SV:4.2MP:2.*) + # Unixware is an offshoot of SVR4, but it has its own version + # number series starting with 2... + # I am not positive that other SVR4 systems won't match this, + # I just have to hope. -- rms. + # Use sysv4.2uw... so that sysv4* matches it. + echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} + exit ;; + i*86:OS/2:*:*) + # If we were able to find `uname', then EMX Unix compatibility + # is probably installed. + echo ${UNAME_MACHINE}-pc-os2-emx + exit ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit ;; + i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) + UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` + if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then + echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} + else + echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} + fi + exit ;; + i*86:*:5:[678]*) + # UnixWare 7.x, OpenUNIX and OpenServer 6. + case `/bin/uname -X | grep "^Machine"` in + *486*) UNAME_MACHINE=i486 ;; + *Pentium) UNAME_MACHINE=i586 ;; + *Pent*|*Celeron) UNAME_MACHINE=i686 ;; + esac + echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} + exit ;; + i*86:*:3.2:*) + if test -f /usr/options/cb.name; then + UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then + UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` + (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ + && UNAME_MACHINE=i586 + (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 + echo ${UNAME_MACHINE}-pc-sco$UNAME_REL + else + echo ${UNAME_MACHINE}-pc-sysv32 + fi + exit ;; + pc:*:*:*) + # Left here for compatibility: + # uname -m prints for DJGPP always 'pc', but it prints nothing about + # the processor, so we play safe by assuming i586. + # Note: whatever this is, it MUST be the same as what config.sub + # prints for the "djgpp" host, or else GDB configury 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 ;; + 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 ;; + 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 + case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + 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 + UNAME_PROCESSOR="x86_64" + fi + fi ;; + unknown) UNAME_PROCESSOR=powerpc ;; + esac + 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 ;; + NSE-?:NONSTOP_KERNEL:*:*) + echo nse-tandem-nsk${UNAME_RELEASE} + exit ;; + NSR-?:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit ;; + *:Plan9:*:*) + # "uname -m" is not consistent, so use $cputype instead. 386 + # is converted to i386 for consistency with other x86 + # operating systems. + if test "$cputype" = "386"; then + UNAME_MACHINE=i386 + else + UNAME_MACHINE="$cputype" + fi + echo ${UNAME_MACHINE}-unknown-plan9 + exit ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit ;; + SEI:*:*:SEIUX) + echo mips-sei-seiux${UNAME_RELEASE} + exit ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit ;; + *:*VMS:*:*) + UNAME_MACHINE=`(uname -p) 2>/dev/null` + case "${UNAME_MACHINE}" in + A*) echo alpha-dec-vms ; exit ;; + I*) echo ia64-dec-vms ; exit ;; + V*) echo vax-dec-vms ; exit ;; + esac ;; + *:XENIX:*:SysV) + echo i386-pc-xenix + exit ;; + i*86:skyos:*:*) + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + exit ;; + i*86:rdos:*:*) + echo ${UNAME_MACHINE}-pc-rdos + exit ;; + i*86:AROS:*:*) + echo ${UNAME_MACHINE}-pc-aros + exit ;; +esac + +#echo '(No uname command or uname output not recognized.)' 1>&2 +#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 + +eval $set_cc_for_build +cat >$dummy.c < +# include +#endif +main () +{ +#if defined (sony) +#if defined (MIPSEB) + /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, + I don't know.... */ + printf ("mips-sony-bsd\n"); exit (0); +#else +#include + printf ("m68k-sony-newsos%s\n", +#ifdef NEWSOS4 + "4" +#else + "" +#endif + ); exit (0); +#endif +#endif + +#if defined (__arm) && defined (__acorn) && defined (__unix) + printf ("arm-acorn-riscix\n"); exit (0); +#endif + +#if defined (hp300) && !defined (hpux) + printf ("m68k-hp-bsd\n"); exit (0); +#endif + +#if defined (NeXT) +#if !defined (__ARCHITECTURE__) +#define __ARCHITECTURE__ "m68k" +#endif + int version; + version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); + exit (0); +#endif + +#if defined (MULTIMAX) || defined (n16) +#if defined (UMAXV) + printf ("ns32k-encore-sysv\n"); exit (0); +#else +#if defined (CMU) + printf ("ns32k-encore-mach\n"); exit (0); +#else + printf ("ns32k-encore-bsd\n"); exit (0); +#endif +#endif +#endif + +#if defined (__386BSD__) + printf ("i386-pc-bsd\n"); exit (0); +#endif + +#if defined (sequent) +#if defined (i386) + printf ("i386-sequent-dynix\n"); exit (0); +#endif +#if defined (ns32000) + printf ("ns32k-sequent-dynix\n"); exit (0); +#endif +#endif + +#if defined (_SEQUENT_) + struct utsname un; + + uname(&un); + + if (strncmp(un.version, "V2", 2) == 0) { + printf ("i386-sequent-ptx2\n"); exit (0); + } + if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ + printf ("i386-sequent-ptx1\n"); exit (0); + } + printf ("i386-sequent-ptx\n"); exit (0); + +#endif + +#if defined (vax) +# if !defined (ultrix) +# include +# if defined (BSD) +# if BSD == 43 + printf ("vax-dec-bsd4.3\n"); exit (0); +# else +# if BSD == 199006 + printf ("vax-dec-bsd4.3reno\n"); exit (0); +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# endif +# else + printf ("vax-dec-bsd\n"); exit (0); +# endif +# else + printf ("vax-dec-ultrix\n"); exit (0); +# endif +#endif + +#if defined (alliant) && defined (i860) + printf ("i860-alliant-bsd\n"); exit (0); +#endif + + exit (1); +} +EOF + +$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && + { echo "$SYSTEM_NAME"; exit; } + +# Apollos put the system type in the environment. + +test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } + +# Convex versions that predate uname can use getsysinfo(1) + +if [ -x /usr/convex/getsysinfo ] +then + case `getsysinfo -f cpu_type` in + c1*) + echo c1-convex-bsd + exit ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit ;; + c34*) + echo c34-convex-bsd + exit ;; + c38*) + echo c38-convex-bsd + exit ;; + c4*) + echo c4-convex-bsd + exit ;; + esac +fi + +cat >&2 < in order to provide the needed +information to handle your system. + +config.guess timestamp = $timestamp + +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` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null` + +hostinfo = `(hostinfo) 2>/dev/null` +/bin/universe = `(/bin/universe) 2>/dev/null` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` +/bin/arch = `(/bin/arch) 2>/dev/null` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` + +UNAME_MACHINE = ${UNAME_MACHINE} +UNAME_RELEASE = ${UNAME_RELEASE} +UNAME_SYSTEM = ${UNAME_SYSTEM} +UNAME_VERSION = ${UNAME_VERSION} +EOF + +exit 1 + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/config.h.in b/config.h.in new file mode 100644 index 0000000..03744b6 --- /dev/null +++ b/config.h.in @@ -0,0 +1,390 @@ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Date of anaconda build */ +#undef BUILD_DATE + +/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP + systems. This function is required for `alloca.c' support on those systems. + */ +#undef CRAY_STACKSEG_END + +/* Define to 1 if using `alloca.c'. */ +#undef C_ALLOCA + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +#undef ENABLE_NLS + +/* Define to 1 if you have `alloca', as a function or macro. */ +#undef HAVE_ALLOCA + +/* Define to 1 if you have and it should be used (not on Ultrix). + */ +#undef HAVE_ALLOCA_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARGZ_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_INET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_ARPA_NAMESER_H + +/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the + CoreFoundation framework. */ +#undef HAVE_CFLOCALECOPYCURRENT + +/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +#undef HAVE_CFPREFERENCESCOPYAPPVALUE + +/* Define to 1 if your system has a working `chown' function. */ +#undef HAVE_CHOWN + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +#undef HAVE_DCGETTEXT + +/* Define to 1 if you have the header file. */ +#undef HAVE_DLFCN_H + +/* Define to 1 if you have the `dup2' function. */ +#undef HAVE_DUP2 + +/* Define to 1 if you have the header file. */ +#undef HAVE_FCNTL_H + +/* Define to 1 if you have the `fdatasync' function. */ +#undef HAVE_FDATASYNC + +/* Define to 1 if you have the `fork' function. */ +#undef HAVE_FORK + +/* Define to 1 if you have the `ftruncate' function. */ +#undef HAVE_FTRUNCATE + +/* Define to 1 if you have the `getcwd' function. */ +#undef HAVE_GETCWD + +/* Define to 1 if you have the `gethostbyname' function. */ +#undef HAVE_GETHOSTBYNAME + +/* Define to 1 if you have the `getpagesize' function. */ +#undef HAVE_GETPAGESIZE + +/* Define if the GNU gettext() function is already present or preinstalled. */ +#undef HAVE_GETTEXT + +/* Define to 1 if you have the `gettimeofday' function. */ +#undef HAVE_GETTIMEOFDAY + +/* Define if you have the iconv() function and it works. */ +#undef HAVE_ICONV + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `lchown' function. */ +#undef HAVE_LCHOWN + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIBINTL_H + +/* Define to 1 if you have the `selinux' library (-lselinux). */ +#undef HAVE_LIBSELINUX + +/* Define to 1 if you have the header file. */ +#undef HAVE_LIMITS_H + +/* Define to 1 if your system has a GNU libc compatible `malloc' function, and + to 0 otherwise. */ +#undef HAVE_MALLOC + +/* Define to 1 if you have the header file. */ +#undef HAVE_MALLOC_H + +/* Define to 1 if you have the `memmove' function. */ +#undef HAVE_MEMMOVE + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the `mkdir' function. */ +#undef HAVE_MKDIR + +/* Define to 1 if you have the `mkfifo' function. */ +#undef HAVE_MKFIFO + +/* Define to 1 if you have a working `mmap' system call. */ +#undef HAVE_MMAP + +/* Define to 1 if you have the `munmap' function. */ +#undef HAVE_MUNMAP + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETDB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_NETINET_IN_H + +/* Define to 1 if your system has a GNU libc compatible `realloc' function, + and to 0 otherwise. */ +#undef HAVE_REALLOC + +/* Define to 1 if you have the `realpath' function. */ +#undef HAVE_REALPATH + +/* Define to 1 if you have the header file. */ +#undef HAVE_RESOLV_H + +/* Define to 1 if you have the `select' function. */ +#undef HAVE_SELECT + +/* Define to 1 if you have the `setenv' function. */ +#undef HAVE_SETENV + +/* Define to 1 if you have the `sethostname' function. */ +#undef HAVE_SETHOSTNAME + +/* Define to 1 if you have the `socket' function. */ +#undef HAVE_SOCKET + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDDEF_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the `strcasecmp' function. */ +#undef HAVE_STRCASECMP + +/* Define to 1 if you have the `strchr' function. */ +#undef HAVE_STRCHR + +/* Define to 1 if you have the `strcspn' function. */ +#undef HAVE_STRCSPN + +/* Define to 1 if you have the `strdup' function. */ +#undef HAVE_STRDUP + +/* Define to 1 if you have the `strerror' function. */ +#undef HAVE_STRERROR + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the `strncasecmp' function. */ +#undef HAVE_STRNCASECMP + +/* Define to 1 if you have the `strndup' function. */ +#undef HAVE_STRNDUP + +/* Define to 1 if you have the `strrchr' function. */ +#undef HAVE_STRRCHR + +/* Define to 1 if you have the `strstr' function. */ +#undef HAVE_STRSTR + +/* Define to 1 if you have the `strtol' function. */ +#undef HAVE_STRTOL + +/* Define to 1 if you have the `strtoul' function. */ +#undef HAVE_STRTOUL + +/* Define to 1 if `st_rdev' is a member of `struct stat'. */ +#undef HAVE_STRUCT_STAT_ST_RDEV + +/* Define to 1 if you have the `strverscmp' function. */ +#undef HAVE_STRVERSCMP + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYSLOG_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_IOCTL_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_MOUNT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PARAM_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SOCKET_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TIME_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_VFS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_TERMIOS_H + +/* Define to 1 if you have the `uname' function. */ +#undef HAVE_UNAME + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `utime' function. */ +#undef HAVE_UTIME + +/* Define to 1 if you have the header file. */ +#undef HAVE_UTIME_H + +/* Define to 1 if you have the `vfork' function. */ +#undef HAVE_VFORK + +/* Define to 1 if you have the header file. */ +#undef HAVE_VFORK_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_WCHAR_H + +/* Define to 1 if you have the `wcwidth' function. */ +#undef HAVE_WCWIDTH + +/* Define to 1 if `fork' works. */ +#undef HAVE_WORKING_FORK + +/* Define to 1 if `vfork' works. */ +#undef HAVE_WORKING_VFORK + +/* Define to 1 if `lstat' dereferences a symlink specified with a trailing + slash. */ +#undef LSTAT_FOLLOWS_SLASHED_SYMLINK + +/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +#undef LT_OBJDIR + +/* Define to 1 if `major', `minor', and `makedev' are declared in . + */ +#undef MAJOR_IN_MKDEV + +/* Define to 1 if `major', `minor', and `makedev' are declared in + . */ +#undef MAJOR_IN_SYSMACROS + +/* Name of package */ +#undef PACKAGE + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the home page for this package. */ +#undef PACKAGE_URL + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* If using the C implementation of alloca, define if you know the + direction of stack growth for your system; otherwise it will be + automatically deduced at runtime. + STACK_DIRECTION > 0 => grows toward higher addresses + STACK_DIRECTION < 0 => grows toward lower addresses + STACK_DIRECTION = 0 => direction of growth unknown */ +#undef STACK_DIRECTION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Version number of package */ +#undef VERSION + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT32_T + +/* Define for Solaris 2.5.1 so the uint64_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT64_T + +/* Define for Solaris 2.5.1 so the uint8_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +#undef _UINT8_T + +/* Define to `int' if doesn't define. */ +#undef gid_t + +/* Define to `__inline__' or `__inline' if that's what the C compiler + calls it, or to nothing if 'inline' is not supported under any name. */ +#ifndef __cplusplus +#undef inline +#endif + +/* Define to the type of a signed integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#undef int32_t + +/* Define to rpl_malloc if the replacement function should be used. */ +#undef malloc + +/* Define to `int' if does not define. */ +#undef mode_t + +/* Define to `long int' if does not define. */ +#undef off_t + +/* Define to `int' if does not define. */ +#undef pid_t + +/* Define to rpl_realloc if the replacement function should be used. */ +#undef realloc + +/* Define to `unsigned int' if does not define. */ +#undef size_t + +/* Define to `int' if does not define. */ +#undef ssize_t + +/* Define to `int' if doesn't define. */ +#undef uid_t + +/* Define to the type of an unsigned integer type of width exactly 16 bits if + such a type exists and the standard includes do not define it. */ +#undef uint16_t + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +#undef uint32_t + +/* Define to the type of an unsigned integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +#undef uint64_t + +/* Define to the type of an unsigned integer type of width exactly 8 bits if + such a type exists and the standard includes do not define it. */ +#undef uint8_t + +/* Define as `fork' if `vfork' does not work. */ +#undef vfork diff --git a/config.rpath b/config.rpath new file mode 100644 index 0000000..c547c68 --- /dev/null +++ b/config.rpath @@ -0,0 +1,666 @@ +#! /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-2007 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 AC_LIBTOOL_PROG_COMPILER_PIC. + +wl= +if test "$GCC" = yes; then + wl='-Wl,' +else + case "$host_os" in + aix*) + wl='-Wl,' + ;; + darwin*) + case $cc_basename in + xlc*) + wl='-Wl,' + ;; + esac + ;; + mingw* | cygwin* | pw32* | os2*) + ;; + hpux9* | hpux10* | hpux11*) + wl='-Wl,' + ;; + irix5* | irix6* | nonstopux*) + wl='-Wl,' + ;; + newsos6) + ;; + linux* | k*bsd*-gnu) + case $cc_basename in + icc* | ecc*) + wl='-Wl,' + ;; + pgcc | pgf77 | pgf90) + wl='-Wl,' + ;; + ccc*) + wl='-Wl,' + ;; + como) + wl='-lopt=' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + wl='-Wl,' + ;; + esac + ;; + esac + ;; + osf3* | osf4* | osf5*) + wl='-Wl,' + ;; + rdos*) + ;; + solaris*) + wl='-Wl,' + ;; + 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 AC_LIBTOOL_PROG_LD_SHLIBS. + +hardcode_libdir_flag_spec= +hardcode_libdir_separator= +hardcode_direct=no +hardcode_minus_L=no + +case "$host_os" in + cygwin* | mingw* | pw32*) + # 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 + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + fi + ;; + amigaos*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we cannot use + # them. + ld_shlibs=no + ;; + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + : + else + ld_shlibs=no + fi + ;; + cygwin* | mingw* | pw32*) + # 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 + ;; + interix[3-9]*) + hardcode_direct=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + gnu* | linux* | k*bsd*-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 + ;; + aix4* | aix5*) + 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].*|aix5*) + 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*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + # see comment about different semantics on the GNU ld section + ld_shlibs=no + ;; + bsdi[45]*) + ;; + cygwin* | mingw* | pw32*) + # 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 test "$GCC" = yes ; then + : + else + case $cc_basename in + xlc*) + ;; + *) + ld_shlibs=no + ;; + esac + fi + ;; + dgux*) + hardcode_libdir_flag_spec='-L$libdir' + ;; + freebsd1*) + ld_shlibs=no + ;; + freebsd2.2*) + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + ;; + freebsd2*) + 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=: + ;; + 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 AC_LIBTOOL_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' + ;; + aix4* | aix5*) + library_names_spec='$libname$shrext' + ;; + amigaos*) + library_names_spec='$libname.a' + ;; + beos*) + library_names_spec='$libname$shrext' + ;; + bsdi[45]*) + library_names_spec='$libname$shrext' + ;; + cygwin* | mingw* | pw32*) + 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' + ;; + freebsd1*) + ;; + freebsd* | dragonfly*) + case "$host_os" in + freebsd[123]*) + library_names_spec='$libname$shrext$versuffix' ;; + *) + library_names_spec='$libname$shrext' ;; + esac + ;; + gnu*) + 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) + 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' + ;; + 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=/' <. Submit a context +# diff and a properly formatted GNU ChangeLog entry. +# +# Configuration subroutine to validate and canonicalize a configuration type. +# Supply the specified configuration type as an argument. +# If it is invalid, we print an error message on stderr and exit with code 1. +# Otherwise, we print the canonical config type on stdout and succeed. + +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + +# 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 + $0 [OPTION] ALIAS + +Canonicalize a configuration name. + +Operation modes: + -h, --help print this help, then exit + -t, --time-stamp print date of last modification, then exit + -v, --version print version number, then exit + +Report bugs and patches to ." + +version="\ +GNU config.sub ($timestamp) + +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, +2002, 2003, 2004, 2005, 2006, 2007, 2008 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-dietlibc | linux-newlib* | linux-uclibc* | \ + uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ + kopensolaris*-gnu* | \ + storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + 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*) + os=-lynxos + ;; + -ptx*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` + ;; + -windowsnt*) + os=`echo $os | sed -e 's/windowsnt/winnt/'` + ;; + -psos*) + os=-psos + ;; + -mint | -mint[0-9]*) + basic_machine=m68k-atari + os=-mint + ;; +esac + +# Decode aliases for certain CPU-COMPANY combinations. +case $basic_machine in + # Recognize the basic CPU types without company name. + # Some are omitted here because they have special meanings below. + 1750a | 580 \ + | a29k \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | am33_2.0 \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ + | bfin \ + | c4x | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fido | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k | iq2000 \ + | lm32 \ + | m32c | m32r | m32rle | m68000 | m68k | m88k \ + | maxq | mb | microblaze | 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 \ + | mipsisa64 | mipsisa64el \ + | mipsisa64r2 | mipsisa64r2el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | moxie \ + | mt \ + | msp430 \ + | nios | nios2 \ + | ns16k | ns32k \ + | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | rx \ + | score \ + | 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 \ + | spu | strongarm \ + | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ + | v850 | v850e \ + | we32k \ + | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ + | z8k | z80) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12 | picochip) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + ms1) + basic_machine=mt-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-* \ + | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ + | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ + | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ + | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ + | avr-* | avr32-* \ + | bfin-* | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | craynv-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* | iq2000-* \ + | lm32-* \ + | m32c-* | m32r-* | m32rle-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ + | 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-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64r2-* | mipsisa64r2el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | mmix-* \ + | mt-* \ + | msp430-* \ + | nios-* | nios2-* \ + | none-* | np1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | 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-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tron-* \ + | ubicom32-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ + | xstormy16-* | xtensa*-* \ + | ymp-* \ + | z8k-* | z80-*) + ;; + # Recognize the basic CPU types without company name, with glob match. + xtensa*) + basic_machine=$basic_machine-unknown + ;; + # Recognize the various machine names and aliases which stand + # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; + 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) + basic_machine=m68000-att + ;; + 3b*) + basic_machine=we32k-att + ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + abacus) + basic_machine=abacus-unknown + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; + alliant | fx80) + basic_machine=fx80-alliant + ;; + altos | altos3068) + basic_machine=m68k-altos + ;; + am29k) + basic_machine=a29k-none + os=-bsd + ;; + amd64) + basic_machine=x86_64-pc + ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + amdahl) + basic_machine=580-amdahl + os=-sysv + ;; + amiga | amiga-*) + basic_machine=m68k-unknown + ;; + amigaos | amigados) + basic_machine=m68k-unknown + os=-amigaos + ;; + amigaunix | amix) + basic_machine=m68k-unknown + os=-sysv4 + ;; + apollo68) + basic_machine=m68k-apollo + os=-sysv + ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; + aros) + basic_machine=i386-pc + os=-aros + ;; + 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 + ;; + 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) + basic_machine=cr16-unknown + os=-elf + ;; + crds | unos) + basic_machine=m68k-crds + ;; + crisv32 | crisv32-* | etraxfs*) + basic_machine=crisv32-axis + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; + da30 | da30-*) + basic_machine=m68k-da30 + ;; + decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) + basic_machine=mips-dec + ;; + decsystem10* | dec10*) + basic_machine=pdp10-dec + os=-tops10 + ;; + decsystem20* | dec20*) + basic_machine=pdp10-dec + os=-tops20 + ;; + delta | 3300 | motorola-3300 | motorola-delta \ + | 3300-motorola | delta-motorola) + basic_machine=m68k-motorola + ;; + delta88) + basic_machine=m88k-motorola + os=-sysv3 + ;; + dicos) + basic_machine=i686-pc + os=-dicos + ;; + djgpp) + basic_machine=i586-pc + os=-msdosdjgpp + ;; + dpx20 | dpx20-*) + basic_machine=rs6000-bull + os=-bosx + ;; + dpx2* | dpx2*-bull) + basic_machine=m68k-bull + os=-sysv3 + ;; + ebmon29k) + basic_machine=a29k-amd + os=-ebmon + ;; + elxsi) + basic_machine=elxsi-elxsi + os=-bsd + ;; + encore | umax | mmax) + basic_machine=ns32k-encore + ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; + fx2800) + basic_machine=i860-alliant + ;; + genix) + basic_machine=ns32k-ns + ;; + gmicro) + basic_machine=tron-gmicro + os=-sysv + ;; + go32) + basic_machine=i386-pc + os=-go32 + ;; + h3050r* | hiux*) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + h8300hms) + basic_machine=h8300-hitachi + os=-hms + ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; + harris) + basic_machine=m88k-harris + os=-sysv3 + ;; + hp300-*) + basic_machine=m68k-hp + ;; + hp300bsd) + basic_machine=m68k-hp + os=-bsd + ;; + hp300hpux) + basic_machine=m68k-hp + os=-hpux + ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k2[0-9][0-9] | hp9k31[0-9]) + basic_machine=m68000-hp + ;; + hp9k3[2-9][0-9]) + basic_machine=m68k-hp + ;; + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][0-9] | hp8[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hppa-next) + os=-nextstep3 + ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; + i370-ibm* | ibm*) + basic_machine=i370-ibm + ;; +# I'm not sure what "Sysv32" means. Should this be sysv3.2? + i*86v32) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv32 + ;; + i*86v4*) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv4 + ;; + i*86v) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-sysv + ;; + i*86sol2) + basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` + os=-solaris2 + ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + iris | iris4d) + basic_machine=mips-sgi + case $os in + -irix*) + ;; + *) + os=-irix4 + ;; + esac + ;; + isi68 | isi) + basic_machine=m68k-isi + os=-sysv + ;; + m68knommu) + basic_machine=m68k-unknown + os=-linux + ;; + m68knommu-*) + basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + microblaze) + basic_machine=microblaze-xilinx + ;; + mingw32) + basic_machine=i386-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 + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + ms1-*) + basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + 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 + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + openrisc | openrisc-*) + basic_machine=or32-unknown + ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; + pa-hitachi) + basic_machine=hppa1.1-hitachi + os=-hiuxwe2 + ;; + paragon) + basic_machine=i860-intel + os=-osf + ;; + parisc) + basic_machine=hppa-unknown + os=-linux + ;; + parisc-*) + basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` + os=-linux + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pc98) + basic_machine=i386-pc + ;; + pc98-*) + basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2 | pentiumiii | pentium3) + basic_machine=i686-pc + ;; + pentium4) + basic_machine=i786-pc + ;; + pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) + basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumpro-* | p6-* | 6x86-* | athlon-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pentium4-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + ppcle | powerpclittle | ppc-le | powerpc-little) + 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 | ppc64-le | powerpc64-little) + 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) + basic_machine=i386-pc + os=-rdos + ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; + rm[46]00) + basic_machine=mips-siemens + ;; + rtpc | rtpc-*) + basic_machine=romp-ibm + ;; + s390 | s390-*) + basic_machine=s390-ibm + ;; + s390x | s390x-*) + basic_machine=s390x-ibm + ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; + sb1) + basic_machine=mipsisa64sb1-unknown + ;; + sb1el) + basic_machine=mipsisa64sb1el-unknown + ;; + sde) + basic_machine=mipsisa32-sde + os=-elf + ;; + sei) + basic_machine=mips-sei + os=-seiux + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + sh5el) + basic_machine=sh5le-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparclite-wrs | simso-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; + sps7) + basic_machine=m68k-bull + os=-sysv2 + ;; + spur) + basic_machine=spur-unknown + ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; + 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 + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tile*) + basic_machine=tile-unknown + os=-linux-gnu + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; + udi29k) + basic_machine=a29k-amd + os=-udi + ;; + ultra3) + basic_machine=a29k-nyu + os=-sym1 + ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; + vaxv) + basic_machine=vax-dec + os=-sysv + ;; + vms) + basic_machine=vax-dec + os=-vms + ;; + vpp*|vx|vx-*) + basic_machine=f301-fujitsu + ;; + vxworks960) + basic_machine=i960-wrs + os=-vxworks + ;; + vxworks68) + basic_machine=m68k-wrs + os=-vxworks + ;; + vxworks29k) + basic_machine=a29k-wrs + os=-vxworks + ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; + xbox) + basic_machine=i686-pc + os=-mingw32 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; + z80-*-coff) + basic_machine=z80-unknown + os=-sim + ;; + none) + basic_machine=none-none + os=-none + ;; + +# Here we handle the default manufacturer of certain CPU types. It is in +# some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; + romp) + basic_machine=romp-ibm + ;; + mmix) + basic_machine=mmix-knuth + ;; + rs6000) + basic_machine=rs6000-ibm + ;; + vax) + basic_machine=vax-dec + ;; + pdp10) + # there are many clones, so DEC is not a safe bet + basic_machine=pdp10-unknown + ;; + pdp11) + basic_machine=pdp11-dec + ;; + we32k) + basic_machine=we32k-att + ;; + sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) + basic_machine=sparc-sun + ;; + cydra) + basic_machine=cydra-cydrome + ;; + orion) + basic_machine=orion-highlevel + ;; + orion105) + basic_machine=clipper-highlevel + ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + *-unknown) + # Make sure to match an already-canonicalized machine name. + ;; + *) + echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 + exit 1 + ;; +esac + +# Here we canonicalize certain aliases for manufacturers. +case $basic_machine in + *-digital*) + basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` + ;; + *-commodore*) + basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` + ;; + *) + ;; +esac + +# Decode manufacturer-specific aliases for certain operating systems. + +if [ x"$os" != x"" ] +then +case $os in + # First match some system type aliases + # that might get confused with valid system types. + # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; + -solaris1 | -solaris1.*) + os=`echo $os | sed -e 's|solaris1|sunos4|'` + ;; + -solaris) + os=-solaris2 + ;; + -svr4*) + os=-sysv4 + ;; + -unixware*) + os=-sysv4.2uw + ;; + -gnu/linux*) + os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` + ;; + # First accept the basic system types. + # The portable systems comes first. + # Each alternative MUST END IN A *, to match a version number. + # -sysv* is not here because it comes later, after sysvr4. + -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* | -aros* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ + | -openbsd* | -solidbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* | -cegcc* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ + | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ + | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ + | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ + | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ + | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) + # Remember, each alternative MUST END IN *, to match a version number. + ;; + -qnx*) + case $basic_machine in + x86-* | i*86-*) + ;; + *) + os=-nto$os + ;; + esac + ;; + -nto-qnx*) + ;; + -nto*) + os=`echo $os | sed -e 's|nto|nto-qnx|'` + ;; + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux-dietlibc) + os=-linux-dietlibc + ;; + -linux*) + os=`echo $os | sed -e 's|linux|linux-gnu|'` + ;; + -sunos5*) + os=`echo $os | sed -e 's|sunos5|solaris2|'` + ;; + -sunos6*) + os=`echo $os | sed -e 's|sunos6|solaris3|'` + ;; + -opened*) + os=-openedition + ;; + -os400*) + os=-os400 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -syllable*) + os=-syllable + ;; + -386bsd) + os=-bsd + ;; + -ctix* | -uts*) + os=-sysv + ;; + -nova*) + os=-rtmk-nova + ;; + -ns2 ) + os=-nextstep2 + ;; + -nsk*) + os=-nsk + ;; + # Preserve the version number of sinix5. + -sinix5.*) + os=`echo $os | sed -e 's|sinix|sysv|'` + ;; + -sinix*) + os=-sysv4 + ;; + -tpf*) + os=-tpf + ;; + -triton*) + os=-sysv3 + ;; + -oss*) + os=-sysv3 + ;; + -svr4) + os=-sysv4 + ;; + -svr3) + os=-sysv3 + ;; + -sysvr4) + os=-sysv4 + ;; + # This must come after -sysvr4. + -sysv*) + ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; + -xenix) + os=-xenix + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + os=-mint + ;; + -aros*) + os=-aros + ;; + -kaos*) + os=-kaos + ;; + -zvmoe) + os=-zvmoe + ;; + -dicos*) + os=-dicos + ;; + -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 + ;; + # 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 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + mep-*) + os=-elf + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; + or32-*) + os=-coff + ;; + *-tti) # must be before sparc entry or we get the wrong os. + os=-sysv3 + ;; + sparc-* | *-sun) + os=-sunos4.1.1 + ;; + *-be) + os=-beos + ;; + *-haiku) + os=-haiku + ;; + *-ibm) + os=-aix + ;; + *-knuth) + os=-mmixware + ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; + *-hp) + os=-hpux + ;; + *-hitachi) + os=-hiux + ;; + i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) + os=-sysv + ;; + *-cbm) + os=-amigaos + ;; + *-dg) + os=-dgux + ;; + *-dolphin) + os=-sysv3 + ;; + m68k-ccur) + os=-rtu + ;; + m88k-omron*) + os=-luna + ;; + *-next ) + os=-nextstep + ;; + *-sequent) + os=-ptx + ;; + *-crds) + os=-unos + ;; + *-ns) + os=-genix + ;; + i370-*) + os=-mvs + ;; + *-next) + os=-nextstep3 + ;; + *-gould) + os=-sysv + ;; + *-highlevel) + os=-bsd + ;; + *-encore) + os=-bsd + ;; + *-sgi) + os=-irix + ;; + *-siemens) + os=-sysv4 + ;; + *-masscomp) + os=-rtu + ;; + f30[01]-fujitsu | f700-fujitsu) + os=-uxpv + ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; + *) + os=-none + ;; +esac +fi + +# Here we handle the case where we know the os, and the CPU type, but not the +# manufacturer. We pick the logical manufacturer. +vendor=unknown +case $basic_machine in + *-unknown) + case $os in + -riscix*) + vendor=acorn + ;; + -sunos*) + vendor=sun + ;; + -cnk*|-aix*) + vendor=ibm + ;; + -beos*) + vendor=be + ;; + -hpux*) + vendor=hp + ;; + -mpeix*) + vendor=hp + ;; + -hiux*) + vendor=hitachi + ;; + -unos*) + vendor=crds + ;; + -dgux*) + vendor=dg + ;; + -luna*) + vendor=omron + ;; + -genix*) + vendor=ns + ;; + -mvs* | -opened*) + vendor=ibm + ;; + -os400*) + vendor=ibm + ;; + -ptx*) + vendor=sequent + ;; + -tpf*) + vendor=ibm + ;; + -vxsim* | -vxworks* | -windiss*) + vendor=wrs + ;; + -aux*) + vendor=apple + ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) + vendor=atari + ;; + -vos*) + vendor=stratus + ;; + esac + basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` + ;; +esac + +echo $basic_machine$os +exit + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "timestamp='" +# time-stamp-format: "%:y-%02m-%02d" +# time-stamp-end: "'" +# End: diff --git a/configure b/configure new file mode 100755 index 0000000..0b47886 --- /dev/null +++ b/configure @@ -0,0 +1,18958 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.65 for anaconda 13.42. +# +# Report bugs to . +# +# +# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 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. +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 + +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" + 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 : + # 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. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +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 and +$0: anaconda-devel-list@redhat.com 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_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 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=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&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; } + + # 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 -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +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 + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# 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'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, 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='anaconda' +PACKAGE_TARNAME='anaconda' +PACKAGE_VERSION='13.42' +PACKAGE_STRING='anaconda 13.42' +PACKAGE_BUGREPORT='anaconda-devel-list@redhat.com' +PACKAGE_URL='' + +ac_unique_file="loader/loader.c" +# 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= +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +IS_SPARC_FALSE +IS_SPARC_TRUE +IS_X86_64_FALSE +IS_X86_64_TRUE +IS_S390_FALSE +IS_S390_TRUE +IS_PPC_FALSE +IS_PPC_TRUE +IS_I386_FALSE +IS_I386_TRUE +IS_KEYMAPS_OVERRIDE_ARCH_FALSE +IS_KEYMAPS_OVERRIDE_ARCH_TRUE +IS_GPTSYNC_ARCH_FALSE +IS_GPTSYNC_ARCH_TRUE +IS_LIVEINST_ARCH_FALSE +IS_LIVEINST_ARCH_TRUE +IS_FONT_ARCH_FALSE +IS_FONT_ARCH_TRUE +ARCH +PACKAGE_RELEASE +IPV6_CFLAGS +NFS_CFLAGS +SELINUX_LIBS +SELINUX_CFLAGS +LIBARCHIVE_LIBS +LIBARCHIVE_CFLAGS +RPM_LIBS +RPM_CFLAGS +LIBCURL_LIBS +LIBCURL_CFLAGS +DEVMAPPER_LIBS +DEVMAPPER_CFLAGS +LIBNM_GLIB_LIBS +LIBNM_GLIB_CFLAGS +LIBNL_LIBS +LIBNL_CFLAGS +NETWORKMANAGER_LIBS +NETWORKMANAGER_CFLAGS +GDK_LIBS +GDK_CFLAGS +GTK_X11_LIBS +GTK_X11_CFLAGS +GLIB_LIBS +GLIB_CFLAGS +XCOMPOSITE_LIBS +XCOMPOSITE_CFLAGS +X11_CFLAGS +PKG_CONFIG +PYTHON_LDFLAGS +PYTHON_EMBED_LIBS +PYTHON_LIBS +PYTHON_INCLUDES +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +LIBOBJS +ALLOCA +XMKMF +ZLIB_LIBS +SLANG_LIBS +NEWT_LIBS +ISCSI_LIBS +EXT2FS_LIBS +CHECKISOMD5_LIBS +BLKID_LIBS +AUDIT_LIBS +X11_LIBS +POSUB +LTLIBINTL +LIBINTL +INTLLIBS +LTLIBICONV +LIBICONV +INTL_MACOSX_LIBS +XGETTEXT_EXTRA_OPTIONS +MSGMERGE +XGETTEXT_015 +XGETTEXT +GMSGFMT_015 +MSGFMT_015 +GMSGFMT +MSGFMT +GETTEXT_MACRO_VERSION +USE_NLS +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +OBJDUMP +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +SED +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +LIBTOOL +LN_S +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +GREP +AM_BACKSLASH +AM_DEFAULT_VERBOSITY +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +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 +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='' +ac_user_opts=' +enable_option_checking +enable_silent_rules +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_nls +enable_rpath +with_libiconv_prefix +with_libintl_prefix +with_x +enable_selinux +enable_nfs +enable_ipv6 +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CPP +XMKMF +PKG_CONFIG +X11_CFLAGS +X11_LIBS +XCOMPOSITE_CFLAGS +XCOMPOSITE_LIBS +GLIB_CFLAGS +GLIB_LIBS +GTK_X11_CFLAGS +GTK_X11_LIBS +GDK_CFLAGS +GDK_LIBS +NETWORKMANAGER_CFLAGS +NETWORKMANAGER_LIBS +LIBNL_CFLAGS +LIBNL_LIBS +LIBNM_GLIB_CFLAGS +LIBNM_GLIB_LIBS +DEVMAPPER_CFLAGS +DEVMAPPER_LIBS +LIBCURL_CFLAGS +LIBCURL_LIBS +RPM_CFLAGS +RPM_LIBS +LIBARCHIVE_CFLAGS +LIBARCHIVE_LIBS' + + +# 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' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +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=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 ;; + + -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 +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 + $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + 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 anaconda 13.42 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] + --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/anaconda] + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +X features: + --x-includes=DIR X include files are in DIR + --x-libraries=DIR X library files are in DIR + +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 + case $ac_init_help in + short | recursive ) echo "Configuration of anaconda 13.42:";; + esac + 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-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0') + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared[=PKGS] build shared libraries [default=yes] + --enable-static[=PKGS] build static libraries [default=yes] + --enable-fast-install[=PKGS] + optimize for fast installation [default=yes] + --disable-libtool-lock avoid locking (might break parallel builds) + --disable-nls do not use Native Language Support + --disable-rpath do not hardcode runtime library paths + --enable-selinux enable SELinux support (default is yes) + --enable-nfs enable NFS support (default is yes) + --enable-ipv6 enable IPv6 support (default is yes) + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects [default=use + both] + --with-gnu-ld assume the C compiler uses GNU ld [default=no] + --with-gnu-ld assume the C compiler uses GNU ld default=no + --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-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-x use the X Window System + +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 + XMKMF Path to xmkmf, Makefile generator for X Window System + PKG_CONFIG path to pkg-config utility + X11_CFLAGS C compiler flags for X11, overriding pkg-config + X11_LIBS linker flags for X11, overriding pkg-config + XCOMPOSITE_CFLAGS + C compiler flags for XCOMPOSITE, overriding pkg-config + XCOMPOSITE_LIBS + linker flags for XCOMPOSITE, overriding pkg-config + GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config + GLIB_LIBS linker flags for GLIB, overriding pkg-config + GTK_X11_CFLAGS + C compiler flags for GTK_X11, overriding pkg-config + GTK_X11_LIBS + linker flags for GTK_X11, overriding pkg-config + GDK_CFLAGS C compiler flags for GDK, overriding pkg-config + GDK_LIBS linker flags for GDK, overriding pkg-config + NETWORKMANAGER_CFLAGS + C compiler flags for NETWORKMANAGER, overriding pkg-config + NETWORKMANAGER_LIBS + linker flags for NETWORKMANAGER, overriding pkg-config + LIBNL_CFLAGS + C compiler flags for LIBNL, overriding pkg-config + LIBNL_LIBS linker flags for LIBNL, overriding pkg-config + LIBNM_GLIB_CFLAGS + C compiler flags for LIBNM_GLIB, overriding pkg-config + LIBNM_GLIB_LIBS + linker flags for LIBNM_GLIB, overriding pkg-config + DEVMAPPER_CFLAGS + C compiler flags for DEVMAPPER, overriding pkg-config + DEVMAPPER_LIBS + linker flags for DEVMAPPER, overriding pkg-config + LIBCURL_CFLAGS + C compiler flags for LIBCURL, overriding pkg-config + LIBCURL_LIBS + linker flags for LIBCURL, overriding pkg-config + RPM_CFLAGS C compiler flags for RPM, overriding pkg-config + RPM_LIBS linker flags for RPM, overriding pkg-config + LIBARCHIVE_CFLAGS + C compiler flags for LIBARCHIVE, overriding pkg-config + LIBARCHIVE_LIBS + linker flags for LIBARCHIVE, overriding pkg-config + +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 . +_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 +anaconda configure 13.42 +generated by GNU Autoconf 2.65 + +Copyright (C) 2009 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; test "x$as_lineno_stack" = x && { as_lineno=; 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 || + $as_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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_compile + +# 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; } >/dev/null && { + 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} # ac_fn_c_try_run + +# 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_func + +# 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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.$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;} +( cat <<\_ASBOX +## --------------------------------------------- ## +## Report this to anaconda-devel-list@redhat.com ## +## --------------------------------------------- ## +_ASBOX + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_header_mongrel + +# ac_fn_c_find_intX_t LINENO BITS VAR +# ----------------------------------- +# Finds a signed integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_intX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5 +$as_echo_n "checking for int$2_t... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in int$2_t 'int' 'long int' \ + 'long long int' 'short int' 'signed char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(enum { N = $2 / 2 - 1 }; + 0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !(enum { N = $2 / 2 - 1 }; + ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1) + < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + case $ac_type in #( + int$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval as_val=\$$3 + if test "x$as_val" = x""no; then : + +else + break +fi + done +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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_find_intX_t + +# 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 { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_type + +# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES +# ---------------------------------------------------- +# Tries to find if the field MEMBER exists in type AGGR, after including +# INCLUDES, setting cache variable VAR accordingly. +ac_fn_c_check_member () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5 +$as_echo_n "checking for $2.$3... " >&6; } +if { as_var=$4; eval "test \"\${$as_var+set}\" = set"; }; 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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_check_member + +# ac_fn_c_find_uintX_t LINENO BITS VAR +# ------------------------------------ +# Finds an unsigned integer type with width BITS, setting cache variable VAR +# accordingly. +ac_fn_c_find_uintX_t () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5 +$as_echo_n "checking for uint$2_t... " >&6; } +if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=no" + # Order is important - never check a type that is potentially smaller + # than half of the expected target width. + for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \ + 'unsigned long long int' 'unsigned short int' 'unsigned char'; do + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)]; +test_array [0] = 0 + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + case $ac_type in #( + uint$2_t) : + eval "$3=yes" ;; #( + *) : + eval "$3=\$ac_type" ;; +esac +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + eval as_val=\$$3 + if test "x$as_val" = x""no; then : + +else + break +fi + done +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; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} # ac_fn_c_find_uintX_t +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 anaconda $as_me 13.42, which was +generated by GNU Autoconf 2.65. 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 + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + 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 + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + 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 + cat <<\_ASBOX +## ------------------- ## +## File substitutions. ## +## ------------------- ## +_ASBOX + 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 + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + 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 + ac_site_file1=$CONFIG_SITE +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" + 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" +# 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 + + +am__api_version='1.11' + +ac_aux_dir= +for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do + for ac_t in install-sh install.sh shtool; do + if test -f "$ac_dir/$ac_t"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/$ac_t -c" + break 2 + fi + done +done +if test -z "$ac_aux_dir"; then + as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$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. + + +# 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 test "${ac_cv_path_install+set}" = set; 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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 whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + 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 test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $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 test "${ac_cv_path_mkdir+set}" = set; 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 + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +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 test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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 + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='anaconda' + VERSION='13.42' + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + + +ac_config_headers="$ac_config_headers config.h" + + + + +cat >>confdefs.h <<_ACEOF +#define BUILD_DATE "`date +%m%d%Y`" +_ACEOF + +# Check whether --enable-silent-rules was given. +if test "${enable_silent_rules+set}" = set; then : + enableval=$enable_silent_rules; +fi + +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=0;; +esac +AM_BACKSLASH='\' + # make --enable-silent-rules the default. + +# Checks for programs. +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 test "${ac_cv_prog_AWK+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; 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" + { test -f "$ac_path_GREP" && $as_test_x "$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" + + +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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_CC+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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_set_status 77 +as_fn_error "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 test "${ac_cv_objext+set}" = set; 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 test "${ac_cv_c_compiler_gnu+set}" = set; 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 test "${ac_cv_prog_cc_g+set}" = set; 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 test "${ac_cv_prog_cc_c89+set}" = set; 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 +#include +#include +/* 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 +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +# Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +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 + +{ $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 { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; 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 + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +# 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 test "${ac_cv_build+set}" = set; 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 test "${ac_cv_host+set}" = set; 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 + + +{ $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 test "${ac_cv_path_SED+set}" = set; 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" + { test -f "$ac_path_SED" && $as_test_x "$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 + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; 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" + { test -f "$ac_path_EGREP" && $as_test_x "$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 fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_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 fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_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_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +# 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 + +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 test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_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 `"$lt_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 test "${lt_cv_prog_gnu_ld+set}" = set; 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 "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + 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 test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$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 +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +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 test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + 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 + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:5004: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:5007: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:5010: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $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 +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + 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 + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +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 test "${ac_cv_prog_AR+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_AR+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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="false" + 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 + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +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 test "${ac_cv_prog_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_STRIP+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +test -z "$STRIP" && STRIP=: + + + + + + +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 test "${ac_cv_prog_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +# Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line 6205 "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + 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 + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + 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 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $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 +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + 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 + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $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 +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + 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 + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $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 +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $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_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + 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 + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $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 +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + 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 + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $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 +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + 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 + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +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 test "${ac_cv_prog_CPP+set}" = set; 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.$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.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f 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.$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.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f 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 ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; 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 +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +# Set options + + + + enable_dlopen=no + + + enable_win32_dll=no + + + # Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + # Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +# Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + # Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +#define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +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 + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:7731: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:7735: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8070: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:8074: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8175: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8179: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:8230: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:8234: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + 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 + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # 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. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + 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 + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + 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 + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; 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 + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + 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 + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + 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 + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + 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=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + 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 + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # 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 "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + 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_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # 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*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + 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 + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Add ABI-specific directories to the system library path. + sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=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_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; 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" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $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_svld_dlopen=yes +else + ac_cv_lib_svld_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_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $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 dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=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_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10600 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line 10696 "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $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; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +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 + +CC="$lt_save_CC" + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + + + { $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.17 + + + + +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 test "${ac_cv_path_MSGFMT+set}" = set; 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 test "${ac_cv_path_GMSGFMT+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 test "${ac_cv_path_XGETTEXT+set}" = set; 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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 test "${ac_cv_path_MSGMERGE+set}" = set; 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" + + + + 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 + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +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 GCC" >&5 +$as_echo_n "checking for ld used by GCC... " >&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. + [\\/]* | [A-Za-z]:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the path 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 test "${acl_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + 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 GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in + *GNU* | *'with BFD'*) + test "$with_gnu_ld" != no && break ;; + *) + test "$with_gnu_ld" != yes && break ;; + esac + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi +fi + +LD="$acl_cv_path_LD" +if test -n "$LD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&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 test "${acl_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU ld's 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 test "${acl_cv_rpath+set}" = set; 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 + 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 ;; + *) searchdir=`cd "$searchdir" && pwd` + case "$searchdir" in + */lib64 ) acl_libdirstem=lib64 ;; + esac ;; + esac + fi + done + IFS="$acl_save_IFS" + 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" + fi + fi + +fi + + LIBICONV= + LTLIBICONV= + INCICONV= + LIBICONV_PREFIX= + 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"; 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/"'*$,,'` + LIBICONV_PREFIX="$basedir" + 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"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; 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 + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 +$as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } +if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; 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 test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; 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 + + + + + + + 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 + + + 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 { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; 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 + + + + + + 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 test "${am_cv_func_iconv+set}" = set; 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 test "${am_cv_func_iconv_works+set}" = set; 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 () +{ + /* 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) + return 1; + } + } +#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) + return 1; + } + } +#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)) + return 1; + return 0; +} +_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 + + + + + + + + + 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" + fi + fi + +fi + + LIBINTL= + LTLIBINTL= + INCINTL= + LIBINTL_PREFIX= + 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"; 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/"'*$,,'` + LIBINTL_PREFIX="$basedir" + 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"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; 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 { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; 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 -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 + + + + INTLLIBS="$LIBINTL" + + + + + + + +# Checks for libraries. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XGetWindowAttributes in -lX11" >&5 +$as_echo_n "checking for XGetWindowAttributes in -lX11... " >&6; } +if test "${ac_cv_lib_X11_XGetWindowAttributes+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lX11 $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 XGetWindowAttributes (); +int +main () +{ +return XGetWindowAttributes (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_X11_XGetWindowAttributes=yes +else + ac_cv_lib_X11_XGetWindowAttributes=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_X11_XGetWindowAttributes" >&5 +$as_echo "$ac_cv_lib_X11_XGetWindowAttributes" >&6; } +if test "x$ac_cv_lib_X11_XGetWindowAttributes" = x""yes; then : + X11_LIBS=-lX11 + +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 "*** libX11 not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for audit_open in -laudit" >&5 +$as_echo_n "checking for audit_open in -laudit... " >&6; } +if test "${ac_cv_lib_audit_audit_open+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-laudit $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 audit_open (); +int +main () +{ +return audit_open (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_audit_audit_open=yes +else + ac_cv_lib_audit_audit_open=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_audit_audit_open" >&5 +$as_echo "$ac_cv_lib_audit_audit_open" >&6; } +if test "x$ac_cv_lib_audit_audit_open" = x""yes; then : + AUDIT_LIBS=-laudit + +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 "*** libaudit not usable. +See \`config.log' for more details." "$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 test "${ac_cv_lib_blkid_blkid_get_cache+set}" = set; 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" = x""yes; then : + BLKID_LIBS=-lblkid + +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 "*** libblkid not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for mediaCheckFile in -lcheckisomd5" >&5 +$as_echo_n "checking for mediaCheckFile in -lcheckisomd5... " >&6; } +if test "${ac_cv_lib_checkisomd5_mediaCheckFile+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lcheckisomd5 $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 mediaCheckFile (); +int +main () +{ +return mediaCheckFile (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_checkisomd5_mediaCheckFile=yes +else + ac_cv_lib_checkisomd5_mediaCheckFile=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_checkisomd5_mediaCheckFile" >&5 +$as_echo "$ac_cv_lib_checkisomd5_mediaCheckFile" >&6; } +if test "x$ac_cv_lib_checkisomd5_mediaCheckFile" = x""yes; then : + CHECKISOMD5_LIBS=-lcheckisomd5 + +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 "*** libcheckisomd5 not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ext2fs_initialize in -lext2fs" >&5 +$as_echo_n "checking for ext2fs_initialize in -lext2fs... " >&6; } +if test "${ac_cv_lib_ext2fs_ext2fs_initialize+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lext2fs $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 ext2fs_initialize (); +int +main () +{ +return ext2fs_initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_ext2fs_ext2fs_initialize=yes +else + ac_cv_lib_ext2fs_ext2fs_initialize=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_ext2fs_ext2fs_initialize" >&5 +$as_echo "$ac_cv_lib_ext2fs_ext2fs_initialize" >&6; } +if test "x$ac_cv_lib_ext2fs_ext2fs_initialize" = x""yes; then : + EXT2FS_LIBS=-lext2fs + +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 "*** libext2fs not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libiscsi_get_firmware_network_config in -liscsi" >&5 +$as_echo_n "checking for libiscsi_get_firmware_network_config in -liscsi... " >&6; } +if test "${ac_cv_lib_iscsi_libiscsi_get_firmware_network_config+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-liscsi $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 libiscsi_get_firmware_network_config (); +int +main () +{ +return libiscsi_get_firmware_network_config (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_iscsi_libiscsi_get_firmware_network_config=yes +else + ac_cv_lib_iscsi_libiscsi_get_firmware_network_config=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_iscsi_libiscsi_get_firmware_network_config" >&5 +$as_echo "$ac_cv_lib_iscsi_libiscsi_get_firmware_network_config" >&6; } +if test "x$ac_cv_lib_iscsi_libiscsi_get_firmware_network_config" = x""yes; then : + ISCSI_LIBS=-liscsi + +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 "*** libiscsi not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for newtInit in -lnewt" >&5 +$as_echo_n "checking for newtInit in -lnewt... " >&6; } +if test "${ac_cv_lib_newt_newtInit+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lnewt $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 newtInit (); +int +main () +{ +return newtInit (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_newt_newtInit=yes +else + ac_cv_lib_newt_newtInit=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_newt_newtInit" >&5 +$as_echo "$ac_cv_lib_newt_newtInit" >&6; } +if test "x$ac_cv_lib_newt_newtInit" = x""yes; then : + NEWT_LIBS=-lnewt + +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 "*** libnewt not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for SLang_get_int_size in -lslang" >&5 +$as_echo_n "checking for SLang_get_int_size in -lslang... " >&6; } +if test "${ac_cv_lib_slang_SLang_get_int_size+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lslang $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 SLang_get_int_size (); +int +main () +{ +return SLang_get_int_size (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_slang_SLang_get_int_size=yes +else + ac_cv_lib_slang_SLang_get_int_size=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_slang_SLang_get_int_size" >&5 +$as_echo "$ac_cv_lib_slang_SLang_get_int_size" >&6; } +if test "x$ac_cv_lib_slang_SLang_get_int_size" = x""yes; then : + SLANG_LIBS=-lslang + +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 "*** libslang not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for zlibVersion in -lz" >&5 +$as_echo_n "checking for zlibVersion in -lz... " >&6; } +if test "${ac_cv_lib_z_zlibVersion+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lz $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 zlibVersion (); +int +main () +{ +return zlibVersion (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_z_zlibVersion=yes +else + ac_cv_lib_z_zlibVersion=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_z_zlibVersion" >&5 +$as_echo "$ac_cv_lib_z_zlibVersion" >&6; } +if test "x$ac_cv_lib_z_zlibVersion" = x""yes; then : + ZLIB_LIBS=-lz + +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 "*** libz not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + +# Checks for header files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 +$as_echo_n "checking for X... " >&6; } + + +# Check whether --with-x was given. +if test "${with_x+set}" = set; then : + withval=$with_x; +fi + +# $have_x is `yes', `no', `disabled', or empty when we do not yet know. +if test "x$with_x" = xno; then + # The user explicitly disabled X. + have_x=disabled +else + case $x_includes,$x_libraries in #( + *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( + *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # One or both of the vars are not set, and there is no cached value. +ac_x_includes=no ac_x_libraries=no +rm -f -r conftest.dir +if mkdir conftest.dir; then + cd conftest.dir + cat >Imakefile <<'_ACEOF' +incroot: + @echo incroot='${INCROOT}' +usrlibdir: + @echo usrlibdir='${USRLIBDIR}' +libdir: + @echo libdir='${LIBDIR}' +_ACEOF + if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then + # GNU make sometimes prints "make[1]: Entering...", which would confuse us. + for ac_var in incroot usrlibdir libdir; do + eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" + done + # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. + for ac_extension in a so sl dylib la dll; do + if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && + test -f "$ac_im_libdir/libX11.$ac_extension"; then + ac_im_usrlibdir=$ac_im_libdir; break + fi + done + # Screen out bogus values from the imake configuration. They are + # bogus both because they are the default anyway, and because + # using them would break gcc on systems where it needs fixed includes. + case $ac_im_incroot in + /usr/include) ac_x_includes= ;; + *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; + esac + case $ac_im_usrlibdir in + /usr/lib | /usr/lib64 | /lib | /lib64) ;; + *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; + esac + fi + cd .. + rm -f -r conftest.dir +fi + +# Standard set of common directories for X headers. +# Check X11 before X11Rn because it is often a symlink to the current release. +ac_x_header_dirs=' +/usr/X11/include +/usr/X11R7/include +/usr/X11R6/include +/usr/X11R5/include +/usr/X11R4/include + +/usr/include/X11 +/usr/include/X11R7 +/usr/include/X11R6 +/usr/include/X11R5 +/usr/include/X11R4 + +/usr/local/X11/include +/usr/local/X11R7/include +/usr/local/X11R6/include +/usr/local/X11R5/include +/usr/local/X11R4/include + +/usr/local/include/X11 +/usr/local/include/X11R7 +/usr/local/include/X11R6 +/usr/local/include/X11R5 +/usr/local/include/X11R4 + +/usr/X386/include +/usr/x386/include +/usr/XFree86/include/X11 + +/usr/include +/usr/local/include +/usr/unsupported/include +/usr/athena/include +/usr/local/x11r5/include +/usr/lpp/Xamples/include + +/usr/openwin/include +/usr/openwin/share/include' + +if test "$ac_x_includes" = no; then + # Guess where to find include files, by looking for Xlib.h. + # First, try using that file with no special directory specified. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # We can compile using X headers with no special include directory. +ac_x_includes= +else + for ac_dir in $ac_x_header_dirs; do + if test -r "$ac_dir/X11/Xlib.h"; then + ac_x_includes=$ac_dir + break + fi +done +fi +rm -f conftest.err conftest.$ac_ext +fi # $ac_x_includes = no + +if test "$ac_x_libraries" = no; then + # Check for the libraries. + # See if we find them without any special options. + # Don't add to $LIBS permanently. + ac_save_LIBS=$LIBS + LIBS="-lX11 $LIBS" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +XrmInitialize () + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + LIBS=$ac_save_LIBS +# We can link X programs with no special library path. +ac_x_libraries= +else + LIBS=$ac_save_LIBS +for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` +do + # Don't even attempt the hair of trying to link an X program! + for ac_extension in a so sl dylib la dll; do + if test -r "$ac_dir/libX11.$ac_extension"; then + ac_x_libraries=$ac_dir + break 2 + fi + done +done +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi # $ac_x_libraries = no + +case $ac_x_includes,$ac_x_libraries in #( + no,* | *,no | *\'*) + # Didn't find X, or a directory has "'" in its name. + ac_cv_have_x="have_x=no";; #( + *) + # Record where we found X for the cache. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$ac_x_includes'\ + ac_x_libraries='$ac_x_libraries'" +esac +fi +;; #( + *) have_x=yes;; + esac + eval "$ac_cv_have_x" +fi # $with_x != no + +if test "$have_x" != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 +$as_echo "$have_x" >&6; } + no_x=yes +else + # If each of the values was on the command line, it overrides each guess. + test "x$x_includes" = xNONE && x_includes=$ac_x_includes + test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries + # Update the cache value to reflect the command line values. + ac_cv_have_x="have_x=yes\ + ac_x_includes='$x_includes'\ + ac_x_libraries='$x_libraries'" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 +$as_echo "libraries $x_libraries, headers $x_includes" >&6; } +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 test "${ac_cv_working_alloca_h+set}" = set; 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 test "${ac_cv_func_alloca_works+set}" = set; 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 */ +char *alloca (); +# 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 test "${ac_cv_os_cray+set}" = set; 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" +eval as_val=\$$as_ac_var + if test "x$as_val" = 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 test "${ac_cv_c_stack_direction+set}" = set; 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 () +{ + static char *addr = 0; + auto char dummy; + if (addr == 0) + { + addr = &dummy; + return find_stack_direction (); + } + else + return (&dummy > addr) ? 1 : -1; +} + +int +main () +{ + return find_stack_direction () < 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 sys/types.h netinet/in.h arpa/nameser.h netdb.h resolv.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" "#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_NETINET_IN_H +# include /* inet_ functions / structs */ +#endif +#ifdef HAVE_ARPA_NAMESER_H +# include /* DNS HEADER struct */ +#endif +#ifdef HAVE_NETDB_H +# include +#endif +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = 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 whether sys/types.h defines makedev" >&5 +$as_echo_n "checking whether sys/types.h defines makedev... " >&6; } +if test "${ac_cv_header_sys_types_h_makedev+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +return makedev(0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_header_sys_types_h_makedev=yes +else + ac_cv_header_sys_types_h_makedev=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_header_sys_types_h_makedev" >&5 +$as_echo "$ac_cv_header_sys_types_h_makedev" >&6; } + +if test $ac_cv_header_sys_types_h_makedev = no; then +ac_fn_c_check_header_mongrel "$LINENO" "sys/mkdev.h" "ac_cv_header_sys_mkdev_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_mkdev_h" = x""yes; then : + +$as_echo "#define MAJOR_IN_MKDEV 1" >>confdefs.h + +fi + + + + if test $ac_cv_header_sys_mkdev_h = no; then + ac_fn_c_check_header_mongrel "$LINENO" "sys/sysmacros.h" "ac_cv_header_sys_sysmacros_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_sysmacros_h" = x""yes; then : + +$as_echo "#define MAJOR_IN_SYSMACROS 1" >>confdefs.h + +fi + + + fi +fi + +for ac_header in argz.h arpa/inet.h fcntl.h inttypes.h libintl.h limits.h \ + malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h \ + string.h strings.h sys/ioctl.h sys/mount.h sys/param.h \ + sys/socket.h sys/time.h sys/vfs.h syslog.h termios.h \ + unistd.h utime.h wchar.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" +eval as_val=\$$as_ac_Header + if test "x$as_val" = 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 "*** Header file $ac_header not found. +See \`config.log' for more details." "$LINENO" 5; } +fi + +done + + +# Checks for typedefs, structures, and compiler characteristics. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 +$as_echo_n "checking for uid_t in sys/types.h... " >&6; } +if test "${ac_cv_type_uid_t+set}" = set; 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 "uid_t" >/dev/null 2>&1; then : + ac_cv_type_uid_t=yes +else + ac_cv_type_uid_t=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 +$as_echo "$ac_cv_type_uid_t" >&6; } +if test $ac_cv_type_uid_t = no; then + +$as_echo "#define uid_t int" >>confdefs.h + + +$as_echo "#define gid_t int" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +$as_echo_n "checking for inline... " >&6; } +if test "${ac_cv_c_inline+set}" = set; 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_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t" +case $ac_cv_c_int32_t in #( + no|yes) ;; #( + *) + +cat >>confdefs.h <<_ACEOF +#define int32_t $ac_cv_c_int32_t +_ACEOF +;; +esac + +ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" +if test "x$ac_cv_type_mode_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define mode_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" +if test "x$ac_cv_type_off_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define off_t long int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" +if test "x$ac_cv_type_pid_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define pid_t int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" +if test "x$ac_cv_type_size_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define size_t unsigned int +_ACEOF + +fi + +ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" +if test "x$ac_cv_type_ssize_t" = x""yes; then : + +else + +cat >>confdefs.h <<_ACEOF +#define ssize_t int +_ACEOF + +fi + +ac_fn_c_check_member "$LINENO" "struct stat" "st_rdev" "ac_cv_member_struct_stat_st_rdev" "$ac_includes_default" +if test "x$ac_cv_member_struct_stat_st_rdev" = x""yes; then : + +cat >>confdefs.h <<_ACEOF +#define HAVE_STRUCT_STAT_ST_RDEV 1 +_ACEOF + + +fi + +ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t" +case $ac_cv_c_uint16_t in #( + no|yes) ;; #( + *) + + +cat >>confdefs.h <<_ACEOF +#define uint16_t $ac_cv_c_uint16_t +_ACEOF +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t" +case $ac_cv_c_uint32_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT32_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint32_t $ac_cv_c_uint32_t +_ACEOF +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t" +case $ac_cv_c_uint64_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT64_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint64_t $ac_cv_c_uint64_t +_ACEOF +;; + esac + +ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t" +case $ac_cv_c_uint8_t in #( + no|yes) ;; #( + *) + +$as_echo "#define _UINT8_T 1" >>confdefs.h + + +cat >>confdefs.h <<_ACEOF +#define uint8_t $ac_cv_c_uint8_t +_ACEOF +;; + esac + + +# Checks for library functions. +for ac_header in unistd.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" +if test "x$ac_cv_header_unistd_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_UNISTD_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 +$as_echo_n "checking for working chown... " >&6; } +if test "${ac_cv_func_chown_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_chown_works=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +#include + +int +main () +{ + char *f = "conftest.chown"; + struct stat before, after; + + if (creat (f, 0600) < 0) + return 1; + if (stat (f, &before) < 0) + return 1; + if (chown (f, (uid_t) -1, (gid_t) -1) == -1) + return 1; + if (stat (f, &after) < 0) + return 1; + return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid); + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_chown_works=yes +else + ac_cv_func_chown_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 + +rm -f conftest.chown + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 +$as_echo "$ac_cv_func_chown_works" >&6; } +if test $ac_cv_func_chown_works = yes; then + +$as_echo "#define HAVE_CHOWN 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 +$as_echo_n "checking for error_at_line... " >&6; } +if test "${ac_cv_lib_error_at_line+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +error_at_line (0, 0, "", 0, "an error occurred"); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_error_at_line=yes +else + ac_cv_lib_error_at_line=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_lib_error_at_line" >&5 +$as_echo "$ac_cv_lib_error_at_line" >&6; } +if test $ac_cv_lib_error_at_line = no; then + case " $LIBOBJS " in + *" error.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS error.$ac_objext" + ;; +esac + +fi + +for ac_header in vfork.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" +if test "x$ac_cv_header_vfork_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_VFORK_H 1 +_ACEOF + +fi + +done + +for ac_func in fork vfork +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" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +_ACEOF + +fi +done + +if test "x$ac_cv_func_fork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 +$as_echo_n "checking for working fork... " >&6; } +if test "${ac_cv_func_fork_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_fork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ + + /* By Ruediger Kuhlmann. */ + return fork () < 0; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_fork_works=yes +else + ac_cv_func_fork_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 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 +$as_echo "$ac_cv_func_fork_works" >&6; } + +else + ac_cv_func_fork_works=$ac_cv_func_fork +fi +if test "x$ac_cv_func_fork_works" = xcross; then + case $host in + *-*-amigaos* | *-*-msdosdjgpp*) + # Override, as these systems have only a dummy fork() stub + ac_cv_func_fork_works=no + ;; + *) + ac_cv_func_fork_works=yes + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} +fi +ac_cv_func_vfork_works=$ac_cv_func_vfork +if test "x$ac_cv_func_vfork" = xyes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 +$as_echo_n "checking for working vfork... " >&6; } +if test "${ac_cv_func_vfork_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_vfork_works=cross +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Thanks to Paul Eggert for this test. */ +$ac_includes_default +#include +#ifdef HAVE_VFORK_H +# include +#endif +/* On some sparc systems, changes by the child to local and incoming + argument registers are propagated back to the parent. The compiler + is told about this with #include , but some compilers + (e.g. gcc -O) don't grok . Test for this by using a + static variable whose address is put into a register that is + clobbered by the vfork. */ +static void +#ifdef __cplusplus +sparc_address_test (int arg) +# else +sparc_address_test (arg) int arg; +#endif +{ + static pid_t child; + if (!child) { + child = vfork (); + if (child < 0) { + perror ("vfork"); + _exit(2); + } + if (!child) { + arg = getpid(); + write(-1, "", 0); + _exit (arg); + } + } +} + +int +main () +{ + pid_t parent = getpid (); + pid_t child; + + sparc_address_test (0); + + child = vfork (); + + if (child == 0) { + /* Here is another test for sparc vfork register problems. This + test uses lots of local variables, at least as many local + variables as main has allocated so far including compiler + temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris + 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should + reuse the register of parent for one of the local variables, + since it will think that parent can't possibly be used any more + in this routine. Assigning to the local variable will thus + munge parent in the parent process. */ + pid_t + p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), + p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); + /* Convince the compiler that p..p7 are live; otherwise, it might + use the same hardware register for all 8 local variables. */ + if (p != p1 || p != p2 || p != p3 || p != p4 + || p != p5 || p != p6 || p != p7) + _exit(1); + + /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent + from child file descriptors. If the child closes a descriptor + before it execs or exits, this munges the parent's descriptor + as well. Test for this by closing stdout in the child. */ + _exit(close(fileno(stdout)) != 0); + } else { + int status; + struct stat st; + + while (wait(&status) != child) + ; + return ( + /* Was there some problem with vforking? */ + child < 0 + + /* Did the child fail? (This shouldn't happen.) */ + || status + + /* Did the vfork/compiler bug occur? */ + || parent != getpid() + + /* Did the file descriptor bug occur? */ + || fstat(fileno(stdout), &st) != 0 + ); + } +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_vfork_works=yes +else + ac_cv_func_vfork_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 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 +$as_echo "$ac_cv_func_vfork_works" >&6; } + +fi; +if test "x$ac_cv_func_fork_works" = xcross; then + ac_cv_func_vfork_works=$ac_cv_func_vfork + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 +$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} +fi + +if test "x$ac_cv_func_vfork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h + +else + +$as_echo "#define vfork fork" >>confdefs.h + +fi +if test "x$ac_cv_func_fork_works" = xyes; then + +$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h + +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 +$as_echo_n "checking whether lstat correctly handles trailing slash... " >&6; } +if test "${ac_cv_func_lstat_dereferences_slashed_symlink+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f conftest.sym conftest.file +echo >conftest.file +if test "$as_ln_s" = "ln -s" && ln -s conftest.file conftest.sym; then + if test "$cross_compiling" = yes; then : + ac_cv_func_lstat_dereferences_slashed_symlink=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +int +main () +{ +struct stat sbuf; + /* Linux will dereference the symlink and fail, as required by POSIX. + That is better in the sense that it means we will not + have to compile and use the lstat wrapper. */ + return lstat ("conftest.sym/", &sbuf) == 0; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_lstat_dereferences_slashed_symlink=yes +else + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +else + # If the `ln -s' command failed, then we probably don't even + # have an lstat function. + ac_cv_func_lstat_dereferences_slashed_symlink=no +fi +rm -f conftest.sym conftest.file + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_lstat_dereferences_slashed_symlink" >&5 +$as_echo "$ac_cv_func_lstat_dereferences_slashed_symlink" >&6; } + +test $ac_cv_func_lstat_dereferences_slashed_symlink = yes && + +cat >>confdefs.h <<_ACEOF +#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 +_ACEOF + + +if test "x$ac_cv_func_lstat_dereferences_slashed_symlink" = xno; then + case " $LIBOBJS " in + *" lstat.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS lstat.$ac_objext" + ;; +esac + +fi + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5 +$as_echo_n "checking for GNU libc compatible malloc... " >&6; } +if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_malloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *malloc (); +#endif + +int +main () +{ +return ! malloc (0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_malloc_0_nonnull=yes +else + ac_cv_func_malloc_0_nonnull=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_malloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; } +if test $ac_cv_func_malloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_MALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_MALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" malloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS malloc.$ac_objext" + ;; +esac + + +$as_echo "#define malloc rpl_malloc" >>confdefs.h + +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 +" +eval as_val=\$$as_ac_Header + if test "x$as_val" = 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" = x""yes; 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 test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_mmap_fixed_mapped=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_includes_default +/* malloc might have been renamed as rpl_malloc. */ +#undef malloc + +/* Thanks to Mike Haertel and Jim Avera for this test. + Here is a matrix of mmap possibilities: + mmap private not fixed + mmap private fixed at somewhere currently unmapped + mmap private fixed at somewhere already mapped + mmap shared not fixed + mmap shared fixed at somewhere currently unmapped + mmap shared fixed at somewhere already mapped + For private mappings, we should verify that changes cannot be read() + back from the file, nor mmap's back from the file at a different + address. (There have been systems where private was not correctly + implemented like the infamous i386 svr4.0, and systems where the + VM page cache was not coherent with the file system buffer cache + like early versions of FreeBSD and possibly contemporary NetBSD.) + For shared mappings, we should conversely verify that changes get + propagated back to all the places they're supposed to be. + + Grep wants private fixed already mapped. + The main things grep needs to know about mmap are: + * does it exist and is it safe to write into the mmap'd area + * how to use it (BSD variants) */ + +#include +#include + +#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H +char *malloc (); +#endif + +/* This mess was copied from the GNU getpagesize.h. */ +#ifndef HAVE_GETPAGESIZE +# ifdef _SC_PAGESIZE +# define getpagesize() sysconf(_SC_PAGESIZE) +# else /* no _SC_PAGESIZE */ +# ifdef HAVE_SYS_PARAM_H +# include +# ifdef EXEC_PAGESIZE +# define getpagesize() EXEC_PAGESIZE +# else /* no EXEC_PAGESIZE */ +# ifdef NBPG +# define getpagesize() NBPG * CLSIZE +# ifndef CLSIZE +# define CLSIZE 1 +# endif /* no CLSIZE */ +# else /* no NBPG */ +# ifdef NBPC +# define getpagesize() NBPC +# else /* no NBPC */ +# ifdef PAGESIZE +# define getpagesize() PAGESIZE +# endif /* PAGESIZE */ +# endif /* no NBPC */ +# endif /* no NBPG */ +# endif /* no EXEC_PAGESIZE */ +# else /* no HAVE_SYS_PARAM_H */ +# define getpagesize() 8192 /* punt totally */ +# endif /* no HAVE_SYS_PARAM_H */ +# endif /* no _SC_PAGESIZE */ + +#endif /* no HAVE_GETPAGESIZE */ + +int +main () +{ + char *data, *data2, *data3; + const char *cdata2; + int i, pagesize; + int fd, fd2; + + pagesize = getpagesize (); + + /* First, make a file with some known garbage in it. */ + data = (char *) malloc (pagesize); + if (!data) + return 1; + for (i = 0; i < pagesize; ++i) + *(data + i) = rand (); + umask (0); + fd = creat ("conftest.mmap", 0600); + if (fd < 0) + return 2; + if (write (fd, data, pagesize) != pagesize) + return 3; + close (fd); + + /* Next, check that the tail of a page is zero-filled. File must have + non-zero length, otherwise we risk SIGBUS for entire page. */ + fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); + if (fd2 < 0) + return 4; + cdata2 = ""; + if (write (fd2, cdata2, 1) != 1) + return 5; + data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); + if (data2 == MAP_FAILED) + return 6; + for (i = 0; i < pagesize; ++i) + if (*(data2 + i)) + return 7; + close (fd2); + if (munmap (data2, pagesize)) + return 8; + + /* Next, try to mmap the file at a fixed address which already has + something else allocated at it. If we can, also make sure that + we see the same garbage. */ + fd = open ("conftest.mmap", O_RDWR); + if (fd < 0) + return 9; + if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_FIXED, fd, 0L)) + return 10; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data2 + i)) + return 11; + + /* Finally, make sure that changes to the mapped area do not + percolate back to the file as seen by read(). (This is a bug on + some variants of i386 svr4.0.) */ + for (i = 0; i < pagesize; ++i) + *(data2 + i) = *(data2 + i) + 1; + data3 = (char *) malloc (pagesize); + if (!data3) + return 12; + if (read (fd, data3, pagesize) != pagesize) + return 13; + for (i = 0; i < pagesize; ++i) + if (*(data + i) != *(data3 + i)) + return 14; + close (fd); + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_mmap_fixed_mapped=yes +else + ac_cv_func_mmap_fixed_mapped=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 +$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } +if test $ac_cv_func_mmap_fixed_mapped = yes; then + +$as_echo "#define HAVE_MMAP 1" >>confdefs.h + +fi +rm -f conftest.mmap conftest.txt + +for ac_header in stdlib.h +do : + ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default" +if test "x$ac_cv_header_stdlib_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_STDLIB_H 1 +_ACEOF + +fi + +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5 +$as_echo_n "checking for GNU libc compatible realloc... " >&6; } +if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + ac_cv_func_realloc_0_nonnull=no +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#if defined STDC_HEADERS || defined HAVE_STDLIB_H +# include +#else +char *realloc (); +#endif + +int +main () +{ +return ! realloc (0, 0); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + ac_cv_func_realloc_0_nonnull=yes +else + ac_cv_func_realloc_0_nonnull=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_realloc_0_nonnull" >&5 +$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; } +if test $ac_cv_func_realloc_0_nonnull = yes; then : + +$as_echo "#define HAVE_REALLOC 1" >>confdefs.h + +else + $as_echo "#define HAVE_REALLOC 0" >>confdefs.h + + case " $LIBOBJS " in + *" realloc.$ac_objext "* ) ;; + *) LIBOBJS="$LIBOBJS realloc.$ac_objext" + ;; +esac + + +$as_echo "#define realloc rpl_realloc" >>confdefs.h + +fi + + +for ac_func in dup2 fdatasync ftruncate getcwd gethostbyname gettimeofday \ + lchown memmove memset mkdir mkfifo munmap realpath select \ + setenv sethostname socket strcasecmp strchr strcspn strdup \ + strerror strncasecmp strndup strrchr strstr strtol strtoul \ + strverscmp uname utime wcwidth +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" +eval as_val=\$$as_ac_var + if test "x$as_val" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define `$as_echo "HAVE_$ac_func" | $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 "*** Required function $ac_func not found. +See \`config.log' for more details." "$LINENO" 5; } +fi +done + + + + + + + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $PYTHON version >= 2.5" >&5 +$as_echo_n "checking whether $PYTHON version >= 2.5... " >&6; } + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $PYTHON -c "$prog"" >&5 + ($PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + as_fn_error "too old" "$LINENO" 5 +fi + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a Python interpreter with version >= 2.5" >&5 +$as_echo_n "checking for a Python interpreter with version >= 2.5... " >&6; } +if test "${am_cv_pathless_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + + for am_cv_pathless_PYTHON in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 none; do + test "$am_cv_pathless_PYTHON" = none && break + prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '2.5'.split('.'))) + [0, 0, 0] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[i] +sys.exit(sys.hexversion < minverhex)" + if { echo "$as_me:$LINENO: $am_cv_pathless_PYTHON -c "$prog"" >&5 + ($am_cv_pathless_PYTHON -c "$prog") >&5 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then : + break +fi + done +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_pathless_PYTHON" >&5 +$as_echo "$am_cv_pathless_PYTHON" >&6; } + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + # Extract the first word of "$am_cv_pathless_PYTHON", so it can be a program name with args. +set dummy $am_cv_pathless_PYTHON; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$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 +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + + + if test "$PYTHON" = :; then + as_fn_error "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for headers required to compile python extensions" >&5 +$as_echo_n "checking for headers required to compile python extensions... " >&6; } +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +if test -x "$PYTHON-config"; then + PYTHON_INCLUDES=`$PYTHON-config --includes 2>/dev/null` +else + PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" + if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" + fi +fi +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5 +$as_echo "found" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for python libraries" >&5 +$as_echo_n "checking for python libraries... " >&6; } + +link_pymodules_libpython=false; +if egrep "^#define Py_ENABLE_SHARED" "${py_exec_prefix}/include/python${PYTHON_VERSION}/pyconfig.h" > /dev/null ; then + if test x`uname -s` != xDarwin; then + PYTHON_LDFLAGS="-no-undefined" + link_pymodules_libpython=true; + fi +fi + +PYTHON_LIB_DEPS=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_config_var('SYSLIBS'), sysconfig.get_config_var('SHLIBS')"` +PYTHON_LIBDIR=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_config_var('LIBDIR')"` +PYTHON_LIBPL=`$PYTHON -c "from distutils import sysconfig; print sysconfig.get_config_var('LIBPL')"` + +save_LIBS="$LIBS" + +PYTHON_EMBED_LIBS="-L${PYTHON_LIBDIR} ${PYTHON_LIB_DEPS} -lpython${PYTHON_VERSION}" + +LIBS="$LIBS $PYTHON_EMBED_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 Py_Initialize (); +int +main () +{ +return Py_Initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + LIBS="$save_LIBS"; + if $link_pymodules_libpython; then + PYTHON_LIBS="$PYTHON_EMBED_LIBS"; + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EMBED_LIBS" >&5 +$as_echo "$PYTHON_EMBED_LIBS" >&6; }; + +else + + + PYTHON_EMBED_LIBS="-L${PYTHON_LIBPL} ${PYTHON_LIB_DEPS} -lpython${PYTHON_VERSION}" + + LIBS="$save_LIBS $PYTHON_EMBED_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 Py_Initialize (); +int +main () +{ +return Py_Initialize (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + + LIBS="$save_LIBS"; + if $link_pymodules_libpython; then + PYTHON_LIBS="$PYTHON_EMBED_LIBS"; + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_EMBED_LIBS" >&5 +$as_echo "$PYTHON_EMBED_LIBS" >&6; }; + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; }; as_fn_error "could not find Python headers or library" "$LINENO" 5 +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + + +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +$as_echo "not found" >&6; } +as_fn_error "could not find Python headers or library" "$LINENO" 5 +fi +rm -f conftest.err conftest.$ac_ext +CPPFLAGS="$save_CPPFLAGS" + + +# Check for libraries we need that provide pkg-config scripts + + +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 test "${ac_cv_path_PKG_CONFIG+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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.23 + { $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 + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11" >&5 +$as_echo_n "checking for X11... " >&6; } + +if test -n "$X11_CFLAGS"; then + pkg_cv_X11_CFLAGS="$X11_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11 >= 1.3\""; } >&5 + ($PKG_CONFIG --exists --print-errors "x11 >= 1.3") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_X11_CFLAGS=`$PKG_CONFIG --cflags "x11 >= 1.3" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$X11_LIBS"; then + pkg_cv_X11_LIBS="$X11_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11 >= 1.3\""; } >&5 + ($PKG_CONFIG --exists --print-errors "x11 >= 1.3") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_X11_LIBS=`$PKG_CONFIG --libs "x11 >= 1.3" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "x11 >= 1.3" 2>&1` + else + X11_PKG_ERRORS=`$PKG_CONFIG --print-errors "x11 >= 1.3" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$X11_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (x11 >= 1.3) were not met: + +$X11_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables X11_CFLAGS +and X11_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables X11_CFLAGS +and X11_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + X11_CFLAGS=$pkg_cv_X11_CFLAGS + X11_LIBS=$pkg_cv_X11_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCOMPOSITE" >&5 +$as_echo_n "checking for XCOMPOSITE... " >&6; } + +if test -n "$XCOMPOSITE_CFLAGS"; then + pkg_cv_XCOMPOSITE_CFLAGS="$XCOMPOSITE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite >= 0.4.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xcomposite >= 0.4.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XCOMPOSITE_CFLAGS=`$PKG_CONFIG --cflags "xcomposite >= 0.4.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$XCOMPOSITE_LIBS"; then + pkg_cv_XCOMPOSITE_LIBS="$XCOMPOSITE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xcomposite >= 0.4.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "xcomposite >= 0.4.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_XCOMPOSITE_LIBS=`$PKG_CONFIG --libs "xcomposite >= 0.4.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "xcomposite >= 0.4.1" 2>&1` + else + XCOMPOSITE_PKG_ERRORS=`$PKG_CONFIG --print-errors "xcomposite >= 0.4.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$XCOMPOSITE_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (xcomposite >= 0.4.1) were not met: + +$XCOMPOSITE_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables XCOMPOSITE_CFLAGS +and XCOMPOSITE_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables XCOMPOSITE_CFLAGS +and XCOMPOSITE_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + XCOMPOSITE_CFLAGS=$pkg_cv_XCOMPOSITE_CFLAGS + XCOMPOSITE_LIBS=$pkg_cv_XCOMPOSITE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 +$as_echo_n "checking for GLIB... " >&6; } + +if test -n "$GLIB_CFLAGS"; then + pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.16.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GLIB_LIBS"; then + pkg_cv_GLIB_LIBS="$GLIB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.16.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.16.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.16.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "glib-2.0 >= 2.16.1" 2>&1` + else + GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "glib-2.0 >= 2.16.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GLIB_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (glib-2.0 >= 2.16.1) were not met: + +$GLIB_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GLIB_CFLAGS +and GLIB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables GLIB_CFLAGS +and GLIB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS + GLIB_LIBS=$pkg_cv_GLIB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK_X11" >&5 +$as_echo_n "checking for GTK_X11... " >&6; } + +if test -n "$GTK_X11_CFLAGS"; then + pkg_cv_GTK_X11_CFLAGS="$GTK_X11_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-x11-2.0 >= 2.16.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-x11-2.0 >= 2.16.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_X11_CFLAGS=`$PKG_CONFIG --cflags "gtk+-x11-2.0 >= 2.16.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GTK_X11_LIBS"; then + pkg_cv_GTK_X11_LIBS="$GTK_X11_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-x11-2.0 >= 2.16.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gtk+-x11-2.0 >= 2.16.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GTK_X11_LIBS=`$PKG_CONFIG --libs "gtk+-x11-2.0 >= 2.16.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GTK_X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gtk+-x11-2.0 >= 2.16.1" 2>&1` + else + GTK_X11_PKG_ERRORS=`$PKG_CONFIG --print-errors "gtk+-x11-2.0 >= 2.16.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GTK_X11_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (gtk+-x11-2.0 >= 2.16.1) were not met: + +$GTK_X11_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GTK_X11_CFLAGS +and GTK_X11_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables GTK_X11_CFLAGS +and GTK_X11_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + GTK_X11_CFLAGS=$pkg_cv_GTK_X11_CFLAGS + GTK_X11_LIBS=$pkg_cv_GTK_X11_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GDK" >&5 +$as_echo_n "checking for GDK... " >&6; } + +if test -n "$GDK_CFLAGS"; then + pkg_cv_GDK_CFLAGS="$GDK_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-2.0 >= 2.16.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gdk-2.0 >= 2.16.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GDK_CFLAGS=`$PKG_CONFIG --cflags "gdk-2.0 >= 2.16.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$GDK_LIBS"; then + pkg_cv_GDK_LIBS="$GDK_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gdk-2.0 >= 2.16.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "gdk-2.0 >= 2.16.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_GDK_LIBS=`$PKG_CONFIG --libs "gdk-2.0 >= 2.16.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + GDK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "gdk-2.0 >= 2.16.1" 2>&1` + else + GDK_PKG_ERRORS=`$PKG_CONFIG --print-errors "gdk-2.0 >= 2.16.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$GDK_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (gdk-2.0 >= 2.16.1) were not met: + +$GDK_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables GDK_CFLAGS +and GDK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables GDK_CFLAGS +and GDK_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + GDK_CFLAGS=$pkg_cv_GDK_CFLAGS + GDK_LIBS=$pkg_cv_GDK_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for NETWORKMANAGER" >&5 +$as_echo_n "checking for NETWORKMANAGER... " >&6; } + +if test -n "$NETWORKMANAGER_CFLAGS"; then + pkg_cv_NETWORKMANAGER_CFLAGS="$NETWORKMANAGER_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"NetworkManager >= 0.7.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "NetworkManager >= 0.7.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_NETWORKMANAGER_CFLAGS=`$PKG_CONFIG --cflags "NetworkManager >= 0.7.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$NETWORKMANAGER_LIBS"; then + pkg_cv_NETWORKMANAGER_LIBS="$NETWORKMANAGER_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"NetworkManager >= 0.7.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "NetworkManager >= 0.7.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_NETWORKMANAGER_LIBS=`$PKG_CONFIG --libs "NetworkManager >= 0.7.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + NETWORKMANAGER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "NetworkManager >= 0.7.1" 2>&1` + else + NETWORKMANAGER_PKG_ERRORS=`$PKG_CONFIG --print-errors "NetworkManager >= 0.7.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$NETWORKMANAGER_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (NetworkManager >= 0.7.1) were not met: + +$NETWORKMANAGER_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables NETWORKMANAGER_CFLAGS +and NETWORKMANAGER_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables NETWORKMANAGER_CFLAGS +and NETWORKMANAGER_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + NETWORKMANAGER_CFLAGS=$pkg_cv_NETWORKMANAGER_CFLAGS + NETWORKMANAGER_LIBS=$pkg_cv_NETWORKMANAGER_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNL" >&5 +$as_echo_n "checking for LIBNL... " >&6; } + +if test -n "$LIBNL_CFLAGS"; then + pkg_cv_LIBNL_CFLAGS="$LIBNL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL_CFLAGS=`$PKG_CONFIG --cflags "libnl-1 >= 1.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBNL_LIBS"; then + pkg_cv_LIBNL_LIBS="$LIBNL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnl-1 >= 1.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnl-1 >= 1.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNL_LIBS=`$PKG_CONFIG --libs "libnl-1 >= 1.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBNL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnl-1 >= 1.0" 2>&1` + else + LIBNL_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnl-1 >= 1.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBNL_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (libnl-1 >= 1.0) were not met: + +$LIBNL_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBNL_CFLAGS +and LIBNL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables LIBNL_CFLAGS +and LIBNL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + LIBNL_CFLAGS=$pkg_cv_LIBNL_CFLAGS + LIBNL_LIBS=$pkg_cv_LIBNL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBNM_GLIB" >&5 +$as_echo_n "checking for LIBNM_GLIB... " >&6; } + +if test -n "$LIBNM_GLIB_CFLAGS"; then + pkg_cv_LIBNM_GLIB_CFLAGS="$LIBNM_GLIB_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnm-glib >= 0.7.1 libnm-util >= 0.7.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnm-glib >= 0.7.1 libnm-util >= 0.7.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNM_GLIB_CFLAGS=`$PKG_CONFIG --cflags "libnm-glib >= 0.7.1 libnm-util >= 0.7.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBNM_GLIB_LIBS"; then + pkg_cv_LIBNM_GLIB_LIBS="$LIBNM_GLIB_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libnm-glib >= 0.7.1 libnm-util >= 0.7.1\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libnm-glib >= 0.7.1 libnm-util >= 0.7.1") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBNM_GLIB_LIBS=`$PKG_CONFIG --libs "libnm-glib >= 0.7.1 libnm-util >= 0.7.1" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBNM_GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libnm-glib >= 0.7.1 libnm-util >= 0.7.1" 2>&1` + else + LIBNM_GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors "libnm-glib >= 0.7.1 libnm-util >= 0.7.1" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBNM_GLIB_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (libnm-glib >= 0.7.1 libnm-util >= 0.7.1) were not met: + +$LIBNM_GLIB_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBNM_GLIB_CFLAGS +and LIBNM_GLIB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables LIBNM_GLIB_CFLAGS +and LIBNM_GLIB_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + LIBNM_GLIB_CFLAGS=$pkg_cv_LIBNM_GLIB_CFLAGS + LIBNM_GLIB_LIBS=$pkg_cv_LIBNM_GLIB_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for DEVMAPPER" >&5 +$as_echo_n "checking for DEVMAPPER... " >&6; } + +if test -n "$DEVMAPPER_CFLAGS"; then + pkg_cv_DEVMAPPER_CFLAGS="$DEVMAPPER_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.17\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.17") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEVMAPPER_CFLAGS=`$PKG_CONFIG --cflags "devmapper >= 1.02.17" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$DEVMAPPER_LIBS"; then + pkg_cv_DEVMAPPER_LIBS="$DEVMAPPER_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"devmapper >= 1.02.17\""; } >&5 + ($PKG_CONFIG --exists --print-errors "devmapper >= 1.02.17") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_DEVMAPPER_LIBS=`$PKG_CONFIG --libs "devmapper >= 1.02.17" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + DEVMAPPER_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "devmapper >= 1.02.17" 2>&1` + else + DEVMAPPER_PKG_ERRORS=`$PKG_CONFIG --print-errors "devmapper >= 1.02.17" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$DEVMAPPER_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (devmapper >= 1.02.17) were not met: + +$DEVMAPPER_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables DEVMAPPER_CFLAGS +and DEVMAPPER_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables DEVMAPPER_CFLAGS +and DEVMAPPER_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + DEVMAPPER_CFLAGS=$pkg_cv_DEVMAPPER_CFLAGS + DEVMAPPER_LIBS=$pkg_cv_DEVMAPPER_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBCURL" >&5 +$as_echo_n "checking for LIBCURL... " >&6; } + +if test -n "$LIBCURL_CFLAGS"; then + pkg_cv_LIBCURL_CFLAGS="$LIBCURL_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.19.5\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcurl >= 7.19.5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBCURL_CFLAGS=`$PKG_CONFIG --cflags "libcurl >= 7.19.5" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBCURL_LIBS"; then + pkg_cv_LIBCURL_LIBS="$LIBCURL_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcurl >= 7.19.5\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcurl >= 7.19.5") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBCURL_LIBS=`$PKG_CONFIG --libs "libcurl >= 7.19.5" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBCURL_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libcurl >= 7.19.5" 2>&1` + else + LIBCURL_PKG_ERRORS=`$PKG_CONFIG --print-errors "libcurl >= 7.19.5" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBCURL_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (libcurl >= 7.19.5) were not met: + +$LIBCURL_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBCURL_CFLAGS +and LIBCURL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables LIBCURL_CFLAGS +and LIBCURL_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + LIBCURL_CFLAGS=$pkg_cv_LIBCURL_CFLAGS + LIBCURL_LIBS=$pkg_cv_LIBCURL_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RPM" >&5 +$as_echo_n "checking for RPM... " >&6; } + +if test -n "$RPM_CFLAGS"; then + pkg_cv_RPM_CFLAGS="$RPM_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm >= 4.8.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "rpm >= 4.8.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_RPM_CFLAGS=`$PKG_CONFIG --cflags "rpm >= 4.8.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$RPM_LIBS"; then + pkg_cv_RPM_LIBS="$RPM_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"rpm >= 4.8.0\""; } >&5 + ($PKG_CONFIG --exists --print-errors "rpm >= 4.8.0") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_RPM_LIBS=`$PKG_CONFIG --libs "rpm >= 4.8.0" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + RPM_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "rpm >= 4.8.0" 2>&1` + else + RPM_PKG_ERRORS=`$PKG_CONFIG --print-errors "rpm >= 4.8.0" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$RPM_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (rpm >= 4.8.0) were not met: + +$RPM_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables RPM_CFLAGS +and RPM_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables RPM_CFLAGS +and RPM_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + RPM_CFLAGS=$pkg_cv_RPM_CFLAGS + RPM_LIBS=$pkg_cv_RPM_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +pkg_failed=no +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBARCHIVE" >&5 +$as_echo_n "checking for LIBARCHIVE... " >&6; } + +if test -n "$LIBARCHIVE_CFLAGS"; then + pkg_cv_LIBARCHIVE_CFLAGS="$LIBARCHIVE_CFLAGS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libarchive >= 2.7.902a\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libarchive >= 2.7.902a") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBARCHIVE_CFLAGS=`$PKG_CONFIG --cflags "libarchive >= 2.7.902a" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi +if test -n "$LIBARCHIVE_LIBS"; then + pkg_cv_LIBARCHIVE_LIBS="$LIBARCHIVE_LIBS" + elif test -n "$PKG_CONFIG"; then + if test -n "$PKG_CONFIG" && \ + { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libarchive >= 2.7.902a\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libarchive >= 2.7.902a") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + pkg_cv_LIBARCHIVE_LIBS=`$PKG_CONFIG --libs "libarchive >= 2.7.902a" 2>/dev/null` +else + pkg_failed=yes +fi + else + pkg_failed=untried +fi + + + +if test $pkg_failed = yes; then + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + LIBARCHIVE_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "libarchive >= 2.7.902a" 2>&1` + else + LIBARCHIVE_PKG_ERRORS=`$PKG_CONFIG --print-errors "libarchive >= 2.7.902a" 2>&1` + fi + # Put the nasty error message in config.log where it belongs + echo "$LIBARCHIVE_PKG_ERRORS" >&5 + + as_fn_error "Package requirements (libarchive >= 2.7.902a) were not met: + +$LIBARCHIVE_PKG_ERRORS + +Consider adjusting the PKG_CONFIG_PATH environment variable if you +installed software in a non-standard prefix. + +Alternatively, you may set the environment variables LIBARCHIVE_CFLAGS +and LIBARCHIVE_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. +" "$LINENO" 5 +elif test $pkg_failed = untried; 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 "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. + +Alternatively, you may set the environment variables LIBARCHIVE_CFLAGS +and LIBARCHIVE_LIBS to avoid the need to call pkg-config. +See the pkg-config man page for more details. + +To get pkg-config, see . +See \`config.log' for more details." "$LINENO" 5; } +else + LIBARCHIVE_CFLAGS=$pkg_cv_LIBARCHIVE_CFLAGS + LIBARCHIVE_LIBS=$pkg_cv_LIBARCHIVE_LIBS + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + : +fi + +# Set $RPM_OPT_FLAGS if we don't have it +if test -z $RPM_OPT_FLAGS ; then + CFLAGS="$CFLAGS -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions" +else + CFLAGS="$CFLAGS $RPM_OPT_FLAGS" +fi + +# SELinux support can be enabled or disabled +# Check whether --enable-selinux was given. +if test "${enable_selinux+set}" = set; then : + enableval=$enable_selinux; selinux=$enableval +else + selinux=yes +fi + +if test x$selinux = xyes ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for matchpathcon in -lselinux" >&5 +$as_echo_n "checking for matchpathcon in -lselinux... " >&6; } +if test "${ac_cv_lib_selinux_matchpathcon+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $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 matchpathcon (); +int +main () +{ +return matchpathcon (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_matchpathcon=yes +else + ac_cv_lib_selinux_matchpathcon=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_selinux_matchpathcon" >&5 +$as_echo "$ac_cv_lib_selinux_matchpathcon" >&6; } +if test "x$ac_cv_lib_selinux_matchpathcon" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +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 "*** libselinux not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lsetfilecon in -lselinux" >&5 +$as_echo_n "checking for lsetfilecon in -lselinux... " >&6; } +if test "${ac_cv_lib_selinux_lsetfilecon+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lselinux $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 lsetfilecon (); +int +main () +{ +return lsetfilecon (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_selinux_lsetfilecon=yes +else + ac_cv_lib_selinux_lsetfilecon=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_selinux_lsetfilecon" >&5 +$as_echo "$ac_cv_lib_selinux_lsetfilecon" >&6; } +if test "x$ac_cv_lib_selinux_lsetfilecon" = x""yes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBSELINUX 1 +_ACEOF + + LIBS="-lselinux $LIBS" + +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 "*** libselinux not usable. +See \`config.log' for more details." "$LINENO" 5; } +fi + + + selinux_libs="-lselinux -laudit" + SELINUX_CFLAGS=-DUSESELINUX=1 + + SELINUX_LIBS=$selinux_libs + +fi + +# NFS support can, in theory, be enabled or disabled +# Check whether --enable-nfs was given. +if test "${enable_nfs+set}" = set; then : + enableval=$enable_nfs; nfs=$enableval +else + nfs=yes +fi + +if test x$selinux = xyes ; then + NFS_CFLAGS=-DHAVE_NFS + +fi + +# IPv6 support can be enabled or disabled +# Check whether --enable-ipv6 was given. +if test "${enable_ipv6+set}" = set; then : + enableval=$enable_ipv6; ipv6=$enableval +else + ipv6=yes +fi + +if test x$ipv6 = xyes ; then + IPV6_CFLAGS=-DENABLE_IPV6 + +fi + +# Add remaining compiler flags we want to use +CFLAGS="$CFLAGS -Wall -Werror -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" + +# Filter CFLAGS (remove duplicate flags) +cflags_filter() { + have= + first=1 + for flag in $* ; do + if test -z "`echo $have | grep -- $flag`" ; then + if test x$first == x1 ; then + first=2 + else + echo -n " " + fi + echo -n $flag + have="$have $flag" + fi + done +} +CFLAGS="`cflags_filter $CFLAGS`" + +# Unset $(LIBS) because different programs and libraries will have different +# lists of libraries to link with, we don't want everything linking against +# all libraries we checked for. +LIBS= + +# Get the release number from the spec file +rel="`awk '/Release:/ { split($2, r, "%"); print r[1] }' anaconda.spec.in`" +PACKAGE_RELEASE=$rel + + +# Set $(ARCH) and arch-related tests +s_arch="`uname -m | sed -e s/i.86/i386/ -e s/sparc.*/sparc/ -e s/ppc.*/ppc/`" +ARCH=$s_arch + + + if test x$s_arch != xs390 && test x$s_arch != xs390x; then + IS_FONT_ARCH_TRUE= + IS_FONT_ARCH_FALSE='#' +else + IS_FONT_ARCH_TRUE='#' + IS_FONT_ARCH_FALSE= +fi + + + if test x$s_arch == xppc || test x$s_arch == xi386 || test x$s_arch == xx86_64; then + IS_LIVEINST_ARCH_TRUE= + IS_LIVEINST_ARCH_FALSE='#' +else + IS_LIVEINST_ARCH_TRUE='#' + IS_LIVEINST_ARCH_FALSE= +fi + + + if test x$s_arch == xi386 || test x$s_arch == xx86_64; then + IS_GPTSYNC_ARCH_TRUE= + IS_GPTSYNC_ARCH_FALSE='#' +else + IS_GPTSYNC_ARCH_TRUE='#' + IS_GPTSYNC_ARCH_FALSE= +fi + + + if test x$s_arch == xi386 || test x$s_arch == xppc || test x$s_arch == xx86_64; then + IS_KEYMAPS_OVERRIDE_ARCH_TRUE= + IS_KEYMAPS_OVERRIDE_ARCH_FALSE='#' +else + IS_KEYMAPS_OVERRIDE_ARCH_TRUE='#' + IS_KEYMAPS_OVERRIDE_ARCH_FALSE= +fi + + + if test x$s_arch == xi386; then + IS_I386_TRUE= + IS_I386_FALSE='#' +else + IS_I386_TRUE='#' + IS_I386_FALSE= +fi + + + if test x$s_arch == xppc; then + IS_PPC_TRUE= + IS_PPC_FALSE='#' +else + IS_PPC_TRUE='#' + IS_PPC_FALSE= +fi + + + if test x$s_arch == xs390 || test x$s_arch == xs390x; then + IS_S390_TRUE= + IS_S390_FALSE='#' +else + IS_S390_TRUE='#' + IS_S390_FALSE= +fi + + + if test x$s_arch == xx86_64; then + IS_X86_64_TRUE= + IS_X86_64_FALSE='#' +else + IS_X86_64_TRUE='#' + IS_X86_64_FALSE= +fi + + + if test x$s_arch == xsparc || test x$s_arch == xsparc64; then + IS_SPARC_TRUE= + IS_SPARC_FALSE='#' +else + IS_SPARC_TRUE='#' + IS_SPARC_FALSE= +fi + + +ac_config_files="$ac_config_files Makefile bootdisk/Makefile bootdisk/i386/Makefile bootdisk/ppc/Makefile bootdisk/s390x/Makefile bootdisk/x86_64/Makefile booty/Makefile command-stubs/Makefile docs/Makefile fonts/Makefile gptsync/Makefile installclasses/Makefile isys/Makefile iw/Makefile liveinst/Makefile liveinst/console.apps/Makefile liveinst/pam.d/Makefile loader/Makefile pixmaps/Makefile po/Makefile.in scripts/Makefile storage/Makefile storage/devicelibs/Makefile storage/formats/Makefile tests/Makefile tests/storage/Makefile tests/storage/devicelibs/Makefile textw/Makefile ui/Makefile utils/Makefile" + +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 + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + 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= +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 + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_FONT_ARCH_TRUE}" && test -z "${IS_FONT_ARCH_FALSE}"; then + as_fn_error "conditional \"IS_FONT_ARCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_LIVEINST_ARCH_TRUE}" && test -z "${IS_LIVEINST_ARCH_FALSE}"; then + as_fn_error "conditional \"IS_LIVEINST_ARCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_GPTSYNC_ARCH_TRUE}" && test -z "${IS_GPTSYNC_ARCH_FALSE}"; then + as_fn_error "conditional \"IS_GPTSYNC_ARCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_KEYMAPS_OVERRIDE_ARCH_TRUE}" && test -z "${IS_KEYMAPS_OVERRIDE_ARCH_FALSE}"; then + as_fn_error "conditional \"IS_KEYMAPS_OVERRIDE_ARCH\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_I386_TRUE}" && test -z "${IS_I386_FALSE}"; then + as_fn_error "conditional \"IS_I386\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_PPC_TRUE}" && test -z "${IS_PPC_FALSE}"; then + as_fn_error "conditional \"IS_PPC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_S390_TRUE}" && test -z "${IS_S390_FALSE}"; then + as_fn_error "conditional \"IS_S390\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_X86_64_TRUE}" && test -z "${IS_X86_64_FALSE}"; then + as_fn_error "conditional \"IS_X86_64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${IS_SPARC_TRUE}" && test -z "${IS_SPARC_FALSE}"; then + as_fn_error "conditional \"IS_SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${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. +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 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=$?; test $as_status -eq 0 && as_status=1 + if test "$3"; then + as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + fi + $as_echo "$as_me: error: $1" >&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 -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +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 + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in #( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# 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 anaconda $as_me 13.42, which was +generated by GNU Autoconf 2.65. 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 ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +anaconda config.status 13.42 +configured by $0, generated by GNU Autoconf 2.65, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2009 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=$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"` ;; + 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 +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +OBJDUMP \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + +# 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 + "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "bootdisk/Makefile") CONFIG_FILES="$CONFIG_FILES bootdisk/Makefile" ;; + "bootdisk/i386/Makefile") CONFIG_FILES="$CONFIG_FILES bootdisk/i386/Makefile" ;; + "bootdisk/ppc/Makefile") CONFIG_FILES="$CONFIG_FILES bootdisk/ppc/Makefile" ;; + "bootdisk/s390x/Makefile") CONFIG_FILES="$CONFIG_FILES bootdisk/s390x/Makefile" ;; + "bootdisk/x86_64/Makefile") CONFIG_FILES="$CONFIG_FILES bootdisk/x86_64/Makefile" ;; + "booty/Makefile") CONFIG_FILES="$CONFIG_FILES booty/Makefile" ;; + "command-stubs/Makefile") CONFIG_FILES="$CONFIG_FILES command-stubs/Makefile" ;; + "docs/Makefile") CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; + "fonts/Makefile") CONFIG_FILES="$CONFIG_FILES fonts/Makefile" ;; + "gptsync/Makefile") CONFIG_FILES="$CONFIG_FILES gptsync/Makefile" ;; + "installclasses/Makefile") CONFIG_FILES="$CONFIG_FILES installclasses/Makefile" ;; + "isys/Makefile") CONFIG_FILES="$CONFIG_FILES isys/Makefile" ;; + "iw/Makefile") CONFIG_FILES="$CONFIG_FILES iw/Makefile" ;; + "liveinst/Makefile") CONFIG_FILES="$CONFIG_FILES liveinst/Makefile" ;; + "liveinst/console.apps/Makefile") CONFIG_FILES="$CONFIG_FILES liveinst/console.apps/Makefile" ;; + "liveinst/pam.d/Makefile") CONFIG_FILES="$CONFIG_FILES liveinst/pam.d/Makefile" ;; + "loader/Makefile") CONFIG_FILES="$CONFIG_FILES loader/Makefile" ;; + "pixmaps/Makefile") CONFIG_FILES="$CONFIG_FILES pixmaps/Makefile" ;; + "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; + "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;; + "storage/Makefile") CONFIG_FILES="$CONFIG_FILES storage/Makefile" ;; + "storage/devicelibs/Makefile") CONFIG_FILES="$CONFIG_FILES storage/devicelibs/Makefile" ;; + "storage/formats/Makefile") CONFIG_FILES="$CONFIG_FILES storage/formats/Makefile" ;; + "tests/Makefile") CONFIG_FILES="$CONFIG_FILES tests/Makefile" ;; + "tests/storage/Makefile") CONFIG_FILES="$CONFIG_FILES tests/storage/Makefile" ;; + "tests/storage/devicelibs/Makefile") CONFIG_FILES="$CONFIG_FILES tests/storage/devicelibs/Makefile" ;; + "textw/Makefile") CONFIG_FILES="$CONFIG_FILES textw/Makefile" ;; + "ui/Makefile") CONFIG_FILES="$CONFIG_FILES ui/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + + *) 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= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$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 -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 + +# 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 + + +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 {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + 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 >>"\$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 >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + 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 + } + + print line +} + +_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 < "$tmp/subs1.awk" > "$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 $(srcdir), +# ${srcdir} and @srcdir@ 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[ ]*=/{ +s/:*\$(srcdir):*/:/ +s/:*\${srcdir}:*/:/ +s/:*@srcdir@:*/:/ +s/^\([^=]*=[ ]*\):*/\1/ +s/:*$// +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 >"$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_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; 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="$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 "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 >"$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" | $AWK -f "$tmp/subs.awk" >$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' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$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 "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$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 "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$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 "$tmp/config.h" "$ac_file" \ + || as_fn_error "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :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 + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool 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. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="" + +# ### BEGIN LIBTOOL CONFIG + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# An object symbol dumper. +OBJDUMP=$lt_OBJDUMP + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + ;; + "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" + cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/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 assigment 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 assigment 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 $? +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 + diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..e0672cd --- /dev/null +++ b/configure.ac @@ -0,0 +1,279 @@ +# configure.ac for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +m4_define(python_required_version, 2.5) + +AC_PREREQ([2.63]) +AC_INIT([anaconda], [13.42], [anaconda-devel-list@redhat.com]) +AM_INIT_AUTOMAKE([foreign no-dist-gzip dist-bzip2]) + +AC_CONFIG_SRCDIR([loader/loader.c]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +AC_DEFINE_UNQUOTED([BUILD_DATE], ["`date +%m%d%Y`"], [Date of anaconda build]) +AM_SILENT_RULES([yes]) # make --enable-silent-rules the default. + +# Checks for programs. +AC_PROG_AWK +AC_PROG_GREP +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +AC_PROG_LIBTOOL + +AM_GNU_GETTEXT([external]) + +# Checks for libraries. +AC_CHECK_LIB([X11], [XGetWindowAttributes], + [AC_SUBST(X11_LIBS, [-lX11])], + [AC_MSG_FAILURE([*** libX11 not usable.])]) + +AC_CHECK_LIB([audit], [audit_open], + [AC_SUBST(AUDIT_LIBS, [-laudit])], + [AC_MSG_FAILURE([*** libaudit not usable.])]) + +AC_CHECK_LIB([blkid], [blkid_get_cache], + [AC_SUBST(BLKID_LIBS, [-lblkid])], + [AC_MSG_FAILURE([*** libblkid not usable.])]) + +AC_CHECK_LIB([checkisomd5], [mediaCheckFile], + [AC_SUBST(CHECKISOMD5_LIBS, [-lcheckisomd5])], + [AC_MSG_FAILURE([*** libcheckisomd5 not usable.])]) + +AC_CHECK_LIB([ext2fs], [ext2fs_initialize], + [AC_SUBST(EXT2FS_LIBS, [-lext2fs])], + [AC_MSG_FAILURE([*** libext2fs not usable.])]) + +AC_CHECK_LIB([iscsi], [libiscsi_get_firmware_network_config], + [AC_SUBST(ISCSI_LIBS, [-liscsi])], + [AC_MSG_FAILURE([*** libiscsi not usable.])]) + +AC_CHECK_LIB([newt], [newtInit], + [AC_SUBST(NEWT_LIBS, [-lnewt])], + [AC_MSG_FAILURE([*** libnewt not usable.])]) + +AC_CHECK_LIB([slang], [SLang_get_int_size], + [AC_SUBST(SLANG_LIBS, [-lslang])], + [AC_MSG_FAILURE([*** libslang not usable.])]) + +AC_CHECK_LIB([z], [zlibVersion], + [AC_SUBST(ZLIB_LIBS, [-lz])], + [AC_MSG_FAILURE([*** libz not usable.])]) + +# Checks for header files. +AC_PATH_X +AC_FUNC_ALLOCA +AC_HEADER_RESOLV +AC_HEADER_MAJOR +AC_CHECK_HEADERS([argz.h arpa/inet.h fcntl.h inttypes.h libintl.h limits.h \ + malloc.h netdb.h netinet/in.h stddef.h stdint.h stdlib.h \ + string.h strings.h sys/ioctl.h sys/mount.h sys/param.h \ + sys/socket.h sys/time.h sys/vfs.h syslog.h termios.h \ + unistd.h utime.h wchar.h], + [], + [AC_MSG_FAILURE([*** Header file $ac_header not found.])], + []) + +# Checks for typedefs, structures, and compiler characteristics. +AC_TYPE_UID_T +AC_C_INLINE +AC_TYPE_INT32_T +AC_TYPE_MODE_T +AC_TYPE_OFF_T +AC_TYPE_PID_T +AC_TYPE_SIZE_T +AC_TYPE_SSIZE_T +AC_CHECK_MEMBERS([struct stat.st_rdev]) +AC_TYPE_UINT16_T +AC_TYPE_UINT32_T +AC_TYPE_UINT64_T +AC_TYPE_UINT8_T + +# Checks for library functions. +AC_FUNC_CHOWN +AC_FUNC_ERROR_AT_LINE +AC_FUNC_FORK +AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK +AC_FUNC_MALLOC +AC_FUNC_MMAP +AC_FUNC_REALLOC +AC_CHECK_FUNCS([dup2 fdatasync ftruncate getcwd gethostbyname gettimeofday \ + lchown memmove memset mkdir mkfifo munmap realpath select \ + setenv sethostname socket strcasecmp strchr strcspn strdup \ + strerror strncasecmp strndup strrchr strstr strtol strtoul \ + strverscmp uname utime wcwidth], + [], + [AC_MSG_FAILURE([*** Required function $ac_func not found.])]) + +AM_PATH_PYTHON(python_required_version) +AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers or library)]) + +# Check for libraries we need that provide pkg-config scripts +PKG_PROG_PKG_CONFIG([0.23]) +PKG_CHECK_MODULES([X11], [x11 >= 1.3]) +PKG_CHECK_MODULES([XCOMPOSITE], [xcomposite >= 0.4.1]) +PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.16.1]) +PKG_CHECK_MODULES([GTK_X11], [gtk+-x11-2.0 >= 2.16.1]) +PKG_CHECK_MODULES([GDK], [gdk-2.0 >= 2.16.1]) +PKG_CHECK_MODULES([NETWORKMANAGER], [NetworkManager >= 0.7.1]) +PKG_CHECK_MODULES([LIBNL], [libnl-1 >= 1.0]) +PKG_CHECK_MODULES([LIBNM_GLIB], [libnm-glib >= 0.7.1 libnm-util >= 0.7.1]) +PKG_CHECK_MODULES([DEVMAPPER], [devmapper >= 1.02.17]) +PKG_CHECK_MODULES([LIBCURL], [libcurl >= 7.19.5]) +PKG_CHECK_MODULES([RPM], [rpm >= 4.8.0]) +PKG_CHECK_MODULES([LIBARCHIVE], [libarchive >= 2.7.902a]) + +# Set $RPM_OPT_FLAGS if we don't have it +if test -z $RPM_OPT_FLAGS ; then + CFLAGS="$CFLAGS -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions" +else + CFLAGS="$CFLAGS $RPM_OPT_FLAGS" +fi + +# SELinux support can be enabled or disabled +AC_ARG_ENABLE(selinux, + AC_HELP_STRING([--enable-selinux], + [enable SELinux support (default is yes)]), + [selinux=$enableval], + [selinux=yes]) +if test x$selinux = xyes ; then + AC_CHECK_LIB([selinux], [matchpathcon], [], + [AC_MSG_FAILURE([*** libselinux not usable.])]) + AC_CHECK_LIB([selinux], [lsetfilecon], [], + [AC_MSG_FAILURE([*** libselinux not usable.])]) + + selinux_libs="-lselinux -laudit" + AC_SUBST(SELINUX_CFLAGS, [-DUSESELINUX=1]) + AC_SUBST(SELINUX_LIBS, [$selinux_libs]) +fi + +# NFS support can, in theory, be enabled or disabled +AC_ARG_ENABLE(nfs, + AC_HELP_STRING([--enable-nfs], + [enable NFS support (default is yes)]), + [nfs=$enableval], + [nfs=yes]) +if test x$selinux = xyes ; then + AC_SUBST(NFS_CFLAGS, [-DHAVE_NFS]) +fi + +# IPv6 support can be enabled or disabled +AC_ARG_ENABLE(ipv6, + AC_HELP_STRING([--enable-ipv6], + [enable IPv6 support (default is yes)]), + [ipv6=$enableval], + [ipv6=yes]) +if test x$ipv6 = xyes ; then + AC_SUBST(IPV6_CFLAGS, [-DENABLE_IPV6]) +fi + +# Add remaining compiler flags we want to use +CFLAGS="$CFLAGS -Wall -Werror -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE" + +# Filter CFLAGS (remove duplicate flags) +cflags_filter() { + have= + first=1 + for flag in $* ; do + if test -z "`echo $have | grep -- $flag`" ; then + if test x$first == x1 ; then + first=2 + else + echo -n " " + fi + echo -n $flag + have="$have $flag" + fi + done +} +CFLAGS="`cflags_filter $CFLAGS`" + +# Unset $(LIBS) because different programs and libraries will have different +# lists of libraries to link with, we don't want everything linking against +# all libraries we checked for. +LIBS= + +# Get the release number from the spec file +rel="`awk '/Release:/ { split($2, r, "%"); print r[[1]] }' anaconda.spec.in`" +AC_SUBST(PACKAGE_RELEASE, [$rel]) + +# Set $(ARCH) and arch-related tests +s_arch="`uname -m | sed -e s/i.86/i386/ -e s/sparc.*/sparc/ -e s/ppc.*/ppc/`" +AC_SUBST(ARCH, [$s_arch]) + +AM_CONDITIONAL(IS_FONT_ARCH, + [test x$s_arch != xs390 && test x$s_arch != xs390x]) + +AM_CONDITIONAL(IS_LIVEINST_ARCH, + [test x$s_arch == xppc || test x$s_arch == xi386 || test x$s_arch == xx86_64]) + +AM_CONDITIONAL(IS_GPTSYNC_ARCH, + [test x$s_arch == xi386 || test x$s_arch == xx86_64]) + +AM_CONDITIONAL(IS_KEYMAPS_OVERRIDE_ARCH, + [test x$s_arch == xi386 || test x$s_arch == xppc || test x$s_arch == xx86_64]) + +AM_CONDITIONAL(IS_I386, + [test x$s_arch == xi386]) + +AM_CONDITIONAL(IS_PPC, + [test x$s_arch == xppc]) + +AM_CONDITIONAL(IS_S390, + [test x$s_arch == xs390 || test x$s_arch == xs390x]) + +AM_CONDITIONAL(IS_X86_64, + [test x$s_arch == xx86_64]) + +AM_CONDITIONAL(IS_SPARC, + [test x$s_arch == xsparc || test x$s_arch == xsparc64]) + +AC_CONFIG_FILES([Makefile + bootdisk/Makefile + bootdisk/i386/Makefile + bootdisk/ppc/Makefile + bootdisk/s390x/Makefile + bootdisk/x86_64/Makefile + booty/Makefile + command-stubs/Makefile + docs/Makefile + fonts/Makefile + gptsync/Makefile + installclasses/Makefile + isys/Makefile + iw/Makefile + liveinst/Makefile + liveinst/console.apps/Makefile + liveinst/pam.d/Makefile + loader/Makefile + pixmaps/Makefile + po/Makefile.in + scripts/Makefile + storage/Makefile + storage/devicelibs/Makefile + storage/formats/Makefile + tests/Makefile + tests/storage/Makefile + tests/storage/devicelibs/Makefile + textw/Makefile + ui/Makefile + utils/Makefile]) +AC_OUTPUT diff --git a/constants.py b/constants.py new file mode 100644 index 0000000..8cbee96 --- /dev/null +++ b/constants.py @@ -0,0 +1,89 @@ +# +# constants.py: anaconda constants +# +# Copyright (C) 2001 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Erik Troan +# + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) +N_ = lambda x: x + +BETANAG = 0 + +SELINUX_DEFAULT = 1 + +DISPATCH_BACK = -1 +DISPATCH_FORWARD = 1 +DISPATCH_NOOP = None + +EXN_OK = 0 +EXN_DEBUG = 1 +EXN_SAVE = 2 +EXN_CANCEL = 3 + +# different types of partition requests +# REQUEST_PREEXIST is a placeholder for a pre-existing partition on the system +# REQUEST_NEW is a request for a partition which will be automatically +# created based on various constraints on size, drive, etc +# REQUEST_RAID is a request for a raid device +# REQUEST_PROTECTED is a preexisting partition which can't change +# (harddrive install, harddrive with the isos on it) +# +REQUEST_PREEXIST = 1 +REQUEST_NEW = 2 +REQUEST_RAID = 4 +REQUEST_PROTECTED = 8 +REQUEST_VG = 16 # volume group +REQUEST_LV = 32 # logical volume + +# XXX this is made up and used by the size spinner; should just be set with +# a callback +MAX_PART_SIZE = 1024*1024*1024 + +# install key related constants +SKIP_KEY = -50 + +# pull in kickstart constants as well +from pykickstart.constants import * + +# common string needs to be easy to change +import product +productName = product.productName +productVersion = product.productVersion +productArch = product.productArch +productPath = product.productPath +bugzillaUrl = product.bugUrl + +lvmErrorOutput = "/tmp/lvmout" + +exceptionText = _("An unhandled exception has occurred. This " + "is most likely a bug. Please save a copy of " + "the detailed exception and file a bug report") +if not bugzillaUrl: + # this string will be combined with "An unhandled exception"... + # the leading space is not a typo. + exceptionText += _(" with the provider of this software.") +else: + # this string will be combined with "An unhandled exception"... + # the leading space is not a typo. + exceptionText += _(" against anaconda at %s") %(bugzillaUrl,) + +# DriverDisc Paths +DD_EXTRACTED = "/tmp/DD" +DD_RPMS = "/tmp/DD-*" + diff --git a/depcomp b/depcomp new file mode 100755 index 0000000..df8eea7 --- /dev/null +++ b/depcomp @@ -0,0 +1,630 @@ +#! /bin/sh +# depcomp - compile a program generating dependencies as side-effects + +scriptversion=2009-04-28.21; # UTC + +# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free +# Software Foundation, 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; either version 2, 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. + +# Originally written by Alexandre Oliva . + +case $1 in + '') + echo "$0: No command. Try \`$0 --help' for more information." 1>&2 + exit 1; + ;; + -h | --h*) + cat <<\EOF +Usage: depcomp [--help] [--version] PROGRAM [ARGS] + +Run PROGRAMS ARGS to compile a file, generating dependencies +as side-effects. + +Environment variables: + depmode Dependency tracking mode. + source Source file read by `PROGRAMS ARGS'. + object Object file output by `PROGRAMS ARGS'. + DEPDIR directory where to store dependencies. + depfile Dependency file to output. + tmpdepfile Temporary file to use when outputing dependencies. + libtool Whether libtool is used (yes/no). + +Report bugs to . +EOF + exit $? + ;; + -v | --v*) + echo "depcomp $scriptversion" + exit $? + ;; +esac + +if test -z "$depmode" || test -z "$source" || test -z "$object"; then + echo "depcomp: Variables source, object and depmode must be set" 1>&2 + exit 1 +fi + +# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. +depfile=${depfile-`echo "$object" | + sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} +tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} + +rm -f "$tmpdepfile" + +# Some modes work just like other modes, but use different flags. We +# parameterize here, but still list the modes in the big case below, +# to make depend.m4 easier to write. Note that we *cannot* use a case +# here, because this file can only contain one case statement. +if test "$depmode" = hp; then + # HP compiler uses -M and no extra arg. + gccflag=-M + depmode=gcc +fi + +if test "$depmode" = dashXmstdout; then + # This is just like dashmstdout with a different argument. + dashmflag=-xM + depmode=dashmstdout +fi + +cygpath_u="cygpath -u -f -" +if test "$depmode" = msvcmsys; then + # This is just like msvisualcpp but w/o cygpath translation. + # Just convert the backslash-escaped backslashes to single forward + # slashes to satisfy depend.m4 + cygpath_u="sed s,\\\\\\\\,/,g" + depmode=msvisualcpp +fi + +case "$depmode" in +gcc3) +## gcc 3 implements dependency tracking that does exactly what +## we want. Yay! Note: for some reason libtool 1.4 doesn't like +## it if -MD -MP comes after the -MF stuff. Hmm. +## Unfortunately, FreeBSD c89 acceptance of flags depends upon +## the command line argument order; so add the flags where they +## appear in depend2.am. Note that the slowdown incurred here +## affects only configure: in makefiles, %FASTDEP% shortcuts this. + for arg + do + case $arg in + -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; + *) set fnord "$@" "$arg" ;; + esac + shift # fnord + shift # $arg + done + "$@" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + mv "$tmpdepfile" "$depfile" + ;; + +gcc) +## There are various ways to get dependency output from gcc. Here's +## why we pick this rather obscure method: +## - Don't want to use -MD because we'd like the dependencies to end +## up in a subdir. Having to rename by hand is ugly. +## (We might end up doing this anyway to support other compilers.) +## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like +## -MM, not -M (despite what the docs say). +## - Using -M directly means running the compiler twice (even worse +## than renaming). + if test -z "$gccflag"; then + gccflag=-MD, + fi + "$@" -Wp,"$gccflag$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + echo "$object : \\" > "$depfile" + alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz +## The second -e expression handles DOS-style file names with drive letters. + sed -e 's/^[^:]*: / /' \ + -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" +## This next piece of magic avoids the `deleted header file' problem. +## The problem is that when a header file which appears in a .P file +## is deleted, the dependency causes make to die (because there is +## typically no way to rebuild the header). We avoid this by adding +## dummy dependencies for each header file. Too bad gcc doesn't do +## this for us directly. + tr ' ' ' +' < "$tmpdepfile" | +## Some versions of gcc put a space before the `:'. On the theory +## that the space means something, we add a space to the output as +## well. +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +sgi) + if test "$libtool" = yes; then + "$@" "-Wp,-MDupdate,$tmpdepfile" + else + "$@" -MDupdate "$tmpdepfile" + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + + if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files + echo "$object : \\" > "$depfile" + + # Clip off the initial element (the dependent). Don't try to be + # clever and replace this with sed code, as IRIX sed won't handle + # lines with more than a fixed number of characters (4096 in + # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; + # the IRIX cc adds comments like `#:fec' to the end of the + # dependency line. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ + tr ' +' ' ' >> "$depfile" + echo >> "$depfile" + + # The second pass generates a dummy entry for each header file. + tr ' ' ' +' < "$tmpdepfile" \ + | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ + >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +aix) + # The C for AIX Compiler uses -M and outputs the dependencies + # in a .u file. In older versions, this file always lives in the + # current directory. Also, the AIX compiler puts `$object:' at the + # start of each line; $object doesn't have directory information. + # Version 6 uses the directory in both cases. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.u + tmpdepfile2=$base.u + tmpdepfile3=$dir.libs/$base.u + "$@" -Wc,-M + else + tmpdepfile1=$dir$base.u + tmpdepfile2=$dir$base.u + tmpdepfile3=$dir$base.u + "$@" -M + fi + stat=$? + + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + # Each line is of the form `foo.o: dependent.h'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + # The sourcefile does not contain any dependencies, so just + # store a dummy comment line, to avoid errors with the Makefile + # "include basename.Plo" scheme. + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +icc) + # Intel's C compiler understands `-MD -MF file'. However on + # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c + # ICC 7.0 will fill foo.d with something like + # foo.o: sub/foo.c + # foo.o: sub/foo.h + # which is wrong. We want: + # sub/foo.o: sub/foo.c + # sub/foo.o: sub/foo.h + # sub/foo.c: + # sub/foo.h: + # ICC 7.1 will output + # foo.o: sub/foo.c sub/foo.h + # and will wrap long lines using \ : + # foo.o: sub/foo.c ... \ + # sub/foo.h ... \ + # ... + + "$@" -MD -MF "$tmpdepfile" + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile" + exit $stat + fi + rm -f "$depfile" + # Each line is of the form `foo.o: dependent.h', + # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. + # Do two passes, one to just change these to + # `$object: dependent.h' and one to simply `dependent.h:'. + sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" + # Some versions of the HPUX 10.20 sed can't process this invocation + # correctly. Breaking it into two sed invocations is a workaround. + sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | + sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +hp2) + # The "hp" stanza above does not work with aCC (C++) and HP's ia64 + # compilers, which have integrated preprocessors. The correct option + # to use with these is +Maked; it writes dependencies to a file named + # 'foo.d', which lands next to the object file, wherever that + # happens to be. + # Much of this is similar to the tru64 case; see comments there. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + if test "$libtool" = yes; then + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir.libs/$base.d + "$@" -Wc,+Maked + else + tmpdepfile1=$dir$base.d + tmpdepfile2=$dir$base.d + "$@" +Maked + fi + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" + # Add `dependent.h:' lines. + sed -ne '2,${ + s/^ *// + s/ \\*$// + s/$/:/ + p + }' "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" "$tmpdepfile2" + ;; + +tru64) + # The Tru64 compiler uses -MD to generate dependencies as a side + # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. + # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put + # dependencies in `foo.d' instead, so we check for that too. + # Subdirectories are respected. + dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` + test "x$dir" = "x$object" && dir= + base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` + + if test "$libtool" = yes; then + # With Tru64 cc, shared objects can also be used to make a + # static library. This mechanism is used in libtool 1.4 series to + # handle both shared and static libraries in a single compilation. + # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. + # + # With libtool 1.5 this exception was removed, and libtool now + # generates 2 separate objects for the 2 libraries. These two + # compilations output dependencies in $dir.libs/$base.o.d and + # in $dir$base.o.d. We have to check for both files, because + # one of the two compilations can be disabled. We should prefer + # $dir$base.o.d over $dir.libs/$base.o.d because the latter is + # automatically cleaned when .libs/ is deleted, while ignoring + # the former would cause a distcleancheck panic. + tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 + tmpdepfile2=$dir$base.o.d # libtool 1.5 + tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 + tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 + "$@" -Wc,-MD + else + tmpdepfile1=$dir$base.o.d + tmpdepfile2=$dir$base.d + tmpdepfile3=$dir$base.d + tmpdepfile4=$dir$base.d + "$@" -MD + fi + + stat=$? + if test $stat -eq 0; then : + else + rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + exit $stat + fi + + for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" + do + test -f "$tmpdepfile" && break + done + if test -f "$tmpdepfile"; then + sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" + # That's a tab and a space in the []. + sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" + else + echo "#dummy" > "$depfile" + fi + rm -f "$tmpdepfile" + ;; + +#nosideeffect) + # This comment above is used by automake to tell side-effect + # dependency tracking mechanisms from slower ones. + +dashmstdout) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout, regardless of -o. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + test -z "$dashmflag" && dashmflag=-M + # Require at least two characters before searching for `:' + # in the target name. This is to cope with DOS-style filenames: + # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. + "$@" $dashmflag | + sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + tr ' ' ' +' < "$tmpdepfile" | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +dashXmstdout) + # This case only exists to satisfy depend.m4. It is never actually + # run, as this mode is specially recognized in the preamble. + exit 1 + ;; + +makedepend) + "$@" || exit $? + # Remove any Libtool call + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + # X makedepend + shift + cleared=no eat=no + for arg + do + case $cleared in + no) + set ""; shift + cleared=yes ;; + esac + if test $eat = yes; then + eat=no + continue + fi + case "$arg" in + -D*|-I*) + set fnord "$@" "$arg"; shift ;; + # Strip any option that makedepend may not understand. Remove + # the object too, otherwise makedepend will parse it as a source file. + -arch) + eat=yes ;; + -*|$object) + ;; + *) + set fnord "$@" "$arg"; shift ;; + esac + done + obj_suffix=`echo "$object" | sed 's/^.*\././'` + touch "$tmpdepfile" + ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" + rm -f "$depfile" + cat < "$tmpdepfile" > "$depfile" + sed '1,2d' "$tmpdepfile" | tr ' ' ' +' | \ +## Some versions of the HPUX 10.20 sed can't process this invocation +## correctly. Breaking it into two sed invocations is a workaround. + sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" "$tmpdepfile".bak + ;; + +cpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + # Remove `-o $object'. + IFS=" " + for arg + do + case $arg in + -o) + shift + ;; + $object) + shift + ;; + *) + set fnord "$@" "$arg" + shift # fnord + shift # $arg + ;; + esac + done + + "$@" -E | + sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ + -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | + sed '$ s: \\$::' > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + cat < "$tmpdepfile" >> "$depfile" + sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvisualcpp) + # Important note: in order to support this mode, a compiler *must* + # always write the preprocessed file to stdout. + "$@" || exit $? + + # Remove the call to Libtool. + if test "$libtool" = yes; then + while test "X$1" != 'X--mode=compile'; do + shift + done + shift + fi + + IFS=" " + for arg + do + case "$arg" in + -o) + shift + ;; + $object) + shift + ;; + "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") + set fnord "$@" + shift + shift + ;; + *) + set fnord "$@" "$arg" + shift + shift + ;; + esac + done + "$@" -E 2>/dev/null | + sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" + rm -f "$depfile" + echo "$object : \\" > "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" + echo " " >> "$depfile" + sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" + rm -f "$tmpdepfile" + ;; + +msvcmsys) + # This case exists only to let depend.m4 do its work. It works by + # looking at the text of this script. This case will never be run, + # since it is checked for above. + exit 1 + ;; + +none) + exec "$@" + ;; + +*) + echo "Unknown depmode $depmode" 1>&2 + exit 1 + ;; +esac + +exit 0 + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/desktop.py b/desktop.py new file mode 100644 index 0000000..49b7bbe --- /dev/null +++ b/desktop.py @@ -0,0 +1,71 @@ +# +# desktop.py - install data for default desktop and run level +# +# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Matt Wilson +# + +import string +from simpleconfig import SimpleConfigFile + +import logging +log = logging.getLogger("anaconda") + +class Desktop (SimpleConfigFile): +# +# This class represents the default desktop to run and the default runlevel +# to start in +# + def setDefaultRunLevel(self, runlevel): + if str(runlevel) != "3" and str(runlevel) != "5": + raise RuntimeError, "Desktop::setDefaultRunLevel() - Must specify runlevel as 3 or 5!" + self.runlevel = runlevel + + def getDefaultRunLevel(self): + return self.runlevel + + def setDefaultDesktop(self, desktop): + self.info["DESKTOP"] = desktop + + def getDefaultDesktop(self): + return self.get("DESKTOP") + + def __init__ (self): + SimpleConfigFile.__init__ (self) + self.runlevel = 3 + + def write (self, instPath): + try: + inittab = open (instPath + '/etc/inittab', 'r') + except IOError: + log.warning ("there is no inittab, bad things will happen!") + return + lines = inittab.readlines () + inittab.close () + inittab = open (instPath + '/etc/inittab', 'w') + for line in lines: + if len (line) > 3 and line[:3] == "id:": + fields = string.split (line, ':') + fields[1] = str (self.runlevel) + line = string.join (fields, ':') + inittab.write (line) + inittab.close () + + if self.getDefaultDesktop(): + f = open(instPath + "/etc/sysconfig/desktop", "w") + f.write(str (self)) + f.close() diff --git a/dispatch.py b/dispatch.py new file mode 100644 index 0000000..5bcaab9 --- /dev/null +++ b/dispatch.py @@ -0,0 +1,251 @@ +# +# dispatch.py: install/upgrade master flow control +# +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Erik Troan +# + +import string +from types import * +from constants import * +from packages import writeKSConfiguration, turnOnFilesystems +from packages import doPostAction +from packages import copyAnacondaLogs +from packages import firstbootConfiguration +from packages import betaNagScreen +from packages import setupTimezone +from packages import setFileCons +from storage import storageInitialize +from storage import storageComplete +from storage.partitioning import doAutoPartition +from bootloader import writeBootloader, bootloaderSetupChoices +from flags import flags +from upgrade import upgradeMountFilesystems +from upgrade import upgradeSwapSuggestion, upgradeMigrateFind +from upgrade import findRootParts, queryUpgradeContinue +from installmethod import doMethodComplete +from kickstart import runPostScripts + +from backend import doPostSelection, doBackendSetup, doBasePackageSelect +from backend import doPreInstall, doPostInstall, doInstall +from backend import writeConfiguration + +from packages import doReIPL + +import logging +log = logging.getLogger("anaconda") + +# These are all of the install steps, in order. Note that upgrade and +# install steps are the same thing! Upgrades skip install steps, while +# installs skip upgrade steps. + +# +# items are one of +# +# ( name ) +# ( name, Function ) +# +# in the second case, the function is called directly from the dispatcher + +# All install steps take the anaconda object as their sole argument. This +# gets passed in when we call the function. +installSteps = [ + ("welcome", ), + ("language", ), + ("keyboard", ), + ("betanag", betaNagScreen, ), + ("filtertype", ), + ("filter", ), + ("storageinit", storageInitialize, ), + ("findrootparts", findRootParts, ), + ("findinstall", ), + ("network", ), + ("timezone", ), + ("accounts", ), + ("setuptime", setupTimezone, ), + ("parttype", ), + ("cleardiskssel", ), + ("autopartitionexecute", doAutoPartition, ), + ("partition", ), + ("upgrademount", upgradeMountFilesystems, ), + ("upgradecontinue", queryUpgradeContinue, ), + ("upgradeswapsuggestion", upgradeSwapSuggestion, ), + ("addswap", ), + ("upgrademigfind", upgradeMigrateFind, ), + ("upgrademigratefs", ), + ("storagedone", storageComplete, ), + ("enablefilesystems", turnOnFilesystems, ), + ("upgbootloader", ), + ("bootloadersetup", bootloaderSetupChoices, ), + ("bootloader", ), + ("reposetup", doBackendSetup, ), + ("tasksel", ), + ("basepkgsel", doBasePackageSelect, ), + ("group-selection", ), + ("postselection", doPostSelection, ), + ("reipl", doReIPL, ), + ("install", ), + ("preinstallconfig", doPreInstall, ), + ("installpackages", doInstall, ), + ("postinstallconfig", doPostInstall, ), + ("writeconfig", writeConfiguration, ), + ("firstboot", firstbootConfiguration, ), + ("instbootloader", writeBootloader, ), + ("writeksconfig", writeKSConfiguration, ), + ("setfilecon", setFileCons, ), + ("copylogs", copyAnacondaLogs, ), + ("methodcomplete", doMethodComplete, ), + ("postscripts", runPostScripts, ), + ("dopostaction", doPostAction, ), + ("complete", ), + ] + +class Dispatcher(object): + + def gotoPrev(self): + self._setDir(DISPATCH_BACK) + self.moveStep() + + def gotoNext(self): + self._setDir(DISPATCH_FORWARD) + self.moveStep() + + def canGoBack(self): + # begin with the step before this one. If all steps are skipped, + # we can not go backwards from this screen + i = self.step - 1 + while i >= self.firstStep: + if not self.stepIsDirect(i) and not self.skipSteps.has_key(installSteps[i][0]): + return True + i = i - 1 + return False + + def setStepList(self, *steps): + # only remove non-permanently skipped steps from our skip list + for step, state in self.skipSteps.items(): + if state == 1: + del self.skipSteps[step] + + stepExists = {} + for step in installSteps: + name = step[0] + if not name in steps: + self.skipSteps[name] = 1 + + stepExists[name] = 1 + + for name in steps: + if not stepExists.has_key(name): + #XXX: hack for yum support + #raise KeyError, ("step %s does not exist" % name) + log.warning("step %s does not exist", name) + + def stepInSkipList(self, step): + if type(step) == type(1): + step = installSteps[step][0] + return self.skipSteps.has_key(step) + + def skipStep(self, stepToSkip, skip = 1, permanent = 0): + for step in installSteps: + name = step[0] + if name == stepToSkip: + if skip: + if permanent: + self.skipSteps[name] = 2 + elif not self.skipSteps.has_key(name): + self.skipSteps[name] = 1 + elif self.skipSteps.has_key(name): + # if marked as permanent then dont change + if self.skipSteps[name] != 2: + del self.skipSteps[name] + return + + #raise KeyError, ("unknown step %s" % stepToSkip) + log.warning("step %s does not exist", name) + + def stepIsDirect(self, step): + """Takes a step number""" + if len(installSteps[step]) == 2: + return True + else: + return False + + def moveStep(self): + if self.step == None: + self.step = self.firstStep + else: + log.info("leaving (%d) step %s" %(self._getDir(), installSteps[self.step][0])) + self.step = self.step + self._getDir() + + if self.step >= len(installSteps): + return None + + while self.step >= self.firstStep and self.step < len(installSteps) \ + and (self.stepInSkipList(self.step) or self.stepIsDirect(self.step)): + + if self.stepIsDirect(self.step) and not self.stepInSkipList(self.step): + (stepName, stepFunc) = installSteps[self.step] + log.info("moving (%d) to step %s" %(self._getDir(), stepName)) + log.debug("%s is a direct step" %(stepName,)) + rc = stepFunc(self.anaconda) + if rc in [DISPATCH_BACK, DISPATCH_FORWARD]: + self._setDir(rc) + log.info("leaving (%d) step %s" %(self._getDir(), stepName)) + # if anything else, leave self.dir alone + + self.step = self.step + self._getDir() + if self.step == len(installSteps): + return None + + if (self.step < 0): + # pick the first step not in the skip list + self.step = 0 + while self.skipSteps.has_key(installSteps[self.step][0]): + self.step = self.step + 1 + elif self.step >= len(installSteps): + self.step = len(installSteps) - 1 + while self.skipSteps.has_key(installSteps[self.step][0]): + self.step = self.step - 1 + log.info("moving (%d) to step %s" %(self._getDir(), installSteps[self.step][0])) + + def currentStep(self): + if self.step == None: + self.gotoNext() + elif self.step >= len(installSteps): + return (None, None) + + stepInfo = installSteps[self.step] + step = stepInfo[0] + + return (step, self.anaconda) + + def __init__(self, anaconda): + self.anaconda = anaconda + self.anaconda.dir = DISPATCH_FORWARD + self.step = None + self.skipSteps = {} + + self.firstStep = 0 + + def _getDir(self): + return self.anaconda.dir + + def _setDir(self, dir): + self.anaconda.dir = dir + + dir = property(_getDir,_setDir) diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 0000000..94b5bfa --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,29 @@ +# docs/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +EXTRA_DIST = install-methods.txt mediacheck.txt anaconda-release-notes.txt \ + lvm_sanity_checks.txt rescue-mode api.cfg making-screenshots \ + threads.txt command-line.txt gettext.txt + +CLEANFILES = api *.xml + +MAINTAINERCLEANFILES = Makefile.in command-line.txt + +command-line.txt: + curl -4 -A "anaconda-build" -o command-line.txt "http://fedoraproject.org/w/index.php?title=Anaconda_Boot_Options&action=raw" diff --git a/docs/Makefile.in b/docs/Makefile.in new file mode 100644 index 0000000..b79fa47 --- /dev/null +++ b/docs/Makefile.in @@ -0,0 +1,460 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# docs/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = docs +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +EXTRA_DIST = install-methods.txt mediacheck.txt anaconda-release-notes.txt \ + lvm_sanity_checks.txt rescue-mode api.cfg making-screenshots \ + threads.txt command-line.txt gettext.txt + +CLEANFILES = api *.xml +MAINTAINERCLEANFILES = Makefile.in command-line.txt +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign docs/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign docs/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-man install-pdf \ + install-pdf-am install-ps install-ps-am install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-generic \ + mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am + + +command-line.txt: + curl -4 -A "anaconda-build" -o command-line.txt "http://fedoraproject.org/w/index.php?title=Anaconda_Boot_Options&action=raw" + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/docs/anaconda-release-notes.txt b/docs/anaconda-release-notes.txt new file mode 100644 index 0000000..167411c --- /dev/null +++ b/docs/anaconda-release-notes.txt @@ -0,0 +1,199 @@ +Anaconda Release Notes +---------------------- + +Last update: Mar 26 2002 + + +Contents + + - Overview + - Install mechanism summary + - Patching/updating installer + - Invocation options + - Troubleshooting + - More info + + +Overview +-------- + + Anaconda is the name of the install program used by Red Hat Linux. +It is python-based with some custom modules written in C. Being +written in a scripting language makes development quicker, and it is +easier to distribute updates in a non-binary form. The anaconda +installer works on a wide variety of Linux-based computing +architectures (ia32, Itanium, Alpha, S/390, PowerPC), and is designed to make +it easy to add platforms. + + The first stage of the installer is a loader program written in C. +This program is responsible for loading all the kernel modules +required to mount the second stage of the installer, which has a +fairly complete Linux runtime environment. The loader is designed to +be small to fit within the constraints of bootable media (floppies are +small by modern standards). Once the loader has mounted the second +stage image, the python installer is started up, and optionally, a +graphical X Windows based environment. + + The loader can install from local media (harddrive or CDROM), or +from a network source, via FTP, HTTP, or NFS. The installer can pull +updates for bugs or features via several sources as well. Finally, the +installer has an auto-install mechanism called kickstart that allows +installs to be scripted. The script can even be pulls from an HTTP +source that can create kickstart configurations dynamically based on +the machine which is requesting the script. This allows endless +possibilities in automating large sets of servers. + + This document's purpose is to go over technical details that will +make using and customizing the installer, and the distribution, much +easier. The anaconda installer arguably is one of the most flexible +and powerful installers available, and hopefully this document will +allow users to take advantage of this potential. + +Install Mechanism Summary +------------------------- + + The document 'install-methods.txt', which is distributed with the +anaconda package, goes over the various ways the installer can be +used. Essentially, the installer needs to access the contents of the +CD images distributed with the product. The installer can either work +with the CD images one at a time, or else from a single directory (the +install 'tree') which has the contents of all the CD images copied +into it. The later is useful if you are customizing the packages in +the distribution. The first stage of the installation process (the +'loader') is responsible for getting the system to the point it can +access the installation source, whether CD image or installation tree based. + + For CDROM-based installs the loader detects the presence of a CD in a +drive in the system with a distribution on it and jumps straight to the +second stage. For other interactive (non-kickstart) installation methods the +user is prompted for the installation source. For kickstart-based installs +the installation source is specified in the kickstart file, and the user is +not required to be present unless necessary information is missing from the +kickstart script. + + For NFS-based installs the installer mounts the directory specified +and looks for a set of ISO images, or an installation tree. If +present then a filesystem image is loopback-mounted and the second +stage installer is run from this image. For FTP and HTTP installs a +smaller (no graphical install options) second stage image is +downloaded into memory, mounted, and the second stage installer run +from this. On harddrive based installs a similar small second stage +image is put into memory and the second stage installer run from it. +This is necessary because for partitioning to suceed the installer can +not have partitions on the harddrive mounted in order for the kernel +to be able to acknowledge partition table changes. + + The bootable installation images are as follow: + + boot.img - boot image containing kernel modules for installing + on most systems from a CDROM or harddrive. + + bootnet.img - boot iamge containing kernel modules for + installing on most systems from a network source. + + pcmcia.img - boot image for installing on PCMCIA based systems + from a local or network source. + Requires pcmciadd.img driver disk. + + The supplemental driver disk images are: + + drvblock.img - block device drivers (for example, SCSI controllers). + + drvnet.img - extra network device drivers. + + oldcdrom.img - device drivers for non-SCSI, non-ATAPI cdroms. + + +Patching The Installer +---------------------- + + At times there are bugfixes or feature enhancements available for +the installer. These are typically replacement python source files +which override the versions distributed with the release. Python has +a mechanism similar to the command line shell search path for +executables. The installer can be updated by putting patched files in +a location earlier in the search path Python uses to find modules. +The 'install-methods.txt' document describes all the various ways the +installer can be told where to find the updating source files. +Typcially this is done from an 'update disk', which is a floppy with +an ext2 filesytem on it. The updated python source files are put in +the main directory of the floppy. The installer is invoked with an +'updates' option from the boot command line, and the user is prompted +to insert the update disk. The files are copied off into a ramdisk +location which Python has been instructed to look at first of modules. +If one is customizing the distribution and the installer then installing +over NFS is the fastest way to work. + + The installer will also use an 'updates.img' file to get patched +source files. This is particularly useful for FTP and HTTP based installs. +When the second stage image is retrieved from the server, a download of +the updates.img is also attempted. This file must be an ext2 filesystem image. +It is mounted loopback, then the contents are copied to the ramdisk location +that Python is setup to look at for module updates. This update image will +also work with all the other installation mechanisms, although the exact +location where it is expected does vary. The 'install-methods.txt' file +has the details on this. + +Invocation Options +------------------ + The documentation file 'command-line.txt' has a quick summary of all the +command line options anaconda accepts. + +Troubleshooting +--------------- + +- Cannot get graphical installer working + + On some video hardware (laptops in particular) the graphical + installer will not work. The installer attempts to run at + 800x600, and some hardware does not work in this mode, or the + output looks poor when scaled to this mode. This can be worked + around by specifying the 'vga=xxx' option on the command line when + booting the installer. Here 'xxx' is the VESA mode number for the + video mode which will work on your hardware, and can be one of the + following: + + + | 640x480 800x600 1024x768 1280x1024 <-Resolution + ----+------------------------------------- + 256 | 769 771 773 775 + 32k | 784 787 790 793 + 64k | 785 788 791 794 + 16M | 786 789 792 795 + ^ + | + Number of colors + + Find the row with the number of colors and the column with the resolution + and then use the number at the intersection. For example, to run at + 1024x768 with 64k colors, use 'vga=791' + + Alternately, you can specify "resolution=", where mode is: + + 640x480 + 800x600 + 1024x768 + 1152x864 + 1280x1024 + 1400x1050 + 1600x1200 + + and the installer will start up in graphical mode in the resolution + specified. + + + +More Info +--------- + + For more info, goto the kickstart-list and anaconda-devel mailing lists +hosted by Red Hat. You can find these at: + + + anaconda-devel-list - + https://listman.redhat.com/mailman/listinfo/anaconda-devel-list + + kickstart-list - + https://listman.redhat.com/mailman/listinfo/kickstart-list + + diff --git a/docs/api.cfg b/docs/api.cfg new file mode 100644 index 0000000..47fa060 --- /dev/null +++ b/docs/api.cfg @@ -0,0 +1,1237 @@ +# Doxyfile 1.4.6 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = "Anaconda API Reference" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. +# This could be handy for archiving the generated documentation or +# if some version control system is used. + +PROJECT_NUMBER = + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) +# base path where the generated documentation will be put. +# If a relative path is entered, it will be relative to the location +# where doxygen was started. If left blank the current directory will be used. + +OUTPUT_DIRECTORY = docs/api + +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create +# 4096 sub-directories (in 2 levels) under the output directory of each output +# format and will distribute the generated files over these directories. +# Enabling this option can be useful when feeding doxygen a huge amount of +# source files, where putting all generated files in the same directory would +# otherwise cause performance problems for the file system. + +CREATE_SUBDIRS = YES + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# The default language is English, other supported languages are: +# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, +# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, +# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, +# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, +# Swedish, and Ukrainian. + +OUTPUT_LANGUAGE = English + +# This tag can be used to specify the encoding used in the generated output. +# The encoding is not always determined by the language that is chosen, +# but also whether or not the output is meant for Windows or non-Windows users. +# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES +# forces the Windows encoding (this is the default for the Windows binary), +# whereas setting the tag to NO uses a Unix-style encoding (the default for +# all platforms other than Windows). + +USE_WINDOWS_ENCODING = NO + +# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will +# include brief member descriptions after the members that are listed in +# the file and class documentation (similar to JavaDoc). +# Set to NO to disable this. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend +# the brief description of a member or function before the detailed description. +# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator +# that is used to form the text in various listings. Each string +# in this list, if found as the leading text of the brief description, will be +# stripped from the text and the result after processing the whole list, is +# used as the annotated text. Otherwise, the brief description is used as-is. +# If left blank, the following values are used ("$name" is automatically +# replaced with the name of the entity): "The $name class" "The $name widget" +# "The $name file" "is" "provides" "specifies" "contains" +# "represents" "a" "an" "the" + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full +# path before files name in the file list and in the header files. If set +# to NO the shortest path that makes the file name unique will be used. + +FULL_PATH_NAMES = NO + +# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag +# can be used to strip a user-defined part of the path. Stripping is +# only done if one of the specified strings matches the left-hand part of +# the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the +# path to strip. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of +# the path mentioned in the documentation of a class, which tells +# the reader which header file to include in order to use a class. +# If left blank only the name of the header file containing the class +# definition is used. Otherwise one should specify the include paths that +# are normally passed to the compiler using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter +# (but less readable) file names. This can be useful is your file systems +# doesn't support long names like on DOS, Mac, or CD-ROM. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen +# will interpret the first line (until the first dot) of a JavaDoc-style +# comment as the brief description. If set to NO, the JavaDoc +# comments will behave just like the Qt-style comments (thus requiring an +# explicit @brief command for a brief description. + +JAVADOC_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen +# treat a multi-line C++ special comment block (i.e. a block of //! or /// +# comments) as a brief description. This used to be the default behaviour. +# The new default is to treat a multi-line C++ comment block as a detailed +# description. Set this tag to YES if you prefer the old behaviour instead. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the DETAILS_AT_TOP tag is set to YES then Doxygen +# will output the detailed description near the top, like JavaDoc. +# If set to NO, the detailed description appears after the member +# documentation. + +DETAILS_AT_TOP = YES + +# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented +# member inherits the documentation from any documented member that it +# re-implements. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce +# a new page for each member. If set to NO, the documentation of a member will +# be part of the file/class/namespace that contains it. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. +# Doxygen uses this value to replace tabs by spaces in code fragments. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that acts +# as commands in the documentation. An alias has the form "name=value". +# For example adding "sideeffect=\par Side Effects:\n" will allow you to +# put the command \sideeffect (or @sideeffect) in the documentation, which +# will result in a user-defined paragraph with heading "Side Effects:". +# You can put \n's in the value part of an alias to insert newlines. + +ALIASES = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C +# sources only. Doxygen will then generate output that is more tailored for C. +# For instance, some of the names that are used will be different. The list +# of all members will be omitted, etc. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java +# sources only. Doxygen will then generate output that is more tailored for Java. +# For instance, namespaces will be presented as packages, qualified scopes +# will look different, etc. + +OPTIMIZE_OUTPUT_JAVA = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want to +# include (a tag file for) the STL sources as input, then you should +# set this tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. +# func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. + +BUILTIN_STL_SUPPORT = NO + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES, then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. + +DISTRIBUTE_GROUP_DOC = NO + +# Set the SUBGROUPING tag to YES (the default) to allow class member groups of +# the same type (for instance a group of public functions) to be put as a +# subgroup of that type (e.g. under the Public Functions section). Set it to +# NO to prevent subgrouping. Alternatively, this can be done per class using +# the \nosubgrouping command. + +SUBGROUPING = YES + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in +# documentation are documented, even if no documentation was available. +# Private class members and static file members will be hidden unless +# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class +# will be included in the documentation. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file +# will be included in the documentation. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) +# defined locally in source files will be included in the documentation. +# If set to NO only classes defined in header files are included. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. When set to YES local +# methods, which are defined in the implementation section but not in +# the interface are included in the documentation. +# If set to NO (the default) only methods in the interface are included. + +EXTRACT_LOCAL_METHODS = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all +# undocumented members of documented classes, files or namespaces. +# If set to NO (the default) these members will be included in the +# various overviews, but no documentation section is generated. +# This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. +# If set to NO (the default) these classes will be included in the various +# overviews. This option has no effect if EXTRACT_ALL is enabled. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all +# friend (class|struct|union) declarations. +# If set to NO (the default) these declarations will be included in the +# documentation. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any +# documentation blocks found inside the body of a function. +# If set to NO (the default) these blocks will be appended to the +# function's detailed documentation block. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation +# that is typed after a \internal command is included. If the tag is set +# to NO (the default) then the documentation will be excluded. +# Set it to YES to include the internal documentation. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate +# file names in lower-case letters. If set to YES upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = NO + +# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen +# will put a list of the files that are included by a file in the documentation +# of that file. + +SHOW_INCLUDE_FILES = YES + +# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] +# is inserted in the documentation for inline members. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen +# will sort the (detailed) documentation of file and class members +# alphabetically by member name. If set to NO the members will appear in +# declaration order. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = YES + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = YES + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from the +# version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = . + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py + +FILE_PATTERNS = *.c *.h *.py + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = CVS docs fonts pixmaps po + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES (the default) +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES (the default) +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = YES + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = NO + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be +# generated containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, +# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are +# probably better off using the HTML help feature. + +GENERATE_TREEVIEW = NO + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will +# generate Latex output. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `latex' will be used as the default path. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. If left blank `latex' will be used as the default command name. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to +# generate index for LaTeX. If left blank `makeindex' will be used as the +# default command name. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact +# LaTeX documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used +# by the printer. Possible values are: a4, a4wide, letter, legal and +# executive. If left blank a4wide will be used. + +PAPER_TYPE = a4wide + +# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX +# packages that should be included in the LaTeX output. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for +# the generated latex document. The header should contain everything until +# the first chapter. If it is left blank doxygen will generate a +# standard header. Notice: only use this tag if you know what you are doing! + +LATEX_HEADER = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated +# is prepared for conversion to pdf (using ps2pdf). The pdf file will +# contain links (just like the HTML output) instead of page references +# This makes the output suitable for online browsing using a pdf viewer. + +PDF_HYPERLINKS = NO + +# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of +# plain latex in the generated Makefile. Set this option to YES to get a +# higher quality PDF documentation. + +USE_PDFLATEX = NO + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. +# command to the generated LaTeX files. This will instruct LaTeX to keep +# running if errors occur, instead of asking the user for help. +# This option is also used when generating formulas in HTML. + +LATEX_BATCHMODE = NO + +# If LATEX_HIDE_INDICES is set to YES then doxygen will not +# include the index chapters (such as File Index, Compound Index, etc.) +# in the output. + +LATEX_HIDE_INDICES = NO + +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output +# The RTF output is optimized for Word 97 and may not look very pretty with +# other RTF readers or editors. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `rtf' will be used as the default path. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES Doxygen generates more compact +# RTF documents. This may be useful for small projects and may help to +# save some trees in general. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated +# will contain hyperlink fields. The RTF file will +# contain links (just like the HTML output) instead of page references. +# This makes the output suitable for online browsing using WORD or other +# programs which support those fields. +# Note: wordpad (write) and others do not support links. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's +# config file, i.e. a series of assignments. You only have to provide +# replacements, missing definitions are set to their default value. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an rtf document. +# Syntax is similar to doxygen's config file. + +RTF_EXTENSIONS_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES (the default) Doxygen will +# generate man pages + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `man' will be used as the default path. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to +# the generated man pages (default is the subroutine's section .3) + +MAN_EXTENSION = .3 + +# If the MAN_LINKS tag is set to YES and Doxygen generates man output, +# then it will generate one additional man file for each entity +# documented in the real man page(s). These additional files +# only source the real man page, but without them the man command +# would be unable to find the correct page. The default is NO. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES Doxygen will +# generate an XML file that captures the structure of +# the code including all documentation. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `xml' will be used as the default path. + +XML_OUTPUT = xml + +# The XML_SCHEMA tag can be used to specify an XML schema, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_SCHEMA = + +# The XML_DTD tag can be used to specify an XML DTD, +# which can be used by a validating XML parser to check the +# syntax of the XML files. + +XML_DTD = + +# If the XML_PROGRAMLISTING tag is set to YES Doxygen will +# dump the program listings (including syntax highlighting +# and cross-referencing information) to the XML output. Note that +# enabling this will significantly increase the size of the XML output. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will +# generate an AutoGen Definitions (see autogen.sf.net) file +# that captures the structure of the code including all +# documentation. Note that this feature is still experimental +# and incomplete at the moment. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES Doxygen will +# generate a Perl module file that captures the structure of +# the code including all documentation. Note that this +# feature is still experimental and incomplete at the +# moment. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES Doxygen will generate +# the necessary Makefile rules, Perl scripts and LaTeX code to be able +# to generate PDF and DVI output from the Perl module output. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be +# nicely formatted so it can be parsed by a human reader. This is useful +# if you want to understand what is going on. On the other hand, if this +# tag is set to NO the size of the Perl module output will be much smaller +# and Perl will parse it just the same. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file +# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. +# This is useful so different doxyrules.make files included by the same +# Makefile don't overwrite each other's variables. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = NO + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = NO + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = NO + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will +# generate a call dependency graph for every global function or class method. +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. + +CALL_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_WIDTH = 1024 + +# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height +# (in pixels) of the graphs generated by dot. If a graph becomes larger than +# this value, doxygen will try to truncate the graph, so that it fits within +# the specified constraint. Beware that most browsers cannot cope with very +# large images. + +MAX_DOT_GRAPH_HEIGHT = 1024 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that a graph may be further truncated if the graph's +# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH +# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), +# the graph is not depth-constrained. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, which results in a white background. +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- + +# The SEARCHENGINE tag specifies whether or not a search engine should be +# used. If set to NO the values of all tags below this one will be ignored. + +SEARCHENGINE = NO diff --git a/docs/command-line.txt b/docs/command-line.txt new file mode 100644 index 0000000..fb8a145 --- /dev/null +++ b/docs/command-line.txt @@ -0,0 +1,9 @@ + + +301 Moved Permanently + +

Moved Permanently

+

The document has moved here.

+
+
Apache/2.2.3 (Red Hat) Server at fedoraproject.org Port 80
+ diff --git a/docs/gettext.txt b/docs/gettext.txt new file mode 100644 index 0000000..1bef9e4 --- /dev/null +++ b/docs/gettext.txt @@ -0,0 +1,56 @@ +gettext, i18n, and the po/ subdirectory +05-Jun-2009 +David Cantrell +--------------------------------------- + +I have attempted to clean up our po/ subdirectory and bring it in to +conformance with GNU gettext tools as well as hook it in to GNU autoconf and +GNU automake. The gettext software has templates set up for this already, +so I'm just using those. + +From time to time, we may have to update our gettext template files and or +expand or reduce the information in the files. How do you know what files +do what? Here's an explanation: + +m4/gettext.m4 +m4/iconv.m4 +m4/lib-ld.m4 +m4/lib-link.m4 +m4/lib-prefix.m4 +m4/nls.m4 +m4/po.m4 +m4/progtest.m4 +po/Makefile.in.in +po/Rules-quot +po/boldquot.sed +po/en@boldquot.header +po/en@quot.header +po/insert-header.sin +po/quot.sed +po/remove-potcdate.sin + + These files are copied in when 'gettextize' is run on the source + project. When we need to update to a newer minimum version of + gettext, these files will be replaced. In general, we should never + need to touch these files. + +po/Makevars + + Should be updated when we update gettext files with a new gettextize + run. A file called po/Makevars.template will appear and we can move + over our values to the new file and commit it. We do not need to + change this file on a regular basis. + +po/POTFILES.in + + This file contains a listing of all source files in the project that + have translatable strings. + +po/LINGUAS + + Space-delimited list of languages available. If a new language is + added, it should be added to this file. + +po/*.po + + Actual translated strings, as maintained by the translation team(s). diff --git a/docs/install-methods.txt b/docs/install-methods.txt new file mode 100644 index 0000000..b630946 --- /dev/null +++ b/docs/install-methods.txt @@ -0,0 +1,137 @@ +11-07-2006 +---------- + +Contents +-------- + + 1) Description of install methods + 2) Extra notes on install methods + +1)Description of Anaconda Install Methods (and ways of updating it) +------------------------------------------------------------------- + +Notes: +------------ + + - "fully exploded tree" - this is a tree which in the root has every + directory with .rpm files from every CD image merged into one directory + with the same name. + (So everything from cd's Client directories goes to Client directory and + likewise for Server, VT, Workstation ... dirs) + + - "ISO" - the ISO image for a CD image. + + - "anaconda updates" - patches for anaconda to fix bugs/etc. + + - "anaconda updates=[http://url|ftp://url]" - patches for anaconda to fix + bugs/etc. that can be downloaded from the specified remote location. + The image is the same format as an updates.img as specified below. + + - all paths without a leading '/' are relative to directory specified + to installer containing install source. + + - 'updates.img' is a ext2 filesystem containing the updated python + sources and modules for anaconda. + +Current Installation Methods: +----------------------------- + +- CDROM / DVD +------------- + + Summary: + This is pretty self-explanatory. Mounts the disc and installs packages, + prompts user to switch discs when the next disc is required. + + Update Options: + - floppy or USB key drive. + - 'updates.img' file in 'images/' directory of disc #1 image. + - remote updates.img downloaded via FTP or HTTP. + +- NFS (from a fully exploded tree) +---------------------------------- + + Summary: + Mounts directory from NFS server. + + Update Options: + - floppy or USB key drive. + - 'updates.img' file in 'images/' directory. + - remote updates.img downloaded via FTP or HTTP. + +- NFS (from a directory of ISOs) +-------------------------------- + + Summary: + Loopback mounts ISO images from NFS server. + + Update Options: + - floppy or USB key drive. + - 'updates.img' file in 'images/' directory. + - remote updates.img downloaded via FTP or HTTP. + +- FTP/HTTP (from a fully exploded tree) +--------------------------------------- + + Summary: + Pulls files from tree via FTP or HTTP. + + Update Options: + - floppy or USB key drive. + - 'updates.img' file in 'images/' directory. + - remote updates.img downloaded via FTP or HTTP. + +- FTP/HTTP (from a directory of loopback-mounted ISOs) +------------------------------------------------------ + + Summary: + Pulls files from tree via FTP or HTTP. Looks in 'disc1/' directory + to contain files from disc #1, 'disc2/' for disc #2, etc. These can be + created on the server by loopback mounting the ISO images into these + directories under the directory made available to ftp. + + Update Options: + - floppy or USB key drive. + - 'updates.img' file in 'images/' directory in ISO image for disc #1. + - remote updates.img downloaded via FTP or HTTP. + +Hard Drive from ISOs +-------------------- + + Summary: + Similar to NFS ISO-based method - loopback mounts ISOs in directory + specified by user. The ISOs must be on an ext2 or vfat partition, + not a logical volume. + + Update Options: + - floppy or USB key drive. + - 'updates.img' file in 'images/' directory of ISO image for CD #1. + - remote updates.img downloaded via FTP or HTTP. + + +2)Extra Notes: +-------------- + + By default NFS, harddrive, and CDROM/DVD-based installs are graphical, +unless the 'text' option is passed on the boot command line. + + FTP and HTTP are text-based, unless 'graphical' is passed on the command +line. For a graphical FTP or HTTP install to occur, one of the following +must be true: + + - the file 'RedHat/base/stage2.img' must exist on the install server. In + this case this file is downloaded int RAM, taking about 64MB to store. + It is recommended to only use this option on machines with more than + 192MB of RAM. + + or: + + - the rescue CD is in the CD drive, in which case the stage2.img file + will be mounted from the rescue CD. The packages will still be + downloaded from the FTP/HTTP server. No additional memory is required + because the second stage of the installer is mounted from the CD. + + You can also specify 'graphical' or 'text' as kickstart directives in +the kickstart config file you use, and this has the same affect as if you +put the directive on the boot command line. + diff --git a/docs/lvm_sanity_checks.txt b/docs/lvm_sanity_checks.txt new file mode 100644 index 0000000..967d17b --- /dev/null +++ b/docs/lvm_sanity_checks.txt @@ -0,0 +1,13 @@ +Updated June 11, 2002 +--------------------- + +Current list of things we check for (good for regression testing): + +- That selected PE is smaller than any PV in VG. +- That size requests for LV are a multiple of the PE. +- That maximum LV for a given PE is bigger than any currently defined LV in VG. +- That if you change the PE, all the reclamped LV will fit in VG. +- That VG_name+LV_name is unique for all VG. +- That mount points are used only once. +- Give warning if more than 10% of a PV is lost because of the PE selected. +- That the bootable partition is not a LV. diff --git a/docs/making-screenshots b/docs/making-screenshots new file mode 100644 index 0000000..1afdede --- /dev/null +++ b/docs/making-screenshots @@ -0,0 +1,15 @@ +How to make screenshots: + + +This will only currently work for graphical installs. + +During a graphical installation, you can now press SHIFT-Print Screen +and a screenshot of the current installation screen will be taken. + +These are stored in the following directory: + + /root/anaconda-screenshots/ + +The screenshots can be accessed once the newly-installed system is rebooted. + + diff --git a/docs/mediacheck.txt b/docs/mediacheck.txt new file mode 100644 index 0000000..d320977 --- /dev/null +++ b/docs/mediacheck.txt @@ -0,0 +1,25 @@ +Mediacheck documentation +October, 2008 + + +Mediacheck is a tool we use to test the integrity of ISO images. The +ISO9660 specification allows for a 512 byte region which is for +application use. We use it to store a checksum of the ISO image. Of +couse putting the checksum into this region will change the checksum +of the final ISO image, so when we verify the checksum later we have +to fill in this 512 region with the original contents before the +implantation. It is set to all ASCII 32 decimal spaces. + +If you have a set of ISO images you can implant the checksum data with +this command: + + implantmd5iso + +NOTE: You cannot re-implant an ISO once its been implanted. + +To check a ISO image you can use this command line: + + checkisomd5 + +The tools are in the isomd5sum package. + diff --git a/docs/rescue-mode b/docs/rescue-mode new file mode 100644 index 0000000..37614d5 --- /dev/null +++ b/docs/rescue-mode @@ -0,0 +1,16 @@ +Rescue mode +----------- + +1/4/1999 Michael Fulbright + +Rescue mode is implemented via a bootable CDROM currently. The user +specifies 'linux rescue' at the syslinux prompt when the CDROM boots. +Then the kernel and an initial ramdisk is loaded. The installer is +run and the user is dropped into bash. + +The upd-instroot script in the anaconda/ source toplevel directory +is responsible for creating the instimage which is used as the +root for the rescue environment. It is located in /mnt/cdrom/Redhat/instimage +when the CDROM is mounted under /mnt/cdrom. + + diff --git a/docs/threads.txt b/docs/threads.txt new file mode 100644 index 0000000..2619818 --- /dev/null +++ b/docs/threads.txt @@ -0,0 +1,106 @@ +Threads in anaconda? No! +David Cantrell + + +INTRODUCTION + + Threads make a lot of people run screaming. That's entirely + understandable because thread concurrency can be a pain. In this short + document, I want to explain why threads are in anaconda and how to work + with them in the code. + +MISCONCEPTIONS + + Just to make sure everyone is on the same page, threads are similar to + processes. The big advantage we get is easier shared data structures. + Threads can communicate over more methods than just signals. But, + multithreaded does not mean that we are taking every operation out to + a separate thread. + +ANACONDA THREADS + + The idea for anaconda threads is to simplify life for things that can + or need to run parallel to other operations. So we will reserve the + use of threads for tasks that fit in to this category well (the logging + system, for instance) and keep the bulk of the installer in the main + thread. + +THREADS AND PYTHON + + Python has a nice model for threading. Threads in Python extend the + threading.Thread class. So an easy way to identify something that will + run or can be run as a thread is seeing a class definition like this: + + class SomeClass(threading.Thread): + + You still have your __init__ method for the constructor, but threads + also have a run() method and a join() method (there are others, but + I will just discuss these). + + The run() method is called when you start the thread. This is where + you want to do the work. Normally this happens in the class + constructor, but in threads we need that separated out to a different + method. + + The join() method is to block execution of other threads. Whatever you + put in the join() method will run and other threads will be blocked + while it runs. Now, this method is only run when you call it explicitly + from another thread, so think of it as similar to waitpid(). + + Python has the thread and threading modules. Use threading as it's + built on top of thread and provides a threading system similar to the + POSIX thread model. + + More information: + http://docs.python.org/lib/module-threading.html + +THREAD NAMES + + Threads have names in Python. They are automatically assigned or you + can specify the name. For anaconda it probably makes more sense to + name our threads since we won't be launching more than one for the + same task. + + The convention I'm using is: NameThr + For example: RelNotesThr + + The name is arbitrary, but we should probably have some sort of + consistency. + +PYGTK AND THREADS + + GTK+ presents the biggest challenge for threads, but it's not + impossible. We will be allowing GTK+ calls from any thread, so we + have to call threads_init() in gui.py as the first thing: + + gtk.gdk.threads_init() + + After this, you can use Python threads as you normally would. When + you call gtk.main(), you need to call it like this: + + gtk.threads_enter() + gtk.main() + gtk.threads_leave() + + Calls to PyGTK methods or fiddling with GTK objects...all that has to + be wrapped in threads_enter/threads_leave calls. The suggested syntax + is: + + gtk.threads_enter() + try: + # do stuff + finally: + gtk.threads_leave() + + Suggested reading: + + http://www.async.com.br/faq/pygtk/index.py?req=show&file=faq20.006.htp + http://developer.gnome.org/doc/API/2.0/gdk/gdk-Threads.html + + +I will try to expand this document as I move through more threading code. +Email me if you have any questions. + +-- +David Cantrell + diff --git a/errors.py b/errors.py new file mode 100644 index 0000000..9733733 --- /dev/null +++ b/errors.py @@ -0,0 +1,159 @@ +# +# errors.py: exception classes used throughout anaconda +# +# Copyright (C) 2002, 2007, 2008 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Peter Jones +# Chris Lumens +# Matt Wilson +# Jeremy Katz +# Mike Fulbright +# + +import string +import os +from constants import lvmErrorOutput + +# Exceptions for use in lvm operations. + +class LvmError(Exception): + """An error occurred with lvm.""" + def __init__(self, command, name=None): + self.command = command + self.name = name + self.log = self.getLvmOutput() + + def getLvmOutput(self): + if not os.access(lvmErrorOutput, os.R_OK): + return "" + f = open(lvmErrorOutput, "r") + lines = reduce(lambda x,y: x + [string.strip(y),], f.readlines(), []) + lines = string.join(reduce(lambda x,y: x + [" %s" % (y,)], \ + lines, []), "\n") + return lines + + def __str__(self): + s = "" + if not self.name is None: + s = " for device %s" % (self.name,) + return "%s failed%s\nLog:\n%s" % (self.command, s, self.log) + +class LVCreateError(LvmError): + def __init__(self, vgname, lvname, size): + self.vgname = vgname + self.lvname = lvname + self.size = size + self.log = self.getLvmOutput() + + def __str__(self): + return "lvcreate of %d Megabyte lv \"%s\" on vg \"%s\" failed\n" \ + "Log:\n%s" % ( \ + self.size, self.lvname, self.vgname, self.log) + +class LVRemoveError(LvmError): + def __init__(self, vgname, lvname): + self.vgname = vgname + self.lvname = lvname + self.log = self.getLvmOutput() + + def __str__(self): + return "lvremove of lv \"%s\" from vg \"%s\" failed\nLog:\n%s" % ( \ + self.lvname, self.vgname, self.log) + +class LVResizeError(LvmError): + def __init__(self, vgname, lvname): + self.vgname = vgname + self.lvname = lvname + self.log = self.getLvmOutput() + + def __str__(self): + return "lvresize of lv \"%s\" from vg \"%s\" failed\nLog:\n%s" % ( \ + self.lvname, self.vgname, self.log) + +class VGCreateError(LvmError): + def __init__(self, vgname, PESize, nodes): + self.vgname = vgname + self.PESize = PESize + self.nodes = nodes + self.log = self.getLvmOutput() + + def __str__(self): + nodes = string.join(self.nodes, ' ') + return "vgcreate failed creating vg \"%s\" (PESize=%dkB) on PVs: %s\n" \ + "Log:\n%s" % ( \ + self.vgname, self.PESize, nodes, self.log) + +class VGRemoveError(LvmError): + def __init__(self, vgname): + self.vgname = vgname + self.log = self.getLvmOutput() + + def __str__(self): + return "vgremove of vg \"%s\" failed\nLog:\n%s" % ( \ + self.vgname, self.log) + +class PVRemoveError(LvmError): + def __init__(self, pvname): + self.pvname = pvname + self.log = self.getLvmOutput() + + def __str__(self): + return "pvremove of pv \"%s\" failed\nLog:\n%s" % ( \ + self.pvname, self.log) + +class PVCreateError(LvmError): + def __init__(self, pvname): + self.pvname = pvname + self.log = self.getLvmOutput() + + def __str__(self): + return "pvcreate of pv \"%s\" failed\nLog:\n%s" % ( \ + self.pvname, self.log) + +# Exceptions for use in partitioning. + +class PartitioningError(Exception): + """A critical error which must be resolved to continue the installation.""" + def __init__(self, message=""): + self.message = str(message) + + def __str__ (self): + return self.message + +class PartitioningWarning(Exception): + """A warning which may be ignored and still complete the installation.""" + def __init__(self, message=""): + self.message = str(message) + + def __str__ (self): + return self.message + +class LabelError(Exception): + """The device could not be labeled.""" + def __init__(self, message=""): + self.message = str(message) + + def __str__(self): + return self.message + +# Exceptions for use in package selection. + +class NoSuchGroup(Exception): + def __init__ (self, value): + self.value = value + + def __str__ (self): + return self.value diff --git a/exception.py b/exception.py new file mode 100644 index 0000000..65d7008 --- /dev/null +++ b/exception.py @@ -0,0 +1,133 @@ +# +# exception.py - general exception formatting and saving +# +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Matt Wilson +# Erik Troan +# Chris Lumens +# +from meh.handler import * +from meh.dump import * +import isys +import sys +import os +import shutil +import signal +from flags import flags +import kickstart + +import logging +log = logging.getLogger("anaconda") + +class AnacondaExceptionHandler(ExceptionHandler): + def postWriteHook(self, (ty, value, tb), anaconda): + # See if /mnt/sysimage is present and put exception there as well + if os.access("/mnt/sysimage/root", os.X_OK): + try: + dest = "/mnt/sysimage/root/%s" % os.path.basename(self.exnFile) + shutil.copyfile(self.exnFile, dest) + except: + log.error("Failed to copy %s to /mnt/sysimage/root" % self.exnFile) + pass + + # run kickstart traceback scripts (if necessary) + try: + if anaconda.ksdata: + kickstart.runTracebackScripts(anaconda) + except: + pass + + def runDebug(self, (ty, value, tb)): + # vtActivate does not work on certain ppc64 machines, so just skip + # that and continue with the rest of the debugger setup. + try: + isys.vtActivate(1) + except SystemError: + pass + + self.intf.__del__ () + + pidfl = "/tmp/vncshell.pid" + if os.path.exists(pidfl) and os.path.isfile(pidfl): + pf = open(pidfl, "r") + for pid in pf.readlines(): + if not int(pid) == os.getpid(): + os.kill(int(pid), signal.SIGKILL) + pf.close() + + os.open("/dev/console", os.O_RDWR) # reclaim stdin + os.dup2(0, 1) # reclaim stdout + os.dup2(0, 2) # reclaim stderr + # ^ + # | + # +------ dup2 is magic, I tells ya! + + # bring back the echo + import termios + si = sys.stdin.fileno() + attr = termios.tcgetattr(si) + attr[3] = attr[3] & termios.ECHO + termios.tcsetattr(si, termios.TCSADRAIN, attr) + + print("\nEntering debugger...") + import pdb + pdb.post_mortem (tb) + os.kill(os.getpid(), signal.SIGKILL) + +def initExceptionHandling(anaconda): + fileList = [ "/tmp/anaconda.log", "/tmp/lvmout", "/tmp/resize.out", + "/tmp/program.log", "/tmp/storage.log", "/tmp/yum.log", + anaconda.rootPath + "/root/install.log", + anaconda.rootPath + "/root/upgrade.log", "/proc/cmdline" ] + if flags.livecdInstall: + fileList.extend(["/var/log/dmesg"]) + else: + fileList.extend(["/tmp/syslog"]) + + conf = Config(programName="anaconda", + programVersion=isys.getAnacondaVersion(), + bugFiler=anaconda.instClass.bugFiler, + attrSkipList=[ "backend.ayum", + "backend.dlpkgs", + "accounts", + "bootloader.password", + "comps", + "dispatch", + "hdList", + "ksdata", + "instLanguage.font", + "instLanguage.kbd", + "instLanguage.info", + "instLanguage.localeInfo", + "instLanguage.nativeLangNames", + "instLanguage.tz", + "keyboard._mods._modelDict", + "keyboard.modelDict", + "storage.encryptionPassphrase", + "users.rootPassword", + "tmpData", + "intf.icw.buff", + "intf.icw.currentWindow.storage.encryptionPassphrase", + "intf.icw.stockButtons", + ], + localSkipList=[ "passphrase", "password" ], + fileList=fileList) + handler = AnacondaExceptionHandler(conf, anaconda.intf, ReverseExceptionDump) + handler.install(anaconda) + + return conf diff --git a/firewall.py b/firewall.py new file mode 100644 index 0000000..750d755 --- /dev/null +++ b/firewall.py @@ -0,0 +1,93 @@ +# +# firewall.py - firewall install data and installation +# +# Copyright (C) 2004 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Bill Nottingham +# Jeremy Katz +# + +import iutil +import os.path +from flags import flags +from constants import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") + +class Firewall: + def __init__ (self): + self.enabled = 1 + self.trustdevs = [] + self.portlist = [] + self.servicelist = [] + + def writeKS(self, f): + f.write("firewall") + + if self.enabled: + for arg in self.getArgList(): + f.write(" " + arg) + else: + f.write(" --disabled") + + f.write("\n") + + def getArgList(self): + args = [] + + if not self.enabled: + args.append("--disabled") + return args + + if not "ssh" in self.servicelist and not "22:tcp" in self.portlist: + args += ["--service=ssh"] + + for dev in self.trustdevs: + args = args + [ "--trust=%s" %(dev,) ] + + for port in self.portlist: + args = args + [ "--port=%s" %(port,) ] + + for service in self.servicelist: + args = args + [ "--service=%s" % (service,) ] + + return args + + def write (self, instPath): + args = [ "--quiet", "--nostart", "-f" ] + self.getArgList() + + try: + if not os.path.exists("%s/etc/sysconfig/iptables" %(instPath,)): + iutil.execWithRedirect("/usr/sbin/lokkit", args, + root=instPath, stdout="/dev/null", + stderr="/dev/null") + else: + log.error("would have run %s", args) + except RuntimeError, msg: + log.error ("lokkit run failed: %s", msg) + except OSError as e: + log.error ("lokkit run failed: %s", e.strerror) + else: + f = open(instPath + + '/etc/sysconfig/system-config-firewall', 'w') + f.write("# system-config-firewall config written out by anaconda\n\n") + for arg in args[3:]: + f.write("%s\n" %(arg,)) + f.close() diff --git a/flags.py b/flags.py new file mode 100644 index 0000000..05e84e9 --- /dev/null +++ b/flags.py @@ -0,0 +1,113 @@ +# +# flags.py: global anaconda flags +# +# Copyright (C) 2001 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os +import shlex +from constants import * + +# A lot of effort, but it only allows a limited set of flags to be referenced +class Flags: + + def __getattr__(self, attr): + if self.__dict__['flags'].has_key(attr): + return self.__dict__['flags'][attr] + + raise AttributeError, attr + + def __setattr__(self, attr, val): + if self.__dict__['flags'].has_key(attr): + self.__dict__['flags'][attr] = val + else: + raise AttributeError, attr + + def get(self, attr, val=None): + if self.__dict__['flags'].has_key(attr): + return self.__dict__['flags'][attr] + else: + return val + + def createCmdlineDict(self): + cmdlineDict = {} + cmdline = open("/proc/cmdline", "r").read().strip() + + # if the BOOT_IMAGE contains a space, pxelinux will strip one of the + # quotes leaving one at the end that shlex doesn't know what to do + # with + if cmdline.find("BOOT_IMAGE=") and cmdline.endswith('"'): + cmdline = cmdline.replace("BOOT_IMAGE=", "BOOT_IMAGE=\"") + + lst = shlex.split(cmdline) + + for i in lst: + try: + (key, val) = i.split("=", 1) + except: + key = i + val = None + + cmdlineDict[key] = val + + return cmdlineDict + + def __init__(self): + self.__dict__['flags'] = {} + self.__dict__['flags']['test'] = 0 + self.__dict__['flags']['livecdInstall'] = 0 + self.__dict__['flags']['dlabel'] = 0 + self.__dict__['flags']['ibft'] = 1 + self.__dict__['flags']['iscsi'] = 0 + self.__dict__['flags']['serial'] = 0 + self.__dict__['flags']['autostep'] = 0 + self.__dict__['flags']['autoscreenshot'] = 0 + self.__dict__['flags']['usevnc'] = 0 + self.__dict__['flags']['vncquestion'] = True + self.__dict__['flags']['mpath'] = 1 + self.__dict__['flags']['dmraid'] = 1 + self.__dict__['flags']['selinux'] = SELINUX_DEFAULT + self.__dict__['flags']['debug'] = 0 + self.__dict__['flags']['targetarch'] = None + self.__dict__['flags']['cmdline'] = self.createCmdlineDict() + self.__dict__['flags']['useIPv4'] = True + self.__dict__['flags']['useIPv6'] = True + self.__dict__['flags']['sshd'] = 1 + # for non-physical consoles like some ppc and sgi altix, + # we need to preserve the console device and not try to + # do things like bogl on them. this preserves what that + # device is + self.__dict__['flags']['virtpconsole'] = None + + for x in ['selinux','sshd']: + if self.__dict__['flags']['cmdline'].has_key(x): + if self.__dict__['flags']['cmdline'][x]: + self.__dict__['flags'][x] = 1 + else: + self.__dict__['flags'][x] = 0 + + if self.__dict__['flags']['cmdline'].has_key("debug"): + self.__dict__['flags']['debug'] = self.__dict__['flags']['cmdline']['debug'] + + if self.__dict__['flags']['cmdline'].has_key("rpmarch"): + self.__dict__['flags']['targetarch'] = self.__dict__['flags']['cmdline']['rpmarch'] + + if not os.path.exists("/selinux/load"): + self.__dict__['flags']['selinux'] = 0 + + +global flags +flags = Flags() diff --git a/fonts/Makefile.am b/fonts/Makefile.am new file mode 100644 index 0000000..42cae2a --- /dev/null +++ b/fonts/Makefile.am @@ -0,0 +1,39 @@ +# fonts/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +if IS_FONT_ARCH +fontsdir = $(libdir)/$(PACKAGE_NAME)-runtime +dist_fonts_DATA = screenfont-$(ARCH).gz +endif + +EXTRA_DIST = screenfont-*.gz updfonts + +MAINTAINERCLEANFILES = Makefile.in + +i386: + ./updfonts i386 + +alpha: + ./updfonts alpha + +sparc: + ./updfonts sparc + +ia64: + ./updfonts ia64 diff --git a/fonts/Makefile.in b/fonts/Makefile.in new file mode 100644 index 0000000..53edbd6 --- /dev/null +++ b/fonts/Makefile.in @@ -0,0 +1,516 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# fonts/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = fonts +DIST_COMMON = $(am__dist_fonts_DATA_DIST) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__dist_fonts_DATA_DIST = screenfont-$(ARCH).gz +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(fontsdir)" +DATA = $(dist_fonts_DATA) +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +@IS_FONT_ARCH_TRUE@fontsdir = $(libdir)/$(PACKAGE_NAME)-runtime +@IS_FONT_ARCH_TRUE@dist_fonts_DATA = screenfont-$(ARCH).gz +EXTRA_DIST = screenfont-*.gz updfonts +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign fonts/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign fonts/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-dist_fontsDATA: $(dist_fonts_DATA) + @$(NORMAL_INSTALL) + test -z "$(fontsdir)" || $(MKDIR_P) "$(DESTDIR)$(fontsdir)" + @list='$(dist_fonts_DATA)'; test -n "$(fontsdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fontsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(fontsdir)" || exit $$?; \ + done + +uninstall-dist_fontsDATA: + @$(NORMAL_UNINSTALL) + @list='$(dist_fonts_DATA)'; test -n "$(fontsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + echo " ( cd '$(DESTDIR)$(fontsdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(fontsdir)" && rm -f $$files +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(DATA) +installdirs: + for dir in "$(DESTDIR)$(fontsdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-dist_fontsDATA + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-dist_fontsDATA + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dist_fontsDATA \ + install-dvi install-dvi-am install-exec install-exec-am \ + install-html install-html-am install-info install-info-am \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-dist_fontsDATA + + +i386: + ./updfonts i386 + +alpha: + ./updfonts alpha + +sparc: + ./updfonts sparc + +ia64: + ./updfonts ia64 + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/fonts/screenfont-alpha.gz b/fonts/screenfont-alpha.gz new file mode 100644 index 0000000..b12001b Binary files /dev/null and b/fonts/screenfont-alpha.gz differ diff --git a/fonts/screenfont-i386.gz b/fonts/screenfont-i386.gz new file mode 100644 index 0000000..fa88be1 Binary files /dev/null and b/fonts/screenfont-i386.gz differ diff --git a/fonts/screenfont-ia64.gz b/fonts/screenfont-ia64.gz new file mode 100644 index 0000000..ef0569c Binary files /dev/null and b/fonts/screenfont-ia64.gz differ diff --git a/fonts/screenfont-ppc.gz b/fonts/screenfont-ppc.gz new file mode 100644 index 0000000..036064c Binary files /dev/null and b/fonts/screenfont-ppc.gz differ diff --git a/fonts/screenfont-sparc.gz b/fonts/screenfont-sparc.gz new file mode 100644 index 0000000..0c38d3b Binary files /dev/null and b/fonts/screenfont-sparc.gz differ diff --git a/fonts/screenfont-x86_64.gz b/fonts/screenfont-x86_64.gz new file mode 100644 index 0000000..fcaee50 Binary files /dev/null and b/fonts/screenfont-x86_64.gz differ diff --git a/fonts/updfonts b/fonts/updfonts new file mode 100755 index 0000000..10b74c1 --- /dev/null +++ b/fonts/updfonts @@ -0,0 +1,11 @@ +#!/bin/sh + +ARCH=$1 +if [ -z "$ARCH" ]; then + echo "usage: $0 " + exit 1 +fi + +setfont latarcyrheb-sun16 +../utils/snarffont > screenfont-$ARCH +gzip -9 -f screenfont-$ARCH diff --git a/gptsync/Makefile.am b/gptsync/Makefile.am new file mode 100644 index 0000000..7f66432 --- /dev/null +++ b/gptsync/Makefile.am @@ -0,0 +1,35 @@ +# gptsync/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +COMMON_SRCS = lib.c os_unix.c +noinst_HEADERS = gptsync.h syslinux_mbr.h + +if IS_GPTSYNC_ARCH +sbin_PROGRAMS = gptsync showpart + +gptsync_CFLAGS = -DPROGNAME=gptsync +gptsync_SOURCES = gptsync.c $(COMMON_SRCS) + +showpart_CFLAGS = -DPROGNAME=showpart +showpart_SOURCES = showpart.c $(COMMON_SRCS) +endif + +EXTRA_DIST = README + +MAINTAINERCLEANFILES = Makefile.in diff --git a/gptsync/Makefile.in b/gptsync/Makefile.in new file mode 100644 index 0000000..0ecb10f --- /dev/null +++ b/gptsync/Makefile.in @@ -0,0 +1,751 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# gptsync/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@IS_GPTSYNC_ARCH_TRUE@sbin_PROGRAMS = gptsync$(EXEEXT) \ +@IS_GPTSYNC_ARCH_TRUE@ showpart$(EXEEXT) +subdir = gptsync +DIST_COMMON = README $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__installdirs = "$(DESTDIR)$(sbindir)" +PROGRAMS = $(sbin_PROGRAMS) +am__gptsync_SOURCES_DIST = gptsync.c lib.c os_unix.c +am__objects_1 = gptsync-lib.$(OBJEXT) gptsync-os_unix.$(OBJEXT) +@IS_GPTSYNC_ARCH_TRUE@am_gptsync_OBJECTS = gptsync-gptsync.$(OBJEXT) \ +@IS_GPTSYNC_ARCH_TRUE@ $(am__objects_1) +gptsync_OBJECTS = $(am_gptsync_OBJECTS) +gptsync_LDADD = $(LDADD) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +gptsync_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(gptsync_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +am__showpart_SOURCES_DIST = showpart.c lib.c os_unix.c +am__objects_2 = showpart-lib.$(OBJEXT) showpart-os_unix.$(OBJEXT) +@IS_GPTSYNC_ARCH_TRUE@am_showpart_OBJECTS = \ +@IS_GPTSYNC_ARCH_TRUE@ showpart-showpart.$(OBJEXT) \ +@IS_GPTSYNC_ARCH_TRUE@ $(am__objects_2) +showpart_OBJECTS = $(am_showpart_OBJECTS) +showpart_LDADD = $(LDADD) +showpart_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(showpart_CFLAGS) \ + $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(gptsync_SOURCES) $(showpart_SOURCES) +DIST_SOURCES = $(am__gptsync_SOURCES_DIST) \ + $(am__showpart_SOURCES_DIST) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +COMMON_SRCS = lib.c os_unix.c +noinst_HEADERS = gptsync.h syslinux_mbr.h +@IS_GPTSYNC_ARCH_TRUE@gptsync_CFLAGS = -DPROGNAME=gptsync +@IS_GPTSYNC_ARCH_TRUE@gptsync_SOURCES = gptsync.c $(COMMON_SRCS) +@IS_GPTSYNC_ARCH_TRUE@showpart_CFLAGS = -DPROGNAME=showpart +@IS_GPTSYNC_ARCH_TRUE@showpart_SOURCES = showpart.c $(COMMON_SRCS) +EXTRA_DIST = README +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign gptsync/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign gptsync/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): +install-sbinPROGRAMS: $(sbin_PROGRAMS) + @$(NORMAL_INSTALL) + test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)" + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p || test -f $$p1; \ + then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(sbindir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(sbindir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-sbinPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(sbin_PROGRAMS)'; test -n "$(sbindir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(sbindir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(sbindir)" && rm -f $$files + +clean-sbinPROGRAMS: + @list='$(sbin_PROGRAMS)'; test -n "$$list" || exit 0; \ + echo " rm -f" $$list; \ + rm -f $$list || exit $$?; \ + test -n "$(EXEEXT)" || exit 0; \ + list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ + echo " rm -f" $$list; \ + rm -f $$list +gptsync$(EXEEXT): $(gptsync_OBJECTS) $(gptsync_DEPENDENCIES) + @rm -f gptsync$(EXEEXT) + $(AM_V_CCLD)$(gptsync_LINK) $(gptsync_OBJECTS) $(gptsync_LDADD) $(LIBS) +showpart$(EXEEXT): $(showpart_OBJECTS) $(showpart_DEPENDENCIES) + @rm -f showpart$(EXEEXT) + $(AM_V_CCLD)$(showpart_LINK) $(showpart_OBJECTS) $(showpart_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gptsync-gptsync.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gptsync-lib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gptsync-os_unix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showpart-lib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showpart-os_unix.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showpart-showpart.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +gptsync-gptsync.o: gptsync.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -MT gptsync-gptsync.o -MD -MP -MF $(DEPDIR)/gptsync-gptsync.Tpo -c -o gptsync-gptsync.o `test -f 'gptsync.c' || echo '$(srcdir)/'`gptsync.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gptsync-gptsync.Tpo $(DEPDIR)/gptsync-gptsync.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gptsync.c' object='gptsync-gptsync.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -c -o gptsync-gptsync.o `test -f 'gptsync.c' || echo '$(srcdir)/'`gptsync.c + +gptsync-gptsync.obj: gptsync.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -MT gptsync-gptsync.obj -MD -MP -MF $(DEPDIR)/gptsync-gptsync.Tpo -c -o gptsync-gptsync.obj `if test -f 'gptsync.c'; then $(CYGPATH_W) 'gptsync.c'; else $(CYGPATH_W) '$(srcdir)/gptsync.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gptsync-gptsync.Tpo $(DEPDIR)/gptsync-gptsync.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gptsync.c' object='gptsync-gptsync.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -c -o gptsync-gptsync.obj `if test -f 'gptsync.c'; then $(CYGPATH_W) 'gptsync.c'; else $(CYGPATH_W) '$(srcdir)/gptsync.c'; fi` + +gptsync-lib.o: lib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -MT gptsync-lib.o -MD -MP -MF $(DEPDIR)/gptsync-lib.Tpo -c -o gptsync-lib.o `test -f 'lib.c' || echo '$(srcdir)/'`lib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gptsync-lib.Tpo $(DEPDIR)/gptsync-lib.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib.c' object='gptsync-lib.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -c -o gptsync-lib.o `test -f 'lib.c' || echo '$(srcdir)/'`lib.c + +gptsync-lib.obj: lib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -MT gptsync-lib.obj -MD -MP -MF $(DEPDIR)/gptsync-lib.Tpo -c -o gptsync-lib.obj `if test -f 'lib.c'; then $(CYGPATH_W) 'lib.c'; else $(CYGPATH_W) '$(srcdir)/lib.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gptsync-lib.Tpo $(DEPDIR)/gptsync-lib.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib.c' object='gptsync-lib.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -c -o gptsync-lib.obj `if test -f 'lib.c'; then $(CYGPATH_W) 'lib.c'; else $(CYGPATH_W) '$(srcdir)/lib.c'; fi` + +gptsync-os_unix.o: os_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -MT gptsync-os_unix.o -MD -MP -MF $(DEPDIR)/gptsync-os_unix.Tpo -c -o gptsync-os_unix.o `test -f 'os_unix.c' || echo '$(srcdir)/'`os_unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gptsync-os_unix.Tpo $(DEPDIR)/gptsync-os_unix.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os_unix.c' object='gptsync-os_unix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -c -o gptsync-os_unix.o `test -f 'os_unix.c' || echo '$(srcdir)/'`os_unix.c + +gptsync-os_unix.obj: os_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -MT gptsync-os_unix.obj -MD -MP -MF $(DEPDIR)/gptsync-os_unix.Tpo -c -o gptsync-os_unix.obj `if test -f 'os_unix.c'; then $(CYGPATH_W) 'os_unix.c'; else $(CYGPATH_W) '$(srcdir)/os_unix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gptsync-os_unix.Tpo $(DEPDIR)/gptsync-os_unix.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os_unix.c' object='gptsync-os_unix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(gptsync_CFLAGS) $(CFLAGS) -c -o gptsync-os_unix.obj `if test -f 'os_unix.c'; then $(CYGPATH_W) 'os_unix.c'; else $(CYGPATH_W) '$(srcdir)/os_unix.c'; fi` + +showpart-showpart.o: showpart.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -MT showpart-showpart.o -MD -MP -MF $(DEPDIR)/showpart-showpart.Tpo -c -o showpart-showpart.o `test -f 'showpart.c' || echo '$(srcdir)/'`showpart.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/showpart-showpart.Tpo $(DEPDIR)/showpart-showpart.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='showpart.c' object='showpart-showpart.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -c -o showpart-showpart.o `test -f 'showpart.c' || echo '$(srcdir)/'`showpart.c + +showpart-showpart.obj: showpart.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -MT showpart-showpart.obj -MD -MP -MF $(DEPDIR)/showpart-showpart.Tpo -c -o showpart-showpart.obj `if test -f 'showpart.c'; then $(CYGPATH_W) 'showpart.c'; else $(CYGPATH_W) '$(srcdir)/showpart.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/showpart-showpart.Tpo $(DEPDIR)/showpart-showpart.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='showpart.c' object='showpart-showpart.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -c -o showpart-showpart.obj `if test -f 'showpart.c'; then $(CYGPATH_W) 'showpart.c'; else $(CYGPATH_W) '$(srcdir)/showpart.c'; fi` + +showpart-lib.o: lib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -MT showpart-lib.o -MD -MP -MF $(DEPDIR)/showpart-lib.Tpo -c -o showpart-lib.o `test -f 'lib.c' || echo '$(srcdir)/'`lib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/showpart-lib.Tpo $(DEPDIR)/showpart-lib.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib.c' object='showpart-lib.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -c -o showpart-lib.o `test -f 'lib.c' || echo '$(srcdir)/'`lib.c + +showpart-lib.obj: lib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -MT showpart-lib.obj -MD -MP -MF $(DEPDIR)/showpart-lib.Tpo -c -o showpart-lib.obj `if test -f 'lib.c'; then $(CYGPATH_W) 'lib.c'; else $(CYGPATH_W) '$(srcdir)/lib.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/showpart-lib.Tpo $(DEPDIR)/showpart-lib.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lib.c' object='showpart-lib.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -c -o showpart-lib.obj `if test -f 'lib.c'; then $(CYGPATH_W) 'lib.c'; else $(CYGPATH_W) '$(srcdir)/lib.c'; fi` + +showpart-os_unix.o: os_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -MT showpart-os_unix.o -MD -MP -MF $(DEPDIR)/showpart-os_unix.Tpo -c -o showpart-os_unix.o `test -f 'os_unix.c' || echo '$(srcdir)/'`os_unix.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/showpart-os_unix.Tpo $(DEPDIR)/showpart-os_unix.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os_unix.c' object='showpart-os_unix.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -c -o showpart-os_unix.o `test -f 'os_unix.c' || echo '$(srcdir)/'`os_unix.c + +showpart-os_unix.obj: os_unix.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -MT showpart-os_unix.obj -MD -MP -MF $(DEPDIR)/showpart-os_unix.Tpo -c -o showpart-os_unix.obj `if test -f 'os_unix.c'; then $(CYGPATH_W) 'os_unix.c'; else $(CYGPATH_W) '$(srcdir)/os_unix.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/showpart-os_unix.Tpo $(DEPDIR)/showpart-os_unix.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='os_unix.c' object='showpart-os_unix.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(showpart_CFLAGS) $(CFLAGS) -c -o showpart-os_unix.obj `if test -f 'os_unix.c'; then $(CYGPATH_W) 'os_unix.c'; else $(CYGPATH_W) '$(srcdir)/os_unix.c'; fi` + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(PROGRAMS) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(sbindir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-sbinPROGRAMS \ + mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-sbinPROGRAMS + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-sbinPROGRAMS + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-sbinPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-libtool \ + distclean-tags distdir dvi dvi-am html html-am info info-am \ + install install-am install-data install-data-am install-dvi \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-sbinPROGRAMS install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-sbinPROGRAMS + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/gptsync/README b/gptsync/README new file mode 100644 index 0000000..cb306bd --- /dev/null +++ b/gptsync/README @@ -0,0 +1,41 @@ +gptsync is from refit (refit.sf.net). It has been modified to +1) Not prompt if you want to copy +2) Default to Linux native (0x83) instead of fat32 partition id + +The original license follows. + + + rEFIt License +=============== + +Copyright (c) 2006-2007 Christoph Pfisterer +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + * 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. + + * Neither the name of Christoph Pfisterer nor the names of the + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/gptsync/gptsync.c b/gptsync/gptsync.c new file mode 100644 index 0000000..3ad26bf --- /dev/null +++ b/gptsync/gptsync.c @@ -0,0 +1,470 @@ +/* + * gptsync/gptsync.c + * Platform-independent code for syncing GPT and MBR + * + * Copyright (c) 2006-2007 Christoph Pfisterer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Christoph Pfisterer nor the names of the + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gptsync.h" + +#include "syslinux_mbr.h" + +// +// MBR functions +// + +static UINTN check_mbr(VOID) +{ + UINTN i, k; + + // check each entry + for (i = 0; i < mbr_part_count; i++) { + // check for overlap + for (k = 0; k < mbr_part_count; k++) { + if (k != i && !(mbr_parts[i].start_lba > mbr_parts[k].end_lba || mbr_parts[k].start_lba > mbr_parts[i].end_lba)) { + Print(L"Status: MBR partition table is invalid, partitions overlap.\n"); + return 1; + } + } + + // check for extended partitions + if (mbr_parts[i].mbr_type == 0x05 || mbr_parts[i].mbr_type == 0x0f || mbr_parts[i].mbr_type == 0x85) { + Print(L"Status: Extended partition found in MBR table, will not touch this disk.\n", + gpt_parts[i].gpt_parttype->name); + return 1; + } + } + + return 0; +} + +static UINTN write_mbr(VOID) +{ + UINTN status; + UINTN i, k; + UINT8 active; + UINT64 lba; + MBR_PARTITION_INFO *table; + BOOLEAN have_bootcode; + + Print(L"\nWriting new MBR...\n"); + + // read MBR data + status = read_sector(0, sector); + if (status != 0) + return status; + + // write partition table + *((UINT16 *)(sector + 510)) = 0xaa55; + + table = (MBR_PARTITION_INFO *)(sector + 446); + active = 0x80; + for (i = 0; i < 4; i++) { + for (k = 0; k < new_mbr_part_count; k++) { + if (new_mbr_parts[k].index == i) + break; + } + if (k >= new_mbr_part_count) { + // unused entry + table[i].flags = 0; + table[i].start_chs[0] = 0; + table[i].start_chs[1] = 0; + table[i].start_chs[2] = 0; + table[i].type = 0; + table[i].end_chs[0] = 0; + table[i].end_chs[1] = 0; + table[i].end_chs[2] = 0; + table[i].start_lba = 0; + table[i].size = 0; + } else { + if (new_mbr_parts[k].active) { + table[i].flags = active; + active = 0x00; + } else + table[i].flags = 0x00; + table[i].start_chs[0] = 0xfe; + table[i].start_chs[1] = 0xff; + table[i].start_chs[2] = 0xff; + table[i].type = new_mbr_parts[k].mbr_type; + table[i].end_chs[0] = 0xfe; + table[i].end_chs[1] = 0xff; + table[i].end_chs[2] = 0xff; + + lba = new_mbr_parts[k].start_lba; + if (lba > 0xffffffffULL) { + Print(L"Warning: Partition %d starts beyond 2 TiB limit\n", i+1); + lba = 0xffffffffULL; + } + table[i].start_lba = (UINT32)lba; + + lba = new_mbr_parts[k].end_lba + 1 - new_mbr_parts[k].start_lba; + if (lba > 0xffffffffULL) { + Print(L"Warning: Partition %d extends beyond 2 TiB limit\n", i+1); + lba = 0xffffffffULL; + } + table[i].size = (UINT32)lba; + } + } + + // add boot code if necessary + have_bootcode = FALSE; + for (i = 0; i < MBR_BOOTCODE_SIZE; i++) { + if (sector[i] != 0) { + have_bootcode = TRUE; + break; + } + } + if (!have_bootcode) { + // no boot code found in the MBR, add the syslinux MBR code + SetMem(sector, 0, MBR_BOOTCODE_SIZE); + CopyMem(sector, syslinux_mbr, SYSLINUX_MBR_SIZE); + } + + // write MBR data + status = write_sector(0, sector); + if (status != 0) + return status; + + Print(L"MBR updated successfully!\n"); + + return 0; +} + +// +// GPT functions +// + +static UINTN check_gpt(VOID) +{ + UINTN i, k; + BOOLEAN found_data_parts; + + if (gpt_part_count == 0) { + Print(L"Status: No GPT partition table, no need to sync.\n"); + return 1; + } + + // check each entry + found_data_parts = FALSE; + for (i = 0; i < gpt_part_count; i++) { + // check sanity + if (gpt_parts[i].end_lba < gpt_parts[i].start_lba) { + Print(L"Status: GPT partition table is invalid.\n"); + return 1; + } + // check for overlap + for (k = 0; k < gpt_part_count; k++) { + if (k != i && !(gpt_parts[i].start_lba > gpt_parts[k].end_lba || gpt_parts[k].start_lba > gpt_parts[i].end_lba)) { + Print(L"Status: GPT partition table is invalid, partitions overlap.\n"); + return 1; + } + } + + // check for partitions kind + if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_FATAL) { + Print(L"Status: GPT partition of type '%s' found, will not touch this disk.\n", + gpt_parts[i].gpt_parttype->name); + return 1; + } + if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_DATA || + gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA) + found_data_parts = TRUE; + } + + if (!found_data_parts) { + Print(L"Status: GPT partition table has no data partitions, no need to sync.\n"); + return 1; + } + + return 0; +} + +// +// compare GPT and MBR tables +// + +#define ACTION_NONE (0) +#define ACTION_NOP (1) +#define ACTION_REWRITE (2) + +static UINTN analyze(VOID) +{ + UINTN action; + UINTN i, k, iter, count_active, detected_parttype; + CHARN *fsname; + UINT64 min_start_lba; + UINTN status; + BOOLEAN have_esp; + + new_mbr_part_count = 0; + + // determine correct MBR types for GPT partitions + if (gpt_part_count == 0) { + Print(L"Status: No GPT partitions defined, nothing to sync.\n"); + return 0; + } + have_esp = FALSE; + for (i = 0; i < gpt_part_count; i++) { + gpt_parts[i].mbr_type = gpt_parts[i].gpt_parttype->mbr_type; + if (gpt_parts[i].gpt_parttype->kind == GPT_KIND_BASIC_DATA) { + // Basic Data: need to look at data in the partition + status = detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname); + if (detected_parttype) + gpt_parts[i].mbr_type = detected_parttype; + else + gpt_parts[i].mbr_type = 0x0b; // fallback: FAT32 + } else if (gpt_parts[i].mbr_type == 0xef) { + // EFI System Partition: GNU parted can put this on any partition, + // need to detect file systems + status = detect_mbrtype_fs(gpt_parts[i].start_lba, &detected_parttype, &fsname); + if (!have_esp && (detected_parttype == 0x01 || detected_parttype == 0x0e || detected_parttype == 0x0c)) + ; // seems to be a legitimate ESP, don't change + else if (detected_parttype) + gpt_parts[i].mbr_type = detected_parttype; + else if (have_esp) // make sure there's no more than one ESP per disk + gpt_parts[i].mbr_type = 0x83; // fallback: Linux + } + // NOTE: mbr_type may still be 0 if content detection fails for exotic GPT types or file systems + + if (gpt_parts[i].mbr_type == 0xef) + have_esp = TRUE; + } + + // check for common scenarios + action = ACTION_NONE; + if (mbr_part_count == 0) { + // current MBR is empty + action = ACTION_REWRITE; + } else if (mbr_part_count == 1 && mbr_parts[0].mbr_type == 0xee) { + // MBR has just the EFI Protective partition (i.e. untouched) + action = ACTION_REWRITE; + } + if (action == ACTION_NONE && mbr_part_count > 0) { + if (mbr_parts[0].mbr_type == 0xee && + gpt_parts[0].mbr_type == 0xef && + mbr_parts[0].start_lba == 1 && + mbr_parts[0].end_lba == gpt_parts[0].end_lba) { + // The Apple Way, "EFI Protective" covering the tables and the ESP + action = ACTION_NOP; + if ((mbr_part_count != gpt_part_count && gpt_part_count <= 4) || + (mbr_part_count != 4 && gpt_part_count > 4)) { + // number of partitions has changed + action = ACTION_REWRITE; + } else { + // check partition ranges and types + for (i = 1; i < mbr_part_count; i++) { + if (mbr_parts[i].start_lba != gpt_parts[i].start_lba || + mbr_parts[i].end_lba != gpt_parts[i].end_lba || + (gpt_parts[i].mbr_type && mbr_parts[i].mbr_type != gpt_parts[i].mbr_type)) + // position or type has changed + action = ACTION_REWRITE; + } + } + // check number of active partitions + count_active = 0; + for (i = 0; i < mbr_part_count; i++) + if (mbr_parts[i].active) + count_active++; + if (count_active!= 1) + action = ACTION_REWRITE; + } + } + if (action == ACTION_NONE && mbr_part_count > 0 && mbr_parts[0].mbr_type == 0xef) { + // The XOM Way, all partitions mirrored 1:1 + action = ACTION_REWRITE; + // check partition ranges and types + for (i = 0; i < mbr_part_count; i++) { + if (mbr_parts[i].start_lba != gpt_parts[i].start_lba || + mbr_parts[i].end_lba != gpt_parts[i].end_lba || + (gpt_parts[i].mbr_type && mbr_parts[i].mbr_type != gpt_parts[i].mbr_type)) + // position or type has changed -> better don't touch + action = ACTION_NONE; + } + } + + if (action == ACTION_NOP) { + Print(L"Status: Tables are synchronized, no need to sync.\n"); + return 0; + } else if (action == ACTION_REWRITE) { + Print(L"Status: MBR table must be updated.\n"); + } else { + Print(L"Status: Analysis inconclusive, will not touch this disk.\n"); + return 1; + } + + // generate the new table + + // first entry: EFI Protective + new_mbr_parts[0].index = 0; + new_mbr_parts[0].start_lba = 1; + new_mbr_parts[0].mbr_type = 0xee; + new_mbr_part_count = 1; + + if (gpt_parts[0].mbr_type == 0xef) { + new_mbr_parts[0].end_lba = gpt_parts[0].end_lba; + i = 1; + } else { + min_start_lba = gpt_parts[0].start_lba; + for (k = 0; k < gpt_part_count; k++) { + if (min_start_lba > gpt_parts[k].start_lba) + min_start_lba = gpt_parts[k].start_lba; + } + new_mbr_parts[0].end_lba = min_start_lba - 1; + i = 0; + } + + // add other GPT partitions until the table is full + // TODO: in the future, prioritize partitions by kind + for (; i < gpt_part_count && new_mbr_part_count < 4; i++) { + new_mbr_parts[new_mbr_part_count].index = new_mbr_part_count; + new_mbr_parts[new_mbr_part_count].start_lba = gpt_parts[i].start_lba; + new_mbr_parts[new_mbr_part_count].end_lba = gpt_parts[i].end_lba; + new_mbr_parts[new_mbr_part_count].mbr_type = gpt_parts[i].mbr_type; + new_mbr_parts[new_mbr_part_count].active = FALSE; + + // find matching partition in the old MBR table + for (k = 0; k < mbr_part_count; k++) { + if (mbr_parts[k].start_lba == gpt_parts[i].start_lba) { + // keep type if not detected + if (new_mbr_parts[new_mbr_part_count].mbr_type == 0) + new_mbr_parts[new_mbr_part_count].mbr_type = mbr_parts[k].mbr_type; + // keep active flag + new_mbr_parts[new_mbr_part_count].active = mbr_parts[k].active; + break; + } + } + + if (new_mbr_parts[new_mbr_part_count].mbr_type == 0) + // final fallback: set to a (hopefully) unused type + new_mbr_parts[new_mbr_part_count].mbr_type = 0xc0; + + new_mbr_part_count++; + } + + // make sure there's exactly one active partition + for (iter = 0; iter < 3; iter++) { + // check + count_active = 0; + for (i = 0; i < new_mbr_part_count; i++) + if (new_mbr_parts[i].active) + count_active++; + if (count_active == 1) + break; + + // set active on the first matching partition + if (count_active == 0) { + for (i = 0; i < new_mbr_part_count; i++) { + if ((iter >= 0 && (new_mbr_parts[i].mbr_type == 0x07 || // NTFS + new_mbr_parts[i].mbr_type == 0x0b || // FAT32 + new_mbr_parts[i].mbr_type == 0x0c)) || // FAT32 (LBA) + (iter >= 1 && (new_mbr_parts[i].mbr_type == 0x83)) || // Linux + (iter >= 2 && i > 0)) { + new_mbr_parts[i].active = TRUE; + break; + } + } + } else if (count_active > 1 && iter == 0) { + // too many active partitions, try deactivating the ESP / EFI Protective entry + if ((new_mbr_parts[0].mbr_type == 0xee || new_mbr_parts[0].mbr_type == 0xef) && + new_mbr_parts[0].active) { + new_mbr_parts[0].active = FALSE; + } + } else if (count_active > 1 && iter > 0) { + // too many active partitions, deactivate all but the first one + count_active = 0; + for (i = 0; i < new_mbr_part_count; i++) + if (new_mbr_parts[i].active) { + if (count_active > 0) + new_mbr_parts[i].active = FALSE; + count_active++; + } + } + } + + // dump table + Print(L"\nProposed new MBR partition table:\n"); + Print(L" # A Start LBA End LBA Type\n"); + for (i = 0; i < new_mbr_part_count; i++) { + Print(L" %d %s %12lld %12lld %02x %s\n", + new_mbr_parts[i].index + 1, + new_mbr_parts[i].active ? STR("*") : STR(" "), + new_mbr_parts[i].start_lba, + new_mbr_parts[i].end_lba, + new_mbr_parts[i].mbr_type, + mbr_parttype_name(new_mbr_parts[i].mbr_type)); + } + + return 0; +} + +// +// sync algorithm entry point +// + +UINTN gptsync(VOID) +{ + UINTN status = 0; + UINTN status_gpt, status_mbr; + // BOOLEAN proceed = FALSE; + + // get full information from disk + status_gpt = read_gpt(); + status_mbr = read_mbr(); + if (status_gpt != 0 || status_mbr != 0) + return (status_gpt || status_mbr); + + // cross-check current situation + Print(L"\n"); + status = check_gpt(); // check GPT for consistency + if (status != 0) + return status; + status = check_mbr(); // check MBR for consistency + if (status != 0) + return status; + status = analyze(); // analyze the situation & compose new MBR table + if (status != 0) + return status; + if (new_mbr_part_count == 0) + return status; + + // offer user the choice what to do + // status = input_boolean(STR("\nMay I update the MBR as printed above? [y/N] "), &proceed); + // if (status != 0 || proceed != TRUE) + // return status; + + // adjust the MBR and write it back + status = write_mbr(); + if (status != 0) + return status; + + return status; +} diff --git a/gptsync/gptsync.h b/gptsync/gptsync.h new file mode 100644 index 0000000..d1bf3c2 --- /dev/null +++ b/gptsync/gptsync.h @@ -0,0 +1,219 @@ +/* + * gptsync/gptsync.h + * Common header for gptsync and showpart + * + * Copyright (c) 2006 Christoph Pfisterer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Christoph Pfisterer nor the names of the + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +// +// config +// + +#if defined(EFI32) || defined(EFIX64) +#define CONFIG_EFI +#endif + +// +// platform-dependent types +// + +#ifdef CONFIG_EFI + +#include +#include + +#define copy_guid(destguid, srcguid) (CopyMem(destguid, srcguid, 16)) +#define guids_are_equal(guid1, guid2) (CompareMem(guid1, guid2, 16) == 0) + +typedef CHAR16 CHARN; +#define STR(x) L##x + +#endif + + +#ifndef CONFIG_EFI + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +typedef int INTN; +typedef unsigned int UINTN; +typedef uint8_t UINT8; +typedef uint16_t UINT16; +typedef uint32_t UINT32; +typedef uint64_t UINT64; +typedef void VOID; + +typedef int BOOLEAN; +#ifndef FALSE +#define FALSE (0) +#endif +#ifndef TRUE +#define TRUE (1) +#endif + +typedef unsigned short CHAR16; +typedef char CHARN; +#define STR(x) x + +void Print(wchar_t *format, ...); + +// FUTURE: use STR(), #define Print printf + +#define CopyMem memcpy +#define SetMem memset +#define CompareMem memcmp + +#define copy_guid(destguid, srcguid) (memcpy(destguid, srcguid, 16)) +#define guids_are_equal(guid1, guid2) (memcmp(guid1, guid2, 16) == 0) + +#endif + +// +// platform-independent types +// + +typedef struct { + UINT8 flags; + UINT8 start_chs[3]; + UINT8 type; + UINT8 end_chs[3]; + UINT32 start_lba; + UINT32 size; +} MBR_PARTITION_INFO; + +typedef struct { + UINT8 type; + CHARN *name; +} MBR_PARTTYPE; + +typedef struct { + UINT64 signature; + UINT32 spec_revision; + UINT32 header_size; + UINT32 header_crc32; + UINT32 reserved; + UINT64 header_lba; + UINT64 alternate_header_lba; + UINT64 first_usable_lba; + UINT64 last_usable_lba; + UINT8 disk_guid[16]; + UINT64 entry_lba; + UINT32 entry_count; + UINT32 entry_size; + UINT32 entry_crc32; +} GPT_HEADER; + +typedef struct { + UINT8 type_guid[16]; + UINT8 partition_guid[16]; + UINT64 start_lba; + UINT64 end_lba; + UINT64 attributes; + CHAR16 name[36]; +} GPT_ENTRY; + +#define GPT_KIND_SYSTEM (0) +#define GPT_KIND_DATA (1) +#define GPT_KIND_BASIC_DATA (2) +#define GPT_KIND_FATAL (3) + +typedef struct { + UINT8 guid[16]; + UINT8 mbr_type; + CHARN *name; + UINTN kind; +} GPT_PARTTYPE; + +typedef struct { + UINTN index; + UINT64 start_lba; + UINT64 end_lba; + UINTN mbr_type; + UINT8 gpt_type[16]; + GPT_PARTTYPE *gpt_parttype; + BOOLEAN active; +} PARTITION_INFO; + +// +// functions provided by the OS-specific module +// + +UINTN read_sector(UINT64 lba, UINT8 *buffer); +UINTN write_sector(UINT64 lba, UINT8 *buffer); +UINTN input_boolean(CHARN *prompt, BOOLEAN *bool_out); + +// +// vars and functions provided by the common lib module +// + +extern UINT8 empty_guid[16]; + +extern PARTITION_INFO mbr_parts[4]; +extern UINTN mbr_part_count; +extern PARTITION_INFO gpt_parts[128]; +extern UINTN gpt_part_count; + +extern PARTITION_INFO new_mbr_parts[4]; +extern UINTN new_mbr_part_count; + +extern UINT8 sector[512]; + +extern MBR_PARTTYPE mbr_types[]; +extern GPT_PARTTYPE gpt_types[]; +extern GPT_PARTTYPE gpt_dummy_type; + +CHARN * mbr_parttype_name(UINT8 type); +UINTN read_mbr(VOID); + +GPT_PARTTYPE * gpt_parttype(UINT8 *type_guid); +UINTN read_gpt(VOID); + +UINTN detect_mbrtype_fs(UINT64 partlba, UINTN *parttype, CHARN **fsname); + +// +// actual platform-independent programs +// + +UINTN gptsync(VOID); +UINTN showpart(VOID); + +/* EOF */ diff --git a/gptsync/lib.c b/gptsync/lib.c new file mode 100644 index 0000000..f2d71b2 --- /dev/null +++ b/gptsync/lib.c @@ -0,0 +1,469 @@ +/* + * gptsync/lib.c + * Platform-independent code common to gptsync and showpart + * + * Copyright (c) 2006-2007 Christoph Pfisterer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Christoph Pfisterer nor the names of the + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gptsync.h" + +// variables + +UINT8 empty_guid[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + +PARTITION_INFO mbr_parts[4]; +UINTN mbr_part_count = 0; +PARTITION_INFO gpt_parts[128]; +UINTN gpt_part_count = 0; + +PARTITION_INFO new_mbr_parts[4]; +UINTN new_mbr_part_count = 0; + +UINT8 sector[512]; + +MBR_PARTTYPE mbr_types[] = { + { 0x01, STR("FAT12 (CHS)") }, + { 0x04, STR("FAT16 <32M (CHS)") }, + { 0x05, STR("Extended (CHS)") }, + { 0x06, STR("FAT16 (CHS)") }, + { 0x07, STR("NTFS/HPFS") }, + { 0x0b, STR("FAT32 (CHS)") }, + { 0x0c, STR("FAT32 (LBA)") }, + { 0x0e, STR("FAT16 (LBA)") }, + { 0x0f, STR("Extended (LBA)") }, + { 0x11, STR("Hidden FAT12 (CHS)") }, + { 0x14, STR("Hidden FAT16 <32M (CHS)") }, + { 0x16, STR("Hidden FAT16 (CHS)") }, + { 0x17, STR("Hidden NTFS/HPFS") }, + { 0x1b, STR("Hidden FAT32 (CHS)") }, + { 0x1c, STR("Hidden FAT32 (LBA)") }, + { 0x1e, STR("Hidden FAT16 (LBA)") }, + { 0x82, STR("Linux swap / Solaris") }, + { 0x83, STR("Linux") }, + { 0x85, STR("Linux Extended") }, + { 0x86, STR("NT FAT volume set") }, + { 0x87, STR("NTFS volume set") }, + { 0x8e, STR("Linux LVM") }, + { 0xa5, STR("FreeBSD") }, + { 0xa6, STR("OpenBSD") }, + { 0xa7, STR("NeXTSTEP") }, + { 0xa8, STR("Mac OS X UFS") }, + { 0xa9, STR("NetBSD") }, + { 0xab, STR("Mac OS X Boot") }, + { 0xac, STR("Apple RAID") }, + { 0xaf, STR("Mac OS X HFS+") }, + { 0xbe, STR("Solaris Boot") }, + { 0xbf, STR("Solaris") }, + { 0xeb, STR("BeOS") }, + { 0xee, STR("EFI Protective") }, + { 0xef, STR("EFI System (FAT)") }, + { 0xfd, STR("Linux RAID") }, + { 0, NULL }, +}; + +GPT_PARTTYPE gpt_types[] = { + { "\x28\x73\x2A\xC1\x1F\xF8\xD2\x11\xBA\x4B\x00\xA0\xC9\x3E\xC9\x3B", 0xef, STR("EFI System (FAT)"), GPT_KIND_SYSTEM }, + { "\x41\xEE\x4D\x02\xE7\x33\xD3\x11\x9D\x69\x00\x08\xC7\x81\xF3\x9F", 0x00, STR("MBR partition scheme"), GPT_KIND_FATAL }, + { "\x16\xE3\xC9\xE3\x5C\x0B\xB8\x4D\x81\x7D\xF9\x2D\xF0\x02\x15\xAE", 0x00, STR("MS Reserved"), GPT_KIND_SYSTEM }, + { "\xA2\xA0\xD0\xEB\xE5\xB9\x33\x44\x87\xC0\x68\xB6\xB7\x26\x99\xC7", 0x00, STR("Basic Data"), GPT_KIND_BASIC_DATA }, + { "\xAA\xC8\x08\x58\x8F\x7E\xE0\x42\x85\xD2\xE1\xE9\x04\x34\xCF\xB3", 0x00, STR("MS LDM Metadata"), GPT_KIND_FATAL }, + { "\xA0\x60\x9B\xAF\x31\x14\x62\x4F\xBC\x68\x33\x11\x71\x4A\x69\xAD", 0x00, STR("MS LDM Data"), GPT_KIND_FATAL }, + { "\x1E\x4C\x89\x75\xEB\x3A\xD3\x11\xB7\xC1\x7B\x03\xA0\x00\x00\x00", 0x00, STR("HP/UX Data"), GPT_KIND_DATA }, + { "\x28\xE7\xA1\xE2\xE3\x32\xD6\x11\xA6\x82\x7B\x03\xA0\x00\x00\x00", 0x00, STR("HP/UX Service"), GPT_KIND_SYSTEM }, + { "\x0F\x88\x9D\xA1\xFC\x05\x3B\x4D\xA0\x06\x74\x3F\x0F\x84\x91\x1E", 0xfd, STR("Linux RAID"), GPT_KIND_DATA }, + { "\x6D\xFD\x57\x06\xAB\xA4\xC4\x43\x84\xE5\x09\x33\xC8\x4B\x4F\x4F", 0x82, STR("Linux Swap"), GPT_KIND_SYSTEM }, + { "\x79\xD3\xD6\xE6\x07\xF5\xC2\x44\xA2\x3C\x23\x8F\x2A\x3D\xF9\x28", 0x8e, STR("Linux LVM"), GPT_KIND_DATA }, + { "\x39\x33\xA6\x8D\x07\x00\xC0\x60\xC4\x36\x08\x3A\xC8\x23\x09\x08", 0x00, STR("Linux Reserved"), GPT_KIND_SYSTEM }, + { "\xB4\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0xa5, STR("FreeBSD Data"), GPT_KIND_DATA }, + { "\xB5\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0x00, STR("FreeBSD Swap"), GPT_KIND_SYSTEM }, + { "\xB6\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0xa5, STR("FreeBSD UFS"), GPT_KIND_DATA }, + { "\xB8\x7C\x6E\x51\xCF\x6E\xD6\x11\x8F\xF8\x00\x02\x2D\x09\x71\x2B", 0x00, STR("FreeBSD Vinum"), GPT_KIND_DATA }, + { "\x00\x53\x46\x48\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xaf, STR("Mac OS X HFS+"), GPT_KIND_DATA }, + { "\x00\x53\x46\x55\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xa8, STR("Mac OS X UFS"), GPT_KIND_DATA }, + { "\x74\x6F\x6F\x42\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xab, STR("Mac OS X Boot"), GPT_KIND_DATA }, + { "\x44\x49\x41\x52\x00\x00\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xac, STR("Apple RAID"), GPT_KIND_DATA }, + { "\x44\x49\x41\x52\x4F\x5F\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0xac, STR("Apple RAID (Offline)"), GPT_KIND_DATA }, + { "\x65\x62\x61\x4C\x00\x6C\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0x00, STR("Apple Label"), GPT_KIND_SYSTEM }, + { "\x6F\x63\x65\x52\x65\x76\xAA\x11\xAA\x11\x00\x30\x65\x43\xEC\xAC", 0x00, STR("Apple Recovery"), GPT_KIND_BASIC_DATA }, + { "\x7f\x23\x96\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Reserved"), GPT_KIND_SYSTEM }, + { "\x45\xCB\x82\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Boot"), GPT_KIND_DATA }, + { "\x4D\xCF\x85\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Root"), GPT_KIND_DATA }, + { "\x6F\xC4\x87\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Swap"), GPT_KIND_SYSTEM }, + { "\xC3\x8C\x89\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Usr"), GPT_KIND_DATA }, + { "\x2B\x64\x8B\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Backup"), GPT_KIND_SYSTEM }, + { "\xC7\x2A\x8D\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Stand"), GPT_KIND_DATA }, + { "\xE9\xF2\x8E\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Var"), GPT_KIND_DATA }, + { "\x39\xBA\x90\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris Home"), GPT_KIND_DATA }, + { "\xA5\x83\x92\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0xbf, STR("Solaris ALTSCTR"), GPT_KIND_DATA }, + { "\x3B\x5A\x94\x6A\xD2\x1D\xB2\x11\x99\xa6\x08\x00\x20\x73\x66\x31", 0x00, STR("Solaris Cache"), GPT_KIND_SYSTEM }, + { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, 0, NULL, 0 }, +}; +GPT_PARTTYPE gpt_dummy_type = + { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }, 0, STR("Unknown"), GPT_KIND_FATAL }; + +// +// MBR functions +// + +CHARN * mbr_parttype_name(UINT8 type) +{ + int i; + + for (i = 0; mbr_types[i].name; i++) + if (mbr_types[i].type == type) + return mbr_types[i].name; + return STR("Unknown"); +} + +UINTN read_mbr(VOID) +{ + UINTN status; + UINTN i; + BOOLEAN used; + MBR_PARTITION_INFO *table; + + Print(L"\nCurrent MBR partition table:\n"); + + // read MBR data + status = read_sector(0, sector); + if (status != 0) + return status; + + // check for validity + if (*((UINT16 *)(sector + 510)) != 0xaa55) { + Print(L" No MBR partition table present!\n"); + return 1; + } + table = (MBR_PARTITION_INFO *)(sector + 446); + for (i = 0; i < 4; i++) { + if (table[i].flags != 0x00 && table[i].flags != 0x80) { + Print(L" MBR partition table is invalid!\n"); + return 1; + } + } + + // check if used + used = FALSE; + for (i = 0; i < 4; i++) { + if (table[i].start_lba > 0 && table[i].size > 0) { + used = TRUE; + break; + } + } + if (!used) { + Print(L" No partitions defined\n"); + return 0; + } + + // dump current state & fill internal structures + Print(L" # A Start LBA End LBA Type\n"); + for (i = 0; i < 4; i++) { + if (table[i].start_lba == 0 || table[i].size == 0) + continue; + + mbr_parts[mbr_part_count].index = i; + mbr_parts[mbr_part_count].start_lba = (UINT64)table[i].start_lba; + mbr_parts[mbr_part_count].end_lba = (UINT64)table[i].start_lba + (UINT64)table[i].size - 1; + mbr_parts[mbr_part_count].mbr_type = table[i].type; + mbr_parts[mbr_part_count].active = (table[i].flags == 0x80) ? TRUE : FALSE; + + Print(L" %d %s %12lld %12lld %02x %s\n", + mbr_parts[mbr_part_count].index + 1, + mbr_parts[mbr_part_count].active ? STR("*") : STR(" "), + mbr_parts[mbr_part_count].start_lba, + mbr_parts[mbr_part_count].end_lba, + mbr_parts[mbr_part_count].mbr_type, + mbr_parttype_name(mbr_parts[mbr_part_count].mbr_type)); + + mbr_part_count++; + } + + return 0; +} + +// +// GPT functions +// + +GPT_PARTTYPE * gpt_parttype(UINT8 *type_guid) +{ + int i; + + for (i = 0; gpt_types[i].name; i++) + if (guids_are_equal(gpt_types[i].guid, type_guid)) + return &(gpt_types[i]); + return &gpt_dummy_type; +} + +UINTN read_gpt(VOID) +{ + UINTN status; + GPT_HEADER *header; + GPT_ENTRY *entry; + UINT64 entry_lba; + UINTN entry_count, entry_size, i; + + Print(L"\nCurrent GPT partition table:\n"); + + // read GPT header + status = read_sector(1, sector); + if (status != 0) + return status; + + // check signature + header = (GPT_HEADER *)sector; + if (header->signature != 0x5452415020494645ULL) { + Print(L" No GPT partition table present!\n"); + return 0; + } + if (header->spec_revision != 0x00010000UL) { + Print(L" Warning: Unknown GPT spec revision 0x%08x\n", header->spec_revision); + } + if ((512 % header->entry_size) > 0 || header->entry_size > 512) { + Print(L" Error: Invalid GPT entry size (misaligned or more than 512 bytes)\n"); + return 0; + } + + // read entries + entry_lba = header->entry_lba; + entry_size = header->entry_size; + entry_count = header->entry_count; + + for (i = 0; i < entry_count; i++) { + if (((i * entry_size) % 512) == 0) { + status = read_sector(entry_lba, sector); + if (status != 0) + return status; + entry_lba++; + } + entry = (GPT_ENTRY *)(sector + ((i * entry_size) % 512)); + + if (guids_are_equal(entry->type_guid, empty_guid)) + continue; + if (gpt_part_count == 0) { + Print(L" # Start LBA End LBA Type\n"); + } + + gpt_parts[gpt_part_count].index = i; + gpt_parts[gpt_part_count].start_lba = entry->start_lba; + gpt_parts[gpt_part_count].end_lba = entry->end_lba; + gpt_parts[gpt_part_count].mbr_type = 0; + copy_guid(gpt_parts[gpt_part_count].gpt_type, entry->type_guid); + gpt_parts[gpt_part_count].gpt_parttype = gpt_parttype(gpt_parts[gpt_part_count].gpt_type); + gpt_parts[gpt_part_count].active = FALSE; + + Print(L" %d %12lld %12lld %s\n", + gpt_parts[gpt_part_count].index + 1, + gpt_parts[gpt_part_count].start_lba, + gpt_parts[gpt_part_count].end_lba, + gpt_parts[gpt_part_count].gpt_parttype->name); + + gpt_part_count++; + } + if (gpt_part_count == 0) { + Print(L" No partitions defined\n"); + return 0; + } + + return 0; +} + +// +// detect file system type +// + +UINTN detect_mbrtype_fs(UINT64 partlba, UINTN *parttype, CHARN **fsname) +{ + UINTN status; + UINTN signature, score; + UINTN sectsize, clustersize, reserved, fatcount, dirsize, sectcount, fatsize, clustercount; + + *fsname = STR("Unknown"); + *parttype = 0; + + // READ sector 0 / offset 0K + status = read_sector(partlba, sector); + if (status != 0) + return status; + + // detect XFS + memcpy(&signature, sector, sizeof(UINT32)); + if (signature == 0x42534658) { + *parttype = 0x83; + *fsname = STR("XFS"); + return 0; + } + + // detect FAT and NTFS + sectsize = *((UINT16 *)(sector + 11)); + clustersize = sector[13]; + if (sectsize >= 512 && (sectsize & (sectsize - 1)) == 0 && + clustersize > 0 && (clustersize & (clustersize - 1)) == 0) { + // preconditions for both FAT and NTFS are now met + + if (CompareMem(sector + 3, "NTFS ", 8) == 0) { + *parttype = 0x07; + *fsname = STR("NTFS"); + return 0; + } + + score = 0; + // boot jump + if ((sector[0] == 0xEB && sector[2] == 0x90) || + sector[0] == 0xE9) + score++; + // boot signature + if (sector[510] == 0x55 && sector[511] == 0xAA) + score++; + // reserved sectors + reserved = *((UINT16 *)(sector + 14)); + if (reserved == 1 || reserved == 32) + score++; + // number of FATs + fatcount = sector[16]; + if (fatcount == 2) + score++; + // number of root dir entries + dirsize = *((UINT16 *)(sector + 17)); + // sector count (16-bit and 32-bit versions) + sectcount = *((UINT16 *)(sector + 19)); + if (sectcount == 0) + sectcount = *((UINT32 *)(sector + 32)); + // media byte + if (sector[21] == 0xF0 || sector[21] >= 0xF8) + score++; + // FAT size in sectors + fatsize = *((UINT16 *)(sector + 22)); + if (fatsize == 0) + fatsize = *((UINT32 *)(sector + 36)); + + // determine FAT type + dirsize = ((dirsize * 32) + (sectsize - 1)) / sectsize; + clustercount = sectcount - (reserved + (fatcount * fatsize) + dirsize); + clustercount /= clustersize; + + if (score >= 3) { + if (clustercount < 4085) { + *parttype = 0x01; + *fsname = STR("FAT12"); + } else if (clustercount < 65525) { + *parttype = 0x0e; + *fsname = STR("FAT16"); + } else { + *parttype = 0x0c; + *fsname = STR("FAT32"); + } + // TODO: check if 0e and 0c are okay to use, maybe we should use 06 and 0b instead... + return 0; + } + } + + // READ sector 2 / offset 1K + status = read_sector(partlba + 2, sector); + if (status != 0) + return status; + + // detect HFS+ + memcpy(&signature, sector, sizeof(UINT16)); + if (signature == 0x4442) { + *parttype = 0xaf; + if (*((UINT16 *)(sector + 0x7c)) == 0x2B48) + *fsname = STR("HFS Extended (HFS+)"); + else + *fsname = STR("HFS Standard"); + return 0; + } else if (signature == 0x2B48) { + *parttype = 0xaf; + *fsname = STR("HFS Extended (HFS+)"); + return 0; + } + + // detect ext2/ext3 + signature = *((UINT16 *)(sector + 56)); + if (signature == 0xEF53) { + *parttype = 0x83; + if (*((UINT16 *)(sector + 92)) & 0x0004) + *fsname = STR("ext3"); + else + *fsname = STR("ext2"); + return 0; + } + + // READ sector 128 / offset 64K + status = read_sector(partlba + 128, sector); + if (status != 0) + return status; + + // detect ReiserFS + if (CompareMem(sector + 52, "ReIsErFs", 8) == 0 || + CompareMem(sector + 52, "ReIsEr2Fs", 9) == 0 || + CompareMem(sector + 52, "ReIsEr3Fs", 9) == 0) { + *parttype = 0x83; + *fsname = STR("ReiserFS"); + return 0; + } + + // detect Reiser4 + if (CompareMem(sector, "ReIsEr4", 7) == 0) { + *parttype = 0x83; + *fsname = STR("Reiser4"); + return 0; + } + + // READ sector 64 / offset 32K + status = read_sector(partlba + 64, sector); + if (status != 0) + return status; + + // detect JFS + if (CompareMem(sector, "JFS1", 4) == 0) { + *parttype = 0x83; + *fsname = STR("JFS"); + return 0; + } + + // READ sector 16 / offset 8K + status = read_sector(partlba + 16, sector); + if (status != 0) + return status; + + // detect ReiserFS + if (CompareMem(sector + 52, "ReIsErFs", 8) == 0 || + CompareMem(sector + 52, "ReIsEr2Fs", 9) == 0 || + CompareMem(sector + 52, "ReIsEr3Fs", 9) == 0) { + *parttype = 0x83; + *fsname = STR("ReiserFS"); + return 0; + } + + return 0; +} diff --git a/gptsync/os_unix.c b/gptsync/os_unix.c new file mode 100644 index 0000000..b43685b --- /dev/null +++ b/gptsync/os_unix.c @@ -0,0 +1,267 @@ +/* + * gptsync/os_unix.c + * Unix OS glue for gptsync + * + * Copyright (c) 2006 Christoph Pfisterer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Christoph Pfisterer nor the names of the + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gptsync.h" + +#include + +#define STRINGIFY(s) #s +#define STRINGIFY2(s) STRINGIFY(s) +#define PROGNAME_S STRINGIFY2(PROGNAME) + +// variables + +static int fd; + +// +// error functions +// + +void error(const char *msg, ...) +{ + va_list par; + char buf[4096]; + + va_start(par, msg); + vsnprintf(buf, 4096, msg, par); + va_end(par); + + fprintf(stderr, PROGNAME_S ": %s\n", buf); +} + +void errore(const char *msg, ...) +{ + va_list par; + char buf[4096]; + + va_start(par, msg); + vsnprintf(buf, 4096, msg, par); + va_end(par); + + fprintf(stderr, PROGNAME_S ": %s: %s\n", buf, strerror(errno)); +} + +// +// sector I/O functions +// + +UINTN read_sector(UINT64 lba, UINT8 *buffer) +{ + off_t offset; + off_t result_seek; + ssize_t result_read; + + offset = lba * 512; + result_seek = lseek(fd, offset, SEEK_SET); + if (result_seek != offset) { + errore("Seek to %llu failed", offset); + return 1; + } + + result_read = read(fd, buffer, 512); + if (result_read < 0) { + errore("Data read failed at position %llu", offset); + return 1; + } + if (result_read != 512) { + errore("Data read fell short at position %llu", offset); + return 1; + } + return 0; +} + +UINTN write_sector(UINT64 lba, UINT8 *buffer) +{ + off_t offset; + off_t result_seek; + ssize_t result_write; + + offset = lba * 512; + result_seek = lseek(fd, offset, SEEK_SET); + if (result_seek != offset) { + errore("Seek to %llu failed", offset); + return 1; + } + + result_write = write(fd, buffer, 512); + if (result_write < 0) { + errore("Data write failed at position %llu", offset); + return 1; + } + if (result_write != 512) { + errore("Data write fell short at position %llu", offset); + return 1; + } + return 0; +} + +// +// keyboard input +// + +UINTN input_boolean(CHARN *prompt, BOOLEAN *bool_out) +{ + int c; + + printf("%s", prompt); + fflush(NULL); + + c = getchar(); + if (c == EOF) + return 1; + + if (c == 'y' || c == 'Y') { + printf("Yes\n"); + *bool_out = TRUE; + } else { + printf("No\n"); + *bool_out = FALSE; + } + + return 0; +} + +// +// EFI-style print function +// + +void Print(wchar_t *format, ...) +{ + va_list par; + char formatbuf[256]; + char buf[4096]; + int i; + + for (i = 0; format[i]; i++) + formatbuf[i] = (format[i] > 255) ? '?' : (char)(format[i] & 0xff); + formatbuf[i] = 0; + + va_start(par, format); + vsnprintf(buf, 4096, formatbuf, par); + va_end(par); + + printf("%s", buf); +} + +// +// main entry point +// + +int main(int argc, char *argv[]) +{ + char *filename; + struct stat sb; + int filekind; + UINT64 filesize; + char *reason; + int status; + + // argument check + if (argc != 2) { + fprintf(stderr, "Usage: " PROGNAME_S " \n"); + return 1; + } + filename = argv[1]; + + // set input to unbuffered + fflush(NULL); + setvbuf(stdin, NULL, _IONBF, 0); + + // stat check + if (stat(filename, &sb) < 0) { + errore("Can't stat %.300s", filename); + return 1; + } + + filekind = 0; + filesize = 0; + reason = NULL; + if (S_ISREG(sb.st_mode)) + filesize = sb.st_size; + else if (S_ISBLK(sb.st_mode)) + filekind = 1; + else if (S_ISCHR(sb.st_mode)) + filekind = 2; + else if (S_ISDIR(sb.st_mode)) + reason = "Is a directory"; + else if (S_ISFIFO(sb.st_mode)) + reason = "Is a FIFO"; +#ifdef S_ISSOCK + else if (S_ISSOCK(sb.st_mode)) + reason = "Is a socket"; +#endif + else + reason = "Is an unknown kind of special file"; + + if (reason != NULL) { + error("%.300s: %s", filename, reason); + return 1; + } + + // open file + fd = open(filename, O_RDWR); + if (fd < 0 && errno == EBUSY) { + fd = open(filename, O_RDONLY); +#ifndef NOREADONLYWARN + if (fd >= 0) + printf("Warning: %.300s opened read-only\n", filename); +#endif + } + if (fd < 0) { + errore("Can't open %.300s", filename); + return 1; + } + + // (try to) guard against TTY character devices + if (filekind == 2) { + if (isatty(fd)) { + error("%.300s: Is a TTY device", filename); + return 1; + } + } + + // run sync algorithm + status = PROGNAME(); + printf("\n"); + + // close file + if (close(fd) != 0) { + errore("Error while closing %.300s", filename); + return 1; + } + + return status; +} diff --git a/gptsync/showpart.c b/gptsync/showpart.c new file mode 100644 index 0000000..3d52ba3 --- /dev/null +++ b/gptsync/showpart.c @@ -0,0 +1,257 @@ +/* + * gptsync/showpart.c + * Platform-independent code for analyzing hard disk partitioning + * + * Copyright (c) 2006 Christoph Pfisterer + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * 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. + * + * * Neither the name of Christoph Pfisterer nor the names of the + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "gptsync.h" + +// +// memory string search +// + +static INTN FindMem(VOID *Buffer, UINTN BufferLength, VOID *SearchString, UINTN SearchStringLength) +{ + UINT8 *BufferPtr; + UINTN Offset; + + BufferPtr = Buffer; + BufferLength -= SearchStringLength; + for (Offset = 0; Offset < BufferLength; Offset++, BufferPtr++) { + if (CompareMem(BufferPtr, SearchString, SearchStringLength) == 0) + return (INTN)Offset; + } + + return -1; +} + +// +// detect boot code +// + +static UINTN detect_bootcode(UINT64 partlba, CHARN **bootcodename) +{ + UINTN status; + BOOLEAN bootable; + + // read MBR data + status = read_sector(partlba, sector); + if (status != 0) + return status; + + // check bootable signature + if (*((UINT16 *)(sector + 510)) == 0xaa55 && sector[0] != 0) + bootable = TRUE; + else + bootable = FALSE; + *bootcodename = NULL; + + // detect specific boot codes + if (CompareMem(sector + 2, "LILO", 4) == 0 || + CompareMem(sector + 6, "LILO", 4) == 0) { + *bootcodename = STR("LILO"); + + } else if (CompareMem(sector + 3, "SYSLINUX", 8) == 0) { + *bootcodename = STR("SYSLINUX"); + + } else if (FindMem(sector, 512, "ISOLINUX", 8) >= 0) { + *bootcodename = STR("ISOLINUX"); + + } else if (FindMem(sector, 512, "Geom\0Hard Disk\0Read\0 Error\0", 27) >= 0) { + *bootcodename = STR("GRUB"); + + } else if ((*((UINT32 *)(sector + 502)) == 0 && + *((UINT32 *)(sector + 506)) == 50000 && + *((UINT16 *)(sector + 510)) == 0xaa55) || + FindMem(sector, 512, "Starting the BTX loader", 23) >= 0) { + *bootcodename = STR("FreeBSD"); + + } else if (FindMem(sector, 512, "!Loading", 8) >= 0 || + FindMem(sector, 512, "/cdboot\0/CDBOOT\0", 16) >= 0) { + *bootcodename = STR("OpenBSD"); + + } else if (FindMem(sector, 512, "NTLDR", 5) >= 0) { + *bootcodename = STR("Windows NTLDR"); + + } else if (FindMem(sector, 512, "BOOTMGR", 7) >= 0) { + *bootcodename = STR("Windows BOOTMGR (Vista)"); + + } else if (FindMem(sector, 512, "CPUBOOT SYS", 11) >= 0 || + FindMem(sector, 512, "KERNEL SYS", 11) >= 0) { + *bootcodename = STR("FreeDOS"); + + } else if (FindMem(sector, 512, "OS2LDR", 6) >= 0 || + FindMem(sector, 512, "OS2BOOT", 7) >= 0) { + *bootcodename = STR("eComStation"); + + } else if (FindMem(sector, 512, "Be Boot Loader", 14) >= 0) { + *bootcodename = STR("BeOS"); + + } else if (FindMem(sector, 512, "yT Boot Loader", 14) >= 0) { + *bootcodename = STR("ZETA"); + + } else if (FindMem(sector, 512, "\x04" "beos\x06" "system\x05" "zbeos", 18) >= 0) { + *bootcodename = STR("Haiku"); + + } + + if (FindMem(sector, 512, "Non-system disk", 15) >= 0) // dummy FAT boot sector + *bootcodename = STR("None (Non-system disk message)"); + + // TODO: Add a note if a specific code was detected, but the sector is not bootable? + + if (*bootcodename == NULL) { + if (bootable) + *bootcodename = STR("Unknown, but bootable"); + else + *bootcodename = STR("None"); + } + + return 0; +} + +// +// check one partition +// + +static UINTN analyze_part(UINT64 partlba) +{ + UINTN status; + UINTN i; + CHARN *bootcodename; + UINTN parttype; + CHARN *fsname; + + if (partlba == 0) + Print(L"\nMBR contents:\n"); + else + Print(L"\nPartition at LBA %lld:\n", partlba); + + // detect boot code + status = detect_bootcode(partlba, &bootcodename); + if (status) + return status; + Print(L" Boot Code: %s\n", bootcodename); + + if (partlba == 0) + return 0; // short-circuit MBR analysis + + // detect file system + status = detect_mbrtype_fs(partlba, &parttype, &fsname); + if (status) + return status; + Print(L" File System: %s\n", fsname); + + // cross-reference with partition table + for (i = 0; i < gpt_part_count; i++) { + if (gpt_parts[i].start_lba == partlba) { + Print(L" Listed in GPT as partition %d, type %s\n", i+1, + gpt_parts[i].gpt_parttype->name); + } + } + for (i = 0; i < mbr_part_count; i++) { + if (mbr_parts[i].start_lba == partlba) { + Print(L" Listed in MBR as partition %d, type %02x %s%s\n", i+1, + mbr_parts[i].mbr_type, + mbr_parttype_name(mbr_parts[i].mbr_type), + mbr_parts[i].active ? STR(", active") : STR("")); + } + } + + return 0; +} + +// +// check all partitions +// + +static UINTN analyze_parts(VOID) +{ + UINTN i, k; + UINTN status; + BOOLEAN is_dupe; + + // check MBR (bootcode only) + status = analyze_part(0); + if (status) + return status; + + // check partitions listed in GPT + for (i = 0; i < gpt_part_count; i++) { + status = analyze_part(gpt_parts[i].start_lba); + if (status) + return status; + } + + // check partitions listed in MBR, but not in GPT + for (i = 0; i < mbr_part_count; i++) { + if (mbr_parts[i].start_lba == 1 && mbr_parts[i].mbr_type == 0xee) + continue; // skip EFI Protective entry + + is_dupe = FALSE; + for (k = 0; k < gpt_part_count; k++) + if (gpt_parts[k].start_lba == mbr_parts[i].start_lba) + is_dupe = TRUE; + + if (!is_dupe) { + status = analyze_part(mbr_parts[i].start_lba); + if (status) + return status; + } + } + + return 0; +} + +// +// display algorithm entry point +// + +UINTN showpart(VOID) +{ + UINTN status = 0; + UINTN status_gpt, status_mbr; + + // get full information from disk + status_gpt = read_gpt(); + status_mbr = read_mbr(); + if (status_gpt != 0 || status_mbr != 0) + return (status_gpt || status_mbr); + + // analyze all partitions + status = analyze_parts(); + if (status != 0) + return status; + + return status; +} diff --git a/gptsync/syslinux_mbr.h b/gptsync/syslinux_mbr.h new file mode 100644 index 0000000..1c33e11 --- /dev/null +++ b/gptsync/syslinux_mbr.h @@ -0,0 +1,90 @@ +/* + * include/syslinux_mbr.h + * MBR boot code + * + * The boot code in this file was taken from syslinux-3.11. It is covered + * by the following license: + * + ; ----------------------------------------------------------------------- + ; + ; Copyright 2003-2004 H. Peter Anvin - All Rights Reserved + ; + ; Permission is hereby granted, free of charge, to any person + ; obtaining a copy of this software and associated documentation + ; files (the "Software"), to deal in the Software without + ; restriction, including without limitation the rights to use, + ; copy, modify, merge, publish, distribute, sublicense, and/or + ; sell copies of the Software, and to permit persons to whom + ; the Software is furnished to do so, subject to the following + ; conditions: + ; + ; The above copyright notice and this permission notice shall + ; be included in all copies or substantial portions of the Software. + ; + ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + ; EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + ; OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + ; NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + ; HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + ; WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + ; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + ; OTHER DEALINGS IN THE SOFTWARE. + ; + ; ----------------------------------------------------------------------- + * + */ + +#ifndef __SYSLINUX_MBR_H__ +#define __SYSLINUX_MBR_H__ + + +#define MBR_BOOTCODE_SIZE (440) + + +#define SYSLINUX_MBR_SIZE (304) + +static UINT8 syslinux_mbr[SYSLINUX_MBR_SIZE] = { + 0xfa, 0x31, 0xc0, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e, + 0xd0, 0xbc, 0x00, 0x7c, 0xfb, 0xfc, 0x89, 0xe6, + 0xbf, 0x00, 0x06, 0xb9, 0x00, 0x01, 0xf3, 0xa5, + 0xea, 0x1d, 0x06, 0x00, 0x00, 0x88, 0x16, 0x00, + 0x08, 0xb4, 0x08, 0xcd, 0x13, 0x31, 0xc0, 0x88, + 0xf0, 0x40, 0xa3, 0xf0, 0x06, 0x80, 0xe1, 0x3f, + 0x88, 0x0e, 0xf2, 0x06, 0xbe, 0xbe, 0x07, 0x31, + 0xc0, 0xb9, 0x04, 0x00, 0xf6, 0x04, 0x80, 0x74, + 0x03, 0x40, 0x89, 0xf7, 0x83, 0xc6, 0x10, 0xe2, + 0xf3, 0x83, 0xf8, 0x01, 0x75, 0x73, 0x8a, 0x16, + 0x00, 0x08, 0xb8, 0x00, 0x41, 0xbb, 0xaa, 0x55, + 0x31, 0xc9, 0x30, 0xf6, 0xf9, 0xcd, 0x13, 0x72, + 0x23, 0x81, 0xfb, 0x55, 0xaa, 0x75, 0x1d, 0xf6, + 0xc1, 0x01, 0x74, 0x18, 0x57, 0xbe, 0xe0, 0x06, + 0x8b, 0x5d, 0x08, 0x89, 0x5c, 0x08, 0x8b, 0x5d, + 0x0a, 0x89, 0x5c, 0x0a, 0x8a, 0x16, 0x00, 0x08, + 0xb4, 0x42, 0xeb, 0x2a, 0x57, 0x8b, 0x45, 0x08, + 0x8b, 0x55, 0x0a, 0xf7, 0x36, 0xf2, 0x06, 0x42, + 0x89, 0xd1, 0x31, 0xd2, 0xf7, 0x36, 0xf0, 0x06, + 0x88, 0xc5, 0xd1, 0xe8, 0xd1, 0xe8, 0x24, 0xc0, + 0x08, 0xc1, 0x88, 0xd6, 0x8a, 0x16, 0x00, 0x08, + 0xbb, 0x00, 0x7c, 0xb8, 0x01, 0x02, 0xcd, 0x13, + 0x72, 0x16, 0x5e, 0x81, 0x3e, 0xfe, 0x7d, 0x55, + 0xaa, 0x75, 0x08, 0xfa, 0xea, 0x00, 0x7c, 0x00, + 0x00, 0x77, 0x05, 0xbe, 0xf4, 0x06, 0xeb, 0x03, + 0xbe, 0x0f, 0x07, 0xac, 0x20, 0xc0, 0x74, 0x0c, + 0xb4, 0x0e, 0x8a, 0x3e, 0x62, 0x04, 0xb3, 0x07, + 0xcd, 0x10, 0xeb, 0xef, 0xeb, 0xfe, 0x00, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x73, 0x73, + 0x69, 0x6e, 0x67, 0x20, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x73, 0x79, + 0x73, 0x74, 0x65, 0x6d, 0x0d, 0x0a, 0x00, 0x4f, + 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6e, 0x67, + 0x20, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, + 0x6c, 0x6f, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x20, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x0d, 0x0a, 0x00 +}; + + +#endif /* __SYSLINUX_MBR_H__ */ + +/* EOF */ diff --git a/gui.py b/gui.py new file mode 100755 index 0000000..6673888 --- /dev/null +++ b/gui.py @@ -0,0 +1,1580 @@ +# +# gui.py - Graphical front end for anaconda +# +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +# Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Matt Wilson +# Michael Fulbright +# + +import os +from flags import flags +os.environ["GNOME_DISABLE_CRASH_DIALOG"] = "1" + +# we only want to enable the accessibility stuff if requested for now... +if flags.cmdline.has_key("dogtail"): + os.environ["GTK_MODULES"] = "gail:atk-bridge" + +import string +import time +import isys +import iutil +import sys +import shutil +import gtk +import gtk.glade +import gobject +from language import expandLangs +from constants import * +from product import * +from network import hasActiveNetDev +from installinterfacebase import InstallInterfaceBase +import xutils +import imputil + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") + +isys.bind_textdomain_codeset("redhat-dist", "UTF-8") + +class StayOnScreen(Exception): + pass + +mainWindow = None + +stepToClass = { + "language" : ("language_gui", "LanguageWindow"), + "keyboard" : ("kbd_gui", "KeyboardWindow"), + "welcome" : ("welcome_gui", "WelcomeWindow"), + "filtertype" : ("filter_type", "FilterTypeWindow"), + "filter" : ("filter_gui", "FilterWindow"), + "zfcpconfig" : ("zfcp_gui", "ZFCPWindow"), + "partition" : ("partition_gui", "PartitionWindow"), + "parttype" : ("autopart_type", "PartitionTypeWindow"), + "cleardiskssel": ("cleardisks_gui", "ClearDisksWindow"), + "findinstall" : ("examine_gui", "UpgradeExamineWindow"), + "addswap" : ("upgrade_swap_gui", "UpgradeSwapWindow"), + "upgrademigratefs" : ("upgrade_migratefs_gui", "UpgradeMigrateFSWindow"), + "bootloader": ("bootloader_main_gui", "MainBootloaderWindow"), + "upgbootloader": ("upgrade_bootloader_gui", "UpgradeBootloaderWindow"), + "network" : ("network_gui", "NetworkWindow"), + "timezone" : ("timezone_gui", "TimezoneWindow"), + "accounts" : ("account_gui", "AccountWindow"), + "tasksel": ("task_gui", "TaskWindow"), + "group-selection": ("package_gui", "GroupSelectionWindow"), + "install" : ("progress_gui", "InstallProgressWindow"), + "complete" : ("congrats_gui", "CongratulationWindow"), +} + +if iutil.isS390(): + stepToClass["bootloader"] = ("zipl_gui", "ZiplWindow") + +# +# Stuff for screenshots +# +screenshotDir = None +screenshotIndex = 0 + +def copyScreenshots(): + global screenshotIndex + global screenshotDir + + # see if any screenshots taken + if screenshotIndex == 0: + return + + destDir = "/mnt/sysimage/root/anaconda-screenshots" + if not os.access(destDir, os.R_OK): + try: + os.mkdir(destDir, 0750) + except: + window = MessageWindow("Error Saving Screenshot", + _("An error occurred saving screenshots " + "to disk."), type="warning") + return + + # copy all png's over + for f in os.listdir(screenshotDir): + (path, fname) = os.path.split(f) + (b, ext) = os.path.splitext(f) + if ext == ".png": + shutil.copyfile(screenshotDir + '/' + f, destDir + '/' + fname) + + window = MessageWindow(_("Screenshots Copied"), + _("The screenshots have been saved in the " + "directory:\n\n" + "\t/root/anaconda-screenshots/\n\n" + "You can access these when you reboot and " + "login as root.")) + +def takeScreenShot(): + global screenshotIndex + global screenshotDir + + if screenshotDir is None: + screenshotDir = "/tmp/anaconda-screenshots" + + if not os.access(screenshotDir, os.R_OK): + try: + os.mkdir(screenshotDir) + except: + screenshotDir = None + return + + try: + screenshot = gtk.gdk.Pixbuf(gtk.gdk.COLORSPACE_RGB, False, 8, + gtk.gdk.screen_width(), gtk.gdk.screen_height()) + screenshot.get_from_drawable(gtk.gdk.get_default_root_window(), + gtk.gdk.colormap_get_system(), + 0, 0, 0, 0, + gtk.gdk.screen_width(), + gtk.gdk.screen_height()) + + if screenshot: + while (1): + sname = "screenshot-%04d.png" % ( screenshotIndex,) + if not os.access(screenshotDir + '/' + sname, os.R_OK): + break + + screenshotIndex = screenshotIndex + 1 + if screenshotIndex > 9999: + log.error("Too many screenshots!") + return + + screenshot.save (screenshotDir + '/' + sname, "png") + screenshotIndex = screenshotIndex + 1 + + window = MessageWindow(_("Saving Screenshot"), + _("A screenshot named '%s' has been saved.") % (sname,) , + type="ok") + except: + window = MessageWindow(_("Error Saving Screenshot"), + _("An error occurred while saving " + "the screenshot. If this occurred " + "during package installation, you may need " + "to try several times for it to succeed."), + type="warning") + +def handleShiftPrintScrnRelease (window, event): + if (event.keyval == gtk.keysyms.Print and event.state & gtk.gdk.SHIFT_MASK): + takeScreenShot() + +# +# HACK to make treeview work +# + +def setupTreeViewFixupIdleHandler(view, store): + id = {} + id["id"] = gobject.idle_add(scrollToIdleHandler, (view, store, id)) + +def scrollToIdleHandler((view, store, iddict)): + if not view or not store or not iddict: + return + + try: + id = iddict["id"] + except: + return + + selection = view.get_selection() + if not selection: + return + + model, iter = selection.get_selected() + if not iter: + return + + path = store.get_path(iter) + col = view.get_column(0) + view.scroll_to_cell(path, col, True, 0.5, 0.5) + + if id: + gobject.source_remove(id) + +# setup globals +def processEvents(): + gtk.gdk.flush() + while gtk.events_pending(): + gtk.main_iteration(False) + +def widgetExpander(widget, growTo=None): + widget.connect("size-allocate", growToParent, growTo) + +def growToParent(widget, rect, growTo=None): + if not widget.parent: + return + ignore = widget.__dict__.get("ignoreEvents") + if not ignore: + if growTo: + x, y, width, height = growTo.get_allocation() + widget.set_size_request(width, -1) + else: + widget.set_size_request(rect.width, -1) + widget.ignoreEvents = 1 + else: + widget.ignoreEvents = 0 + +_busyCursor = 0 + +def setCursorToBusy(process=1): + root = gtk.gdk.get_default_root_window() + cursor = gtk.gdk.Cursor(gtk.gdk.WATCH) + root.set_cursor(cursor) + if process: + processEvents() + +def setCursorToNormal(): + root = gtk.gdk.get_default_root_window() + cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) + root.set_cursor(cursor) + +def rootPushBusyCursor(process=1): + global _busyCursor + _busyCursor += 1 + if _busyCursor > 0: + setCursorToBusy(process) + +def rootPopBusyCursor(): + global _busyCursor + _busyCursor -= 1 + if _busyCursor <= 0: + setCursorToNormal() + +def getBusyCursorStatus(): + global _busyCursor + + return _busyCursor + +def runningMiniWm(): + return xutils.getXatom("_ANACONDA_MINI_WM_RUNNING") + +class MnemonicLabel(gtk.Label): + def __init__(self, text="", alignment = None): + gtk.Label.__init__(self, "") + self.set_text_with_mnemonic(text) + if alignment is not None: + apply(self.set_alignment, alignment) + +class WrappingLabel(gtk.Label): + def __init__(self, label=""): + gtk.Label.__init__(self, label) + self.set_line_wrap(True) + self.ignoreEvents = 0 + widgetExpander(self) + +def titleBarMousePressCB(widget, event, data): + if event.type & gtk.gdk.BUTTON_PRESS: + (x, y) = data["window"].get_position() + data["state"] = 1 + data["button"] = event.button + data["deltax"] = event.x_root - x + data["deltay"] = event.y_root - y + +def titleBarMouseReleaseCB(widget, event, data): + if data["state"] and event.button == data["button"]: + data["state"] = 0 + data["button"] = 0 + data["deltax"] = 0 + data["deltay"] = 0 + +def titleBarMotionEventCB(widget, event, data): + if data["state"]: + newx = event.x_root - data["deltax"] + newy = event.y_root - data["deltay"] + if newx < 0: + newx = 0 + if newy < 0: + newy = 0 + (w, h) = data["window"].get_size() + if (newx+w) > gtk.gdk.screen_width(): + newx = gtk.gdk.screen_width() - w + if (newy+20) > (gtk.gdk.screen_height()): + newy = gtk.gdk.screen_height() - 20 + + data["window"].move(int(newx), int(newy)) + +def addFrame(dialog, title=None, showtitle = 1): + contents = dialog.get_children()[0] + dialog.remove(contents) + frame = gtk.Frame() + if runningMiniWm(): + frame.set_shadow_type(gtk.SHADOW_OUT) + else: + frame.set_shadow_type(gtk.SHADOW_NONE) + box = gtk.VBox() + try: + if title is None: + title = dialog.get_title() + + if title and runningMiniWm(): + data = {} + data["state"] = 0 + data["button"] = 0 + data["deltax"] = 0 + data["deltay"] = 0 + data["window"] = dialog + eventBox = gtk.EventBox() + eventBox.connect("button-press-event", titleBarMousePressCB, data) + eventBox.connect("button-release-event", titleBarMouseReleaseCB, data) + eventBox.connect("motion-notify-event", titleBarMotionEventCB,data) + titleBox = gtk.HBox(False, 5) + eventBox.add(titleBox) + eventBox.modify_bg(gtk.STATE_NORMAL, eventBox.rc_get_style().bg[gtk.STATE_SELECTED]) + + if showtitle: + titlelbl = gtk.Label("") + titlelbl.set_markup(""+_(title)+"") + titlelbl.modify_fg(gtk.STATE_NORMAL, gtk.gdk.color_parse ("white")) + titlelbl.set_property("ypad", 4) + titleBox.pack_start(titlelbl) + else: + s = gtk.Label("") + titleBox.pack_start(s) + eventBox.show_all() + box.pack_start(eventBox, False, False) + else: + dialog.set_title (title) + except: + pass + + frame2=gtk.Frame() + frame2.set_shadow_type(gtk.SHADOW_NONE) + frame2.set_border_width(4) + frame2.add(contents) + contents.show() + frame2.show() + box.pack_start(frame2, True, True, padding=5) + box.show() + frame.add(box) + frame.show() + dialog.add(frame) + + # make screen shots work + dialog.connect ("key-release-event", handleShiftPrintScrnRelease) + +def findGladeFile(file): + path = os.environ.get("GLADEPATH", "./:ui/:/tmp/updates/:/tmp/updates/ui/") + for dir in path.split(":"): + fn = dir + file + if os.access(fn, os.R_OK): + return fn + raise RuntimeError, "Unable to find glade file %s" % file + +def getGladeWidget(file, rootwidget, i18ndomain="anaconda"): + f = findGladeFile(file) + xml = gtk.glade.XML(f, root = rootwidget, domain = i18ndomain) + w = xml.get_widget(rootwidget) + if w is None: + raise RuntimeError, "Unable to find root widget %s in %s" %(rootwidget, file) + + return (xml, w) + +def findPixmap(file): + path = os.environ.get("PIXMAPPATH", "./:pixmaps/:/tmp/updates/:/tmp/updates/pixmaps/") + for dir in path.split(":"): + fn = dir + file + if os.access(fn, os.R_OK): + return fn + return None + +def getPixbuf(file): + fn = findPixmap(file) + if not fn: + log.error("unable to load %s" %(file,)) + return None + + try: + pixbuf = gtk.gdk.pixbuf_new_from_file(fn) + except RuntimeError, msg: + log.error("unable to read %s: %s" %(file, msg)) + pixbuf = None + + return pixbuf + +def readImageFromFile(file, width = None, height = None, dither = None, + image = None): + pixbuf = getPixbuf(file) + if pixbuf is None: + log.warning("can't find pixmap %s" %(file,)) + return None + + if (width is not None and height is not None + and height != pixbuf.get_height() + and width != pixbuf.get_width()): + pixbuf = pixbuf.scale_simple(width, height, + gtk.gdk.INTERP_BILINEAR) + + if image is None: + p = gtk.Image() + else: + p = image + if dither: + (pixmap, mask) = pixbuf.render_pixmap_and_mask() + pixmap.draw_pixbuf(gtk.gdk.GC(pixmap), pixbuf, 0, 0, 0, 0, + pixbuf.get_width(), pixbuf.get_height(), + gtk.gdk.RGB_DITHER_MAX, 0, 0) + p = gtk.Image() + p.set_from_pixmap(pixmap, mask) + else: + source = gtk.IconSource() + source.set_pixbuf(pixbuf) + source.set_size(gtk.ICON_SIZE_DIALOG) + source.set_size_wildcarded(False) + iconset = gtk.IconSet() + iconset.add_source(source) + p.set_from_icon_set(iconset, gtk.ICON_SIZE_DIALOG) + + return p + +class WaitWindow: + def __init__(self, title, text, parent = None): + if not runningMiniWm(): + self.window = gtk.Window() + if parent: + self.window.set_transient_for(parent) + else: + self.window = gtk.Window(gtk.WINDOW_POPUP) + + self.window.set_modal(True) + self.window.set_type_hint (gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_title(title) + self.window.set_position(gtk.WIN_POS_CENTER) + label = WrappingLabel(text) + box = gtk.Frame() + box.set_border_width(10) + box.add(label) + box.set_shadow_type(gtk.SHADOW_NONE) + self.window.add(box) + addFrame(self.window, showtitle = 0) + self.window.show_all() + rootPushBusyCursor() + self.refresh() + + def refresh(self): + processEvents() + + def pop(self): + self.window.destroy() + rootPopBusyCursor() + +class ProgressWindow: + def __init__(self, title, text, total, updpct = 0.05, updsecs=10, + parent = None, pulse = False): + if not runningMiniWm(): + self.window = gtk.Window() + if parent: + self.window.set_transient_for(parent) + else: + self.window = gtk.Window(gtk.WINDOW_POPUP) + + self.window.set_modal(True) + self.window.set_type_hint (gtk.gdk.WINDOW_TYPE_HINT_DIALOG) + self.window.set_title (title) + self.window.set_position (gtk.WIN_POS_CENTER) + self.lastUpdate = time.time() + self.updsecs = updsecs + box = gtk.VBox (False, 5) + box.set_border_width (10) + + label = WrappingLabel (text) + label.set_alignment (0.0, 0.5) + box.pack_start (label, False) + + self.total = total + self.updpct = updpct + self.progress = gtk.ProgressBar () + box.pack_start (self.progress, True) + self.window.add(box) + + addFrame(self.window, showtitle = 0) + self.window.show_all () + rootPushBusyCursor() + self.refresh() + + def refresh(self): + processEvents() + + def pulse(self): + then = self.lastUpdate + now = time.time() + delta = now-then + if delta < 0.01: + return + self.progress.set_pulse_step(self.updpct) + self.lastUpdate = now + # if we've had a largish gap, some smoothing does actually help, + # but don't go crazy + if delta > 2: + delta=2 + while delta > 0: + self.progress.pulse() + processEvents() + delta -= 0.05 + + def set (self, amount): + # only update widget if we've changed by 5% or our timeout has + # expired + curval = self.progress.get_fraction() + newval = float (amount) / self.total + then = self.lastUpdate + now = time.time() + if newval < 0.998: + if ((newval - curval) < self.updpct and (now-then) < self.updsecs): + return + self.lastUpdate = now + self.progress.set_fraction (newval) + processEvents () + + def pop(self): + self.window.destroy () + rootPopBusyCursor() + +class InstallKeyWindow: + def __init__(self, anaconda, key): + (keyxml, self.win) = getGladeWidget("instkey.glade", "instkeyDialog") + if anaconda.instClass.instkeydesc is not None: + w = keyxml.get_widget("instkeyLabel") + w.set_text(_(anaconda.instClass.instkeydesc)) + + if not anaconda.instClass.allowinstkeyskip: + keyxml.get_widget("skipRadio").hide() + + keyName = _(anaconda.instClass.instkeyname) + if anaconda.instClass.instkeyname is None: + keyName = _("Installation Key") + + # set the install key name based on the installclass + for l in ("instkeyLabel", "keyEntryLabel", "skipLabel"): + w = keyxml.get_widget(l) + t = w.get_text() + w.set_text(t % {"instkey": keyName}) + + self.entry = keyxml.get_widget("keyEntry") + self.entry.set_text(key) + self.entry.set_sensitive(True) + + self.keyradio = keyxml.get_widget("keyRadio") + self.skipradio = keyxml.get_widget("skipRadio") + self.rc = 0 + + if anaconda.instClass.skipkey: + self.skipradio.set_active(True) + else: + self.entry.grab_focus() + + self.win.connect("key-release-event", self.keyRelease) + addFrame(self.win, title=keyName) + + def keyRelease(self, window, event): + # XXX hack: remove this, too, when the accelerators work again + if event.keyval == gtk.keysyms.F12: + window.response(1) + + def run(self): + self.win.show() + self.rc = self.win.run() + return self.rc + + def get_key(self): + if self.skipradio.get_active(): + return SKIP_KEY + key = self.entry.get_text() + key.strip() + return key + + def destroy(self): + self.win.destroy() + +class luksPassphraseWindow: + def __init__(self, passphrase=None, preexist = False, parent = None): + luksxml = gtk.glade.XML(findGladeFile("lukspassphrase.glade"), + domain="anaconda", + root="luksPassphraseDialog") + self.passphraseEntry = luksxml.get_widget("passphraseEntry") + self.passphraseEntry.set_visibility(False) + self.confirmEntry = luksxml.get_widget("confirmEntry") + self.confirmEntry.set_visibility(False) + self.win = luksxml.get_widget("luksPassphraseDialog") + self.okButton = luksxml.get_widget("okbutton1") + self.globalcheckbutton = luksxml.get_widget("globalcheckbutton") + + self.isglobal = preexist + if not preexist: + self.globalcheckbutton.hide() + else: + self.globalcheckbutton.set_active(True) + + self.minimumLength = 8 # arbitrary; should probably be much larger + if passphrase: + self.initialPassphrase = passphrase + self.passphraseEntry.set_text(passphrase) + self.confirmEntry.set_text(passphrase) + else: + self.initialPassphrase = "" + + txt = _("Choose a passphrase for the encrypted devices. " + "You will be prompted for this passphrase during system " + "boot.") + luksxml.get_widget("mainLabel").set_text(txt) + + if parent: + self.win.set_transient_for(parent) + + addFrame(self.win) + + def run(self): + self.win.show() + while True: + self.passphraseEntry.grab_focus() + self.rc = self.win.run() + if self.rc == gtk.RESPONSE_OK: + passphrase = self.passphraseEntry.get_text() + confirm = self.confirmEntry.get_text() + if passphrase != confirm: + MessageWindow(_("Error with passphrase"), + _("The passphrases you entered were " + "different. Please try again."), + type = "ok", custom_icon = "error") + self.confirmEntry.set_text("") + continue + + if len(passphrase) < self.minimumLength: + MessageWindow(_("Error with passphrase"), + _("The passphrase must be at least " + "eight characters long."), + type = "ok", custom_icon = "error") + self.passphraseEntry.set_text("") + self.confirmEntry.set_text("") + continue + + if self.isglobal: + self.isglobal = self.globalcheckbutton.get_active() + else: + self.passphraseEntry.set_text(self.initialPassphrase) + self.confirmEntry.set_text(self.initialPassphrase) + + return self.rc + + def getPassphrase(self): + return self.passphraseEntry.get_text() + + def getGlobal(self): + return self.isglobal + + def getrc(self): + return self.rc + + def destroy(self): + self.win.destroy() + +class PassphraseEntryWindow: + def __init__(self, device, parent = None): + def ok(*args): + self.win.response(gtk.RESPONSE_OK) + xml = gtk.glade.XML(findGladeFile("lukspassphrase.glade"), + domain="anaconda", + root="passphraseEntryDialog") + self.txt = _("Device %s is encrypted. In order to " + "access the device's contents during " + "installation you must enter the device's " + "passphrase below.") % (device,) + self.win = xml.get_widget("passphraseEntryDialog") + self.passphraseLabel = xml.get_widget("passphraseLabel") + self.passphraseEntry = xml.get_widget("passphraseEntry2") + self.globalcheckbutton = xml.get_widget("globalcheckbutton") + + if parent: + self.win.set_transient_for(parent) + + self.passphraseEntry.connect('activate', ok) + addFrame(self.win) + + def run(self): + self.win.show() + self.passphraseLabel.set_text(self.txt) + self.passphraseEntry.grab_focus() + + busycursor = getBusyCursorStatus() + setCursorToNormal() + + rc = self.win.run() + passphrase = None + isglobal = False + if rc == gtk.RESPONSE_OK: + passphrase = self.passphraseEntry.get_text() + isglobal = self.globalcheckbutton.get_active() + + if busycursor: + setCursorToBusy() + + self.rc = (passphrase, isglobal) + return self.rc + + def getrc(self): + return self.rc + + def destroy(self): + self.win.destroy() + +class MessageWindow: + def getrc (self): + return self.rc + + def __init__ (self, title, text, type="ok", default=None, custom_buttons=None, custom_icon=None, run = True, parent = None, destroyAfterRun = True): + self.debugRid = None + self.title = title + if flags.autostep: + self.rc = 1 + return + self.rc = None + self.framed = False + self.doCustom = False + + style = 0 + if type == 'ok': + buttons = gtk.BUTTONS_OK + style = gtk.MESSAGE_INFO + elif type == 'warning': + buttons = gtk.BUTTONS_OK + style = gtk.MESSAGE_WARNING + elif type == 'okcancel': + buttons = gtk.BUTTONS_OK_CANCEL + style = gtk.MESSAGE_WARNING + elif type == 'yesno': + buttons = gtk.BUTTONS_YES_NO + style = gtk.MESSAGE_QUESTION + elif type == 'custom': + self.doCustom = True + buttons = gtk.BUTTONS_NONE + style = gtk.MESSAGE_QUESTION + + if custom_icon == "warning": + style = gtk.MESSAGE_WARNING + elif custom_icon == "question": + style = gtk.MESSAGE_QUESTION + elif custom_icon == "error": + style = gtk.MESSAGE_ERROR + elif custom_icon == "info": + style = gtk.MESSAGE_INFO + + self.dialog = gtk.MessageDialog(mainWindow, 0, style, buttons, str(text)) + + if parent: + self.dialog.set_transient_for(parent) + + if self.doCustom: + rid=0 + for button in custom_buttons: + if button == _("Cancel"): + tbutton = "gtk-cancel" + else: + tbutton = button + + widget = self.dialog.add_button(tbutton, rid) + rid = rid + 1 + + if default is not None: + defaultchoice = default + else: + defaultchoice = rid - 1 + if flags.debug and not _("_Debug") in custom_buttons: + widget = self.dialog.add_button(_("_Debug"), rid) + self.debugRid = rid + rid += 1 + + else: + if default == "no": + defaultchoice = 0 + elif default == "yes" or default == "ok": + defaultchoice = 1 + else: + defaultchoice = 0 + + self.dialog.set_position (gtk.WIN_POS_CENTER) + self.dialog.set_default_response(defaultchoice) + if run: + self.run(destroyAfterRun) + + def run(self, destroy = False): + if not self.framed: + addFrame(self.dialog, title=self.title) + self.framed = True + self.dialog.show_all () + + # XXX - Messy - turn off busy cursor if necessary + busycursor = getBusyCursorStatus() + setCursorToNormal() + self.rc = self.dialog.run() + + if not self.doCustom: + if self.rc in [gtk.RESPONSE_OK, gtk.RESPONSE_YES]: + self.rc = 1 + elif self.rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_NO, + gtk.RESPONSE_CLOSE, gtk.RESPONSE_DELETE_EVENT]: + self.rc = 0 + else: + # generated by Esc key + if self.rc == gtk.RESPONSE_DELETE_EVENT: + self.rc = 0 + + if not self.debugRid is None and self.rc == self.debugRid: + self.debugClicked(self) + return self.run(destroy) + + if destroy: + self.dialog.destroy() + + # restore busy cursor + if busycursor: + setCursorToBusy() + + def debugClicked (self, *args): + try: + # switch to VC1 so we can debug + isys.vtActivate (1) + except SystemError: + pass + import pdb + try: + pdb.set_trace() + except: + sys.exit(-1) + try: + # switch back + isys.vtActivate (6) + except SystemError: + pass + +class DetailedMessageWindow(MessageWindow): + def __init__(self, title, text, longText=None, type="ok", default=None, custom_buttons=None, custom_icon=None, run=True, parent=None, destroyAfterRun=True): + self.title = title + + if flags.autostep: + self.rc = 1 + return + + self.debugRid = None + self.rc = None + self.framed = False + self.doCustom = False + + if type == 'ok': + buttons = ["gtk-ok"] + elif type == 'warning': + buttons = ["gtk-ok"] + elif type == 'okcancel': + buttons = ["gtk-ok", "gtk-cancel"] + elif type == 'yesno': + buttons = ["gtk-yes", "gtk-no"] + elif type == 'custom': + self.doCustom = True + buttons = custom_buttons + + xml = gtk.glade.XML(findGladeFile("detailed-dialog.glade"), domain="anaconda") + self.dialog = xml.get_widget("detailedDialog") + self.mainVBox = xml.get_widget("mainVBox") + self.hbox = xml.get_widget("hbox1") + self.info = xml.get_widget("info") + self.detailedExpander = xml.get_widget("detailedExpander") + self.detailedView = xml.get_widget("detailedView") + + if parent: + self.dialog.set_transient_for(parent) + + if custom_icon: + img = gtk.Image() + img.set_from_file(custom_icon) + self.hbox.pack_start(img) + self.hbox.reorder_child(img, 0) + + rid = 0 + for button in buttons: + self.dialog.add_button(button, rid) + rid += 1 + + if self.doCustom: + defaultchoice = rid-1 + if flags.debug and not _("_Debug") in buttons: + self.dialog.add_button(_("_Debug"), rid) + self.debugRid = rid + rid += 1 + else: + if default == "no": + defaultchoice = 0 + elif default == "yes" or default == "ok": + defaultchoice = 1 + else: + defaultchoice = 0 + + self.info.set_text(text) + + if longText: + textbuf = gtk.TextBuffer() + iter = textbuf.get_start_iter() + + for line in longText: + if __builtins__.get("type")(line) != unicode: + try: + line = unicode(line, encoding='utf-8') + except UnicodeDecodeError, e: + log.error("UnicodeDecodeException: line = %s" % (line,)) + log.error("UnicodeDecodeException: %s" % (str(e),)) + + textbuf.insert(iter, line) + + self.detailedView.set_buffer(textbuf) + else: + self.mainVBox.remove(self.detailedExpander) + + self.dialog.set_position (gtk.WIN_POS_CENTER) + self.dialog.set_default_response(defaultchoice) + + if run: + self.run(destroyAfterRun) + +class EntryWindow(MessageWindow): + def __init__ (self, title, text, prompt, entrylength = None): + mainWindow = None + MessageWindow.__init__(self, title, text, type = "okcancel", custom_icon="question", run = False) + self.entry = gtk.Entry() + if entrylength: + self.entry.set_width_chars(entrylength) + self.entry.set_max_length(entrylength) + + # eww, eww, eww... but if we pack in the vbox, it goes to the right + # place! + self.dialog.child.pack_start(self.entry) + + def run(self): + MessageWindow.run(self) + if self.rc == 0: + return None + t = self.entry.get_text() + t.strip() + if len(t) == 0: + return None + return t + + def destroy(self): + self.dialog.destroy() + +class InstallInterface(InstallInterfaceBase): + def __init__ (self): + InstallInterfaceBase.__init__(self) + self.icw = None + self.installProgress = None + + # figure out if we want to run interface at 800x600 or 640x480 + if gtk.gdk.screen_width() >= 800: + self.runres = "800x600" + else: + self.runres = "640x480" + root = gtk.gdk.get_default_root_window() + cursor = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR) + root.set_cursor(cursor) + self._initLabelAnswers = {} + self._inconsistentLVMAnswers = {} + + def __del__ (self): + pass + + def shutdown (self): + pass + + def suspend(self): + pass + + def resume(self): + pass + + def enableNetwork(self): + if len(self.anaconda.network.netdevices) == 0: + return False + from netconfig_dialog import NetworkConfigurator + net = NetworkConfigurator(self.anaconda.network) + ret = net.run() + net.destroy() + + return ret not in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT] + + def setInstallProgressClass(self, c): + self.instProgress = c + + def setPackageProgressWindow (self, ppw): + self.ppw = ppw + + def waitWindow (self, title, text): + if self.icw: + return WaitWindow (title, text, self.icw.window) + else: + return WaitWindow (title, text) + + def progressWindow (self, title, text, total, updpct = 0.05, pulse = False): + if self.icw: + return ProgressWindow (title, text, total, updpct, + parent = self.icw.window, pulse = pulse) + else: + return ProgressWindow (title, text, total, updpct, pulse = pulse) + + def messageWindow(self, title, text, type="ok", default = None, + custom_buttons=None, custom_icon=None): + if self.icw: + parent = self.icw.window + else: + parent = None + + rc = MessageWindow (title, text, type, default, + custom_buttons, custom_icon, run=True, parent=parent).getrc() + return rc + + def createRepoWindow(self): + from task_gui import RepoCreator + dialog = RepoCreator(self.anaconda) + dialog.createDialog() + dialog.run() + + def editRepoWindow(self, repoObj): + from task_gui import RepoEditor + dialog = RepoEditor(self.anaconda, repoObj) + dialog.createDialog() + dialog.run() + + def methodstrRepoWindow(self, methodstr): + from task_gui import RepoMethodstrEditor + dialog = RepoMethodstrEditor(self.anaconda, methodstr) + dialog.createDialog() + return dialog.run() + + def entryWindow(self, title, text, type="ok", entrylength = None): + d = EntryWindow(title, text, type, entrylength) + rc = d.run() + d.destroy() + return rc + + def detailedMessageWindow(self, title, text, longText=None, type="ok", + default=None, custom_buttons=None, + custom_icon=None): + if self.icw: + parent = self.icw.window + else: + parent = None + + rc = DetailedMessageWindow (title, text, longText, type, default, + custom_buttons, custom_icon, run=True, + parent=parent).getrc() + return rc + + def mainExceptionWindow(self, shortText, longTextFile): + from meh.ui.gui import MainExceptionWindow + log.critical(shortText) + win = MainExceptionWindow (shortText, longTextFile) + addFrame(win.dialog) + return win + + def saveExceptionWindow(self, longTextFile, desc="", *args, **kwargs): + from meh.ui.gui import SaveExceptionWindow + win = SaveExceptionWindow (longTextFile, desc=desc, *args, **kwargs) + addFrame(win.dialog) + return win + + def exitWindow(self, title, text): + if self.icw: + parent = self.icw.window + else: + parent = None + + rc = MessageWindow (title, text, type="custom", + custom_icon="info", parent=parent, + custom_buttons=[_("_Exit installer")]).getrc() + return rc + + def getLuksPassphrase(self, passphrase = "", preexist = False): + if self.icw: + parent = self.icw.window + else: + parent = None + + d = luksPassphraseWindow(passphrase, parent = parent, + preexist = preexist) + rc = d.run() + passphrase = d.getPassphrase() + isglobal = d.getGlobal() + d.destroy() + return (passphrase, isglobal) + + def passphraseEntryWindow(self, device): + if self.icw: + parent = self.icw.window + else: + parent = None + + d = PassphraseEntryWindow(device, parent = parent) + rc = d.run() + d.destroy() + return rc + + def resetInitializeDiskQuestion(self): + self._initLabelAnswers = {} + + def questionInitializeDisk(self, path, description, size, details=""): + + retVal = False # The less destructive default + + if not path: + return retVal + + # we are caching answers so that we don't + # ask in each storage.reset() again + if path in self._initLabelAnswers: + log.info("UI not asking about disk initialization, " + "using cached answer: %s" % self._initLabelAnswers[path]) + return self._initLabelAnswers[path] + elif "all" in self._initLabelAnswers: + log.info("UI not asking about disk initialization, " + "using cached answer: %s" % self._initLabelAnswers["all"]) + return self._initLabelAnswers["all"] + + rc = self.messageWindow(_("Warning"), + _("Error processing drive:\n\n" + "%(path)s\n%(size)-0.fMB\n%(description)s\n\n" + "This device may need to be reinitialized.\n\n" + "REINITIALIZING WILL CAUSE ALL DATA TO BE LOST!\n\n" + "This action may also be applied to all other disks " + "needing reinitialization.%(details)s") + % {'path': path, 'size': size, + 'description': description, 'details': details}, + type="custom", + custom_buttons = [ _("_Ignore"), + _("Ignore _all"), + _("_Re-initialize"), + _("Re-ini_tialize all") ], + custom_icon="question") + if rc == 0: + retVal = False + elif rc == 1: + path = "all" + retVal = False + elif rc == 2: + retVal = True + elif rc == 3: + path = "all" + retVal = True + + self._initLabelAnswers[path] = retVal + return retVal + + def resetReinitInconsistentLVMQuestion(self): + self._inconsistentLVMAnswers = {} + + def questionReinitInconsistentLVM(self, pv_names=None, lv_name=None, vg_name=None): + + retVal = False # The less destructive default + allSet = frozenset(["all"]) + + if not pv_names or (lv_name is None and vg_name is None): + return retVal + + # We are caching answers so that we don't ask for ignoring + # in each storage.reset() again (note that reinitialization is + # done right after confirmation in dialog, not as a planned + # action). + key = frozenset(pv_names) + if key in self._inconsistentLVMAnswers: + log.info("UI not asking about disk initialization, " + "using cached answer: %s" % self._inconsistentLVMAnswers[key]) + return self._inconsistentLVMAnswers[key] + elif allSet in self._inconsistentLVMAnswers: + log.info("UI not asking about disk initialization, " + "using cached answer: %s" % self._inconsistentLVMAnswers[allSet]) + return self._inconsistentLVMAnswers[allSet] + + if vg_name is not None: + message = "Volume Group %s" % vg_name + elif lv_name is not None: + message = "Logical Volume %s" % lv_name + + na = {'msg': message, 'pvs': ", ".join(pv_names)} + rc = self.messageWindow(_("Warning"), + _("Error processing LVM.\n" + "There is inconsistent LVM data on %(msg)s. You can " + "reinitialize all related PVs (%(pvs)s) which will erase " + "the LVM metadata, or ignore which will preserve the " + "contents. This action may also be applied to all other " + "PVs with inconsistent metadata.") % na, + type="custom", + custom_buttons = [ _("_Ignore"), + _("Ignore _all"), + _("_Re-initialize"), + _("Re-ini_tialize all") ], + custom_icon="question") + if rc == 0: + retVal = False + elif rc == 1: + key = allSet + retVal = False + elif rc == 2: + retVal = True + elif rc == 3: + key = allSet + retVal = True + + self._inconsistentLVMAnswers[key] = retVal + return retVal + + def beep(self): + gtk.gdk.beep() + + def kickstartErrorWindow(self, text): + s = _("The following error was found while parsing the " + "kickstart configuration file:\n\n%s") %(text,) + return self.messageWindow(_("Error Parsing Kickstart Config"), + s, + type = "custom", + custom_buttons = [_("_Exit installer")], + custom_icon = "error") + + def getBootdisk (self): + return None + + def run(self, anaconda): + self.anaconda = anaconda + + if anaconda.keyboard and not flags.livecdInstall: + anaconda.keyboard.activate() + + self.icw = InstallControlWindow (self.anaconda) + self.icw.run (self.runres) + + def setSteps(self, anaconda): + pass + +class InstallControlWindow: + def setLanguage (self): + if not self.__dict__.has_key('window'): return + + self.reloadRcQueued = 1 + + # need to reload our widgets + self.setLtR() + + # reload the glade file, although we're going to keep our toplevel + self.loadGlade() + + self.window.destroy() + self.window = self.mainxml.get_widget("mainWindow") + + self.createWidgets() + self.connectSignals() + self.setScreen() + self.window.show() + + def setLtR(self): + ltrrtl = gettext.dgettext("gtk20", "default:LTR") + if ltrrtl == "default:RTL": + gtk.widget_set_default_direction (gtk.TEXT_DIR_RTL) + elif ltrrtl == "default:LTR": + gtk.widget_set_default_direction (gtk.TEXT_DIR_LTR) + else: + log.error("someone didn't translate the ltr bits right: %s" %(ltrrtl,)) + gtk.widget_set_default_direction (gtk.TEXT_DIR_LTR) + + def prevClicked (self, *args): + try: + self.currentWindow.getPrev () + except StayOnScreen: + return + + self.anaconda.dispatch.gotoPrev() + self.setScreen () + + def nextClicked (self, *args): + try: + rc = self.currentWindow.getNext () + except StayOnScreen: + return + + self.anaconda.dispatch.gotoNext() + self.setScreen () + + def debugClicked (self, *args): + try: + # switch to VC1 so we can debug + isys.vtActivate (1) + except SystemError: + pass + import pdb + try: + pdb.set_trace() + except: + sys.exit(-1) + try: + # switch back + isys.vtActivate (6) + except SystemError: + pass + + def handleRenderCallback(self): + self.currentWindow.renderCallback() + if flags.autostep: + if flags.autoscreenshot: + # let things settle down graphically + processEvents() + time.sleep(1) + takeScreenShot() + self.nextClicked() + else: + gobject.source_remove(self.handle) + + def setScreen (self): + (step, anaconda) = self.anaconda.dispatch.currentStep() + if step is None: + gtk.main_quit() + return + + if not stepToClass[step]: + if self.anaconda.dispatch.dir == DISPATCH_FORWARD: + return self.nextClicked() + else: + return self.prevClicked() + + (file, className) = stepToClass[step] + newScreenClass = None + + while True: + try: + found = imputil.imp.find_module(file) + loaded = imputil.imp.load_module(className, found[0], found[1], + found[2]) + newScreenClass = loaded.__dict__[className] + break + except ImportError, e: + print(e) + win = MessageWindow(_("Error!"), + _("An error occurred when attempting " + "to load an installer interface " + "component.\n\nclassName = %s") + % (className,), + type="custom", custom_icon="warning", + custom_buttons=[_("_Exit"), + _("_Retry")]) + if not win.getrc(): + msg = _("The system will now reboot.") + buttons = [_("_Reboot")] + + MessageWindow(_("Exiting"), + msg, + type="custom", + custom_icon="warning", + custom_buttons=buttons) + sys.exit(0) + + ics = InstallControlState (self) + ics.setPrevEnabled(self.anaconda.dispatch.canGoBack()) + self.destroyCurrentWindow() + self.currentWindow = newScreenClass(ics) + + new_screen = self.currentWindow.getScreen(anaconda) + + # If the getScreen method returned None, that means the screen did not + # want to be displayed for some reason and we should skip to the next + # step. However, we do not want to remove the current step from the + # list as later events may cause the screen to be displayed. + if not new_screen: + if self.anaconda.dispatch.dir == DISPATCH_FORWARD: + self.anaconda.dispatch.gotoNext() + else: + self.anaconda.dispatch.gotoPrev() + + return self.setScreen() + + self.update (ics) + + self.installFrame.add(new_screen) + self.installFrame.show_all() + + self.currentWindow.focus() + + self.handle = gobject.idle_add(self.handleRenderCallback) + + if self.reloadRcQueued: + self.window.reset_rc_styles() + self.reloadRcQueued = 0 + + def destroyCurrentWindow(self): + children = self.installFrame.get_children () + if children: + child = children[0] + self.installFrame.remove (child) + child.destroy () + self.currentWindow = None + + def update (self, ics): + self.mainxml.get_widget("backButton").set_sensitive(ics.getPrevEnabled()) + self.mainxml.get_widget("nextButton").set_sensitive(ics.getNextEnabled()) + + if ics.getGrabNext(): + self.mainxml.get_widget("nextButton").grab_focus() + + self.mainxml.get_widget("nextButton").set_flags(gtk.HAS_DEFAULT) + + def __init__ (self, anaconda): + self.reloadRcQueued = 0 + self.currentWindow = None + self.anaconda = anaconda + self.handle = None + + def keyRelease (self, window, event): + if ((event.keyval == gtk.keysyms.KP_Delete + or event.keyval == gtk.keysyms.Delete) + and (event.state & (gtk.gdk.CONTROL_MASK | gtk.gdk.MOD1_MASK))): + self._doExit() + # XXX hack: remove me when the accelerators work again. + elif (event.keyval == gtk.keysyms.F12 + and self.currentWindow.getICS().getNextEnabled()): + self.nextClicked() + elif (event.keyval == gtk.keysyms.Print + and event.state & gtk.gdk.SHIFT_MASK): + takeScreenShot() + + def _doExit (self, *args): + gtk.main_quit() + os._exit(0) + + def _doExitConfirm (self, win = None, *args): + # FIXME: translate the string + win = MessageWindow(_("Exit installer"), + _("Are you sure you wish to exit the installer?"), + type="custom", custom_icon="question", + custom_buttons = [_("Cancel"), _("_Exit installer")], + parent = win) + if win.getrc() == 0: + return True + self._doExit() + + def createWidgets (self): + self.window.set_title(_("%s Installer") %(productName,)) + + i = self.mainxml.get_widget("headerImage") + p = readImageFromFile("anaconda_header.png", + dither = False, image = i) + if p is None: + print(_("Unable to load title bar")) + if (gtk.gdk.screen_height() < 600) or \ + (gtk.gdk.screen_height() <= 675 and not runningMiniWm()): + i.hide() + self.window.set_resizable(True) + self.window.set_size_request(-1, -1) + self.window.fullscreen() + else: + self.window.set_size_request(800, 600) + self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS) + # this is kind of poor, but if we're running in the live mode + # and the dpi is something weird, give ourselves as much + # space as we can. this gets things to fit with a dpi + # of up to 147 + if not runningMiniWm(): + i.hide() + + if flags.debug: + self.mainxml.get_widget("debugButton").show_now() + self.installFrame = self.mainxml.get_widget("installFrame") + + def connectSignals(self): + sigs = { "on_nextButton_clicked": self.nextClicked, + "on_rebootButton_clicked": self._doExit, + "on_closeButton_clicked": self._doExit, + "on_backButton_clicked": self.prevClicked, + "on_debugButton_clicked": self.debugClicked, + "on_mainWindow_key_release_event": self.keyRelease, + "on_mainWindow_delete_event": self._doExitConfirm, } + self.mainxml.signal_autoconnect(sigs) + + def loadGlade(self): + self.mainxml = gtk.glade.XML(findGladeFile("anaconda.glade"), + domain="anaconda") + + def setup_window (self, runres): + self.setLtR() + + self.loadGlade() + self.window = self.mainxml.get_widget("mainWindow") + + self.createWidgets() + self.connectSignals() + + self.setScreen() + self.window.show() + + def busyCursorPush(self): + rootPushBusyCursor() + + def busyCursorPop(self): + rootPopBusyCursor() + + def run (self, runres): + self.setup_window(runres) + gtk.main() + +class InstallControlState: + def __init__ (self, cw): + self.cw = cw + self.prevEnabled = True + self.nextEnabled = True + self.title = _("Install Window") + self.grabNext = True + + def setTitle (self, title): + self.title = title + self.cw.update (self) + + def getTitle (self): + return self.title + + def setPrevEnabled (self, value): + if value == self.prevEnabled: return + self.prevEnabled = value + self.cw.update (self) + + def getPrevEnabled (self): + return self.prevEnabled + + def setNextEnabled (self, value): + if value == self.nextEnabled: return + self.nextEnabled = value + self.cw.update (self) + + def getNextEnabled (self): + return self.nextEnabled + + def setScreenPrev (self): + self.cw.prevClicked () + + def setScreenNext (self): + self.cw.nextClicked () + + def setGrabNext (self, value): + self.grabNext = value + self.cw.update (self) + + def getGrabNext (self): + return self.grabNext + + def getICW (self): + return self.cw diff --git a/image.py b/image.py new file mode 100644 index 0000000..e15de12 --- /dev/null +++ b/image.py @@ -0,0 +1,325 @@ +# +# image.py: Support methods for CD/DVD and ISO image installations. +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import isys, iutil +import os, os.path, stat, string, sys +from constants import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") + +_arch = iutil.getArch() + +def findIsoImages(path, messageWindow): + flush = os.stat(path) + files = os.listdir(path) + arch = _arch + discImages = {} + + for file in files: + what = path + '/' + file + if not isys.isIsoImage(what): + continue + + try: + isys.losetup("/dev/loop2", what, readOnly = 1) + except SystemError: + continue + + try: + isys.mount("/dev/loop2", "/mnt/cdimage", fstype = "iso9660", + readOnly = True) + for num in range(1, 10): + if os.access("/mnt/cdimage/.discinfo", os.R_OK): + f = open("/mnt/cdimage/.discinfo") + try: + f.readline() # skip timestamp + f.readline() # skip release description + discArch = string.strip(f.readline()) # read architecture + discNum = getDiscNums(f.readline().strip()) + except: + discArch = None + discNum = [ 0 ] + + f.close() + + if num not in discNum or discArch != arch: + continue + + # if it's disc1, it needs to have images/install.img + if (num == 1 and not + os.access("/mnt/cdimage/images/install.img", os.R_OK)): + log.warning("%s doesn't have a install.img, skipping" %(what,)) + continue + # we only install binary packages, so let's look for a + # product/ dir and hope that this avoids getting + # discs from the src.rpm set + if not os.path.isdir("/mnt/cdimage/%s" %(productPath,)): + log.warning("%s doesn't have binary RPMS, skipping" %(what,)) + continue + + # warn user if images appears to be wrong size + if os.stat(what)[stat.ST_SIZE] % 2048: + rc = messageWindow(_("Warning"), + _("The ISO image %s has a size which is not " + "a multiple of 2048 bytes. This may mean " + "it was corrupted on transfer to this computer." + "\n\n" + "It is recommended that you exit and abort your " + "installation, but you can choose to continue if " + "you think this is in error.") % (file,), + type="custom", custom_icon="warning", + custom_buttons= [_("_Exit installer"), + _("_Continue")]) + if rc == 0: + sys.exit(0) + + discImages[num] = file + + isys.umount("/mnt/cdimage", removeDir=False) + except SystemError: + pass + + isys.unlosetup("/dev/loop2") + + return discImages + +def getDiscNums(line): + # get the disc numbers for this disc + nums = line.split(",") + if nums == ['ALL']: # Treat "ALL" DVD as disc 1 + return [1] + discNums = [] + for num in nums: + discNums.append(int(num)) + return discNums + +def getMediaId(path): + if os.access("%s/.discinfo" % path, os.R_OK): + f = open("%s/.discinfo" % path) + newStamp = f.readline().strip() + f.close() + + return newStamp + else: + return None + +# This mounts the directory containing the iso images, and places the +# mount point in /mnt/isodir. +def mountDirectory(methodstr, messageWindow): + if methodstr.startswith("hd:"): + method = methodstr[3:] + if method.count(":") == 1: + (device, path) = method.split(":") + fstype = "auto" + else: + (device, fstype, path) = method.split(":") + + if not device.startswith("/dev/") and not device.startswith("UUID=") \ + and not device.startswith("LABEL="): + device = "/dev/%s" % device + elif methodstr.startswith("nfsiso:"): + device = methodstr[7:] + fstype = "nfs" + else: + return + + # No need to mount it again. + if os.path.ismount("/mnt/isodir"): + return + + while True: + try: + isys.mount(device, "/mnt/isodir", fstype = fstype) + break + except SystemError, msg: + log.error("couldn't mount ISO source directory: %s" % msg) + ans = messageWindow(_("Couldn't Mount ISO Source"), + _("An error occurred mounting the source " + "device %s. This may happen if your ISO " + "images are located on an advanced storage " + "device like LVM or RAID, or if there was a " + "problem mounting a partition. Click exit " + "to abort the installation.") + % (device,), type="custom", custom_icon="error", + custom_buttons=[_("_Exit"), _("_Retry")]) + + if ans == 0: + sys.exit(0) + else: + continue + +def mountImage(isodir, tree, discnum, messageWindow, discImages={}): + if os.path.ismount(tree): + raise SystemError, "trying to mount already-mounted iso image!" + + if discImages == {}: + discImages = findIsoImages(isodir, messageWindow) + + while True: + try: + isoImage = "%s/%s" % (isodir, discImages[discnum]) + isys.losetup("/dev/loop1", isoImage, readOnly = 1) + isys.mount("/dev/loop1", tree, fstype = 'iso9660', readOnly = True) + break + except: + ans = messageWindow(_("Missing ISO 9660 Image"), + _("The installer has tried to mount " + "image #%s, but cannot find it on " + "the hard drive.\n\n" + "Please copy this image to the " + "drive and click Retry. Click Exit " + "to abort the installation.") + % (discnum,), type="custom", + custom_icon="warning", + custom_buttons=[_("_Exit"), _("_Retry")]) + if ans == 0: + sys.exit(0) + elif ans == 1: + discImages = findIsoImages(isodir, messageWindow) + + return discImages + +# given groupset containing information about selected packages, use +# the disc number info in the headers to come up with message describing +# the required CDs +# +# dialog returns a value of 0 if user selected to abort install +def presentRequiredMediaMessage(anaconda): + reqcds = anaconda.backend.getRequiredMedia() + + # if only one CD required no need to pop up a message + if len(reqcds) < 2: + return + + # check what discs our currently mounted one provides + if os.access("%s/.discinfo" % anaconda.backend.ayum.tree, os.R_OK): + discNums = [] + try: + f = open("%s/.discinfo" % anaconda.backend.ayum.tree) + stamp = f.readline().strip() + descr = f.readline().strip() + arch = f.readline().strip() + discNums = getDiscNums(f.readline().strip()) + f.close() + except Exception, e: + log.critical("Exception reading discinfo: %s" %(e,)) + + log.info("discNums is %s" %(discNums,)) + haveall = 0 + s = set(reqcds) + t = set(discNums) + if s.issubset(t): + haveall = 1 + + if haveall == 1: + return + + reqcds.sort() + reqcds = map(lambda disc: "#%s" % disc, filter(lambda disc: disc != -99, reqcds)) + reqcdstr = ", ".join(reqcds) + + return anaconda.intf.messageWindow(_("Required Install Media"), + _("The software you have selected to install will require the " + "following %(productName)s %(productVersion)s " + "discs:\n\n%(reqcdstr)s\nPlease have these ready " + "before proceeding with the installation. If you need to " + "abort the installation and exit please select " + "\"Reboot\".") % {'productName': product.productName, + 'productVersion': product.productVersion, + 'reqcdstr': reqcdstr}, + type="custom", custom_icon="warning", + custom_buttons=[_("_Reboot"), _("_Back"), _("_Continue")]) + +# Find an attached CD/DVD drive with media in it that contains packages, +# and return that device name. +def scanForMedia(tree, storage): + for dev in storage.devicetree.devices: + if dev.type != "cdrom": + continue + + try: + dev.format.mount(mountpoint=tree) + except: + continue + + if not verifyMedia(tree, 1): + dev.format.unmount() + continue + + return dev.name + + return None + +def umountImage(tree, currentMedia): + if currentMedia is not None: + isys.umount(tree, removeDir=False) + isys.unlosetup("/dev/loop1") + +def unmountCD(dev, messageWindow): + if not dev: + return + + while True: + try: + dev.format.unmount() + break + except Exception, e: + log.error("exception in _unmountCD: %s" %(e,)) + messageWindow(_("Error"), + _("An error occurred unmounting the disc. " + "Please make sure you're not accessing " + "%s from the shell on tty2 " + "and then click OK to retry.") + % (dev.path,)) + +def verifyMedia(tree, discnum, timestamp=None): + if os.access("%s/.discinfo" % tree, os.R_OK): + f = open("%s/.discinfo" % tree) + + newStamp = f.readline().strip() + + try: + descr = f.readline().strip() + except: + descr = None + + try: + arch = f.readline().strip() + except: + arch = None + + try: + discs = getDiscNums(f.readline().strip()) + except: + discs = [ 0 ] + + f.close() + + if timestamp is not None: + if newStamp == timestamp and arch == _arch and discnum in discs: + return True + else: + if arch == _arch and discnum in discs: + return True + + return False diff --git a/install-sh b/install-sh new file mode 100755 index 0000000..6781b98 --- /dev/null +++ b/install-sh @@ -0,0 +1,520 @@ +#!/bin/sh +# install - install a program, script, or datafile + +scriptversion=2009-04-28.21; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. +# +# +# FSF changes to this file are in the public domain. +# +# 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. + +nl=' +' +IFS=" "" $nl" + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit=${DOITPROG-} +if test -z "$doit"; then + doit_exec=exec +else + doit_exec=$doit +fi + +# Put in absolute file names if you don't have them in your path; +# or use environment vars. + +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} + +posix_glob='?' +initialize_posix_glob=' + test "$posix_glob" != "?" || { + if (set -f) 2>/dev/null; then + posix_glob= + else + posix_glob=: + fi + } +' + +posix_mkdir= + +# Desired mode of installed file. +mode=0755 + +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog +rmcmd="$rmprog -f" +stripcmd= + +src= +dst= +dir_arg= +dst_arg= + +copy_on_change=false +no_target_directory= + +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... + +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. + +Options: + --help display this help and exit. + --version display version info and exit. + + -c (ignored) + -C install only if different (preserve the last data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -s $stripprog installed files. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. + +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG +" + +while test $# -ne 0; do + case $1 in + -c) ;; + + -C) copy_on_change=true;; + + -d) dir_arg=true;; + + -g) chgrpcmd="$chgrpprog $2" + shift;; + + --help) echo "$usage"; exit $?;; + + -m) mode=$2 + case $mode in + *' '* | *' '* | *' +'* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; + + -o) chowncmd="$chownprog $2" + shift;; + + -s) stripcmd=$stripprog;; + + -t) dst_arg=$2 + shift;; + + -T) no_target_directory=true;; + + --version) echo "$0 $scriptversion"; exit $?;; + + --) shift + break;; + + -*) echo "$0: invalid option: $1" >&2 + exit 1;; + + *) break;; + esac + shift +done + +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + done +fi + +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call `install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi + +if test -z "$dir_arg"; then + trap '(exit $?); exit' 1 2 13 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi + +for src +do + # Protect names starting with `-'. + case $src in + -*) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + + dst=$dst_arg + # Protect names starting with `-'. + case $dst in + -*) dst=./$dst;; + esac + + # If destination is a directory, append the input filename; won't work + # if double slashes aren't ignored. + if test -d "$dst"; then + if test -n "$no_target_directory"; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dst=$dstdir/`basename "$src"` + dstdir_status=0 + else + # Prefer dirname, but fall back on a substitute if dirname fails. + dstdir=` + (dirname "$dst") 2>/dev/null || + expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$dst" : 'X\(//\)[^/]' \| \ + X"$dst" : 'X\(//\)$' \| \ + X"$dst" : 'X\(/\)' \| . 2>/dev/null || + echo X"$dst" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q' + ` + + test -d "$dstdir" + dstdir_status=$? + fi + fi + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # Create intermediate dirs using mode 755 as modified by the umask. + # This is like FreeBSD 'install' as of 1997-10-28. + umask=`umask` + case $stripcmd.$umask in + # Optimize common cases. + *[2367][2367]) mkdir_umask=$umask;; + .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; + + *[0-7]) + mkdir_umask=`expr $umask + 22 \ + - $umask % 100 % 40 + $umask % 20 \ + - $umask % 10 % 4 + $umask % 2 + `;; + *) mkdir_umask=$umask,go-w;; + esac + + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + case $umask in + *[123567][0-7][0-7]) + # POSIX mkdir -p sets u+wx bits regardless of umask, which + # is incompatible with FreeBSD 'install' when (umask & 300) != 0. + ;; + *) + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 + + if (umask $mkdir_umask && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writeable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + ls_ld_tmpdir=`ls -ld "$tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/d" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null + fi + trap '' 0;; + esac;; + esac + + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # The umask is ridiculous, or mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + -*) prefix='./';; + *) prefix='';; + esac + + eval "$initialize_posix_glob" + + oIFS=$IFS + IFS=/ + $posix_glob set -f + set fnord $dstdir + shift + $posix_glob set +f + IFS=$oIFS + + prefixes= + + for d + do + test -z "$d" && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask=$mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=$dstdir/_inst.$$_ + rmtmp=$dstdir/_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && + + # 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 $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + + eval "$initialize_posix_glob" && + $posix_glob set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + $posix_glob set +f && + + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd -f "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done + +# Local variables: +# eval: (add-hook 'write-file-hooks 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC" +# time-stamp-end: "; # UTC" +# End: diff --git a/installclass.py b/installclass.py new file mode 100644 index 0000000..6f8cefb --- /dev/null +++ b/installclass.py @@ -0,0 +1,335 @@ +# +# installclass.py: This is the prototypical class for workstation, server, and +# kickstart installs. The interface to BaseInstallClass is *public* -- +# ISVs/OEMs can customize the install by creating a new derived type of this +# class. +# +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +# Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os, sys, iutil +import isys +import string +import language +import imputil +import types + +from constants import * +from meh.filer import * +from product import * +from storage.partspec import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") + +from flags import flags + +class BaseInstallClass(object): + # default to not being hidden + hidden = 0 + pixmap = None + showMinimal = 1 + showLoginChoice = 0 + _description = "" + _descriptionFields = () + name = "base" + pkgstext = "" + # default to showing the upgrade option + showUpgrade = True + bootloaderTimeoutDefault = None + + bugFiler = AbstractFiler(product.bugUrl, product.bugUrl, + product.productVersion, product.productName) + + # list of of (txt, grplist) tuples for task selection screen + tasks = [] + + # don't select this class by default + default = 0 + + # by default, place this under the "install" category; it gets it's + # own toplevel category otherwise + parentClass = ( _("Install on System"), "install.png" ) + + def _get_description(self): + return _(self._description) % self._descriptionFields + description = property(_get_description) + + def postAction(self, anaconda): + anaconda.backend.postAction(anaconda) + + def setSteps(self, anaconda): + dispatch = anaconda.dispatch + dispatch.setStepList( + "language", + "keyboard", + "welcome", + "filtertype", + "filter", + "storageinit", + "findrootparts", + "betanag", + "installtype", + "cleardiskssel", + "parttype", + "autopartitionexecute", + "partition", + "storagedone", + "bootloadersetup", + "bootloader", + "network", + "timezone", + "accounts", + "reposetup", + "basepkgsel", + "tasksel", + "postselection", + "confirminstall", + "reipl", + "install", + "enablefilesystems", + "setuptime", + "preinstallconfig", + "installpackages", + "postinstallconfig", + "writeconfig", + "firstboot", + "instbootloader", + "dopostaction", + "postscripts", + "writeksconfig", + "methodcomplete", + "copylogs", + "setfilecon", + "complete" + ) + + if not BETANAG: + dispatch.skipStep("betanag", permanent=1) + + if not iutil.isX86(): + dispatch.skipStep("bootloader", permanent=1) + + # allow backends to disable interactive package selection + if not anaconda.backend.supportsPackageSelection: + dispatch.skipStep("tasksel", skip = 1, permanent=1) + dispatch.skipStep("group-selection", skip = 1, permanent=1) + + # allow install classes to turn off the upgrade + if not self.showUpgrade or not anaconda.backend.supportsUpgrades: + dispatch.skipStep("findrootparts", skip = 1) + + # 'noupgrade' can be used on the command line to force not looking + # for partitions to upgrade. useful in some cases... + if flags.cmdline.has_key("noupgrade"): + dispatch.skipStep("findrootparts", skip = 1) + + # upgrade will also always force looking for an upgrade. + if flags.cmdline.has_key("upgrade"): + dispatch.skipStep("findrootparts", skip = 0) + + # if there's only one install class, it doesn't make much sense + # to show it + if len(availableClasses()) < 2: + dispatch.skipStep("installtype", permanent=1) + + # allow interface backends to skip certain steps. + anaconda.intf.setSteps(anaconda) + + # modifies the uri from installmethod.getMethodUri() to take into + # account any installclass specific things including multiple base + # repositories. takes a string or list of strings, returns a dict + # with string keys and list values {%repo: %uri_list} + def getPackagePaths(self, uri): + if not type(uri) == types.ListType: + uri = [uri,] + + return {'base': uri} + + def setPackageSelection(self, anaconda): + pass + + def setGroupSelection(self, anaconda): + grps = anaconda.backend.getDefaultGroups(anaconda) + map(lambda x: anaconda.backend.selectGroup(x), grps) + + def getBackend(self): + # this should be overriden in distro install classes + from backend import AnacondaBackend + return AnacondaBackend + + def setDefaultPartitioning(self, storage, platform): + autorequests = [PartSpec(mountpoint="/", fstype=storage.defaultFSType, + size=1024, maxSize=50*1024, grow=True, + asVol=True), + PartSpec(mountpoint="/home", fstype=storage.defaultFSType, + size=100, grow=True, asVol=True, requiredSpace=50*1024)] + + bootreq = platform.setDefaultPartitioning() + if bootreq: + autorequests.extend(bootreq) + + (minswap, maxswap) = iutil.swapSuggestion() + autorequests.append(PartSpec(fstype="swap", size=minswap, maxSize=maxswap, + grow=True, asVol=True)) + + storage.autoPartitionRequests = autorequests + + def configure(self, anaconda): + anaconda.bootloader.timeout = self.bootloaderTimeoutDefault + + def versionMatches(self, oldver): + pass + + def productMatches(self, oldprod): + pass + + def productUpgradable(self, oldprod, oldver): + return self.productMatches(oldprod) and self.versionMatches(oldver) + + def __init__(self): + pass + +allClasses = [] +allClasses_hidden = [] + +# returns ( className, classObject, classLogo ) tuples +def availableClasses(showHidden=0): + global allClasses + global allClasses_hidden + + def _ordering(first, second): + ((name1, obj, logo), priority1) = first + ((name2, obj, logo), priority2) = second + + if priority1 < priority2: + return -1 + elif priority1 > priority2: + return 1 + + if name1 < name2: + return -1 + elif name1 > name2: + return 1 + + return 0 + + if not showHidden: + if allClasses: return allClasses + else: + if allClasses_hidden: return allClasses_hidden + + if os.access("installclasses", os.R_OK): + path = "installclasses" + elif os.access("/tmp/updates/installclasses", os.R_OK): + path = "/tmp/updates/installclasses" + elif os.access("/tmp/product/installclasses", os.R_OK): + path = "/tmp/product/installclasses" + else: + path = "/usr/lib/anaconda/installclasses" + + # append the location of installclasses to the python path so we + # can import them + sys.path.insert(0, path) + + files = os.listdir(path) + done = {} + list = [] + for file in files: + if file[0] == '.': continue + if len (file) < 4: + continue + if file[-3:] != ".py" and file[-4:-1] != ".py": + continue + mainName = string.split(file, ".")[0] + if done.has_key(mainName): continue + done[mainName] = 1 + + try: + found = imputil.imp.find_module(mainName) + except: + log.warning ("module import of %s failed: %s" % (mainName, sys.exc_type)) + continue + + try: + loaded = imputil.imp.load_module(mainName, found[0], found[1], found[2]) + + obj = loaded.InstallClass + + if obj.__dict__.has_key('sortPriority'): + sortOrder = obj.sortPriority + else: + sortOrder = 0 + + if obj.__dict__.has_key('arch'): + if obj.arch != iutil.getArch(): + obj.hidden = 1 + + if obj.hidden == 0 or showHidden == 1: + list.append(((obj.name, obj, obj.pixmap), sortOrder)) + except: + log.warning ("module import of %s failed: %s" % (mainName, sys.exc_type)) + if flags.debug: raise + else: continue + + list.sort(_ordering) + for (item, priority) in list: + if showHidden: + allClasses_hidden.append(item) + else: + allClasses.append(item) + + if showHidden: + return allClasses_hidden + else: + return allClasses + +def getBaseInstallClass(): + # figure out what installclass we should base on. + allavail = availableClasses(showHidden = 1) + avail = availableClasses(showHidden = 0) + if len(avail) == 1: + (cname, cobject, clogo) = avail[0] + log.info("using only installclass %s" %(cname,)) + elif len(allavail) == 1: + (cname, cobject, clogo) = allavail[0] + log.info("using only installclass %s" %(cname,)) + + # Use the highest priority install class if more than one found. + elif len(avail) > 1: + (cname, cobject, clogo) = avail.pop() + log.info('%s is the highest priority installclass, using it' % cname) + elif len(allavail) > 1: + (cname, cobject, clogo) = allavail.pop() + log.info('%s is the highest priority installclass, using it' % cname) + + # Default to the base installclass if nothing else is found. + else: + raise RuntimeError, "Unable to find an install class to use!!!" + + return cobject + +baseclass = getBaseInstallClass() + +# we need to be able to differentiate between this and custom +class DefaultInstall(baseclass): + def __init__(self): + BaseInstallClass.__init__(self) + diff --git a/installclasses/Makefile.am b/installclasses/Makefile.am new file mode 100644 index 0000000..0b8ddd2 --- /dev/null +++ b/installclasses/Makefile.am @@ -0,0 +1,23 @@ +# installclasses/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +installclassesdir = $(libdir)/$(PACKAGE_NAME)/installclasses +installclasses_PYTHON = *.py + +MAINTAINERCLEANFILES = Makefile.in diff --git a/installclasses/Makefile.in b/installclasses/Makefile.in new file mode 100644 index 0000000..b0a2523 --- /dev/null +++ b/installclasses/Makefile.in @@ -0,0 +1,519 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# installclasses/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = installclasses +DIST_COMMON = $(installclasses_PYTHON) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(installclassesdir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +installclassesdir = $(libdir)/$(PACKAGE_NAME)/installclasses +installclasses_PYTHON = *.py +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign installclasses/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign installclasses/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-installclassesPYTHON: $(installclasses_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(installclassesdir)" || $(MKDIR_P) "$(DESTDIR)$(installclassesdir)" + @list='$(installclasses_PYTHON)'; dlist=; list2=; test -n "$(installclassesdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(installclassesdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(installclassesdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(installclassesdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(installclassesdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-installclassesPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(installclasses_PYTHON)'; test -n "$(installclassesdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(installclassesdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(installclassesdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(installclassesdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(installclassesdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(installclassesdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(installclassesdir)" && rm -f $$fileso +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(installclassesdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-installclassesPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-installclassesPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-installclassesPYTHON \ + install-man install-pdf install-pdf-am install-ps \ + install-ps-am install-strip installcheck installcheck-am \ + installdirs maintainer-clean maintainer-clean-generic \ + mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ + ps ps-am uninstall uninstall-am uninstall-installclassesPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/installclasses/fedora.py b/installclasses/fedora.py new file mode 100644 index 0000000..1c05839 --- /dev/null +++ b/installclasses/fedora.py @@ -0,0 +1,132 @@ +# +# fedora.py +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +from installclass import BaseInstallClass +from constants import * +from product import * +from meh.filer import * +from flags import flags +import os, types +import iutil + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import installmethod +import yuminstall + +import rpmUtils.arch + +class InstallClass(BaseInstallClass): + # name has underscore used for mnemonics, strip if you dont need it + id = "fedora" + name = N_("_Fedora") + _description = N_("The default installation of %s includes a set of " + "software applicable for general internet usage. " + "You can optionally select a different set of software " + "now.") + _descriptionFields = (productName,) + sortPriority = 10000 + if productName.startswith("Red Hat Enterprise"): + hidden = 1 + + tasks = [(N_("Graphical Desktop"), + ["admin-tools", "base", "base-x", "core", "editors", "fonts", + "games", "gnome-desktop", "graphical-internet", "graphics", + "hardware-support", "input-methods", "java", "office", + "printing", "sound-and-video", "text-internet"]), + (N_("Software Development"), + ["base", "base-x", "core", "development-libs", + "development-tools", "editors", "fonts", "gnome-desktop", + "gnome-software-development", "graphical-internet", "graphics", + "hardware-support", "input-methods", "java", "text-internet", + "x-software-development"]), + (N_("Web Server"), + ["admin-tools", "base", "base-x", "core", "editors", + "gnome-desktop", "graphical-internet", "hardware-support", + "java", "text-internet", "web-server"]), + (N_("Minimal"), ["core"])] + + bugFiler = BugzillaFiler("https://bugzilla.redhat.com/xmlrpc.cgi", + "https://bugzilla.redhat.com/", + product.productVersion, product.productName) + + def getPackagePaths(self, uri): + if not type(uri) == types.ListType: + uri = [uri,] + + return {'Installation Repo': uri} + + def configure(self, anaconda): + BaseInstallClass.configure(self, anaconda) + BaseInstallClass.setDefaultPartitioning(self, + anaconda.storage, + anaconda.platform) + + def setGroupSelection(self, anaconda): + BaseInstallClass.setGroupSelection(self, anaconda) + map(lambda x: anaconda.backend.selectGroup(x), ["core"]) + + def setSteps(self, anaconda): + BaseInstallClass.setSteps(self, anaconda) + anaconda.dispatch.skipStep("partition") + + def getBackend(self): + if flags.livecdInstall: + import livecd + return livecd.LiveCDCopyBackend + else: + return yuminstall.YumBackend + + def productMatches(self, oldprod): + if oldprod is None: + return False + + if oldprod.startswith(productName): + return True + + productUpgrades = { + "Fedora Core": ("Red Hat Linux", ), + "Fedora": ("Fedora Core", ) + } + + if productUpgrades.has_key(productName): + acceptable = productUpgrades[productName] + else: + acceptable = () + + for p in acceptable: + if oldprod.startswith(p): + return True + + return False + + def versionMatches(self, oldver): + try: + oldVer = float(oldver) + newVer = float(productVersion) + except ValueError: + return True + + # This line means we do not support upgrading from anything older + # than two versions ago! + return newVer > oldVer and newVer - oldVer <= 2 + + def __init__(self): + BaseInstallClass.__init__(self) diff --git a/installclasses/rhel.py b/installclasses/rhel.py new file mode 100644 index 0000000..b78c145 --- /dev/null +++ b/installclasses/rhel.py @@ -0,0 +1,160 @@ +# +# rhel.py +# +# Copyright (C) 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +from installclass import BaseInstallClass +from constants import * +from product import * +from meh.filer import * +from flags import flags +import os +import types +import iutil + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import installmethod +import yuminstall + +import rpmUtils.arch + +class InstallClass(BaseInstallClass): + # name has underscore used for mnemonics, strip if you dont need it + id = "rhel" + name = N_("Red Hat Enterprise Linux") + _description = N_("The default installation of %s is a minimal install. " + "You can optionally select a different set of software " + "now.") + _descriptionFields = (productName,) + sortPriority = 10000 + if not productName.startswith("Red Hat Enterprise"): + hidden = 1 + + bootloaderTimeoutDefault = 5 + + tasks = [(N_("Minimal"), ["core"]), + (N_("Desktop"), + ["backup-client", "base", "compat-libraries", "console-internet", + "debugging", "directory-client", "fonts", + "legacy-unix", "core", "network-file-system-client", + "network-tools", "print-client", "virtualization", "vpn", + "basic-desktop", "desktop-debugging", "desktop-platform", + "general-desktop", "graphical-admin-tools", "input-methods", + "legacy-x", "x11","office-suite", "graphics", + "virtualization-client"]), + (N_("Software Development"), + ["backup-client", "base", "compat-libraries", "console-internet", + "debugging", "directory-client", "fonts", + "legacy-unix", "core", "network-file-system-client", + "network-tools", "print-client", "virtualization", "vpn", + "basic-desktop", "desktop-debugging", "desktop-platform", + "general-desktop", "graphical-admin-tools", "input-methods", + "legacy-x", "x11", "virtualization-client", "emacs", "tex", + "desktop-platform-devel", "development", "eclipse", + "server-platform-devel", "technical-writing"]), + (N_("Web Server"), + ["backup-client", "base", "compat-libraries", "console-internet", + "debugging", "directory-client", "legacy-unix", + "core", "network-file-system-client", "network-tools", + "web-server", "additional-web-server", "server-platform", + "mysql", "php", "postgresql", "rails", "turbogears", + "system-admin-tools"]), + (N_("Advanced Server"), + ["backup-client", "base", "compat-libraries", "console-internet", + "debugging", "directory-client", "legacy-unix", + "core", "network-file-system-client", "network-tools", + "web-server", "server-platform", + "mysql", "php", "postgresql", "rails", "turbogears", + "cifs-file-server", "clustering", "clustered-storage", + "directory-server", "mail-server", "ftp-server", + "network-server", "nfs-file-server", "print-server", + "system-admin-tools"])] + + bugFiler = BugzillaFiler("https://bugzilla.redhat.com/xmlrpc.cgi", + "https://bugzilla.redhat.com/", + product.productVersion, product.productName) + + def getPackagePaths(self, uri): + if not type(uri) == types.ListType: + uri = [uri,] + + return {'Installation Repo': uri} + + def configure(self, anaconda): + BaseInstallClass.configure(self, anaconda) + BaseInstallClass.setDefaultPartitioning(self, + anaconda.storage, + anaconda.platform) + + def setGroupSelection(self, anaconda): + BaseInstallClass.setGroupSelection(self, anaconda) + map(lambda x: anaconda.backend.selectGroup(x), ["core"]) + + def setSteps(self, anaconda): + BaseInstallClass.setSteps(self, anaconda) + anaconda.dispatch.skipStep("partition") + + def getBackend(self): + if flags.livecdInstall: + import livecd + return livecd.LiveCDCopyBackend + else: + return yuminstall.YumBackend + + def productMatches(self, oldprod): + if oldprod is None: + return False + + if oldprod.startswith(productName): + return True + + productUpgrades = { + "Red Hat Enterprise Linux AS": ("Red Hat Linux Advanced Server", ), + "Red Hat Enterprise Linux WS": ("Red Hat Linux Advanced Workstation",), + # FIXME: this probably shouldn't be in a release... + "Red Hat Enterprise Linux": ("Red Hat Linux Advanced Server", + "Red Hat Linux Advanced Workstation", + "Red Hat Enterprise Linux AS", + "Red Hat Enterprise Linux ES", + "Red Hat Enterprise Linux WS"), + "Red Hat Enterprise Linux Server": ("Red Hat Enterprise Linux AS", + "Red Hat Enterprise Linux ES", + "Red Hat Enterprise Linux WS", + "Red Hat Enterprise Linux"), + "Red Hat Enterprise Linux Client": ("Red Hat Enterprise Linux WS", + "Red Hat Enterprise Linux Desktop", + "Red Hat Enterprise Linux"), + } + + if productUpgrades.has_key(productName): + acceptable = productUpgrades[productName] + else: + acceptable = () + + for p in acceptable: + if oldprod.startswith(p): + return True + + return False + + def versionMatches(self, oldver): + return True + + def __init__(self): + BaseInstallClass.__init__(self) diff --git a/installinterfacebase.py b/installinterfacebase.py new file mode 100644 index 0000000..6269a76 --- /dev/null +++ b/installinterfacebase.py @@ -0,0 +1,51 @@ +# +# installinterfacebase.py: a baseclass for anaconda interface classes +# +# Copyright (C) 2010 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Hans de Goede + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) +P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z) + +class InstallInterfaceBase(object): + def __init__(self): + self._warnedUnusedRaidMembers = [] + + def messageWindow(self, title, text, type="ok", default = None, + custom_buttons=None, custom_icon=None): + raise NotImplementedError + + def unusedRaidMembersWarning(self, unusedRaidMembers): + """Warn about unused BIOS RAID members""" + unusedRaidMembers = \ + filter(lambda m: m not in self._warnedUnusedRaidMembers, + unusedRaidMembers) + if unusedRaidMembers: + self._warnedUnusedRaidMembers.extend(unusedRaidMembers) + unusedRaidMembers.sort() + self.messageWindow(_("Warning"), + P_("Disk %s contains BIOS RAID metadata, but is not part of " + "any recognized BIOS RAID sets. Ignoring disk %s." % + (", ".join(unusedRaidMembers), + ", ".join(unusedRaidMembers)), + "Disks %s contain BIOS RAID metadata, but are not part of " + "any recognized BIOS RAID sets. Ignoring disks %s." % + (", ".join(unusedRaidMembers), + ", ".join(unusedRaidMembers)), + len(unusedRaidMembers)), + custom_icon="warning") diff --git a/installmethod.py b/installmethod.py new file mode 100644 index 0000000..17f1d3a --- /dev/null +++ b/installmethod.py @@ -0,0 +1,56 @@ +# +# installmethod.py - Base class for install methods +# +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +# Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import os, shutil, string +from constants import * + +import logging +log = logging.getLogger("anaconda") + +import isys, product + +def doMethodComplete(anaconda): + def _ejectDevice(): + # Ejecting the CD/DVD for kickstart is handled only after %post scripts + # have been run. + if anaconda.ksdata: + return None + + if anaconda.mediaDevice: + return anaconda.storage.devicetree.getDeviceByName(anaconda.mediaDevice) + + # If we booted off the boot.iso instead of disc 1, eject that as well. + if anaconda.stage2 and anaconda.stage2.startswith("cdrom://"): + dev = anaconda.stage2[8:].split(':')[0] + return anaconda.storage.devicetree.getDeviceByName(dev) + + anaconda.backend.complete(anaconda) + dev = _ejectDevice() + if dev: + dev.eject() + + mtab = "/dev/root / ext3 ro 0 0\n" + rootDevice = anaconda.storage.rootDevice + if rootDevice: + mtab = "/dev/root / %s ro 0 0\n" % rootDevice.format.type + + f = open(anaconda.rootPath + "/etc/mtab", "w+") + f.write(mtab) + f.close() diff --git a/isys/Makefile.am b/isys/Makefile.am new file mode 100644 index 0000000..32ba64c --- /dev/null +++ b/isys/Makefile.am @@ -0,0 +1,55 @@ +# isys/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +ISYS_SRCS = devices.c imount.c cpio.c uncpio.c lang.c \ + isofs.c linkdetect.c vio.c ethtool.c eddsupport.c iface.c \ + str.c auditd.c + +if IS_PPC +ISYS_SRCS += minifind.c +endif + +dist_noinst_HEADERS = *.h + +ISYS_CFLAGS = -DVERSION='"$(PACKAGE_VERSION)"' $(NFS_CFLAGS) \ + $(NETWORKMANAGER_CFLAGS) $(LIBNL_CFLAGS) $(LIBNM_GLIB_CFLAGS) \ + $(SELINUX_CFLAGS) +ISYS_LIBS = $(RESOLV_LIBS) $(EXT2FS_LIBS) $(ZLIB_LIBS) \ + $(DEVMAPPER_LIBS) $(BLKID_LIBS) $(X11_LIBS) $(SELINUX_LIBS) \ + $(LIBNL_LIBS) $(LIBNM_GLIB_LIBS) + +isysdir = $(libdir)/$(PACKAGE_NAME) +isys_PYTHON = *.py + +pkgpyexecdir = $(libdir)/$(PACKAGE_NAME) +pkgpythondir = $(libdir)/$(PACKAGE_NAME) + +pkgpyexec_LTLIBRARIES = _isys.la +_isys_la_CFLAGS = $(PYTHON_INCLUDES) $(ISYS_CFLAGS) +_isys_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) +_isys_la_LIBADD = $(PYTHON_LIBS) $(ISYS_LIBS) +_isys_la_SOURCES = isys.c $(ISYS_SRCS) + +noinst_LTLIBRARIES = libisys.la +libisys_la_CFLAGS = $(ISYS_CFLAGS) +libisys_la_LDFLAGS = -static +libisys_la_LIBADD = $(ISYS_LIBS) +libisys_la_SOURCES = $(ISYS_SRCS) + +MAINTAINERCLEANFILES = Makefile.in diff --git a/isys/Makefile.in b/isys/Makefile.in new file mode 100644 index 0000000..edde005 --- /dev/null +++ b/isys/Makefile.in @@ -0,0 +1,1000 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# isys/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +@IS_PPC_TRUE@am__append_1 = minifind.c +subdir = isys +DIST_COMMON = $(dist_noinst_HEADERS) $(isys_PYTHON) \ + $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(isysdir)" +LTLIBRARIES = $(noinst_LTLIBRARIES) $(pkgpyexec_LTLIBRARIES) +am__DEPENDENCIES_1 = +am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) +_isys_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) +am___isys_la_SOURCES_DIST = isys.c devices.c imount.c cpio.c uncpio.c \ + lang.c isofs.c linkdetect.c vio.c ethtool.c eddsupport.c \ + iface.c str.c auditd.c minifind.c +@IS_PPC_TRUE@am__objects_1 = _isys_la-minifind.lo +am__objects_2 = _isys_la-devices.lo _isys_la-imount.lo \ + _isys_la-cpio.lo _isys_la-uncpio.lo _isys_la-lang.lo \ + _isys_la-isofs.lo _isys_la-linkdetect.lo _isys_la-vio.lo \ + _isys_la-ethtool.lo _isys_la-eddsupport.lo _isys_la-iface.lo \ + _isys_la-str.lo _isys_la-auditd.lo $(am__objects_1) +am__isys_la_OBJECTS = _isys_la-isys.lo $(am__objects_2) +_isys_la_OBJECTS = $(am__isys_la_OBJECTS) +AM_V_lt = $(am__v_lt_$(V)) +am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY)) +am__v_lt_0 = --silent +_isys_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(_isys_la_CFLAGS) \ + $(CFLAGS) $(_isys_la_LDFLAGS) $(LDFLAGS) -o $@ +libisys_la_DEPENDENCIES = $(am__DEPENDENCIES_2) +am__libisys_la_SOURCES_DIST = devices.c imount.c cpio.c uncpio.c \ + lang.c isofs.c linkdetect.c vio.c ethtool.c eddsupport.c \ + iface.c str.c auditd.c minifind.c +@IS_PPC_TRUE@am__objects_3 = libisys_la-minifind.lo +am__objects_4 = libisys_la-devices.lo libisys_la-imount.lo \ + libisys_la-cpio.lo libisys_la-uncpio.lo libisys_la-lang.lo \ + libisys_la-isofs.lo libisys_la-linkdetect.lo libisys_la-vio.lo \ + libisys_la-ethtool.lo libisys_la-eddsupport.lo \ + libisys_la-iface.lo libisys_la-str.lo libisys_la-auditd.lo \ + $(am__objects_3) +am_libisys_la_OBJECTS = $(am__objects_4) +libisys_la_OBJECTS = $(am_libisys_la_OBJECTS) +libisys_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libisys_la_CFLAGS) \ + $(CFLAGS) $(libisys_la_LDFLAGS) $(LDFLAGS) -o $@ +DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +am__mv = mv -f +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ + $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ + $(AM_CFLAGS) $(CFLAGS) +AM_V_CC = $(am__v_CC_$(V)) +am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY)) +am__v_CC_0 = @echo " CC " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +CCLD = $(CC) +LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ + $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(AM_LDFLAGS) $(LDFLAGS) -o $@ +AM_V_CCLD = $(am__v_CCLD_$(V)) +am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY)) +am__v_CCLD_0 = @echo " CCLD " $@; +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +SOURCES = $(_isys_la_SOURCES) $(libisys_la_SOURCES) +DIST_SOURCES = $(am___isys_la_SOURCES_DIST) \ + $(am__libisys_la_SOURCES_DIST) +py_compile = $(top_srcdir)/py-compile +HEADERS = $(dist_noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = $(libdir)/$(PACKAGE_NAME) +pkgpythondir = $(libdir)/$(PACKAGE_NAME) +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +ISYS_SRCS = devices.c imount.c cpio.c uncpio.c lang.c isofs.c \ + linkdetect.c vio.c ethtool.c eddsupport.c iface.c str.c \ + auditd.c $(am__append_1) +dist_noinst_HEADERS = *.h +ISYS_CFLAGS = -DVERSION='"$(PACKAGE_VERSION)"' $(NFS_CFLAGS) \ + $(NETWORKMANAGER_CFLAGS) $(LIBNL_CFLAGS) $(LIBNM_GLIB_CFLAGS) \ + $(SELINUX_CFLAGS) + +ISYS_LIBS = $(RESOLV_LIBS) $(EXT2FS_LIBS) $(ZLIB_LIBS) \ + $(DEVMAPPER_LIBS) $(BLKID_LIBS) $(X11_LIBS) $(SELINUX_LIBS) \ + $(LIBNL_LIBS) $(LIBNM_GLIB_LIBS) + +isysdir = $(libdir)/$(PACKAGE_NAME) +isys_PYTHON = *.py +pkgpyexec_LTLIBRARIES = _isys.la +_isys_la_CFLAGS = $(PYTHON_INCLUDES) $(ISYS_CFLAGS) +_isys_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) +_isys_la_LIBADD = $(PYTHON_LIBS) $(ISYS_LIBS) +_isys_la_SOURCES = isys.c $(ISYS_SRCS) +noinst_LTLIBRARIES = libisys.la +libisys_la_CFLAGS = $(ISYS_CFLAGS) +libisys_la_LDFLAGS = -static +libisys_la_LIBADD = $(ISYS_LIBS) +libisys_la_SOURCES = $(ISYS_SRCS) +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .lo .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign isys/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign isys/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +clean-noinstLTLIBRARIES: + -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) + @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +install-pkgpyexecLTLIBRARIES: $(pkgpyexec_LTLIBRARIES) + @$(NORMAL_INSTALL) + test -z "$(pkgpyexecdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" + @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ + list2=; for p in $$list; do \ + if test -f $$p; then \ + list2="$$list2 $$p"; \ + else :; fi; \ + done; \ + test -z "$$list2" || { \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgpyexecdir)'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgpyexecdir)"; \ + } + +uninstall-pkgpyexecLTLIBRARIES: + @$(NORMAL_UNINSTALL) + @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ + for p in $$list; do \ + $(am__strip_dir) \ + echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ + $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ + done + +clean-pkgpyexecLTLIBRARIES: + -test -z "$(pkgpyexec_LTLIBRARIES)" || rm -f $(pkgpyexec_LTLIBRARIES) + @list='$(pkgpyexec_LTLIBRARIES)'; for p in $$list; do \ + dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ + test "$$dir" != "$$p" || dir=.; \ + echo "rm -f \"$${dir}/so_locations\""; \ + rm -f "$${dir}/so_locations"; \ + done +_isys.la: $(_isys_la_OBJECTS) $(_isys_la_DEPENDENCIES) + $(AM_V_CCLD)$(_isys_la_LINK) -rpath $(pkgpyexecdir) $(_isys_la_OBJECTS) $(_isys_la_LIBADD) $(LIBS) +libisys.la: $(libisys_la_OBJECTS) $(libisys_la_DEPENDENCIES) + $(AM_V_CCLD)$(libisys_la_LINK) $(libisys_la_OBJECTS) $(libisys_la_LIBADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-auditd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-cpio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-devices.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-eddsupport.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-ethtool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-iface.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-imount.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-isofs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-isys.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-lang.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-linkdetect.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-minifind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-str.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-uncpio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/_isys_la-vio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-auditd.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-cpio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-devices.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-eddsupport.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-ethtool.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-iface.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-imount.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-isofs.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-lang.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-linkdetect.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-minifind.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-str.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-uncpio.Plo@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libisys_la-vio.Plo@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +.c.lo: +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $< + +_isys_la-isys.lo: isys.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-isys.lo -MD -MP -MF $(DEPDIR)/_isys_la-isys.Tpo -c -o _isys_la-isys.lo `test -f 'isys.c' || echo '$(srcdir)/'`isys.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-isys.Tpo $(DEPDIR)/_isys_la-isys.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isys.c' object='_isys_la-isys.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-isys.lo `test -f 'isys.c' || echo '$(srcdir)/'`isys.c + +_isys_la-devices.lo: devices.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-devices.lo -MD -MP -MF $(DEPDIR)/_isys_la-devices.Tpo -c -o _isys_la-devices.lo `test -f 'devices.c' || echo '$(srcdir)/'`devices.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-devices.Tpo $(DEPDIR)/_isys_la-devices.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='devices.c' object='_isys_la-devices.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-devices.lo `test -f 'devices.c' || echo '$(srcdir)/'`devices.c + +_isys_la-imount.lo: imount.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-imount.lo -MD -MP -MF $(DEPDIR)/_isys_la-imount.Tpo -c -o _isys_la-imount.lo `test -f 'imount.c' || echo '$(srcdir)/'`imount.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-imount.Tpo $(DEPDIR)/_isys_la-imount.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='imount.c' object='_isys_la-imount.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-imount.lo `test -f 'imount.c' || echo '$(srcdir)/'`imount.c + +_isys_la-cpio.lo: cpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-cpio.lo -MD -MP -MF $(DEPDIR)/_isys_la-cpio.Tpo -c -o _isys_la-cpio.lo `test -f 'cpio.c' || echo '$(srcdir)/'`cpio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-cpio.Tpo $(DEPDIR)/_isys_la-cpio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpio.c' object='_isys_la-cpio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-cpio.lo `test -f 'cpio.c' || echo '$(srcdir)/'`cpio.c + +_isys_la-uncpio.lo: uncpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-uncpio.lo -MD -MP -MF $(DEPDIR)/_isys_la-uncpio.Tpo -c -o _isys_la-uncpio.lo `test -f 'uncpio.c' || echo '$(srcdir)/'`uncpio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-uncpio.Tpo $(DEPDIR)/_isys_la-uncpio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uncpio.c' object='_isys_la-uncpio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-uncpio.lo `test -f 'uncpio.c' || echo '$(srcdir)/'`uncpio.c + +_isys_la-lang.lo: lang.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-lang.lo -MD -MP -MF $(DEPDIR)/_isys_la-lang.Tpo -c -o _isys_la-lang.lo `test -f 'lang.c' || echo '$(srcdir)/'`lang.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-lang.Tpo $(DEPDIR)/_isys_la-lang.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lang.c' object='_isys_la-lang.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-lang.lo `test -f 'lang.c' || echo '$(srcdir)/'`lang.c + +_isys_la-isofs.lo: isofs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-isofs.lo -MD -MP -MF $(DEPDIR)/_isys_la-isofs.Tpo -c -o _isys_la-isofs.lo `test -f 'isofs.c' || echo '$(srcdir)/'`isofs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-isofs.Tpo $(DEPDIR)/_isys_la-isofs.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isofs.c' object='_isys_la-isofs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-isofs.lo `test -f 'isofs.c' || echo '$(srcdir)/'`isofs.c + +_isys_la-linkdetect.lo: linkdetect.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-linkdetect.lo -MD -MP -MF $(DEPDIR)/_isys_la-linkdetect.Tpo -c -o _isys_la-linkdetect.lo `test -f 'linkdetect.c' || echo '$(srcdir)/'`linkdetect.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-linkdetect.Tpo $(DEPDIR)/_isys_la-linkdetect.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='linkdetect.c' object='_isys_la-linkdetect.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-linkdetect.lo `test -f 'linkdetect.c' || echo '$(srcdir)/'`linkdetect.c + +_isys_la-vio.lo: vio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-vio.lo -MD -MP -MF $(DEPDIR)/_isys_la-vio.Tpo -c -o _isys_la-vio.lo `test -f 'vio.c' || echo '$(srcdir)/'`vio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-vio.Tpo $(DEPDIR)/_isys_la-vio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='vio.c' object='_isys_la-vio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-vio.lo `test -f 'vio.c' || echo '$(srcdir)/'`vio.c + +_isys_la-ethtool.lo: ethtool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-ethtool.lo -MD -MP -MF $(DEPDIR)/_isys_la-ethtool.Tpo -c -o _isys_la-ethtool.lo `test -f 'ethtool.c' || echo '$(srcdir)/'`ethtool.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-ethtool.Tpo $(DEPDIR)/_isys_la-ethtool.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ethtool.c' object='_isys_la-ethtool.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-ethtool.lo `test -f 'ethtool.c' || echo '$(srcdir)/'`ethtool.c + +_isys_la-eddsupport.lo: eddsupport.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-eddsupport.lo -MD -MP -MF $(DEPDIR)/_isys_la-eddsupport.Tpo -c -o _isys_la-eddsupport.lo `test -f 'eddsupport.c' || echo '$(srcdir)/'`eddsupport.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-eddsupport.Tpo $(DEPDIR)/_isys_la-eddsupport.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eddsupport.c' object='_isys_la-eddsupport.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-eddsupport.lo `test -f 'eddsupport.c' || echo '$(srcdir)/'`eddsupport.c + +_isys_la-iface.lo: iface.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-iface.lo -MD -MP -MF $(DEPDIR)/_isys_la-iface.Tpo -c -o _isys_la-iface.lo `test -f 'iface.c' || echo '$(srcdir)/'`iface.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-iface.Tpo $(DEPDIR)/_isys_la-iface.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iface.c' object='_isys_la-iface.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-iface.lo `test -f 'iface.c' || echo '$(srcdir)/'`iface.c + +_isys_la-str.lo: str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-str.lo -MD -MP -MF $(DEPDIR)/_isys_la-str.Tpo -c -o _isys_la-str.lo `test -f 'str.c' || echo '$(srcdir)/'`str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-str.Tpo $(DEPDIR)/_isys_la-str.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='str.c' object='_isys_la-str.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-str.lo `test -f 'str.c' || echo '$(srcdir)/'`str.c + +_isys_la-auditd.lo: auditd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-auditd.lo -MD -MP -MF $(DEPDIR)/_isys_la-auditd.Tpo -c -o _isys_la-auditd.lo `test -f 'auditd.c' || echo '$(srcdir)/'`auditd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-auditd.Tpo $(DEPDIR)/_isys_la-auditd.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='auditd.c' object='_isys_la-auditd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-auditd.lo `test -f 'auditd.c' || echo '$(srcdir)/'`auditd.c + +_isys_la-minifind.lo: minifind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -MT _isys_la-minifind.lo -MD -MP -MF $(DEPDIR)/_isys_la-minifind.Tpo -c -o _isys_la-minifind.lo `test -f 'minifind.c' || echo '$(srcdir)/'`minifind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/_isys_la-minifind.Tpo $(DEPDIR)/_isys_la-minifind.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minifind.c' object='_isys_la-minifind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(_isys_la_CFLAGS) $(CFLAGS) -c -o _isys_la-minifind.lo `test -f 'minifind.c' || echo '$(srcdir)/'`minifind.c + +libisys_la-devices.lo: devices.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-devices.lo -MD -MP -MF $(DEPDIR)/libisys_la-devices.Tpo -c -o libisys_la-devices.lo `test -f 'devices.c' || echo '$(srcdir)/'`devices.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-devices.Tpo $(DEPDIR)/libisys_la-devices.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='devices.c' object='libisys_la-devices.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-devices.lo `test -f 'devices.c' || echo '$(srcdir)/'`devices.c + +libisys_la-imount.lo: imount.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-imount.lo -MD -MP -MF $(DEPDIR)/libisys_la-imount.Tpo -c -o libisys_la-imount.lo `test -f 'imount.c' || echo '$(srcdir)/'`imount.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-imount.Tpo $(DEPDIR)/libisys_la-imount.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='imount.c' object='libisys_la-imount.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-imount.lo `test -f 'imount.c' || echo '$(srcdir)/'`imount.c + +libisys_la-cpio.lo: cpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-cpio.lo -MD -MP -MF $(DEPDIR)/libisys_la-cpio.Tpo -c -o libisys_la-cpio.lo `test -f 'cpio.c' || echo '$(srcdir)/'`cpio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-cpio.Tpo $(DEPDIR)/libisys_la-cpio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cpio.c' object='libisys_la-cpio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-cpio.lo `test -f 'cpio.c' || echo '$(srcdir)/'`cpio.c + +libisys_la-uncpio.lo: uncpio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-uncpio.lo -MD -MP -MF $(DEPDIR)/libisys_la-uncpio.Tpo -c -o libisys_la-uncpio.lo `test -f 'uncpio.c' || echo '$(srcdir)/'`uncpio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-uncpio.Tpo $(DEPDIR)/libisys_la-uncpio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='uncpio.c' object='libisys_la-uncpio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-uncpio.lo `test -f 'uncpio.c' || echo '$(srcdir)/'`uncpio.c + +libisys_la-lang.lo: lang.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-lang.lo -MD -MP -MF $(DEPDIR)/libisys_la-lang.Tpo -c -o libisys_la-lang.lo `test -f 'lang.c' || echo '$(srcdir)/'`lang.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-lang.Tpo $(DEPDIR)/libisys_la-lang.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lang.c' object='libisys_la-lang.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-lang.lo `test -f 'lang.c' || echo '$(srcdir)/'`lang.c + +libisys_la-isofs.lo: isofs.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-isofs.lo -MD -MP -MF $(DEPDIR)/libisys_la-isofs.Tpo -c -o libisys_la-isofs.lo `test -f 'isofs.c' || echo '$(srcdir)/'`isofs.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-isofs.Tpo $(DEPDIR)/libisys_la-isofs.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='isofs.c' object='libisys_la-isofs.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-isofs.lo `test -f 'isofs.c' || echo '$(srcdir)/'`isofs.c + +libisys_la-linkdetect.lo: linkdetect.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-linkdetect.lo -MD -MP -MF $(DEPDIR)/libisys_la-linkdetect.Tpo -c -o libisys_la-linkdetect.lo `test -f 'linkdetect.c' || echo '$(srcdir)/'`linkdetect.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-linkdetect.Tpo $(DEPDIR)/libisys_la-linkdetect.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='linkdetect.c' object='libisys_la-linkdetect.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-linkdetect.lo `test -f 'linkdetect.c' || echo '$(srcdir)/'`linkdetect.c + +libisys_la-vio.lo: vio.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-vio.lo -MD -MP -MF $(DEPDIR)/libisys_la-vio.Tpo -c -o libisys_la-vio.lo `test -f 'vio.c' || echo '$(srcdir)/'`vio.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-vio.Tpo $(DEPDIR)/libisys_la-vio.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='vio.c' object='libisys_la-vio.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-vio.lo `test -f 'vio.c' || echo '$(srcdir)/'`vio.c + +libisys_la-ethtool.lo: ethtool.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-ethtool.lo -MD -MP -MF $(DEPDIR)/libisys_la-ethtool.Tpo -c -o libisys_la-ethtool.lo `test -f 'ethtool.c' || echo '$(srcdir)/'`ethtool.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-ethtool.Tpo $(DEPDIR)/libisys_la-ethtool.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ethtool.c' object='libisys_la-ethtool.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-ethtool.lo `test -f 'ethtool.c' || echo '$(srcdir)/'`ethtool.c + +libisys_la-eddsupport.lo: eddsupport.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-eddsupport.lo -MD -MP -MF $(DEPDIR)/libisys_la-eddsupport.Tpo -c -o libisys_la-eddsupport.lo `test -f 'eddsupport.c' || echo '$(srcdir)/'`eddsupport.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-eddsupport.Tpo $(DEPDIR)/libisys_la-eddsupport.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eddsupport.c' object='libisys_la-eddsupport.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-eddsupport.lo `test -f 'eddsupport.c' || echo '$(srcdir)/'`eddsupport.c + +libisys_la-iface.lo: iface.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-iface.lo -MD -MP -MF $(DEPDIR)/libisys_la-iface.Tpo -c -o libisys_la-iface.lo `test -f 'iface.c' || echo '$(srcdir)/'`iface.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-iface.Tpo $(DEPDIR)/libisys_la-iface.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='iface.c' object='libisys_la-iface.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-iface.lo `test -f 'iface.c' || echo '$(srcdir)/'`iface.c + +libisys_la-str.lo: str.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-str.lo -MD -MP -MF $(DEPDIR)/libisys_la-str.Tpo -c -o libisys_la-str.lo `test -f 'str.c' || echo '$(srcdir)/'`str.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-str.Tpo $(DEPDIR)/libisys_la-str.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='str.c' object='libisys_la-str.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-str.lo `test -f 'str.c' || echo '$(srcdir)/'`str.c + +libisys_la-auditd.lo: auditd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-auditd.lo -MD -MP -MF $(DEPDIR)/libisys_la-auditd.Tpo -c -o libisys_la-auditd.lo `test -f 'auditd.c' || echo '$(srcdir)/'`auditd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-auditd.Tpo $(DEPDIR)/libisys_la-auditd.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='auditd.c' object='libisys_la-auditd.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-auditd.lo `test -f 'auditd.c' || echo '$(srcdir)/'`auditd.c + +libisys_la-minifind.lo: minifind.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -MT libisys_la-minifind.lo -MD -MP -MF $(DEPDIR)/libisys_la-minifind.Tpo -c -o libisys_la-minifind.lo `test -f 'minifind.c' || echo '$(srcdir)/'`minifind.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libisys_la-minifind.Tpo $(DEPDIR)/libisys_la-minifind.Plo +@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='minifind.c' object='libisys_la-minifind.lo' libtool=yes @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libisys_la_CFLAGS) $(CFLAGS) -c -o libisys_la-minifind.lo `test -f 'minifind.c' || echo '$(srcdir)/'`minifind.c + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-isysPYTHON: $(isys_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(isysdir)" || $(MKDIR_P) "$(DESTDIR)$(isysdir)" + @list='$(isys_PYTHON)'; dlist=; list2=; test -n "$(isysdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(isysdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(isysdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(isysdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(isysdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-isysPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(isys_PYTHON)'; test -n "$(isysdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(isysdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(isysdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(isysdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(isysdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(isysdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(isysdir)" && rm -f $$fileso + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + set x; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + shift; \ + if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + if test $$# -gt 0; then \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + "$$@" $$unique; \ + else \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$unique; \ + fi; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ + END { if (nonempty) { for (i in files) print i; }; }'`; \ + test -z "$(CTAGS_ARGS)$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && $(am__cd) $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) "$$here" + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LTLIBRARIES) $(HEADERS) +installdirs: + for dir in "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(isysdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ + clean-pkgpyexecLTLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-isysPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: install-pkgpyexecLTLIBRARIES + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic \ + mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-isysPYTHON uninstall-pkgpyexecLTLIBRARIES + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-libtool clean-noinstLTLIBRARIES \ + clean-pkgpyexecLTLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-libtool distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-isysPYTHON install-man \ + install-pdf install-pdf-am install-pkgpyexecLTLIBRARIES \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + tags uninstall uninstall-am uninstall-isysPYTHON \ + uninstall-pkgpyexecLTLIBRARIES + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/isys/auditd.c b/isys/auditd.c new file mode 100644 index 0000000..8eef4f3 --- /dev/null +++ b/isys/auditd.c @@ -0,0 +1,135 @@ +/* + * auditd.c: This is a simple audit daemon that throws all messages away. + * + * Copyright (C) 2006 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): Peter Jones + */ + +#define _GNU_SOURCE 1 + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "auditd.h" + +#ifdef USESELINUX +static int done; + +static void sig_done(int sig) +{ + done = 1; +} + +static void do_auditd(int fd) { + struct audit_reply rep; + sigset_t sigs; + struct sigaction sa; + struct pollfd pds = { + .events = POLLIN, + .revents = 0, + .fd = fd, + }; + + if (audit_set_pid(fd, getpid(), WAIT_YES) < 0) + return; + + if (audit_set_enabled(fd, 1) < 0) + return; + + memset(&sa, '\0', sizeof (sa)); + sa.sa_handler = sig_done; + sigaction(SIGTERM, &sa, NULL); + sigaction(SIGINT, &sa, NULL); + sigaction(SIGHUP, &sa, NULL); + + sigfillset(&sigs); + sigdelset(&sigs, SIGTERM); + sigdelset(&sigs, SIGINT); + sigdelset(&sigs, SIGHUP); + + while (1) { + int retval; + + memset(&rep, 0, sizeof(rep)); + + do { + retval = ppoll(&pds, 1, NULL, &sigs); + } while (retval == -1 && errno == EINTR && !done); + + if (done) + break; + + if (audit_get_reply(fd, &rep, GET_REPLY_NONBLOCKING, 0) > 0) { + /* we don't actually want to do anything here. */ + ; + } + } + return; +} +#endif /* USESELINUX */ + +int audit_daemonize(void) { +#ifdef USESELINUX + int fd; +#ifndef STANDALONE + int i; + pid_t child; + + if ((child = fork()) > 0) + return 0; + + for (i = 0; i < getdtablesize(); i++) + close(i); + + signal(SIGTTOU, SIG_IGN); + signal(SIGTTIN, SIG_IGN); + signal(SIGTSTP, SIG_IGN); + + if ((fd = open("/proc/self/oom_adj", O_RDWR)) >= 0) { + i = write(fd, "-17", 3); + close(fd); + } + +#endif /* !defined(STANDALONE) */ + fd = audit_open(); + do_auditd(fd); + audit_close(fd); +#ifndef STANDALONE + exit(0); +#endif /* !defined(STANDALONE) */ +#endif /* USESELINUX */ + return 0; +} + +#ifdef STANDALONE +int main(void) { + return audit_daemonize(); +} +#endif /* STANDALONE */ + +/* + * vim:ts=8:sw=4:sts=4:et + */ diff --git a/isys/auditd.h b/isys/auditd.h new file mode 100644 index 0000000..55ec5ce --- /dev/null +++ b/isys/auditd.h @@ -0,0 +1,30 @@ +/* + * auditd.h: This is a simple audit daemon that throws all messages away. + * + * Copyright (C) 2006 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): Peter Jones + */ + +#ifndef ISYS_AUDIT_H +#define ISYS_AUDIT_H 1 + +extern int audit_daemonize(void); + +#endif /* ISYS_AUDIT_H */ +/* + * vim:ts=8:sw=4:sts=4:et + */ diff --git a/isys/cpio.c b/isys/cpio.c new file mode 100644 index 0000000..fd83605 --- /dev/null +++ b/isys/cpio.c @@ -0,0 +1,46 @@ +/* + * cpio.c + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#include +#include +#include +#include + +#include "cpio.h" + +int installCpioFile(gzFile fd, char * cpioName, char * outName, int inWin) { + struct cpioFileMapping map; + int rc; + const char * failedFile; + + if (outName) { + map.archivePath = cpioName; + map.fsPath = outName; + map.mapFlags = CPIO_MAP_PATH; + } + + rc = myCpioInstallArchive(fd, outName ? &map : NULL, 1, NULL, NULL, + &failedFile); + + if (rc || access(outName, R_OK)) { + return -1; + } + + return 0; +} diff --git a/isys/cpio.h b/isys/cpio.h new file mode 100644 index 0000000..4cbb7c0 --- /dev/null +++ b/isys/cpio.h @@ -0,0 +1,102 @@ +/* + * cpio.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef H_CPIO +#define H_CPIO + +#include + +#include "stubs.h" + +/* Note the CPIO_CHECK_ERRNO bit is set only if errno is valid. These have to + be positive numbers or this setting the high bit stuff is a bad idea. */ +#define CPIOERR_CHECK_ERRNO 0x80000000 + +#define CPIOERR_BAD_MAGIC (2 ) +#define CPIOERR_BAD_HEADER (3 ) +#define CPIOERR_OPEN_FAILED (4 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_CHMOD_FAILED (5 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_CHOWN_FAILED (6 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_WRITE_FAILED (7 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_UTIME_FAILED (8 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_UNLINK_FAILED (9 | CPIOERR_CHECK_ERRNO) + +#define CPIOERR_SYMLINK_FAILED (11 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_STAT_FAILED (12 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_MKDIR_FAILED (13 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_MKNOD_FAILED (14 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_MKFIFO_FAILED (15 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_LINK_FAILED (16 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_READLINK_FAILED (17 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_READ_FAILED (18 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_COPY_FAILED (19 | CPIOERR_CHECK_ERRNO) +#define CPIOERR_INTERNAL (20 ) +#define CPIOERR_HDR_SIZE (21 ) +#define CPIOERR_UNKNOWN_FILETYPE (22 ) + + +/* Don't think this behaves just like standard cpio. It's pretty close, but + it has some behaviors which are more to RPM's liking. I tried to document + them inline in cpio.c, but I may have missed some. */ + +#define CPIO_MAP_PATH (1 << 0) +#define CPIO_MAP_MODE (1 << 1) +#define CPIO_MAP_UID (1 << 2) +#define CPIO_MAP_GID (1 << 3) +#define CPIO_FOLLOW_SYMLINKS (1 << 4) /* only for building */ + +struct cpioFileMapping { + char * archivePath; + char * fsPath; + mode_t finalMode; + uid_t finalUid; + gid_t finalGid; + int mapFlags; +}; + +/* on cpio building, only "file" is filled in */ +struct cpioCallbackInfo { + char * file; + long fileSize; /* total file size */ + long fileComplete; /* amount of file unpacked */ + long bytesProcessed; /* bytes in archive read */ +}; + +typedef void (*cpioCallback)(struct cpioCallbackInfo * filespec, void * data); + +/* If no mappings are passed, this installs everything! If one is passed + it should be sorted according to cpioFileMapCmp() and only files included + in the map are installed. Files are installed relative to the current + directory unless a mapping is given which specifies an absolute + directory. The mode mapping is only used for the permission bits, not + for the file type. The owner/group mappings are ignored for the nonroot + user. If *failedFile is non-NULL on return, it should be free()d. */ +int myCpioInstallArchive(gzFile stream, struct cpioFileMapping * mappings, + int numMappings, cpioCallback cb, void * cbData, + const char ** failedFile); +int myCpioFilterArchive(gzFile inStream, gzFile outStream, char ** pattern); + +/* This is designed to be qsort/bsearch compatible */ +int myCpioFileMapCmp(const void * a, const void * b); + +const char *myCpioStrerror(int rc); + +int installCpioFile(gzFile fd, char * cpioName, char * outName, int inWin); + +#endif diff --git a/isys/devices.c b/isys/devices.c new file mode 100644 index 0000000..98c8769 --- /dev/null +++ b/isys/devices.c @@ -0,0 +1,217 @@ +/* + * devices.c - various hardware probing functionality + * + * Copyright (C) 2007 Red Hat, Inc. + * All rights reserved. + * + * 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, see . + * + * Author(s): Bill Nottingham + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "devices.h" + +/* for 'disks', to filter out weird stuff */ +#define MINIMUM_INTERESTING_SIZE 32*1024 /* 32MB */ + +/* from genhd.h, kernel side */ +#define GENHD_FL_REMOVABLE 1 +#define GENHD_FL_DRIVERFS 2 +#define GENHD_FL_MEDIA_CHANGE_NOTIFY 4 +#define GENHD_FL_CD 8 +#define GENHD_FL_UP 16 +#define GENHD_FL_SUPPRESS_PARTITION_INFO 32 +#define GENHD_FL_FAIL 64 + + +struct device **getDevices(enum deviceType type) { + struct device **ret = NULL; + struct device *new; + int numdevices = 0; + + if (type & (DEVICE_DISK | DEVICE_CDROM)) { + DIR *dir; + struct dirent *ent; + + dir = opendir("/sys/block"); + + if (!dir) goto storagedone; + + while ((ent = readdir(dir))) { + char path[64]; + char buf[64]; + int fd, caps, devtype; + + snprintf(path, 64, "/sys/block/%s/capability", ent->d_name); + fd = open(path, O_RDONLY); + if (fd == -1) + continue; + if (read(fd, buf, 63) <= 0) { + close(fd); + continue; + } + + close(fd); + errno = 0; + caps = strtol(buf, NULL, 16); + + if ((errno == ERANGE && (caps == LONG_MIN || caps == LONG_MAX)) || + (errno != 0 && caps == 0)) { + return NULL; + } + + if (caps & GENHD_FL_CD) + devtype = DEVICE_CDROM; + else + devtype = DEVICE_DISK; + if (!(devtype & type)) + continue; + + if (devtype == DEVICE_DISK && !(caps & GENHD_FL_REMOVABLE)) { + int size; + + snprintf(path, 64, "/sys/block/%s/size", ent->d_name); + fd = open(path, O_RDONLY); + + if (fd == -1) + continue; + if (read(fd, buf, 63) <= 0) { + close(fd); + continue; + } + + close(fd); + errno = 0; + size = strtol(buf, NULL, 10); + + if ((errno == ERANGE && (size == LONG_MIN || + size == LONG_MAX)) || + (errno != 0 && size == 0)) { + return NULL; + } + + if (size < MINIMUM_INTERESTING_SIZE) + continue; + } + + new = calloc(1, sizeof(struct device)); + new->device = strdup(ent->d_name); + /* FIXME */ + if (asprintf(&new->description, "Storage device %s", + new->device) == -1) { + fprintf(stderr, "%s: %d: %s\n", __func__, __LINE__, + strerror(errno)); + fflush(stderr); + abort(); + } + new->type = devtype; + if (caps & GENHD_FL_REMOVABLE) { + new->priv.removable = 1; + } + ret = realloc(ret, (numdevices+2) * sizeof(struct device)); + ret[numdevices] = new; + ret[numdevices+1] = NULL; + numdevices++; + } + } +storagedone: + + if (type & DEVICE_NETWORK) { + DIR *dir; + struct dirent *ent; + + dir = opendir("/sys/class/net"); + + if (!dir) goto netdone; + + while ((ent = readdir(dir))) { + char path[64]; + int fd, type; + char buf[64]; + + snprintf(path, 64, "/sys/class/net/%s/type", ent->d_name); + fd = open(path, O_RDONLY); + if (fd == -1) + continue; + if (read(fd, buf, 63) <= 0) { + close(fd); + continue; + } + + close(fd); + errno = 0; + type = strtol(buf, NULL, 10); + + if ((errno == ERANGE && (type == LONG_MIN || type == LONG_MAX)) || + (errno != 0 && type == 0)) { + return NULL; + } + + if (type != 1) + continue; + + new = calloc(1, sizeof(struct device)); + new->device = strdup(ent->d_name); + /* FIXME */ + snprintf(path, 64, "/sys/class/net/%s/address", ent->d_name); + fd = open(path, O_RDONLY); + if (fd != -1) { + memset(buf, '\0', 64); + if (read(fd, buf, 63) > 0) { + int i; + for (i = (strlen(buf)-1); isspace(buf[i]); i--) + buf[i] = '\0'; + new->priv.hwaddr = strdup(buf); + } + } + + if (new->priv.hwaddr) { + if (asprintf(&new->description, "Ethernet device %s - %s", + new->device, new->priv.hwaddr) == -1) { + fprintf(stderr, "%s: %d: %s\n", __func__, __LINE__, + strerror(errno)); + fflush(stderr); + abort(); + } + } else { + if (asprintf(&new->description, "Ethernet device %s", + new->device) == -1) { + fprintf(stderr, "%s: %d: %s\n", __func__, __LINE__, + strerror(errno)); + fflush(stderr); + abort(); + } + } + + ret = realloc(ret, (numdevices+2) * sizeof(struct device)); + ret[numdevices] = new; + ret[numdevices+1] = NULL; + numdevices++; + } + } +netdone: + return ret; +} + diff --git a/isys/devices.h b/isys/devices.h new file mode 100644 index 0000000..9428a77 --- /dev/null +++ b/isys/devices.h @@ -0,0 +1,42 @@ +/* + * devices.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef DEVICES_H +#define DEVICES_H + +enum deviceType { + DEVICE_ANY = ~0, + DEVICE_NETWORK = (1 << 0), + DEVICE_DISK = (1 << 1), + DEVICE_CDROM = (1 << 2) +}; + +struct device { + char *device; + char *description; + enum deviceType type; + union { + char *hwaddr; + int removable; + } priv; +}; + +struct device **getDevices(enum deviceType type); + +#endif diff --git a/isys/eddsupport.c b/isys/eddsupport.c new file mode 100644 index 0000000..c50278e --- /dev/null +++ b/isys/eddsupport.c @@ -0,0 +1,339 @@ +/* + * eddsupport.c - handling of mapping disk drives in Linux to disk drives + * according to the BIOS using the edd kernel module + * + * Copyright (C) 2004 Dell, Inc. All rights reserved. + * Copyright (C) 2004 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): Rezwanul_Kabir@Dell.com + * Jeremy Katz + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "eddsupport.h" +#include "devices.h" +#include "isys.h" + +#define EDD_DIR "/sys/firmware/edd" +#define SIG_FILE "mbr_signature" +#define MBRSIG_OFFSET 0x1b8 + +#define HASH_TABLE_SIZE 17 + + +struct diskMapEntry{ + uint32_t key; + char *diskname; + struct diskMapEntry *next; +}; + +struct diskMapTable { + struct diskMapEntry **table; + int tableSize; +}; + +static struct diskMapTable *mbrSigToName = NULL; +static int diskHashInit = 0; + + + +static struct diskMapTable* initializeHashTable(int); +static int insertHashItem(struct diskMapTable *, struct diskMapEntry *); +static struct diskMapEntry* lookupHashItem(struct diskMapTable *, uint32_t); +static int addToHashTable(struct diskMapTable *, uint32_t , char *); +static struct device ** createDiskList(); +static int mapBiosDisks(struct device ** , const char *); +static int readDiskSig(char *, uint32_t *); +static int readMbrSig(char *, uint32_t *); + +/* This is the top level function that creates a disk list present in the + * system, checks to see if unique signatures exist on the disks at offset + * 0x1b8. If a unique signature exists then it will map BIOS disks to their + * corresponding hd/sd device names. Otherwise, we'll avoid mapping drives. + */ + +int probeBiosDisks() { + struct device ** devices = NULL; + + devices = createDiskList(); + if(!devices){ +#ifdef STANDALONE + fprintf(stderr, "No disks!\n"); +#endif + return -1; + } + + if(!mapBiosDisks(devices, EDD_DIR)){ +#ifdef STANDALONE + fprintf(stderr, "WARNING: couldn't map BIOS disks\n"); +#endif + return -1; + } + return 0; +} + + +static struct device ** createDiskList(){ + return getDevices (DEVICE_DISK); +} + +static int readDiskSig(char *device, uint32_t *disksig) { + int fd, rc; + char devnodeName[64]; + + snprintf(devnodeName, sizeof(devnodeName), "/dev/%s", device); + fd = open(devnodeName, O_RDONLY); + if (fd < 0) { +#ifdef STANDALONE + fprintf(stderr, "Error opening device %s: %s\n ", device, + strerror(errno)); +#endif + return -errno; + } + + rc = lseek(fd, MBRSIG_OFFSET, SEEK_SET); + if (rc < 0){ + close(fd); + +#ifdef STANDALONE + fprintf(stderr, "Error seeking to MBRSIG_OFFSET in %s: %s\n", + device, strerror(errno)); +#endif + return -1; + } + + rc = read(fd, disksig, sizeof(uint32_t)); + if (rc < sizeof(uint32_t)) { + close(fd); + +#ifdef STANDALONE + fprintf(stderr, "Failed to read signature from %s\n", device); +#endif + return -1; + } + + close(fd); + return 0; +} + +static int mapBiosDisks(struct device** devices,const char *path) { + DIR *dirHandle; + struct dirent *entry; + char * sigFileName; + uint32_t mbrSig, biosNum, currentSig; + struct device **currentDev, **foundDisk; + int i, rc, ret, dm_nr, highest_dm; + + dirHandle = opendir(path); + if(!dirHandle){ +#ifdef STANDALONE + fprintf(stderr, "Failed to open directory %s: %s\n", path, + strerror(errno)); +#endif + return 0; + } + + mbrSigToName = initializeHashTable(HASH_TABLE_SIZE); + if(!mbrSigToName){ +#ifdef STANDALONE + fprintf(stderr, "Error initializing mbrSigToName table\n"); +#endif + closedir(dirHandle); + return 0; + } + + while ((entry = readdir(dirHandle)) != NULL) { + if(!strncmp(entry->d_name,".",1) || !strncmp(entry->d_name,"..",2)) { + continue; + } + ret = sscanf((entry->d_name+9), "%x", &biosNum); + + sigFileName = malloc(strlen(path) + strlen(entry->d_name) + 20); + sprintf(sigFileName, "%s/%s/%s", path, entry->d_name, SIG_FILE); + if (readMbrSig(sigFileName, &mbrSig) == 0) { + for (currentDev = devices, i = 0, foundDisk=NULL, highest_dm=-1; + (*currentDev) != NULL; + currentDev++) { + if (!(*currentDev)->device) + continue; + + if ((rc=readDiskSig((*currentDev)->device, ¤tSig)) < 0) { + if (rc == -ENOMEDIUM || rc == -ENXIO) + continue; + closedir(dirHandle); + return 0; + } + + if (mbrSig == currentSig) { + /* When we have a fakeraid setup we will find multiple hits + a number for the raw disks (1 when striping, 2 when + mirroring, more with raid on raid like raid 01 or 10) + and a number for the dm devices (normally only one dm + device will match, but more with raid on raid). + Since with raid on raid the last dm device created + will be the top layer raid, we want the highest matching + dm device. */ + if (!strncmp((*currentDev)->device, "dm-", 3) && + sscanf((*currentDev)->device+3, "%d", &dm_nr) == 1) { + if (dm_nr > highest_dm) { + highest_dm = dm_nr; + foundDisk=currentDev; + i = 1; + } + } else if (!foundDisk || + strncmp((*foundDisk)->device, "dm-", 3)) { + foundDisk=currentDev; + i++; + } + } + } + + if (i==1) { + if(!addToHashTable(mbrSigToName, (uint32_t)biosNum, + (*foundDisk)->device)) { + closedir(dirHandle); + return 0; + } + } + } + } + closedir(dirHandle); + return 1; +} + + +static int readMbrSig(char *filename, uint32_t *int_sig){ + FILE* fh; + + fh = fopen(filename,"r"); + if(fh == NULL) { +#ifdef STANDALONE + fprintf(stderr, "Error opening mbr_signature file %s: %s\n", filename, + strerror(errno)); +#endif + return -1; + } + fseek(fh, 0, SEEK_SET); + if (fscanf(fh, "%x", int_sig) != 1) { +#ifdef STANDALONE + fprintf(stderr, "Error reading %s\n", filename); +#endif + fclose(fh); + return -1; + } + + fclose(fh); + return 0; +} + + +static struct diskMapTable* initializeHashTable(int size) { + struct diskMapTable *hashTable; + + hashTable = malloc(sizeof(struct diskMapTable)); + hashTable->tableSize = size; + hashTable->table = malloc(sizeof(struct diskMapEntry *) * size); + memset(hashTable->table,0,(sizeof(struct diskMapEntry *) * size)); + return hashTable; +} + + +static int insertHashItem(struct diskMapTable *hashTable, + struct diskMapEntry *hashItem) { + int index; + + index = (hashItem->key) % (hashTable->tableSize); + + if(hashTable->table[index] == NULL){ + hashTable->table[index] = hashItem; + return index; + } else { + hashItem->next = hashTable->table[index]; + hashTable->table[index] = hashItem; + return index; + } +} + + +static struct diskMapEntry * lookupHashItem(struct diskMapTable *hashTable, + uint32_t itemKey) { + int index; + struct diskMapEntry *hashItem; + + index = itemKey % (hashTable->tableSize); + for (hashItem = hashTable->table[index]; + (hashItem != NULL) && (hashItem->key != itemKey); + hashItem = hashItem->next) { + ; + } + return hashItem; +} + + +static int addToHashTable(struct diskMapTable *hashTable, + uint32_t itemKey, char *diskName) { + int index; + struct diskMapEntry *diskSigToNameEntry; + + diskSigToNameEntry = malloc(sizeof(struct diskMapEntry)); + diskSigToNameEntry->next = NULL; + diskSigToNameEntry->key = itemKey; + diskSigToNameEntry->diskname = diskName; + + if ((index = insertHashItem(hashTable, diskSigToNameEntry)) < 0){ +#ifdef STANDALONE + fprintf(stderr, "Unable to insert item\n"); +#endif + return 0; + } else { + return 1; + } +} + + +char * getBiosDisk(char *biosStr) { + uint32_t biosNum; + struct diskMapEntry * disk; + int ret; + + if (diskHashInit == 0) { + probeBiosDisks(); + diskHashInit = 1; + } + + if (mbrSigToName == NULL) + return NULL; + + ret = sscanf(biosStr,"%x",&biosNum); + disk = lookupHashItem(mbrSigToName, biosNum); + if (disk) return disk->diskname; + + return NULL; +} diff --git a/isys/eddsupport.h b/isys/eddsupport.h new file mode 100644 index 0000000..77fc4c4 --- /dev/null +++ b/isys/eddsupport.h @@ -0,0 +1,28 @@ +/* + * eddsupport.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef EDDSUPPORT_H +#define EDDSUPPORT_H + +int probeBiosDisks(); +char* getBiosDisk(char *); + +#endif + + diff --git a/isys/ethtool.c b/isys/ethtool.c new file mode 100644 index 0000000..871f1d4 --- /dev/null +++ b/isys/ethtool.c @@ -0,0 +1,119 @@ +/* + * ethtool.c - setting of basic ethtool options + * + * Copyright (C) 2003 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): Jeremy Katz + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include "ethtool.h" + +static int set_intf_up(struct ifreq ifr, int sock) { + if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) { + return (-1); + } + ifr.ifr_flags |= (IFF_UP | IFF_RUNNING); + if (ioctl(sock, SIOCSIFFLAGS, &ifr) < 0) { + fprintf(stderr, "failed to bring up interface %s: %s", ifr.ifr_name, + strerror(errno)); + return -1; + } + return (0); +} + +int setEthtoolSettings(char * dev, ethtool_speed speed, + ethtool_duplex duplex) { + int sock, err; + struct ethtool_cmd ecmd; + struct ifreq ifr; + + if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + perror("Unable to create socket"); + return -1; + } + + /* Setup our control structures. */ + memset(&ifr, 0, sizeof(ifr)); + strcpy(ifr.ifr_name, dev); + + if (set_intf_up(ifr, sock) == -1) { + fprintf(stderr, "unable to bring up interface %s: %s", dev, + strerror(errno)); + return -1; + } + + ecmd.cmd = ETHTOOL_GSET; + ifr.ifr_data = (caddr_t)&ecmd; + err = ioctl(sock, SIOCETHTOOL, &ifr); + if (err < 0) { + perror("Unable to get settings via ethtool. Not setting"); + return -1; + } + + if (speed != ETHTOOL_SPEED_UNSPEC) + ecmd.speed = speed; + if (duplex != ETHTOOL_DUPLEX_UNSPEC) + ecmd.duplex = duplex; + if ((duplex != ETHTOOL_DUPLEX_UNSPEC) || (speed != ETHTOOL_SPEED_UNSPEC)) + ecmd.autoneg = AUTONEG_DISABLE; + + ecmd.cmd = ETHTOOL_SSET; + ifr.ifr_data = (caddr_t)&ecmd; + err = ioctl(sock, SIOCETHTOOL, &ifr); + if (err < 0) { + // perror("Unable to set settings via ethtool. Not setting"); + return -1; + } + + return 0; +} + +int identifyNIC(char *iface, int seconds) { + int sock; + struct ethtool_value edata; + struct ifreq ifr; + + if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { + perror("Unable to create socket"); + return -1; + } + + memset(&ifr, 0, sizeof(ifr)); + memset(&edata, 0, sizeof(edata)); + + strcpy(ifr.ifr_name, iface); + edata.cmd = ETHTOOL_PHYS_ID; + edata.data = seconds; + ifr.ifr_data = (caddr_t) &edata; + + if (ioctl(sock, SIOCETHTOOL, &ifr) < 0) { + perror("Unable to identify NIC"); + } + + return 0; +} diff --git a/isys/ethtool.h b/isys/ethtool.h new file mode 100644 index 0000000..57b4ffc --- /dev/null +++ b/isys/ethtool.h @@ -0,0 +1,41 @@ +/* + * net.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef ISYSNET_H +#define ISYSNET_H + +#include +#include + +/* returns 1 for link, 0 for no link, -1 for unknown */ +int get_link_status(char *ifname); + +typedef enum ethtool_speed_t { ETHTOOL_SPEED_UNSPEC = -1, + ETHTOOL_SPEED_10 = SPEED_10, + ETHTOOL_SPEED_100 = SPEED_100, + ETHTOOL_SPEED_1000 = SPEED_1000 } ethtool_speed; +typedef enum ethtool_duplex_t { ETHTOOL_DUPLEX_UNSPEC = -1, + ETHTOOL_DUPLEX_HALF = DUPLEX_HALF, + ETHTOOL_DUPLEX_FULL = DUPLEX_FULL } ethtool_duplex; + +/* set ethtool settings */ +int setEthtoolSettings(char * dev, ethtool_speed speed, ethtool_duplex duplex); +int identifyNIC(char *iface, int seconds); + +#endif diff --git a/isys/iface.c b/isys/iface.c new file mode 100644 index 0000000..c1251be --- /dev/null +++ b/isys/iface.c @@ -0,0 +1,542 @@ +/* + * iface.c - Network interface configuration API + * + * Copyright (C) 2006, 2007, 2008 Red Hat, 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; 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, see . + * + * Author(s): David Cantrell + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "isys.h" +#include "iface.h" +#include "str.h" + +/* Internal-only function prototypes. */ +static struct nl_handle *_iface_get_handle(void); +static struct nl_cache *_iface_get_link_cache(struct nl_handle **); +static int _iface_have_valid_addr(void *addr, int family, int length); +static int _iface_redirect_io(char *device, int fd, int mode); + +/* + * Return a libnl handle for NETLINK_ROUTE. + */ +static struct nl_handle *_iface_get_handle(void) { + struct nl_handle *handle = NULL; + + if ((handle = nl_handle_alloc()) == NULL) { + return NULL; + } + + if (nl_connect(handle, NETLINK_ROUTE)) { + nl_handle_destroy(handle); + return NULL; + } + + return handle; +} + +/* + * Return an NETLINK_ROUTE cache. + */ +static struct nl_cache *_iface_get_link_cache(struct nl_handle **handle) { + struct nl_cache *cache = NULL; + + if ((*handle = _iface_get_handle()) == NULL) { + return NULL; + } + + if ((cache = rtnl_link_alloc_cache(*handle)) == NULL) { + nl_close(*handle); + nl_handle_destroy(*handle); + return NULL; + } + + return cache; +} + +/* + * Determine if a struct in_addr or struct in6_addr contains a valid address. + */ +static int _iface_have_valid_addr(void *addr, int family, int length) { + char buf[length+1]; + + if ((addr == NULL) || (family != AF_INET && family != AF_INET6)) { + return 0; + } + + memset(buf, '\0', sizeof(buf)); + + if (inet_ntop(family, addr, buf, length) == NULL) { + return 0; + } else { + /* check for unknown addresses */ + if (family == AF_INET) { + if (!strncmp(buf, "0.0.0.0", 7)) { + return 0; + } + } else if (family == AF_INET6) { + if (!strncmp(buf, "::", 2)) { + return 0; + } + } + } + + return 1; +} + +/* + * Redirect I/O to another device (e.g., stdout to /dev/tty5) + */ +int _iface_redirect_io(char *device, int fd, int mode) { + int io = -1; + + if ((io = open(device, mode)) == -1) { + return 1; + } + + if (close(fd) == -1) { + return 2; + } + + if (dup2(io, fd) == -1) { + return 3; + } + + if (close(io) == -1) { + return 4; + } + + return 0; +} + +/* + * Given an interface name (e.g., eth0) and address family (e.g., AF_INET), + * return the IP address in human readable format (i.e., the output from + * inet_ntop()). Return NULL for no match or error. + */ +char *iface_ip2str(char *ifname, int family) { + int i; + NMClient *client = NULL; + NMIP4Config *ip4config = NULL; + NMIP4Address *ipaddr = NULL; + NMDevice *candidate = NULL; + struct in_addr tmp_addr; + const GPtrArray *devices; + const char *iface; + char ipstr[INET_ADDRSTRLEN+1]; + + if (ifname == NULL) { + return NULL; + } + + /* DCFIXME: add IPv6 once NM gains support */ + if (family != AF_INET) { + return NULL; + } + + g_type_init(); + + client = nm_client_new(); + if (!client) { + return NULL; + } + + if (nm_client_get_state(client) != NM_STATE_CONNECTED) { + g_object_unref(client); + return NULL; + } + + devices = nm_client_get_devices(client); + for (i=0; i < devices->len; i++) { + candidate = g_ptr_array_index(devices, i); + iface = nm_device_get_iface(candidate); + + if (nm_device_get_state(candidate) != NM_DEVICE_STATE_ACTIVATED) + continue; + + if (!iface || strcmp(iface, ifname)) + continue; + + if (!(ip4config = nm_device_get_ip4_config(candidate))) + continue; + + if (!(ipaddr = nm_ip4_config_get_addresses(ip4config)->data)) + continue; + + memset(&ipstr, '\0', sizeof(ipstr)); + tmp_addr.s_addr = nm_ip4_address_get_address(ipaddr); + + if (inet_ntop(AF_INET, &tmp_addr, ipstr, INET_ADDRSTRLEN) == NULL) { + g_object_unref(client); + return NULL; + } + + g_object_unref(client); + return g_strdup(ipstr); + } + + g_object_unref(client); + return NULL; +} + +/* Given an interface's MAC address, return the name (e.g., eth0) in human + * readable format. Return NULL for no match + */ +char *iface_mac2device(char *mac) { + struct nl_handle *handle = NULL; + struct nl_cache *cache = NULL; + struct rtnl_link *link = NULL; + struct nl_addr *mac_as_nl_addr = NULL; + char *retval = NULL; + int i, n; + + if (mac == NULL) { + return NULL; + } + + if ((mac_as_nl_addr = nl_addr_parse(mac, AF_LLC)) == NULL) { + return NULL; + } + + if ((cache = _iface_get_link_cache(&handle)) == NULL) { + return NULL; + } + + n = nl_cache_nitems(cache); + for (i = 0; i <= n; i++) { + struct nl_addr *addr; + + if ((link = rtnl_link_get(cache, i)) == NULL) { + continue; + } + + addr = rtnl_link_get_addr(link); + + if (!nl_addr_cmp(mac_as_nl_addr, addr)) { + retval = strdup(rtnl_link_get_name(link)); + rtnl_link_put(link); + break; + } + + rtnl_link_put(link); + } + + nl_close(handle); + nl_handle_destroy(handle); + + return retval; +} + +/* + * Given an interface name (e.g., eth0), return the MAC address in human + * readable format (e.g., 00:11:52:12:D9:A0). Return NULL for no match. + */ +char *iface_mac2str(char *ifname) { + int buflen = 20; + char *buf = NULL; + struct nl_handle *handle = NULL; + struct nl_cache *cache = NULL; + struct rtnl_link *link = NULL; + struct nl_addr *addr = NULL; + + if (ifname == NULL) { + return NULL; + } + + if ((cache = _iface_get_link_cache(&handle)) == NULL) { + return NULL; + } + + if ((link = rtnl_link_get_by_name(cache, ifname)) == NULL) { + goto mac2str_error2; + } + + if ((addr = rtnl_link_get_addr(link)) == NULL) { + goto mac2str_error3; + } + + if ((buf = calloc(sizeof(char *), buflen)) == NULL) { + goto mac2str_error4; + } + + if ((buf = nl_addr2str(addr, buf, buflen)) != NULL) { + buf = str2upper(buf); + } + +mac2str_error4: + nl_addr_destroy(addr); +mac2str_error3: + rtnl_link_put(link); +mac2str_error2: + nl_close(handle); + nl_handle_destroy(handle); + + return buf; +} + +/* + * Convert an IPv4 CIDR prefix to a dotted-quad netmask. Return NULL on + * failure. + */ +struct in_addr *iface_prefix2netmask(int prefix) { + int mask = 0; + char *buf = NULL; + struct in_addr *ret; + + if ((buf = calloc(sizeof(char *), INET_ADDRSTRLEN + 1)) == NULL) { + return NULL; + } + + mask = htonl(~((1 << (32 - prefix)) - 1)); + + if (inet_ntop(AF_INET, (struct in_addr *) &mask, buf, + INET_ADDRSTRLEN) == NULL) { + return NULL; + } + + if ((ret = calloc(sizeof(struct in_addr), 1)) == NULL) { + return NULL; + } + + memcpy(ret, (struct in_addr *) &mask, sizeof(struct in_addr)); + return ret; +} + +/* + * Initialize a new iface_t structure to default values. + */ +void iface_init_iface_t(iface_t *iface) { + int i; + + memset(&iface->device, '\0', sizeof(iface->device)); + memset(&iface->ipaddr, 0, sizeof(iface->ipaddr)); + memset(&iface->netmask, 0, sizeof(iface->netmask)); + memset(&iface->broadcast, 0, sizeof(iface->broadcast)); + memset(&iface->ip6addr, 0, sizeof(iface->ip6addr)); + memset(&iface->gateway, 0, sizeof(iface->gateway)); + memset(&iface->gateway6, 0, sizeof(iface->gateway6)); + + for (i = 0; i < MAXNS; i++) { + iface->dns[i] = NULL; + } + + iface->macaddr = NULL; + iface->ip6prefix = 0; + iface->nextserver = NULL; + iface->bootfile = NULL; + iface->numdns = 0; + iface->hostname = NULL; + iface->domain = NULL; + iface->search = NULL; + iface->dhcptimeout = 0; + iface->vendorclass = NULL; + iface->ssid = NULL; + iface->wepkey = NULL; + iface->mtu = 0; + iface->subchannels = NULL; + iface->portname = NULL; + iface->peerid = NULL; + iface->nettype = NULL; + iface->ctcprot = NULL; + iface->layer2 = NULL; + iface->portno = NULL; + iface->flags = 0; + iface->ipv4method = IPV4_UNUSED_METHOD; + iface->ipv6method = IPV6_UNUSED_METHOD; + + return; +} + +/* + * Given a pointer to a struct in_addr, return 1 if it contains a valid + * address, 0 otherwise. + */ +int iface_have_in_addr(struct in_addr *addr) { + return _iface_have_valid_addr(addr, AF_INET, INET_ADDRSTRLEN); +} + +/* + * Given a pointer to a struct in6_addr, return 1 if it contains a valid + * address, 0 otherwise. + */ +int iface_have_in6_addr(struct in6_addr *addr6) { + return _iface_have_valid_addr(addr6, AF_INET6, INET6_ADDRSTRLEN); +} + +/* Check if NM has an active connection */ +gboolean is_nm_connected(void) { + NMState state; + NMClient *client = NULL; + + g_type_init(); + + client = nm_client_new(); + if (!client) + return FALSE; + + state = nm_client_get_state(client); + g_object_unref(client); + + if (state == NM_STATE_CONNECTED) + return TRUE; + else + return FALSE; +} + +/* Check if NM is already running */ +gboolean is_nm_running(void) { + gboolean running; + NMClient *client = NULL; + + g_type_init(); + + client = nm_client_new(); + if (!client) + return FALSE; + + running = nm_client_get_manager_running(client); + g_object_unref(client); + return running; +} + +/* + * Wait for NetworkManager to appear on the system bus + */ +int wait_for_nm(void) { + int count = 0; + + /* send message and block until a reply or error comes back */ + while (count < 45) { + if (is_nm_running()) + return 0; + + sleep(1); + count++; + } + + return 1; +} + +/* + * Start NetworkManager -- requires that you have already written out the + * control files in /etc/sysconfig for the interface. + */ +int iface_start_NetworkManager(void) { + pid_t pid; + + if (is_nm_running()) + return 0; /* already running */ + + /* Start NetworkManager */ + pid = fork(); + if (pid == 0) { + if (setpgrp() == -1) { + exit(1); + } + + if (_iface_redirect_io("/dev/null", STDIN_FILENO, O_RDONLY) || + _iface_redirect_io(OUTPUT_TERMINAL, STDOUT_FILENO, O_WRONLY) || + _iface_redirect_io(OUTPUT_TERMINAL, STDERR_FILENO, O_WRONLY)) { + exit(2); + } + + if (execl(NETWORKMANAGER, NETWORKMANAGER, + "--pid-file=/var/run/NetworkManager/NetworkManager.pid", + NULL) == -1) { + exit(3); + } + } else if (pid == -1) { + return 1; + } else { + return wait_for_nm(); + } + + return 0; +} + +/* + * Set the MTU on the specified device. + */ +int iface_set_interface_mtu(char *ifname, int mtu) { + int ret = 0; + struct nl_handle *handle = NULL; + struct nl_cache *cache = NULL; + struct rtnl_link *link = NULL; + struct rtnl_link *request = NULL; + + if (ifname == NULL) { + return -1; + } + + if (mtu <= 0) { + return -2; + } + + if ((cache = _iface_get_link_cache(&handle)) == NULL) { + return -3; + } + + if ((link = rtnl_link_get_by_name(cache, ifname)) == NULL) { + ret = -4; + goto ifacemtu_error1; + } + + request = rtnl_link_alloc(); + rtnl_link_set_mtu(request, mtu); + + if (rtnl_link_change(handle, link, request, 0)) { + ret = -5; + goto ifacemtu_error2; + } + +ifacemtu_error2: + rtnl_link_put(link); +ifacemtu_error1: + nl_close(handle); + nl_handle_destroy(handle); + + return ret; +} diff --git a/isys/iface.h b/isys/iface.h new file mode 100644 index 0000000..820d10b --- /dev/null +++ b/isys/iface.h @@ -0,0 +1,166 @@ +/* + * iface.h - Network interface configuration API + * + * Copyright (C) 2006, 2007, 2008 Red Hat, 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; 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, see . + * + * Author(s): David Cantrell + */ + +#ifndef ISYSIFACE_H +#define ISYSIFACE_H + +#include +#include +#include +#include +#include + +/* Enumerated types used in iface.c as well as loader's network code */ +enum { IPUNUSED = -1, IPV4, IPV6 }; + +enum { IPV4_UNUSED_METHOD, IPV4_DHCP_METHOD, IPV4_MANUAL_METHOD, IPV4_IBFT_METHOD, IPV4_IBFT_DHCP_METHOD }; +enum { IPV6_UNUSED_METHOD, IPV6_AUTO_METHOD, IPV6_DHCP_METHOD, + IPV6_MANUAL_METHOD }; + +#define IPV4_FIRST_METHOD IPV4_DHCP_METHOD +#define IPV4_LAST_METHOD IPV4_MANUAL_METHOD + +#define IPV6_FIRST_METHOD IPV6_AUTO_METHOD +#define IPV6_LAST_METHOD IPV6_MANUAL_METHOD + +/* Flags for the iface_t (do we need these?) */ +#define IFACE_FLAGS_NO_WRITE_RESOLV_CONF (((uint64_t) 1) << 0) +#define IFACE_NO_WRITE_RESOLV_CONF(a) ((a) & IFACE_FLAGS_NO_WRITE_RESOLV_CONF) + +/* Macros for starting NetworkManager */ +#define NETWORKMANAGER "/usr/sbin/NetworkManager" + +/* Per-interface configuration information */ +typedef struct _iface_t { + /* device name (e.g., eth0) */ + char device[IF_NAMESIZE]; + + /* MAC address as xx:xx:xx:xx:xx:xx */ + char *macaddr; + + /* IPv4 (store addresses in in_addr format, use inet_pton() to display) */ + struct in_addr ipaddr; + struct in_addr netmask; + struct in_addr broadcast; + + /* IPv6 (store addresses in in6_addr format, prefix is just an int) */ + struct in6_addr ip6addr; + int ip6prefix; + + /* Gateway settings */ + struct in_addr gateway; + struct in6_addr gateway6; + + /* BOOTP (these can be IPv4 or IPv6, store human-readable version as str) */ + char *nextserver; + char *bootfile; + + /* DNS (these can be IPv4 or IPv6, store human-readable version as str) */ + char *dns[MAXNS]; + int numdns; + char *hostname; + char *domain; + char *search; + + /* Misc DHCP settings */ + int dhcptimeout; + char *vendorclass; + + /* Wireless settings */ + char *ssid; + char *wepkey; + + /* s390 specifics */ + int mtu; + char *subchannels; + char *portname; + char *peerid; + char *nettype; + char *ctcprot; + char *layer2; + char *portno; + + /* flags */ + uint64_t flags; + int ipv4method; + int ipv6method; + int isiBFT; +} iface_t; + +/* Function prototypes */ + +/* + * Given an interface name (e.g., eth0) and address family (e.g., AF_INET), + * return the IP address in human readable format (i.e., the output from + * inet_ntop()). Return NULL for no match or error. + */ +char *iface_ip2str(char *, int); + +/* + * Given an interface name (e.g., eth0), return the MAC address in human + * readable format (e.g., 00:11:52:12:D9:A0). Return NULL for no match. + */ +char *iface_mac2str(char *); + +/* Given an interface's MAC address, return the name (e.g., eth0) in human + * readable format. Return NULL for no match + */ +char *iface_mac2device(char *); + +/* + * Convert an IPv4 CIDR prefix to a dotted-quad netmask. Return NULL on + * failure. + */ +struct in_addr *iface_prefix2netmask(int); + +/* + * Initialize a new iface_t structure to default values. + */ +void iface_init_iface_t(iface_t *); + +/* + * Given a pointer to a struct in_addr, return 1 if it contains a valid + * address, 0 otherwise. + */ +int iface_have_in_addr(struct in_addr *addr); + +/* + * Given a pointer to a struct in6_addr, return 1 if it contains a valid + * address, 0 otherwise. + */ +int iface_have_in6_addr(struct in6_addr *addr6); + +/* + * Checks if NetworkManager has an active connection. + */ +gboolean is_nm_connected(void); + +/* + * Start NetworkManager + */ +int iface_start_NetworkManager(void); + +/* + * Set Maximum Transfer Unit (MTU) on specified interface + */ +int iface_set_interface_mtu(char *ifname, int mtu); + +#endif /* ISYSIFACE_H */ diff --git a/isys/imount.c b/isys/imount.c new file mode 100644 index 0000000..a8e346e --- /dev/null +++ b/isys/imount.c @@ -0,0 +1,290 @@ +/* + * imount.c + * + * Copyright (C) 2007, 2008, 2009 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "imount.h" + +#define _(foo) foo + +static int mkdirIfNone(char * directory); + +static int readFD(int fd, char **buf) { + char *p; + size_t size = 4096; + int s, filesize = 0; + + *buf = calloc(4096, sizeof (char)); + if (*buf == NULL) + abort(); + + do { + p = &(*buf)[filesize]; + s = read(fd, p, 4096); + if (s < 0) + break; + + filesize += s; + if (s == 0) + break; + + size += s; + *buf = realloc(*buf, size); + if (*buf == NULL) + abort(); + } while (1); + + if (filesize == 0 && s < 0) { + free(*buf); + *buf = NULL; + return -1; + } + + return filesize; +} + +int mountCommandWrapper(int mode, char *dev, char *where, char *fs, + char *options, char **err) { + int rc, child, status, pipefd[2]; + char *opts = NULL, *device = NULL, *cmd = NULL; + int programLogFD; + + if (mode == IMOUNT_MODE_MOUNT) { + cmd = "/bin/mount"; + } else if (mode == IMOUNT_MODE_UMOUNT) { + cmd = "/bin/umount"; + } else { + return IMOUNT_ERR_MODE; + } + + if (mode == IMOUNT_MODE_MOUNT) { + if (mkdirChain(where)) + return IMOUNT_ERR_ERRNO; + + if (strstr(fs, "nfs")) { + if (options) { + if (asprintf(&opts, "%s,nolock", options) == -1) { + fprintf(stderr, "%s: %d: %s\n", __func__, __LINE__, + strerror(errno)); + fflush(stderr); + abort(); + } + } else { + opts = strdup("nolock"); + } + + device = strdup(dev); + } else { + if ((options && strstr(options, "bind") == NULL) && + strncmp(dev, "LABEL=", 6) && strncmp(dev, "UUID=", 5) && + *dev != '/') { + if (asprintf(&device, "/dev/%s", dev) == -1) { + fprintf(stderr, "%s: %d: %s\n", __func__, __LINE__, + strerror(errno)); + fflush(stderr); + abort(); + } + } else { + device = strdup(dev); + } + + if (options) + opts = strdup(options); + } + } + + programLogFD = open("/tmp/program.log", + O_APPEND|O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH); + + if (pipe(pipefd)) + return IMOUNT_ERR_ERRNO; + + if (!(child = fork())) { + int fd; + + close(pipefd[0]); + + /* Close stdin entirely, redirect stdout to /tmp/program.log, and + * redirect stderr to a pipe so we can put error messages into + * exceptions. We'll only use these messages should mount also + * return an error code. + */ + fd = open("/dev/tty5", O_RDONLY); + close(STDIN_FILENO); + dup2(fd, STDIN_FILENO); + close(fd); + + close(STDOUT_FILENO); + dup2(programLogFD, STDOUT_FILENO); + + dup2(pipefd[1], STDERR_FILENO); + + if (mode == IMOUNT_MODE_MOUNT) { + if (opts) { + fprintf(stdout, "Running... %s -n -t %s -o %s %s %s\n", + cmd, fs, opts, device, where); + rc = execl(cmd, cmd, + "-n", "-t", fs, "-o", opts, device, where, NULL); + exit(1); + } else { + fprintf(stdout, "Running... %s -n -t %s %s %s\n", + cmd, fs, device, where); + rc = execl(cmd, cmd, "-n", "-t", fs, device, where, NULL); + exit(1); + } + } else if (mode == IMOUNT_MODE_UMOUNT) { + fprintf(stdout, "Running... %s %s\n", cmd, where); + rc = execl(cmd, cmd, where, NULL); + exit(1); + } else { + fprintf(stdout, "Running... Unknown imount mode: %d\n", mode); + exit(1); + } + } + + close(pipefd[1]); + + if (err != NULL) { + if (*err != NULL) { + rc = readFD(pipefd[0], err); + rc = write(programLogFD, *err, 4096); + } + } + + close(pipefd[0]); + waitpid(child, &status, 0); + + close(programLogFD); + + if (opts) { + free(opts); + } + + if (device) { + free(device); + } + + if (!WIFEXITED(status)) + return IMOUNT_ERR_OTHER; + else if ( (rc = WEXITSTATUS(status)) ) { + /* Refer to 'man mount' for the meaning of the error codes. */ + switch (rc) { + case 1: + return IMOUNT_ERR_PERMISSIONS; + case 2: + return IMOUNT_ERR_SYSTEM; + case 4: + return IMOUNT_ERR_MOUNTINTERNAL; + case 8: + return IMOUNT_ERR_USERINTERRUPT; + case 16: + return IMOUNT_ERR_MTAB; + case 32: + return IMOUNT_ERR_MOUNTFAILURE; + case 64: + return IMOUNT_ERR_PARTIALSUCC; + default: + return IMOUNT_ERR_OTHER; + } + } + + return 0; +} + +int doPwMount(char *dev, char *where, char *fs, char *options, char **err) { + return mountCommandWrapper(IMOUNT_MODE_MOUNT, + dev, where, fs, options, err); +} + +int doPwUmount(char *where, char **err) { + return mountCommandWrapper(IMOUNT_MODE_UMOUNT, + NULL, where, NULL, NULL, err); +} + +int mkdirChain(char * origChain) { + char * chain; + char * chptr; + + chain = alloca(strlen(origChain) + 1); + strcpy(chain, origChain); + chptr = chain; + + while ((chptr = strchr(chptr, '/'))) { + *chptr = '\0'; + if (mkdirIfNone(chain)) { + *chptr = '/'; + return IMOUNT_ERR_ERRNO; + } + + *chptr = '/'; + chptr++; + } + + if (mkdirIfNone(chain)) + return IMOUNT_ERR_ERRNO; + + return 0; +} + +/* Returns true iff it is possible that the mount command that have returned + * 'errno' might succeed at a later time (think e.g. not yet initialized USB + * device, etc.) */ +int mountMightSucceedLater(int mountRc) +{ + int rc; + switch (mountRc) { + case IMOUNT_ERR_MOUNTFAILURE: + rc = 1; + break; + default: + rc = 0; + } + return rc; +} + +static int mkdirIfNone(char * directory) { + int rc, mkerr; + char * chptr; + + /* If the file exists it *better* be a directory -- I'm not going to + actually check or anything */ + if (!access(directory, X_OK)) return 0; + + /* if the path is '/' we get ENOFILE not found" from mkdir, rather + then EEXIST which is weird */ + for (chptr = directory; *chptr; chptr++) + if (*chptr != '/') break; + if (!*chptr) return 0; + + rc = mkdir(directory, 0755); + mkerr = errno; + + if (!rc || mkerr == EEXIST) return 0; + + return IMOUNT_ERR_ERRNO; +} diff --git a/isys/imount.h b/isys/imount.h new file mode 100644 index 0000000..9fa6769 --- /dev/null +++ b/isys/imount.h @@ -0,0 +1,48 @@ +/* + * imount.h + * + * Copyright (C) 2007, 2008, 2009 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef H_IMOUNT +#define H_IMOUNT + +#define IMOUNT_ERR_ERRNO 1 +#define IMOUNT_ERR_OTHER 2 +#define IMOUNT_ERR_MODE 3 +#define IMOUNT_ERR_PERMISSIONS 4 +#define IMOUNT_ERR_SYSTEM 5 +#define IMOUNT_ERR_MOUNTINTERNAL 6 +#define IMOUNT_ERR_USERINTERRUPT 7 +#define IMOUNT_ERR_MTAB 8 +#define IMOUNT_ERR_MOUNTFAILURE 9 +#define IMOUNT_ERR_PARTIALSUCC 10 + +#include /* for umount() */ + +#define IMOUNT_RDONLY 1 +#define IMOUNT_BIND 2 +#define IMOUNT_REMOUNT 4 + +#define IMOUNT_MODE_MOUNT 1 +#define IMOUNT_MODE_UMOUNT 2 + +int doPwMount(char *dev, char *where, char *fs, char *options, char **err); +int doPwUmount(char *where, char **err); +int mkdirChain(char * origChain); +int mountMightSucceedLater(int mountRc); + +#endif diff --git a/isys/isofs.c b/isys/isofs.c new file mode 100644 index 0000000..bb5a44a --- /dev/null +++ b/isys/isofs.c @@ -0,0 +1,55 @@ +/* + * isofs.c + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#include +#include +#include + +#define BLOCK_SIZE 2048 + +/* returns 1 if file is an ISO, 0 otherwise */ +int fileIsIso(const char * file) { + int blkNum; + char magic[5]; + int fd; + + fd = open(file, O_RDONLY); + if (fd < 0) + return 0; + + for (blkNum = 16; blkNum < 100; blkNum++) { + if (lseek(fd, blkNum * BLOCK_SIZE + 1, SEEK_SET) < 0) { + close(fd); + return 0; + } + + if (read(fd, magic, sizeof(magic)) != sizeof(magic)) { + close(fd); + return 0; + } + + if (!strncmp(magic, "CD001", 5)) { + close(fd); + return 1; + } + } + + close(fd); + return 0; +} diff --git a/isys/isys.c b/isys/isys.c new file mode 100644 index 0000000..229daab --- /dev/null +++ b/isys/isys.c @@ -0,0 +1,691 @@ +/* + * isys.c + * + * Copyright (C) 2007, 2008, 2009 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#include + +#include +#include +#include +#define u32 __u32 +#include +#include +/* Need to tell loop.h what the actual dev_t type is. */ +#undef dev_t +#if defined(__alpha) || (defined(__sparc__) && defined(__arch64__)) +#define dev_t unsigned int +#else +#if defined(__x86_64__) +#define dev_t unsigned long +#else +#define dev_t unsigned short +#endif +#endif +#include +#undef dev_t +#define dev_t dev_t +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include + +#include "iface.h" +#include "isys.h" +#include "imount.h" +#include "ethtool.h" +#include "lang.h" +#include "eddsupport.h" +#include "auditd.h" +#include "imount.h" + +#ifndef CDROMEJECT +#define CDROMEJECT 0x5309 +#endif + +static PyObject * doMount(PyObject * s, PyObject * args); +static PyObject * doUMount(PyObject * s, PyObject * args); +static PyObject * doSwapon(PyObject * s, PyObject * args); +static PyObject * doSwapoff(PyObject * s, PyObject * args); +static PyObject * doLoSetup(PyObject * s, PyObject * args); +static PyObject * doUnLoSetup(PyObject * s, PyObject * args); +static PyObject * doLoChangeFd(PyObject * s, PyObject * args); +static PyObject * doWipeRaidSuperblock(PyObject * s, PyObject * args); +static PyObject * doGetRaidChunkSize(PyObject * s, PyObject * args); +static PyObject * doDevSpaceFree(PyObject * s, PyObject * args); +static PyObject * doResetResolv(PyObject * s, PyObject * args); +static PyObject * doLoadKeymap(PyObject * s, PyObject * args); +static PyObject * doExt2Dirty(PyObject * s, PyObject * args); +static PyObject * doExt2HasJournal(PyObject * s, PyObject * args); +static PyObject * doEjectCdrom(PyObject * s, PyObject * args); +static PyObject * doVtActivate(PyObject * s, PyObject * args); +static PyObject * doisPseudoTTY(PyObject * s, PyObject * args); +static PyObject * doisVioConsole(PyObject * s); +static PyObject * doSync(PyObject * s, PyObject * args); +static PyObject * doisIsoImage(PyObject * s, PyObject * args); +static PyObject * printObject(PyObject * s, PyObject * args); +static PyObject * py_bind_textdomain_codeset(PyObject * o, PyObject * args); +static PyObject * doSegvHandler(PyObject *s, PyObject *args); +static PyObject * doAuditDaemon(PyObject *s); +static PyObject * doPrefixToNetmask(PyObject *s, PyObject *args); +static PyObject * doGetBlkidData(PyObject * s, PyObject * args); +static PyObject * doIsCapsLockEnabled(PyObject * s, PyObject * args); +static PyObject * doGetLinkStatus(PyObject * s, PyObject * args); +static PyObject * doGetAnacondaVersion(PyObject * s, PyObject * args); + +static PyMethodDef isysModuleMethods[] = { + { "ejectcdrom", (PyCFunction) doEjectCdrom, METH_VARARGS, NULL }, + { "e2dirty", (PyCFunction) doExt2Dirty, METH_VARARGS, NULL }, + { "e2hasjournal", (PyCFunction) doExt2HasJournal, METH_VARARGS, NULL }, + { "devSpaceFree", (PyCFunction) doDevSpaceFree, METH_VARARGS, NULL }, + { "wiperaidsb", (PyCFunction) doWipeRaidSuperblock, METH_VARARGS, NULL }, + { "getraidchunk", (PyCFunction) doGetRaidChunkSize, METH_VARARGS, NULL }, + { "lochangefd", (PyCFunction) doLoChangeFd, METH_VARARGS, NULL }, + { "losetup", (PyCFunction) doLoSetup, METH_VARARGS, NULL }, + { "unlosetup", (PyCFunction) doUnLoSetup, METH_VARARGS, NULL }, + { "mount", (PyCFunction) doMount, METH_VARARGS, NULL }, + { "umount", (PyCFunction) doUMount, METH_VARARGS, NULL }, + { "resetresolv", (PyCFunction) doResetResolv, METH_VARARGS, NULL }, + { "swapon", (PyCFunction) doSwapon, METH_VARARGS, NULL }, + { "swapoff", (PyCFunction) doSwapoff, METH_VARARGS, NULL }, + { "loadKeymap", (PyCFunction) doLoadKeymap, METH_VARARGS, NULL }, + { "vtActivate", (PyCFunction) doVtActivate, METH_VARARGS, NULL}, + { "isPseudoTTY", (PyCFunction) doisPseudoTTY, METH_VARARGS, NULL}, + { "isVioConsole", (PyCFunction) doisVioConsole, METH_NOARGS, NULL}, + { "sync", (PyCFunction) doSync, METH_VARARGS, NULL}, + { "isisoimage", (PyCFunction) doisIsoImage, METH_VARARGS, NULL}, + { "printObject", (PyCFunction) printObject, METH_VARARGS, NULL}, + { "bind_textdomain_codeset", (PyCFunction) py_bind_textdomain_codeset, METH_VARARGS, NULL}, + { "handleSegv", (PyCFunction) doSegvHandler, METH_VARARGS, NULL }, + { "auditdaemon", (PyCFunction) doAuditDaemon, METH_NOARGS, NULL }, + { "prefix2netmask", (PyCFunction) doPrefixToNetmask, METH_VARARGS, NULL }, + { "getblkid", (PyCFunction) doGetBlkidData, METH_VARARGS, NULL }, + { "isCapsLockEnabled", (PyCFunction) doIsCapsLockEnabled, METH_VARARGS, NULL }, + { "getLinkStatus", (PyCFunction) doGetLinkStatus, METH_VARARGS, NULL }, + { "getAnacondaVersion", (PyCFunction) doGetAnacondaVersion, METH_VARARGS, NULL }, + { NULL, NULL, 0, NULL } +} ; + +static PyObject * doUnLoSetup(PyObject * s, PyObject * args) { + int loopfd; + + if (!PyArg_ParseTuple(args, "i", &loopfd)) return NULL; + if (ioctl(loopfd, LOOP_CLR_FD, 0)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +/* XXX - msw */ +#ifndef LOOP_CHANGE_FD +#define LOOP_CHANGE_FD 0x4C06 +#endif + +static PyObject * doLoChangeFd(PyObject * s, PyObject * args) { + int loopfd; + int targfd; + + if (!PyArg_ParseTuple(args, "ii", &loopfd, &targfd)) + return NULL; + if (ioctl(loopfd, LOOP_CHANGE_FD, targfd)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doLoSetup(PyObject * s, PyObject * args) { + int loopfd; + int targfd; + struct loop_info loopInfo; + char * loopName; + + if (!PyArg_ParseTuple(args, "iis", &loopfd, &targfd, &loopName)) + return NULL; + if (ioctl(loopfd, LOOP_SET_FD, targfd)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + memset(&loopInfo, 0, sizeof(loopInfo)); + strncpy(loopInfo.lo_name, basename(loopName), 63); + + if (ioctl(loopfd, LOOP_SET_STATUS, &loopInfo)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doUMount(PyObject * s, PyObject * args) { + char *err = NULL, *mntpoint = NULL; + int rc; + + if (!PyArg_ParseTuple(args, "s", &mntpoint)) { + return NULL; + } + + rc = doPwUmount(mntpoint, &err); + if (rc == IMOUNT_ERR_ERRNO) { + PyErr_SetFromErrno(PyExc_SystemError); + } else if (rc) { + PyObject *tuple = PyTuple_New(2); + + PyTuple_SetItem(tuple, 0, PyInt_FromLong(rc)); + + if (err == NULL) { + Py_INCREF(Py_None); + PyTuple_SetItem(tuple, 1, Py_None); + } else { + PyTuple_SetItem(tuple, 1, PyString_FromString(err)); + } + + PyErr_SetObject(PyExc_SystemError, tuple); + } + + if (rc) { + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doMount(PyObject * s, PyObject * args) { + char *err = NULL, *fs, *device, *mntpoint, *flags = NULL; + int rc; + + if (!PyArg_ParseTuple(args, "sss|z", &fs, &device, &mntpoint, + &flags)) return NULL; + + rc = doPwMount(device, mntpoint, fs, flags, &err); + if (rc == IMOUNT_ERR_ERRNO) + PyErr_SetFromErrno(PyExc_SystemError); + else if (rc) { + PyObject *tuple = PyTuple_New(2); + + PyTuple_SetItem(tuple, 0, PyInt_FromLong(rc)); + + if (err == NULL) { + Py_INCREF(Py_None); + PyTuple_SetItem(tuple, 1, Py_None); + } else { + PyTuple_SetItem(tuple, 1, PyString_FromString(err)); + } + + PyErr_SetObject(PyExc_SystemError, tuple); + } + + if (rc) return NULL; + + Py_INCREF(Py_None); + return Py_None; +} + +#define BOOT_SIGNATURE 0xaa55 /* boot signature */ +#define BOOT_SIG_OFFSET 510 /* boot signature offset */ + +int swapoff(const char * path); +int swapon(const char * path, int priorty); + +static PyObject * doSwapoff (PyObject * s, PyObject * args) { + char * path; + + if (!PyArg_ParseTuple(args, "s", &path)) return NULL; + + if (swapoff (path)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doSwapon (PyObject * s, PyObject * args) { + char * path; + + if (!PyArg_ParseTuple(args, "s", &path)) return NULL; + + if (swapon (path, 0)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +void init_isys(void) { + PyObject * m, * d; + + m = Py_InitModule("_isys", isysModuleMethods); + d = PyModule_GetDict(m); + + PyDict_SetItemString(d, "MIN_RAM", PyInt_FromLong(MIN_RAM)); + PyDict_SetItemString(d, "MIN_GUI_RAM", PyInt_FromLong(MIN_GUI_RAM)); + PyDict_SetItemString(d, "EARLY_SWAP_RAM", PyInt_FromLong(EARLY_SWAP_RAM)); +} + +static PyObject * doPrefixToNetmask (PyObject * s, PyObject * args) { + int prefix = 0; + struct in_addr *mask = NULL; + char dst[INET_ADDRSTRLEN+1]; + + if (!PyArg_ParseTuple(args, "i", &prefix)) + return NULL; + + if ((mask = iface_prefix2netmask(prefix)) == NULL) + return NULL; + + if (inet_ntop(AF_INET, mask, dst, INET_ADDRSTRLEN) == NULL) + return NULL; + + return Py_BuildValue("s", dst); +} + +static PyObject * doResetResolv(PyObject * s, PyObject * args) { + if (!PyArg_ParseTuple(args, "")) { + return NULL; + } + + /* reinit the resolver so DNS changes take affect */ + res_init(); + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doWipeRaidSuperblock(PyObject * s, PyObject * args) { + int fd; + unsigned long size; + struct mdp_super_t * sb; + + if (!PyArg_ParseTuple(args, "i", &fd)) return NULL; + + if (ioctl(fd, BLKGETSIZE, &size)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + /* put the size in 1k blocks */ + size >>= 1; + + if (lseek64(fd, ((off64_t) 512) * (off64_t) MD_NEW_SIZE_SECTORS(size), SEEK_SET) < 0) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + sb = malloc(sizeof(mdp_super_t)); + sb = memset(sb, '\0', sizeof(mdp_super_t)); + + if (write(fd, sb, sizeof(sb)) != sizeof(sb)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + return Py_None; +} + +static PyObject * doGetRaidChunkSize(PyObject * s, PyObject * args) { + int fd; + unsigned long size; + mdp_super_t sb; + + if (!PyArg_ParseTuple(args, "i", &fd)) return NULL; + + if (ioctl(fd, BLKGETSIZE, &size)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + /* put the size in 1k blocks */ + size >>= 1; + + if (lseek64(fd, ((off64_t) 512) * (off64_t) MD_NEW_SIZE_SECTORS(size), SEEK_SET) < 0) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + if (read(fd, &sb, sizeof(sb)) != sizeof(sb)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + if (sb.md_magic != MD_SB_MAGIC) { + PyErr_SetString(PyExc_ValueError, "bad md magic on device"); + return NULL; + } + + return Py_BuildValue("i", sb.chunk_size / 1024); +} + +static int get_bits(unsigned long long v) { + int b = 0; + + if ( v & 0xffffffff00000000LLU ) { b += 32; v >>= 32; } + if ( v & 0xffff0000LLU ) { b += 16; v >>= 16; } + if ( v & 0xff00LLU ) { b += 8; v >>= 8; } + if ( v & 0xf0LLU ) { b += 4; v >>= 4; } + if ( v & 0xcLLU ) { b += 2; v >>= 2; } + if ( v & 0x2LLU ) b++; + + return v ? b + 1 : b; +} + +static PyObject * doDevSpaceFree(PyObject * s, PyObject * args) { + char * path; + struct statfs sb; + unsigned long long size; + + if (!PyArg_ParseTuple(args, "s", &path)) return NULL; + + if (statfs(path, &sb)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + /* Calculate a saturated addition to prevent oveflow. */ + if ( get_bits(sb.f_bfree) + get_bits(sb.f_bsize) <= 64 ) + size = (unsigned long long)sb.f_bfree * sb.f_bsize; + else + size = ~0LLU; + + return PyLong_FromUnsignedLongLong(size>>20); +} + +static PyObject * doLoadKeymap (PyObject * s, PyObject * args) { + char * keymap; + int ret; + + if (!PyArg_ParseTuple(args, "s", &keymap)) return NULL; + + ret = isysLoadKeymap (keymap); + if (ret) { + errno = -ret; + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doExt2Dirty(PyObject * s, PyObject * args) { + char * device; + ext2_filsys fsys; + int rc; + int clean; + + if (!PyArg_ParseTuple(args, "s", &device)) return NULL; + + rc = ext2fs_open(device, EXT2_FLAG_FORCE, 0, 0, unix_io_manager, + &fsys); + if (rc) { + Py_INCREF(Py_None); + return Py_None; + } + + clean = fsys->super->s_state & EXT2_VALID_FS; + + ext2fs_close(fsys); + + return Py_BuildValue("i", !clean); +} +static PyObject * doExt2HasJournal(PyObject * s, PyObject * args) { + char * device; + ext2_filsys fsys; + int rc; + int hasjournal; + + if (!PyArg_ParseTuple(args, "s", &device)) return NULL; + rc = ext2fs_open(device, EXT2_FLAG_FORCE, 0, 0, unix_io_manager, + &fsys); + if (rc) { + Py_INCREF(Py_None); + return Py_None; + } + + hasjournal = fsys->super->s_feature_compat & EXT3_FEATURE_COMPAT_HAS_JOURNAL; + + ext2fs_close(fsys); + + return Py_BuildValue("i", hasjournal); +} + +static PyObject * doEjectCdrom(PyObject * s, PyObject * args) { + int fd; + + if (!PyArg_ParseTuple(args, "i", &fd)) return NULL; + + /* Ask it to unlock the door and then eject the disc. There's really + * nothing to do if unlocking doesn't work, so just eject without + * worrying about it. -- pjones + */ + ioctl(fd, CDROM_LOCKDOOR, 0); + if (ioctl(fd, CDROMEJECT, 1)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doVtActivate(PyObject * s, PyObject * args) { + int vtnum; + + if (!PyArg_ParseTuple(args, "i", &vtnum)) return NULL; + + if (ioctl(0, VT_ACTIVATE, vtnum)) { + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doisPseudoTTY(PyObject * s, PyObject * args) { + int fd; + struct stat sb; + + if (!PyArg_ParseTuple(args, "i", &fd)) return NULL; + fstat(fd, &sb); + + /* XXX close enough for now */ + return Py_BuildValue("i", ((major(sb.st_rdev) >= 136) && (major(sb.st_rdev) <= 143))); +} + +static PyObject * doisVioConsole(PyObject * s) { + return Py_BuildValue("i", isVioConsole()); +} + +static PyObject * doSync(PyObject * s, PyObject * args) { + int fd; + + if (!PyArg_ParseTuple(args, "", &fd)) return NULL; + sync(); + + Py_INCREF(Py_None); + return Py_None; +} + +int fileIsIso(const char * file); + +static PyObject * doisIsoImage(PyObject * s, PyObject * args) { + char * fn; + int rc; + + if (!PyArg_ParseTuple(args, "s", &fn)) return NULL; + + rc = fileIsIso(fn); + + return Py_BuildValue("i", rc); +} + +static PyObject * printObject (PyObject * o, PyObject * args) { + PyObject * obj; + char buf[256]; + + if (!PyArg_ParseTuple(args, "O", &obj)) + return NULL; + + snprintf(buf, 256, "<%s object at %lx>", obj->ob_type->tp_name, + (long) obj); + + return PyString_FromString(buf); +} + +static PyObject * +py_bind_textdomain_codeset(PyObject * o, PyObject * args) { + char *domain, *codeset, *ret; + + if (!PyArg_ParseTuple(args, "ss", &domain, &codeset)) + return NULL; + + ret = bind_textdomain_codeset(domain, codeset); + + if (ret) + return PyString_FromString(ret); + + PyErr_SetFromErrno(PyExc_SystemError); + return NULL; +} + +static PyObject * doSegvHandler(PyObject *s, PyObject *args) { + void *array[20]; + size_t size; + char **strings; + size_t i; + + signal(SIGSEGV, SIG_DFL); /* back to default */ + + size = backtrace (array, 20); + strings = backtrace_symbols (array, size); + + printf ("Anaconda received SIGSEGV!. Backtrace:\n"); + for (i = 0; i < size; i++) + printf ("%s\n", strings[i]); + + free (strings); + exit(1); +} + +static PyObject * doAuditDaemon(PyObject *s) { + audit_daemonize(); + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doGetBlkidData(PyObject * s, PyObject * args) { + char * dev, * key; + blkid_cache cache; + blkid_dev bdev = NULL; + blkid_tag_iterate titer; + const char * type, * data; + + if (!PyArg_ParseTuple(args, "ss", &dev, &key)) return NULL; + + blkid_get_cache(&cache, NULL); + + bdev = blkid_get_dev(cache, dev, BLKID_DEV_NORMAL); + if (bdev == NULL) + goto out; + titer = blkid_tag_iterate_begin(bdev); + while (blkid_tag_next(titer, &type, &data) >= 0) { + if (!strcmp(type, key)) { + blkid_tag_iterate_end(titer); + return Py_BuildValue("s", data); + } + } + blkid_tag_iterate_end(titer); + + out: + Py_INCREF(Py_None); + return Py_None; +} + +static PyObject * doIsCapsLockEnabled(PyObject * s, PyObject * args) { + Display *d = NULL; + XkbStateRec state; + + if ((d = XOpenDisplay(NULL)) == NULL) { + return NULL; + } + + memset(&state, 0, sizeof(state)); + XkbGetState(d, XkbUseCoreKbd, &state); + + if (XCloseDisplay(d)) { + return NULL; + } + + return PyBool_FromLong(state.locked_mods & LockMask); +} + +static PyObject * doGetLinkStatus(PyObject * s, PyObject * args) { + char *dev = NULL; + + if (!PyArg_ParseTuple(args, "s", &dev)) { + return NULL; + } + + if (get_link_status(dev) == 1) { + return PyBool_FromLong(1); + } + + return PyBool_FromLong(0); +} + +static PyObject * doGetAnacondaVersion(PyObject * s, PyObject * args) { + return Py_BuildValue("s", VERSION); +} + +/* vim:set shiftwidth=4 softtabstop=4: */ diff --git a/isys/isys.h b/isys/isys.h new file mode 100644 index 0000000..265dc77 --- /dev/null +++ b/isys/isys.h @@ -0,0 +1,38 @@ +/* + * isys.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef H_ISYS +#define H_ISYS + +#define MIN_RAM 131072 +#define MIN_GUI_RAM 393216 +#define EARLY_SWAP_RAM 524288 + +#define OUTPUT_TERMINAL "/dev/tty5" + +int insmod(char * modName, char * path, char ** args); +int rmmod(char * modName); + +/* returns 0 for true, !0 for false */ +int fileIsIso(const char * file); + +/* returns 1 if on an iSeries vio console, 0 otherwise */ +int isVioConsole(void); + +#endif diff --git a/isys/isys.py b/isys/isys.py new file mode 100755 index 0000000..152b755 --- /dev/null +++ b/isys/isys.py @@ -0,0 +1,558 @@ +# +# isys.py - installer utility functions and glue for C module +# +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Matt Wilson +# Erik Troan +# Jeremy Katz +# + +import _isys +import string +import os +import os.path +import socket +import stat +import posix +import sys +import iutil +import warnings +import resource +import re +import struct +import block +import dbus +import selinux + +import logging +log = logging.getLogger("anaconda") + +NM_SERVICE = "org.freedesktop.NetworkManager" +NM_MANAGER_PATH = "/org/freedesktop/NetworkManager" +NM_MANAGER_IFACE = "org.freedesktop.NetworkManager" +NM_ACTIVE_CONNECTION_IFACE = "org.freedesktop.NetworkManager.Connection.Active" +NM_CONNECTION_IFACE = "org.freedesktop.NetworkManagerSettings.Connection" +NM_DEVICE_IFACE = "org.freedesktop.NetworkManager.Device" + +NM_STATE_UNKNOWN = 0 +NM_STATE_ASLEEP = 1 +NM_STATE_CONNECTING = 2 +NM_STATE_CONNECTED = 3 +NM_STATE_DISCONNECTED = 4 + +DBUS_PROPS_IFACE = "org.freedesktop.DBus.Properties" + +mountCount = {} + +MIN_RAM = _isys.MIN_RAM +MIN_GUI_RAM = _isys.MIN_GUI_RAM +EARLY_SWAP_RAM = _isys.EARLY_SWAP_RAM + +## Get the amount of free space available under a directory path. +# @param path The directory path to check. +# @return The amount of free space available, in +def pathSpaceAvailable(path): + return _isys.devSpaceFree(path) + +## Set up an already existing device node to be used as a loopback device. +# @param device The full path to a device node to set up as a loopback device. +# @param file The file to mount as loopback on device. +# @param readOnly Should this loopback device be used read-only? +def losetup(device, file, readOnly = 0): + # FIXME: implement this as a storage.devices.Device subclass + if readOnly: + mode = os.O_RDONLY + else: + mode = os.O_RDWR + targ = os.open(file, mode) + loop = os.open(device, mode) + try: + _isys.losetup(loop, targ, file) + finally: + os.close(loop) + os.close(targ) + +def lochangefd(device, file): + # FIXME: implement this as a storage.devices.Device subclass + loop = os.open(device, os.O_RDONLY) + targ = os.open(file, os.O_RDONLY) + try: + _isys.lochangefd(loop, targ) + finally: + os.close(loop) + os.close(targ) + +## Disable a previously setup loopback device. +# @param device The full path to an existing loopback device node. +def unlosetup(device): + # FIXME: implement this as a storage.devices.Device subclass + loop = os.open(device, os.O_RDONLY) + try: + _isys.unlosetup(loop) + finally: + os.close(loop) + +## Mount a filesystem, similar to the mount system call. +# @param device The device to mount. If bindMount is True, this should be an +# already mounted directory. Otherwise, it should be a device +# name. +# @param location The path to mount device on. +# @param fstype The filesystem type on device. This can be disk filesystems +# such as vfat or ext3, or pseudo filesystems such as proc or +# selinuxfs. +# @param readOnly Should this filesystem be mounted readonly? +# @param bindMount Is this a bind mount? (see the mount(8) man page) +# @param remount Are we mounting an already mounted filesystem? +# @return The return value from the mount system call. +def mount(device, location, fstype = "ext2", readOnly = False, + bindMount = False, remount = False, options = None): + flags = None + location = os.path.normpath(location) + if not options: + opts = ["defaults"] + else: + opts = options.split(",") + + # We don't need to create device nodes for devices that start with '/' + # (like '/usbdevfs') and also some special fake devices like 'proc'. + # First try to make a device node and if that fails, assume we can + # mount without making a device node. If that still fails, the caller + # will have to deal with the exception. + # We note whether or not we created a node so we can clean up later. + + if mountCount.has_key(location) and mountCount[location] > 0: + mountCount[location] = mountCount[location] + 1 + return + + if readOnly or bindMount or remount: + if readOnly: + opts.append("ro") + if bindMount: + opts.append("bind") + if remount: + opts.append("remount") + + flags = ",".join(opts) + + log.debug("isys.py:mount()- going to mount %s on %s as %s with options %s" %(device, location, fstype, flags)) + rc = _isys.mount(fstype, device, location, flags) + + if not rc: + mountCount[location] = 1 + + return rc + +## Unmount a filesystem, similar to the umount system call. +# @param what The directory to be unmounted. This does not need to be the +# absolute path. +# @param removeDir Should the mount point be removed after being unmounted? +# @return The return value from the umount system call. +def umount(what, removeDir = True): + what = os.path.normpath(what) + + if not os.path.isdir(what): + raise ValueError, "isys.umount() can only umount by mount point" + + if mountCount.has_key(what) and mountCount[what] > 1: + mountCount[what] = mountCount[what] - 1 + return + + log.debug("isys.py:umount()- going to unmount %s, removeDir = %s" % (what, removeDir)) + rc = _isys.umount(what) + + if removeDir and os.path.isdir(what): + try: + os.rmdir(what) + except: + pass + + if not rc and mountCount.has_key(what): + del mountCount[what] + + return rc + +## Disable swap. +# @param path The full path of the swap device to disable. +def swapoff (path): + return _isys.swapoff (path) + +## Enable swap. +# @param path The full path of the swap device to enable. +def swapon (path): + return _isys.swapon (path) + +## Load a keyboard layout for text mode installs. +# @param keymap The keyboard layout to load. This must be one of the values +# from rhpl.KeyboardModels. +def loadKeymap(keymap): + return _isys.loadKeymap (keymap) + +def resetResolv(): + return _isys.resetresolv() + +def readFSUuid(device): + if not os.path.exists(device): + device = "/dev/%s" % device + + label = _isys.getblkid(device, "UUID") + return label + +def readFSLabel(device): + if not os.path.exists(device): + device = "/dev/%s" % device + + label = _isys.getblkid(device, "LABEL") + return label + +def readFSType(device): + if not os.path.exists(device): + device = "/dev/%s" % device + + fstype = _isys.getblkid(device, "TYPE") + if fstype is None: + # FIXME: libblkid doesn't show physical volumes as having a filesystem + # so let's sniff for that.(#409321) + try: + fd = os.open(device, os.O_RDONLY) + buf = os.read(fd, 2048) + except: + return fstype + finally: + try: + os.close(fd) + except: + pass + + if buf.startswith("HM"): + return "physical volume (LVM)" + for sec in range(0, 4): + off = (sec * 512) + 24 + if len(buf) < off: + continue + if buf[off:].startswith("LVM2"): + return "physical volume (LVM)" + elif fstype == "lvm2pv": + return "physical volume (LVM)" + return fstype + +def ext2IsDirty(device): + label = _isys.e2dirty(device) + return label + +def ext2HasJournal(device): + hasjournal = _isys.e2hasjournal(device) + return hasjournal + +def modulesWithPaths(): + mods = [] + for modline in open("/proc/modules", "r"): + modName = modline.split(" ", 1)[0] + modInfo = iutil.execWithCapture("modinfo", + ["-F", "filename", modName]).splitlines() + modPaths = [ line.strip() for line in modInfo if line!="" ] + mods.extend(modPaths) + return mods + +def driveUsesModule(device, modules): + """Returns true if a drive is using a prticular module. Only works + for SCSI devices right now.""" + + if not isinstance(modules, ().__class__) and not \ + isinstance(modules, [].__class__): + modules = [modules] + + if device[:2] == "hd": + return False + rc = False + if os.access("/tmp/scsidisks", os.R_OK): + sdlist=open("/tmp/scsidisks", "r") + sdlines = sdlist.readlines() + sdlist.close() + for l in sdlines: + try: + # each line has format of: + (sddev, sdmod) = string.split(l) + + if sddev == device: + if sdmod in modules: + rc = True + break + except: + pass + return rc + +def vtActivate (num): + if iutil.isS390(): + return + _isys.vtActivate (num) + +def isPseudoTTY (fd): + return _isys.isPseudoTTY (fd) + +## Flush filesystem buffers. +def sync (): + return _isys.sync () + +## Determine if a file is an ISO image or not. +# @param file The full path to a file to check. +# @return True if ISO image, False otherwise. +def isIsoImage(file): + return _isys.isisoimage(file) + +# Return number of network devices +def getNetworkDeviceCount(): + bus = dbus.SystemBus() + nm = bus.get_object(NM_SERVICE, NM_MANAGER_PATH) + devlist = nm.get_dbus_method("GetDevices")() + return len(devlist) + +# Get a D-Bus interface for the specified device's (e.g., eth0) properties. +# If dev=None, return a hash of the form 'hash[dev] = props_iface' that +# contains all device properties for all interfaces that NetworkManager knows +# about. +def getDeviceProperties(dev=None): + bus = dbus.SystemBus() + nm = bus.get_object(NM_SERVICE, NM_MANAGER_PATH) + devlist = nm.get_dbus_method("GetDevices")() + all = {} + + for path in devlist: + device = bus.get_object(NM_SERVICE, path) + device_props_iface = dbus.Interface(device, DBUS_PROPS_IFACE) + + device_interface = str(device_props_iface.Get(NM_MANAGER_IFACE, "Interface")) + + if dev is None: + all[device_interface] = device_props_iface + elif device_interface == dev: + return device_props_iface + + if dev is None: + return all + else: + return None + +# Return true if method is currently 'dhcp' for the specified device. +def isDeviceDHCP(dev=None): + if dev is None: + return False + + bus = dbus.SystemBus() + nm = bus.get_object(NM_SERVICE, NM_MANAGER_PATH) + nm_props_iface = dbus.Interface(nm, DBUS_PROPS_IFACE) + active_connections = nm_props_iface.Get(NM_MANAGER_IFACE, "ActiveConnections") + + for path in active_connections: + active = bus.get_object(NM_SERVICE, path) + active_props_iface = dbus.Interface(active, DBUS_PROPS_IFACE) + + active_service_name = active_props_iface.Get(NM_ACTIVE_CONNECTION_IFACE, "ServiceName") + active_path = active_props_iface.Get(NM_ACTIVE_CONNECTION_IFACE, "Connection") + active_devices = active_props_iface.Get(NM_ACTIVE_CONNECTION_IFACE, "Devices") + + device = bus.get_object(NM_SERVICE, active_devices[0]) + device_props_iface = dbus.Interface(device, DBUS_PROPS_IFACE) + iface = device_props_iface.Get(NM_DEVICE_IFACE, "Interface") + + if iface != dev: + continue + + connection = bus.get_object(active_service_name, active_path) + connection_iface = dbus.Interface(connection, NM_CONNECTION_IFACE) + settings = connection_iface.GetSettings() + + ip4_setting = settings.get('ipv4') + if not ip4_setting or not ip4_setting['method'] or ip4_setting['method'] == 'auto': + return True + + return False + +# Get the MAC address for a network device. +def getMacAddress(dev): + if dev == '' or dev is None: + return False + + device_props_iface = getDeviceProperties(dev=dev) + if device_props_iface is None: + return None + + device_macaddr = None + try: + device_macaddr = device_props_iface.Get(NM_MANAGER_IFACE, "HwAddress").upper() + except dbus.exceptions.DBusException as e: + if e.get_dbus_name() != 'org.freedesktop.DBus.Error.InvalidArgs': + raise + return device_macaddr + +# Get a description string for a network device (e.g., eth0) +def getNetDevDesc(dev): + from baseudev import udev_get_device + desc = "Network Interface" + + if dev == '' or dev is None: + return desc + + bus = dbus.SystemBus() + nm = bus.get_object(NM_SERVICE, NM_MANAGER_PATH) + devlist = nm.get_dbus_method("GetDevices")() + + for path in devlist: + device = bus.get_object(NM_SERVICE, path) + device_iface = dbus.Interface(device, DBUS_PROPS_IFACE) + device_props = device_iface.get_dbus_method("GetAll")(NM_DEVICE_IFACE) + + if dev == device_props['Interface']: + # This is the sysfs path (for now). + udev_path = device_props['Udi'] + dev = udev_get_device(udev_path[4:]) + + if dev is None: + log.debug("weird, we have a None dev with path %s" % path) + elif dev.has_key("ID_VENDOR_ENC") and dev.has_key("ID_MODEL_ENC"): + desc = "%s %s" % (dev["ID_VENDOR_ENC"], dev["ID_MODEL_ENC"]) + elif dev.has_key("ID_VENDOR_FROM_DATABASE") and dev.has_key("ID_MODEL_FROM_DATABASE"): + desc = "%s %s" % (dev["ID_VENDOR_FROM_DATABASE"], dev["ID_MODEL_FROM_DATABASE"]) + + return desc + + return desc + +# Determine if a network device is a wireless device. +def isWireless(dev): + if dev == '' or dev is None: + return False + + device_props_iface = getDeviceProperties(dev=dev) + if device_props_iface is None: + return None + + device_type = int(device_props_iface.Get(NM_MANAGER_IFACE, "DeviceType")) + + # from include/NetworkManager.h in the NM source code + # 0 == NM_DEVICE_TYPE_UNKNOWN + # 1 == NM_DEVICE_TYPE_ETHERNET + # 2 == NM_DEVICE_TYPE_WIFI + # 3 == NM_DEVICE_TYPE_GSM + # 4 == NM_DEVICE_TYPE_CDMA + if device_type == 2: + return True + else: + return False + +# Get the IP address for a network device. +def getIPAddress(dev): + if dev == '' or dev is None: + return None + + device_props_iface = getDeviceProperties(dev=dev) + if device_props_iface is None: + return None + + # XXX: add support for IPv6 addresses when NM can do that + device_ip4addr = device_props_iface.Get(NM_MANAGER_IFACE, "Ip4Address") + + try: + tmp = struct.pack('I', device_ip4addr) + address = socket.inet_ntop(socket.AF_INET, tmp) + except ValueError, e: + return None + + return address + +## Get the correct context for a file from loaded policy. +# @param fn The filename to query. +def matchPathContext(fn): + con = None + try: + con = selinux.matchpathcon(os.path.normpath(fn), 0)[1] + except OSError as e: + log.info("failed to get default SELinux context for %s: %s" % (fn, e)) + return con + +## Set the SELinux file context of a file +# @param fn The filename to fix. +# @param con The context to use. +# @param instroot An optional root filesystem to look under for fn. +def setFileContext(fn, con, instroot = '/'): + full_path = os.path.normpath("%s/%s" % (instroot, fn)) + rc = False + if con is not None and os.access(full_path, os.F_OK): + try: + rc = (selinux.lsetfilecon(full_path, con) == 0) + except OSError as e: + log.info("failed to set SELinux context for %s: %s" % (full_path, e)) + return rc + +## Restore the SELinux file context of a file to its default. +# @param fn The filename to fix. +# @param instroot An optional root filesystem to look under for fn. +def resetFileContext(fn, instroot = '/'): + con = matchPathContext(fn) + if con: + if setFileContext(fn, con, instroot): + return con + return None + +def prefix2netmask(prefix): + return _isys.prefix2netmask(prefix) + +def netmask2prefix (netmask): + prefix = 0 + + while prefix < 33: + if (prefix2netmask(prefix) == netmask): + return prefix + + prefix += 1 + + return prefix + +isPAE = None +def isPaeAvailable(): + global isPAE + if isPAE is not None: + return isPAE + + isPAE = False + if not iutil.isX86(): + return isPAE + + f = open("/proc/cpuinfo", "r") + lines = f.readlines() + f.close() + + for line in lines: + if line.startswith("flags") and line.find("pae") != -1: + isPAE = True + break + + return isPAE + +def getLinkStatus(dev): + return _isys.getLinkStatus(dev) + +def getAnacondaVersion(): + return _isys.getAnacondaVersion() + +auditDaemon = _isys.auditdaemon + +handleSegv = _isys.handleSegv + +printObject = _isys.printObject +bind_textdomain_codeset = _isys.bind_textdomain_codeset +isVioConsole = _isys.isVioConsole diff --git a/isys/lang.c b/isys/lang.c new file mode 100644 index 0000000..b6e2a36 --- /dev/null +++ b/isys/lang.c @@ -0,0 +1,207 @@ +/* + * lang.c + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#ifdef NR_KEYS +#undef NR_KEYS +#define NR_KEYS 128 +#endif + +#include "linux/kd.h" + +#include "cpio.h" +#include "isys.h" +#include "lang.h" +#include "stubs.h" + +int isysLoadFont(void) { + unsigned char font[65536]; + struct console_font_op cfo; + unsigned short map[E_TABSZ]; + struct unimapdesc d; + struct unimapinit u; + struct unipair desc[2048]; + gzFile stream; + int rc; + +#if defined (__s390__) || defined (__s390x__) + return 0; +#endif + stream = gunzip_open("/etc/screenfont.gz"); + if (!stream) + return -EACCES; + + gunzip_read(stream, &cfo, sizeof(cfo)); + gunzip_read(stream, font, sizeof(font)); + gunzip_read(stream, map, sizeof(map)); + gunzip_read(stream, &d.entry_ct, sizeof(d.entry_ct)); + d.entries = desc; + gunzip_read(stream, desc, d.entry_ct * sizeof(desc[0])); + gunzip_close(stream); + + cfo.data = font; + cfo.op = KD_FONT_OP_SET; + + rc = ioctl(1, KDFONTOP, &cfo); + if (rc) return rc; + rc = ioctl(1, PIO_UNIMAPCLR, &u); + if (rc) return rc; + rc = ioctl(1, PIO_UNIMAP, &d); + if (rc) return rc; + rc = ioctl(1, PIO_UNISCRNMAP, map); + if (rc) return rc; + /* activate the font map */ + fprintf(stderr, "\033(K"); + return 0; +} + +int isysSetUnicodeKeymap(void) { + int console; + +#if defined (__s390__) || defined (__s390x__) + return 0; +#endif + console = open("/dev/console", O_RDWR); + if (console < 0) + return -EACCES; + + /* place keyboard in unicode mode */ + ioctl(console, KDSKBMODE, K_UNICODE); + close(console); + return 0; +} + +/* the file pointer must be at the beginning of the section already! */ +int loadKeymap(gzFile stream) { + int console; + int kmap, key; + struct kbentry entry; + int keymaps[MAX_NR_KEYMAPS]; + int count = 0; + unsigned int magic; + short keymap[NR_KEYS]; + struct stat sb; + +#if defined (__s390__) || defined (__s390x__) + return 0; +#endif + if (isVioConsole()) + return 0; + + /* assume that if we're already on a pty loading a keymap is silly */ + fstat(0, &sb); + if (major(sb.st_rdev) == 3 || major(sb.st_rdev) == 136) + return 0; + + if (gunzip_read(stream, &magic, sizeof(magic)) != sizeof(magic)) + return -EIO; + + if (magic != KMAP_MAGIC) return -EINVAL; + + if (gunzip_read(stream, keymaps, sizeof(keymaps)) != sizeof(keymaps)) + return -EINVAL; + + console = open("/dev/tty0", O_RDWR); + if (console < 0) + return -EACCES; + + for (kmap = 0; kmap < MAX_NR_KEYMAPS; kmap++) { + if (!keymaps[kmap]) continue; + + if (gunzip_read(stream, keymap, sizeof(keymap)) != sizeof(keymap)) { + close(console); + return -EIO; + } + + count++; + for (key = 0; key < NR_KEYS; key++) { + entry.kb_index = key; + entry.kb_table = kmap; + entry.kb_value = keymap[key]; + if (KTYP(entry.kb_value) != KT_SPEC) { + if (ioctl(console, KDSKBENT, &entry)) { + int ret = errno; + close(console); + return ret; + } + } + } + } + close(console); + return 0; +} + +int isysLoadKeymap(char * keymap) { + int num = -1; + int rc; + gzFile f; + struct kmapHeader hdr; + struct kmapInfo * infoTable; + char buf[16384]; /* I hope this is big enough */ + int i; + + f = gunzip_open("/etc/keymaps.gz"); + if (!f) return -EACCES; + + if (gunzip_read(f, &hdr, sizeof(hdr)) != sizeof(hdr)) { + gunzip_close(f); + return -EINVAL; + } + + i = hdr.numEntries * sizeof(*infoTable); + infoTable = alloca(i); + if (gunzip_read(f, infoTable, i) != i) { + gunzip_close(f); + return -EIO; + } + + for (i = 0; i < hdr.numEntries; i++) + if (!strcmp(infoTable[i].name, keymap)) { + num = i; + break; + } + + if (num == -1) { + gunzip_close(f); + return -ENOENT; + } + + for (i = 0; i < num; i++) { + if (gunzip_read(f, buf, infoTable[i].size) != infoTable[i].size) { + gunzip_close(f); + return -EIO; + } + } + + rc = loadKeymap(f); + + gunzip_close(f); + + return rc; +} diff --git a/isys/lang.h b/isys/lang.h new file mode 100644 index 0000000..a08adbd --- /dev/null +++ b/isys/lang.h @@ -0,0 +1,44 @@ +/* + * lang.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#ifndef ISYS_LANG_H +#define ISYS_LANG_H + +#include "stubs.h" + +/* define ask johnsonm@redhat.com where this came from */ +#define KMAP_MAGIC 0x8B39C07F +#define KMAP_NAMELEN 40 /* including '\0' */ + +struct kmapHeader { + int magic; + int numEntries; +}; + +struct kmapInfo { + int size; + char name[KMAP_NAMELEN]; +}; + +int loadKeymap(gzFile stream); +int isysLoadFont(void); +int isysLoadKeymap(char * keymap); +int isysSetUnicodeKeymap(void); + +#endif diff --git a/isys/linkdetect.c b/isys/linkdetect.c new file mode 100644 index 0000000..f97a291 --- /dev/null +++ b/isys/linkdetect.c @@ -0,0 +1,202 @@ +/* + * linkdetect.c - simple link detection + * + * pulls code from mii-tool.c in net-toools and ethtool so + * that we can do everything that jgarzik says we should check + * + * Copyright (C) 2002, 2003 Red Hat, Inc. All rights reserved. + * Portions Copyright (C) 2000 David A. Hinds -- dhinds@pcmcia.sourceforge.org + * + * 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, see . + * + * Author(s): Jeremy Katz + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include +#include +#include "ethtool.h" + +static struct ifreq ifr; + +static int mdio_read(int skfd, uint16_t location) +{ + struct mii_ioctl_data mii; + + memset(&mii, 0, sizeof(mii)); + memcpy(&mii, &ifr.ifr_data, sizeof(mii)); + mii.reg_num = location; + memcpy(&ifr.ifr_data, &mii, sizeof(mii)); + + if (ioctl(skfd, SIOCGMIIREG, &ifr) < 0) { +#ifdef STANDALONE + fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name, + strerror(errno)); +#endif + return -1; + } else { + memcpy(&mii, &ifr.ifr_data, sizeof(mii)); + } + + return mii.val_out; +} + +/* we don't need writing right now */ +#if 0 +static void mdio_write(int skfd, int location, int value) +{ + struct mii_ioctl_data *mii = (struct mii_ioctl_data *)&ifr.ifr_data; + mii->reg_num = location; + mii->val_in = value; + if (ioctl(skfd, SIOCSMIIREG, &ifr) < 0) { +#ifdef STANDALONE + fprintf(stderr, "SIOCSMIIREG on %s failed: %s\n", ifr.ifr_name, + strerror(errno)); +#endif + } +} +#endif + + + +static int get_mii_link_status(int sock) { + int i, mii_val[32]; + + if (ioctl(sock, SIOCGMIIPHY, &ifr) < 0) { + if (errno != ENODEV) +#ifdef STANDALONE + fprintf(stderr, "SIOCGMIIPHY on '%s' failed: %s\n", + ifr.ifr_name, strerror(errno)); +#endif + return -1; + } + + /* Some bits in the BMSR are latched, but we can't rely on being + the only reader, so only the current values are meaningful */ + mdio_read(sock, MII_BMSR); + for (i = 0; i < 8; i++) + mii_val[i] = mdio_read(sock, i); + + if (mii_val[MII_BMCR] == 0xffff) { +#ifdef STANDALONE + fprintf(stderr, " No MII transceiver present!.\n"); +#endif + return -1; + } + + if (mii_val[MII_BMSR] & BMSR_LSTATUS) + return 1; + else + return 0; +} + +static int get_ethtool_link_status(int sock) { + struct ethtool_value edata; + int rc; + + edata.cmd = ETHTOOL_GLINK; + ifr.ifr_data = (caddr_t)&edata; + rc = ioctl(sock, SIOCETHTOOL, &ifr); + if (rc == 0) { + return edata.data; + } else if (errno != EOPNOTSUPP) { +#ifdef STANDALONE + fprintf(stderr, "Cannot get link status (%d): %s\n", errno, strerror(errno)); +#endif + } + + return -1; +} + + + +int get_link_status(char * devname) { + int sock, rc; + + if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { +#ifdef STANDALONE + fprintf(stderr, "Error creating socket: %s\n", strerror(errno)); +#endif + return -1; + } + + /* make sure interface is up and activated */ + memset(&ifr, 0, sizeof(ifr)); + strcpy(ifr.ifr_name, devname); + + if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) { + return -1; + } + + ifr.ifr_flags |= (IFF_UP | IFF_RUNNING); + + if (ioctl(sock, SIOCSIFFLAGS, &ifr) < 0) { + return -1; + } + + /* Setup our control structures. */ + memset(&ifr, 0, sizeof(ifr)); + strcpy(ifr.ifr_name, devname); + + /* check for link with both ethtool and mii registers. ethtool is + * supposed to be the One True Way (tm), but it seems to not work + * with much yet :/ */ + + rc = get_ethtool_link_status(sock); +#ifdef STANDALONE + printf("ethtool link status of %s is: %d\n", devname, rc); +#endif + if (rc == 1) { + close(sock); + return 1; + } + + rc = get_mii_link_status(sock); +#ifdef STANDALONE + printf("MII link status of %s is: %d\n", devname, rc); +#endif + if (rc == 1) { + close(sock); + return 1; + } + + return 0; +} + +#ifdef STANDALONE +/* hooray for stupid test programs! */ +int main(int argc, char **argv) { + char * dev; + + if (argc >= 2) + dev = argv[1]; + else + dev = strdup("eth0"); + + printf("link status of %s is %d\n", dev, get_link_status(dev)); + return 0; +} +#endif diff --git a/isys/minifind.c b/isys/minifind.c new file mode 100644 index 0000000..f483055 --- /dev/null +++ b/isys/minifind.c @@ -0,0 +1,77 @@ +/* minifind.c -- simple find library + * + * Copyright (c) 2002 Terra Soft Solutions, Inc. + * Written by Dan Burcaw + * + * This software may be freely redistributed under the terms of the GNU + * library public license. + * + * You should have received a copy of the GNU Library Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#include "minifind.h" + +// insert a node at head of linked-list +void insert_node(struct pathNode *n, char *path) +{ + struct pathNode *new = (struct pathNode *) malloc(sizeof(struct pathNode)); + new->path = path; + new->next = n->next; + n->next = new; +} + +// return input strip less last character +char *stripLastChar(char *in) +{ + char *out = malloc(sizeof(char)*strlen(in)); + snprintf(out, strlen(in) - 1, "%s", in); + return out; +} + +// do the work +char *minifind(char *dir, char *search, struct findNode *list) +{ + char *d = NULL; + int n; + struct dirent **namelist; + struct stat buf; + + if (dir[strlen(dir)-1] == '/') + dir = stripLastChar(dir); + + // check is there is an exact filematch to dir + // when search is not specified + if (search == NULL) + { + if (lstat(dir, &buf) == 0) + insert_node(list->result, dir); + return 0; + } + + n = scandir(dir, &namelist, 0, alphasort); + if (n >= 0) + { + while (n--) + { + d = malloc(sizeof(char) * (strlen(dir) \ + + strlen(namelist[n]->d_name)+1)); + sprintf(d, "%s/%s", dir, namelist[n]->d_name); + if (strstr(namelist[n]->d_name, search)) + insert_node(list->result, d); + + if ((lstat(d, &buf) == 0) && S_ISDIR(buf.st_mode)) + { + if (strcmp(namelist[n]->d_name, ".") && + strcmp(namelist[n]->d_name, "..")) + d = minifind(d, search, list); + } + free(namelist[n]); + } + free(namelist); + return d; + } + return 0; +} diff --git a/isys/minifind.h b/isys/minifind.h new file mode 100644 index 0000000..4f72525 --- /dev/null +++ b/isys/minifind.h @@ -0,0 +1,42 @@ +/* minifind.h + * + * Copyright (c) 2002 Terra Soft Solutions, Inc. + * Written by Dan Burcaw + * + * This software may be freely redistributed under the terms of the GNU + * library public license. + * + * You should have received a copy of the GNU Library Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + */ + +#ifndef MINIFIND_H +#define MINIFIND_H + +#include +#include +#include +#include +#include +#include +#include + +struct pathNode +{ + char *path; + struct pathNode *next; +}; + +struct findNode +{ + struct pathNode *result; + struct pathNode *exclude; +}; + +void insert_node(struct pathNode *n, char *path); +char *stripLastChar(char *in); +char *minifind(char *dir, char *search, struct findNode *list); + +#endif /* MINIFIND_H */ diff --git a/isys/str.c b/isys/str.c new file mode 100644 index 0000000..cf05473 --- /dev/null +++ b/isys/str.c @@ -0,0 +1,125 @@ +/* + * str.c - String helper functions that don't need string.h or ctype.h + * + * Copyright (C) 2006 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): David Cantrell + */ + +#include +#include + +#include "str.h" + +/** + * Called by str2upper() or str2lower() to do the actual work. + * + * @param str String to convert. + * @param lower Lower bound for the character range (e.g., a - z). + * @param upper Upper bound for the character range (e.g., a - z). + * @param shift Shift value (32 for lowercase, -32 for uppercase). + * @return Pointer to str. + */ +char *str2case(char *str, char lower, char upper, int shift) { + char *tmp; + + if (str == NULL) + return NULL; + + /* man ascii(7) */ + tmp = str; + while (*tmp != '\0') { + if (*tmp >= lower && *tmp <= upper) + *tmp += shift; + + tmp++; + } + + return str; +} + +/** + * Convert given string to uppercase. Modifies the argument in the caller's + * stack. If you must ask simply "why?" for this function, it's so we don't + * need toupper() and the same for loop all over the place. + * + * LIMITATIONS: Only deals with ASCII character set. + * + * @param str String to convert to uppercase. + * @return Pointer to str. + */ +char *str2upper(char *str) { + return str2case(str, 'a', 'z', -32); +} + +/** + * Convert given string to lowercase. Modifies the argument in the caller's + * stack. If you must ask simply "why?" for this function, it's so we don't + * need tolower() and the same for loop all over the place. + * + * LIMITATIONS: Only deals with ASCII character set. + * + * @param str String to convert to lowercase. + * @return Pointer to str. + */ +char *str2lower(char *str) { + return str2case(str, 'A', 'Z', 32); +} + +/** + * Pretty much an exact copy of index(3) from the C library. + * @param str String to scan. + * @param ch Character to scan for. + * @return Position of ch in str, NULL if not found. + */ +char *strindex(char *str, int ch) { + if (str == NULL) + return NULL; + + do { + if (*str == ch) + return str; + else + str++; + } while (*str != '\0'); + + return NULL; +} + +/** + * Return number of occurrences of a character in a string. + * @param str String to scan. + * @param ch Character to scan for. + * @return Number of occurrences of ch in str. + */ +int strcount(char *str, int ch) { + int retval = 0; + char *tmp = str; + + if (tmp == NULL) + return retval; + + do { + if ((tmp = strindex(tmp, ch)) != NULL) { + tmp++; + retval++; + } + } while (tmp != NULL); + + return retval; +} + +/* vim:set shiftwidth=4 softtabstop=4: */ diff --git a/isys/str.h b/isys/str.h new file mode 100644 index 0000000..d296021 --- /dev/null +++ b/isys/str.h @@ -0,0 +1,29 @@ +/* + * str.c - String helper functions, the header file + * + * Copyright (C) 2006 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): David Cantrell + */ + +/* Function prototypes */ +char *str2case(char *str, char lower, char upper, int shift); +char *str2upper(char *str); +char *str2lower(char *str); +int strcount(char *str, int ch); +char *strindex(char *str, int ch); + +/* vim:set shiftwidth=4 softtabstop=4: */ diff --git a/isys/stubs.h b/isys/stubs.h new file mode 100644 index 0000000..40ecb22 --- /dev/null +++ b/isys/stubs.h @@ -0,0 +1,44 @@ +/* + * stubs.h + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +/* we use gzlib when linked against dietlibc, but otherwise, we should use + zlib. it would make more sense to do the defines in the other direction, + but that causes symbol wackiness because both gunzip_open and gzip_open in + gzlib are gzopen from zlib +*/ + +#ifndef ISYS_STUB +#define ISYS_STUB + +#ifndef GZLIB +#include + +#define gunzip_open(x) gzopen(x, "r") +#define gunzip_dopen gzdopen(x, "r") +#define gunzip_close gzclose +#define gunzip_read gzread +#define gzip_write gzwrite +#define gzip_open(x, y, z) gzopen(x, "w") + +#else +#include "gzlib/gzlib.h" + +#endif + +#endif diff --git a/isys/uncpio.c b/isys/uncpio.c new file mode 100644 index 0000000..171eb6b --- /dev/null +++ b/isys/uncpio.c @@ -0,0 +1,798 @@ +/* + * uncpio.c + * + * Copyright (C) 2007 Red Hat, Inc. All rights reserved. + * + * 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, see . + */ + +#define HAVE_ALLOCA_H 1 +#define MAJOR_IN_SYSMACROS 1 + +#if HAVE_ALLOCA_H +# include +#endif + +#define _(foo) (foo) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "cpio.h" +#include "stubs.h" + +#if MAJOR_IN_SYSMACROS +#include +#elif MAJOR_IN_MKDEV +#include +#endif + +#define CPIO_NEWC_MAGIC "070701" +#define CPIO_CRC_MAGIC "070702" +#define TRAILER "TRAILER!!!" + +/* FIXME: We don't translate between cpio and system mode bits! These + should both be the same, but really odd things are going to happen if + that's not true! */ + +/* We need to maintain our oun file pointer to allow padding */ +struct ourfd { + gzFile fd; + size_t pos; +}; + +struct hardLink { + struct hardLink * next; + char ** files; /* there are nlink of these, used by install */ + int * fileMaps; /* used by build */ + dev_t dev; + ino_t inode; + int nlink; + int linksLeft; + int createdPath; + struct stat sb; +}; + +struct cpioCrcPhysicalHeader { + char magic[6]; + char inode[8]; + char mode[8]; + char uid[8]; + char gid[8]; + char nlink[8]; + char mtime[8]; + char filesize[8]; + char devMajor[8]; + char devMinor[8]; + char rdevMajor[8]; + char rdevMinor[8]; + char namesize[8]; + char checksum[8]; /* ignored !! */ +}; + +#define PHYS_HDR_SIZE 110 /* don't depend on sizeof(struct) */ + +struct cpioHeader { + ino_t inode; + mode_t mode; + uid_t uid; + gid_t gid; + int nlink; + time_t mtime; + unsigned long size; + dev_t dev, rdev; + char * path; +}; + +static inline off_t ourread(struct ourfd * thefd, void * buf, size_t size) { + off_t i; + + i = gunzip_read(thefd->fd, buf, size); + thefd->pos += i; + + return i; +} + +static inline void padinfd(struct ourfd * fd, int modulo) { + int buf[10]; + int amount; + + amount = (modulo - fd->pos % modulo) % modulo; + ourread(fd, buf, amount); +} + +static inline int padoutfd(struct ourfd * fd, size_t * where, int modulo) { + /*static int buf[10] = { '\0', '\0', '\0', '\0', '\0', + '\0', '\0', '\0', '\0', '\0' };*/ + int amount; + static int buf[512]; + + amount = (modulo - *where % modulo) % modulo; + *where += amount; + + if (gzip_write(fd->fd, buf, amount) != amount) + return CPIOERR_WRITE_FAILED; + + return 0; +} + +static int strntoul(const char * str, char ** endptr, int base, int num) { + char * buf, * end; + unsigned long ret; + + buf = alloca(num + 1); + strncpy(buf, str, num); + buf[num] = '\0'; + + ret = strtoul(buf, &end, base); + if (*end) + *endptr = (char *)(str + (end - buf)); /* XXX discards const */ + else + *endptr = ""; + + return strtoul(buf, endptr, base); +} + +#define GET_NUM_FIELD(phys, log) \ + log = strntoul(phys, &end, 16, sizeof(phys)); \ + if (*end) return CPIOERR_BAD_HEADER; +#define SET_NUM_FIELD(phys, val, space) \ + sprintf(space, "%8.8lx", (unsigned long) (val)); \ + memcpy(phys, space, 8); + +static int getNextHeader(struct ourfd * fd, struct cpioHeader * chPtr, + struct cpioCrcPhysicalHeader * physHeaderPtr) { + struct cpioCrcPhysicalHeader physHeader; + int nameSize; + char * end; + int major, minor; + + if (ourread(fd, &physHeader, PHYS_HDR_SIZE) != PHYS_HDR_SIZE) + return CPIOERR_READ_FAILED; + + if (physHeaderPtr) + memcpy(physHeaderPtr, &physHeader, PHYS_HDR_SIZE); + + if (strncmp(CPIO_CRC_MAGIC, physHeader.magic, strlen(CPIO_CRC_MAGIC)) && + strncmp(CPIO_NEWC_MAGIC, physHeader.magic, strlen(CPIO_NEWC_MAGIC))) + return CPIOERR_BAD_MAGIC; + + GET_NUM_FIELD(physHeader.inode, chPtr->inode); + GET_NUM_FIELD(physHeader.mode, chPtr->mode); + GET_NUM_FIELD(physHeader.uid, chPtr->uid); + GET_NUM_FIELD(physHeader.gid, chPtr->gid); + GET_NUM_FIELD(physHeader.nlink, chPtr->nlink); + GET_NUM_FIELD(physHeader.mtime, chPtr->mtime); + GET_NUM_FIELD(physHeader.filesize, chPtr->size); + + GET_NUM_FIELD(physHeader.devMajor, major); + GET_NUM_FIELD(physHeader.devMinor, minor); + chPtr->dev = makedev(major, minor); + + GET_NUM_FIELD(physHeader.rdevMajor, major); + GET_NUM_FIELD(physHeader.rdevMinor, minor); + chPtr->rdev = makedev(major, minor); + + GET_NUM_FIELD(physHeader.namesize, nameSize); + + chPtr->path = malloc(nameSize + 1); + if (ourread(fd, chPtr->path, nameSize) != nameSize) { + free(chPtr->path); + return CPIOERR_BAD_HEADER; + } + + /* this is unecessary chPtr->path[nameSize] = '\0'; */ + + padinfd(fd, 4); + + return 0; +} + +int myCpioFileMapCmp(const void * a, const void * b) { + const struct cpioFileMapping * first = a; + const struct cpioFileMapping * second = b; + + return (strcmp(first->archivePath, second->archivePath)); +} + +/* This could trash files in the path! I'm not sure that's a good thing */ +static int createDirectory(char * path, mode_t perms) { + struct stat sb; + int dounlink; + + if (!lstat(path, &sb)) { + if (S_ISDIR(sb.st_mode)) { + return 0; + } else if (S_ISLNK(sb.st_mode)) { + if (stat(path, &sb)) { + if (errno != ENOENT) + return CPIOERR_STAT_FAILED; + dounlink = 1; + } else { + if (S_ISDIR(sb.st_mode)) + return 0; + dounlink = 1; + } + } else { + dounlink = 1; + } + + if (dounlink && unlink(path)) { + return CPIOERR_UNLINK_FAILED; + } + } + + if (mkdir(path, 000)) + return CPIOERR_MKDIR_FAILED; + + if (chmod(path, perms)) + return CPIOERR_CHMOD_FAILED; + + return 0; +} + +static int setInfo(struct cpioHeader * hdr) { + int rc = 0; + struct utimbuf stamp; + + stamp.actime = hdr->mtime; + stamp.modtime = hdr->mtime; + + if (!S_ISLNK(hdr->mode)) { + if (!getuid() && chown(hdr->path, hdr->uid, hdr->gid)) + rc = CPIOERR_CHOWN_FAILED; + if (!rc && chmod(hdr->path, hdr->mode & 07777)) + rc = CPIOERR_CHMOD_FAILED; + if (!rc && utime(hdr->path, &stamp)) + rc = CPIOERR_UTIME_FAILED; + } else { +# if ! CHOWN_FOLLOWS_SYMLINK + if (!getuid() && !rc && lchown(hdr->path, hdr->uid, hdr->gid)) + rc = CPIOERR_CHOWN_FAILED; +# endif + } + + return rc; +} + +static int checkDirectory(char * filename) { + static char * lastDir = NULL; + static int lastDirLength = 0; + static int lastDirAlloced = 0; + int length = strlen(filename); + char * buf; + char * chptr; + int rc = 0; + + buf = alloca(length + 1); + strcpy(buf, filename); + + for (chptr = buf + length - 1; chptr > buf; chptr--) { + if (*chptr == '/') break; + } + + if (chptr == buf) return 0; /* /filename - no directories */ + + *chptr = '\0'; /* buffer is now just directories */ + + length = strlen(buf); + if (lastDirLength == length && !strcmp(buf, lastDir)) return 0; + + if (lastDirAlloced < (length + 1)) { + lastDirAlloced = length + 100; + lastDir = realloc(lastDir, lastDirAlloced); + } + + strcpy(lastDir, buf); + lastDirLength = length; + + for (chptr = buf + 1; *chptr; chptr++) { + if (*chptr == '/') { + *chptr = '\0'; + rc = createDirectory(buf, 0755); + *chptr = '/'; + if (rc) return rc; + } + } + rc = createDirectory(buf, 0755); + + return rc; +} + +static int expandRegular(struct ourfd * fd, struct cpioHeader * hdr, + cpioCallback cb, void * cbData) { + int out; + char buf[8192]; + int bytesRead; + unsigned long left = hdr->size; + int rc = 0; + struct cpioCallbackInfo cbInfo; + struct stat sb; + + if (!lstat(hdr->path, &sb)) + if (unlink(hdr->path)) + return CPIOERR_UNLINK_FAILED; + + out = open(hdr->path, O_CREAT | O_WRONLY, 0); + if (out < 0) + return CPIOERR_OPEN_FAILED; + + cbInfo.file = hdr->path; + cbInfo.fileSize = hdr->size; + + while (left) { + bytesRead = ourread(fd, buf, left < sizeof(buf) ? left : sizeof(buf)); + if (bytesRead <= 0) { + rc = CPIOERR_READ_FAILED; + break; + } + + if (write(out, buf, bytesRead) != bytesRead) { + rc = CPIOERR_COPY_FAILED; + break; + } + + left -= bytesRead; + + /* don't call this with fileSize == fileComplete */ + if (!rc && cb && left) { + cbInfo.fileComplete = hdr->size - left; + cbInfo.bytesProcessed = fd->pos; + cb(&cbInfo, cbData); + } + } + + close(out); + + return rc; +} + +static int expandSymlink(struct ourfd * fd, struct cpioHeader * hdr) { + char buf[2048], buf2[2048]; + struct stat sb; + int len; + + if ((hdr->size + 1)> sizeof(buf)) + return CPIOERR_INTERNAL; + + if (ourread(fd, buf, hdr->size) != hdr->size) + return CPIOERR_READ_FAILED; + + buf[hdr->size] = '\0'; + + if (!lstat(hdr->path, &sb)) { + if (S_ISLNK(sb.st_mode)) { + len = readlink(hdr->path, buf2, sizeof(buf2) - 1); + if (len > 0) { + buf2[len] = '\0'; + if (!strcmp(buf, buf2)) return 0; + } + } + + if (unlink(hdr->path)) + return CPIOERR_UNLINK_FAILED; + } + + if (symlink(buf, hdr->path) < 0) + return CPIOERR_SYMLINK_FAILED; + + return 0; +} + +static int expandFifo(struct ourfd * fd, struct cpioHeader * hdr) { + struct stat sb; + + if (!lstat(hdr->path, &sb)) { + if (S_ISFIFO(sb.st_mode)) return 0; + + if (unlink(hdr->path)) + return CPIOERR_UNLINK_FAILED; + } + + if (mkfifo(hdr->path, 0)) + return CPIOERR_MKFIFO_FAILED; + + return 0; +} + +static int expandDevice(struct ourfd * fd, struct cpioHeader * hdr) { + struct stat sb; + + if (!lstat(hdr->path, &sb)) { + if ((S_ISCHR(sb.st_mode) || S_ISBLK(sb.st_mode)) && + (sb.st_rdev == hdr->rdev)) + return 0; + if (unlink(hdr->path)) + return CPIOERR_UNLINK_FAILED; + } + + if (mknod(hdr->path, hdr->mode & (~0777), hdr->rdev)) + return CPIOERR_MKNOD_FAILED; + + return 0; +} + +static void freeLink(struct hardLink * li) { + int i; + + for (i = 0; i < li->nlink; i++) { + if (li->files[i]) free(li->files[i]); + } + free(li->files); +} + +static int createLinks(struct hardLink * li, const char ** failedFile) { + int i; + struct stat sb; + + for (i = 0; i < li->nlink; i++) { + if (i == li->createdPath) continue; + if (!li->files[i]) continue; + + if (!lstat(li->files[i], &sb)) { + if (unlink(li->files[i])) { + *failedFile = strdup(li->files[i]); + return CPIOERR_UNLINK_FAILED; + } + } + + if (link(li->files[li->createdPath], li->files[i])) { + *failedFile = strdup(li->files[i]); + return CPIOERR_LINK_FAILED; + } + + free(li->files[i]); + li->files[i] = NULL; + li->linksLeft--; + } + + return 0; +} + +static int eatBytes(struct ourfd * fd, unsigned long amount) { + char buf[4096]; + unsigned long bite; + + while (amount) { + bite = (amount > sizeof(buf)) ? sizeof(buf) : amount; + if (ourread(fd, buf, bite) != bite) + return CPIOERR_READ_FAILED; + amount -= bite; + } + + return 0; +} + +int myCpioInstallArchive(gzFile stream, struct cpioFileMapping * mappings, + int numMappings, cpioCallback cb, void * cbData, + const char ** failedFile) { + struct cpioHeader ch; + struct ourfd fd; + int rc = 0; + int linkNum = 0; + struct cpioFileMapping * map = NULL; + struct cpioFileMapping needle; + mode_t cpioMode; + int olderr; + struct cpioCallbackInfo cbInfo; + struct hardLink * links = NULL; + struct hardLink * li = NULL; + + fd.fd = stream; + fd.pos = 0; + + *failedFile = NULL; + + do { + if ((rc = getNextHeader(&fd, &ch, NULL))) { + fprintf(stderr, _("error %d reading header: %s\n"), rc, + myCpioStrerror(rc)); + return CPIOERR_BAD_HEADER; + } + + if (!strcmp(ch.path, TRAILER)) { + free(ch.path); + break; + } + + if (mappings) { + needle.archivePath = ch.path; + map = bsearch(&needle, mappings, numMappings, sizeof(needle), + myCpioFileMapCmp); + } + + if (mappings && !map) { + eatBytes(&fd, ch.size); + } else { + cpioMode = ch.mode; + + if (map) { + if (map->mapFlags & CPIO_MAP_PATH) { + free(ch.path); + ch.path = strdup(map->fsPath); + } + + if (map->mapFlags & CPIO_MAP_MODE) + ch.mode = map->finalMode; + if (map->mapFlags & CPIO_MAP_UID) + ch.uid = map->finalUid; + if (map->mapFlags & CPIO_MAP_GID) + ch.gid = map->finalGid; + } + + /* This won't get hard linked symlinks right, but I can't seem + to create those anyway */ + + if (S_ISREG(ch.mode) && ch.nlink > 1) { + li = links; + for (li = links; li; li = li->next) { + if (li->inode == ch.inode && li->dev == ch.dev) break; + } + + if (!li) { + li = malloc(sizeof(*li)); + li->inode = ch.inode; + li->dev = ch.dev; + li->nlink = ch.nlink; + li->linksLeft = ch.nlink; + li->createdPath = -1; + li->files = calloc(sizeof(char *), li->nlink); + li->next = links; + links = li; + } + + for (linkNum = 0; linkNum < li->nlink; linkNum++) + if (!li->files[linkNum]) break; + li->files[linkNum] = strdup(ch.path); + } + + if ((ch.nlink > 1) && S_ISREG(ch.mode) && !ch.size && + li->createdPath == -1) { + /* defer file creation */ + } else if ((ch.nlink > 1) && S_ISREG(ch.mode) && + (li->createdPath != -1)) { + createLinks(li, failedFile); + + /* this only happens for cpio archives which contain + hardlinks w/ the contents of each hardlink being + listed (intead of the data being given just once. This + shouldn't happen, but I've made it happen w/ buggy + code, so what the heck? GNU cpio handles this well fwiw */ + if (ch.size) eatBytes(&fd, ch.size); + } else { + rc = checkDirectory(ch.path); + + if (!rc) { + if (S_ISREG(ch.mode)) + rc = expandRegular(&fd, &ch, cb, cbData); + else if (S_ISDIR(ch.mode)) + rc = createDirectory(ch.path, 000); + else if (S_ISLNK(ch.mode)) + rc = expandSymlink(&fd, &ch); + else if (S_ISFIFO(ch.mode)) + rc = expandFifo(&fd, &ch); + else if (S_ISCHR(ch.mode) || S_ISBLK(ch.mode)) + rc = expandDevice(&fd, &ch); + else if (S_ISSOCK(ch.mode)) { + /* this mimicks cpio but probably isnt' right */ + rc = expandFifo(&fd, &ch); + } else { + rc = CPIOERR_INTERNAL; + } + } + + if (!rc) + rc = setInfo(&ch); + + if (S_ISREG(ch.mode) && ch.nlink > 1) { + li->createdPath = linkNum; + li->linksLeft--; + rc = createLinks(li, failedFile); + } + } + + if (rc && !*failedFile) { + *failedFile = strdup(ch.path); + + olderr = errno; + unlink(ch.path); + errno = olderr; + } + } + + padinfd(&fd, 4); + + if (!rc && cb) { + cbInfo.file = ch.path; + cbInfo.fileSize = ch.size; + cbInfo.fileComplete = ch.size; + cbInfo.bytesProcessed = fd.pos; + cb(&cbInfo, cbData); + } + + free(ch.path); + } while (1 && !rc); + + li = links; + while (li && !rc) { + if (li->linksLeft) { + if (li->createdPath == -1) + rc = CPIOERR_INTERNAL; + else + rc = createLinks(li, failedFile); + } + + freeLink(li); + + links = li; + li = li->next; + free(links); + links = li; + } + + li = links; + /* if an error got us here links will still be eating some memory */ + while (li) { + freeLink(li); + links = li; + li = li->next; + free(links); + } + + return rc; +} + +const char * myCpioStrerror(int rc) +{ + static char msg[256]; + char *s; + int l, myerrno = errno; + + strcpy(msg, "cpio: "); + switch (rc) { + default: + s = msg + strlen(msg); + sprintf(s, _("(error 0x%x)"), rc); + s = NULL; + break; + case CPIOERR_BAD_MAGIC: s = _("Bad magic"); break; + case CPIOERR_BAD_HEADER: s = _("Bad header"); break; + + case CPIOERR_OPEN_FAILED: s = "open"; break; + case CPIOERR_CHMOD_FAILED: s = "chmod"; break; + case CPIOERR_CHOWN_FAILED: s = "chown"; break; + case CPIOERR_WRITE_FAILED: s = "write"; break; + case CPIOERR_UTIME_FAILED: s = "utime"; break; + case CPIOERR_UNLINK_FAILED: s = "unlink"; break; + case CPIOERR_SYMLINK_FAILED: s = "symlink"; break; + case CPIOERR_STAT_FAILED: s = "stat"; break; + case CPIOERR_MKDIR_FAILED: s = "mkdir"; break; + case CPIOERR_MKNOD_FAILED: s = "mknod"; break; + case CPIOERR_MKFIFO_FAILED: s = "mkfifo"; break; + case CPIOERR_LINK_FAILED: s = "link"; break; + case CPIOERR_READLINK_FAILED: s = "readlink"; break; + case CPIOERR_READ_FAILED: s = "read"; break; + case CPIOERR_COPY_FAILED: s = "copy"; break; + + case CPIOERR_INTERNAL: s = _("Internal error"); break; + case CPIOERR_HDR_SIZE: s = _("Header size too big"); break; + case CPIOERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break; + } + + l = sizeof(msg) - strlen(msg) - 1; + if (s != NULL) { + if (l > 0) strncat(msg, s, l); + l -= strlen(s); + } + if (rc & CPIOERR_CHECK_ERRNO) { + s = _(" failed - "); + if (l > 0) strncat(msg, s, l); + l -= strlen(s); + if (l > 0) strncat(msg, strerror(myerrno), l); + } + return msg; +} + +static int copyFile(struct ourfd * inFd, struct ourfd * outFd, + struct cpioHeader * chp, struct cpioCrcPhysicalHeader * pHdr) { + char buf[8192]; + int amount; + size_t size = chp->size; + + amount = strlen(chp->path) + 1; + memcpy(pHdr->magic, CPIO_NEWC_MAGIC, sizeof(pHdr->magic)); + + gzip_write(outFd->fd, pHdr, PHYS_HDR_SIZE); + gzip_write(outFd->fd, chp->path, amount); + + outFd->pos += PHYS_HDR_SIZE + amount; + + padoutfd(outFd, &outFd->pos, 4); + + while (size) { + amount = ourread(inFd, buf, size > sizeof(buf) ? sizeof(buf) : size); + gzip_write(outFd->fd, buf, amount); + size -= amount; + } + + outFd->pos += chp->size; + + padoutfd(outFd, &outFd->pos, 4); + + return 0; +} + +int myCpioFilterArchive(gzFile inStream, gzFile outStream, char ** patterns) { + struct ourfd inFd, outFd; + char ** aPattern; + struct cpioHeader ch; + int rc; + struct cpioCrcPhysicalHeader pHeader; + + inFd.fd = inStream; + inFd.pos = 0; + outFd.fd = outStream; + outFd.pos = 0; + + do { + if ((rc = getNextHeader(&inFd, &ch, &pHeader))) { + fprintf(stderr, _("error %d reading header: %s\n"), rc, + myCpioStrerror(rc)); + return CPIOERR_BAD_HEADER; + } + + if (!strcmp(ch.path, TRAILER)) { + free(ch.path); + break; + } + + for (aPattern = patterns; *aPattern; aPattern++) + if (!fnmatch(*aPattern, ch.path, FNM_PATHNAME | FNM_PERIOD)) + break; + + if (!*aPattern) + eatBytes(&inFd, ch.size); + else + copyFile(&inFd, &outFd, &ch, &pHeader); + + padinfd(&inFd, 4); + + free(ch.path); + } while (1 && !rc); + + memset(&pHeader, '0', sizeof(pHeader)); + memcpy(pHeader.magic, CPIO_NEWC_MAGIC, sizeof(pHeader.magic)); + memcpy(pHeader.nlink, "00000001", 8); + memcpy(pHeader.namesize, "0000000b", 8); + gzip_write(outFd.fd, &pHeader, PHYS_HDR_SIZE); + gzip_write(outFd.fd, "TRAILER!!!", 11); + + outFd.pos += PHYS_HDR_SIZE + 11; + + if ((rc = padoutfd(&outFd, &outFd.pos, 4))) + return rc; + + if ((rc = padoutfd(&outFd, &outFd.pos, 512))) + return rc; + + return 0; +} diff --git a/isys/vio.c b/isys/vio.c new file mode 100644 index 0000000..9b06a3e --- /dev/null +++ b/isys/vio.c @@ -0,0 +1,106 @@ +/* + * vio.c - probing for vio devices on the iSeries (viocd and viodasd) + * + * Copyright (C) 2003 Red Hat, Inc. All rights reserved. + * + * 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, see . + * + * Author(s): Jeremy Katz + */ + +#include +#include +#include +#include +#include +#include +#include + +#if defined(__powerpc__) +static int readFD (int fd, char **buf) +{ + char *p; + size_t size = 4096; + int s, filesize; + + *buf = malloc (size); + if (*buf == 0) + return -1; + + filesize = 0; + do { + p = &(*buf) [filesize]; + s = read (fd, p, 4096); + if (s < 0) + break; + filesize += s; + if (s == 0) + break; + size += 4096; + *buf = realloc (*buf, size); + } while (1); + + if (filesize == 0 && s < 0) { + free (*buf); + *buf = NULL; + return -1; + } + + return filesize; +} +#endif + +int isVioConsole(void) { +#if !defined(__powerpc__) + return 0; +#else + int fd, i; + char *buf, *start; + char driver[50], device[50]; + static int isviocons = -1; + + if (isviocons != -1) + return isviocons; + + fd = open("/proc/tty/drivers", O_RDONLY); + if (fd < 0) { + fprintf(stderr, "failed to open /proc/tty/drivers!\n"); + return 0; + } + i = readFD(fd, &buf); + if (i < 1) { + close(fd); + fprintf(stderr, "error reading /proc/tty/drivers!\n"); + return 0; + } + close(fd); + buf[i] = '\0'; + + isviocons = 0; + start = buf; + while (start && *start) { + if (sscanf(start, "%s %s", (char *) &driver, (char *) &device) == 2) { + if (!strcmp(driver, "vioconsole") && !strcmp(device, "/dev/tty")) { + isviocons = 1; + break; + } + } + start = strchr(start, '\n'); + if (start) + start++; + } + free(buf); + return isviocons; +#endif +} diff --git a/iutil.py b/iutil.py new file mode 100644 index 0000000..872915d --- /dev/null +++ b/iutil.py @@ -0,0 +1,1051 @@ +# +# iutil.py - generic install utility functions +# +# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 +# Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Erik Troan +# + +import glob +import os, string, stat, sys +import signal +import os.path +from errno import * +import warnings +import subprocess +from flags import flags +from constants import * +import re +import threading + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import logging +log = logging.getLogger("anaconda") +program_log = logging.getLogger("program") + +#Python reimplementation of the shell tee process, so we can +#feed the pipe output into two places at the same time +class tee(threading.Thread): + def __init__(self, inputdesc, outputdesc, logmethod): + threading.Thread.__init__(self) + self.inputdesc = os.fdopen(inputdesc, "r") + self.outputdesc = outputdesc + self.logmethod = logmethod + self.running = True + + def run(self): + while self.running: + data = self.inputdesc.readline() + if data == "": + self.running = False + else: + self.logmethod(data.rstrip('\n')) + os.write(self.outputdesc, data) + + def stop(self): + self.running = False + return self + +## Run an external program and redirect the output to a file. +# @param command The command to run. +# @param argv A list of arguments. +# @param stdin The file descriptor to read stdin from. +# @param stdout The file descriptor to redirect stdout to. +# @param stderr The file descriptor to redirect stderr to. +# @param root The directory to chroot to before running command. +# @return The return code of command. +def execWithRedirect(command, argv, stdin = None, stdout = None, + stderr = None, root = '/'): + def chroot (): + os.chroot(root) + + stdinclose = stdoutclose = stderrclose = lambda : None + + argv = list(argv) + if isinstance(stdin, str): + if os.access(stdin, os.R_OK): + stdin = os.open(stdin, os.O_RDONLY) + stdinclose = lambda : os.close(stdin) + else: + stdin = sys.stdin.fileno() + elif isinstance(stdin, int): + pass + elif stdin is None or not isinstance(stdin, file): + stdin = sys.stdin.fileno() + + if isinstance(stdout, str): + stdout = os.open(stdout, os.O_RDWR|os.O_CREAT) + stdoutclose = lambda : os.close(stdout) + elif isinstance(stdout, int): + pass + elif stdout is None or not isinstance(stdout, file): + stdout = sys.stdout.fileno() + + if isinstance(stderr, str): + stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) + stderrclose = lambda : os.close(stderr) + elif isinstance(stderr, int): + pass + elif stderr is None or not isinstance(stderr, file): + stderr = sys.stderr.fileno() + + program_log.info("Running... %s" % (" ".join([command] + argv),)) + + #prepare os pipes for feeding tee proceses + pstdout, pstdin = os.pipe() + perrout, perrin = os.pipe() + + env = os.environ.copy() + env.update({"LC_ALL": "C"}) + + try: + #prepare tee proceses + proc_std = tee(pstdout, stdout, program_log.info) + proc_err = tee(perrout, stderr, program_log.error) + + #start monitoring the outputs + proc_std.start() + proc_err.start() + + proc = subprocess.Popen([command] + argv, stdin=stdin, + stdout=pstdin, + stderr=perrin, + preexec_fn=chroot, cwd=root, + env=env) + + proc.wait() + ret = proc.returncode + + #close the input ends of pipes so we get EOF in the tee processes + os.close(pstdin) + os.close(perrin) + + #wait for the output to be written and destroy them + proc_std.join() + del proc_std + + proc_err.join() + del proc_err + + stdinclose() + stdoutclose() + stderrclose() + except OSError as e: + errstr = "Error running %s: %s" % (command, e.strerror) + log.error(errstr) + program_log.error(errstr) + #close the input ends of pipes so we get EOF in the tee processes + os.close(pstdin) + os.close(perrin) + proc_std.join() + proc_err.join() + + stdinclose() + stdoutclose() + stderrclose() + raise RuntimeError, errstr + + return ret + +## Run an external program and capture standard out. +# @param command The command to run. +# @param argv A list of arguments. +# @param stdin The file descriptor to read stdin from. +# @param stderr The file descriptor to redirect stderr to. +# @param root The directory to chroot to before running command. +# @return The output of command from stdout. +def execWithCapture(command, argv, stdin = None, stderr = None, root='/'): + def chroot(): + os.chroot(root) + + def closefds (): + stdinclose() + stderrclose() + + stdinclose = stderrclose = lambda : None + rc = "" + argv = list(argv) + + if isinstance(stdin, str): + if os.access(stdin, os.R_OK): + stdin = os.open(stdin, os.O_RDONLY) + stdinclose = lambda : os.close(stdin) + else: + stdin = sys.stdin.fileno() + elif isinstance(stdin, int): + pass + elif stdin is None or not isinstance(stdin, file): + stdin = sys.stdin.fileno() + + if isinstance(stderr, str): + stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) + stderrclose = lambda : os.close(stderr) + elif isinstance(stderr, int): + pass + elif stderr is None or not isinstance(stderr, file): + stderr = sys.stderr.fileno() + + program_log.info("Running... %s" % (" ".join([command] + argv),)) + + env = os.environ.copy() + env.update({"LC_ALL": "C"}) + + try: + proc = subprocess.Popen([command] + argv, stdin=stdin, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + preexec_fn=chroot, cwd=root, + env=env) + + while True: + (outStr, errStr) = proc.communicate() + if outStr: + map(program_log.info, outStr.splitlines()) + rc += outStr + if errStr: + map(program_log.error, errStr.splitlines()) + os.write(stderr, errStr) + + if proc.returncode is not None: + break + except OSError as e: + log.error ("Error running " + command + ": " + e.strerror) + closefds() + raise RuntimeError, "Error running " + command + ": " + e.strerror + + closefds() + return rc + +def execWithCallback(command, argv, stdin = None, stdout = None, + stderr = None, echo = True, callback = None, + callback_data = None, root = '/'): + def chroot(): + os.chroot(root) + + def closefds (): + stdinclose() + stdoutclose() + stderrclose() + + stdinclose = stdoutclose = stderrclose = lambda : None + + argv = list(argv) + if isinstance(stdin, str): + if os.access(stdin, os.R_OK): + stdin = os.open(stdin, os.O_RDONLY) + stdinclose = lambda : os.close(stdin) + else: + stdin = sys.stdin.fileno() + elif isinstance(stdin, int): + pass + elif stdin is None or not isinstance(stdin, file): + stdin = sys.stdin.fileno() + + if isinstance(stdout, str): + stdout = os.open(stdout, os.O_RDWR|os.O_CREAT) + stdoutclose = lambda : os.close(stdout) + elif isinstance(stdout, int): + pass + elif stdout is None or not isinstance(stdout, file): + stdout = sys.stdout.fileno() + + if isinstance(stderr, str): + stderr = os.open(stderr, os.O_RDWR|os.O_CREAT) + stderrclose = lambda : os.close(stderr) + elif isinstance(stderr, int): + pass + elif stderr is None or not isinstance(stderr, file): + stderr = sys.stderr.fileno() + + program_log.info("Running... %s" % (" ".join([command] + argv),)) + + p = os.pipe() + p_stderr = os.pipe() + childpid = os.fork() + if not childpid: + os.close(p[0]) + os.close(p_stderr[0]) + os.dup2(p[1], 1) + os.dup2(p_stderr[1], 2) + os.dup2(stdin, 0) + os.close(stdin) + os.close(p[1]) + os.close(p_stderr[1]) + + os.execvp(command, [command] + argv) + os._exit(1) + + os.close(p[1]) + os.close(p_stderr[1]) + + logline = '' + while 1: + try: + s = os.read(p[0], 1) + except OSError as e: + if e.errno != 4: + raise IOError, e.args + + if echo: + os.write(stdout, s) + + if s == '\n': + program_log.info(logline) + logline = '' + else: + logline += s + + if callback: + callback(s, callback_data=callback_data) + + # break out early if the sub-process changes status. + # no need to flush the stream if the process has exited + try: + (pid, status) = os.waitpid(childpid,os.WNOHANG) + if pid != 0: + break + except OSError as e: + log.critical("exception from waitpid: %s %s" %(e.errno, e.strerror)) + + if len(s) < 1: + break + if len(logline) > 0: + program_log.info(logline) + + log_errors = '' + while 1: + try: + err = os.read(p_stderr[0], 128) + except OSError as e: + if e.errno != 4: + raise IOError, e.args + break + log_errors += err + if len(err) < 1: + break + map(program_log.error, log_errors.splitlines()) + os.close(p[0]) + os.close(p_stderr[0]) + + try: + #if we didn't already get our child's exit status above, do so now. + if not pid: + (pid, status) = os.waitpid(childpid, 0) + except OSError as e: + log.critical("exception from waitpid: %s %s" %(e.errno, e.strerror)) + + closefds() + # *shrug* no clue why this would happen, but hope that things are fine + if status is None: + return 0 + + if os.WIFEXITED(status): + return os.WEXITSTATUS(status) + + return 1 + +def _pulseProgressCallback(data, callback_data=None): + if callback_data: + callback_data.pulse() + +def execWithPulseProgress(command, argv, stdin = None, stdout = None, + stderr = None, echo = True, progress = None, + root = '/'): + return execWithCallback(command, argv, stdin=stdin, stdout=stdout, + stderr=stderr, echo=echo, callback=_pulseProgressCallback, + callback_data=progress, root=root) + +## Run a shell. +def execConsole(): + try: + proc = subprocess.Popen(["/bin/sh"]) + proc.wait() + except OSError as e: + raise RuntimeError, "Error running /bin/sh: " + e.strerror + +## Get the size of a directory and all its subdirectories. +# @param dir The name of the directory to find the size of. +# @return The size of the directory in kilobytes. +def getDirSize(dir): + def getSubdirSize(dir): + # returns size in bytes + mydev = os.lstat(dir)[stat.ST_DEV] + + dsize = 0 + for f in os.listdir(dir): + curpath = '%s/%s' % (dir, f) + sinfo = os.lstat(curpath) + if stat.S_ISDIR(sinfo[stat.ST_MODE]): + if mydev == sinfo[stat.ST_DEV]: + dsize += getSubdirSize(curpath) + elif stat.S_ISREG(sinfo[stat.ST_MODE]): + dsize += sinfo[stat.ST_SIZE] + else: + pass + + return dsize + return getSubdirSize(dir)/1024 + +## Get the amount of RAM not used by /tmp. +# @return The amount of available memory in kilobytes. +def memAvailable(): + tram = memInstalled() + + ramused = getDirSize("/tmp") + return tram - ramused + +## Get the amount of RAM installed in the machine. +# @return The amount of installed memory in kilobytes. +def memInstalled(): + f = open("/proc/meminfo", "r") + lines = f.readlines() + f.close() + + for l in lines: + if l.startswith("MemTotal:"): + fields = string.split(l) + mem = fields[1] + break + + return int(mem) + +## Suggest the size of the swap partition that will be created. +# @param quiet Should size information be logged? +# @return A tuple of the minimum and maximum swap size, in megabytes. +def swapSuggestion(quiet=0): + mem = memInstalled()/1024 + mem = ((mem/16)+1)*16 + if not quiet: + log.info("Detected %sM of memory", mem) + + if mem <= 256: + minswap = 256 + maxswap = 512 + else: + if mem > 2048: + minswap = 1024 + maxswap = 2048 + mem + else: + minswap = mem + maxswap = 2*mem + + if not quiet: + log.info("Swap attempt of %sM to %sM", minswap, maxswap) + + return (minswap, maxswap) + +## Create a directory path. Don't fail if the directory already exists. +# @param dir The directory path to create. +def mkdirChain(dir): + try: + os.makedirs(dir, 0755) + except OSError as e: + try: + if e.errno == EEXIST and stat.S_ISDIR(os.stat(dir).st_mode): + return + except: + pass + + log.error("could not create directory %s: %s" % (dir, e.strerror)) + +## Get the total amount of swap memory. +# @return The total amount of swap memory in kilobytes, or 0 if unknown. +def swapAmount(): + f = open("/proc/meminfo", "r") + lines = f.readlines() + f.close() + + for l in lines: + if l.startswith("SwapTotal:"): + fields = string.split(l) + return int(fields[1]) + return 0 + +## Copy a device node. +# Copies a device node by looking at the device type, major and minor device +# numbers, and doing a mknod on the new device name. +# +# @param src The name of the source device node. +# @param dest The name of the new device node to create. +def copyDeviceNode(src, dest): + filestat = os.lstat(src) + mode = filestat[stat.ST_MODE] + if stat.S_ISBLK(mode): + type = stat.S_IFBLK + elif stat.S_ISCHR(mode): + type = stat.S_IFCHR + else: + # XXX should we just fallback to copying normally? + raise RuntimeError, "Tried to copy %s which isn't a device node" % (src,) + + os.mknod(dest, mode | type, filestat.st_rdev) + +## Get the PPC machine variety type. +# @return The PPC machine type, or 0 if not PPC. +def getPPCMachine(): + if not isPPC(): + return 0 + + ppcMachine = None + machine = None + platform = None + + # ppc machine hash + ppcType = { 'Mac' : 'PMac', + 'Book' : 'PMac', + 'CHRP IBM' : 'pSeries', + 'Pegasos' : 'Pegasos', + 'Efika' : 'Efika', + 'iSeries' : 'iSeries', + 'pSeries' : 'pSeries', + 'PReP' : 'PReP', + 'CHRP' : 'pSeries', + 'Amiga' : 'APUS', + 'Gemini' : 'Gemini', + 'Shiner' : 'ANS', + 'BRIQ' : 'BRIQ', + 'Teron' : 'Teron', + 'AmigaOne' : 'Teron', + 'Maple' : 'pSeries', + 'Cell' : 'pSeries', + 'Momentum' : 'pSeries', + 'PS3' : 'PS3' + } + + f = open('/proc/cpuinfo', 'r') + lines = f.readlines() + f.close() + for line in lines: + if line.find('machine') != -1: + machine = line.split(':')[1] + elif line.find('platform') != -1: + platform = line.split(':')[1] + + for part in (machine, platform): + if ppcMachine is None and part is not None: + for type in ppcType.items(): + if part.find(type[0]) != -1: + ppcMachine = type[1] + + if ppcMachine is None: + log.warning("Unable to find PowerPC machine type") + elif ppcMachine == 0: + log.warning("Unknown PowerPC machine type: %s" %(ppcMachine,)) + + return ppcMachine + +## Get the powermac machine ID. +# @return The powermac machine id, or 0 if not PPC. +def getPPCMacID(): + machine = None + + if not isPPC(): + return 0 + if getPPCMachine() != "PMac": + return 0 + + f = open('/proc/cpuinfo', 'r') + lines = f.readlines() + f.close() + for line in lines: + if line.find('machine') != -1: + machine = line.split(':')[1] + machine = machine.strip() + return machine + + log.warning("No Power Mac machine id") + return 0 + +## Get the powermac generation. +# @return The powermac generation, or 0 if not powermac. +def getPPCMacGen(): + # XXX: should NuBus be here? + pmacGen = ['OldWorld', 'NewWorld', 'NuBus'] + + if not isPPC(): + return 0 + if getPPCMachine() != "PMac": + return 0 + + f = open('/proc/cpuinfo', 'r') + lines = f.readlines() + f.close() + gen = None + for line in lines: + if line.find('pmac-generation') != -1: + gen = line.split(':')[1] + break + + if gen is None: + log.warning("Unable to find pmac-generation") + + for type in pmacGen: + if gen.find(type) != -1: + return type + + log.warning("Unknown Power Mac generation: %s" %(gen,)) + return 0 + +## Determine if the hardware is an iBook or PowerBook +# @return 1 if so, 0 otherwise. +def getPPCMacBook(): + if not isPPC(): + return 0 + if getPPCMachine() != "PMac": + return 0 + + f = open('/proc/cpuinfo', 'r') + lines = f.readlines() + f.close() + + for line in lines: + if not string.find(string.lower(line), 'book') == -1: + return 1 + return 0 + +cell = None +## Determine if the hardware is the Cell platform. +# @return True if so, False otherwise. +def isCell(): + global cell + if cell is not None: + return cell + + cell = False + if not isPPC(): + return cell + + f = open('/proc/cpuinfo', 'r') + lines = f.readlines() + f.close() + + for line in lines: + if not string.find(line, 'Cell') == -1: + cell = True + + return cell + +mactel = None +## Determine if the hardware is an Intel-based Apple Mac. +# @return True if so, False otherwise. +def isMactel(): + global mactel + if mactel is not None: + return mactel + + if not isX86(): + mactel = False + elif not os.path.exists("/usr/sbin/dmidecode"): + mactel = False + else: + buf = execWithCapture("/usr/sbin/dmidecode", + ["dmidecode", "-s", "system-manufacturer"]) + if buf.lower().find("apple") != -1: + mactel = True + else: + mactel = False + return mactel + +efi = None +## Determine if the hardware supports EFI. +# @return True if so, False otherwise. +def isEfi(): + global efi + if efi is not None: + return efi + + efi = False + # XXX need to make sure efivars is loaded... + if os.path.exists("/sys/firmware/efi"): + efi = True + + return efi + +## Generate the /etc/rpm/macros file. +# @param root The root of the filesystem to create the files in. +def writeRpmPlatform(root="/"): + import rpmUtils.arch + + if os.access("%s/etc/rpm/platform" %(root,), os.R_OK): + return + if not os.access("%s/etc/rpm" %(root,), os.X_OK): + os.mkdir("%s/etc/rpm" %(root,)) + + myarch = rpmUtils.arch.canonArch + + # now allow an override with rpmarch=i586 on the command line (#101971) + if flags.targetarch != None: + myarch = flags.targetarch + + # now make the current install believe it, too + rpmUtils.arch.canonArch = myarch + + # FIXME: writing /etc/rpm/macros feels wrong somehow + # temporary workaround for #92285 + if not (myarch.startswith("ppc64") or + myarch in ("s390x", "sparc64", "x86_64", "ia64")): + return + if os.access("%s/etc/rpm/macros" %(root,), os.R_OK): + if myarch.startswith("ppc64") or myarch == "sparc64": + f = open("%s/etc/rpm/macros" %(root,), 'r+') + lines = f.readlines() + addPrefer = True + for line in lines: + if line.startswith("%_prefer_color"): + addPrefer = False + if addPrefer: + f.write("%_prefer_color 1\n") + f.close() + return + else: + return + + f = open("%s/etc/rpm/macros" %(root,), 'w+') + f.write("%_transaction_color 3\n") + if myarch.startswith("ppc64") or myarch == "sparc64": + f.write("%_prefer_color 1\n") + + f.close() + +# Architecture checking functions + +def isX86(bits=None): + arch = os.uname()[4] + + # x86 platforms include: + # i*86 + # athlon* + # x86_64 + # amd* + # ia32e + if bits is None: + if (arch.startswith('i') and arch.endswith('86')) or \ + arch.startswith('athlon') or arch.startswith('amd') or \ + arch == 'x86_64' or arch == 'ia32e': + return True + elif bits == 32: + if arch.startswith('i') and arch.endswith('86'): + return True + elif bits == 64: + if arch.startswith('athlon') or arch.startswith('amd') or \ + arch == 'x86_64' or arch == 'ia32e': + return True + + return False + +def isPPC(): + return os.uname()[4].startswith('ppc') + +def isS390(): + return os.uname()[4].startswith('s390') + +def isIA64(): + return os.uname()[4] == 'ia64' + +def isAlpha(): + return os.uname()[4].startswith('alpha') + +def isSparc(): + return os.uname()[4].startswith('sparc') + +def getArch(): + if isX86(bits=32): + return 'i386' + elif isX86(bits=64): + return 'x86_64' + elif isPPC(): + return 'ppc' + elif isAlpha(): + return 'alpha' + elif isSparc(): + return 'sparc' + else: + return os.uname()[4] + +def isConsoleOnVirtualTerminal(): + # XXX PJFIX is there some way to ask the kernel this instead? + if isS390(): + return False + return not flags.serial + +def strip_markup(text): + if text.find("<") == -1: + return text + r = "" + inTag = False + for c in text: + if c == ">" and inTag: + inTag = False + continue + elif c == "<" and not inTag: + inTag = True + continue + elif not inTag: + r += c + return r.encode("utf-8") + +def notify_kernel(path, action="change"): + """ Signal the kernel that the specified device has changed. """ + log.debug("notifying kernel of '%s' event on device %s" % (action, path)) + path = os.path.join(path, "uevent") + if not path.startswith("/sys/") or not os.access(path, os.W_OK): + log.debug("sysfs path '%s' invalid" % path) + raise ValueError("invalid sysfs path") + + f = open(path, "a") + f.write("%s\n" % action) + f.close() + +def get_sysfs_path_by_name(dev_name, class_name="block"): + dev_name = os.path.basename(dev_name) + sysfs_class_dir = "/sys/class/%s" % class_name + dev_path = os.path.join(sysfs_class_dir, dev_name) + if os.path.exists(dev_path): + return dev_path + +def numeric_type(num): + """ Verify that a value is given as a numeric data type. + + Return the number if the type is sensible or raise ValueError + if not. + """ + if num is None: + num = 0 + elif not (isinstance(num, int) or \ + isinstance(num, long) or \ + isinstance(num, float)): + raise ValueError("value (%s) must be either a number or None" % num) + + return num + +def writeReiplMethod(reipl_path, reipl_type): + filename = "%s/reipl_type" % (reipl_path,) + + try: + f = open(filename, "w") + except Exception, e: + message = _("Error: On open, cannot set reIPL method to %(reipl_type)s " + "(%(filename)s: %(e)s)" % {'reipl_type': reipl_type, + 'filename': filename, + 'e': e}) + log.warning(message) + raise Exception (message) + + try: + f.write(reipl_type) + f.flush() + except Exception, e: + message = _("Error: On write, cannot set reIPL method to " + "%(reipl_type)s (%(filename)s: %(e)s)" \ + % {'reipl_type': reipl_type, 'filename': filename, 'e': e}) + log.warning(message) + raise Exception (message) + + try: + f.close() + except Exception, e: + message = _("Error: On close, cannot set reIPL method to " + "%(reipl_type)s (%(filename)s: %(e)s)" \ + % {'reipl_type': reipl_type, 'filename': filename, 'e': e}) + log.warning(message) + raise Exception (message) + +def reIPLonCCW(iplsubdev, reipl_path): + device = "" + + try: + device = os.readlink("/sys/block/" + iplsubdev + "/device").split('/')[-1] + + writeReiplMethod(reipl_path, 'ccw') + + try: + f = open("%s/ccw/device" % (reipl_path,), "w") + f.write(device) + f.close() + except Exception, e: + message = _("Error: Could not set %(device)s as reIPL device " + "(%(e)s)" % {'device': device, 'e': e}) + log.warning(message) + raise Exception (message) + + try: + f = open("%s/ccw/loadparm" % (reipl_path,), "w") + f.write("\n") + f.close() + except Exception, e: + message = _("Error: Could not reset loadparm (%s)" % (e,)) + log.warning(message) + raise Exception (message) + + try: + f = open("%s/ccw/parm" % (reipl_path,), "w") + f.write("\n") + f.close() + except Exception, e: + message = _("Warning: Could not reset parm (%s)" % (e,)) + log.warning(message) + # do NOT raise an exception since this might not exist or not be writable + + log.info("ccw reIPL using DASD %s" % (device,)) + + except Exception, e: + try: + message = e.args[0] + except: + message = e.__str__ () + log.info("Caught exception %s", (message,)) + return (message, + (_("After shutdown, please perform a manual IPL from DASD device %s to continue " + "installation") % (device,))) + + return None + +def reIPLonFCP(iplsubdev, reipl_path): + fcpvalue = { "device": "", "wwpn": "", "lun": "" } + + try: + syspath = "/sys/block/" + iplsubdev + "/device" + + fcpprops = [ ("hba_id", "device"), ("wwpn", "wwpn"), ("fcp_lun", "lun") ] + + # Read in values to change. + # This way, if we can't set FCP mode, we can tell the user what to manually reboot to. + for (syspath_property, reipl_property) in fcpprops: + try: + f = open(syspath + "/" + syspath_property, "r") + value = f.read().strip() + fcpvalue[reipl_property] = value + f.close() + except Exception, e: + message = _("Error: reading FCP property %(syspath_property)s " + "for reIPL (%(e)s)" \ + % {'syspath_property': syspath_property, 'e': e}) + log.warning(message) + raise Exception (message) + + writeReiplMethod(reipl_path, 'fcp') + + # Write out necessary parameters. + for (syspath_property, reipl_property) in fcpprops: + try: + f = open("%s/fcp/%s" % (reipl_path, reipl_property,), "w") + f.write(fcpvalue[reipl_property]) + f.close() + except Exception, e: + message = _("Error: writing FCP property %(reipl_property)s " + "for reIPL (%(e)s)" \ + % {'reipl_property': reipl_property, 'e': e}) + log.warning(message) + raise Exception (message) + + defaultprops = [ ("bootprog", "0"), ("br_lba", "0") ] + + # Write out default parameters. + for (reipl_property, default_value) in defaultprops: + try: + f = open("%s/fcp/%s" % (reipl_path, reipl_property,), "w") + f.write (default_value) + f.close() + except Exception, e: + message = _("Error: writing default FCP property " + "%(reipl_property)s for reIPL (%(e)s)" \ + % {'reipl_property': reipl_property, 'e': e}) + log.warning(message) + raise Exception (message) + + log.info("fcp reIPL using FCP %(device)s, WWPN %(wwpn)s, LUN %(lun)s" % (fcpvalue)) + + except Exception, e: + try: + message = e.args[0] + except: + message = e.__str__ () + log.info("Caught exception %s", (message,)) + return (message, + (_("After shutdown, please perform a manual IPL from FCP %(device)s with WWPN %(wwpn)s " + "and LUN %(lun)s to continue installation") % (fcpvalue))) + + return None + + +def reIPLtrigger(anaconda): + if not isS390(): + return + if anaconda.canReIPL: + log.info("reIPL configuration successful => reboot") + os.kill(os.getppid(), signal.SIGUSR2) + else: + log.info("reIPL configuration failed => halt") + os.kill(os.getppid(), signal.SIGUSR1) + +def reIPL(anaconda, loader_pid): + instruction = _("After shutdown, please perform a manual IPL from the device " + "now containing /boot to continue installation") + + reipl_path = "/sys/firmware/reipl" + + try: + ipldev = anaconda.platform.bootDevice().disk.name + except: + ipldev = None + + if ipldev is None: + message = _("Error determining boot device's disk name") + log.warning(message) + return (message, instruction) + + message = (_("The mount point /boot or / is on a disk that we are not familiar with"), instruction) + if ipldev.startswith("dasd"): + message = reIPLonCCW(ipldev, reipl_path) + elif ipldev.startswith("sd"): + message = reIPLonFCP(ipldev, reipl_path) + + if message is None: + anaconda.canReIPL = True + else: + anaconda.canReIPL = False + log.info(message) + + reIPLtrigger(anaconda) + + # the final return is either None if reipl configuration worked (=> reboot), + # or a two-item list with errorMessage and rebootInstr (=> shutdown) + return message + +def resetRpmDb(rootdir): + for rpmfile in glob.glob("%s/var/lib/rpm/__db.*" % rootdir): + try: + os.unlink(rpmfile) + except Exception, e: + log.debug("error %s removing file: %s" %(e,rpmfile)) + +def parseNfsUrl(nfsurl): + options = '' + host = '' + path = '' + if nfsurl: + s = nfsurl.split(":") + s.pop(0) + if len(s) >= 3: + (options, host, path) = s[:3] + elif len(s) == 2: + (host, path) = s + else: + host = s[0] + return (options, host, path) diff --git a/iw/DeviceSelector.py b/iw/DeviceSelector.py new file mode 100644 index 0000000..d55efc4 --- /dev/null +++ b/iw/DeviceSelector.py @@ -0,0 +1,217 @@ +# +# Filtering UI for the simple path through the storage code. +# +# Copyright (C) 2009 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# + +import gtk, gobject +import gtk.glade +import gui + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +# The column that holds a python object containing information about the +# device in each row. This value really shouldn't be overridden. +OBJECT_COL = 0 + +# These columns can be overridden with the active= and visible= parameters to +# __init__. active indicates which column tracks whether the row is checked +# by default, and visible indicates which column tracks whether the row is +# seen or not. +VISIBLE_COL = 1 +ACTIVE_COL = 2 + +# This should not be overridden. It controls whether or not a row may be +# deselected. Rows with this column set will stay in selected or not +# (whichever they were initialized to) permanently. +IMMUTABLE_COL = 3 + +class DeviceDisplayer(object): + def _column_toggled(self, menuItem, col): + # This is called when a selection is made in the column visibility drop + # down menu, and obviously makes a column visible (or not). + col.set_visible(not col.get_visible()) + + def __init__(self, store, model, view, active=ACTIVE_COL, visible=VISIBLE_COL): + self.store = store + self.model = model + self.view = view + + self.menu = None + + self.active = active + self.visible = visible + + def addColumn(self, title, num, displayed=True): + cell = gtk.CellRendererText() + cell.set_property("yalign", 0) + + col = gtk.TreeViewColumn(title, cell, text=num, active=self.active) + col.set_visible(displayed) + col.set_expand(True) + col.set_resizable(True) + self.view.append_column(col) + + # This needs to be set on all columns or it will be impossible to sort + # by that column. + col.set_sort_column_id(num) + + if self.menu: + # Add a new entry to the drop-down menu. + item = gtk.CheckMenuItem(title) + item.set_active(displayed) + item.connect("toggled", self._column_toggled, col) + item.show() + self.menu.append(item) + + def createMenu(self): + self.menu = gtk.Menu() + + # Add a blank column at the (current) end of the view. This column + # exists only so we can have a header to click on and display the + # drop down allowing column configuration. + menuCol = gtk.TreeViewColumn("") + menuCol.set_clickable(True) + menuCol.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) + menuCol.set_fixed_width(30) + menuCol.connect("clicked", lambda col, menu: menu.popup(None, None, None, 0, 0), + self.menu) + + image = gui.readImageFromFile("filter-menu.png") + image.show_all() + menuCol.set_widget(image) + + # Make sure the menu column gets added after all other columns so it + # will be on the far right edge. + self.view.connect("show", lambda x: self.view.append_column(menuCol)) + + def getStoreIter(self, row, model=None): + """Get an iter on the underlying store that maps to a row on the + provided model. If model is None, use the default. + """ + if not model: + model = self.model + + iter = model.get_iter(row) + if not iter: + return None + + while not self.store.iter_is_valid(iter): + if isinstance(model, gtk.TreeModelFilter): + iter = model.convert_iter_to_child_iter(iter) + elif isinstance(model, gtk.TreeModelSort): + iter = model.convert_iter_to_child_iter(None, iter) + + model = model.get_model() + + return iter + + def getSelected(self): + """Return a list of all the items currently checked in the UI, or + an empty list if nothing is selected. + """ + return filter(lambda row: row[self.active], self.store) + + def getNVisible(self): + """Return the number of items currently visible in the UI.""" + return len(filter(lambda row: row[self.visible], self.store)) + +class DeviceSelector(DeviceDisplayer): + def createSelectionCol(self, title="", radioButton=False, toggledCB=None, + membershipCB=None): + # Add a column full of checkboxes/radiobuttons in the first column of the view. + crt = gtk.CellRendererToggle() + crt.set_property("activatable", True) + crt.set_property("yalign", 0) + crt.set_radio(radioButton) + + crt.connect("toggled", self._device_toggled, toggledCB, radioButton) + + col = gtk.TreeViewColumn(title, crt, active=self.active) + col.set_alignment(0.75) + + if not radioButton: + self.allButton = gtk.ToggleButton() + col.connect("clicked", lambda *args: self.allButton.set_active(not self.allButton.get_active())) + + col.set_widget(self.allButton) + self.allButton.show_all() + + self.allButton.connect("toggled", self._all_clicked, toggledCB, membershipCB) + + self.view.append_column(col) + self.view.set_headers_clickable(True) + self.view.connect("row-activated", self._row_activated, toggledCB, radioButton) + + def _all_clicked(self, button, toggledCB=None, membershipCB=None): + # This is called when the Add/Remove all button is checked and does + # the obvious. + def _toggle_all(model, path, iter, set): + # Don't check the boxes of rows that aren't visible or aren't part + # of the currently displayed page. We'd like the all button to + # only operate on the current page, after all. + if not model[path][self.visible] or model[path][IMMUTABLE_COL] or \ + (membershipCB and not membershipCB(model[path][OBJECT_COL])): + return + + # Don't try to set a row to active if it's already been checked. + # This prevents devices that have been checked before the all + # button was checked from getting double counted. + if model[path][self.active] == set: + return + + model[path][self.active] = set + + if toggledCB: + toggledCB(set, model[path][OBJECT_COL]) + + set = button.get_active() + self.store.foreach(_toggle_all, set) + + def _row_activated(self, view, row, col, cb, isRadio): + # This is called when a row is double-clicked, or selected via space or + # enter. We just want to do the same as if the checkbox were clicked. + self._device_toggled(None, row, cb, isRadio) + + def _device_toggled(self, button, row, cb, isRadio): + # This is called when the checkbox for a device is clicked or unclicked. + iter = self.getStoreIter(row) + if not iter: + return + + storeRow = self.store.get_path(iter) + if self.store[storeRow][IMMUTABLE_COL]: + return + + if isRadio: + # This is lame, but there's no other way to do it. First we have + # to uncheck everything in the store, then we check the one that + # was clicked on. + for r in self.store: + r[self.active] = False + + self.store[storeRow][self.active] = True + + if cb: + cb(True, self.store[storeRow][OBJECT_COL]) + else: + is_checked = self.store[storeRow][self.active] + self.store[storeRow][self.active] = not is_checked + + if cb: + cb(not is_checked, self.store[storeRow][OBJECT_COL]) diff --git a/iw/GroupSelector.py b/iw/GroupSelector.py new file mode 100644 index 0000000..4d64e59 --- /dev/null +++ b/iw/GroupSelector.py @@ -0,0 +1,620 @@ +# Copyright 2005-2007 Red Hat, Inc. +# +# Jeremy Katz +# +# 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; version 2 only +# +# 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 Library General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +import os, sys +import logging +import gettext + +import gtk +import gtk.glade +import gtk.gdk as gdk +import gobject + +import yum +import yum.Errors +try: + import repomd.mdErrors as mdErrors +except ImportError: # yum 2.9.x + mdErrors = yum.Errors +from yum.constants import * +from compssort import * + +I18N_DOMAIN="anaconda" + +import rpm + +def sanitizeString(s, translate = True): + if len(s) == 0: + return s + + if not translate: + i18ndomains = [] + elif hasattr(rpm, "expandMacro"): + i18ndomains = rpm.expandMacro("%_i18ndomains").split(":") + else: + i18ndomains = ["redhat-dist"] + + # iterate over i18ndomains to find the translation + for d in i18ndomains: + r = gettext.dgettext(d, s) + if r != s: + s = r + break + + s = s.replace("\n\n", "\x00") + s = s.replace("\n", " ") + s = s.replace("\x00", "\n\n") + s = s.replace("&", "&") + s = s.replace("<", "<") + s = s.replace(">", ">") + if type(s) != unicode: + try: + s = unicode(s, "utf-8") + except UnicodeDecodeError, e: + sys.stderr.write("Unable to convert %s to a unicode object: %s\n" % (s, e)) + return "" + return s + +# given a package object, spit out a string reasonable for the list widgets +def listEntryString(po): + desc = po.returnSimple('summary') or '' + pkgStr = "%s-%s-%s.%s" % (po.name, po.version, po.release, po.arch) + desc = "%s - %s" %(pkgStr, sanitizeString(desc)) + return desc + +GLADE_FILE = "GroupSelector.glade" + +def _getgladefile(fn): + if os.path.exists(fn): + return fn + elif os.path.exists("data/%s" %(fn,)): + return "data/%s" %(fn,) + else: + return "/usr/share/pirut/ui/%s" %(fn,) + +t = gettext.translation(I18N_DOMAIN, "/usr/share/locale", fallback = True) +_ = t.lgettext + + +def _deselectPackage(ayum, group, pkg): + grpid = group.groupid + try: + pkgs = ayum.pkgSack.returnNewestByName(pkg) + except mdErrors.PackageSackError: + log = logging.getLogger("yum.verbose") + log.debug("no such package %s from group %s" % (pkg, grpid)) + if pkgs: + pkgs = ayum.bestPackagesFromList(pkgs) + for po in pkgs: + txmbrs = ayum.tsInfo.getMembers(pkgtup = po.pkgtup) + for txmbr in txmbrs: + try: + txmbr.groups.remove(grpid) + except ValueError: + log = logging.getLogger("yum.verbose") + log.debug("package %s was not marked in group %s" %(po, grpid)) + if len(txmbr.groups) == 0: + ayum.tsInfo.remove(po.pkgtup) + +def _selectPackage(ayum, group, pkg): + grpid = group.groupid + try: + txmbrs = ayum.install(name = pkg) + except yum.Errors.InstallError, e: + log = logging.getLogger("yum.verbose") + log.info("No package named %s available to be installed: %s" %(pkg, e)) + else: + map(lambda x: x.groups.append(grpid), txmbrs) + +def _catHasGroupWithPackages(cat, ayum): + grps = map(lambda x: ayum.comps.return_group(x), + filter(lambda x: ayum.comps.has_group(x), cat.groups)) + for g in grps: + if ayum._groupHasPackages(g): + return True + return False + +class OptionalPackageSelector: + def __init__(self, yumobj, group, parent = None, getgladefunc = None): + self.ayum = yumobj + self.group = group + + if getgladefunc: + xmlfn = getgladefunc(GLADE_FILE) + else: + xmlfn = _getgladefile(GLADE_FILE) + + self.xml = gtk.glade.XML(xmlfn, "groupDetailsDialog", + domain=I18N_DOMAIN) + + self.window = self.xml.get_widget("groupDetailsDialog") + if parent: + self.window.set_transient_for(parent) + self.window.set_title(_("Packages in %s") % + xmltrans(group.name, group.translated_name)) + self.window.set_position(gtk.WIN_POS_CENTER_ON_PARENT) + self.window.set_size_request(600, 400) + self._createStore() + self._populate() + + def __search_pkgs(self, model, col, key, i): + val = model.get_value(i, 2).returnSimple('name') + if val.lower().startswith(key.lower()): + return False + return True + + def _createStore(self): + self.pkgstore = gtk.ListStore(gobject.TYPE_BOOLEAN, + gobject.TYPE_STRING, + gobject.TYPE_PYOBJECT) + tree = self.xml.get_widget("packageList") + tree.set_model(self.pkgstore) + + column = gtk.TreeViewColumn(None, None) + cbr = gtk.CellRendererToggle() + cbr.connect ("toggled", self._pkgToggled) + column.pack_start(cbr, False) + column.add_attribute(cbr, 'active', 0) + tree.append_column(column) + + column = gtk.TreeViewColumn(None, None) + renderer = gtk.CellRendererText() + column.pack_start(renderer, True) + column.add_attribute(renderer, 'markup', 1) + tree.append_column(column) + tree.set_search_equal_func(self.__search_pkgs) + tree.connect("row-activated", self._rowToggle) + + self.pkgstore.set_sort_column_id(1, gtk.SORT_ASCENDING) + + def _rowToggle(self, tree, path, col): + self._pkgToggled(None, path) + + def _pkgToggled(self, widget, path): + if type(path) == type(str): + i = self.pkgstore.get_iter_from_string(path) + else: + i = self.pkgstore.get_iter(path) + sel = self.pkgstore.get_value(i, 0) + pkg = self.pkgstore.get_value(i, 2).returnSimple('name') + if sel and not self.ayum.simpleDBInstalled(name = pkg): + _deselectPackage(self.ayum, self.group, pkg) + elif sel: + self.ayum.remove(name = pkg) + elif self.ayum.simpleDBInstalled(name = pkg): + txmbrs = self.ayum.tsInfo.matchNaevr(name = pkg) + for tx in txmbrs: + if tx.output_state == TS_ERASE: + self.ayum.tsInfo.remove(tx.pkgtup) + else: + _selectPackage(self.ayum, self.group, pkg) + self.pkgstore.set_value(i, 0, not sel) + + + def __getPackageObject(self, pkgname): + pos = self.ayum.pkgSack.searchNevra(name=pkgname) + if len(pos) > 0: + return pos[0] + return None + + def _populate(self): + pkgs = self.group.default_packages.keys() + \ + self.group.optional_packages.keys() + for pkg in pkgs: + po = self.__getPackageObject(pkg) + if not po: + continue + + # Don't display obsolete packages in the UI + if self.ayum.up.checkForObsolete([po.pkgtup]).has_key(po.pkgtup): + continue + + self.pkgstore.append([self.ayum.isPackageInstalled(pkg), listEntryString(po), po]) + + def run(self): + self.window.show_all() + return self.window.run() + + def destroy(self): + return self.window.destroy() + +# the GroupSelector requires a YumBase object which also implements the +# following additional methods: +# * isPackageInstalled(p): is there a package named p installed or selected +# * isGroupInstalled(grp): is there a group grp installed or selected +class GroupSelector: + def __init__(self, yumobj, getgladefunc = None, framefunc = None): + self.ayum = yumobj + + self.getgladefunc = getgladefunc + self.framefunc = framefunc + if getgladefunc: + xmlfn = getgladefunc(GLADE_FILE) + else: + xmlfn = _getgladefile(GLADE_FILE) + + self.xml = gtk.glade.XML(xmlfn, "groupSelectionBox", + domain=I18N_DOMAIN) + self.vbox = self.xml.get_widget("groupSelectionBox") + self.xml.get_widget("detailsButton").set_sensitive(False) + + self.menuxml = gtk.glade.XML(xmlfn, "groupPopupMenu", + domain=I18N_DOMAIN) + self.groupMenu = self.menuxml.get_widget("groupPopupMenu") + + self._connectSignals() + self._createStores() + self.vbox.show() + + def _connectSignals(self): + sigs = { "on_detailsButton_clicked": self._optionalPackagesDialog, + "on_groupList_button_press": self._groupListButtonPress, + "on_groupList_popup_menu": self._groupListPopup, } + self.xml.signal_autoconnect(sigs) + + menusigs = { "on_select_activate": self._selectAllPackages, + "on_selectgrp_activate": self._groupSelect, + "on_deselectgrp_activate": self._groupDeselect, + "on_deselect_activate": self._deselectAllPackages } + self.menuxml.signal_autoconnect(menusigs) + + def _createStores(self): + self._createCategoryStore() + self._createGroupStore() + + b = gtk.TextBuffer() + self.xml.get_widget("groupDescriptionTextView").set_buffer(b) + + def _createCategoryStore(self): + # display string, category object + self.catstore = gtk.TreeStore(gobject.TYPE_STRING, + gobject.TYPE_PYOBJECT) + tree = self.xml.get_widget("categoryList") + tree.set_model(self.catstore) + + renderer = gtk.CellRendererText() + column = gtk.TreeViewColumn('Text', renderer, markup=0) + column.set_clickable(False) + tree.append_column(column) + tree.columns_autosize() + tree.set_enable_search(False) + + selection = tree.get_selection() + selection.connect("changed", self._categorySelected) + + def _createGroupStore(self): + # checkbox, display string, object + self.groupstore = gtk.TreeStore(gobject.TYPE_BOOLEAN, + gobject.TYPE_STRING, + gobject.TYPE_PYOBJECT, + gobject.TYPE_OBJECT) + tree = self.xml.get_widget("groupList") + tree.set_model(self.groupstore) + + column = gtk.TreeViewColumn(None, None) + column.set_clickable(True) + pixr = gtk.CellRendererPixbuf() + pixr.set_property('stock-size', 1) + column.pack_start(pixr, False) + column.add_attribute(pixr, 'pixbuf', 3) + cbr = gtk.CellRendererToggle() + column.pack_start(cbr, False) + column.add_attribute(cbr, 'active', 0) + cbr.connect ("toggled", self._groupToggled) + tree.append_column(column) + + renderer = gtk.CellRendererText() + column = gtk.TreeViewColumn('Text', renderer, markup=1) + column.set_clickable(False) + tree.append_column(column) + tree.columns_autosize() + tree.set_enable_search(False) + tree.grab_focus() + + selection = tree.get_selection() + selection.connect("changed", self._groupSelected) + selection.set_mode(gtk.SELECTION_MULTIPLE) + + def _get_pix(self, fn): + imgsize = 24 + pix = gtk.gdk.pixbuf_new_from_file(fn) + if pix.get_height() != imgsize or pix.get_width() != imgsize: + pix = pix.scale_simple(imgsize, imgsize, + gtk.gdk.INTERP_BILINEAR) + return pix + + def _categorySelected(self, selection): + self.groupstore.clear() + (model, i) = selection.get_selected() + if not i: + return + cat = model.get_value(i, 1) + + # fall back to the category pixbuf + fbpix = None + fn = "/usr/share/pixmaps/comps/%s.png" %(cat.categoryid,) + if os.access(fn, os.R_OK): + fbpix = self._get_pix(fn) + self._populateGroups(cat.groups, fbpix) + + def _populateGroups(self, groups, defaultpix = None): + grps = map(lambda x: self.ayum.comps.return_group(x), + filter(lambda x: self.ayum.comps.has_group(x), groups)) + grps.sort(ui_comps_sort) + for grp in grps: + if not self.ayum._groupHasPackages(grp): + continue + s = "%s" % xmltrans(grp.name, grp.translated_name) + + fn = "/usr/share/pixmaps/comps/%s.png" % grp.groupid + if os.access(fn, os.R_OK): + pix = self._get_pix(fn) + elif defaultpix: + pix = defaultpix + else: + pix = None + self.groupstore.append(None, + [self.ayum.isGroupInstalled(grp),s,grp,pix]) + + tree = self.xml.get_widget("groupList") + gobject.idle_add(lambda x: x.flags() & gtk.REALIZED and x.scroll_to_point(0, 0), tree) + self.xml.get_widget("optionalLabel").set_text("") + self.xml.get_widget("detailsButton").set_sensitive(False) + + # select the first group + i = self.groupstore.get_iter_first() + if i is not None: + sel = self.xml.get_widget("groupList").get_selection() + sel.select_iter(i) + + def _groupSelected(self, selection): + if selection.count_selected_rows() != 1: + # if we have more groups (or no group) selected, then + # we can't show a description or allow selecting optional + self.__setGroupDescription(None) + return + (model, paths) = selection.get_selected_rows() + grp = model.get_value(model.get_iter(paths[0]), 2) + self.__setGroupDescription(grp) + + def __setGroupDescription(self, grp): + b = self.xml.get_widget("groupDescriptionTextView").get_buffer() + b.set_text("") + if grp is None: + return + + if grp.description: + txt = xmltrans(grp.description, grp.translated_description) + else: + txt = xmltrans(grp.name, grp.translated_name) + + inst = 0 + cnt = 0 + pkgs = grp.default_packages.keys() + grp.optional_packages.keys() + for p in pkgs: + if self.ayum.isPackageInstalled(p): + cnt += 1 + inst += 1 + elif self.ayum.pkgSack.searchNevra(name=p): + cnt += 1 + else: + log = logging.getLogger("yum.verbose") + log.debug("no such package %s for %s" %(p, grp.groupid)) + + b.set_text(txt) + if cnt == 0 or not self.ayum.isGroupInstalled(grp): + self.xml.get_widget("detailsButton").set_sensitive(False) + self.xml.get_widget("optionalLabel").set_text("") + else: + self.xml.get_widget("detailsButton").set_sensitive(True) + txt = _("Optional packages selected: %(inst)d of %(cnt)d") \ + % {'inst': inst, 'cnt': cnt} + self.xml.get_widget("optionalLabel").set_markup(_("%s") %(txt,)) + + def _groupToggled(self, widget, path, sel = None, updateText = True): + if type(path) == type(str): + i = self.groupstore.get_iter_from_string(path) + else: + i = self.groupstore.get_iter(path) + if sel is None: + sel = not self.groupstore.get_value(i, 0) + + self.groupstore.set_value(i, 0, sel) + grp = self.groupstore.get_value(i, 2) + + self.vbox.window.set_cursor(gdk.Cursor(gdk.WATCH)) + + if sel: + self.ayum.selectGroup(grp.groupid) + else: + self.ayum.deselectGroup(grp.groupid) + # FIXME: this doesn't mark installed packages for removal. + # we probably want that behavior with s-c-p, but not anaconda + + if updateText: + self.__setGroupDescription(grp) + + self.vbox.window.set_cursor(None) + + def populateCategories(self): + self.catstore.clear() + cats = self.ayum.comps.categories + cats.sort(ui_comps_sort) + for cat in cats: + if not _catHasGroupWithPackages(cat, self.ayum): + continue + s = "%s" % xmltrans(cat.name, cat.translated_name) + self.catstore.append(None, [s, cat]) + + # select the first category + i = self.catstore.get_iter_first() + if i is not None: + sel = self.xml.get_widget("categoryList").get_selection() + sel.select_iter(i) + + def _setupCatchallCategory(self): + # FIXME: this is a bad hack, but catch groups which aren't in + # a category yet are supposed to be user-visible somehow. + # conceivably should be handled by yum + grps = {} + for g in self.ayum.comps.groups: + if g.user_visible and self.ayum._groupHasPackages(g): + grps[g.groupid] = g + + for cat in self.ayum.comps.categories: + for g in cat.groups: + if grps.has_key(g): + del grps[g] + + if len(grps.keys()) == 0: + return + c = yum.comps.Category() + c.name = _("Uncategorized") + c._groups = grps + c.categoryid = "uncategorized" + + self.ayum.comps._categories[c.categoryid] = c + + def doRefresh(self): + if len(self.ayum.comps.categories) == 0: + self.xml.get_widget("categorySW").hide() + self._populateGroups(map(lambda x: x.groupid, + self.ayum.comps.groups)) + else: + self._setupCatchallCategory() + self.populateCategories() + + def _getSelectedGroup(self): + """Return the selected group. + NOTE: this only ever returns one group.""" + selection = self.xml.get_widget("groupList").get_selection() + (model, paths) = selection.get_selected_rows() + for p in paths: + return model.get_value(model.get_iter(p), 2) + return None + + def _optionalPackagesDialog(self, *args): + group = self._getSelectedGroup() + if group is None: + return + + pwin = self.vbox.get_parent() # hack to find the parent window... + while not isinstance(pwin, gtk.Window): + pwin = pwin.get_parent() + d = OptionalPackageSelector(self.ayum, group, pwin, self.getgladefunc) + if self.framefunc: + self.framefunc(d.window) + rc = d.run() + d.destroy() + self.__setGroupDescription(group) + + def _groupSelect(self, *args): + selection = self.xml.get_widget("groupList").get_selection() + if selection.count_selected_rows() == 0: + return + + (model, paths) = selection.get_selected_rows() + for p in paths: + self._groupToggled(model, p, True, updateText=(len(paths) == 1)) + + def _groupDeselect(self, *args): + selection = self.xml.get_widget("groupList").get_selection() + if selection.count_selected_rows() == 0: + return + + (model, paths) = selection.get_selected_rows() + for p in paths: + self._groupToggled(model, p, False, updateText=(len(paths) == 1)) + + def _selectAllPackages(self, *args): + selection = self.xml.get_widget("groupList").get_selection() + if selection.count_selected_rows() == 0: + return + (model, paths) = selection.get_selected_rows() + + self.vbox.window.set_cursor(gdk.Cursor(gdk.WATCH)) + + for p in paths: + i = model.get_iter(p) + grp = model.get_value(i, 2) + + # ensure the group is selected + self.ayum.selectGroup(grp.groupid) + model.set_value(i, 0, True) + + for pkg in grp.default_packages.keys() + \ + grp.optional_packages.keys(): + if self.ayum.isPackageInstalled(pkg): + continue + elif self.ayum.simpleDBInstalled(name = pkg): + txmbrs = self.ayum.tsInfo.matchNaevr(name = pkg) + for tx in txmbrs: + if tx.output_state == TS_ERASE: + self.ayum.tsInfo.remove(tx.pkgtup) + else: + _selectPackage(self.ayum, grp, pkg) + + if len(paths) == 1: + self.__setGroupDescription(grp) + self.vbox.window.set_cursor(None) + + def _deselectAllPackages(self, *args): + selection = self.xml.get_widget("groupList").get_selection() + if selection.count_selected_rows() == 0: + return + (model, paths) = selection.get_selected_rows() + + for p in paths: + i = model.get_iter(p) + grp = model.get_value(i, 2) + + for pkg in grp.default_packages.keys() + \ + grp.optional_packages.keys(): + if not self.ayum.isPackageInstalled(pkg): + continue + elif self.ayum.simpleDBInstalled(name=pkg): + self.ayum.remove(name=pkg) + else: + _deselectPackage(self.ayum, grp, pkg) + if len(paths) == 1: + self.__setGroupDescription(grp) + + def __doGroupPopup(self, button, time): + menu = self.groupMenu + menu.popup(None, None, None, button, time) + menu.show_all() + + def _groupListButtonPress(self, widget, event): + if event.button == 3: + x = int(event.x) + y = int(event.y) + pthinfo = widget.get_path_at_pos(x, y) + if pthinfo is not None: + sel = widget.get_selection() + if sel.count_selected_rows() == 1: + path, col, cellx, celly = pthinfo + widget.grab_focus() + widget.set_cursor(path, col, 0) + self.__doGroupPopup(event.button, event.time) + return 1 + + def _groupListPopup(self, widget): + sel = widget.get_selection() + if sel.count_selected_rows() > 0: + self.__doGroupPopup(0, 0) + + diff --git a/iw/Makefile.am b/iw/Makefile.am new file mode 100644 index 0000000..db5938b --- /dev/null +++ b/iw/Makefile.am @@ -0,0 +1,23 @@ +# iw/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell + +iwdir = $(libdir)/$(PACKAGE_NAME)/iw +iw_PYTHON = *.py + +MAINTAINERCLEANFILES = Makefile.in diff --git a/iw/Makefile.in b/iw/Makefile.in new file mode 100644 index 0000000..fb24148 --- /dev/null +++ b/iw/Makefile.in @@ -0,0 +1,518 @@ +# Makefile.in generated by automake 1.11.1 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, +# Inc. +# This Makefile.in 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. + +@SET_MAKE@ + +# iw/Makefile.am for anaconda +# +# Copyright (C) 2009 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License as published +# by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this program. If not, see . +# +# Author: David Cantrell +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkglibexecdir = $(libexecdir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = iw +DIST_COMMON = $(iw_PYTHON) $(srcdir)/Makefile.am $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/m4/python.m4 \ + $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +CONFIG_CLEAN_VPATH_FILES = +AM_V_GEN = $(am__v_GEN_$(V)) +am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY)) +am__v_GEN_0 = @echo " GEN " $@; +AM_V_at = $(am__v_at_$(V)) +am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY)) +am__v_at_0 = @ +SOURCES = +DIST_SOURCES = +am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; +am__vpath_adj = case $$p in \ + $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ + *) f=$$p;; \ + esac; +am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; +am__install_max = 40 +am__nobase_strip_setup = \ + srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` +am__nobase_strip = \ + for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" +am__nobase_list = $(am__nobase_strip_setup); \ + for p in $$list; do echo "$$p $$p"; done | \ + sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ + $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ + if (++n[$$2] == $(am__install_max)) \ + { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ + END { for (dir in files) print dir, files[dir] }' +am__base_list = \ + sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ + sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' +am__installdirs = "$(DESTDIR)$(iwdir)" +py_compile = $(top_srcdir)/py-compile +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +ALLOCA = @ALLOCA@ +AMTAR = @AMTAR@ +AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ +AR = @AR@ +ARCH = @ARCH@ +AUDIT_LIBS = @AUDIT_LIBS@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +BLKID_LIBS = @BLKID_LIBS@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CHECKISOMD5_LIBS = @CHECKISOMD5_LIBS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +DEVMAPPER_CFLAGS = @DEVMAPPER_CFLAGS@ +DEVMAPPER_LIBS = @DEVMAPPER_LIBS@ +DSYMUTIL = @DSYMUTIL@ +DUMPBIN = @DUMPBIN@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXT2FS_LIBS = @EXT2FS_LIBS@ +FGREP = @FGREP@ +GDK_CFLAGS = @GDK_CFLAGS@ +GDK_LIBS = @GDK_LIBS@ +GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ +GLIB_CFLAGS = @GLIB_CFLAGS@ +GLIB_LIBS = @GLIB_LIBS@ +GMSGFMT = @GMSGFMT@ +GMSGFMT_015 = @GMSGFMT_015@ +GREP = @GREP@ +GTK_X11_CFLAGS = @GTK_X11_CFLAGS@ +GTK_X11_LIBS = @GTK_X11_LIBS@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ +IPV6_CFLAGS = @IPV6_CFLAGS@ +ISCSI_LIBS = @ISCSI_LIBS@ +LD = @LD@ +LDFLAGS = @LDFLAGS@ +LIBARCHIVE_CFLAGS = @LIBARCHIVE_CFLAGS@ +LIBARCHIVE_LIBS = @LIBARCHIVE_LIBS@ +LIBCURL_CFLAGS = @LIBCURL_CFLAGS@ +LIBCURL_LIBS = @LIBCURL_LIBS@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBNL_CFLAGS = @LIBNL_CFLAGS@ +LIBNL_LIBS = @LIBNL_LIBS@ +LIBNM_GLIB_CFLAGS = @LIBNM_GLIB_CFLAGS@ +LIBNM_GLIB_LIBS = @LIBNM_GLIB_LIBS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LIBTOOL = @LIBTOOL@ +LIPO = @LIPO@ +LN_S = @LN_S@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +MSGFMT = @MSGFMT@ +MSGFMT_015 = @MSGFMT_015@ +MSGMERGE = @MSGMERGE@ +NETWORKMANAGER_CFLAGS = @NETWORKMANAGER_CFLAGS@ +NETWORKMANAGER_LIBS = @NETWORKMANAGER_LIBS@ +NEWT_LIBS = @NEWT_LIBS@ +NFS_CFLAGS = @NFS_CFLAGS@ +NM = @NM@ +NMEDIT = @NMEDIT@ +OBJDUMP = @OBJDUMP@ +OBJEXT = @OBJEXT@ +OTOOL = @OTOOL@ +OTOOL64 = @OTOOL64@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_RELEASE = @PACKAGE_RELEASE@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_URL = @PACKAGE_URL@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +PKG_CONFIG = @PKG_CONFIG@ +POSUB = @POSUB@ +PYTHON = @PYTHON@ +PYTHON_EMBED_LIBS = @PYTHON_EMBED_LIBS@ +PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ +PYTHON_INCLUDES = @PYTHON_INCLUDES@ +PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ +PYTHON_LIBS = @PYTHON_LIBS@ +PYTHON_PLATFORM = @PYTHON_PLATFORM@ +PYTHON_PREFIX = @PYTHON_PREFIX@ +PYTHON_VERSION = @PYTHON_VERSION@ +RANLIB = @RANLIB@ +RPM_CFLAGS = @RPM_CFLAGS@ +RPM_LIBS = @RPM_LIBS@ +SED = @SED@ +SELINUX_CFLAGS = @SELINUX_CFLAGS@ +SELINUX_LIBS = @SELINUX_LIBS@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +SLANG_LIBS = @SLANG_LIBS@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +X11_CFLAGS = @X11_CFLAGS@ +X11_LIBS = @X11_LIBS@ +XCOMPOSITE_CFLAGS = @XCOMPOSITE_CFLAGS@ +XCOMPOSITE_LIBS = @XCOMPOSITE_LIBS@ +XGETTEXT = @XGETTEXT@ +XGETTEXT_015 = @XGETTEXT_015@ +XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ +XMKMF = @XMKMF@ +ZLIB_LIBS = @ZLIB_LIBS@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +lt_ECHO = @lt_ECHO@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +pkgpyexecdir = @pkgpyexecdir@ +pkgpythondir = @pkgpythondir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +pyexecdir = @pyexecdir@ +pythondir = @pythondir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_build_prefix = @top_build_prefix@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +iwdir = $(libdir)/$(PACKAGE_NAME)/iw +iw_PYTHON = *.py +MAINTAINERCLEANFILES = Makefile.in +all: all-am + +.SUFFIXES: +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ + && { if test -f $@; then exit 0; else break; fi; }; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign iw/Makefile'; \ + $(am__cd) $(top_srcdir) && \ + $(AUTOMAKE) --foreign iw/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(am__aclocal_m4_deps): + +mostlyclean-libtool: + -rm -f *.lo + +clean-libtool: + -rm -rf .libs _libs +install-iwPYTHON: $(iw_PYTHON) + @$(NORMAL_INSTALL) + test -z "$(iwdir)" || $(MKDIR_P) "$(DESTDIR)$(iwdir)" + @list='$(iw_PYTHON)'; dlist=; list2=; test -n "$(iwdir)" || list=; \ + for p in $$list; do \ + if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ + if test -f $$b$$p; then \ + $(am__strip_dir) \ + dlist="$$dlist $$f"; \ + list2="$$list2 $$b$$p"; \ + else :; fi; \ + done; \ + for file in $$list2; do echo $$file; done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(iwdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(iwdir)" || exit $$?; \ + done || exit $$?; \ + if test -n "$$dlist"; then \ + if test -z "$(DESTDIR)"; then \ + PYTHON=$(PYTHON) $(py_compile) --basedir "$(iwdir)" $$dlist; \ + else \ + PYTHON=$(PYTHON) $(py_compile) --destdir "$(DESTDIR)" --basedir "$(iwdir)" $$dlist; \ + fi; \ + else :; fi + +uninstall-iwPYTHON: + @$(NORMAL_UNINSTALL) + @list='$(iw_PYTHON)'; test -n "$(iwdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + test -n "$$files" || exit 0; \ + filesc=`echo "$$files" | sed 's|$$|c|'`; \ + fileso=`echo "$$files" | sed 's|$$|o|'`; \ + echo " ( cd '$(DESTDIR)$(iwdir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(iwdir)" && rm -f $$files || exit $$?; \ + echo " ( cd '$(DESTDIR)$(iwdir)' && rm -f" $$filesc ")"; \ + cd "$(DESTDIR)$(iwdir)" && rm -f $$filesc || exit $$?; \ + echo " ( cd '$(DESTDIR)$(iwdir)' && rm -f" $$fileso ")"; \ + cd "$(DESTDIR)$(iwdir)" && rm -f $$fileso +tags: TAGS +TAGS: + +ctags: CTAGS +CTAGS: + + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d "$(distdir)/$$file"; then \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ + find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ + fi; \ + cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ + else \ + test -f "$(distdir)/$$file" \ + || cp -p $$d/$$file "$(distdir)/$$file" \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile +installdirs: + for dir in "$(DESTDIR)$(iwdir)"; do \ + test -z "$$dir" || $(MKDIR_P) "$$dir"; \ + done +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." + -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) +clean: clean-am + +clean-am: clean-generic clean-libtool mostlyclean-am + +distclean: distclean-am + -rm -f Makefile +distclean-am: clean-am distclean-generic + +dvi: dvi-am + +dvi-am: + +html: html-am + +html-am: + +info: info-am + +info-am: + +install-data-am: install-iwPYTHON + +install-dvi: install-dvi-am + +install-dvi-am: + +install-exec-am: + +install-html: install-html-am + +install-html-am: + +install-info: install-info-am + +install-info-am: + +install-man: + +install-pdf: install-pdf-am + +install-pdf-am: + +install-ps: install-ps-am + +install-ps-am: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-generic mostlyclean-libtool + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-iwPYTHON + +.MAKE: install-am install-strip + +.PHONY: all all-am check check-am clean clean-generic clean-libtool \ + distclean distclean-generic distclean-libtool distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-dvi install-dvi-am \ + install-exec install-exec-am install-html install-html-am \ + install-info install-info-am install-iwPYTHON install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-strip installcheck installcheck-am installdirs \ + maintainer-clean maintainer-clean-generic mostlyclean \ + mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ + uninstall uninstall-am uninstall-iwPYTHON + + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/iw/account_gui.py b/iw/account_gui.py new file mode 100644 index 0000000..7f3a964 --- /dev/null +++ b/iw/account_gui.py @@ -0,0 +1,148 @@ +# +# account_gui.py: gui root password and crypt algorithm dialog +# +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, Red Hat Inc. +# 2006, 2007, 2008 +# All rights reserved. +# +# 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, see . +# + +import gtk +import string +import gui +from iw_gui import * +from flags import flags +from constants import * +import cracklib +import _isys + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class AccountWindow (InstallWindow): + def getScreen(self, anaconda): + self.anaconda = anaconda + self.intf = anaconda.intf + + (self.xml, self.align) = gui.getGladeWidget("account.glade", + "account_align") + self.icon = self.xml.get_widget("icon") + self.capslock = self.xml.get_widget("capslock") + self.pwlabel = self.xml.get_widget("pwlabel") + self.pw = self.xml.get_widget("pw") + self.confirmlabel = self.xml.get_widget("confirmlabel") + self.confirm = self.xml.get_widget("confirm") + + # load the icon + gui.readImageFromFile("root-password.png", image=self.icon) + + # connect hotkeys + self.pwlabel.set_text_with_mnemonic(_("Root _Password:")) + self.pwlabel.set_mnemonic_widget(self.pw) + self.confirmlabel.set_text_with_mnemonic(_("_Confirm:")) + self.confirmlabel.set_mnemonic_widget(self.confirm) + + # watch for Caps Lock so we can warn the user + self.intf.icw.window.connect("key-release-event", + lambda w, e: self.handleCapsLockRelease(w, e, self.capslock)) + + # we might have a root password already + if not self.anaconda.users.rootPassword['isCrypted']: + self.pw.set_text(self.anaconda.users.rootPassword['password']) + self.confirm.set_text(self.anaconda.users.rootPassword['password']) + + # pressing Enter in confirm == clicking Next + vbox = self.xml.get_widget("account_box") + self.confirm.connect("activate", lambda widget, + vbox=vbox: self.ics.setGrabNext(1)) + + # set initial caps lock label text + self.setCapsLockLabel() + + return self.align + + def focus(self): + self.pw.grab_focus() + + def passwordError(self): + self.pw.set_text("") + self.confirm.set_text("") + self.pw.grab_focus() + raise gui.StayOnScreen + + def handleCapsLockRelease(self, window, event, label): + if event.keyval == gtk.keysyms.Caps_Lock and \ + event.state & gtk.gdk.LOCK_MASK: + self.setCapsLockLabel() + + def setCapsLockLabel(self): + if _isys.isCapsLockEnabled(): + self.capslock.set_text("" + _("Caps Lock is on.") + "") + self.capslock.set_use_markup(True) + else: + self.capslock.set_text("") + + def getNext (self): + pw = self.pw.get_text() + confirm = self.confirm.get_text() + + if not pw or not confirm: + self.intf.messageWindow(_("Error with Password"), + _("You must enter your root password " + "and confirm it by typing it a second " + "time to continue."), + custom_icon="error") + self.passwordError() + + if pw != confirm: + self.intf.messageWindow(_("Error with Password"), + _("The passwords you entered were " + "different. Please try again."), + custom_icon="error") + self.passwordError() + + if len(pw) < 6: + self.intf.messageWindow(_("Error with Password"), + _("The root password must be at least " + "six characters long."), + custom_icon="error") + self.passwordError() + + try: + cracklib.FascistCheck(pw) + except ValueError, e: + msg = gettext.ldgettext("cracklib", e) + ret = self.intf.messageWindow(_("Weak Password"), + _("You have provided a weak password: %s") % msg, + type="custom", custom_icon="error", + default=0, + custom_buttons=[_("Cancel"), _("Use Anyway")]) + if ret == 0: + self.passwordError() + + legal = string.digits + string.ascii_letters + string.punctuation + " " + for letter in pw: + if letter not in legal: + self.intf.messageWindow(_("Error with Password"), + _("Requested password contains " + "non-ASCII characters, which are " + "not allowed."), + custom_icon="error") + self.passwordError() + + self.anaconda.users.rootPassword["password"] = self.pw.get_text() + self.anaconda.users.rootPassword["isCrypted"] = False + + return None diff --git a/iw/advanced_storage.py b/iw/advanced_storage.py new file mode 100644 index 0000000..902d8ac --- /dev/null +++ b/iw/advanced_storage.py @@ -0,0 +1,256 @@ +# +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +# UI methods for supporting adding advanced storage devices. +import gobject +import gtk +import gtk.glade +import gui +import iutil +import network +import storage.fcoe +import storage.iscsi +from netconfig_dialog import NetworkConfigurator + +def addFcoeDrive(anaconda): + (dxml, dialog) = gui.getGladeWidget("fcoe-config.glade", "fcoeDialog") + combo = dxml.get_widget("fcoeNicCombo") + dcb_cb = dxml.get_widget("dcbCheckbutton") + + # Populate the combo + cell = gtk.CellRendererText() + combo.pack_start(cell, True) + combo.set_attributes(cell, text = 0) + cell.set_property("wrap-width", 525) + combo.set_size_request(480, -1) + store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + combo.set_model(store) + + netdevs = anaconda.network.available() + keys = netdevs.keys() + keys.sort() + selected_interface = None + for dev in keys: + # Skip NICs which are connected (iow in use for a net install) + if dev in network.getActiveNetDevs(): + continue + + i = store.append(None) + desc = netdevs[dev].get("DESC") + if desc: + desc = "%s - %s" %(dev, desc) + else: + desc = "%s" %(dev,) + + mac = netdevs[dev].get("HWADDR") + if mac: + desc = "%s - %s" %(desc, mac) + + if selected_interface is None: + selected_interface = i + + store[i] = (desc, dev) + + if selected_interface: + combo.set_active_iter(selected_interface) + else: + combo.set_active(0) + + # Show the dialog + gui.addFrame(dialog) + dialog.show_all() + sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + sg.add_widget(dxml.get_widget("fcoeNicCombo")) + + while True: + rc = dialog.run() + + if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: + break + + iter = combo.get_active_iter() + if iter is None: + anaconda.intf.messageWindow(_("Error"), + _("You must select a NIC to use."), + type="warning", custom_icon="error") + continue + + try: + anaconda.storage.fcoe.addSan(store.get_value(iter, 1), + dcb=dcb_cb.get_active(), + intf=anaconda.intf) + except IOError as e: + anaconda.intf.messageWindow(_("Error"), str(e)) + rc = gtk.RESPONSE_CANCEL + + break + + dialog.destroy() + return rc + +def addIscsiDrive(anaconda): + if not network.hasActiveNetDev(): + net = NetworkConfigurator(anaconda.network) + ret = net.run() + net.destroy() + if ret != gtk.RESPONSE_OK: + return ret + + (dxml, dialog) = gui.getGladeWidget("iscsi-config.glade", "iscsiDialog") + gui.addFrame(dialog) + dialog.show_all() + sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + for w in ["iscsiAddrEntry", "iscsiInitiatorEntry", "userEntry", + "passEntry", "userinEntry", "passinEntry"]: + sg.add_widget(dxml.get_widget(w)) + + # get the initiator name if it exists and don't allow changing + # once set + e = dxml.get_widget("iscsiInitiatorEntry") + e.set_text(anaconda.storage.iscsi.initiator) + if anaconda.storage.iscsi.initiatorSet: + e.set_sensitive(False) + + while True: + rc = dialog.run() + if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: + break + + initiator = e.get_text().strip() + if len(initiator) == 0: + anaconda.intf.messageWindow(_("Invalid Initiator Name"), + _("You must provide an initiator name.")) + continue + + anaconda.storage.iscsi.initiator = initiator + + target = dxml.get_widget("iscsiAddrEntry").get_text().strip() + user = dxml.get_widget("userEntry").get_text().strip() + pw = dxml.get_widget("passEntry").get_text().strip() + user_in = dxml.get_widget("userinEntry").get_text().strip() + pw_in = dxml.get_widget("passinEntry").get_text().strip() + + try: + count = len(target.split(":")) + idx = target.rfind("]:") + # Check for IPV6 [IPV6-ip]:port + if idx != -1: + ip = target[1:idx] + port = target[idx+2:] + # Check for IPV4 aaa.bbb.ccc.ddd:port + elif count == 2: + idx = target.rfind(":") + ip = target[:idx] + port = target[idx+1:] + else: + ip = target + port = "3260" + + network.sanityCheckIPString(ip) + except (network.IPMissing, network.IPError) as msg: + anaconda.intf.messageWindow(_("Error with Data"), msg) + continue + + try: + anaconda.storage.iscsi.addTarget(ip, port, user, pw, + user_in, pw_in, + anaconda.intf) + except ValueError as e: + anaconda.intf.messageWindow(_("Error"), str(e)) + continue + except IOError as e: + anaconda.intf.messageWindow(_("Error"), str(e)) + rc = gtk.RESPONSE_CANCEL + + break + + dialog.destroy() + return rc + +def addZfcpDrive(anaconda): + (dxml, dialog) = gui.getGladeWidget("zfcp-config.glade", "zfcpDialog") + gui.addFrame(dialog) + dialog.show_all() + sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + for w in ["devnumEntry", "wwpnEntry", "fcplunEntry"]: + sg.add_widget(dxml.get_widget(w)) + + while True: + rc = dialog.run() + if rc != gtk.RESPONSE_APPLY: + break + + devnum = dxml.get_widget("devnumEntry").get_text().strip() + wwpn = dxml.get_widget("wwpnEntry").get_text().strip() + fcplun = dxml.get_widget("fcplunEntry").get_text().strip() + + try: + anaconda.storage.zfcp.addFCP(devnum, wwpn, fcplun) + except ValueError as e: + anaconda.intf.messageWindow(_("Error"), str(e)) + continue + + break + + dialog.destroy() + return rc + +def addDrive(anaconda): + (dxml, dialog) = gui.getGladeWidget("adddrive.glade", "addDriveDialog") + gui.addFrame(dialog) + dialog.show_all() + if not iutil.isS390(): + dxml.get_widget("zfcpRadio").hide() + dxml.get_widget("zfcpRadio").set_group(None) + + if not storage.iscsi.has_iscsi(): + dxml.get_widget("iscsiRadio").set_sensitive(False) + dxml.get_widget("iscsiRadio").set_active(False) + + if not storage.fcoe.has_fcoe(): + dxml.get_widget("fcoeRadio").set_sensitive(False) + dxml.get_widget("fcoeRadio").set_active(False) + + #figure out what advanced devices we have available and set sensible default + group = dxml.get_widget("iscsiRadio").get_group() + for button in group: + if button is not None and button.get_property("sensitive"): + button.set_active(True) + break + + rc = dialog.run() + dialog.hide() + + if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: + return False + + if dxml.get_widget("iscsiRadio").get_active() and storage.iscsi.has_iscsi(): + rc = addIscsiDrive(anaconda) + elif dxml.get_widget("fcoeRadio").get_active() and storage.fcoe.has_fcoe(): + rc = addFcoeDrive(anaconda) + elif dxml.get_widget("zfcpRadio") is not None and dxml.get_widget("zfcpRadio").get_active(): + rc = addZfcpDrive(anaconda) + + dialog.destroy() + + if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: + return False + else: + return True diff --git a/iw/autopart_type.py b/iw/autopart_type.py new file mode 100644 index 0000000..2ba1075 --- /dev/null +++ b/iw/autopart_type.py @@ -0,0 +1,284 @@ +# +# autopart_type.py: Allows the user to choose how they want to partition +# +# Copyright (C) 2005, 2006 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +import gtk +import gobject +import math + +from constants import * +import gui +from partition_ui_helpers_gui import * +from pixmapRadioButtonGroup_gui import pixmapRadioButtonGroup + +from iw_gui import * +from flags import flags +from storage.deviceaction import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +def whichToShrink(storage, intf): + def getActive(combo): + act = combo.get_active_iter() + return combo.get_model().get_value(act, 1) + + def comboCB(combo, shrinkSB): + # partition to resize changed, let's update our spinbutton + newSize = shrinkSB.get_value_as_int() + + part = getActive(combo) + reqlower = long(math.ceil(part.format.minSize)) + requpper = long(math.floor(part.format.currentSize)) + + adj = shrinkSB.get_adjustment() + adj.lower = reqlower + adj.upper = requpper + adj.set_value(reqlower) + + + (dxml, dialog) = gui.getGladeWidget("autopart.glade", "shrinkDialog") + + store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT) + combo = dxml.get_widget("shrinkPartCombo") + combo.set_model(store) + crt = gtk.CellRendererText() + combo.pack_start(crt, True) + combo.set_attributes(crt, text = 0) + combo.connect("changed", comboCB, dxml.get_widget("shrinkSB")) + + biggest = -1 + for part in storage.partitions: + if not part.exists: + continue + + entry = None + if part.resizable and part.format.resizable: + entry = ("%s (%s, %d MB)" % (part.name, + part.format.name, + math.floor(part.format.size)), + part) + + if entry: + i = store.append(None) + store[i] = entry + combo.set_active_iter(i) + + if biggest == -1: + biggest = i + else: + current = store.get_value(biggest, 1) + if part.format.targetSize > current.format.targetSize: + biggest = i + + if biggest > -1: + combo.set_active_iter(biggest) + + if len(store) == 0: + dialog.destroy() + intf.messageWindow(_("Error"), + _("No partitions are available to resize. Only " + "physical partitions with specific filesystems " + "can be resized."), + type="warning", custom_icon="error") + return (gtk.RESPONSE_CANCEL, []) + + gui.addFrame(dialog) + dialog.show_all() + runResize = True + + while runResize: + rc = dialog.run() + if rc != gtk.RESPONSE_OK: + dialog.destroy() + return (rc, []) + + request = getActive(combo) + newSize = dxml.get_widget("shrinkSB").get_value_as_int() + actions = [] + + try: + actions.append(ActionResizeFormat(request, newSize)) + except ValueError as e: + intf.messageWindow(_("Resize FileSystem Error"), + _("%(device)s: %(msg)s") + % {'device': request.format.device, + 'msg': e.message}, + type="warning", custom_icon="error") + continue + + try: + actions.append(ActionResizeDevice(request, newSize)) + except ValueError as e: + intf.messageWindow(_("Resize Device Error"), + _("%(name)s: %(msg)s") + % {'name': request.name, 'msg': e.message}, + type="warning", custom_icon="error") + continue + + runResize = False + + dialog.destroy() + return (rc, actions) + +class PartitionTypeWindow(InstallWindow): + def __init__(self, ics): + InstallWindow.__init__(self, ics) + ics.setTitle("Automatic Partitioning") + ics.setNextEnabled(True) + + def getNext(self): + if self.storage.checkNoDisks(): + raise gui.StayOnScreen + + if self.buttonGroup.getCurrent() == "custom": + self.dispatch.skipStep("autopartitionexecute", skip = 1) + self.dispatch.skipStep("partition", skip = 0) + self.dispatch.skipStep("bootloader", skip = 0) + + self.storage.clearPartType = CLEARPART_TYPE_NONE + else: + if self.buttonGroup.getCurrent() == "shrink": + (rc, actions) = whichToShrink(self.storage, self.intf) + if rc == gtk.RESPONSE_OK: + for action in actions: + self.storage.devicetree.registerAction(action) + else: + raise gui.StayOnScreen + + # we're not going to delete any partitions in the resize case + self.storage.clearPartType = CLEARPART_TYPE_NONE + elif self.buttonGroup.getCurrent() == "all": + self.storage.clearPartType = CLEARPART_TYPE_ALL + elif self.buttonGroup.getCurrent() == "replace": + self.storage.clearPartType = CLEARPART_TYPE_LINUX + elif self.buttonGroup.getCurrent() == "freespace": + self.storage.clearPartType = CLEARPART_TYPE_NONE + + self.dispatch.skipStep("autopartitionexecute", skip = 0) + + if self.encryptButton.get_active(): + self.storage.encryptedAutoPart = True + else: + self.storage.encryptionPassphrase = "" + self.storage.retrofitPassphrase = False + self.storage.encryptedAutoPart = False + + self.storage.doAutoPart = True + + if self.reviewButton.get_active(): + self.dispatch.skipStep("partition", skip = 0) + self.dispatch.skipStep("bootloader", skip = 0) + else: + self.dispatch.skipStep("partition") + self.dispatch.skipStep("bootloader") + self.dispatch.skipStep("bootloaderadvanced") + + return None + + def typeChanged(self, *args): + if self.buttonGroup.getCurrent() == "custom": + if not self.prevrev: + self.prevrev = self.reviewButton.get_active() + + self.reviewButton.set_active(True) + self.reviewButton.set_sensitive(False) + self.encryptButton.set_sensitive(False) + else: + if self.prevrev: + self.reviewButton.set_active(self.prevrev) + self.prevrev = None + + self.reviewButton.set_sensitive(True) + self.encryptButton.set_sensitive(True) + + def getScreen(self, anaconda): + self.anaconda = anaconda + self.storage = anaconda.storage + self.intf = anaconda.intf + self.dispatch = anaconda.dispatch + + (self.xml, vbox) = gui.getGladeWidget("autopart.glade", "parttypeTable") + self.encryptButton = self.xml.get_widget("encryptButton") + self.reviewButton = self.xml.get_widget("reviewButton") + self.table = self.xml.get_widget("parttypeTable") + + self.prevrev = None + self.reviewButton.set_active(not self.dispatch.stepInSkipList("partition")) + self.encryptButton.set_active(self.storage.encryptedAutoPart) + + self.buttonGroup = pixmapRadioButtonGroup() + self.buttonGroup.addEntry("all", _("Use All Space"), + pixmap=gui.readImageFromFile("partscheme-all.png"), + descr=_("Removes all partitions on the selected " + "device(s). This includes partitions " + "created by other operating systems.\n\n" + "Tip: This option will remove " + "data from the selected device(s). Make " + "sure you have backups.")) + self.buttonGroup.addEntry("replace", _("Replace Existing Linux System(s)"), + pixmap=gui.readImageFromFile("partscheme-replace.png"), + descr=_("Removes all Linux partitions on the " + "selected device(s). This does " + "not remove other partitions you may have " + "on your storage device(s) (such as VFAT or " + "FAT32).\n\n" + "Tip: This option will remove " + "data from the selected device(s). Make " + "sure you have backups.")) + self.buttonGroup.addEntry("shrink", _("Shrink Current System"), + pixmap=gui.readImageFromFile("partscheme-shrink.png"), + descr=_("Shrinks existing partitions to create free " + "space for the default layout.")) + self.buttonGroup.addEntry("freespace", _("Use Free Space"), + pixmap=gui.readImageFromFile("partscheme-freespace.png"), + descr=_("Retains your current data and partitions and " + "uses only the unpartitioned space on the " + "selected device(s), assuming you have enough " + "free space available.")) + self.buttonGroup.addEntry("custom", _("Create Custom Layout"), + pixmap=gui.readImageFromFile("partscheme-custom.png"), + descr=_("Manually create your own custom layout on " + "the selected device(s) using our partitioning " + "tool.")) + + self.buttonGroup.setToggleCallback(self.typeChanged) + + widget = self.buttonGroup.render() + self.table.attach(widget, 0, 1, 1, 2) + + # if not set in ks, use UI default + if self.storage.clearPartType is None or self.storage.clearPartType == CLEARPART_TYPE_LINUX: + self.buttonGroup.setCurrent("replace") + elif self.storage.clearPartType == CLEARPART_TYPE_NONE: + self.buttonGroup.setCurrent("freespace") + elif self.storage.clearPartType == CLEARPART_TYPE_ALL: + self.buttonGroup.setCurrent("all") + + if self.buttonGroup.getCurrent() == "custom": + # make sure reviewButton is active and not sensitive + if self.prevrev == None: + self.prevrev = self.reviewButton.get_active() + + self.reviewButton.set_active(True) + self.reviewButton.set_sensitive(False) + self.encryptButton.set_sensitive(False) + + return vbox diff --git a/iw/blpasswidget.py b/iw/blpasswidget.py new file mode 100644 index 0000000..c07b4df --- /dev/null +++ b/iw/blpasswidget.py @@ -0,0 +1,164 @@ +# +# blpasswidget.py - widget for setting of a boot loader password +# +# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +import gtk +import gui +from constants import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class BootloaderPasswordWidget: + def __init__(self, anaconda, parent): + self.parent = parent + self.intf = anaconda.intf + + if anaconda.bootloader.getPassword(): + usePass = 1 + self.password = anaconda.bootloader.getPassword() + else: + usePass = 0 + self.password = None + + vbox = gtk.VBox(False, 6) + + # password widgets + callback + self.usePassCb = gtk.CheckButton(_("_Use a boot loader password")) + self.usePassCb.set_tooltip_text(_("A boot loader password prevents users from changing kernel options, increasing security.")) + self.passButton = gtk.Button("No password") + if usePass: + self.usePassCb.set_active(True) + self.passButton.set_sensitive(True) + else: + self.usePassCb.set_active(False) + self.passButton.set_sensitive(False) + self.usePassCb.connect("toggled", self.passCallback) + self.passButton.connect("clicked", self.passButtonCallback) + self.setPassLabel() + + box = gtk.HBox(False, 12) + box.pack_start(self.usePassCb, False) + box.pack_start(self.passButton, False) + vbox.pack_start(box, False) + + self.widget = vbox + + def getWidget(self): + return self.widget + + def getPassword(self): + # XXX should we handle the only having a crypted password case? + if self.usePassCb.get_active() and self.password: + return self.password + else: + return None + + # set the label on the button for the bootloader password + def setPassLabel(self): + self.passButton.set_label(_("Change _password")) + if not self.usePassCb.get_active() or not self.password: + self.passButton.set_sensitive(False) + else: + self.passButton.set_sensitive(True) + + # callback for when the password checkbox is clicked + def passCallback(self, widget, *args): + if not widget.get_active(): + self.passButton.set_sensitive(False) + self.setPassLabel() + else: + if self.passwordWindow() == 2: + widget.set_active(0) + self.setPassLabel() + + # callback for when the password button is clicked + def passButtonCallback(self, widget, *args): + self.passwordWindow() + self.setPassLabel() + + # get the bootloader password + def passwordWindow(self, *args): + dialog = gtk.Dialog(_("Enter Boot Loader Password"), self.parent) + dialog.add_button('gtk-cancel', 2) + dialog.add_button('gtk-ok', 1) + dialog.set_position(gtk.WIN_POS_CENTER) + gui.addFrame(dialog) + + label = gui.WrappingLabel(_("Enter a boot loader password and then confirm it. (Note that your BIOS keymap may be different than the actual keymap you are used to.)")) + label.set_alignment(0.0, 0.0) + dialog.vbox.pack_start(label) + + table = gtk.Table(2, 2) + table.set_row_spacings(5) + table.set_col_spacings(5) + label = gui.MnemonicLabel(_("_Password:")) + table.attach(label, 0, 1, 2, 3, gtk.FILL, 0, 10) + pwEntry = gtk.Entry (16) + pwEntry.set_visibility (False) + label.set_mnemonic_widget(pwEntry) + table.attach(pwEntry, 1, 2, 2, 3, gtk.FILL, 0, 10) + label = gui.MnemonicLabel(_("Con_firm:")) + table.attach(label, 0, 1, 3, 4, gtk.FILL, 0, 10) + confirmEntry = gtk.Entry (16) + confirmEntry.set_visibility (False) + label.set_mnemonic_widget(confirmEntry) + table.attach(confirmEntry, 1, 2, 3, 4, gtk.FILL, 0, 10) + dialog.vbox.pack_start(table) + + # set the default + if self.password: + pwEntry.set_text(self.password) + confirmEntry.set_text(self.password) + + dialog.show_all() + + while 1: + rc = dialog.run() + if rc in [2, gtk.RESPONSE_DELETE_EVENT]: + break + + if pwEntry.get_text() != confirmEntry.get_text(): + self.intf.messageWindow(_("Passwords don't match"), + _("Passwords do not match"), + type='warning') + continue + + thePass = pwEntry.get_text() + if not thePass: + continue + if len(thePass) < 6: + ret = self.intf.messageWindow(_("Warning"), + _("Your boot loader password is shorter than " + "six characters. We recommend a longer " + "boot loader password." + "\n\n" + "Would you like to continue with this " + "password?"), + type = "yesno") + if ret == 0: + continue + + self.password = thePass + break + + dialog.destroy() + return rc + diff --git a/iw/bootloader_main_gui.py b/iw/bootloader_main_gui.py new file mode 100644 index 0000000..05588b6 --- /dev/null +++ b/iw/bootloader_main_gui.py @@ -0,0 +1,244 @@ +# +# bootloader_main_gui.py: gui bootloader configuration dialog +# +# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +import gtk +import gobject +import gui +from iw_gui import * +from constants import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +from osbootwidget import OSBootWidget +from blpasswidget import BootloaderPasswordWidget + + +class MainBootloaderWindow(InstallWindow): + windowTitle = N_("Boot Loader Configuration") + + def __init__(self, ics): + InstallWindow.__init__(self, ics) + self.parent = ics.getICW().window + + + def getPrev(self): + pass + + + def getNext(self): + # go ahead and set the device even if we already knew it + # since that won't change anything + self.bl.setDevice(self.bldev) + + self.bl.drivelist = self.driveorder + + if not self.grubCB.get_active(): + # if we're not installing a boot loader, don't show the second + # screen and don't worry about other options + self.dispatch.skipStep("instbootloader", skip = 1) + + # kind of a hack... + self.bl.defaultDevice = None + return + else: + self.dispatch.skipStep("instbootloader", skip = 0) + self.bl.setUseGrub(1) + + # set the password + self.bl.setPassword(self.blpass.getPassword(), isCrypted = 0) + + # set the bootloader images based on what's in our list + self.oslist.setBootloaderImages() + + def bootloaderChanged(self, *args): + active = self.grubCB.get_active() + + for widget in [ self.oslist.getWidget(), self.blpass.getWidget(), self.deviceButton ]: + widget.set_sensitive(active) + + + def _deviceChange(self, b, anaconda, *args): + def __driveChange(combo, dxml, choices): + if not choices.has_key("mbr"): + return + + iter = combo.get_active_iter() + if not iter: + return + + first = combo.get_model()[iter][1] + desc = choices["mbr"][1] + dxml.get_widget("mbrRadio").set_label("%s - /dev/%s" %(_(desc), first)) + dxml.get_widget("mbrRadio").set_data("bootDevice", first) + + def __genStore(combo, disks, active): + model = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + combo.set_model(model) + cell = gtk.CellRendererText() + combo.pack_start(cell, True) + combo.set_attributes(cell, text = 0) + + for disk in disks: + i = model.append(None) + model[i] = ("%s %8.0f MB %s" %(disk.name, disk.size, + disk.description), + "%s" %(disk.name,)) + if disk.name == active: + combo.set_active_iter(i) + + return model + + (dxml, dialog) = gui.getGladeWidget("blwhere.glade", + "blwhereDialog") + gui.addFrame(dialog) + dialog.set_transient_for(self.parent) + dialog.show() + + choices = anaconda.platform.bootloaderChoices(self.bl) + for t in ("mbr", "boot"): + if not choices.has_key(t): + continue + (device, desc) = choices[t] + w = dxml.get_widget("%sRadio" %(t,)) + w.set_label("%s - /dev/%s" %(_(desc), device)) + w.show() + if self.bldev == device: + w.set_active(True) + else: + w.set_active(False) + w.set_data("bootDevice", device) + + for i in range(1, 5): + if len(self.driveorder) < i: + break + combo = dxml.get_widget("bd%dCombo" %(i,)) + lbl = dxml.get_widget("bd%dLabel" %(i,)) + combo.show() + lbl.show() + partitioned = anaconda.storage.partitioned + disks = anaconda.storage.disks + bl_disks = [d for d in disks if d in partitioned] + m = __genStore(combo, bl_disks, self.driveorder[i - 1]) + + dxml.get_widget("bd1Combo").connect("changed", __driveChange, dxml, choices) + __driveChange(dxml.get_widget("bd1Combo"), dxml, choices) + + while 1: + rc = dialog.run() + if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: + break + + # set the boot device based on what they chose + if dxml.get_widget("bootRadio").get_active(): + self.bldev = dxml.get_widget("bootRadio").get_data("bootDevice") + elif dxml.get_widget("mbrRadio").get_active(): + self.bldev = dxml.get_widget("mbrRadio").get_data("bootDevice") + else: + raise RuntimeError, "No radio button selected!" + + # and adjust the boot order + neworder = [] + for i in range(1, 5): + if len(self.driveorder) < i: + break + + combo = dxml.get_widget("bd%dCombo" %(i,)) + iter = combo.get_active_iter() + if not iter: + continue + + act = combo.get_model()[iter][1] + if act not in neworder: + neworder.append(act) + for d in self.driveorder: + if d not in neworder: + neworder.append(d) + self.driveorder = neworder + + break + + dialog.destroy() + self.grubCB.set_label(_("_Install boot loader on /dev/%s.") % + (self.bldev,)) + return rc + + def _setBLCBText(self): + self.grubCB.set_label(_("_Install boot loader on /dev/%s.") % + (self.bldev,)) + + + def getScreen(self, anaconda): + self.dispatch = anaconda.dispatch + self.bl = anaconda.bootloader + self.intf = anaconda.intf + + self.driveorder = self.bl.drivelist + if len(self.driveorder) == 0: + partitioned = anaconda.storage.partitioned + disks = anaconda.storage.disks + self.driveorder = [d.name for d in disks if d in partitioned] + + if self.bl.getPassword(): + self.usePass = 1 + self.password = self.bl.getPassword() + else: + self.usePass = 0 + self.password = None + + thebox = gtk.VBox (False, 12) + thebox.set_border_width(18) + + # make sure we get a valid device to say we're installing to + if self.bl.getDevice() is not None: + self.bldev = self.bl.getDevice() + else: + # we don't know what it is yet... if mbr is possible, we want + # it, else we want the boot dev + choices = anaconda.platform.bootloaderChoices(self.bl) + if choices.has_key('mbr'): + self.bldev = choices['mbr'][0] + else: + self.bldev = choices['boot'][0] + + hb = gtk.HBox(False, 12) + self.grubCB = gtk.CheckButton(_("_Install boot loader on /dev/%s.") % + (self.bldev,)) + self.grubCB.set_active(not self.dispatch.stepInSkipList("instbootloader")) + self.grubCB.connect("toggled", self.bootloaderChanged) + hb.pack_start(self.grubCB, False) + + self.deviceButton = gtk.Button(_("_Change device")) + self.deviceButton.connect("clicked", self._deviceChange, anaconda) + hb.pack_start(self.deviceButton, False) + + thebox.pack_start(hb, False) + + # control whether or not there's a boot loader password and what it is + self.blpass = BootloaderPasswordWidget(anaconda, self.parent) + thebox.pack_start(self.blpass.getWidget(), False) + + # configure the systems available to boot from the boot loader + self.oslist = OSBootWidget(anaconda, self.parent) + thebox.pack_end(self.oslist.getWidget(), True) + + self.bootloaderChanged() + return thebox diff --git a/iw/checklist.py b/iw/checklist.py new file mode 100644 index 0000000..50026a1 --- /dev/null +++ b/iw/checklist.py @@ -0,0 +1,225 @@ +# +# checklist.py: A class (derived from GtkTreeView) that provides a list of +# checkbox / text string pairs +# +# Copyright (C) 2000, 2001 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Brent Fox +# Jeremy Katz +# + +import gtk +import gobject + +class CheckList (gtk.TreeView): + """A class (derived from gtk.TreeView) that provides a list of + checkbox / text string pairs""" + + # override this to make your own columns if necessary + def create_columns(self, columns): + # add the string columns to the tree view widget + for i in range(1, columns + 1): + renderer = gtk.CellRendererText() + column = gtk.TreeViewColumn('Text', renderer, text=i, + **self.sensitivity_args) + column.set_clickable(False) + self.append_column(column) + + # XXX need to handle the multicolumn case better still.... + def __init__ (self, columns = 1, custom_store=None, sensitivity=False): + if custom_store is None: + self.store = gtk.TreeStore(gobject.TYPE_BOOLEAN, + gobject.TYPE_STRING, + gobject.TYPE_STRING) + else: + self.store = custom_store + + gtk.TreeView.__init__ (self, self.store) + + # XXX we only handle two text columns right now + if custom_store is None and columns > 2: + raise RuntimeError, "CheckList supports a maximum of 2 columns" + + self.columns = columns + + # sensitivity_col is an optional hidden boolean column that controls + # the sensitive property of all of the CellRenderers in its row. + # + # To enable this functionality the last column in the TreeStore + # must be boolean and you must pass a value of True for the + # 'sensitivity' keyword argument to this class' constructor. + self.sensitivity_col = None + self.sensitivity_args = {} + last_col = self.store.get_n_columns() - 1 + if sensitivity and \ + self.store.get_column_type(last_col) == gobject.TYPE_BOOLEAN: + self.sensitivity_col = last_col + self.sensitivity_args = {"sensitive": self.sensitivity_col} + + self.checkboxrenderer = gtk.CellRendererToggle() + column = gtk.TreeViewColumn('', self.checkboxrenderer, active=0, + **self.sensitivity_args) +# column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) +# column.set_fixed_width(40) + column.set_clickable(True) + self.checkboxrenderer.connect ("toggled", self.toggled_item) + self.append_column(column) + + self.create_columns(columns) + + self.set_rules_hint(False) + self.set_headers_visible(False) + self.columns_autosize() + self.set_enable_search(False) + + # keep track of the number of rows we have so we can + # iterate over them all + self.num_rows = 0 + + self.tiptext = {} + self.props.has_tooltip = True + self.connect("query-tooltip", self._tipQuery) + + def _tipQuery(self, widget, x, y, kbd, tip, *data): + (tx, ty) = widget.convert_widget_to_bin_window_coords(x, y) + r = widget.get_path_at_pos(tx, ty) + if not r: + return False + path = r[0] + if not self.tiptext.has_key(path): + return False + tip.set_text(self.tiptext[path]) + return True + + def append_row (self, textList, init_value, tooltipText = None): + """Add a row to the list. + text: text to display in the row + init_value: initial state of the indicator + tooltipText: the text that will appear when the mouse is over the row.""" + + iter = self.store.append(None) + self.store.set_value(iter, 0, init_value) + if self.sensitivity_col is not None: + self.store.set_value(iter, self.sensitivity_col, True) + + # add the text for the number of columns we have + i = 1 + for text in textList[:self.columns]: + self.store.set_value(iter, i, textList[i - 1]) + i = i + 1 + + if tooltipText: + self.tiptext[self.store.get_path(iter)] = tooltipText + + self.num_rows = self.num_rows + 1 + + + def toggled_item(self, data, row): + """Set a function to be called when the value of a row is toggled. + The function will be called with two arguments, the clicked item + in the row and a string for which row was clicked.""" + + iter = self.store.get_iter((int(row),)) + val = self.store.get_value(iter, 0) + self.store.set_value(iter, 0, not val) + + + def clear (self): + "Remove all rows" + self.store.clear() + self.num_rows = 0 + + + def get_active(self, row): + """Return FALSE or TRUE as to whether or not the row is toggled + similar to GtkToggleButtons""" + + iter = self.store.get_iter((row,)) + return self.store.get_value(iter, 0) + + + def set_active(self, row, is_active): + "Set row to be is_active, similar to GtkToggleButton" + + iter = self.store.get_iter((row,)) + self.store.set_value(iter, 0, is_active) + + + def get_text(self, row, column): + "Get the text from row and column" + + iter = self.store.get_iter((row,)) + return self.store.get_value(iter, column) + + + def set_column_title(self, column, title): + "Set the title of column to title" + + col = self.get_column(column) + if col: + col.set_title(title) + + + def set_column_min_width(self, column, min): + "Set the minimum width of column to min" + + col = self.get_column(column) + if col: + col.set_min_width(min) + + + def set_column_clickable(self, column, clickable): + "Set the column to be clickable" + + col = self.get_column(column) + if col: + col.set_clickable(clickable) + + + def set_column_sizing(self, column, sizing): + "Set the column to use the given sizing method" + + col = self.get_column(column) + if col: + col.set_sizing(sizing) + + def set_column_sort_id(self, column, id): + "Set the sort id of column to id" + + col = self.get_column(column) + if col: + col.set_sort_column_id(id) + +def main(): + win = gtk.Window() + cl = CheckList(1) + for i in range(1, 10): + cl.append_row("%s" %(i,), False, "foo: %d" %(i,)) + + sw = gtk.ScrolledWindow() + sw.set_policy (gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + sw.add (cl) + sw.set_shadow_type(gtk.SHADOW_IN) + cl.set_headers_visible(True) + + win.add(sw) + win.set_size_request(250, 250) + win.show_all() + + gtk.main() + +if __name__ == "__main__": + main() diff --git a/iw/cleardisks_gui.py b/iw/cleardisks_gui.py new file mode 100644 index 0000000..7add4c2 --- /dev/null +++ b/iw/cleardisks_gui.py @@ -0,0 +1,239 @@ +# +# Select which disks to clear and which ones to just mount. +# +# Copyright (C) 2009 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# + +import gtk, gobject +import gui +from DeviceSelector import * +from constants import * +import isys +from iw_gui import * +from storage.udev import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class ClearDisksWindow (InstallWindow): + windowTitle = N_("Clear Disks Selector") + + def getNext (self): + # All the rows that are visible in the right hand side should be cleared. + cleardisks = [] + for row in self.store: + if row[self.rightVisible]: + cleardisks.append(row[OBJECT_COL].name) + + if len(cleardisks) == 0: + self.anaconda.intf.messageWindow(_("Error"), + _("You must select at least one " + "drive to be used for installation."), + custom_icon="error") + raise gui.StayOnScreen + + # The selected row is the disk to boot from. + selected = self.rightDS.getSelected() + + if len(selected) == 0: + self.anaconda.intf.messageWindow(_("Error"), + _("You must select one drive to " + "boot from."), + custom_icon="error") + raise gui.StayOnScreen + + bootDisk = selected[0][OBJECT_COL].name + + cleardisks.sort(self.anaconda.storage.compareDisks) + + self.anaconda.storage.clearPartDisks = cleardisks + self.anaconda.bootloader.updateDriveList([bootDisk]) + + def getScreen (self, anaconda): + # We can't just use exclusiveDisks here because of kickstart. First, + # the kickstart file could have used ignoredisk --drives= in which case + # exclusiveDisks would be empty. Second, ignoredisk is entirely + # optional in which case neither list would be populated. Luckily, + # storage.disks takes isIgnored into account and that handles both these + # issues. + disks = filter(lambda d: not d.format.hidden, anaconda.storage.disks) + + # Skip this screen as well if there's only one disk to use. + if len(disks) == 1: + anaconda.storage.clearPartDisks = [disks[0].name] + anaconda.bootloader.drivelist = [disks[0].name] + return None + + (xml, self.vbox) = gui.getGladeWidget("cleardisks.glade", "vbox") + self.leftScroll = xml.get_widget("leftScroll") + self.rightScroll = xml.get_widget("rightScroll") + self.addButton = xml.get_widget("addButton") + self.removeButton = xml.get_widget("removeButton") + self.installTargetImage = xml.get_widget("installTargetImage") + self.installTargetTip = xml.get_widget("installTargetTip") + + self.anaconda = anaconda + + self.leftVisible = 1 + self.leftActive = 2 + self.rightVisible = 4 + self.rightActive = 5 + + # One store for both views. First the obejct, then a visible/active for + # the left hand side, then a visible/active for the right hand side, then + # all the other stuff. + # + # NOTE: the third boolean is a placeholder. DeviceSelector uses the third + # slot in the store to determine whether the row is immutable or not. We + # just need to put False in there for everything. + self.store = gtk.TreeStore(gobject.TYPE_PYOBJECT, + gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING) + self.store.set_sort_column_id(6, gtk.SORT_ASCENDING) + + # The left view shows all the drives that will just be mounted, but + # can still be moved to the right hand side. + self.leftFilteredModel = self.store.filter_new() + self.leftSortedModel = gtk.TreeModelSort(self.leftFilteredModel) + self.leftTreeView = gtk.TreeView(self.leftSortedModel) + + self.leftFilteredModel.set_visible_func(lambda model, iter, view: model.get_value(iter, self.leftVisible), self.leftTreeView) + + self.leftScroll.add(self.leftTreeView) + + self.leftDS = DeviceSelector(self.store, self.leftSortedModel, + self.leftTreeView, visible=self.leftVisible, + active=self.leftActive) + self.leftDS.createMenu() + self.leftDS.addColumn(_("Model"), 6) + self.leftDS.addColumn(_("Capacity"), 7) + self.leftDS.addColumn(_("Vendor"), 8) + self.leftDS.addColumn(_("Interconnect"), 9, displayed=False) + self.leftDS.addColumn(_("Serial Number"), 10, displayed=False) + + # The right view show all the drives that will be wiped during install. + self.rightFilteredModel = self.store.filter_new() + self.rightSortedModel = gtk.TreeModelSort(self.rightFilteredModel) + self.rightTreeView = gtk.TreeView(self.rightSortedModel) + + self.rightFilteredModel.set_visible_func(lambda model, iter, view: model.get_value(iter, self.rightVisible), self.rightTreeView) + + self.rightScroll.add(self.rightTreeView) + + self.rightDS = DeviceSelector(self.store, self.rightSortedModel, + self.rightTreeView, visible=self.rightVisible, + active=self.rightActive) + self.rightDS.createSelectionCol(title=_("Boot"), radioButton=True) + self.rightDS.addColumn(_("Model"), 6) + self.rightDS.addColumn(_("Capacity"), 7) + + # Store the first disk (according to our detected BIOS order) for + # auto boot device selection + names = map(lambda d: d.name, disks) + self.bootDisk = sorted(names, self.anaconda.storage.compareDisks)[0] + + # The device filtering UI set up exclusiveDisks as a list of the names + # of all the disks we should use later on. Now we need to go get those, + # look up some more information in the devicetree, and set up the + # selector. + for d in disks: + rightVisible = d.name in self.anaconda.storage.clearPartDisks + rightActive = rightVisible and \ + d.name in self.anaconda.bootloader.drivelist[:1] + leftVisible = not rightVisible + self.store.append(None, (d, + leftVisible, True, False, + rightVisible, rightActive, + d.model, + str(int(d.size)) + " MB", + d.vendor, "", d.serial)) + + self.addButton.connect("clicked", self._add_clicked) + self.removeButton.connect("clicked", self._remove_clicked) + + # Also allow moving devices back and forth with double click, enter, etc. + self.leftTreeView.connect("row-activated", self._add_clicked) + self.rightTreeView.connect("row-activated", self._remove_clicked) + + # And let the user select multiple devices at a time. + self.leftTreeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE) + self.rightTreeView.get_selection().set_mode(gtk.SELECTION_MULTIPLE) + + if self.anaconda.storage.clearPartType == CLEARPART_TYPE_LINUX: + self.installTargetTip.set_markup(_("Tip: All Linux filesystems on install target devices will be reformatted and wiped of any data. Make sure you have backups.")) + elif self.anaconda.storage.clearPartType == CLEARPART_TYPE_ALL: + self.installTargetTip.set_markup(_("Tip: Install target devices will be reformatted and wiped of any data. Make sure you have backups.")) + else: + self.installTargetTip.set_markup(_("Tip: Your filesystems on install target devices will not be wiped unless you choose to do so during customization.")) + + return self.vbox + + def _autoSelectBootDisk(self): + if self.rightDS.getSelected(): + return + + for row in self.store: + if row[OBJECT_COL].name == self.bootDisk and row[self.rightVisible]: + row[self.rightActive] = True + + def _add_clicked(self, widget, *args, **kwargs): + (sortedModel, pathlist) = self.leftTreeView.get_selection().get_selected_rows() + + if not pathlist: + return + + for path in reversed(pathlist): + sortedIter = sortedModel.get_iter(path) + if not sortedIter: + continue + + filteredIter = self.leftSortedModel.convert_iter_to_child_iter(None, sortedIter) + iter = self.leftFilteredModel.convert_iter_to_child_iter(filteredIter) + + self.store.set_value(iter, self.leftVisible, False) + self.store.set_value(iter, self.rightVisible, True) + self.store.set_value(iter, self.rightActive, False) + + self._autoSelectBootDisk() + self.leftFilteredModel.refilter() + self.rightFilteredModel.refilter() + + def _remove_clicked(self, widget, *args, **kwargs): + (sortedModel, pathlist) = self.rightTreeView.get_selection().get_selected_rows() + + if not pathlist: + return + + for path in reversed(pathlist): + sortedIter = sortedModel.get_iter(path) + if not sortedIter: + continue + + filteredIter = self.rightSortedModel.convert_iter_to_child_iter(None, sortedIter) + iter = self.rightFilteredModel.convert_iter_to_child_iter(filteredIter) + + self.store.set_value(iter, self.leftVisible, True) + self.store.set_value(iter, self.rightVisible, False) + self.store.set_value(iter, self.rightActive, False) + + self._autoSelectBootDisk() + self.leftFilteredModel.refilter() + self.rightFilteredModel.refilter() diff --git a/iw/congrats_gui.py b/iw/congrats_gui.py new file mode 100644 index 0000000..3027568 --- /dev/null +++ b/iw/congrats_gui.py @@ -0,0 +1,103 @@ +# +# congrats_gui.py: install/upgrade complete screen. +# +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# + +import gtk +import gui +from iw_gui import * +from constants import * +import os +import platform + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class CongratulationWindow (InstallWindow): + + windowTitle = N_("Congratulations") + + def __init__ (self, ics): + InstallWindow.__init__(self, ics) + + ics.setPrevEnabled(False) + + # force buttonbar on in case release notes viewer is running + ics.cw.mainxml.get_widget("buttonBar").set_sensitive(True) + + self.rebootButton = ics.cw.mainxml.get_widget("rebootButton") + + # this mucks around a bit, but it's the weird case and it's + # better than adding a lot of complication to the normal + ics.cw.mainxml.get_widget("nextButton").hide() + if os.path.exists(os.environ.get("LIVE_BLOCK", "/dev/mapper/live-osimg-min")): + ics.cw.mainxml.get_widget("closeButton").show() + ics.cw.mainxml.get_widget("closeButton").grab_focus() + else: + self.rebootButton.show() + self.rebootButton.grab_focus() + ics.cw.mainxml.get_widget("rebootButton").show() + ics.cw.mainxml.get_widget("rebootButton").grab_focus() + + def getNext(self): + # XXX - copy any screenshots over + gui.copyScreenshots() + + # CongratulationWindow tag=NA + def getScreen (self, anaconda): + hbox = gtk.HBox (False, 5) + + pix = gui.readImageFromFile ("done.png") + if pix: + a = gtk.Alignment () + a.add (pix) + a.set (0.5, 0.5, 1.0, 1.0) + a.set_size_request(200, -1) + hbox.pack_start (a, False, False, 36) + + if isinstance(anaconda.platform, platform.S390): + txt = _("Congratulations, your %s installation is complete.\n\n") % (productName,) + + if not anaconda.canReIPL: + self.rebootButton.set_label(_("Shutdown")) + + txt = txt + _("Please shutdown to use the installed system.\n") + else: + txt = txt + _("Please reboot to use the installed system.\n") + + if not anaconda.reIPLMessage is None: + txt = txt + "\n" + anaconda.reIPLMessage + "\n\n" + + txt = txt + _("Note that updates may be available to ensure the proper " + "functioning of your system and installation of these " + "updates is recommended after the reboot.") + else: + txt = _("Congratulations, your %s installation is complete.\n\n" + "Please reboot to use the installed system. " + "Note that updates may be available to ensure the proper " + "functioning of your system and installation of these " + "updates is recommended after the reboot.") %(productName,) + + label = gui.WrappingLabel(txt) + label.set_size_request(250, -1) + + hbox.pack_start (label, True, True) + + gtk.gdk.beep() + return hbox + diff --git a/iw/datacombo.py b/iw/datacombo.py new file mode 100644 index 0000000..9b6a092 --- /dev/null +++ b/iw/datacombo.py @@ -0,0 +1,99 @@ +# +# datacombo.py: A class (derived from GtkComboBox) that provides +# the ability to store data and show text in a GtkComboBox easily +# +# Copyright (C) 2004 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +import gtk +import gobject + +class DataComboBox(gtk.ComboBox): + """A class derived from gtk.ComboBox to allow setting a user visible + string and (not-visible) data string""" + + def __init__(self, store = None): + if store is None: + self.store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + else: + self.store = store + gtk.ComboBox.__init__(self, self.store) + + cell = gtk.CellRendererText() + self.pack_start(cell, True) + self.set_attributes(cell, text = 0) + + def append(self, text, data): + iter = self.store.append(None) + self.store[iter] = (text, data) + + def get_active_value(self, col = 1): + row = self.get_active() + return self.get_stored_data(row, col) + + def get_stored_data(self, row, col = 1): + if row < 0: + return None + iter = self.store.get_iter(row) + val = self.store.get_value(iter, col) + return val + + def get_text(self, row): + return self.get_stored_data(row, col = 0) + + def set_active_text(self, t): + """set_active_text(string) -> Sets the active row to whereever t is. + returns True if set_active is run, False otherwise. + """ + retval = False + n = 0 + i = self.store.get_iter(n) + while i is not None: + if self.store.get_value(i, 0) == t: + self.set_active(n) + retval = True + break + i = self.store.iter_next(i) + n += 1 + + return retval + + def clear(self): + self.store.clear() + +if __name__ == "__main__": + def mycb(widget, *args): + idx = widget.get_active() + print(idx, widget.get_stored_data(idx), widget.get_text(idx)) + + win = gtk.Window() + + cb = DataComboBox() + cb.append("/dev/hda5", "hda5") + cb.append("/dev/hda6", "hda6") + cb.append("/dev/hda7", "hda7") + cb.append("/dev/hda8", "hda8") + cb.set_active_text("/dev/hda7") + + cb.connect('changed', mycb) + + win.add(cb) + win.show_all() + + gtk.main() + diff --git a/iw/examine_gui.py b/iw/examine_gui.py new file mode 100644 index 0000000..e40ebf8 --- /dev/null +++ b/iw/examine_gui.py @@ -0,0 +1,163 @@ +# +# examine_gui.py: dialog to allow selection of a RHL installation to upgrade +# +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# + +import gtk +import gui +from iw_gui import * +from pixmapRadioButtonGroup_gui import pixmapRadioButtonGroup +from constants import * +import upgrade +from flags import flags + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +UPGRADE_STR = "upgrade" +REINSTALL_STR = "reinstall" + +seenExamineScreen = False + +class UpgradeExamineWindow (InstallWindow): + + windowTitle = N_("Upgrade Examine") + + def getNext (self): + if self.doupgrade: + upgrade.setSteps(self.anaconda) + self.anaconda.upgrade = True + + rootfs = self.parts[self.upgradecombo.get_active()] + self.anaconda.upgradeRoot = [(rootfs[0], rootfs[1])] + self.anaconda.rootParts = self.parts + + self.anaconda.dispatch.skipStep("installtype", skip = 1) + self.anaconda.upgrade = True + else: + self.anaconda.dispatch.skipStep("installtype", skip = 0) + self.anaconda.upgrade = False + + return None + + def createUpgradeOption(self): + r = pixmapRadioButtonGroup() + r.addEntry(REINSTALL_STR, _("Fresh Installation"), + pixmap=gui.readImageFromFile("install.png"), + descr=_("Choose this option to install a fresh copy of %s " + "on your system. Existing software and data may " + "be overwritten depending on your configuration " + "choices.") % productName) + + r.addEntry(UPGRADE_STR, _("Upgrade an Existing Installation"), + pixmap=gui.readImageFromFile("upgrade.png"), + descr=_("Choose this option if you would like to upgrade " + "your existing %s system. This option will " + "preserve the existing data on your storage " + "device(s).") % productName) + + return r + + def upgradeOptionsSetSensitivity(self, state): + self.uplabel.set_sensitive(state) + self.upgradecombo.set_sensitive(state) + + def optionToggled(self, widget, name): + if name == UPGRADE_STR: + self.upgradeOptionsSetSensitivity(widget.get_active()) + self.doupgrade = widget.get_active() + + #UpgradeExamineWindow tag = "upgrade" + def getScreen (self, anaconda): + global seenExamineScreen + self.anaconda = anaconda + + if not seenExamineScreen: + # this is the first time we've entered this screen + self.doupgrade = self.anaconda.dispatch.stepInSkipList("installtype") + seenExamineScreen = True + else: + self.doupgrade = self.anaconda.upgrade + + # we might get here after storage reset that obsoleted + # root device objects we had found + if not self.anaconda.rootParts: + self.anaconda.rootParts = upgrade.findExistingRoots(self.anaconda, + flags.cmdline.has_key("upgradeany")) + upgrade.setUpgradeRoot(self.anaconda) + + self.parts = self.anaconda.rootParts + + vbox = gtk.VBox (False, 12) + vbox.set_border_width (8) + + introLabel = gtk.Label(_("At least one existing installation has been " + "detected on your system. What would you " + "like to do?")) + introLabel.set_alignment(0, 0) + vbox.pack_start(introLabel, False, False) + + r = self.createUpgradeOption() + self.r = r + + b = self.r.render() + if self.doupgrade: + self.r.setCurrent(UPGRADE_STR) + else: + self.r.setCurrent(REINSTALL_STR) + + self.r.setToggleCallback(self.optionToggled) + vbox.pack_start(b, False) + self.root = self.parts[0] + + uplabelstr = _("Which %s installation would you like to upgrade?") % productName + self.uplabel = gtk.Label(uplabelstr) + self.uplabel.set_use_markup(True) + self.uplabel.set_alignment(0, 0) + model = gtk.ListStore(str) + self.upgradecombo = gtk.ComboBox(model) + + cell = gtk.CellRendererText() + self.upgradecombo.pack_start(cell, True) + self.upgradecombo.set_attributes(cell, markup=0) + + for (dev, desc) in self.parts: + iter = model.append() + if (desc is None) or len(desc) < 1: + desc = _("Unknown Linux system") + model[iter][0] = "%s (installed on %s)" %(desc, dev.path) + + # hack hack hackity hack + alignment = gtk.Alignment(xalign=0.25) + alignmentBox = gtk.VBox(False, 6) + alignmentBox.pack_start(self.uplabel, False, False) + alignmentBox.pack_start(self.upgradecombo, False, False) + alignment.add(alignmentBox) + vbox.pack_start(alignment, True, True) + + # set default + idx = 0 + for p in self.parts: + if self.anaconda.upgradeRoot[0][0] == p[0]: + self.upgradecombo.set_active(idx) + break + idx = idx + 1 + + self.upgradeOptionsSetSensitivity(self.doupgrade) + + return vbox diff --git a/iw/filter_gui.py b/iw/filter_gui.py new file mode 100644 index 0000000..f0155d0 --- /dev/null +++ b/iw/filter_gui.py @@ -0,0 +1,762 @@ +# +# Storage filtering UI +# +# Copyright (C) 2009 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# + +import block +import collections +import gtk, gobject +import gtk.glade +import gui +import parted +import _ped +from DeviceSelector import * +from baseudev import * +from constants import * +from iw_gui import * +from storage.devices import devicePathToName +from storage.udev import * +from storage.devicelibs.mpath import * +from flags import flags +import storage.iscsi +import storage.fcoe +import storage.zfcp + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +DEVICE_COL = 4 +MODEL_COL = 5 +CAPACITY_COL = 6 +VENDOR_COL = 7 +INTERCONNECT_COL = 8 +SERIAL_COL = 9 +ID_COL = 10 +PATHS_COL = 11 +PORT_COL = 12 +TARGET_COL = 13 +LUN_COL = 14 + +# This is kind of a magic class that is used for populating the device store. +# It mostly acts like a list except for some funny behavior on adding/getting. +# You must add udev dicts to this list, but when you go to examine the list +# (by pulling items out, checking membership, etc.) you are comparing based +# on names. +# +# The only reason to have this is to prevent needing two lists in a variety +# of places throughout FilterWindow. +class NameCache(collections.MutableSequence): + def __init__(self, iterable): + self._lst = list(iterable) + + def __contains__(self, item): + return item["name"] in iter(self) + + def __delitem__(self, index): + return self._lst.__delitem__(index) + + def __getitem__(self, index): + return self._lst.__getitem__(index)["name"] + + def __iter__(self): + for d in self._lst: + yield d["name"] + + def __len__(self): + return len(self._lst) + + def __setitem__(self, index, value): + return self._lst.__setitem__(index, value) + + def insert(self, index, value): + return self._lst.insert(index, value) + +# These are global because they need to be accessible across all Callback +# objects as the same values, and from the AdvancedFilterWindow object to add +# and remove devices when populating scrolled windows. +totalDevices = 0 +selectedDevices = 0 +totalSize = 0 +selectedSize = 0 + +# These are global so they can be accessed from all Callback objects. The +# basic callback defines its membership as anything that doesn't pass the +# is* methods. +def isCCISS(info): + return udev_device_is_cciss(info) + +def isRAID(info): + if flags.dmraid: + return udev_device_is_biosraid(info) + + return False + +def isMultipath(info): + return udev_device_is_multipath_member(info) + +def isOther(info): + return udev_device_is_iscsi(info) or udev_device_is_fcoe(info) + +class Callbacks(object): + def __init__(self, xml): + self.model = None + self.xml = xml + + self.sizeLabel = self.xml.get_widget("sizeLabel") + self.sizeLabel.connect("realize", self.update) + + def addToUI(self, tuple): + pass + + def deviceToggled(self, set, device): + global selectedDevices, totalDevices + global selectedSize, totalSize + + if set: + selectedDevices += 1 + selectedSize += device["XXX_SIZE"] + else: + selectedDevices -= 1 + selectedSize -= device["XXX_SIZE"] + + self.update() + + def isMember(self, info): + return info and not isRAID(info) and not isCCISS(info) and \ + not isMultipath(info) and not isOther(info) + + def update(self, *args, **kwargs): + global selectedDevices, totalDevices + global selectedSize, totalSize + + self.sizeLabel.set_markup(_("%s device(s) (%s MB) selected out of %s device(s) (%s MB) total.") % (selectedDevices, selectedSize, totalDevices, totalSize)) + + def visible(self, model, iter, view): + # Most basic visibility function - does the model say this row + # should be visible? Subclasses can define their own more specific + # visibility function, though they should also take a look at this + # one to see what the model says. + return self.isMember(model.get_value(iter, OBJECT_COL)) and \ + model.get_value(iter, VISIBLE_COL) + +class RAIDCallbacks(Callbacks): + def isMember(self, info): + return info and (isRAID(info) or isCCISS(info)) + +class FilteredCallbacks(Callbacks): + def __init__(self, *args, **kwargs): + Callbacks.__init__(self, *args, **kwargs) + + # Are we even applying the filtering UI? This is False when + # whateverFilterBy is empty, True the rest of the time. + self.filtering = False + + def reset(self): + self.notebook.set_current_page(0) + self.filtering = False + + def set(self, num): + self.notebook.set_current_page(num) + self.filtering = True + +class MPathCallbacks(FilteredCallbacks): + def __init__(self, *args, **kwargs): + FilteredCallbacks.__init__(self, *args, **kwargs) + + self._vendors = [] + self._interconnects = [] + + self.filterBy = self.xml.get_widget("mpathFilterBy") + self.notebook = self.xml.get_widget("mpathNotebook") + + self.vendorEntry = self.xml.get_widget("mpathVendorEntry") + self.interconnectEntry = self.xml.get_widget("mpathInterconnectEntry") + self.IDEntry = self.xml.get_widget("mpathIDEntry") + + self.mpathFilterHBox = self.xml.get_widget("mpathFilterHBox") + self.mpathFilterHBox.connect("realize", self._populateUI) + + self.vendorEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.interconnectEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.IDEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + + def addToUI(self, tuple): + if not tuple[VENDOR_COL] in self._vendors: + self._vendors.append(tuple[VENDOR_COL]) + + if not tuple[INTERCONNECT_COL] in self._interconnects: + self._interconnects.append(tuple[INTERCONNECT_COL]) + + def isMember(self, info): + return info and isMultipath(info) + + def visible(self, model, iter, view): + if not FilteredCallbacks.visible(self, model, iter, view): + return False + + if self.filtering: + if self.notebook.get_current_page() == 0: + return self._visible_by_interconnect(model, iter, view) + elif self.notebook.get_current_page() == 1: + return self._visible_by_vendor(model, iter, view) + elif self.notebook.get_current_page() == 2: + return self._visible_by_wwid(model, iter, view) + + return True + + def _populateUI(self, widget): + cell = gtk.CellRendererText() + + self._vendors.sort() + self.vendorEntry.set_model(gtk.ListStore(gobject.TYPE_STRING)) + self.vendorEntry.pack_start(cell) + self.vendorEntry.add_attribute(cell, 'text', 0) + + for v in self._vendors: + self.vendorEntry.append_text(v) + + self.vendorEntry.show_all() + + self._interconnects.sort() + self.interconnectEntry.set_model(gtk.ListStore(gobject.TYPE_STRING)) + self.interconnectEntry.pack_start(cell) + self.interconnectEntry.add_attribute(cell, 'text', 0) + + for i in self._interconnects: + self.interconnectEntry.append_text(i) + + self.interconnectEntry.show_all() + + def _visible_by_vendor(self, model, iter, view): + entered = self.vendorEntry.get_child().get_text() + return model.get_value(iter, VENDOR_COL).find(entered) != -1 + + def _visible_by_interconnect(self, model, iter, view): + entered = self.interconnectEntry.get_child().get_text() + return model.get_value(iter, INTERCONNECT_COL).find(entered) != -1 + + def _visible_by_wwid(self, model, iter, view): + # FIXME: make this support globs, etc. + entered = self.IDEntry.get_text() + + return entered != "" and model.get_value(iter, ID_COL).find(entered) != -1 + +class OtherCallbacks(MPathCallbacks): + def __init__(self, *args, **kwargs): + FilteredCallbacks.__init__(self, *args, **kwargs) + + self._vendors = [] + self._interconnects = [] + + self.filterBy = self.xml.get_widget("otherFilterBy") + self.notebook = self.xml.get_widget("otherNotebook") + + self.vendorEntry = self.xml.get_widget("otherVendorEntry") + self.interconnectEntry = self.xml.get_widget("otherInterconnectEntry") + self.IDEntry = self.xml.get_widget("otherIDEntry") + + self.otherFilterHBox = self.xml.get_widget("otherFilterHBox") + self.otherFilterHBox.connect("realize", self._populateUI) + + self.vendorEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.interconnectEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.IDEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + + def isMember(self, info): + return info and isOther(info) + +class SearchCallbacks(FilteredCallbacks): + def __init__(self, *args, **kwargs): + FilteredCallbacks.__init__(self, *args, **kwargs) + + self._ports = [] + self._targets = [] + self._luns = [] + + self.filterBy = self.xml.get_widget("searchFilterBy") + self.notebook = self.xml.get_widget("searchNotebook") + + self.portEntry = self.xml.get_widget("searchPortEntry") + self.targetEntry = self.xml.get_widget("searchTargetEntry") + self.LUNEntry = self.xml.get_widget("searchLUNEntry") + self.IDEntry = self.xml.get_widget("searchIDEntry") + + # When these entries are changed, we need to redo the filtering. + # If we don't do filter-as-you-type, we'd need a Search/Clear button. + self.portEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.targetEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.LUNEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + self.IDEntry.connect("changed", lambda entry: self.model.get_model().refilter()) + + def isMember(self, info): + return True + + def visible(self, model, iter, view): + if not model.get_value(iter, VISIBLE_COL): + return False + + if self.filtering: + if self.notebook.get_current_page() == 0: + return self._visible_by_ptl(model, iter, view) + else: + return self._visible_by_wwid(model, iter, view) + + return True + + def _visible_by_ptl(self, model, iter, view): + rowPort = model.get_value(iter, PORT_COL) + rowTarget = model.get_value(iter, TARGET_COL) + rowLUN = model.get_value(iter, LUN_COL) + + enteredPort = self.portEntry.get_text() + enteredTarget = self.targetEntry.get_text() + enteredLUN = self.LUNEntry.get_text() + + return (not enteredPort or enteredPort and enteredPort == rowPort) and \ + (not enteredTarget or enteredTarget and enteredTarget == rowTarget) and \ + (not enteredLUN or enteredLUN and enteredLUN == rowLUN) + + def _visible_by_wwid(self, model, iter, view): + # FIXME: make this support globs, etc. + entered = self.IDEntry.get_text() + + return entered != "" and model.get_value(iter, ID_COL).find(entered) != -1 + +class NotebookPage(object): + def __init__(self, store, name, xml, cb): + # Every page needs a ScrolledWindow to display the results in. + self.scroll = xml.get_widget("%sScroll" % name) + + self.filteredModel = store.filter_new() + self.sortedModel = gtk.TreeModelSort(self.filteredModel) + self.treeView = gtk.TreeView(self.sortedModel) + + self.scroll.add(self.treeView) + + self.cb = cb + self.cb.model = self.sortedModel + + self.ds = DeviceSelector(store, self.sortedModel, self.treeView, + visible=VISIBLE_COL, active=ACTIVE_COL) + self.ds.createMenu() + self.ds.createSelectionCol(toggledCB=self.cb.deviceToggled, + membershipCB=self.cb.isMember) + + self.filteredModel.set_visible_func(self.cb.visible, self.treeView) + + # Not every NotebookPage will have a filter box - just those that do + # some sort of filtering (obviously). + self.filterBox = xml.get_widget("%sFilterHBox" % name) + + if self.filterBox: + self.filterBy = xml.get_widget("%sFilterBy" % name) + self.filterBy.connect("changed", self._filter_by_changed) + + # However if the page has a filter box, then it must also have a + # notebook with an easily discoverable name. + self.notebook = xml.get_widget("%sNotebook" % name) + + def _filter_by_changed(self, combo): + active = combo.get_active() + + if active == -1: + self.cb.reset() + else: + self.cb.set(active) + + self.filteredModel.refilter() + + def getNVisible(self): + retval = 0 + iter = self.filteredModel.get_iter_first() + + while iter: + if self.cb.visible(self.filteredModel, iter, self.treeView): + retval += 1 + + iter = self.filteredModel.iter_next(iter) + + return retval + +class FilterWindow(InstallWindow): + windowTitle = N_("Device Filter") + + def getNext(self): + # All pages use the same store, so we only need to use the first one. + # However, we do need to make sure all paths from multipath devices + # are in the list. + selected = set() + for dev in self.pages[0].ds.getSelected(): + selected.add(udev_device_get_name(dev[OBJECT_COL])) + + if len(selected) == 0: + self.anaconda.intf.messageWindow(_("Error"), + _("You must select at least one " + "drive to be used for installation."), + custom_icon="error") + raise gui.StayOnScreen + + self.anaconda.storage.exclusiveDisks = list(selected) + + def _add_advanced_clicked(self, button): + from advanced_storage import addDrive + + if not addDrive(self.anaconda): + return + + udev_trigger(subsystem="block", action="change") + new_disks = filter(udev_device_is_disk, udev_get_block_devices()) + (new_singlepaths, new_mpaths, new_partitions) = identifyMultipaths(new_disks) + (new_raids, new_nonraids) = self.split_list(lambda d: isRAID(d) and not isCCISS(d), + new_singlepaths) + + nonraids = filter(lambda d: d not in self._cachedDevices, new_nonraids) + mpaths = filter(lambda d: d not in self._cachedMPaths, new_mpaths) + raids = filter(lambda d: d not in self._cachedRaidDevices, new_raids) + + self.populate(nonraids, mpaths, raids) + + # Make sure to update the size label at the bottom. + self.pages[0].cb.update() + + self._cachedDevices.extend(nonraids) + self._cachedMPaths.extend(mpaths) + self._cachedRaidDevices.extend(raids) + + def _makeBasic(self): + np = NotebookPage(self.store, "basic", self.xml, Callbacks(self.xml)) + + np.ds.addColumn(_("Model"), MODEL_COL) + np.ds.addColumn(_("Capacity"), CAPACITY_COL) + np.ds.addColumn(_("Vendor"), VENDOR_COL) + np.ds.addColumn(_("Interconnect"), INTERCONNECT_COL) + np.ds.addColumn(_("Serial Number"), SERIAL_COL) + np.ds.addColumn(_("Device"), DEVICE_COL, displayed=False) + return np + + def _makeRAID(self): + np = NotebookPage(self.store, "raid", self.xml, RAIDCallbacks(self.xml)) + + np.ds.addColumn(_("Model"), MODEL_COL) + np.ds.addColumn(_("Capacity"), CAPACITY_COL) + np.ds.addColumn(_("Device"), DEVICE_COL, displayed=False) + return np + + def _makeMPath(self): + np = NotebookPage(self.store, "mpath", self.xml, MPathCallbacks(self.xml)) + + np.ds.addColumn(_("Identifier"), ID_COL) + np.ds.addColumn(_("Capacity"), CAPACITY_COL) + np.ds.addColumn(_("Vendor"), VENDOR_COL) + np.ds.addColumn(_("Interconnect"), INTERCONNECT_COL) + np.ds.addColumn(_("Paths"), PATHS_COL) + np.ds.addColumn(_("Device"), DEVICE_COL, displayed=False) + return np + + def _makeOther(self): + np = NotebookPage(self.store, "other", self.xml, OtherCallbacks(self.xml)) + + np.ds.addColumn(_("Identifier"), ID_COL) + np.ds.addColumn(_("Capacity"), CAPACITY_COL) + np.ds.addColumn(_("Vendor"), VENDOR_COL) + np.ds.addColumn(_("Interconnect"), INTERCONNECT_COL) + np.ds.addColumn(_("Serial Number"), SERIAL_COL, displayed=False) + np.ds.addColumn(_("Device"), DEVICE_COL, displayed=False) + return np + + def _makeSearch(self): + np = NotebookPage(self.store, "search", self.xml, SearchCallbacks(self.xml)) + + np.ds.addColumn(_("Model"), MODEL_COL) + np.ds.addColumn(_("Capacity"), CAPACITY_COL, displayed=False) + np.ds.addColumn(_("Vendor"), VENDOR_COL) + np.ds.addColumn(_("Interconnect"), INTERCONNECT_COL, displayed=False) + np.ds.addColumn(_("Serial Number"), SERIAL_COL, displayed=False) + np.ds.addColumn(_("Identifier"), ID_COL) + np.ds.addColumn(_("Port"), PORT_COL) + np.ds.addColumn(_("Target"), TARGET_COL) + np.ds.addColumn(_("LUN"), LUN_COL) + np.ds.addColumn(_("Device"), DEVICE_COL, displayed=False) + return np + + def _page_switched(self, notebook, useless, page_num): + # When the page is switched, we need to change what is visible so the + # Select All button only selects/deselected things on the current page. + # Unfortunately, the only way to do this is iterate over all rows and + # check for membership. + for line in self.store: + line[VISIBLE_COL] = self.pages[page_num].cb.isMember(line[OBJECT_COL]) + + def _show_buttons(self, *args, **kwargs): + if self.anaconda.simpleFilter: + self.buttonBox.hide() + self.buttonBox.set_no_show_all(True) + else: + self.buttonBox.show_all() + + def getScreen(self, anaconda): + (self.xml, self.vbox) = gui.getGladeWidget("filter.glade", "vbox") + self.buttonBox = self.xml.get_widget("buttonBox") + self.notebook = self.xml.get_widget("notebook") + self.addAdvanced = self.xml.get_widget("addAdvancedButton") + + self.buttonBox.connect("realize", self._show_buttons) + self.notebook.connect("switch-page", self._page_switched) + self.addAdvanced.connect("clicked", self._add_advanced_clicked) + + self.pages = [] + + self.anaconda = anaconda + + # One common store that all the views on all the notebook tabs share. + # Yes, this means a whole lot of columns that are going to be empty or + # unused much of the time. Oh well. + + # Object, + # visible, active (checked), immutable, + # device, model, capacity, vendor, interconnect, serial number, wwid + # paths, port, target, lun + self.store = gtk.TreeStore(gobject.TYPE_PYOBJECT, + gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN, + gobject.TYPE_BOOLEAN, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_STRING, + gobject.TYPE_STRING) + self.store.set_sort_column_id(MODEL_COL, gtk.SORT_ASCENDING) + + udev_trigger(subsystem="block", action="change") + # So that drives onlined by these show up in the filter UI + storage.iscsi.iscsi().startup(anaconda.intf) + storage.fcoe.fcoe().startup(anaconda.intf) + storage.zfcp.ZFCP().startup() + # Note we do NOT call dasd.startup() here, that does not online drives, + # but only checks if they need formatting. + disks = filter(udev_device_is_disk, udev_get_block_devices()) + (singlepaths, mpaths, partitions) = identifyMultipaths(disks) + + # The device list could be really long, so we really only want to + # iterate over it the bare minimum of times. Dividing this list up + # now means fewer elements to iterate over later. + (raids, nonraids) = self.split_list(lambda d: isRAID(d) and not isCCISS(d), + singlepaths) + + if anaconda.simpleFilter: + # In the typical use case, the user likely only has one drive and + # there's no point showing either the filtering UI or the + # cleardisks UI. Unfortunately, that means we need to duplicate + # some of the getNext method. + if len(singlepaths) == 1: + anaconda.storage.exclusiveDisks = [udev_device_get_name(singlepaths[0])] + return None + + self.pages = [self._makeBasic()] + self.notebook.set_show_border(False) + self.notebook.set_show_tabs(False) + else: + self.pages = [self._makeBasic(), self._makeRAID(), + self._makeMPath(), self._makeOther(), + self._makeSearch()] + + self.populate(nonraids, mpaths, raids) + + # If the "Add Advanced" button is ever clicked, we need to have a list + # of what devices previously existed so we know what's new. Then we + # can just add the new devices to the UI. This is going to be slow, + # but the user has to click a button to get to the slow part. + self._cachedDevices = NameCache(singlepaths) + self._cachedMPaths = NameCache(mpaths) + self._cachedRaidDevices = NameCache(raids) + + # Switch to the first notebook page that displays any devices. + i = 0 + for pg in self.pages: + if pg.getNVisible(): + self.notebook.set_current_page(i) + break + + i += 1 + + return self.vbox + + def populate(self, nonraids, mpaths, raids): + def _addTuple(tuple): + global totalDevices, totalSize + global selectedDevices, selectedSize + added = False + + self.store.append(None, tuple) + + for pg in self.pages: + if pg.cb.isMember(tuple[0]): + added = True + pg.cb.addToUI(tuple) + + # Only update the size label if this device was added to any pages. + # This prevents situations where we're only displaying the basic + # filter that has one disk, but there are several advanced disks + # in the store that cannot be seen. + if added: + totalDevices += 1 + totalSize += tuple[0]["XXX_SIZE"] + + if tuple[ACTIVE_COL]: + selectedDevices += 1 + selectedSize += tuple[0]["XXX_SIZE"] + + def _isProtected(info): + protectedNames = map(udev_resolve_devspec, self.anaconda.protected) + + sysfs_path = udev_device_get_sysfs_path(info) + for protected in protectedNames: + _p = "/sys/%s/%s" % (sysfs_path, protected) + if os.path.exists(os.path.normpath(_p)): + return True + + return False + + def _active(info): + if _isProtected(info): + return True + + name = udev_device_get_name(info) + + if self.anaconda.storage.exclusiveDisks and \ + name in self.anaconda.storage.exclusiveDisks: + return True + elif self.anaconda.storage.ignoredDisks and \ + name not in self.anaconda.storage.ignoredDisks: + return True + else: + return False + + for d in nonraids: + name = udev_device_get_name(d) + + # We aren't guaranteed to be able to get a device. In + # particular, built-in USB flash readers show up as devices but + # do not always have any media present, so parted won't be able + # to find a device. + try: + partedDevice = parted.Device(path="/dev/" + name) + except (_ped.IOException, _ped.DeviceException): + continue + d["XXX_SIZE"] = int(partedDevice.getSize()) + # cciss controllers, without any sets defined, show up as a 0 size + # blockdev, ignore these + if d["XXX_SIZE"] == 0: + continue + + # This isn't so great, but iSCSI and s390 devices have an ID_PATH + # that contains a lot of useful identifying info, so that should be + # displayed instead of a blank WWID. + if udev_device_is_iscsi(d) or udev_device_is_dasd(d) or udev_device_is_zfcp(d): + ident = udev_device_get_path(d) + else: + ident = udev_device_get_wwid(d) + + tuple = (d, True, _active(d), _isProtected(d), name, + partedDevice.model, str(d["XXX_SIZE"]) + " MB", + udev_device_get_vendor(d), udev_device_get_bus(d), + udev_device_get_serial(d), ident, "", "", "", "") + _addTuple(tuple) + + if raids and flags.dmraid: + used_raidmembers = [] + for rs in block.getRaidSets(): + # dmraid does everything in sectors + size = (rs.rs.sectors * 512) / (1024.0 * 1024.0) + fstype = "" + + # get_members also returns subsets with layered raids, we only + # want the devices + members = filter(lambda m: isinstance(m, block.device.RaidDev), + list(rs.get_members())) + members = map(lambda m: m.get_devpath(), members) + for d in raids: + if udev_device_get_name(d) in members: + fstype = udev_device_get_format(d) + sysfs_path = udev_device_get_sysfs_path(d) + break + + # Skip this set if none of its members are in the raids list + if not fstype: + continue + + used_raidmembers.extend(members) + + # biosraid devices don't really get udev data, at least not in a + # a way that's useful to the filtering UI. So we need to fake + # that data now so we have something to put into the store. + data = {"XXX_SIZE": size, "ID_FS_TYPE": fstype, + "DM_NAME": rs.name, "name": rs.name, + "sysfs_path": sysfs_path} + + model = "BIOS RAID set (%s)" % rs.rs.set_type + tuple = (data, True, _active(data), _isProtected(data), rs.name, + model, str(size) + " MB", "", "", "", "", "", "", "", "") + _addTuple(tuple) + + unused_raidmembers = [] + for d in raids: + if udev_device_get_name(d) not in used_raidmembers: + unused_raidmembers.append(udev_device_get_name(d)) + + self.anaconda.intf.unusedRaidMembersWarning(unused_raidmembers) + + for mpath in mpaths: + # We only need to grab information from the first device in the set. + name = udev_device_get_name(mpath[0]) + + try: + partedDevice = parted.Device(path="/dev/" + name) + except (_ped.IOException, _ped.DeviceException): + continue + mpath[0]["XXX_SIZE"] = int(partedDevice.getSize()) + model = partedDevice.model + + # However, we do need all the paths making up this multipath set. + paths = "\n".join(map(udev_device_get_name, mpath)) + + # We use a copy here, so as to not modify the original udev info + # dict as that would break NameCache matching + data = mpath[0].copy() + data["name"] = udev_device_get_multipath_name(mpath[0]) + tuple = (data, True, _active(data), _isProtected(data), + udev_device_get_multipath_name(mpath[0]), model, + str(mpath[0]["XXX_SIZE"]) + " MB", + udev_device_get_vendor(mpath[0]), + udev_device_get_bus(mpath[0]), + udev_device_get_serial(mpath[0]), + udev_device_get_wwid(mpath[0]), + paths, "", "", "") + _addTuple(tuple) + + def split_list(self, pred, lst): + pos = [] + neg = [] + + for ele in lst: + if pred(ele): + pos.append(ele) + else: + neg.append(ele) + + return (pos, neg) diff --git a/iw/filter_type.py b/iw/filter_type.py new file mode 100644 index 0000000..3c691bd --- /dev/null +++ b/iw/filter_type.py @@ -0,0 +1,80 @@ +# +# Copyright (C) 2009 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Chris Lumens +# + +import gtk +import gobject +import math + +from constants import * +import gui +from partition_ui_helpers_gui import * +from pixmapRadioButtonGroup_gui import pixmapRadioButtonGroup + +from iw_gui import * +from flags import flags +from storage.deviceaction import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class FilterTypeWindow(InstallWindow): + def __init__(self, ics): + InstallWindow.__init__(self, ics) + ics.setTitle("Filter Type") + ics.setNextEnabled(True) + + def getNext(self): + if self.buttonGroup.getCurrent() == "simple": + self.anaconda.simpleFilter = True + else: + self.anaconda.simpleFilter = False + + return None + + def getScreen(self, anaconda): + self.anaconda = anaconda + self.intf = anaconda.intf + + vbox = gtk.VBox() + label = gtk.Label(_("What type of devices will your installation " + "involve?")) + label.set_alignment(0.0, 0.0) + vbox.pack_start(label, expand=False, fill=False) + + self.buttonGroup = pixmapRadioButtonGroup() + self.buttonGroup.addEntry("simple", _("Basic Storage Devices"), + descr=_("Installs or upgrades to typical types " + "of storage devices. If you're not sure " + "which option is right for you, this is " + "probably it.")) + self.buttonGroup.addEntry("complex", _("Specialized Storage Devices"), + descr=_("Installs or upgrades to devices such as " + "Storage Area Networks (SANs) or mainframe " + "attached disks (DASD), usually in an " + "enterprise environment")) + + widget = self.buttonGroup.render() + vbox.pack_start(widget, expand=True, fill=True) + + if self.anaconda.simpleFilter == True: + self.buttonGroup.setCurrent("simple") + else: + self.buttonGroup.setCurrent("complex") + + return vbox diff --git a/iw/iw_gui.py b/iw/iw_gui.py new file mode 100644 index 0000000..997a239 --- /dev/null +++ b/iw/iw_gui.py @@ -0,0 +1,53 @@ +# +# iw_gui.py: install window base class +# +# Copyright (C) 2000, 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +from constants import * +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class InstallWindow: + + windowTitle = None + + def __init__ (self,ics): + self.ics = ics + + if self.windowTitle: + ics.setTitle (_(self.windowTitle)) + + def getNext (self): + return None + + def renderCallback(self): + return None + + def getPrev (self): + return None + + def getScreen (self): + pass + + def getICS (self): + return self.ics + + def fixUp (self): + pass + + def focus(self): + pass diff --git a/iw/kbd_gui.py b/iw/kbd_gui.py new file mode 100644 index 0000000..95fc106 --- /dev/null +++ b/iw/kbd_gui.py @@ -0,0 +1,39 @@ +# +# keyboard_gui.py: Shim around system-config-keyboard +# Brrrraaaaaiiiinnnns... +# +# Copyright (C) 2006, 2007 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +from iw_gui import * +import sys + +sys.path.append("/usr/share/system-config-keyboard") + +from keyboard_gui import childWindow as installKeyboardWindow + +class KeyboardWindow(InstallWindow, installKeyboardWindow): + def __init__(self, ics): + InstallWindow.__init__(self, ics) + installKeyboardWindow.__init__(self) + + def getNext(self): + installKeyboardWindow.getNext(self) + + def getScreen(self, anaconda): + default = anaconda.instLanguage.getDefaultKeyboard(anaconda.rootPath) + anaconda.keyboard.set(default) + return installKeyboardWindow.getScreen(self, default, anaconda.keyboard) diff --git a/iw/language_gui.py b/iw/language_gui.py new file mode 100644 index 0000000..952f8a8 --- /dev/null +++ b/iw/language_gui.py @@ -0,0 +1,134 @@ +# +# langauge_gui.py: installtime language selection. +# +# Copyright (C) 2000, 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# + +import gobject +import gtk +import gui +from iw_gui import * +from constants import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +from gui import setupTreeViewFixupIdleHandler, StayOnScreen + +class LanguageWindow (InstallWindow): + + windowTitle = N_("Language Selection") + + def __init__ (self, ics): + InstallWindow.__init__ (self, ics) + + def getNext (self): + anaconda = self.ics.getICW().anaconda + + (model, iter) = self.listView.get_selection().get_selected() + if not iter: + raise StayOnScreen + + choice = self.listStore.get_value(iter, 1) + self.lang = self.instLang.getLangByName(choice) + + if self.lang in self.instLang.getCurrentLangSearchList(): + return None + + self.instLang.instLang = self.lang + self.instLang.systemLang = self.lang + anaconda.timezone.setTimezoneInfo(anaconda.instLanguage.getDefaultTimeZone(anaconda.rootPath)) + self.ics.getICW().setLanguage() + + return None + + def listScroll(self, widget, *args): + # recenter the list + (model, iter) = self.listView.get_selection().get_selected() + if iter is None: + return + + path = self.listStore.get_path(iter) + col = self.listView.get_column(0) + self.listView.scroll_to_cell(path, col, True, 0.5, 0.5) + self.listView.set_cursor(path, col, False) + + # LanguageWindow tag="lang" + def getScreen (self, anaconda): + self.running = 0 + mainBox = gtk.VBox (False, 10) + + hbox = gtk.HBox(False, 5) + pix = gui.readImageFromFile ("config-language.png") + if pix: + a = gtk.Alignment () + a.add (pix) + hbox.pack_start (a, False) + + label = gtk.Label (_("What language would you like to use during the " + "installation process?")) + label.set_line_wrap (True) + label.set_size_request(350, -1) + hbox.pack_start(label, False) + + self.instLang = anaconda.instLanguage + + self.listStore = gtk.ListStore(gobject.TYPE_STRING, + gobject.TYPE_STRING, + gobject.TYPE_STRING) + + for locale in self.instLang.available(): + iter = self.listStore.append() + nick = self.instLang.getLangByName(locale) + lang = '%s (%s)' % ( + _(locale), "%s" % (nick.split('.')[0],), + self.instLang.getNativeLangName(locale)) + self.listStore.set_value(iter, 0, lang) + self.listStore.set_value(iter, 1, locale) + self.listStore.set_value(iter, 2, _(locale)) + + self.listStore.set_sort_column_id(2, gtk.SORT_ASCENDING) + + self.listView = gtk.TreeView(self.listStore) + col = gtk.TreeViewColumn(None, gtk.CellRendererText(), markup=0) + self.listView.append_column(col) + self.listView.set_property("headers-visible", False) + + current = self.instLang.getLangName(self.instLang.instLang) + iter = self.listStore.get_iter_first() + while iter: + if self.listStore.get_value(iter, 1) == current: + selection = self.listView.get_selection() + selection.unselect_all() + selection.select_iter(iter) + break + iter = self.listStore.iter_next(iter) + self.listView.connect("size-allocate", self.listScroll) + + sw = gtk.ScrolledWindow () + sw.set_border_width (5) + sw.set_shadow_type(gtk.SHADOW_IN) + sw.set_policy (gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + sw.add (self.listView) + + setupTreeViewFixupIdleHandler(self.listView, self.listStore) + + mainBox.pack_start (hbox, False, False, 10) + mainBox.pack_start (sw, True, True) + + self.running = 1 + + return mainBox diff --git a/iw/lvm_dialog_gui.py b/iw/lvm_dialog_gui.py new file mode 100644 index 0000000..0a9785f --- /dev/null +++ b/iw/lvm_dialog_gui.py @@ -0,0 +1,1464 @@ +# +# lvm_dialog_gui.py: dialog for editing a volume group request +# +# Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Michael Fulbright +# + +import copy + +import gobject +import gtk +import datacombo + +import gui +from partition_ui_helpers_gui import * +from constants import * +from storage.devices import * +from storage.deviceaction import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) +P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z) + +import logging +log = logging.getLogger("anaconda") + +class VolumeGroupEditor: + + def getTempVG(self): + pvs = [copy.deepcopy(pv) for pv in self.pvs] + vg = LVMVolumeGroupDevice('tmp-%s' % self.vg.name, + parents=pvs, peSize=self.peSize) + for lv in self.lvs.values(): + _l = LVMLogicalVolumeDevice(lv['name'], vg, format=lv['format'], + size=lv['size'], exists=lv['exists'], + stripes=lv['stripes'], + logSize=lv['logSize'], + snapshotSpace=lv['snapshotSpace']) + _l.originalFormat = lv['originalFormat'] + + return vg + + def numAvailableLVSlots(self): + return max(0, lvm.MAX_LV_SLOTS - len(self.lvs)) + + def computeSpaceValues(self): + vg = self.getTempVG() + vgsize = vg.size + vgfree = vg.freeSpace + vgused = vgsize - vgfree + return (vgsize, vgused, vgfree) + + def getPVWastedRatio(self, newpe): + """ given a new pe value, return percentage of smallest PV wasted + + newpe - (int) new value of PE, in KB + """ + pvlist = self.getSelectedPhysicalVolumes() + + waste = 0.0 + for pv in pvlist: + waste = max(waste, (long(pv.size*1024) % newpe)/(pv.size*1024.0)) + + return waste + + def getSmallestPVSize(self): + """ finds the smallest PV and returns its size in MB + """ + first = 1 + pvlist = self.getSelectedPhysicalVolumes() + for pv in pvlist: + try: + pesize = int(self.peCombo.get_active_value()) / 1024.0 + except: + pesize = self.vg.peSize + + # FIXME: move this logic into a property of LVMVolumeGroupDevice + pvsize = max(0, lvm.clampSize(pv.size, pesize) - pesize) + if first: + minpvsize = pvsize + first = 0 + else: + minpvsize = min(pvsize, minpvsize) + + return minpvsize + + + def reclampLV(self, newpe): + """ given a new pe value, set logical volume sizes accordingly + + newpe - (int) new value of PE, in MB + """ + + pvlist = self.getSelectedPhysicalVolumes() + availSpaceMB = self.computeVGSize(pvlist, newpe) + + # see if total space is enough + used = 0 + resize = False + for lv in self.lvs.values(): + # total space required by an lv may be greater than lv size. + vg_space = lv['size'] * lv['stripes'] + lv['logSize'] \ + + lv['snapshotSpace'] + clamped_vg_space = lvm.clampSize(vg_space, newpe, roundup=1) + used += clamped_vg_space + if lv['size'] != lvm.clampSize(lv['size'], newpe, roundup=1): + resize = True + + if used > availSpaceMB: + self.intf.messageWindow(_("Not enough space"), + _("The physical extent size cannot be " + "changed because otherwise the space " + "required by the currently defined " + "logical volumes will be increased " + "to more than the available space."), + custom_icon="error") + return 0 + + if resize: + rc = self.intf.messageWindow(_("Confirm Physical Extent Change"), + _("This change in the value of the " + "physical extent will require the " + "sizes of the current logical " + "volume requests to be rounded " + "up in size to an integer multiple " + "of the " + "physical extent.\n\nThis change " + "will take effect immediately."), + type="custom", custom_icon="question", + custom_buttons=["gtk-cancel", _("C_ontinue")]) + if not rc: + return 0 + + for lv in self.lvs.values(): + lv['size'] = lvm.clampSize(lv['size'], newpe, roundup=1) + + return 1 + + def peChangeCB(self, widget, *args): + """ handle changes in the Physical Extent option menu + + widget - menu item which was activated + peOption - the Option menu containing the items. The data value for + "lastval" is the previous PE value. + """ + + curval = int(widget.get_active_value()) + # this one's in MB so we can stop with all this dividing by 1024 + curpe = curval / 1024.0 + lastval = widget.get_data("lastpe") + lastidx = widget.get_data("lastidx") + + # see if PE is too large compared to smallest PV + maxpvsize = self.getSmallestPVSize() + if curpe > maxpvsize: + self.intf.messageWindow(_("Not enough space"), + _("The physical extent size cannot be " + "changed because the value selected " + "(%(curpe)10.2f MB) is larger than the " + "smallest physical volume " + "(%(maxpvsize)10.2f MB) in the volume " + "group.") % {'curpe': curpe, + 'maxpvsize': maxpvsize}, + custom_icon="error") + widget.set_active(lastidx) + return 0 + + # see if new PE will make any PV useless due to overhead + if lvm.clampSize(maxpvsize, curpe) < curpe: + self.intf.messageWindow(_("Not enough space"), + _("The physical extent size cannot be " + "changed because the value selected " + "(%(curpe)10.2f MB) is too large " + "compared to the size of the " + "smallest physical volume " + "(%(maxpvsize)10.2f MB) in the " + "volume group.") + % {'curpe': curpe, 'maxpvsize': maxpvsize}, + custom_icon="error") + widget.set_active(lastidx) + return 0 + + + if self.getPVWastedRatio(curpe) > 0.10: + rc = self.intf.messageWindow(_("Too small"), + _("This change in the value of the " + "physical extent will waste " + "substantial space on one or more " + "of the physical volumes in the " + "volume group."), + type="custom", custom_icon="error", + custom_buttons=["gtk-cancel", _("C_ontinue")]) + if not rc: + widget.set_active(lastidx) + return 0 + + # now see if we need to fixup effect PV and LV sizes based on PE + if curval > lastval: + rc = self.reclampLV(curpe) + if not rc: + widget.set_active(lastidx) + return 0 + else: + self.updateLogVolStore() + else: + maxlv = lvm.getMaxLVSize() + for lv in self.lvs.values(): + if lv['size'] > maxlv: + self.intf.messageWindow(_("Not enough space"), + _("The physical extent size " + "cannot be changed because the " + "resulting maximum logical " + "volume size (%10.2f MB) is " + "smaller " + "than one or more of the " + "currently defined logical " + "volumes.") % (maxlv,), + custom_icon="error") + widget.set_active(lastidx) + return 0 + + widget.set_data("lastpe", curval) + widget.set_data("lastidx", widget.get_active()) + + # now actually set the VG's extent size + self.peSize = curpe + self.updateAllowedLvmPartitionsList() + self.updateVGSpaceLabels() + + def prettyFormatPESize(self, val): + """ Pretty print for PE size in KB """ + if val < 1024: + return "%s KB" % (val,) + elif val < 1024*1024: + return "%s MB" % (val/1024,) + else: + return "%s GB" % (val/1024/1024,) + + def createPEOptionMenu(self, default=4096): + peCombo = datacombo.DataComboBox() + + actualPE = [] + for curpe in lvm.getPossiblePhysicalExtents(floor=1024): + # don't show PE over 128M, unless it's the default + if curpe > 131072 and curpe != default: + continue + + actualPE.append(curpe) + val = self.prettyFormatPESize(curpe) + + peCombo.append(val, curpe) + + # First try to set the combo's active value to the default we're + # passed. If that doesn't work, just set it to the first one to + # prevent TypeErrors everywhere. + try: + peCombo.set_active(actualPE.index(default)) + except ValueError: + peCombo.set_active(0) + + peCombo.set_data("lastidx", peCombo.get_active()) + peCombo.connect("changed", self.peChangeCB) + peCombo.set_data("lastpe", default) + + return peCombo + + def clickCB(self, row, data): + model = self.lvmlist.get_model() + pvlist = self.getSelectedPhysicalVolumes() + + # get the selected row + iter = model.get_iter((string.atoi(data),)) + + # we invert val because we get called before checklist + # changes the toggle state + val = not model.get_value(iter, 0) + partname = model.get_value(iter, 1) + pv = self.storage.devicetree.getDeviceByName(partname) + if val: + self.pvs.append(pv) + else: + self.pvs.remove(pv) + try: + vg = self.getTempVG() + except DeviceError as e: + self.intf.messageWindow(_("Not enough space"), + _("You cannot remove this physical " + "volume because otherwise the " + "volume group will be too small to " + "hold the currently defined logical " + "volumes."), custom_icon="error") + self.pvs.append(pv) + return False + + self.updateVGSpaceLabels() + return True + + def createAllowedLvmPartitionsList(self): + store = gtk.TreeStore(gobject.TYPE_BOOLEAN, + gobject.TYPE_STRING, + gobject.TYPE_STRING) + partlist = WideCheckList(2, store, self.clickCB) + + sw = gtk.ScrolledWindow() + sw.add(partlist) + sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + sw.set_shadow_type(gtk.SHADOW_IN) + + origpvs = self.pvs[:] + for device in self.availlvmparts: + # clip size to current PE + pesize = int(self.peCombo.get_active_value()) / 1024.0 + size = lvm.clampSize(device.size, pesize) + size_string = "%10.2f MB" % size + include = True + selected = False + + # now see if the pv is in use either by a vg in the tree or by + # the vg we are editing now + if device in origpvs: + selected = True + include = True + else: + for vg in self.storage.vgs: + if vg.name == self.vg.name: + continue + + if device in vg.pvs: + include = False + break + + if include and not origpvs: + selected = True + + if include: + partlist.append_row((device.name, size_string), selected) + if selected and device not in self.pvs: + self.pvs.append(device) + + return (partlist, sw) + + def updateAllowedLvmPartitionsList(self): + """ update sizes in pv list """ + row = 0 + for part in self.availlvmparts: + size = part.size + + # clip size to current PE + pesize = int(self.peCombo.get_active_value()) / 1024.0 + size = lvm.clampSize(size, pesize) + partsize = "%10.2f MB" % size + + iter = self.lvmlist.store.get_iter((int(row),)) + self.lvmlist.store.set_value(iter, 2, partsize) + row = row + 1 + + def getCurrentLogicalVolume(self): + selection = self.logvollist.get_selection() + (model, iter) = selection.get_selected() + return iter + + def editLogicalVolume(self, lv, isNew = 0): + # Mixing logical code and gtk code is confusing to me. So I am going + # to do the logic first and then create all the gtk crap! + # + # lv -- whatever self.logvolstore.get_value returns + + #newfstypelabel = None # File system type label & combo + #newfstypeCombo = None + newfslabellabel = None # File system Label label & combo + newfslableCombo = None + #lvnamelabel = None # Logical Volume name label & entry + #lvnameentry = None + #lvsizelabel = None # Logical Volume size label & entry + #lvsizeentry = None + maxsizelabel = None # Maximum size label + #mountCombo = None # Mount Point Combo Box + #tstr = None # String that appears on top of the window + tempvg = self.getTempVG() # copy of self.vg + templv = None + cpefsos = None # lambda function that represents + # createPreExistFSOptionSection + + # Define the string + if isNew: + tstr = _("Make Logical Volume") + else: + tstr = _("Edit Logical Volume: %s") % lv['name'] + + # Create the mountCombo. This is the box where the mountpoint will + # appear. Note that if the format is swap or Raiddevice, the mount + # point is none-sense. + templuks = None + templv = self.getLVByName(lv['name'], vg=tempvg) + usedev = templv + if templv.format.type == "luks": + templuks = LUKSDevice("luks-%s" % lv['name'], + parents=[templv], + format=self.luks[lv['name']], + exists=templv.format.exists) + usedev = templuks + + if lv['format'].type == "luks": + format = self.luks[lv['name']] + else: + format = lv['format'] + + if lv['exists']: + _origlv = self.getLVByName(lv['name']) + originalFormat = _origlv.originalFormat + if originalFormat.type == "luks": + try: + _origluks = self.storage.devicetree.getChildren(_origlv)[0] + except IndexError: + pass + else: + originalFormat = _origluks.originalFormat + + mountCombo = createMountPointCombo(usedev, excludeMountPoints=["/boot"]) + + + # Stuff appears differently when the lv exists and when the lv is new. + # here we make that difference. Except for newfslabelCombo, and + # maxsizelabel all vars will have a value != None. + if not lv['exists']: + # File system type lables & combo + newfstypelabel = createAlignedLabel(_("_File System Type:")) + newfstypeCombo = createFSTypeMenu(format, fstypechangeCB,mountCombo, + ignorefs = ["mdmember", "lvmpv", "efi", "prepboot", "appleboot"]) + newfstypelabel.set_mnemonic_widget(newfstypeCombo) + + # Logical Volume name label & entry + lvnamelabel = createAlignedLabel(_("_Logical Volume Name:")) + lvnameentry = gtk.Entry(32) + lvnamelabel.set_mnemonic_widget(lvnameentry) + if lv['name']: + lvnameentry.set_text(lv['name']) + else: + lvnameentry.set_text(self.storage.createSuggestedLVName(self.getTempVG())) + + # Logical Volume size label & entry + lvsizelabel = createAlignedLabel(_("_Size (MB):")) + lvsizeentry = gtk.Entry(16) + lvsizelabel.set_mnemonic_widget(lvsizeentry) + lvsizeentry.set_text("%Ld" % lv['size']) + + # Maximum size label + max_grow = tempvg.freeSpace / lv['stripes'] + maxsizelabel = createAlignedLabel(_("(Max size is %s MB)") % + min(lvm.getMaxLVSize(), + lv['size'] + max_grow)) + + # Encrypt Check Box button. + self.lukscb = gtk.CheckButton(_("_Encrypt")) + self.lukscb.set_data("formatstate", 1) + if lv['format'].type == "luks": + self.lukscb.set_active(1) + else: + self.lukscb.set_active(0) + + else: + # File system type lable & combo + newfstypelabel = createAlignedLabel(_("Original File System Type:")) + newfstypeCombo = gtk.Label(originalFormat.name) + + # File system label label & combo + if getattr(originalFormat, "label", None): + newfslabellabel = createAlignedLabel(_("Original File System " + "Label:")) + newfslableCombo = gtk.Label(originalFormat.label) + + # Logical Volume name label & entry + lvnamelabel = createAlignedLabel(_("Logical Volume Name:")) + lvnameentry = gtk.Label(lv['name']) + + # Logical Volume size label & entry + lvsizelabel = createAlignedLabel(_("Size (MB):")) + lvsizeentry = gtk.Label(str(lv['size'])) + + # Create the File System Format Section + self.fsoptionsDict = {} + # We are going to lambda the createPreExistFSOptionSection so we can call + # it latter with two arguments, row and mainttable. + cpefsos = lambda table, row: createPreExistFSOptionSection(templv, + maintable, row, mountCombo, self.storage, + ignorefs = ["software RAID", "physical volume (LVM)", "vfat"], + luksdev=templuks) + + + # Here is where the gtk crap begins. + dialog = gtk.Dialog(tstr, self.parent) + gui.addFrame(dialog) + dialog.add_button('gtk-cancel', 2) + dialog.add_button('gtk-ok', 1) + dialog.set_position(gtk.WIN_POS_CENTER) + + # Initialize main table + maintable = gtk.Table() + maintable.set_row_spacings(5) + maintable.set_col_spacings(5) + row = 0 + + # Add the mountCombo that we previously created + lbl = createAlignedLabel(_("_Mount Point:")) + maintable.attach(lbl, 0, 1, row,row+1) + lbl.set_mnemonic_widget(mountCombo) + maintable.attach(mountCombo, 1, 2, row, row + 1) + row += 1 + + # Add the filesystem combo labels. + maintable.attach(newfstypelabel, 0, 1, row, row + 1) + maintable.attach(newfstypeCombo, 1, 2, row, row + 1) + row += 1 + + # If there is a File system lable, add it. + if newfslabellabel is not None and newfslableCombo is not None: + maintable.attach(newfslabellabel, 0, 1, row, row + 1) + maintable.attach(newfslableCombo, 1, 2, row, row + 1) + row += 1 + + # Add the logical volume name + maintable.attach(lvnamelabel, 0, 1, row, row + 1) + maintable.attach(lvnameentry, 1, 2, row, row + 1) + row += 1 + + # Add the logical volume size + maintable.attach(lvsizelabel, 0, 1, row, row + 1) + maintable.attach(lvsizeentry, 1, 2, row, row + 1) + row += 1 + + # If there is a maxsize, add it. + if maxsizelabel is not None: + maintable.attach(maxsizelabel, 1, 2, row, row + 1) + + # If we have the createPreExistFSOptionSection lamda function it means + # that we have a preexisting lv and we must call the lambda function + # to create the Pre exsisting FS option section. + if cpefsos is not None: + (row, self.fsoptionsDict) = cpefsos(maintable, row) + + # checkbutton for encryption using dm-crypt/LUKS + # FIXME: Here we could not decouple the gtk stuff from the logic because + # of the createPreExistFSOptionSection function call. We must + # decouple that function. + if not lv['exists']: + maintable.attach(self.lukscb, 0, 2, row, row + 1) + row = row + 1 + else: + self.lukscb = self.fsoptionsDict.get("lukscb") + + dialog.vbox.pack_start(maintable) + dialog.show_all() + # Here ends the gtk crap + + while 1: + rc = dialog.run() + if rc in [2, gtk.RESPONSE_DELETE_EVENT]: + if isNew: + del self.lvs[lv['name']] + dialog.destroy() + return + + actions = [] + targetSize = None + migrate = None + format = None + newluks = None + + if templv.format.type == "luks": + format = self.luks[lv['name']] + else: + format = templv.format + + if not templv.exists: + fmt_class = newfstypeCombo.get_active_value() + else: + # existing lv + fmt_class = self.fsoptionsDict["fstypeCombo"].get_active_value() + + mountpoint = mountCombo.get_children()[0].get_text().strip() + if mountpoint == _(""): + mountpoint = "" + + # validate logical volume name + lvname = lvnameentry.get_text().strip() + if not templv.exists: + err = sanityCheckLogicalVolumeName(lvname) + if err: + self.intf.messageWindow(_("Illegal Logical Volume Name"), + err, custom_icon="error") + continue + + # check that the name is not already in use + used = 0 + for _lv in self.lvs.values(): + if _lv == lv: + continue + + if _lv['name'] == lvname: + used = 1 + break + + if used: + self.intf.messageWindow(_("Illegal logical volume name"), + _("The logical volume name \"%s\" is " + "already in use. Please pick " + "another.") % (lvname,), custom_icon="error") + continue + + # test mount point + # check in pending logical volume requests + # these may not have been put in master list of requests + # yet if we have not hit 'OK' for the volume group creation + if fmt_class().mountable and mountpoint: + used = False + curmntpt = getattr(format, "mountpoint", None) + + for _lv in self.lvs.values(): + if _lv['format'].type == "luks": + _format = self.luks[_lv['name']] + else: + _format = _lv['format'] + + if not _format.mountable or curmntpt and \ + _format.mountpoint == curmntpt: + continue + + if _format.mountpoint == mountpoint: + used = True + break + + if not used: + # we checked this VG's LVs above; now check the rest of + # the devices in the tree + mountdevs = self.lvs.values() + full_name = "%s-%s" % (self.vg.name, lv['name']) + for (mp,d) in self.storage.mountpoints.iteritems(): + if (d.type != "lvmlv" or d.vg.id != self.vg.id) and \ + mp == mountpoint and \ + not (isinstance(d, LUKSDevice) and + full_name in [dev.name for dev in d.parents]): + used = True + break + + if used: + self.intf.messageWindow(_("Mount point in use"), + _("The mount point \"%s\" is in " + "use. Please pick another.") % + (mountpoint,), + custom_icon="error") + continue + + # check that size specification is numeric and positive + if not templv.exists: + badsize = 0 + try: + size = long(lvsizeentry.get_text()) + except: + badsize = 1 + + if badsize or size <= 0: + self.intf.messageWindow(_("Illegal size"), + _("The requested size as entered is " + "not a valid number greater " + "than 0."), custom_icon="error") + continue + else: + size = templv.size + + # check that size specification is within limits + pesize = int(self.peCombo.get_active_value()) / 1024.0 + size = lvm.clampSize(size, pesize, roundup=True) + maxlv = lvm.getMaxLVSize() + if size > maxlv: + self.intf.messageWindow(_("Not enough space"), + _("The current requested size " + "(%(size)10.2f MB) is larger than " + "the maximum logical volume size " + "(%(maxlv)10.2f MB). " + "To increase this limit you can " + "create more Physical Volumes from " + "unpartitioned disk space and " + "add them to this Volume Group.") + % {'size': size, 'maxlv': maxlv}, + custom_icon="error") + continue + + # Ok -- now we've done all the checks to validate the + # user-specified parameters. Time to set up the device... + origname = templv.lvname + if not templv.exists: + templv._name = lvname + try: + templv.size = size + except ValueError: + self.intf.messageWindow(_("Not enough space"), + _("The logical volumes you have " + "configured require %(size)d MB," + " but the volume group only has " + "%(tempvgsize)d MB. Please " + "either make the volume group " + "larger or make the logical " + "volume(s) smaller.") + % {'size': size, + 'tempvgsize': tempvg.size}, + custom_icon="error") + continue + + format = fmt_class(mountpoint=mountpoint) + if self.lukscb and self.lukscb.get_active(): + if templv.format.type != "luks": + newluks = format + format = getFormat("luks", + passphrase=self.storage.encryptionPassphrase) + else: + newluks = format + format = templv.format + + templv.format = format + else: + # existing lv + if self.fsoptionsDict.has_key("formatcb") and \ + self.fsoptionsDict["formatcb"].get_active(): + format = fmt_class(mountpoint=mountpoint) + if self.lukscb and self.lukscb.get_active() and \ + templv.format.type != "luks": + newluks = format + format = getFormat("luks", + device=templv.path, + passphrase=self.storage.encryptionPassphrase) + elif self.lukscb and self.lukscb.get_active(): + newluks = format + format = templv.format + + templv.format = format + elif self.fsoptionsDict.has_key("formatcb") and \ + not self.fsoptionsDict["formatcb"].get_active(): + templv.format = templv.originalFormat + format = templv.format + + if format.mountable: + format.mountpoint = mountpoint + + if self.fsoptionsDict.has_key("migratecb") and \ + self.fsoptionsDict["migratecb"].get_active(): + format.migrate = True + + if self.fsoptionsDict.has_key("resizecb") and self.fsoptionsDict["resizecb"].get_active(): + targetSize = self.fsoptionsDict["resizesb"].get_value_as_int() + templv.targetSize = targetSize + + if format.exists and format.mountable and format.mountpoint: + tempdev = StorageDevice('tmp', format=format) + if self.storage.formatByDefault(tempdev) and \ + not queryNoFormatPreExisting(self.intf): + continue + + # everything ok + break + + if templv.format.type == "luks": + if newluks: + self.luks[templv.lvname] = newluks + + if self.luks.has_key(origname) and origname != templv.lvname: + self.luks[templv.lvname] = self.luks[origname] + del self.luks[templv.lvname] + elif templv.format.type != "luks" and self.luks.has_key(origname): + del self.luks[origname] + + self.lvs[templv.lvname] = {'name': templv.lvname, + 'size': templv.size, + 'format': templv.format, + 'originalFormat': templv.originalFormat, + 'stripes': templv.stripes, + 'logSize': templv.logSize, + 'snapshotSpace': templv.snapshotSpace, + 'exists': templv.exists} + if self.lvs.has_key(origname) and origname != templv.lvname: + del self.lvs[origname] + + self.updateLogVolStore() + self.updateVGSpaceLabels() + dialog.destroy() + return + + def editCurrentLogicalVolume(self): + iter = self.getCurrentLogicalVolume() + + if iter is None: + return + + logvolname = self.logvolstore.get_value(iter, 0) + lv = self.lvs[logvolname] + self.editLogicalVolume(lv) + + def addLogicalVolumeCB(self, widget): + if self.numAvailableLVSlots() < 1: + self.intf.messageWindow(_("No free slots"), + P_("You cannot create more than %d logical volume " + "per volume group.", + "You cannot create more than %d logical volumes " + "per volume group.", lvm.MAX_LV_SLOTS) + % (lvm.MAX_LV_SLOTS,), + custom_icon="error") + return + + (total, used, free) = self.computeSpaceValues() + if free <= 0: + self.intf.messageWindow(_("No free space"), + _("There is no room left in the " + "volume group to create new logical " + "volumes. " + "To add a logical volume you must " + "reduce the size of one or more of " + "the currently existing " + "logical volumes"), custom_icon="error") + return + + tempvg = self.getTempVG() + name = self.storage.createSuggestedLVName(tempvg) + format = getFormat(self.storage.defaultFSType) + self.lvs[name] = {'name': name, + 'size': free, + 'format': format, + 'originalFormat': format, + 'stripes': 1, + 'logSize': 0, + 'snapshotSpace': 0, + 'exists': False} + self.editLogicalVolume(self.lvs[name], isNew = 1) + return + + def editLogicalVolumeCB(self, widget): + self.editCurrentLogicalVolume() + return + + def delLogicalVolumeCB(self, widget): + iter = self.getCurrentLogicalVolume() + if iter is None: + return + + logvolname = self.logvolstore.get_value(iter, 0) + if logvolname is None: + return + + rc = self.intf.messageWindow(_("Confirm Delete"), + _("Are you sure you want to delete the " + "logical volume \"%s\"?") % (logvolname,), + type = "custom", custom_buttons=["gtk-cancel", _("_Delete")], custom_icon="warning") + if not rc: + return + + del self.lvs[logvolname] + self.logvolstore.remove(iter) + self.updateVGSpaceLabels() + return + + def logvolActivateCb(self, view, path, col): + self.editCurrentLogicalVolume() + + def getSelectedPhysicalVolumes(self): + model = self.lvmlist.get_model() + pv = [] + next = model.get_iter_first() + currow = 0 + while next is not None: + iter = next + val = model.get_value(iter, 0) + partname = model.get_value(iter, 1) + + if val: + dev = self.storage.devicetree.getDeviceByName(partname) + pv.append(dev) + + next = model.iter_next(iter) + currow = currow + 1 + + return pv + + def computeVGSize(self, pvlist, curpe): + availSpaceMB = 0L + for pv in pvlist: + # have to clamp pvsize to multiple of PE + # XXX why the subtraction? fudging metadata? + pvsize = lvm.clampSize(pv.size, curpe) - (curpe/1024) + + availSpaceMB = availSpaceMB + pvsize + + log.info("computeVGSize: vgsize is %s" % (availSpaceMB,)) + return availSpaceMB + + def updateLogVolStore(self): + self.logvolstore.clear() + for lv in self.lvs.values(): + iter = self.logvolstore.append() + if lv['format'].type == "luks": + format = self.luks[lv['name']] + else: + format = lv['format'] + + mntpt = getattr(format, "mountpoint", "") + if lv['name']: + self.logvolstore.set_value(iter, 0, lv['name']) + + if format.type and format.mountable: + self.logvolstore.set_value(iter, 1, mntpt) + else: + self.logvolstore.set_value(iter, 1, "N/A") + + self.logvolstore.set_value(iter, 2, "%Ld" % lv['size']) + + def updateVGSpaceLabels(self): + (total, used, free) = self.computeSpaceValues() + + self.totalSpaceLabel.set_text("%10.2f MB" % (total,)) + self.usedSpaceLabel.set_text("%10.2f MB" % (used,)) + + if total > 0: + usedpercent = (100.0*used)/total + else: + usedpercent = 0.0 + + self.usedPercentLabel.set_text("(%4.1f %%)" % (usedpercent,)) + + self.freeSpaceLabel.set_text("%10.2f MB" % (free,)) + if total > 0: + freepercent = (100.0*free)/total + else: + freepercent = 0.0 + + self.freePercentLabel.set_text("(%4.1f %%)" % (freepercent,)) + +# +# run the VG editor we created +# + def run(self): + if self.dialog is None: + return [] + + while 1: + rc = self.dialog.run() + + if rc in [2, gtk.RESPONSE_DELETE_EVENT]: + self.destroy() + return [] + + pvlist = self.getSelectedPhysicalVolumes() + + # check volume name + volname = self.volnameEntry.get_text().strip() + err = sanityCheckVolumeGroupName(volname) + if err: + self.intf.messageWindow(_("Invalid Volume Group Name"), err, + custom_icon="error") + continue + + origvname = self.vg.name + + if origvname != volname: + # maybe we should see if _any_ device has this name + if volname in [vg.name for vg in self.storage.vgs]: + self.intf.messageWindow(_("Name in use"), + _("The volume group name \"%s\" is " + "already in use. Please pick " + "another." % (volname,)), + custom_icon="error") + continue + + # get physical extent + pesize = int(self.peCombo.get_active_value()) / 1024.0 + + # everything ok + break + return self.convertToActions() + + def convertToActions(self): + # here we have to figure out what all was done and convert it to + # devices and actions + # + # set up the vg with the right pvs + # set up the lvs + # set up the lvs' formats + # + log.debug("finished editing vg") + log.debug("pvs: %s" % [p.name for p in self.pvs]) + log.debug("luks: %s" % self.luks.keys()) + volname = self.volnameEntry.get_text().strip() + pesize = int(self.peCombo.get_active_value()) / 1024.0 + for lv in self.lvs.itervalues(): + log.debug("lv %s" % lv) + _luks = self.luks.get(lv['name']) + if _luks: + log.debug(" luks: %s" % _luks) + + actions = [] + origlvs = self.vg.lvs + if not self.vg.exists: + log.debug("non-existing vg -- setting up lvs, pvs, name, pesize") + # remove all of the lvs + for lv in self.vg.lvs: + self.vg._removeLogVol(lv) + + # set up the pvs + for pv in self.vg.pvs: + if pv not in self.pvs: + self.vg._removePV(pv) + for pv in self.pvs: + if pv not in self.vg.pvs: + self.vg._addPV(pv) + + self.vg.name = volname + self.vg.peSize = pesize + + if self.isNew: + actions = [ActionCreateDevice(self.vg)] + + # Schedule destruction of all non-existing lvs, their formats, + # luks devices, &c. Also destroy devices that have been removed. + for lv in origlvs: + log.debug("old lv %s..." % lv.lvname) + if not lv.exists or lv.lvname not in self.lvs or \ + (not self.lvs[lv.lvname]['exists'] and lv.exists): + log.debug("removing lv %s" % lv.lvname) + if lv.format.type == "luks": + try: + _luksdev = self.storage.devicetree.getChildren(lv)[0] + except IndexError: + pass + else: + if _luksdev.format.type: + actions.append(ActionDestroyFormat(_luksdev)) + + actions.append(ActionDestroyDevice(_luksdev)) + + if lv.format.type: + actions.append(ActionDestroyFormat(lv)) + + if lv in self.vg.lvs: + self.vg._removeLogVol(lv) + + actions.append(ActionDestroyDevice(lv)) + + # schedule creation of all new lvs, their formats, luks devices, &c + tempvg = self.getTempVG() + for lv in tempvg.lvs: + log.debug("new lv %s" % lv) + if not lv.exists: + log.debug("creating lv %s" % lv.lvname) + # create the device + newlv = LVMLogicalVolumeDevice(lv.lvname, + self.vg, + size=lv.size) + actions.append(ActionCreateDevice(newlv)) + + # create the format + mountpoint = getattr(lv.format, "mountpoint", None) + format = getFormat(lv.format.type, + mountpoint=mountpoint, + device=newlv.path) + actions.append(ActionCreateFormat(newlv, format)) + + if lv.format.type == "luks": + # create the luks device + newluks = LUKSDevice("luks-%s" % newlv.name, + parents=[newlv]) + actions.append(ActionCreateDevice(newluks)) + + # create the luks format + oldfmt = self.luks[lv.lvname] + mountpoint = getattr(oldfmt, "mountpoint", None) + format = getFormat(oldfmt.type, + mountpoint=mountpoint, + device=newluks.path) + actions.append(ActionCreateFormat(newluks, format)) + else: + log.debug("lv %s already exists" % lv.lvname) + # this lv is preexisting. check for resize and reformat. + # first, get the real/original lv + origlv = self.getLVByName(lv.lvname) + if lv.resizable and lv.targetSize != origlv.size: + actions.append(ActionResizeDevice(origlv, lv.targetSize)) + + if lv.format.exists: + log.debug("format already exists") + if lv.format.type == "luks": + # see if the luks device already exists + try: + usedev = self.storage.devicetree.getChildren(origlv)[0] + except IndexError: + # the luks device does not exist, meaning we + # do not have a key for it + continue + + format = self.luks[lv.lvname] + if not format.exists: + actions.append(ActionCreateFormat(usedev, format)) + else: + usedev = origlv + format = lv.format + + # no formatting action requested, meaning we should + # cancel all format create/destroy actions + if format == usedev.originalFormat: + devicetree = self.storage.devicetree + cancel = [] + if origlv.originalFormat.type == "luks": + path = "/dev/mapper/luks-%s" % origlv.originalFormat.uuid + cancel.extend(devicetree.findActions(path=path)) + + cancel.extend(devicetree.findActions(type="create", + object="format", + devid=origlv.id)) + cancel.extend(devicetree.findActions(type="destroy", + object="format", + devid=origlv.id)) + for action in cancel: + devicetree.cancelAction(action) + + # even though we cancelled a bunch of actions, it's + # pretty much impossible to be sure we cancelled them + # in the correct order. make sure things are back to + # their original state. + if origlv.format.type == "luks": + try: + usedev = devicetree.getChildren(origlv)[0] + except IndexError: + usedev = origlv + else: + usedev.format = usedev.originalFormat + else: + usedev = origlv + + if hasattr(format, "mountpoint"): + usedev.format.mountpoint = format.mountpoint + + if format.migratable and format.migrate and \ + not usedev.format.migrate: + usedev.format.migrate = format.migrate + actions.append(ActionMigrateFormat(usedev)) + + # check the lv's format also, explicitly, in case it is + # encrypted. in this case we must check them both. + if format.resizable and lv.format.resizable and \ + lv.targetSize != format.currentSize and \ + usedev.format.exists: + new_size = lv.targetSize + actions.append(ActionResizeFormat(usedev, new_size)) + elif lv.format.type: + log.debug("new format: %s" % lv.format.type) + # destroy old format and any associated luks devices + if origlv.format.type: + if origlv.format.type == "luks": + # destroy the luks device and its format + try: + _luksdev = self.storage.devicetree.getChildren(origlv)[0] + except IndexError: + pass + else: + if _luksdev.format.type: + # this is probably unnecessary + actions.append(ActionDestroyFormat(_luksdev)) + + actions.append(ActionDestroyDevice(_luksdev)) + + actions.append(ActionDestroyFormat(origlv)) + + # create the format + mountpoint = getattr(lv.format, "mountpoint", None) + format = getFormat(lv.format.type, + mountpoint=mountpoint, + device=origlv.path) + actions.append(ActionCreateFormat(origlv, format)) + + if lv.format.type == "luks": + # create the luks device + newluks = LUKSDevice("luks-%s" % origlv.name, + parents=[origlv]) + actions.append(ActionCreateDevice(newluks)) + + # create the luks format + tmpfmt = self.luks[lv.lvname] + mountpoint = getattr(tmpfmt, "mountpoint", None) + format = getFormat(tmpfmt.type, + mountpoint=mountpoint, + device=newluks.path) + actions.append(ActionCreateFormat(newluks, format)) + else: + log.debug("no format!?") + + return actions + + def destroy(self): + if self.dialog: + self.dialog.destroy() + self.dialog = None + + def getLVByName(self, name, vg=None): + if vg is None: + vg = self.vg + + for lv in vg.lvs: + if lv.lvname == name or lv.name == name: + return lv + + def __init__(self, anaconda, intf, parent, vg, isNew = 0): + self.storage = anaconda.storage + + # the vg instance we were passed + self.vg = vg + self.peSize = vg.peSize + self.pvs = self.vg.pvs[:] + + # a dict of dicts + # keys are lv names + # values are dicts representing the lvs + # name, size, format instance, exists + self.lvs = {} + + # a dict of luks devices + # keys are lv names + # values are formats of the mapped devices + self.luks = {} + + self.isNew = isNew + self.intf = intf + self.parent = parent + self.actions = [] + + for lv in self.vg.lvs: + self.lvs[lv.lvname] = {"name": lv.lvname, + "size": lv.size, + "format": copy.copy(lv.format), + "originalFormat": lv.originalFormat, + "stripes": lv.stripes, + "logSize": lv.logSize, + "snapshotSpace": lv.snapshotSpace, + "exists": lv.exists} + + if lv.format.type == "luks": + try: + self.luks[lv.lvname] = self.storage.devicetree.getChildren(lv)[0].format + except IndexError: + self.luks[lv.lvname] = lv.format + + self.availlvmparts = self.storage.unusedPVs(vg=vg) + + # if no PV exist, raise an error message and return + if len(self.availlvmparts) < 1: + self.intf.messageWindow(_("Not enough physical volumes"), + _("At least one unused physical " + "volume partition is " + "needed to create an LVM Volume Group.\n\n" + "Create a partition or RAID array " + "of type \"physical volume (LVM)\" and then " + "select the \"LVM\" option again."), + custom_icon="error") + self.dialog = None + return + + if isNew: + tstr = _("Make LVM Volume Group") + else: + try: + tstr = _("Edit LVM Volume Group: %s") % (vg.name,) + except AttributeError: + tstr = _("Edit LVM Volume Group") + + dialog = gtk.Dialog(tstr, self.parent) + gui.addFrame(dialog) + dialog.add_button('gtk-cancel', 2) + dialog.add_button('gtk-ok', 1) + + dialog.set_position(gtk.WIN_POS_CENTER) + + maintable = gtk.Table() + maintable.set_row_spacings(5) + maintable.set_col_spacings(5) + row = 0 + + # volume group name + if not vg.exists: + lbl = createAlignedLabel(_("_Volume Group Name:")) + self.volnameEntry = gtk.Entry(16) + lbl.set_mnemonic_widget(self.volnameEntry) + if not self.isNew: + self.volnameEntry.set_text(self.vg.name) + else: + self.volnameEntry.set_text(self.storage.createSuggestedVGName(anaconda.network)) + else: + lbl = createAlignedLabel(_("Volume Group Name:")) + self.volnameEntry = gtk.Label(self.vg.name) + + maintable.attach(lbl, 0, 1, row, row + 1, + gtk.EXPAND|gtk.FILL, gtk.SHRINK) + maintable.attach(self.volnameEntry, 1, 2, row, row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + row = row + 1 + + lbl = createAlignedLabel(_("_Physical Extent:")) + self.peCombo = self.createPEOptionMenu(self.vg.peSize * 1024) + lbl.set_mnemonic_widget(self.peCombo) + if vg.exists: + self.peCombo.set_sensitive(False) + + maintable.attach(lbl, 0, 1, row, row + 1, + gtk.EXPAND|gtk.FILL, gtk.SHRINK) + maintable.attach(self.peCombo, 1, 2, row, row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + row = row + 1 + + (self.lvmlist, sw) = self.createAllowedLvmPartitionsList() + if vg.exists: + self.lvmlist.set_sensitive(False) + self.lvmlist.set_size_request(275, 80) + lbl = createAlignedLabel(_("Physical Volumes to _Use:")) + lbl.set_mnemonic_widget(self.lvmlist) + maintable.attach(lbl, 0, 1, row, row + 1) + maintable.attach(sw, 1, 2, row, row + 1) + row = row + 1 + + maintable.attach(createAlignedLabel(_("Used Space:")), 0, 1, row, + row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + lbox = gtk.HBox() + self.usedSpaceLabel = gtk.Label("") + labelalign = gtk.Alignment() + labelalign.set(1.0, 0.5, 0.0, 0.0) + labelalign.add(self.usedSpaceLabel) + lbox.pack_start(labelalign, False, False) + self.usedPercentLabel = gtk.Label("") + labelalign = gtk.Alignment() + labelalign.set(1.0, 0.5, 0.0, 0.0) + labelalign.add(self.usedPercentLabel) + lbox.pack_start(labelalign, False, False, padding=10) + maintable.attach(lbox, 1, 2, row, row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + maintable.set_row_spacing(row, 0) + row = row + 1 + + maintable.attach(createAlignedLabel(_("Free Space:")), 0, 1, row, + row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + lbox = gtk.HBox() + self.freeSpaceLabel = gtk.Label("") + labelalign = gtk.Alignment() + labelalign.set(1.0, 0.5, 0.0, 0.0) + labelalign.add(self.freeSpaceLabel) + lbox.pack_start(labelalign, False, False) + self.freePercentLabel = gtk.Label("") + labelalign = gtk.Alignment() + labelalign.set(1.0, 0.5, 0.0, 0.0) + labelalign.add(self.freePercentLabel) + lbox.pack_start(labelalign, False, False, padding=10) + + maintable.attach(lbox, 1, 2, row, row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + maintable.set_row_spacing(row, 0) + row = row + 1 + + maintable.attach(createAlignedLabel(_("Total Space:")), 0, 1, row, + row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + self.totalSpaceLabel = gtk.Label("") + labelalign = gtk.Alignment() + labelalign.set(0.0, 0.5, 0.0, 0.0) + labelalign.add(self.totalSpaceLabel) + maintable.attach(labelalign, 1, 2, row, row + 1, gtk.EXPAND|gtk.FILL, gtk.SHRINK) + maintable.set_row_spacing(row, 5) + row = row + 1 + + # populate list of logical volumes + lvtable = gtk.Table() + lvtable.set_row_spacings(5) + lvtable.set_col_spacings(5) + self.logvolstore = gtk.ListStore(gobject.TYPE_STRING, + gobject.TYPE_STRING, + gobject.TYPE_STRING) + + if self.vg.lvs: + for lv in self.vg.lvs: + iter = self.logvolstore.append() + self.logvolstore.set_value(iter, 0, lv.lvname) + if lv.format.type == "luks": + try: + format = self.storage.devicetree.getChildren(lv)[0].format + except IndexError: + format = lv.format + else: + format = lv.format + + if getattr(format, "mountpoint", None): + self.logvolstore.set_value(iter, 1, + format.mountpoint) + else: + self.logvolstore.set_value(iter, 1, "") + self.logvolstore.set_value(iter, 2, "%Ld" % lv.size) + + self.logvollist = gtk.TreeView(self.logvolstore) + col = gtk.TreeViewColumn(_("Logical Volume Name"), + gtk.CellRendererText(), text=0) + self.logvollist.append_column(col) + col = gtk.TreeViewColumn(_("Mount Point"), + gtk.CellRendererText(), text=1) + self.logvollist.append_column(col) + col = gtk.TreeViewColumn(_("Size (MB)"), + gtk.CellRendererText(), text=2) + self.logvollist.append_column(col) + self.logvollist.connect('row-activated', self.logvolActivateCb) + + sw = gtk.ScrolledWindow() + sw.add(self.logvollist) + sw.set_size_request(100, 100) + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + sw.set_shadow_type(gtk.SHADOW_IN) + lvtable.attach(sw, 0, 1, 0, 1) + + # button box of options + lvbbox = gtk.VBox() + add = gtk.Button(_("_Add")) + add.connect("clicked", self.addLogicalVolumeCB) + lvbbox.pack_start(add) + edit = gtk.Button(_("_Edit")) + edit.connect("clicked", self.editLogicalVolumeCB) + lvbbox.pack_start(edit) + delete = gtk.Button(_("_Delete")) + delete.connect("clicked", self.delLogicalVolumeCB) + lvbbox.pack_start(delete) + + lvalign = gtk.Alignment() + lvalign.set(0.5, 0.0, 0.0, 0.0) + lvalign.add(lvbbox) + lvtable.attach(lvalign, 1, 2, 0, 1, gtk.SHRINK, gtk.SHRINK) + + # pack all logical volumne stuff in a frame + lvtable.set_border_width(12) + l = gtk.Label() + l.set_markup_with_mnemonic("%s" %(_("_Logical Volumes"),)) + l.set_mnemonic_widget(self.logvollist) + frame = gtk.Frame() + frame.set_label_widget(l) + frame.add(lvtable) + frame.set_shadow_type(gtk.SHADOW_NONE) + +# dialog.vbox.pack_start(frame) + maintable.attach(frame, 0, 2, row, row+1) + row = row + 1 + + dialog.vbox.pack_start(maintable) + dialog.set_size_request(550, 450) + dialog.show_all() + + # set space labels to correct values + self.updateVGSpaceLabels() + + self.dialog = dialog diff --git a/iw/netconfig_dialog.py b/iw/netconfig_dialog.py new file mode 100644 index 0000000..336cf0e --- /dev/null +++ b/iw/netconfig_dialog.py @@ -0,0 +1,329 @@ +# +# netconfig_dialog.py: Configure a network interface now. +# +# Copyright (C) 2006 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +import gtk +import gobject +import gui + +from constants import * +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +import network +import isys + +class NetworkConfigurator: + def __init__(self, network): + (xml, w) = gui.getGladeWidget("netconfig.glade", "NetworkConfigWindow") + + self.window = w + self.network = network + self.xml = xml + self.rc = gtk.RESPONSE_CANCEL + + self._setSizeGroup() + self._connectSignals() + self._populateNetdevs() + + self.xml.get_widget("ipv4Checkbutton").set_active(True) + self.xml.get_widget("ipv6Checkbutton").set_active(False) + + def _connectSignals(self): + sigs = { "on_ipv4Checkbutton_toggled": self._ipv4Toggled, + "on_ipv6Checkbutton_toggled": self._ipv6Toggled, + "on_dhcpCheckbutton_toggled": self._dhcpToggled, + "on_interfaceCombo_changed": self._netdevChanged, + "on_cancelButton_clicked": self._cancel, + "on_okButton_clicked": self._ok } + self.xml.signal_autoconnect(sigs) + + def _setSizeGroup(self): # too bad we can't do this in the glade file + sg = gtk.SizeGroup(gtk.SIZE_GROUP_HORIZONTAL) + for w in ("nameserverLabel", "gatewayLabel", "ipv6Label", + "ipv4Label", "interfaceLabel"): + sg.add_widget(self.xml.get_widget(w)) + + def _netdevChanged(self, combo): + active = combo.get_active_iter() + val = combo.get_model().get_value(active, 1) + netdev = self.network.available()[val] + + bootproto = netdev.get("BOOTPROTO") + if not bootproto or bootproto == "dhcp" or bootproto == "ibft": + self.xml.get_widget("dhcpCheckbutton").set_active(True) + else: + self.xml.get_widget("dhcpCheckbutton").set_active(False) + + # FIXME: need to set ipv6 here too once we have that + try: + if netdev.get('IPADDR'): + self.xml.get_widget("ipv4Address").set_text(netdev.get('IPADDR')) + except: + pass + + try: + if netdev.get('NETMASK'): + self.xml.get_widget("ipv4Netmask").set_text(netdev.get('NETMASK')) + except: + pass + + try: + if self.network.gateway: + self.xml.get_widget("gatewayEntry").set_text(self.network.gateway) + except: + pass + + try: + if self.network.primaryNS: + self.xml.get_widget("nameserverEntry").set_text(self.network.primaryNS) + except: + pass + + def _ipv4Toggled(self, cb): + if self.xml.get_widget("dhcpCheckbutton").get_active(): + return + if cb.get_active(): + self.xml.get_widget("ipv4Box").set_sensitive(True) + else: + self.xml.get_widget("ipv4Box").set_sensitive(False) + + def _ipv6Toggled(self, cb): + if self.xml.get_widget("dhcpCheckbutton").get_active(): + return + if cb.get_active(): + self.xml.get_widget("ipv6Box").set_sensitive(True) + else: + self.xml.get_widget("ipv6Box").set_sensitive(False) + + def _dhcpToggled(self, cb): + boxes = ("ipv4Box", "ipv6Box", "nameserverBox", "gatewayBox") + if not cb.get_active(): + map(lambda x: self.xml.get_widget(x).set_sensitive(True), boxes) + self.xml.get_widget("ipv4Box").set_sensitive(self.xml.get_widget("ipv4Checkbutton").get_active()) + self.xml.get_widget("ipv6Box").set_sensitive(self.xml.get_widget("ipv6Checkbutton").get_active()) + else: + map(lambda x: self.xml.get_widget(x).set_sensitive(False), boxes) + + def _populateNetdevs(self): + combo = self.xml.get_widget("interfaceCombo") + + cell = gtk.CellRendererText() + combo.pack_start(cell, True) + combo.set_attributes(cell, text = 0) + cell.set_property("wrap-width", 525) + combo.set_size_request(480, -1) + + store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_STRING) + combo.set_model(store) + + netdevs = self.network.available() + devs = netdevs.keys() + devs.sort() + ksdevice = self.network.getKSDevice() + if ksdevice: + ksdevice = ksdevice.get('DEVICE') + selected_interface = None + + for dev in devs: + i = store.append(None) + hwaddr = netdevs[dev].get("HWADDR") + + if hwaddr: + desc = "%s - %s" %(dev, hwaddr,) + else: + desc = "%s" %(dev,) + + if selected_interface is None: + selected_interface = i + + if ksdevice and ksdevice == dev: + selected_interface = i + + store[i] = (desc, dev) + + if selected_interface: + combo.set_active_iter(selected_interface) + else: + combo.set_active(0) + + def run(self): + gui.addFrame(self.window) + busycursor = gui.getBusyCursorStatus() + gui.setCursorToNormal() + + self.window.show() + while True: + rc = self.window.run() + if rc in [gtk.RESPONSE_CANCEL, gtk.RESPONSE_DELETE_EVENT]: + self._cancel() + break + if self._ok(): + break + + # restore busy cursor + if busycursor: + gui.setCursorToBusy() + return self.rc + + def destroy(self): + self.window.destroy() + + def _handleIPError(self, field, errmsg): + d = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, + gtk.BUTTONS_OK, + _("An error occurred converting the value " + "entered for \"%(field)s\":\n%(errmsg)s") + % {'field': field, 'errmsg': errmsg}) + d.set_title(_("Error With Data")) + d.set_position(gtk.WIN_POS_CENTER) + gui.addFrame(d) + d.run() + d.destroy() + + def _handleIPMissing(self, field): + d = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, gtk.BUTTONS_OK, + _("A value is required for the field %s.") % (field,)) + d.set_title(_("Error With Data")) + d.set_position(gtk.WIN_POS_CENTER) + gui.addFrame(d) + d.run() + d.destroy() + + def _handleNetworkError(self, field): + d = gtk.MessageDialog(None, 0, gtk.MESSAGE_ERROR, + gtk.BUTTONS_OK, + _("An error occurred trying to bring up the " + "%s network interface.") % (field,)) + d.set_title(_("Error Configuring Network")) + d.set_position(gtk.WIN_POS_CENTER) + gui.addFrame(d) + d.run() + d.destroy() + + def _cancel(self, *args): + self.rc = gtk.RESPONSE_CANCEL + + def _ok(self, *args): + self.rc = gtk.RESPONSE_OK + haveNet = False + combo = self.xml.get_widget("interfaceCombo") + active = combo.get_active_iter() + val = combo.get_model().get_value(active, 1) + for v, dev in self.network.available().items(): + if v == val: + dev.set(('ONBOOT', 'yes')) + netdev = dev + else: + dev.set(('ONBOOT', 'no')) + + # FIXME: need to do input validation + if self.xml.get_widget("dhcpCheckbutton").get_active(): + netdev.set(('BOOTPROTO', 'dhcp')) + self.window.hide() + w = gui.WaitWindow(_("Dynamic IP Address"), + _("Sending request for IP address information " + "for %s") % (netdev.get('DEVICE'),)) + haveNet = self.network.bringUp(devices=[netdev]) + w.pop() + else: + netdev.set(('BOOTPROTO', 'static')) + ipv4addr = self.xml.get_widget("ipv4Address").get_text() + ipv4nm = self.xml.get_widget("ipv4Netmask").get_text() + gateway = self.xml.get_widget("gatewayEntry").get_text() + ns = self.xml.get_widget("nameserverEntry").get_text() + + try: + network.sanityCheckIPString(ipv4addr) + netdev.set(('IPADDR', ipv4addr)) + except network.IPMissing, msg: + self._handleIPMissing(_("IP Address")) + return False + except network.IPError, msg: + self._handleIPError(_("IP Address"), msg) + return False + + if ipv4nm.find('.') == -1: + # user provided a CIDR prefix + try: + if int(ipv4nm) > 32 or int(ipv4nm) < 0: + msg = _("IPv4 CIDR prefix must be between 0 and 32.") + self._handleIPError(_("IPv4 Network Mask"), msg) + return False + else: + ipv4nm = isys.prefix2netmask(int(ipv4nm)) + netdev.set(('NETMASK', ipv4nm)) + except: + self._handleIPMissing(_("IPv4 Network Mask")) + return False + else: + # user provided a dotted-quad netmask + try: + network.sanityCheckIPString(ipv4nm) + netdev.set(('NETMASK', ipv4nm)) + except network.IPMissing, msg: + self._handleIPMissing(_("IPv4 Network Mask")) + return False + except network.IPError, msg: + self._handleIPError(_("IPv4 Network Mask"), msg) + return False + + try: + if gateway: + network.sanityCheckIPString(gateway) + netdev.set(('GATEWAY', gateway)) + except network.IPMissing, msg: + pass + except network.IPError, msg: + self._handleIPError(_("Gateway"), msg) + return False + + try: + if ns: + network.sanityCheckIPString(ns) + netdev.set(('DNS1', ns)) + except network.IPMissing, msg: + pass + except network.IPError, msg: + self._handleIPError(_("Nameserver"), msg) + return False + + try: + haveNet = self.network.bringUp(devices=[netdev]) + except Exception, e: + import logging + log = logging.getLogger("anaconda") + log.error("Error configuring network device: %s" %(e,)) + self._handleIPError(_("Error configuring network device:"), e) + return False + + if not haveNet: + self._handleNetworkError(netdev.get('DEVICE')) + return False + + return True + +def main(): + net = network.Network() + d = NetworkConfigurator(net) + ret = d.run() + +if __name__ == "__main__": + main() diff --git a/iw/network_gui.py b/iw/network_gui.py new file mode 100644 index 0000000..e6c223d --- /dev/null +++ b/iw/network_gui.py @@ -0,0 +1,83 @@ +# +# network_gui.py: Network configuration dialog +# +# Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, Red Hat, Inc. +# 2007, 2008, 2009 +# +# 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, see . +# +# Author(s): Michael Fulbright +# David Cantrell +# + +import string +from iw_gui import * +import gui +import network + +from constants import * +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class NetworkWindow(InstallWindow): + def getScreen(self, anaconda): + self.intf = anaconda.intf + self.anaconda = anaconda + self.hostname = network.getDefaultHostname(anaconda) + + # load the UI + (self.xml, self.align) = gui.getGladeWidget("network.glade", + "network_align") + self.icon = self.xml.get_widget("icon") + self.hostnameEntry = self.xml.get_widget("hostnameEntry") + self.hostnameEntry.set_text(self.hostname) + + # pressing Enter in confirm == clicking Next + self.hostnameEntry.connect("activate", + lambda w: self.ics.setGrabNext(1)) + + # load the icon + gui.readImageFromFile("network.png", image=self.icon) + + return self.align + + def focus(self): + self.hostnameEntry.grab_focus() + + def hostnameError(self): + self.hostnameEntry.grab_focus() + raise gui.StayOnScreen + + def getNext(self): + hostname = string.strip(self.hostnameEntry.get_text()) + herrors = network.sanityCheckHostname(hostname) + + if not hostname: + self.intf.messageWindow(_("Error with Hostname"), + _("You must enter a valid hostname for this " + "computer."), custom_icon="error") + self.hostnameError() + + if herrors is not None: + self.intf.messageWindow(_("Error with Hostname"), + _("The hostname \"%(hostname)s\" is not " + "valid for the following reason:\n\n" + "%(herrors)s") + % {'hostname': hostname, + 'herrors': herrors}, + custom_icon="error") + self.hostnameError() + + self.anaconda.network.hostname = hostname + return None diff --git a/iw/osbootwidget.py b/iw/osbootwidget.py new file mode 100644 index 0000000..42fc73a --- /dev/null +++ b/iw/osbootwidget.py @@ -0,0 +1,397 @@ +# +# osbootwidget.py: gui bootloader list of operating systems to boot +# +# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +import gtk +import gobject +import iutil +import parted +import gui +import datacombo +from constants import * +from storage.devices import devicePathToName + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class OSBootWidget: + """Widget to display OSes to boot and allow adding new ones.""" + + def __init__(self, anaconda, parent, blname = None): + self.bl = anaconda.bootloader + self.storage = anaconda.storage + self.parent = parent + self.intf = anaconda.intf + if blname is not None: + self.blname = blname + else: + self.blname = "GRUB" + + self.setIllegalChars() + + self.vbox = gtk.VBox(False, 5) + label = gtk.Label("" + _("Boot loader operating system list") + "") + label.set_alignment(0.0, 0.0) + label.set_property("use-markup", True) + self.vbox.pack_start(label, False) + + box = gtk.HBox (False, 5) + sw = gtk.ScrolledWindow() + sw.set_shadow_type(gtk.SHADOW_ETCHED_IN) + sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + sw.set_size_request(300, 100) + box.pack_start(sw, True) + + + self.osStore = gtk.ListStore(gobject.TYPE_BOOLEAN, gobject.TYPE_STRING, + gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) + self.osTreeView = gtk.TreeView(self.osStore) + theColumns = [ _("Default"), _("Label"), _("Device") ] + + self.checkboxrenderer = gtk.CellRendererToggle() + column = gtk.TreeViewColumn(theColumns[0], self.checkboxrenderer, + active = 0) + column.set_sizing(gtk.TREE_VIEW_COLUMN_AUTOSIZE) + self.checkboxrenderer.connect("toggled", self.toggledDefault) + self.checkboxrenderer.set_radio(True) + self.osTreeView.append_column(column) + + for columnTitle in theColumns[1:]: + renderer = gtk.CellRendererText() + column = gtk.TreeViewColumn(columnTitle, renderer, + text = theColumns.index(columnTitle)) + column.set_clickable(False) + self.osTreeView.append_column(column) + + self.osTreeView.set_headers_visible(True) + self.osTreeView.columns_autosize() + self.osTreeView.set_size_request(100, 100) + sw.add(self.osTreeView) + self.osTreeView.connect('row-activated', self.osTreeActivateCb) + + self.imagelist = self.bl.images.getImages() + self.defaultDev = self.bl.images.getDefault() + self.fillOSList() + + buttonbar = gtk.VButtonBox() + buttonbar.set_layout(gtk.BUTTONBOX_START) + buttonbar.set_border_width(5) + add = gtk.Button(_("_Add")) + buttonbar.pack_start(add, False) + add.connect("clicked", self.addEntry) + + edit = gtk.Button(_("_Edit")) + buttonbar.pack_start(edit, False) + edit.connect("clicked", self.editEntry) + + delete = gtk.Button(_("_Delete")) + buttonbar.pack_start(delete, False) + delete.connect("clicked", self.deleteEntry) + box.pack_start(buttonbar, False) + + self.vbox.pack_start(box, False) + + self.widget = self.vbox + + def setIllegalChars(self): + # illegal characters for boot loader labels + if self.blname == "GRUB": + self.illegalChars = [ "$", "=" ] + else: + self.illegalChars = [ "$", "=", " " ] + + def changeBootLoader(self, blname): + if blname is not None: + self.blname = blname + else: + self.blname = "GRUB" + self.setIllegalChars() + self.fillOSList() + + # adds/edits a new "other" os to the boot loader config + def editOther(self, oldDevice, oldLabel, isDefault, isRoot = 0): + dialog = gtk.Dialog(_("Image"), self.parent) + dialog.add_button('gtk-cancel', 2) + dialog.add_button('gtk-ok', 1) + dialog.set_position(gtk.WIN_POS_CENTER) + gui.addFrame(dialog) + + dialog.vbox.pack_start(gui.WrappingLabel( + _("Enter a label for the boot loader menu to display. The " + "device (or hard drive and partition number) is the device " + "from which it boots."))) + + table = gtk.Table(2, 5) + table.set_row_spacings(5) + table.set_col_spacings(5) + + label = gui.MnemonicLabel(_("_Label")) + table.attach(label, 0, 1, 1, 2, gtk.FILL, 0, 10) + labelEntry = gtk.Entry(32) + label.set_mnemonic_widget(labelEntry) + table.attach(labelEntry, 1, 2, 1, 2, gtk.FILL, 0, 10) + if oldLabel: + labelEntry.set_text(oldLabel) + + label = gui.MnemonicLabel(_("_Device")) + table.attach(label, 0, 1, 2, 3, gtk.FILL, 0, 10) + if not isRoot: + parts = [] + + for part in self.storage.partitions: + if part.partedPartition.getFlag(parted.PARTITION_LVM) or \ + part.partedPartition.getFlag(parted.PARTITION_RAID) or \ + not part.partedPartition.active: + continue + + parts.append(part) + + deviceCombo = datacombo.DataComboBox() + defindex = 0 + i = 0 + for part in parts: + deviceCombo.append(part.path, part.name) + if oldDevice and oldDevice == part.name: + defindex = i + i = i + 1 + + + deviceCombo.set_active(defindex) + + table.attach(deviceCombo, 1, 2, 2, 3, gtk.FILL, 0, 10) + label.set_mnemonic_widget(deviceCombo) + else: + table.attach(gtk.Label(oldDevice), 1, 2, 2, 3, gtk.FILL, 0, 10) + + default = gtk.CheckButton(_("Default Boot _Target")) + table.attach(default, 0, 2, 3, 4, gtk.FILL, 0, 10) + if isDefault != 0: + default.set_active(True) + + if self.numentries == 1 and oldDevice != None: + default.set_sensitive(False) + else: + default.set_sensitive(True) + + dialog.vbox.pack_start(table) + dialog.show_all() + + while 1: + rc = dialog.run() + + # cancel + if rc in [2, gtk.RESPONSE_DELETE_EVENT]: + break + + label = labelEntry.get_text() + + if not isRoot: + dev = deviceCombo.get_active_value() + else: + dev = oldDevice + + if not label: + self.intf.messageWindow(_("Error"), + _("You must specify a label for the " + "entry"), + type="warning") + continue + + foundBad = 0 + for char in self.illegalChars: + if char in label: + self.intf.messageWindow(_("Error"), + _("Boot label contains illegal " + "characters"), + type="warning") + foundBad = 1 + break + if foundBad: + continue + + # verify that the label hasn't been used + foundBad = 0 + for key in self.imagelist.keys(): + if dev == key: + continue + if self.blname == "GRUB": + thisLabel = self.imagelist[key][1] + else: + thisLabel = self.imagelist[key][0] + + # if the label is the same as it used to be, they must + # have changed the device which is fine + if thisLabel == oldLabel: + continue + + if thisLabel == label: + self.intf.messageWindow(_("Duplicate Label"), + _("This label is already in " + "use for another boot entry."), + type="warning") + foundBad = 1 + break + if foundBad: + continue + + # XXX need to do some sort of validation of the device? + + # they could be duplicating a device, which we don't handle + if dev in self.imagelist.keys() and (not oldDevice or + dev != oldDevice): + self.intf.messageWindow(_("Duplicate Device"), + _("This device is already being " + "used for another boot entry."), + type="warning") + continue + + # if we're editing a previous, get what the old info was for + # labels. otherwise, make it something safe for grub and the + # device name for lilo for lack of any better ideas + if oldDevice: + (oldshort, oldlong, oldisroot) = self.imagelist[oldDevice] + else: + (oldshort, oldlong, oldisroot) = (dev, label, None) + + # if we're editing and the device has changed, delete the old + if oldDevice and dev != oldDevice: + del self.imagelist[oldDevice] + + # go ahead and add it + if self.blname == "GRUB": + self.imagelist[dev] = (oldshort, label, isRoot) + else: + self.imagelist[dev] = (label, oldlong, isRoot) + + if default.get_active(): + self.defaultDev = dev + + # refill the os list store + self.fillOSList() + break + + dialog.destroy() + + def getSelected(self): + selection = self.osTreeView.get_selection() + (model, iter) = selection.get_selected() + if not iter: + return None + + dev = devicePathToName(model.get_value(iter, 2)) + label = model.get_value(iter, 1) + isRoot = model.get_value(iter, 3) + isDefault = model.get_value(iter, 0) + return (dev, label, isDefault, isRoot) + + + def addEntry(self, widget, *args): + self.editOther(None, None, 0) + + def deleteEntry(self, widget, *args): + rc = self.getSelected() + if not rc: + return + (dev, label, isDefault, isRoot) = rc + if not isRoot: + del self.imagelist[dev] + if isDefault: + keys = self.imagelist.keys() + keys.sort() + self.defaultDev = keys[0] + + self.fillOSList() + else: + self.intf.messageWindow(_("Cannot Delete"), + _("This boot target cannot be deleted " + "because it is for the %s " + "system you are about to install.") + %(productName,), + type="warning") + + def editEntry(self, widget, *args): + rc = self.getSelected() + if not rc: + return + (dev, label, isDefault, isRoot) = rc + self.editOther(dev, label, isDefault, isRoot) + + # the default os was changed in the treeview + def toggledDefault(self, data, row): + iter = self.osStore.get_iter((int(row),)) + dev = self.osStore.get_value(iter, 2) + self.defaultDev = devicePathToName(dev) + self.fillOSList() + + # fill in the os list tree view + def fillOSList(self): + self.osStore.clear() + + keys = self.imagelist.keys() + keys.sort() + + for dev in keys: + (label, longlabel, fstype) = self.imagelist[dev] + device = self.storage.devicetree.getDeviceByName(dev) + if self.blname == "GRUB": + theLabel = longlabel + else: + theLabel = label + + # if the label is empty, remove from the image list and don't + # worry about it + if not theLabel: + del self.imagelist[dev] + continue + + isRoot = 0 + rootDev = self.storage.rootDevice + if rootDev and rootDev.name == dev: + isRoot = 1 + + devPath = getattr(device, "path", "/dev/%s" % dev) + iter = self.osStore.append() + self.osStore.set_value(iter, 1, theLabel) + self.osStore.set_value(iter, 2, devPath) + self.osStore.set_value(iter, 3, isRoot) + if self.defaultDev == dev: + self.osStore.set_value(iter, 0, True) + else: + self.osStore.set_value(iter, 0, False) + + self.numentries = len(keys) + + def osTreeActivateCb(self, view, path, col): + self.editEntry(view) + + + def getWidget(self): + return self.widget + + # FIXME: I really shouldn't have such intimate knowledge of + # the bootloader object + def setBootloaderImages(self): + "Apply the changes from our list into the self.bl object" + # make a copy of our image list to shove into the bl struct + self.bl.images.images = {} + for key in self.imagelist.keys(): + self.bl.images.images[key] = self.imagelist[key] + self.bl.images.setDefault(self.defaultDev) + diff --git a/iw/package_gui.py b/iw/package_gui.py new file mode 100644 index 0000000..4e6bfbe --- /dev/null +++ b/iw/package_gui.py @@ -0,0 +1,39 @@ +# +# package_gui.py: package group selection screen +# +# Copyright (C) 2005 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Jeremy Katz +# + +# FIXME: group selection isn't currently backend independent +from GroupSelector import GroupSelector + +import gui +from iw_gui import * + +from constants import * +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class GroupSelectionWindow (InstallWindow): + def getScreen(self, anaconda): + self.backend = anaconda.backend + self.intf = anaconda.intf + self.grpsel = GroupSelector(self.backend.ayum, gui.findGladeFile, + gui.addFrame) + self.grpsel.doRefresh() + return self.grpsel.vbox diff --git a/iw/partition_dialog_gui.py b/iw/partition_dialog_gui.py new file mode 100644 index 0000000..fc93d66 --- /dev/null +++ b/iw/partition_dialog_gui.py @@ -0,0 +1,534 @@ +# +# partition_dialog_gui.py: dialog for editting a partition request +# +# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Red Hat, Inc. +# All rights reserved. +# +# 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, see . +# +# Author(s): Michael Fulbright +# + +import copy + +import gobject +import gtk + +import gui +from storage.devices import PartitionDevice, LUKSDevice +from storage.deviceaction import * +from partition_ui_helpers_gui import * +from constants import * + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) + +class PartitionEditor: + def sizespinchangedCB(self, widget, fillmaxszsb): + size = widget.get_value_as_int() + maxsize = fillmaxszsb.get_value_as_int() + if size < 1: + widget.set_value(1) + size = 1 + if size > maxsize: + fillmaxszsb.set_value(size) + + # ugly got to be better way + adj = fillmaxszsb.get_adjustment() + adj.clamp_page(size, adj.upper) + fillmaxszsb.set_adjustment(adj) + + def fillmaxszCB(self, widget, spin): + spin.set_sensitive(widget.get_active()) + + # pass in CB defined above because of two scope limitation of python! + def createSizeOptionsFrame(self, request, fillmaxszCB): + frame = gtk.Frame(_("Additional Size Options")) + sizeoptiontable = gtk.Table() + sizeoptiontable.set_row_spacings(5) + sizeoptiontable.set_border_width(4) + + fixedrb = gtk.RadioButton(label=_("_Fixed size")) + fillmaxszrb = gtk.RadioButton(group=fixedrb, + label=_("Fill all space _up " + "to (MB):")) + maxsizeAdj = gtk.Adjustment(value = 1, lower = 1, + upper = MAX_PART_SIZE, step_incr = 1) + fillmaxszsb = gtk.SpinButton(maxsizeAdj, digits = 0) + fillmaxszsb.set_property('numeric', True) + fillunlimrb = gtk.RadioButton(group=fixedrb, + label=_("Fill to maximum _allowable " + "size")) + + fillmaxszrb.connect("toggled", fillmaxszCB, fillmaxszsb) + + # default to fixed, turn off max size spinbutton + fillmaxszsb.set_sensitive(0) + if request.req_grow: + if request.req_max_size: + fillmaxszrb.set_active(1) + fillmaxszsb.set_sensitive(1) + fillmaxszsb.set_value(request.req_max_size) + else: + fillunlimrb.set_active(1) + else: + fixedrb.set_active(1) + + sizeoptiontable.attach(fixedrb, 0, 1, 0, 1) + sizeoptiontable.attach(fillmaxszrb, 0, 1, 1, 2) + sizeoptiontable.attach(fillmaxszsb, 1, 2, 1, 2) + sizeoptiontable.attach(fillunlimrb, 0, 1, 2, 3) + + frame.add(sizeoptiontable) + + return (frame, fixedrb, fillmaxszrb, fillmaxszsb) + + + def run(self): + if self.dialog is None: + return [] + + while 1: + rc = self.dialog.run() + actions = [] + luksdev = None + + # user hit cancel, do nothing + if rc in [2, gtk.RESPONSE_DELETE_EVENT]: + self.destroy() + return [] + + mountpoint = self.mountCombo.get_children()[0].get_text() + if mountpoint == _(""): + mountpoint = "" + + if mountpoint: + used = False + for (mp, dev) in self.storage.mountpoints.iteritems(): + if mp == mountpoint and \ + dev.id != self.origrequest.id and \ + not (self.origrequest.format.type == "luks" and + self.origrequest in dev.parents): + used = True + break + + if used: + self.intf.messageWindow(_("Mount point in use"), + _("The mount point \"%s\" is in " + "use. Please pick another.") % + (mountpoint,), + custom_icon="error") + continue + + if not self.origrequest.exists: + # read out UI into a partition specification + fmt_class = self.newfstypeCombo.get_active_value() + # there's nothing about origrequest we care about + #request = copy.copy(self.origrequest) + + if self.primonlycheckbutton.get_active(): + primary = True + else: + primary = None + + if self.fixedrb.get_active(): + grow = None + else: + grow = True + + self.sizespin.update() + + if self.fillmaxszrb.get_active(): + self.fillmaxszsb.update() + maxsize = self.fillmaxszsb.get_value_as_int() + else: + maxsize = 0 + + allowdrives = [] + model = self.driveview.get_model() + iter = model.get_iter_first() + while iter: + val = model.get_value(iter, 0) + drive = model.get_value(iter, 1) + + if val: + allowdrives.append(drive) + + iter = model.iter_next(iter) + + if len(allowdrives) == len(self.storage.partitioned): + allowdrives = None + + size = self.sizespin.get_value_as_int() + disks = [] + if allowdrives: + for drive in allowdrives: + for disk in self.storage.partitioned: + if disk.name == drive: + disks.append(disk) + + format = fmt_class(mountpoint=mountpoint) + weight = self.anaconda.platform.weight(mountpoint=mountpoint, + fstype=format.type) + if self.isNew: + request = self.storage.newPartition(size=size, + grow=grow, + maxsize=maxsize, + primary=primary, + format=format, + parents=disks, + weight=weight) + else: + request = self.origrequest + request.weight = weight + + if self.lukscb and self.lukscb.get_active() and \ + request.format.type != "luks": + luksformat = format + format = getFormat("luks", + passphrase=self.storage.encryptionPassphrase) + luksdev = LUKSDevice("luks%d" % self.storage.nextID, + format=luksformat, + parents=request) + elif self.lukscb and not self.lukscb.get_active() and \ + self.origrequest.format.type == "luks": + # destroy the luks format and the mapped device + try: + luksdev = self.storage.devicetree.getChildren(self.origrequest)[0] + except IndexError: + pass + else: + actions.append(ActionDestroyFormat(luksdev)) + actions.append(ActionDestroyDevice(luksdev)) + luksdev = None + + actions.append(ActionDestroyFormat(request)) + + if self.isNew: + # we're all set, so create the actions + actions.append(ActionCreateDevice(request)) + else: + request.req_size = size + request.req_base_size = size + request.req_grow = grow + request.req_max_size = maxsize + request.req_primary = primary + request.req_disks = disks + + actions.append(ActionCreateFormat(request, format)) + if luksdev: + actions.append(ActionCreateDevice(luksdev)) + actions.append(ActionCreateFormat(luksdev)) + else: + # preexisting partition + request = self.origrequest + if request.format.type == "luks": + try: + usedev = self.storage.devicetree.getChildren(request)[0] + except IndexError: + usedev = request + else: + usedev = request + + origformat = usedev.format + devicetree = self.anaconda.storage.devicetree + + if self.fsoptionsDict.has_key("formatcb"): + if self.fsoptionsDict["formatcb"].get_active(): + fmt_class = self.fsoptionsDict["fstypeCombo"].get_active_value() + + # carry over exists, migrate, size, and device + # necessary for partition editor UI + format = fmt_class(mountpoint=mountpoint, + device=usedev.path) + + luksdev = None + if self.fsoptionsDict.has_key("lukscb") and \ + self.fsoptionsDict["lukscb"].get_active() and \ + (request.format.type != "luks" or + (request.format.exists and + not request.format.hasKey)): + luksdev = LUKSDevice("luks%d" % self.storage.nextID, + format=format, + parents=request) + format = getFormat("luks", + device=self.origrequest.path, + passphrase=self.storage.encryptionPassphrase) + elif self.fsoptionsDict.has_key("lukscb") and \ + not self.fsoptionsDict["lukscb"].get_active() and \ + request.format.type == "luks": + # user elected to format the device w/o encryption + try: + luksdev = self.storage.devicetree.getChildren(request)[0] + except IndexError: + pass + else: + actions.append(ActionDestroyFormat(luksdev)) + actions.append(ActionDestroyDevice(luksdev)) + luksdev = None + + actions.append(ActionDestroyFormat(request)) + # we set the new format's device while under the + # impression that the device was going to be + # encrypted, so we need to remedy that now + format.device = request.path + usedev = request + + actions.append(ActionCreateFormat(usedev, format)) + if luksdev: + actions.append(ActionCreateDevice(luksdev)) + actions.append(ActionCreateFormat(luksdev)) + elif not self.fsoptionsDict["formatcb"].get_active(): + # if the format checkbutton is inactive, cancel all + # actions on this device that create or destroy + # formats + cancel = [] + if request.originalFormat.type == "luks": + path = "/dev/mapper/luks-%s" % request.originalFormat.uuid + cancel.extend(devicetree.findActions(path=path)) + + cancel.extend(devicetree.findActions(type="destroy", + object="format", + devid=request.id)) + cancel.extend(devicetree.findActions(type="create", + object="format", + devid=request.id)) + cancel.reverse() + for action in cancel: + devicetree.cancelAction(action) + + # even though we cancelled a bunch of actions, it's + # pretty much impossible to be sure we cancelled them + # in the correct order. make sure things are back to + # their original state. + request.format = request.originalFormat + if request.format.type == "luks": + try: + usedev = devicetree.getChildren(request)[0] + except IndexError: + usedev = request + else: + usedev.format = usedev.originalFormat + else: + usedev = request + + if usedev.format.mountable: + usedev.format.mountpoint = mountpoint + elif self.origrequest.protected and usedev.format.mountable: + # users can set a mountpoint for protected partitions + usedev.format.mountpoint = mountpoint + + request.weight = self.anaconda.platform.weight(mountpoint=mountpoint, + fstype=request.format.type) + + if self.fsoptionsDict.has_key("migratecb") and \ + self.fsoptionsDict["migratecb"].get_active(): + actions.append(ActionMigrateFormat(usedev)) + + if self.fsoptionsDict.has_key("resizecb") and \ + self.fsoptionsDict["resizecb"].get_active(): + size = self.fsoptionsDict["resizesb"].get_value_as_int() + + try: + actions.append(ActionResizeDevice(request, size)) + if request.format.type and request.format.exists: + actions.append(ActionResizeFormat(request, size)) + except ValueError: + pass + + if request.format.exists and \ + getattr(request, "mountpoint", None) and \ + self.storage.formatByDefault(request): + if not queryNoFormatPreExisting(self.intf): + continue + + # everything ok, fall out of loop + break + + return actions + + def destroy(self): + if self.dialog: + self.dialog.destroy() + self.dialog = None + + + def __init__(self, anaconda, parent, origrequest, isNew = 0, + restrictfs = None): + self.anaconda = anaconda + self.storage = self.anaconda.storage + self.intf = self.anaconda.intf + self.origrequest = origrequest + self.isNew = isNew + self.parent = parent + + if isNew: + tstr = _("Add Partition") + else: + tstr = _("Edit Partition: %s") % (origrequest.path,) + + self.dialog = gtk.Dialog(tstr, self.parent) + gui.addFrame(self.dialog) + self.dialog.add_button('gtk-cancel', 2) + self.dialog.add_button('gtk-ok', 1) + self.dialog.set_position(gtk.WIN_POS_CENTER) + + maintable = gtk.Table() + maintable.set_row_spacings(5) + maintable.set_col_spacings(5) + row = 0 + + # if this is a luks device we need to grab info from two devices + # to make it seem like one device. wee! + if self.origrequest.format.type == "luks": + try: + luksdev = self.storage.devicetree.getChildren(self.origrequest)[0] + except IndexError: + usereq = self.origrequest + luksdev = None + else: + usereq = luksdev + else: + luksdev = None + usereq = self.origrequest + + # Mount Point entry + lbl = createAlignedLabel(_("_Mount Point:")) + maintable.attach(lbl, 0, 1, row, row + 1) + self.mountCombo = createMountPointCombo(usereq) + lbl.set_mnemonic_widget(self.mountCombo) + maintable.attach(self.mountCombo, 1, 2, row, row + 1) + row = row + 1 + + # Partition Type + if not self.origrequest.exists: + lbl = createAlignedLabel(_("File System _Type:")) + maintable.attach(lbl, 0, 1, row, row + 1) + + self.newfstypeCombo = createFSTypeMenu(usereq.format, + fstypechangeCB, + self.mountCombo, + availablefstypes = restrictfs) + lbl.set_mnemonic_widget(self.newfstypeCombo) + maintable.attach(self.newfstypeCombo, 1, 2, row, row + 1) + else: + self.newfstypeCombo = None + + row = row + 1 + + # allowable drives + if not self.origrequest.exists: + lbl = createAlignedLabel(_("Allowable _Drives:")) + maintable.attach(lbl, 0, 1, row, row + 1) + + req_disk_names = [d.name for d in self.origrequest.req_disks] + self.driveview = createAllowedDrivesList(self.storage.partitioned, + req_disk_names, + disallowDrives=[self.anaconda.updateSrc]) + lbl.set_mnemonic_widget(self.driveview) + sw = gtk.ScrolledWindow() + sw.add(self.driveview) + sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) + sw.set_shadow_type(gtk.SHADOW_IN) + maintable.attach(sw, 1, 2, row, row + 1) + self.driveview.set_size_request(375, 80) + + row = row + 1 + + # original fs type and label + if self.origrequest.exists: + maintable.attach(createAlignedLabel(_("Original File System Type:")), + 0, 1, row, row + 1) + self.fstypeCombo = gtk.Label(usereq.originalFormat.name) + + maintable.attach(self.fstypeCombo, 1, 2, row, row + 1) + row += 1 + + if getattr(usereq.originalFormat, "label", None): + maintable.attach(createAlignedLabel(_("Original File System " + "Label:")), + 0, 1, row, row + 1) + fslabel = gtk.Label(usereq.originalFormat.label) + maintable.attach(fslabel, 1, 2, row, row + 1) + row = row + 1 + + # size + if not self.origrequest.exists: + # Size specification + lbl = createAlignedLabel(_("_Size (MB):")) + maintable.attach(lbl, 0, 1, row, row + 1) + sizeAdj = gtk.Adjustment(value = 1, lower = 1, + upper = MAX_PART_SIZE, step_incr = 1) + self.sizespin = gtk.SpinButton(sizeAdj, digits = 0) + self.sizespin.set_property('numeric', True) + + if self.origrequest.req_size: + self.sizespin.set_value(self.origrequest.req_size) + + lbl.set_mnemonic_widget(self.sizespin) + maintable.attach(self.sizespin, 1, 2, row, row + 1) + else: + self.sizespin = None + + row = row + 1 + + # format/migrate options for pre-existing partitions, as long as they + # aren't protected (we'd still like to be able to mount them, though) + self.fsoptionsDict = {} + if self.origrequest.exists and \ + not self.origrequest.protected: + (row, self.fsoptionsDict) = createPreExistFSOptionSection(self.origrequest, maintable, row, self.mountCombo, self.storage, luksdev=luksdev) + + # size options + if not self.origrequest.exists: + (sizeframe, self.fixedrb, self.fillmaxszrb, + self.fillmaxszsb) = self.createSizeOptionsFrame(self.origrequest, + self.fillmaxszCB) + self.sizespin.connect("value-changed", self.sizespinchangedCB, + self.fillmaxszsb) + + maintable.attach(sizeframe, 0, 2, row, row + 1) + row = row + 1 + else: + self.sizeoptiontable = None + + # create only as primary + if not self.origrequest.exists: + self.primonlycheckbutton = gtk.CheckButton(_("Force to be a _primary " + "partition")) + self.primonlycheckbutton.set_active(0) + if self.origrequest.req_primary: + self.primonlycheckbutton.set_active(1) + + # only show if we have something other than primary + if self.storage.extendedPartitionsSupported(): + maintable.attach(self.primonlycheckbutton, 0, 2, row, row+1) + row = row + 1 + + # checkbutton for encryption using dm-crypt/LUKS + if not self.origrequest.exists: + self.lukscb = gtk.CheckButton(_("_Encrypt")) + self.lukscb.set_data("formatstate", 1) + + if self.origrequest.format.type == "luks": + self.lukscb.set_active(1) + else: + self.lukscb.set_active(0) + maintable.attach(self.lukscb, 0, 2, row, row + 1) + row = row + 1 + + # put main table into dialog + self.dialog.vbox.pack_start(maintable) + self.dialog.show_all() + diff --git a/iw/partition_gui.py b/iw/partition_gui.py new file mode 100644 index 0000000..7ce4df2 --- /dev/null +++ b/iw/partition_gui.py @@ -0,0 +1,1868 @@ +# +# partition_gui.py: allows the user to choose how to partition their disks +# +# Copyright (C) 2001, 2002 Red Hat, Inc. All rights reserved. +# +# 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, see . +# +# Author(s): Matt Wilson +# Michael Fulbright +# + +import gobject +import gtk +import gtk.glade +try: + import gnomecanvas +except ImportError: + import gnome.canvas as gnomecanvas +import pango +import gui +import parted +import string +import types +import copy + +import storage +from iw_gui import * +from flags import flags + +import datacombo +import lvm_dialog_gui as l_d_g +import raid_dialog_gui as r_d_g +import partition_dialog_gui as p_d_g + +from partIntfHelpers import * +from constants import * +from partition_ui_helpers_gui import * +from storage.partitioning import doPartitioning +from storage.partitioning import hasFreeDiskSpace +from storage.devicelibs import lvm +from storage.devices import devicePathToName, PartitionDevice + +import gettext +_ = lambda x: gettext.ldgettext("anaconda", x) +P_ = lambda x, y, z: gettext.ldngettext("anaconda", x, y, z) + +import logging +log = logging.getLogger("anaconda") + +STRIPE_HEIGHT = 35.0 +LOGICAL_INSET = 3.0 +TREE_SPACING = 2 + +# XXX hack but will work for now +if gtk.gdk.screen_width() > 640: + CANVAS_WIDTH = 490 +else: + CANVAS_WIDTH = 390 +CANVAS_HEIGHT = 200 + +MODE_ADD = 1 +MODE_EDIT = 2 + +class Slice: + """Class representing a slice of a stripe. + + parent -- the stripe that the slice belongs too. + text -- what will appear in the slice + type -- either SLICE or SUBSLICE + xoffset -- start percentage + xlength -- a length percentage + dcCB -- function that is called on a double click. + cCB -- function that is called when one click (selected) + sel_col -- color when selected + unsel_col -- color when unselected + obj -- some python object that is related to this slice. + selected -- initial state of slice. + """ + SLICE = 0 + SUBSLICE = 1 + CONTAINERSLICE = 2 + + def __init__(self, parent, text, type, xoffset, xlength, dcCB=lambda: None, + cCB=lambda x: None, sel_col="cornsilk1", unsel_col="white", + obj = None, selected = False): + self.text = text + self.type = type + self.xoffset = xoffset + self.xlength = xlength + self.parent = parent + self.dcCB = dcCB + self.cCB = cCB + self.sel_col = sel_col + self.unsel_col = unsel_col + self.obj = obj + self.selected = selected + + def eventHandler(self, widget, event): + if event.type == gtk.gdk.BUTTON_PRESS: + if event.button == 1: + self.select() + self.cCB(self.obj) + elif event.type == gtk.gdk._2BUTTON_PRESS: + #self.select() + self.dcCB() + + return True + + def putOnCanvas(self): + pgroup = self.parent.getGroup() + self.group = pgroup.add(gnomecanvas.CanvasGroup) + self.box = self.group.add(gnomecanvas.CanvasRect) + self.group.connect("event", self.eventHandler) + canvas_text = self.group.add(gnomecanvas.CanvasText, + font="sans", size_points=8) + + xoffset = self.xoffset * CANVAS_WIDTH + xlength = self.xlength * CANVAS_WIDTH + + if self.type == Slice.SUBSLICE: + yoffset = 0.0 + LOGICAL_INSET + yheight = STRIPE_HEIGHT - (LOGICAL_INSET * 2) + texty = 0.0 + else: + yoffset = 0.0 + yheight = STRIPE_HEIGHT + texty = LOGICAL_INSET + + if self.selected: + fill_color = self.sel_col + else: + fill_color = self.unsel_col + + self.group.set(x=xoffset, y=yoffset) + self.box.set(x1=0.0, y1=0.0, x2=xlength, + y2=yheight, fill_color=fill_color, + outline_color='black', width_units=1.0) + canvas_text.set(x=2.0, y=texty + 2.0, text=self.text, + fill_color='black', + anchor=gtk.ANCHOR_NW, clip=True, + clip_width=xlength-1, clip_height=yheight-1) + + def shutDown(self): + self.parent = None + if self.group: + self.group.destroy() + self.group = None + + def select(self): + for slice in self.parent.slices: + slice.deselect() + self.selected = True + + if self.group and self.box: + if self.type != Slice.CONTAINERSLICE: + self.group.raise_to_top() + self.box.set(outline_color="red") + self.box.set(fill_color=self.sel_col) + + def deselect(self): + self.selected = False + if self.box: + self.box.set(outline_color="black", fill_color=self.unsel_col) + +class Stripe(object): + """ + canvas -- the canvas where everything goes + text -- the text that will appear on top of the stripe + yoff -- its the position in the y axis where this stripe should be drawn + dcCB -- function that should be called on a double click + obj -- some python object that is related to this stripe + + """ + def __init__(self, canvas, text, dcCB, obj = None): + self.canvas_text = None + self.canvas = canvas + self.text = text + self.group = None + self._slices = [] + self.dcCB = dcCB + self.selected = None + self.obj = obj + + def putOnCanvas(self, yoff): + """ + returns the yposition after drawhing this stripe. + + """ + # We set the text for the stripe. + self.canvas_text = self.canvas.root().add(gnomecanvas.CanvasText, + x=0.0, y=yoff, font="sans", size_points=9) + self.canvas_text.set(text=self.text, fill_color='black', + anchor=gtk.ANCHOR_NW, weight=pango.WEIGHT_BOLD) + + (xxx1, yyy1, xxx2, yyy2) = self.canvas_text.get_bounds() + textheight = yyy2 - yyy1 + 2 + self.group = self.canvas.root().add(gnomecanvas.CanvasGroup, + x=0, y=yoff+textheight) + + self.group.add(gnomecanvas.CanvasRect, x1=0.0, y1=0.0, x2=CANVAS_WIDTH, + y2=STRIPE_HEIGHT, fill_color='green', + outline_color='grey71', width_units=1.0) + self.group.lower_to_bottom() + + # We paint all the container slices first. So the contained slices + # actually show up. + for slice in [s for s in self.slices if s.type == Slice.CONTAINERSLICE]: + slice.putOnCanvas() + # After painting the containers we paint the rest. + for slice in [s for s in self.slices if s.type != Slice.CONTAINERSLICE]: + slice.putOnCanvas() + + # 10 is a separator space. + return yoff + STRIPE_HEIGHT+textheight+10 + + def shutDown(self): + for slice in self.slices: + slice.shutDown() + self._slices = [] + + if self.canvas_text: + self.canvas_text.destroy() + + if self.group: + self.group.destroy() + self.group = None + + def getGroup(self): + return self.group + + @property + def slices(self): + return self._slices + + def addSlice(self, new_slice): + # check to see if they overlap. + for slice in self.slices: + # Container slices and subslices can overlap. + if new_slice.type+slice.type == Slice.CONTAINERSLICE+Slice.SUBSLICE: + continue + + if new_slice.xoffset > slice.xoffset \ + and new_slice.xoffset < slice.xoffset + slice.xlength: + # there is a colission, we cannot add. + return + + self._slices.append(new_slice) + + def getSelectedSlice(self): + for slice in self.slices: + if slice.selected: + return slice + return None + +class StripeGraph: + """ This class will only handle one stripe.""" + + __canvas = None + def __init__(self): + self.stripe = None + self.next_ypos = 0.0 + + def __del__(self): + self.shutDown() + + def shutDown(self): + if self.stripe: + self.stripe.shutDown() + self.stripe = None + + self.next_ypos = 0.0 + + @classmethod + def getCanvas(cls): + if not StripeGraph.__canvas: + StripeGraph.__canvas = gnomecanvas.Canvas() + return StripeGraph.__canvas + + def setDisplayed(self, obj): + # Check to see if we already have the correct obj displayed. + if self.getDisplayed() and self.getDisplayed().obj == obj: + return + + if self.stripe: + self.stripe.shutDown() + + self.stripe = self._createStripe(obj) + self.stripe.putOnCanvas(0) + + # Trying to center the picture. + apply(self.getCanvas().set_scroll_region, self.getCanvas().root().get_bounds()) + + def getDisplayed(self): + return self.stripe + + def selectSliceFromObj(self, obj): + """Search for obj in the slices """ + stripe = self.getDisplayed() + if not stripe: + return + + for slice in stripe.slices: + # There is a part object in each slice. + if not slice.obj: + continue + + if obj == slice.obj and not slice.selected: + slice.select() + break + + def _createStripe(self, obj): + #This method needs to be overridden + pass + + def getSelectedSlice(self): + return self.stripe.getSelectedSlice() + + +class DiskStripeGraph(StripeGraph): + """Handles the creation of a bar view for the 'normal' devies. + + storage -- the storage object + + cCB -- call back function used when the user clicks on a slice. This function + is passed a device object when its executed. + dcCB -- call back function used when the user double clicks on a slice. + drive -- drive to display + """ + def __init__(self, storage, drive=None, cCB=lambda x:None, dcCB=lambda:None): + StripeGraph.__init__(self) + self.storage = storage + self.cCB = cCB + self.dcCB = dcCB + # Define the default colors per partition type. + self.part_type_colors = \ + {"sel_logical": "cornsilk1", "unsel_logical": "white", + "sel_extended": "cornsilk1", "unsel_extended": "white", + "sel_normal": "cornsilk1", "unsel_normal": "white", + "sel_freespace": "grey88", "unsel_freespace": "grey88"} + if drive: + self.setDisplayed(drive) + + def _createStripe(self, drive): + # Create the stripe + drivetext = _("Drive %(drive)s (%(size)-0.f MB) (Model: %(model)s)") \ + % {'drive': drive.path, + 'size': drive.size, + 'model': drive.model} + stripe = Stripe(self.getCanvas(), drivetext, self.dcCB, obj = drive) + + # Free Extended Calculation + # Free slice/partition in the extended partition "free space". If there + # is space between the last logical partition and the ending of the + # extended partition we create a "free space" in the extended part. + # Create the slices. + + # These offsets are where the partition/slices end. 0