From 4cecd1324a556a62212d4ececa7d05de50d42f0d Mon Sep 17 00:00:00 2001 From: Tomasz Sterna Date: Tue, 18 Jan 2011 04:24:57 -0500 Subject: [PATCH] Initial import of anaconda-13.42 source --- 70-anaconda.rules | 56 + COPYING | 339 + Makefile.am | 159 + Makefile.in | 1305 ++ aclocal.m4 | 9366 ++++++++++++ anaconda | 1237 ++ anaconda.spec | 5069 +++++++ anaconda.spec.in | 5069 +++++++ anaconda_log.py | 167 + backend.py | 314 + backend_log.py | 88 + baseudev.py | 92 + bootdisk/Makefile.am | 22 + bootdisk/Makefile.in | 654 + bootdisk/i386/Makefile.am | 25 + bootdisk/i386/Makefile.in | 503 + bootdisk/i386/boot.msg | 5 + bootdisk/i386/grub.conf | 8 + bootdisk/i386/syslinux.cfg | 33 + bootdisk/ppc/Makefile.am | 26 + bootdisk/ppc/Makefile.in | 506 + bootdisk/ppc/bootinfo.txt | 169 + bootdisk/ppc/magic | 81 + bootdisk/ppc/mapping | 27 + bootdisk/ppc/ofboot.b | 74 + bootdisk/ppc/yaboot.conf.3264 | 14 + bootdisk/ppc/yaboot.conf.in | 8 + bootdisk/s390x/Makefile.am | 25 + bootdisk/s390x/Makefile.in | 503 + bootdisk/s390x/generic.ins | 5 + bootdisk/s390x/generic.prm | 1 + bootdisk/s390x/redhat.exec | 9 + bootdisk/x86_64/Makefile.am | 25 + bootdisk/x86_64/Makefile.in | 503 + bootdisk/x86_64/boot.msg | 5 + bootdisk/x86_64/grub.conf | 8 + bootdisk/x86_64/syslinux.cfg | 33 + bootloader.py | 241 + booty/Makefile.am | 23 + booty/Makefile.in | 519 + booty/__init__.py | 52 + booty/alpha.py | 150 + booty/bootloaderInfo.py | 699 + booty/checkbootloader.py | 207 + booty/ia64.py | 38 + booty/lilo.py | 308 + booty/ppc.py | 180 + booty/s390.py | 178 + booty/sparc.py | 128 + booty/util.py | 33 + booty/x86.py | 544 + cmdline.py | 221 + command-stubs/Makefile.am | 23 + command-stubs/Makefile.in | 517 + command-stubs/list-harddrives-stub | 39 + command-stubs/loadkeys-stub | 47 + command-stubs/losetup-stub | 56 + command-stubs/mknod-stub | 58 + command-stubs/raidstart-stub | 57 + command-stubs/raidstop-stub | 44 + compssort.py | 69 + config.guess | 1501 ++ config.h.in | 390 + config.rpath | 666 + config.sub | 1705 +++ configure | 18958 ++++++++++++++++++++++++ configure.ac | 279 + constants.py | 89 + depcomp | 630 + desktop.py | 71 + dispatch.py | 251 + docs/Makefile.am | 29 + docs/Makefile.in | 460 + docs/anaconda-release-notes.txt | 199 + docs/api.cfg | 1237 ++ docs/command-line.txt | 9 + docs/gettext.txt | 56 + docs/install-methods.txt | 137 + docs/lvm_sanity_checks.txt | 13 + docs/making-screenshots | 15 + docs/mediacheck.txt | 25 + docs/rescue-mode | 16 + docs/threads.txt | 106 + errors.py | 159 + exception.py | 133 + firewall.py | 93 + flags.py | 113 + fonts/Makefile.am | 39 + fonts/Makefile.in | 516 + fonts/screenfont-alpha.gz | Bin 0 -> 4893 bytes fonts/screenfont-i386.gz | Bin 0 -> 5507 bytes fonts/screenfont-ia64.gz | Bin 0 -> 3821 bytes fonts/screenfont-ppc.gz | Bin 0 -> 5305 bytes fonts/screenfont-sparc.gz | Bin 0 -> 6455 bytes fonts/screenfont-x86_64.gz | Bin 0 -> 5473 bytes fonts/updfonts | 11 + gptsync/Makefile.am | 35 + gptsync/Makefile.in | 751 + gptsync/README | 41 + gptsync/gptsync.c | 470 + gptsync/gptsync.h | 219 + gptsync/lib.c | 469 + gptsync/os_unix.c | 267 + gptsync/showpart.c | 257 + gptsync/syslinux_mbr.h | 90 + gui.py | 1580 ++ image.py | 325 + install-sh | 520 + installclass.py | 335 + installclasses/Makefile.am | 23 + installclasses/Makefile.in | 519 + installclasses/fedora.py | 132 + installclasses/rhel.py | 160 + installinterfacebase.py | 51 + installmethod.py | 56 + isys/Makefile.am | 55 + isys/Makefile.in | 1000 ++ isys/auditd.c | 135 + isys/auditd.h | 30 + isys/cpio.c | 46 + isys/cpio.h | 102 + isys/devices.c | 217 + isys/devices.h | 42 + isys/eddsupport.c | 339 + isys/eddsupport.h | 28 + isys/ethtool.c | 119 + isys/ethtool.h | 41 + isys/iface.c | 542 + isys/iface.h | 166 + isys/imount.c | 290 + isys/imount.h | 48 + isys/isofs.c | 55 + isys/isys.c | 691 + isys/isys.h | 38 + isys/isys.py | 558 + isys/lang.c | 207 + isys/lang.h | 44 + isys/linkdetect.c | 202 + isys/minifind.c | 77 + isys/minifind.h | 42 + isys/str.c | 125 + isys/str.h | 29 + isys/stubs.h | 44 + isys/uncpio.c | 798 + isys/vio.c | 106 + iutil.py | 1051 ++ iw/DeviceSelector.py | 217 + iw/GroupSelector.py | 620 + iw/Makefile.am | 23 + iw/Makefile.in | 518 + iw/account_gui.py | 148 + iw/advanced_storage.py | 256 + iw/autopart_type.py | 284 + iw/blpasswidget.py | 164 + iw/bootloader_main_gui.py | 244 + iw/checklist.py | 225 + iw/cleardisks_gui.py | 239 + iw/congrats_gui.py | 103 + iw/datacombo.py | 99 + iw/examine_gui.py | 163 + iw/filter_gui.py | 762 + iw/filter_type.py | 80 + iw/iw_gui.py | 53 + iw/kbd_gui.py | 39 + iw/language_gui.py | 134 + iw/lvm_dialog_gui.py | 1464 ++ iw/netconfig_dialog.py | 329 + iw/network_gui.py | 83 + iw/osbootwidget.py | 397 + iw/package_gui.py | 39 + iw/partition_dialog_gui.py | 534 + iw/partition_gui.py | 1868 +++ iw/partition_ui_helpers_gui.py | 439 + iw/pixmapRadioButtonGroup_gui.py | 248 + iw/progress_gui.py | 150 + iw/raid_dialog_gui.py | 877 ++ iw/task_gui.py | 706 + iw/timezone_gui.py | 181 + iw/upgrade_bootloader_gui.py | 209 + iw/upgrade_migratefs_gui.py | 118 + iw/upgrade_swap_gui.py | 209 + iw/welcome_gui.py | 68 + iw/zipl_gui.py | 132 + kickstart.py | 1487 ++ lang-table | 61 + language.py | 280 + livecd.py | 469 + liveinst/Makefile.am | 56 + liveinst/Makefile.in | 807 + liveinst/README | 1 + liveinst/console.apps/Makefile.am | 25 + liveinst/console.apps/Makefile.in | 503 + liveinst/console.apps/liveinst | 3 + liveinst/liveinst | 95 + liveinst/liveinst.desktop.in | 12 + liveinst/pam.d/Makefile.am | 25 + liveinst/pam.d/Makefile.in | 503 + liveinst/pam.d/liveinst | 4 + liveinst/zz-liveinst.sh | 14 + loader/Makefile.am | 116 + loader/Makefile.in | 1531 ++ loader/cdinstall.c | 509 + loader/cdinstall.h | 34 + loader/copy.c | 141 + loader/copy.h | 26 + loader/devices.h | 103 + loader/devt.h | 39 + loader/dirbrowser.c | 198 + loader/dirbrowser.h | 28 + loader/driverdisk.c | 889 ++ loader/driverdisk.h | 54 + loader/driverselect.c | 250 + loader/fwloader.c | 674 + loader/fwloader.h | 35 + loader/getparts.c | 180 + loader/getparts.h | 27 + loader/hardware.c | 201 + loader/hardware.h | 30 + loader/hdinstall.c | 486 + loader/hdinstall.h | 38 + loader/ibft.c | 105 + loader/ibft.h | 45 + loader/init.c | 798 + loader/init.h | 31 + loader/kbd.c | 164 + loader/kbd.h | 27 + loader/keymaps-i386 | Bin 0 -> 12173 bytes loader/keymaps-ppc | Bin 0 -> 12871 bytes loader/keymaps-x86_64 | Bin 0 -> 12173 bytes loader/kickstart.c | 549 + loader/kickstart.h | 53 + loader/lang.c | 398 + loader/lang.h | 41 + loader/linuxrc.s390 | 3106 ++++ loader/loader.c | 2404 +++ loader/loader.h | 193 + loader/loadermisc.c | 149 + loader/loadermisc.h | 33 + loader/log.c | 178 + loader/log.h | 44 + loader/mediacheck.c | 110 + loader/mediacheck.h | 25 + loader/method.c | 537 + loader/method.h | 60 + loader/mkctype.c | 76 + loader/moduleinfo.c | 276 + loader/moduleinfo.h | 78 + loader/modules.c | 410 + loader/modules.h | 43 + loader/net.c | 2113 +++ loader/net.h | 77 + loader/nfsinstall.c | 556 + loader/nfsinstall.h | 40 + loader/rpmextract.c | 324 + loader/rpmextract.h | 45 + loader/selinux.c | 56 + loader/selinux.h | 27 + loader/shutdown.c | 153 + loader/simplemot | 81 + loader/telnet.c | 273 + loader/telnet.h | 40 + loader/telnetd.c | 255 + loader/telnetd.h | 25 + loader/udelay.h | 199 + loader/undomounts.c | 239 + loader/unicode-linedraw-chars.txt | 22 + loader/urlinstall.c | 414 + loader/urlinstall.h | 36 + loader/urls.c | 369 + loader/urls.h | 35 + loader/windows.c | 119 + loader/windows.h | 43 + ltmain.sh | 8406 +++++++++++ m4/gettext.m4 | 381 + m4/iconv.m4 | 180 + m4/lib-ld.m4 | 110 + m4/lib-link.m4 | 709 + m4/lib-prefix.m4 | 185 + m4/nls.m4 | 31 + m4/po.m4 | 449 + m4/progtest.m4 | 92 + m4/python.m4 | 119 + mini-wm.c | 123 + missing | 376 + network.py | 826 ++ packages.py | 359 + partIntfHelpers.py | 354 + pixmaps/Makefile.am | 23 + pixmaps/Makefile.in | 502 + pixmaps/about-to-install.png | Bin 0 -> 10818 bytes pixmaps/checkMark.png | Bin 0 -> 347 bytes pixmaps/config-language.png | Bin 0 -> 3079 bytes pixmaps/done.png | Bin 0 -> 25801 bytes pixmaps/filter-menu.png | Bin 0 -> 456 bytes pixmaps/gnome-lock.png | Bin 0 -> 810 bytes pixmaps/gnome-mouse.png | Bin 0 -> 2744 bytes pixmaps/install.png | Bin 0 -> 4180 bytes pixmaps/network.png | Bin 0 -> 2458 bytes pixmaps/partscheme-all.png | Bin 0 -> 1594 bytes pixmaps/partscheme-custom.png | Bin 0 -> 805 bytes pixmaps/partscheme-freespace.png | Bin 0 -> 1724 bytes pixmaps/partscheme-replace.png | Bin 0 -> 1783 bytes pixmaps/partscheme-shrink.png | Bin 0 -> 1875 bytes pixmaps/root-password.png | Bin 0 -> 4316 bytes pixmaps/upgrade.png | Bin 0 -> 4632 bytes platform.py | 573 + po/LINGUAS | 2 + po/Makefile.in.in | 429 + po/Makevars | 41 + po/POTFILES.in | 137 + po/Rules-quot | 47 + po/af.gmo | Bin 0 -> 45040 bytes po/af.po | 7294 +++++++++ po/am.gmo | Bin 0 -> 58271 bytes po/am.po | 7065 +++++++++ po/anaconda.pot | 6057 ++++++++ po/ar.gmo | Bin 0 -> 98181 bytes po/ar.po | 7063 +++++++++ po/as.gmo | Bin 0 -> 182933 bytes po/as.po | 7070 +++++++++ po/bal.gmo | Bin 0 -> 5202 bytes po/bal.po | 6135 ++++++++ po/be.gmo | Bin 0 -> 18275 bytes po/be.po | 6612 +++++++++ po/bg.gmo | Bin 0 -> 91947 bytes po/bg.po | 7357 +++++++++ po/bn.gmo | Bin 0 -> 95312 bytes po/bn.po | 7557 ++++++++++ po/bn_IN.gmo | Bin 0 -> 262632 bytes po/bn_IN.po | 7064 +++++++++ po/boldquot.sed | 10 + po/bs.gmo | Bin 0 -> 55861 bytes po/bs.po | 7353 +++++++++ po/ca.gmo | Bin 0 -> 118853 bytes po/ca.po | 7539 ++++++++++ po/cs.gmo | Bin 0 -> 155355 bytes po/cs.po | 6866 +++++++++ po/cy.gmo | Bin 0 -> 52147 bytes po/cy.po | 7280 +++++++++ po/da.gmo | Bin 0 -> 153940 bytes po/da.po | 7570 ++++++++++ po/de.gmo | Bin 0 -> 164150 bytes po/de.po | 7110 +++++++++ po/de_CH.gmo | Bin 0 -> 109717 bytes po/de_CH.po | 7663 ++++++++++ po/el.gmo | Bin 0 -> 210393 bytes po/el.po | 7165 +++++++++ po/en@boldquot.gmo | Bin 0 -> 149673 bytes po/en@boldquot.header | 25 + po/en@boldquot.po | 6910 +++++++++ po/en@quot.gmo | Bin 0 -> 149233 bytes po/en@quot.header | 22 + po/en@quot.po | 6898 +++++++++ po/en_GB.gmo | Bin 0 -> 145363 bytes po/en_GB.po | 7349 +++++++++ po/es.gmo | Bin 0 -> 160419 bytes po/es.po | 9459 ++++++++++++ po/et.gmo | Bin 0 -> 43519 bytes po/et.po | 7168 +++++++++ po/eu.gmo | Bin 0 -> 3958 bytes po/eu.po | 6314 ++++++++ po/eu_ES.gmo | Bin 0 -> 952 bytes po/eu_ES.po | 6091 ++++++++ po/fa.gmo | Bin 0 -> 58261 bytes po/fa.po | 7131 +++++++++ po/fi.gmo | Bin 0 -> 151647 bytes po/fi.po | 8388 +++++++++++ po/fr.gmo | Bin 0 -> 167551 bytes po/fr.po | 7796 ++++++++++ po/gl.gmo | Bin 0 -> 6758 bytes po/gl.po | 6338 ++++++++ po/gu.gmo | Bin 0 -> 240079 bytes po/gu.po | 6792 +++++++++ po/he.gmo | Bin 0 -> 136368 bytes po/he.po | 8007 ++++++++++ po/hi.gmo | Bin 0 -> 199888 bytes po/hi.po | 6835 +++++++++ po/hr.gmo | Bin 0 -> 71680 bytes po/hr.po | 7380 +++++++++ po/hu.gmo | Bin 0 -> 157063 bytes po/hu.po | 7195 +++++++++ po/hy.gmo | Bin 0 -> 5916 bytes po/hy.po | 6238 ++++++++ po/id.gmo | Bin 0 -> 76117 bytes po/id.po | 7195 +++++++++ po/ilo.gmo | Bin 0 -> 56701 bytes po/ilo.po | 7397 +++++++++ po/insert-header.sin | 23 + po/is.gmo | Bin 0 -> 100461 bytes po/is.po | 6727 +++++++++ po/it.gmo | Bin 0 -> 141087 bytes po/it.po | 7073 +++++++++ po/ja.gmo | Bin 0 -> 181921 bytes po/ja.po | 6896 +++++++++ po/ka.gmo | Bin 0 -> 13748 bytes po/ka.po | 6278 ++++++++ po/kn.gmo | Bin 0 -> 266683 bytes po/kn.po | 7149 +++++++++ po/ko.gmo | Bin 0 -> 125842 bytes po/ko.po | 6994 +++++++++ po/ku.gmo | Bin 0 -> 372 bytes po/ku.po | 6055 ++++++++ po/lo.gmo | Bin 0 -> 372 bytes po/lo.po | 6055 ++++++++ po/lt.gmo | Bin 0 -> 18150 bytes po/lt.po | 6619 +++++++++ po/lv.gmo | Bin 0 -> 48318 bytes po/lv.po | 7110 +++++++++ po/mai.gmo | Bin 0 -> 179568 bytes po/mai.po | 6956 +++++++++ po/mk.gmo | Bin 0 -> 95111 bytes po/mk.po | 7405 +++++++++ po/ml.gmo | Bin 0 -> 224548 bytes po/ml.po | 7016 +++++++++ po/mr.gmo | Bin 0 -> 241894 bytes po/mr.po | 6768 +++++++++ po/ms.gmo | Bin 0 -> 53335 bytes po/ms.po | 7306 +++++++++ po/my.gmo | Bin 0 -> 372 bytes po/my.po | 6055 ++++++++ po/nb.gmo | Bin 0 -> 96644 bytes po/nb.po | 6679 +++++++++ po/ne.gmo | Bin 0 -> 116466 bytes po/ne.po | 7252 +++++++++ po/nl.gmo | Bin 0 -> 158723 bytes po/nl.po | 7711 ++++++++++ po/nn.gmo | Bin 0 -> 3559 bytes po/nn.po | 6803 +++++++++ po/nso.gmo | Bin 0 -> 49556 bytes po/nso.po | 7390 +++++++++ po/or.gmo | Bin 0 -> 266407 bytes po/or.po | 6856 +++++++++ po/pa.gmo | Bin 0 -> 230649 bytes po/pa.po | 7011 +++++++++ po/pl.gmo | Bin 0 -> 159320 bytes po/pl.po | 6955 +++++++++ po/pt.gmo | Bin 0 -> 160066 bytes po/pt.po | 7623 ++++++++++ po/pt_BR.gmo | Bin 0 -> 154398 bytes po/pt_BR.po | 7091 +++++++++ po/quot.sed | 6 + po/remove-potcdate.sin | 19 + po/ro.gmo | Bin 0 -> 71654 bytes po/ro.po | 7039 +++++++++ po/ru.gmo | Bin 0 -> 204957 bytes po/ru.po | 6931 +++++++++ po/si.gmo | Bin 0 -> 230803 bytes po/si.po | 7136 +++++++++ po/sk.gmo | Bin 0 -> 158224 bytes po/sk.po | 7551 ++++++++++ po/sl.gmo | Bin 0 -> 69491 bytes po/sl.po | 7361 +++++++++ po/sq.gmo | Bin 0 -> 102520 bytes po/sq.po | 7464 ++++++++++ po/sr.gmo | Bin 0 -> 201163 bytes po/sr.po | 7129 +++++++++ po/sr@latin.gmo | Bin 0 -> 154888 bytes po/sr@latin.po | 7142 +++++++++ po/stamp-po | 1 + po/sv.gmo | Bin 0 -> 115071 bytes po/sv.po | 7148 +++++++++ po/ta.gmo | Bin 0 -> 192146 bytes po/ta.po | 6964 +++++++++ po/te.gmo | Bin 0 -> 240650 bytes po/te.po | 6777 +++++++++ po/tg.gmo | Bin 0 -> 24702 bytes po/tg.po | 6569 ++++++++ po/th.gmo | Bin 0 -> 171569 bytes po/th.po | 7174 +++++++++ po/tr.gmo | Bin 0 -> 55499 bytes po/tr.po | 7279 +++++++++ po/uk.gmo | Bin 0 -> 201411 bytes po/uk.po | 6903 +++++++++ po/ur.gmo | Bin 0 -> 60202 bytes po/ur.po | 7247 +++++++++ po/vi.gmo | Bin 0 -> 41936 bytes po/vi.po | 7133 +++++++++ po/zh_CN.gmo | Bin 0 -> 127754 bytes po/zh_CN.po | 6583 ++++++++ po/zh_TW.gmo | Bin 0 -> 109606 bytes po/zh_TW.po | 6856 +++++++++ po/zu.gmo | Bin 0 -> 41017 bytes po/zu.po | 7293 +++++++++ product.py | 63 + py-compile | 146 + pychecker-false-positives | 26 + pycheckrc-for-anaconda | 223 + pyudev.py | 225 + rescue.py | 496 + run_test.py | 108 + runpychecker.sh | 59 + scripts/Makefile.am | 28 + scripts/Makefile.in | 547 + scripts/buildinstall | 250 + scripts/buildinstall.functions | 142 + scripts/getkeymaps | 69 + scripts/getlangnames.py | 47 + scripts/makestamp.py | 90 + scripts/maketreeinfo.py | 113 + scripts/makeupdates | 269 + scripts/mk-images | 1136 ++ scripts/mk-images.alpha | 131 + scripts/mk-images.efi | 258 + scripts/mk-images.ia64 | 172 + scripts/mk-images.ppc | 179 + scripts/mk-images.s390 | 60 + scripts/mk-images.sparc | 172 + scripts/mk-images.x86 | 182 + scripts/pyrc.py | 27 + scripts/scrubtree | 56 + scripts/upd-bootimage | 71 + scripts/upd-initrd | 43 + scripts/upd-instroot | 1119 ++ scripts/upd-kernel | 77 + scripts/upd-updates | 112 + security.py | 87 + simpleconfig.py | 88 + sitecustomize.py | 22 + sortedtransaction.py | 87 + storage/Makefile.am | 25 + storage/Makefile.in | 722 + storage/__init__.py | 2240 +++ storage/dasd.py | 220 + storage/deviceaction.py | 376 + storage/devicelibs/Makefile.am | 23 + storage/devicelibs/Makefile.in | 520 + storage/devicelibs/__init__.py | 0 storage/devicelibs/crypto.py | 193 + storage/devicelibs/dm.py | 130 + storage/devicelibs/edd.py | 97 + storage/devicelibs/lvm.py | 419 + storage/devicelibs/mdraid.py | 236 + storage/devicelibs/mpath.py | 228 + storage/devicelibs/swap.py | 125 + storage/devices.py | 3526 +++++ storage/devicetree.py | 2271 +++ storage/errors.py | 150 + storage/fcoe.py | 158 + storage/formats/Makefile.am | 23 + storage/formats/Makefile.in | 520 + storage/formats/__init__.py | 403 + storage/formats/disklabel.py | 351 + storage/formats/dmraid.py | 114 + storage/formats/fs.py | 1473 ++ storage/formats/luks.py | 352 + storage/formats/lvmpv.py | 156 + storage/formats/mdraid.py | 124 + storage/formats/multipath.py | 95 + storage/formats/prepboot.py | 64 + storage/formats/swap.py | 186 + storage/iscsi.py | 331 + storage/miscutils.py | 57 + storage/partitioning.py | 1662 +++ storage/partspec.py | 66 + storage/storage_log.py | 32 + storage/udev.py | 505 + storage/zfcp.py | 441 + tests/Makefile.am | 24 + tests/Makefile.in | 655 + tests/__init__.py | 29 + tests/storage/Makefile.am | 24 + tests/storage/Makefile.in | 655 + tests/storage/__init__.py | 0 tests/storage/devicelibs/Makefile.am | 22 + tests/storage/devicelibs/Makefile.in | 452 + tests/storage/devicelibs/__init__.py | 0 tests/storage/devicelibs/baseclass.py | 55 + tests/storage/devicelibs/crypto.py | 126 + tests/storage/devicelibs/lvm.py | 230 + tests/storage/devicelibs/mdraid.py | 107 + tests/storage/devicelibs/mpath.py | 29 + tests/storage/devicelibs/swap.py | 66 + text.py | 692 + textw/Makefile.am | 23 + textw/Makefile.in | 519 + textw/complete_text.py | 65 + textw/constants_text.py | 68 + textw/keyboard_text.py | 67 + textw/language_text.py | 70 + textw/netconfig_text.py | 285 + textw/network_text.py | 33 + textw/partition_text.py | 321 + textw/progress_text.py | 131 + textw/statusline_text.py | 78 + textw/task_text.py | 28 + textw/timezone_text.py | 131 + textw/upgrade_bootloader_text.py | 183 + textw/upgrade_text.py | 258 + textw/userauth_text.py | 107 + textw/welcome_text.py | 47 + textw/zipl_text.py | 102 + timezone.py | 76 + ui/GroupSelector.glade | 394 + ui/Makefile.am | 25 + ui/Makefile.in | 504 + ui/account.glade | 278 + ui/adddrive.glade | 241 + ui/addrepo.glade | 1016 ++ ui/anaconda.glade | 446 + ui/autopart.glade | 344 + ui/blwhere.glade | 378 + ui/cleardisks.glade | 300 + ui/create-storage.glade | 416 + ui/detailed-dialog.glade | 171 + ui/fcoe-config.glade | 159 + ui/filter.glade | 1431 ++ ui/iscsi-config.glade | 501 + ui/lukspassphrase.glade | 446 + ui/netconfig.glade | 538 + ui/network.glade | 197 + ui/tasksel.glade | 423 + ui/zfcp-config.glade | 276 + upgrade.py | 301 + users.py | 307 + utils/Makefile.am | 34 + utils/Makefile.in | 774 + utils/filtermoddeps | 25 + utils/geninitrdsz.c | 62 + utils/genmodinfo | 76 + utils/mapshdr.c | 59 + utils/mk-s390-cdboot.c | 284 + utils/modlist.c | 146 + utils/readmap.c | 119 + utils/snarffont.c | 97 + utils/trimpciids | 80 + vnc.py | 437 + xutils.c | 268 + yuminstall.py | 2029 +++ 628 files changed, 755974 insertions(+) create mode 100644 70-anaconda.rules create mode 100644 COPYING create mode 100644 Makefile.am create mode 100644 Makefile.in create mode 100644 aclocal.m4 create mode 100755 anaconda create mode 100644 anaconda.spec create mode 100644 anaconda.spec.in create mode 100644 anaconda_log.py create mode 100644 backend.py create mode 100644 backend_log.py create mode 100644 baseudev.py create mode 100644 bootdisk/Makefile.am create mode 100644 bootdisk/Makefile.in create mode 100644 bootdisk/i386/Makefile.am create mode 100644 bootdisk/i386/Makefile.in create mode 100644 bootdisk/i386/boot.msg create mode 100644 bootdisk/i386/grub.conf create mode 100644 bootdisk/i386/syslinux.cfg create mode 100644 bootdisk/ppc/Makefile.am create mode 100644 bootdisk/ppc/Makefile.in create mode 100644 bootdisk/ppc/bootinfo.txt create mode 100644 bootdisk/ppc/magic create mode 100644 bootdisk/ppc/mapping create mode 100644 bootdisk/ppc/ofboot.b create mode 100644 bootdisk/ppc/yaboot.conf.3264 create mode 100644 bootdisk/ppc/yaboot.conf.in create mode 100644 bootdisk/s390x/Makefile.am create mode 100644 bootdisk/s390x/Makefile.in create mode 100644 bootdisk/s390x/generic.ins create mode 100644 bootdisk/s390x/generic.prm create mode 100644 bootdisk/s390x/redhat.exec create mode 100644 bootdisk/x86_64/Makefile.am create mode 100644 bootdisk/x86_64/Makefile.in create mode 100644 bootdisk/x86_64/boot.msg create mode 100644 bootdisk/x86_64/grub.conf create mode 100644 bootdisk/x86_64/syslinux.cfg create mode 100644 bootloader.py create mode 100644 booty/Makefile.am create mode 100644 booty/Makefile.in create mode 100644 booty/__init__.py create mode 100644 booty/alpha.py create mode 100644 booty/bootloaderInfo.py create mode 100644 booty/checkbootloader.py create mode 100644 booty/ia64.py create mode 100644 booty/lilo.py create mode 100644 booty/ppc.py create mode 100644 booty/s390.py create mode 100644 booty/sparc.py create mode 100644 booty/util.py create mode 100644 booty/x86.py create mode 100644 cmdline.py create mode 100644 command-stubs/Makefile.am create mode 100644 command-stubs/Makefile.in create mode 100755 command-stubs/list-harddrives-stub create mode 100755 command-stubs/loadkeys-stub create mode 100755 command-stubs/losetup-stub create mode 100755 command-stubs/mknod-stub create mode 100755 command-stubs/raidstart-stub create mode 100755 command-stubs/raidstop-stub create mode 100644 compssort.py create mode 100755 config.guess create mode 100644 config.h.in create mode 100644 config.rpath create mode 100755 config.sub create mode 100755 configure create mode 100644 configure.ac create mode 100644 constants.py create mode 100755 depcomp create mode 100644 desktop.py create mode 100644 dispatch.py create mode 100644 docs/Makefile.am create mode 100644 docs/Makefile.in create mode 100644 docs/anaconda-release-notes.txt create mode 100644 docs/api.cfg create mode 100644 docs/command-line.txt create mode 100644 docs/gettext.txt create mode 100644 docs/install-methods.txt create mode 100644 docs/lvm_sanity_checks.txt create mode 100644 docs/making-screenshots create mode 100644 docs/mediacheck.txt create mode 100644 docs/rescue-mode create mode 100644 docs/threads.txt create mode 100644 errors.py create mode 100644 exception.py create mode 100644 firewall.py create mode 100644 flags.py create mode 100644 fonts/Makefile.am create mode 100644 fonts/Makefile.in create mode 100644 fonts/screenfont-alpha.gz create mode 100644 fonts/screenfont-i386.gz create mode 100644 fonts/screenfont-ia64.gz create mode 100644 fonts/screenfont-ppc.gz create mode 100644 fonts/screenfont-sparc.gz create mode 100644 fonts/screenfont-x86_64.gz create mode 100755 fonts/updfonts create mode 100644 gptsync/Makefile.am create mode 100644 gptsync/Makefile.in create mode 100644 gptsync/README create mode 100644 gptsync/gptsync.c create mode 100644 gptsync/gptsync.h create mode 100644 gptsync/lib.c create mode 100644 gptsync/os_unix.c create mode 100644 gptsync/showpart.c create mode 100644 gptsync/syslinux_mbr.h create mode 100755 gui.py create mode 100644 image.py create mode 100755 install-sh create mode 100644 installclass.py create mode 100644 installclasses/Makefile.am create mode 100644 installclasses/Makefile.in create mode 100644 installclasses/fedora.py create mode 100644 installclasses/rhel.py create mode 100644 installinterfacebase.py create mode 100644 installmethod.py create mode 100644 isys/Makefile.am create mode 100644 isys/Makefile.in create mode 100644 isys/auditd.c create mode 100644 isys/auditd.h create mode 100644 isys/cpio.c create mode 100644 isys/cpio.h create mode 100644 isys/devices.c create mode 100644 isys/devices.h create mode 100644 isys/eddsupport.c create mode 100644 isys/eddsupport.h create mode 100644 isys/ethtool.c create mode 100644 isys/ethtool.h create mode 100644 isys/iface.c create mode 100644 isys/iface.h create mode 100644 isys/imount.c create mode 100644 isys/imount.h create mode 100644 isys/isofs.c create mode 100644 isys/isys.c create mode 100644 isys/isys.h create mode 100755 isys/isys.py create mode 100644 isys/lang.c create mode 100644 isys/lang.h create mode 100644 isys/linkdetect.c create mode 100644 isys/minifind.c create mode 100644 isys/minifind.h create mode 100644 isys/str.c create mode 100644 isys/str.h create mode 100644 isys/stubs.h create mode 100644 isys/uncpio.c create mode 100644 isys/vio.c create mode 100644 iutil.py create mode 100644 iw/DeviceSelector.py create mode 100644 iw/GroupSelector.py create mode 100644 iw/Makefile.am create mode 100644 iw/Makefile.in create mode 100644 iw/account_gui.py create mode 100644 iw/advanced_storage.py create mode 100644 iw/autopart_type.py create mode 100644 iw/blpasswidget.py create mode 100644 iw/bootloader_main_gui.py create mode 100644 iw/checklist.py create mode 100644 iw/cleardisks_gui.py create mode 100644 iw/congrats_gui.py create mode 100644 iw/datacombo.py create mode 100644 iw/examine_gui.py create mode 100644 iw/filter_gui.py create mode 100644 iw/filter_type.py create mode 100644 iw/iw_gui.py create mode 100644 iw/kbd_gui.py create mode 100644 iw/language_gui.py create mode 100644 iw/lvm_dialog_gui.py create mode 100644 iw/netconfig_dialog.py create mode 100644 iw/network_gui.py create mode 100644 iw/osbootwidget.py create mode 100644 iw/package_gui.py create mode 100644 iw/partition_dialog_gui.py create mode 100644 iw/partition_gui.py create mode 100644 iw/partition_ui_helpers_gui.py create mode 100644 iw/pixmapRadioButtonGroup_gui.py create mode 100644 iw/progress_gui.py create mode 100644 iw/raid_dialog_gui.py create mode 100644 iw/task_gui.py create mode 100644 iw/timezone_gui.py create mode 100644 iw/upgrade_bootloader_gui.py create mode 100644 iw/upgrade_migratefs_gui.py create mode 100644 iw/upgrade_swap_gui.py create mode 100644 iw/welcome_gui.py create mode 100644 iw/zipl_gui.py create mode 100644 kickstart.py create mode 100644 lang-table create mode 100644 language.py create mode 100644 livecd.py create mode 100644 liveinst/Makefile.am create mode 100644 liveinst/Makefile.in create mode 100644 liveinst/README create mode 100644 liveinst/console.apps/Makefile.am create mode 100644 liveinst/console.apps/Makefile.in create mode 100644 liveinst/console.apps/liveinst create mode 100755 liveinst/liveinst create mode 100644 liveinst/liveinst.desktop.in create mode 100644 liveinst/pam.d/Makefile.am create mode 100644 liveinst/pam.d/Makefile.in create mode 100644 liveinst/pam.d/liveinst create mode 100755 liveinst/zz-liveinst.sh create mode 100644 loader/Makefile.am create mode 100644 loader/Makefile.in create mode 100644 loader/cdinstall.c create mode 100644 loader/cdinstall.h create mode 100644 loader/copy.c create mode 100644 loader/copy.h create mode 100644 loader/devices.h create mode 100644 loader/devt.h create mode 100644 loader/dirbrowser.c create mode 100644 loader/dirbrowser.h create mode 100644 loader/driverdisk.c create mode 100644 loader/driverdisk.h create mode 100644 loader/driverselect.c create mode 100644 loader/fwloader.c create mode 100644 loader/fwloader.h create mode 100644 loader/getparts.c create mode 100644 loader/getparts.h create mode 100644 loader/hardware.c create mode 100644 loader/hardware.h create mode 100644 loader/hdinstall.c create mode 100644 loader/hdinstall.h create mode 100644 loader/ibft.c create mode 100644 loader/ibft.h create mode 100644 loader/init.c create mode 100644 loader/init.h create mode 100644 loader/kbd.c create mode 100644 loader/kbd.h create mode 100644 loader/keymaps-i386 create mode 100644 loader/keymaps-ppc create mode 100644 loader/keymaps-x86_64 create mode 100644 loader/kickstart.c create mode 100644 loader/kickstart.h create mode 100644 loader/lang.c create mode 100644 loader/lang.h create mode 100644 loader/linuxrc.s390 create mode 100644 loader/loader.c create mode 100644 loader/loader.h create mode 100644 loader/loadermisc.c create mode 100644 loader/loadermisc.h create mode 100644 loader/log.c create mode 100644 loader/log.h create mode 100644 loader/mediacheck.c create mode 100644 loader/mediacheck.h create mode 100644 loader/method.c create mode 100644 loader/method.h create mode 100644 loader/mkctype.c create mode 100644 loader/moduleinfo.c create mode 100644 loader/moduleinfo.h create mode 100644 loader/modules.c create mode 100644 loader/modules.h create mode 100644 loader/net.c create mode 100644 loader/net.h create mode 100644 loader/nfsinstall.c create mode 100644 loader/nfsinstall.h create mode 100644 loader/rpmextract.c create mode 100644 loader/rpmextract.h create mode 100644 loader/selinux.c create mode 100644 loader/selinux.h create mode 100644 loader/shutdown.c create mode 100755 loader/simplemot create mode 100644 loader/telnet.c create mode 100644 loader/telnet.h create mode 100644 loader/telnetd.c create mode 100644 loader/telnetd.h create mode 100644 loader/udelay.h create mode 100644 loader/undomounts.c create mode 100644 loader/unicode-linedraw-chars.txt create mode 100644 loader/urlinstall.c create mode 100644 loader/urlinstall.h create mode 100644 loader/urls.c create mode 100644 loader/urls.h create mode 100644 loader/windows.c create mode 100644 loader/windows.h create mode 100755 ltmain.sh create mode 100644 m4/gettext.m4 create mode 100644 m4/iconv.m4 create mode 100644 m4/lib-ld.m4 create mode 100644 m4/lib-link.m4 create mode 100644 m4/lib-prefix.m4 create mode 100644 m4/nls.m4 create mode 100644 m4/po.m4 create mode 100644 m4/progtest.m4 create mode 100644 m4/python.m4 create mode 100644 mini-wm.c create mode 100755 missing create mode 100644 network.py create mode 100644 packages.py create mode 100644 partIntfHelpers.py create mode 100644 pixmaps/Makefile.am create mode 100644 pixmaps/Makefile.in create mode 100644 pixmaps/about-to-install.png create mode 100644 pixmaps/checkMark.png create mode 100644 pixmaps/config-language.png create mode 100644 pixmaps/done.png create mode 100644 pixmaps/filter-menu.png create mode 100644 pixmaps/gnome-lock.png create mode 100644 pixmaps/gnome-mouse.png create mode 100644 pixmaps/install.png create mode 100644 pixmaps/network.png create mode 100644 pixmaps/partscheme-all.png create mode 100644 pixmaps/partscheme-custom.png create mode 100644 pixmaps/partscheme-freespace.png create mode 100644 pixmaps/partscheme-replace.png create mode 100644 pixmaps/partscheme-shrink.png create mode 100644 pixmaps/root-password.png create mode 100644 pixmaps/upgrade.png create mode 100644 platform.py create mode 100644 po/LINGUAS create mode 100644 po/Makefile.in.in create mode 100644 po/Makevars create mode 100644 po/POTFILES.in create mode 100644 po/Rules-quot create mode 100644 po/af.gmo create mode 100644 po/af.po create mode 100644 po/am.gmo create mode 100644 po/am.po create mode 100644 po/anaconda.pot create mode 100644 po/ar.gmo create mode 100644 po/ar.po create mode 100644 po/as.gmo create mode 100644 po/as.po create mode 100644 po/bal.gmo create mode 100644 po/bal.po create mode 100644 po/be.gmo create mode 100644 po/be.po create mode 100644 po/bg.gmo create mode 100644 po/bg.po create mode 100644 po/bn.gmo create mode 100644 po/bn.po create mode 100644 po/bn_IN.gmo create mode 100644 po/bn_IN.po create mode 100644 po/boldquot.sed create mode 100644 po/bs.gmo create mode 100644 po/bs.po create mode 100644 po/ca.gmo create mode 100644 po/ca.po create mode 100644 po/cs.gmo create mode 100644 po/cs.po create mode 100644 po/cy.gmo create mode 100644 po/cy.po create mode 100644 po/da.gmo create mode 100644 po/da.po create mode 100644 po/de.gmo create mode 100644 po/de.po create mode 100644 po/de_CH.gmo create mode 100644 po/de_CH.po create mode 100644 po/el.gmo create mode 100644 po/el.po create mode 100644 po/en@boldquot.gmo create mode 100644 po/en@boldquot.header create mode 100644 po/en@boldquot.po create mode 100644 po/en@quot.gmo create mode 100644 po/en@quot.header create mode 100644 po/en@quot.po create mode 100644 po/en_GB.gmo create mode 100644 po/en_GB.po create mode 100644 po/es.gmo create mode 100644 po/es.po create mode 100644 po/et.gmo create mode 100644 po/et.po create mode 100644 po/eu.gmo create mode 100644 po/eu.po create mode 100644 po/eu_ES.gmo create mode 100644 po/eu_ES.po create mode 100644 po/fa.gmo create mode 100644 po/fa.po create mode 100644 po/fi.gmo create mode 100644 po/fi.po create mode 100644 po/fr.gmo create mode 100644 po/fr.po create mode 100644 po/gl.gmo create mode 100644 po/gl.po create mode 100644 po/gu.gmo create mode 100644 po/gu.po create mode 100644 po/he.gmo create mode 100644 po/he.po create mode 100644 po/hi.gmo create mode 100644 po/hi.po create mode 100644 po/hr.gmo create mode 100644 po/hr.po create mode 100644 po/hu.gmo create mode 100644 po/hu.po create mode 100644 po/hy.gmo create mode 100644 po/hy.po create mode 100644 po/id.gmo create mode 100644 po/id.po create mode 100644 po/ilo.gmo create mode 100644 po/ilo.po create mode 100644 po/insert-header.sin create mode 100644 po/is.gmo create mode 100644 po/is.po create mode 100644 po/it.gmo create mode 100644 po/it.po create mode 100644 po/ja.gmo create mode 100644 po/ja.po create mode 100644 po/ka.gmo create mode 100644 po/ka.po create mode 100644 po/kn.gmo create mode 100644 po/kn.po create mode 100644 po/ko.gmo create mode 100644 po/ko.po create mode 100644 po/ku.gmo create mode 100644 po/ku.po create mode 100644 po/lo.gmo create mode 100644 po/lo.po create mode 100644 po/lt.gmo create mode 100644 po/lt.po create mode 100644 po/lv.gmo create mode 100644 po/lv.po create mode 100644 po/mai.gmo create mode 100644 po/mai.po create mode 100644 po/mk.gmo create mode 100644 po/mk.po create mode 100644 po/ml.gmo create mode 100644 po/ml.po create mode 100644 po/mr.gmo create mode 100644 po/mr.po create mode 100644 po/ms.gmo create mode 100644 po/ms.po create mode 100644 po/my.gmo create mode 100644 po/my.po create mode 100644 po/nb.gmo create mode 100644 po/nb.po create mode 100644 po/ne.gmo create mode 100644 po/ne.po create mode 100644 po/nl.gmo create mode 100644 po/nl.po create mode 100644 po/nn.gmo create mode 100644 po/nn.po create mode 100644 po/nso.gmo create mode 100644 po/nso.po create mode 100644 po/or.gmo create mode 100644 po/or.po create mode 100644 po/pa.gmo create mode 100644 po/pa.po create mode 100644 po/pl.gmo create mode 100644 po/pl.po create mode 100644 po/pt.gmo create mode 100644 po/pt.po create mode 100644 po/pt_BR.gmo create mode 100644 po/pt_BR.po create mode 100644 po/quot.sed create mode 100644 po/remove-potcdate.sin create mode 100644 po/ro.gmo create mode 100644 po/ro.po create mode 100644 po/ru.gmo create mode 100644 po/ru.po create mode 100644 po/si.gmo create mode 100644 po/si.po create mode 100644 po/sk.gmo create mode 100644 po/sk.po create mode 100644 po/sl.gmo create mode 100644 po/sl.po create mode 100644 po/sq.gmo create mode 100644 po/sq.po create mode 100644 po/sr.gmo create mode 100644 po/sr.po create mode 100644 po/sr@latin.gmo create mode 100644 po/sr@latin.po create mode 100644 po/stamp-po create mode 100644 po/sv.gmo create mode 100644 po/sv.po create mode 100644 po/ta.gmo create mode 100644 po/ta.po create mode 100644 po/te.gmo create mode 100644 po/te.po create mode 100644 po/tg.gmo create mode 100644 po/tg.po create mode 100644 po/th.gmo create mode 100644 po/th.po create mode 100644 po/tr.gmo create mode 100644 po/tr.po create mode 100644 po/uk.gmo create mode 100644 po/uk.po create mode 100644 po/ur.gmo create mode 100644 po/ur.po create mode 100644 po/vi.gmo create mode 100644 po/vi.po create mode 100644 po/zh_CN.gmo create mode 100644 po/zh_CN.po create mode 100644 po/zh_TW.gmo create mode 100644 po/zh_TW.po create mode 100644 po/zu.gmo create mode 100644 po/zu.po create mode 100644 product.py create mode 100755 py-compile create mode 100644 pychecker-false-positives create mode 100644 pycheckrc-for-anaconda create mode 100644 pyudev.py create mode 100644 rescue.py create mode 100755 run_test.py create mode 100755 runpychecker.sh create mode 100644 scripts/Makefile.am create mode 100644 scripts/Makefile.in create mode 100755 scripts/buildinstall create mode 100755 scripts/buildinstall.functions create mode 100755 scripts/getkeymaps create mode 100644 scripts/getlangnames.py create mode 100755 scripts/makestamp.py create mode 100644 scripts/maketreeinfo.py create mode 100755 scripts/makeupdates create mode 100755 scripts/mk-images create mode 100644 scripts/mk-images.alpha create mode 100644 scripts/mk-images.efi create mode 100644 scripts/mk-images.ia64 create mode 100644 scripts/mk-images.ppc create mode 100644 scripts/mk-images.s390 create mode 100644 scripts/mk-images.sparc create mode 100644 scripts/mk-images.x86 create mode 100644 scripts/pyrc.py create mode 100755 scripts/scrubtree create mode 100755 scripts/upd-bootimage create mode 100755 scripts/upd-initrd create mode 100755 scripts/upd-instroot create mode 100755 scripts/upd-kernel create mode 100755 scripts/upd-updates create mode 100644 security.py create mode 100644 simpleconfig.py create mode 100644 sitecustomize.py create mode 100644 sortedtransaction.py create mode 100644 storage/Makefile.am create mode 100644 storage/Makefile.in create mode 100644 storage/__init__.py create mode 100644 storage/dasd.py create mode 100644 storage/deviceaction.py create mode 100644 storage/devicelibs/Makefile.am create mode 100644 storage/devicelibs/Makefile.in create mode 100644 storage/devicelibs/__init__.py create mode 100644 storage/devicelibs/crypto.py create mode 100644 storage/devicelibs/dm.py create mode 100644 storage/devicelibs/edd.py create mode 100644 storage/devicelibs/lvm.py create mode 100644 storage/devicelibs/mdraid.py create mode 100644 storage/devicelibs/mpath.py create mode 100644 storage/devicelibs/swap.py create mode 100644 storage/devices.py create mode 100644 storage/devicetree.py create mode 100644 storage/errors.py create mode 100644 storage/fcoe.py create mode 100644 storage/formats/Makefile.am create mode 100644 storage/formats/Makefile.in create mode 100644 storage/formats/__init__.py create mode 100644 storage/formats/disklabel.py create mode 100644 storage/formats/dmraid.py create mode 100644 storage/formats/fs.py create mode 100644 storage/formats/luks.py create mode 100644 storage/formats/lvmpv.py create mode 100644 storage/formats/mdraid.py create mode 100644 storage/formats/multipath.py create mode 100644 storage/formats/prepboot.py create mode 100644 storage/formats/swap.py create mode 100644 storage/iscsi.py create mode 100644 storage/miscutils.py create mode 100644 storage/partitioning.py create mode 100644 storage/partspec.py create mode 100644 storage/storage_log.py create mode 100644 storage/udev.py create mode 100644 storage/zfcp.py create mode 100644 tests/Makefile.am create mode 100644 tests/Makefile.in create mode 100644 tests/__init__.py create mode 100644 tests/storage/Makefile.am create mode 100644 tests/storage/Makefile.in create mode 100644 tests/storage/__init__.py create mode 100644 tests/storage/devicelibs/Makefile.am create mode 100644 tests/storage/devicelibs/Makefile.in create mode 100644 tests/storage/devicelibs/__init__.py create mode 100644 tests/storage/devicelibs/baseclass.py create mode 100644 tests/storage/devicelibs/crypto.py create mode 100644 tests/storage/devicelibs/lvm.py create mode 100644 tests/storage/devicelibs/mdraid.py create mode 100644 tests/storage/devicelibs/mpath.py create mode 100644 tests/storage/devicelibs/swap.py create mode 100644 text.py create mode 100644 textw/Makefile.am create mode 100644 textw/Makefile.in create mode 100644 textw/complete_text.py create mode 100644 textw/constants_text.py create mode 100644 textw/keyboard_text.py create mode 100644 textw/language_text.py create mode 100644 textw/netconfig_text.py create mode 100644 textw/network_text.py create mode 100644 textw/partition_text.py create mode 100644 textw/progress_text.py create mode 100644 textw/statusline_text.py create mode 100644 textw/task_text.py create mode 100644 textw/timezone_text.py create mode 100644 textw/upgrade_bootloader_text.py create mode 100644 textw/upgrade_text.py create mode 100644 textw/userauth_text.py create mode 100644 textw/welcome_text.py create mode 100644 textw/zipl_text.py create mode 100644 timezone.py create mode 100644 ui/GroupSelector.glade create mode 100644 ui/Makefile.am create mode 100644 ui/Makefile.in create mode 100644 ui/account.glade create mode 100644 ui/adddrive.glade create mode 100644 ui/addrepo.glade create mode 100644 ui/anaconda.glade create mode 100644 ui/autopart.glade create mode 100644 ui/blwhere.glade create mode 100644 ui/cleardisks.glade create mode 100644 ui/create-storage.glade create mode 100644 ui/detailed-dialog.glade create mode 100644 ui/fcoe-config.glade create mode 100644 ui/filter.glade create mode 100644 ui/iscsi-config.glade create mode 100644 ui/lukspassphrase.glade create mode 100644 ui/netconfig.glade create mode 100644 ui/network.glade create mode 100644 ui/tasksel.glade create mode 100644 ui/zfcp-config.glade create mode 100644 upgrade.py create mode 100644 users.py create mode 100644 utils/Makefile.am create mode 100644 utils/Makefile.in create mode 100755 utils/filtermoddeps create mode 100644 utils/geninitrdsz.c create mode 100755 utils/genmodinfo create mode 100644 utils/mapshdr.c create mode 100644 utils/mk-s390-cdboot.c create mode 100644 utils/modlist.c create mode 100644 utils/readmap.c create mode 100644 utils/snarffont.c create mode 100755 utils/trimpciids create mode 100644 vnc.py create mode 100644 xutils.c create mode 100644 yuminstall.py 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 0000000000000000000000000000000000000000..b12001b59c1f93fdd4d3f292ae65fa240939f3cc GIT binary patch literal 4893 zcmd7L`9Bkm!vJvi+~g+aQ<4(pwp^=J&QPwoLRwPtRehIkHGbk)~r?9jE0D~!n*AR|_d$1^z649@>c^#oTnbr?CR z|K`_K&*-l3P&<1=`ZQY)x1WCV*TOr4yv`1`_eA+#Ew}k?x2yzjBaiU^72VAaIo-{w z+IQVvPAr&$8kNwSXAhnBMn*>V29}PUh3(8QFHbBlFSk3_Uj6m+YkN!2ujhOf`&+ww zo7BM^?XgKOtbh0E8gO9Q`9;}XmC^py4BB{PshUUap3Jsceal)|M!O?mHf?T<>R*eT z&77}6Z$4Lt{+F_@e@SQ;p!STW&Z5q5*GET_ z$p-RR1LT&$OVA=DV*&5cg7bXGScWm&L*IQyu)K)GUa$DbV5bB_7sq_f;@PZw2Dmwk z-3ibLCl9JNCwGOeJ3Z2Slf3d0P%&v66MGyQWfyM}dAoE=CiEgl{x5tltDhI;A~y42YRb-5Lw;-F!#onfV0E%Np9|@k zoJKI4;)O43%I`035!@MZ7-zjF2G1Sk2MFM1jwI5?*=X}Wlls{&%Jq4hG+5N6ovSgW zs2HV0a%%7B|MD>+bK~&sA+`P-5Urg`YwV@TX23Ka-K3epJ8e4}JX5FE%*XO;Uhyh8 z{4P7+XK)$~F^D{fNc%7()ce!38N8W6_|8c)7!U|p8D1Bfv%OsV1NF(8u98M=nWG{C zjR))Zn`b58n)(c!1!`qvC4H>0#rq6GA<1~BU9$xdHfavsCH8OJLd!sZ(hR|Gj4#52T+6wZiGHwQ@a=#Zep zVH0!Y&-N%5-mf@%C?e$kfN3BjEC)4vf+U}GtLV5~Xnr$yMdEM#3)Ea)k{5dcbaa)< zqXjQhhlh-pmWVQ7-wRipi>>yeNtafzLUo67_oC<`_Y3R)Ym?nVl#_0E?+NSDt5Jnr zm>cHv0^2;P=cRQQyW=+7C|k{$G5$7^tj_E?ktWojHSoh!rhV{8QlS0(jN>I1TrBE- zv`@g`htRdJp=BxUtti+9-B~p4h<0IW)qbY@q`O`8_d=HQS&rzLrt-0JYXEcRAp5Td zSlW-yu_>)H=+${6I&e?v4Y^vX5k?CG=-Pn9`7@$M<(jBbjZ-(^yn`ylAwp4T2 z9oZbB(=~h!&jaskCBcL2iQDkbG zd``Xh^fTm4nBeI@w>V)_yV^I8-ec}Wui_uJ$?}ob7HFw!?KOo2NB*R>r>Lsye2L5h z=mMu;c~t?Kq@5Z4sT#nl(pG!e291NC<{bgL}^WBm1L>8^;epf0BCMtV=K3T^@6}1pJrzTEWCY zU^VWX9;G6|4|s8HK=M!zc?J2jP)nd{WQFd?{ycH~h13O+6JhhK7qlSz1o{^#i9lc$%In+T!EgIi*UOVW!nOIhtBd^pCZmLAb1q zqY8tg?KfvfRc0j@N}(W>!|?99`<5Ev(F&xZ%&N}Ep?o#>4uzF8?^QG|VmrCA{!nfx zVbW~7D#g(7`mOgfR~!?sM$IS6Rc03s-^jYFX}?){69VK+swBm+$Fj$A#3J~FgmE$g zxVVEtHuLMonMwta8cdAzZNn<=_4;-9{f}B+1Ft?^Bl!5L7b&7*OsXv&Pkh6kxTSpb zMbYA!jbeR$*;mZ>_reCg>RFCunJGNwO|p(38p_Qy$M*fQFmB2wNO!GE$9RW4jR|Vg z>?rNpcut@HkxSE@Xq?VVfq;V2ngz*|HN2SPR3G)z*|Se(wP8Om+qt#BFUe0%Hbom=(pPQe;bltVh1rUSs_7_O~;)x%aX7AbgtP&v=6qg&(H3CFwT6pl@?yT zeXJYIqkmekd)OcD*7hnl>gC!8omM|Jb-n{CLdW>12T4g8cWv1%kvVefj+aGwC6A)q z!cylST6zr}Gs;C_pD3`{XRwS-yP9_=x!ZU(_zO13ZPM(%t7} z`v0tpJzQ>;kzG8$%h?%n9K%a=IypR(8Id&3udO0Rjv~?2&`9 zbZum`Z&|3}jxL?m13@Nd!Kz4J3tf?`W{koQ1YYn)F^v<%%FvD8m+UzWuuSWeXAl55 zBCl(hqJ$O4gx;da9y8l>b%evn);ln)5C;91!h*dN!q^e9(6vqBsRhzlQDNZjC*I0u z%%1PN)fUAR>y_bZUm}lrGwJC1 zQEmEqR>(5PTKhf1WPOkPceJZNLK9Q~Vs1ih5BJE>Otzbu95o~CJF?aEHKXx}9IG(( z*H$W{B(I-?QxE+X<^Kg{EfX~x9=91)ehX?a@hExsPv^&Hc@=A&{OO;@d(d0eK*^uk zZUr`DhI_9rS4+c3c$&vHrteqw>qUmybXUEYP`s7Vs1-V{^p|S8B>XSUq; z$v%p&y7)F2jmk;T@%0RZrkqSlP6W{Yz0BhD_~~7QY;IgB<=yze$@l>Cc%1Myi=+hr<%V&$J7!W%r6CP0?S8EfgD2F#h<^`}PD`tBrTXMPO2w z6BVk_CNS}vp^a7ecMp~|Szu23m~K2d)~l1Q?b891imQBYwN1{*rvrtCSETNyD(R^a z*Bkk^u{Q3ahfiG#pAC!_3_W;K-Pt`pjlgOE>Pao>UxvD+#!u2KZ+GJR%fePIDtADQVoBCl#EU8vO(T42W68XhXkAi7S>+9G zb478?Z_op2@1lxFX|`yYG7YV#)jdzwuZmaS?p2hHaUn^AOh_(xoB+qThMWcXQS+&& zPq&VAXhm*oKJS%JwBBJPCQof3*qb$;_wYyzJH;*9c=&5Y z&594ZWGyoP+Irn7ktn@(9U%_(E2^E_WeV9sh;?}Xig47R#X8>I z>b0+C1GstpHiPqXkIfS(Gqa!vK>$7X?Lwm<9@7!E#h4i?$Z$67OCyhW{6xGQTx z%DdMnBsXGPXEqz@SJnEur1ikT?|8BjTm8UnJbkcs9EcXm`Z zjj~IS5o3)V6i&Fz&^RrzzQF-xH=9sA1I+${On}a)BXEcELnM6nyBV-I{!sh&2rY)A zu^p>Vr5_%lMZ`6tT)^6riG_KzeZP2`G|&jlcyN(#z7R!RlOgP$f<%gfu9%_#EPuP5 zqiJfKq&;tJZbGs@kMZalcg0&W^7LH62_nNS86XlbswUja-7204%;k}KJkLN5lo&a< z^0MW5qz>lj%4ABIl!IM_v*B;=0Mncb=gk_Kpw(#?{CT%H>H|ux|&~J`Ph*be5>!yJ)QeForjYc zzjlta7PW3m%q#4C3YR+8m!=u{z2XCBR DhG(MS literal 0 HcmV?d00001 diff --git a/fonts/screenfont-i386.gz b/fonts/screenfont-i386.gz new file mode 100644 index 0000000000000000000000000000000000000000..fa88be123eab64806ef59a2ec1b77ce104daba3f GIT binary patch literal 5507 zcmd6o_dgVlki{q%gietXHL@bDZX9sxNxgTOC5Jp4Ta{DYNz)NbE8ww)6Z zWj%2=*6Y_j9tn$-WV^CrfTF*I2&C`z$#*7!+$JXcuZ6A{Ej*u)Nao#5Zfg!`CalCs zzk7ZM5nXNXSKe&%L}u^$OadovZD_}ShLBisg^}dzq ziOt-j8@|~i4f>45fQPo)@Ia;+hf=W`r&?4V^(PGOikO>!ukhA_2nO7Oe^jz zVyJ+|z&Qg@Cz;iC+5{0fr-xsPfg4r~$KQk3{9fgdX(Z7cDNaB7&o2eInOq|Oi}hp% zVffU=1=Ht9UJF}Im3JcVDK1lRmREyiJnv=eT+GhnmEt}tFr^NmtB9-|SMB!Du{R6@ zUOyLpF1YVfi`n4#E94~1ABrg8F!S%Z?E_Ibm}6#s4VpUm>+9_>^)(0O`U;|yR5YXq ziqfu_pkI!`fb3#w0B3RTE%8{551AdHwr;(19vv~!hR7{kdM%kXb}Bx)$H6gXXJzwW zMDMY%e<8hF!LqoU7#||Pa98a&>~N#Lw>@Tv`K_Try;Pk7TG@|!?j`WHW&zx`apa-j zHBa)}Zx2H>`Sh#Y3W?ky{u{TSEK4{2`4DcQeO`L4x`{B@0$ezp+B6try%^A`VUG-^ z+jf4Nb?p3U8`dGrxI?1Yv5l3do&XN6nd*N4vpBw8Mh5t5!^j0Y#a2OdRm=U>y`UIzJ!zlYR~ zY+CO7te>?CpT64QZ2wPx;c{z>yyrGMVdr=-DKo)nhkQ^57@N&m!S|e| z^+!#lZ`wdY`ek``*I^^{C7o(INIs%MaxbzrQ&pZCFC|2VaJCu%WfYbS#B3Htyx zLEx(^UPN6P<0rF9H5PV7;R%I8O(eI}2ix>RZ_LP_A)LgHuuNnr>}Ke(si%}CGCOx4 zv&9HaoF+zXr3x4$>6b6%z8(n(5UPoC3z`9*A$p92~FgWFxj< zz04#C{WG;m_i@D{i0_SQJz(VG>h2D9Vy+EyZFk>m2okG&Iy#IKe#;dR*Mz9f-j(~$%1#0@sEQST_uL|Js=%X`cY>j$XBm z_-=Q-S^L58VsQD(+=J zXR5&j>ZAW)ymyq)v_qBy1Q$OS7`vLM?-qTr+xZJ`+s%@C{Om(N)pANeD3KtS->`l+ z3Y55R;ZPjJrXAjBWAo87X+=pLKo%E0jiouAlu9p+iZp@83{dRM_8{0^!{|*ELbHVw4*wmCBSHoPg6|q;pIs?)l*n*bx1jFxC+6M@kl*rS*1T zv6avrISRe$(5r-!{+SeTdvWO~ps@+9I&IhAagdbJPfc*LGlPEHoI~r&E>C9dLDWI3dY>Jc+~*B~G@?^s6F57G?Fa_qNZ*Skd0@N^|4kk`_39$VeOfF; z9Wzpt2J2jOOLs0B?N@p!+EC}S&OB?XdGxqEwD+j~h@xErdLJS3*w}%>75-agccv&~9EHC7Y>hIt?S#b`tncb)W|8s;-2CXD`W=oM2lBcIiz>YtJ(Q|n9Wh4IZ9RDb0%oxposSw_ToubOZ4&POdMW=cHOLITXoQBVNVV2U|8qHYi$4L!+E!=Wb-hqB}a2h;jvsy>a>i34tphU z3#+#@-WM>$>VrfdGA;(O7J~J7caC=ILm9}KO10^A6sAg^t!6Ea(Yp9F$o7BXe@7g% z|JV0^7SmWSVGNz#LmTM}&~3Lwue$`8OCdp(B{NH?*#knUCyD80ho-PAa#;(-ztv;p z*<*Uzx&9=2ed0lqqao%low(|SR8phe^#}PnMwOiB^qE5u3ZIQJe5aKCoutR<18HOk z0o~Hy^552;Zr8gfY)i)GTdW$&vd|NWJr zVgj%b(N)?6j{a$H#hOHIb_#w}m|s%Xw}d|gE+L?n}V+FJ}B zp)SbBC6P<0mb&dY!Z7DQuTf(@*Q)&0%n&*{k=Y!{vzvWZ z+L|qb`1E0$+BS(9{vdk;Xkn4^t)G*Zyi3;3n-}Y(z2(j zjD=SO?l2b2Vb4)9whHZU&>&%Z~B>q>{~Ds)xKpxWWu%L_bl|9`Z{u7SRwbd7?7 zQY>gR4#6Fn>4%z)7A%VSB;6wV<-YSgmZxb|43%e{rZ>IMtjbV)E7f8c@ewz4; zBC`k_9>VNwi65}BWWw%K2;7&x;ky{!a{A*QTNLigeB3!y%{sUg+w+ZFnub}N42)iG zll}n5DdlycL^8*IObMjWb0JMnOjQ3h&98jR{2J?*tQzyA_E0CC*@i&Fn=vXi+j9o_ zd(8Nl&Mr0Z0mTch@-YCueKTdfEY>Dt%IPVqEkyBH!jn7BX7AD&;~5;|h}JPrk)q$_ zpCTWg%6R->Hm-;4P3U`dX!)D_XNAsTCgFX60E^%uRF!2USS z&)-iPE(n%5Z*_P0o%&1p(MQ4RmWAMd_S$LkWBb7zxn_^DjjT81vQ4jAr&<+k1S{s6 zswr5Nj@{2TnF!{}z2`MD6MSZ3xaEn(`p8l6@hks~%tw8{e$fgRa=xEAT&$j{`~|yl zy7hf^Va0}2E3*1aL@;o{Ky%bGSZ%?mY1B_0ajr8RxGl>48dqk+Ik zFOdgmo<4#no&er^FfvBu16trl4jbOO6NDgQ%r3Do(tj@kmXnRE(BvJ3K|?kG5DG zp^TgB51Z58#T24^M42CK$D}UN#F<8rjYXoY<6X>SX{IT=c(FW}l@C}ggFia?#6Ta( z0&v=M)%gz80kLNQ@%EwaGjBY+kk0m@9+HD~(iX2hc(A(wSPh@Y%!lIl9x6yx>>og{ zJ=yI|%{KPtXAga(B2ox&*@5gO`TfN)tT*xo0PN6Td+x^zL2NiO-rM-Q0^_jJ~^f2SYR>-HW16r#>VQFW<- z7Xb<4`PVynjz^tpUB>R+1jOx9Px~gKjgGm*U+6rOgO`4ono_`BGOgKpD#-QJ(-S1< zjrNn7U31WDMQ+ONoH@OZ6%xaiPlpRccG01t?$k|zB`NP%$g-?2>Ed8~dj1K$#K+VV zkv*kQ;V3T6-kZ%Q^^%+lg#6=GTzRQy{gdRIIkT6o?9VtE@qS#gg9=o}RxLr00rs69 zM`^1tq%Bf5U%WD*YWXe_)fIf&657{hV7qW0aqw40oyO5Yfh{O-a7%@zcC#LYY}(hcfu>y?3qtmHNtCfXs;TE~}nqD&ebXerud`s^nU(X#jou{r}V6|LkKRu?i!doNk!mWdsl1R<$ z_NQ_tK(C&Q)4@NSKS}9xu00!&&;eCSh~U~m#0N_3CeoLT1(zjjR1%@LK|qeMfp^W^ zyExk~)0@ZIWlV$62)C`;W^tJxYAYA=`0@K(we7v76&Y-?Y!ZFhy|M@2f)s8>3b!B?^iEqth3>D;TCL2MEPLxp4!H86 zVy*WyKBa|qms7bvCx-R%4H|uR3e-;P&6a=k=Vgw*T2N7D_>hE#YO~HcFn%9k*z9 zqZSYx7(XcIVz!;)P}I$R>qTB_7Qyf78jM??(vgbjG@-rqxW>c4xlmxX@UJqgnNY6lpDAR&1J#KZv-@+vV+G!kd7RAZi^TYM#N zl6%rS%ZvEVi}YrlnDvd;bLi-nYa3w*ig>j6X*6tdi(8ubA+w?1w0NcnCx1d z4(!%X>=qN@zSb8%H!UhJga|oK7HPQWTbDHLdwJSFy{6anod@on-`I~@m%p=u2ivC( z{5XVQsbz?Zo+^S(l5*Que))>6lKHOsot~IX`uMxxr)Ewx`g>C~b;xG1d5vjHXpBHF z=x8!nC5xfc7yM^bwf)Y80ffW+uJ6v=dLlv;+~EFU1{z3Y_p&)F!jP{EPai+_e@1q8 A3;+NC literal 0 HcmV?d00001 diff --git a/fonts/screenfont-ia64.gz b/fonts/screenfont-ia64.gz new file mode 100644 index 0000000000000000000000000000000000000000..ef0569c666a3794b79c061cee376723d65151167 GIT binary patch literal 3821 zcmd7O`#%$ks3xr|U~F1gd> zdQR9}hHANtvYFgkE@PMP=llEj5BNSF&!1oK$K$P%DK0*vBWoul3=jSL?%n8nG0_Nv z@Zbw(0_%my2VT<(!)UGV$VgA|%&mt4{U)l1s^Wq}QnFr`1nuR4P88X=BNWAoY{3A> zh^U*9QQ@_5S8DMyfw$BrK53{~r#^WYa2+gIF!^Puu*CGri{Hq-taa!*9sZGZ&90D) zq|YC2uyM)cp0hu~hCok$JKJw0GqMqyQ>TpC)`h|)?a|>#KR-X@+qEQ+5#fDPQ)g3C zQ?zpAXzjai9)3Tg4Bd-?RAA^|YdyG%&;kP@jNR1e5y3i0rL(1TsH7#)p7qFo`eGYobME0|i8_e-T6#js_Nu@ekgEHP zvc%~^V$*4mT59_2weGE%0!A>{ruZ^vkm>P=t>j;{KI?J0jH6&Z3zdj46O`IecbhpEQRpR z-+Ddx&=xqaf0)$Dowa>qA0&>UtzYuGfC9uLC7dCo?O3wExOKv;d@B-GGO5ryh^qU=!$<44a#j@`RV@3*pt`|< zZ(a;PUVYBSWp7Bhb$x#&A%z!>TAH?#69;^Y7 zM4RQkor1%YQ2rg|Y@ zF^{zU9%Rby)0@=-HSn5;h~@b&98qh+dsvh8b0|k?O^eJPXS~BBIqP9aaP49iO4+*vMNt9Fx32lsc{EE7gpyh5A*)mLJ>EkO|Q`So>~wPg9= zJo+iS(Gj^~7#gk}D>J{58NxEyP2)xFj@l<4Zc5M4kD`b6xO*#p&($Je{7Ep|9!Q^MA-f!H(+|}GDRNDgNpB~~S z_sTN&$sVuZzu(ag_-L1dJu1JlX=hI5=My^YxF{G7G&;tbGxUAmo5$NbmbIr+a)@3Q z?B($exr}eJ9_*-@)Ip|SrFT+Dj?=IAvrc7WFR|`GcHl@@%%zqW_(!Am2tr{ zG(5nn;#kJG!rb_ovwto@{#=fEG9iYF)jlW(iQZNf4K_+seN=8C*>80ES?Ccb{D}&q zQ=u}0vKDgAw6N2U8!Z%<@1GtD70MnyY9R|SKAIOR=RPFwI%rn>X!Uifr!k9?gxgGdXN*jo=f+GT*WkaPEst_0gDF5bA6HnJVcIdUvk#O1!m`@ZR` zOQ$d)vWm<89C=WGT)Q&(zHsyaITnzTTC@%3NVF|_e@}bUeug*{b6+eab0PR-N)Bi- zryY<$gS0E{Ee3smcG!6O_@X`MsjkH zpQL{c9PSIKEU73!B{_I{ z=RlyEVPgRU%yAUN3woq7E@4#tWz3%|JILaXdOT%Z#+>~o6ZhQC;VfR(Bc0)ZQS+B= zc^>3oj6dm-#c;x?f0NyLp5kDSKkJdpxQaRFFK3=!;^2YT@%Zl|M&p}YT>3|cV7#$M zA;T4;=?`d0pLdAGTYBIa?ij6afSp%ONe-a0WXofl%cr|RwG}4baubjJ{@W0$s}V|i z!h(xn$1801a$>9ON^TY~M#l5R$35>eR_jRE$>uO8a=E2#>2$!cBte5!N78zMOl85g zdXh*zknBS+i6k!9@Zn^G$KaWok;z(g* z8hqJy*MEfFm_7S^r`siRF)l=%{;wtpGghn@U=g5e32pt&Y|MgJWi(e|S@*078s^%S zXNqmDkvEZ`+S?NiHNFUa7e#}F+vW*(Y%}qJGaqUW;$~X313qvyYrFJNB)v&swF5&LawsJ`Vv~193${HC@y#e^kIc;;xlv1oQG!gkIZ+<58=@AC~<#E?ulpUrz&HEC-;{ zNR+Hnrn{p&{ypU}apy-&&wfA*PjMwCrwr&^b#aFlgJSQMbGlUcLD?yPBoC$xPFzYh zejVK_^X;klPIbB2!?dYOR>h(d;+<#ISHbelkDMlMpK`krCTaUnTW?W3V?3Ah#~5)U z>rF61KRGLuu*|sdg6>z;J3l;i)hbuPICt78JwL<*m8#?A>KQKYRv}b;+06(SfcsQm z;<6X4S^LW@V{#R7WNc}MTvowwwZf8?f=DYt_uz)cN#gWzmr>e0>E}GDVjE%SR%TJ( zEAmHfWfIr^^5Z8*1n_*7nVd}qm~jLEKgbTXi!Qm!>P9yg%QCV{SPxMyLb!NC% z)rL!GAQ7|Uq1ty94BuFI18tsteiZ(pMfLH!M_L|%*E7~ds;~RyZK#^!Bt|9w3USv6 zy?3Lx*eTl*hsF9)MvLvo#tJEY#f}DJU**l3-@Z!sh=5BgU@a*_#o(whB!yHAS$8Xz zHU?f7GcB;f9{blE=%EESj=OM_8FIc{%`~SI%chL!mu;-vkSH9fdDc;!gjMl0WC55_ ziZ{O8vPZcd-7)u>EML)O!roW$G_MJdnwyPdCRLlCixv%<4cr3DvOG`ymE!cQa4qb0 zM@d?d2BN(q)#>PmSi5?z%W; zg47%FCuLFRKy}Lubs`aGCt(9t5xe1~l$aea5>y5eIzCyQ3YvnYKGSA+T?f(wnHzQG z%A{n@YP+m zIxWr0nqdUfl7i1y(@0{7cGlUf`*!$T(y-Sr%A__7m=$kVUV($Go}inaTI0ORj*FkN zpvNGJo1YC?Cx<_3&dE-&s|FMsG92h&EaQP=UNLd%4h)3*!FlW+&kW08nY+dDu1yuA zJ%YnzzHLFQdEqJt7-?E*c6rP{Qq!K**P#e$DTjjVl8)tZj8n|?=<*hZvM#=)e8o&x zevl!vSypaVFK(M5ZEHelcJ}j3nye-Wm{W>3{ zW1NE9h1UC~!&J^Y4{wRK)7r*0x)mI0(+q|ANAt7?B+8Zq3<+){}xaMs)(fx~no9lnxNeBx34-J)$@Bjb+ literal 0 HcmV?d00001 diff --git a/fonts/screenfont-ppc.gz b/fonts/screenfont-ppc.gz new file mode 100644 index 0000000000000000000000000000000000000000..036064c76d7ad03d81171cccb854c601822ca5e1 GIT binary patch literal 5305 zcmd6q`9BkmSFyj86YzVB%G$lv2JrczVH5_ z@6SqWQ3{lUUbV%eW7pXUO0SOZypALOWOEZAqeW$%YVk{g%HO5-Ptu)#^*)$~c%}9X zug3dvqcGdr3Ww7ScKkbN&FiorSFKRjw0jW+sjkSy+b_P#C-f!sUM|mTF3R)(;H6SewtYAv_I!5=qdj2^$@e(TpszI3;@2HS)MYs(N)>eOPn^*#FSxlV5K%@` zn&bzpSW9B=+e%@4(wgU_;Ai()6>cAfbO{ClL=*{azt7NFGiha{t+H!o;ZLH#E?=9V zeYKXsfHJZB#Qla0n{;m8-#~=BwDg%n`+a?te*BaN+ecng_w@jUtHkUow|{}?32J@r zo@|h{LOemm*~#(!G1r49*`6S;S?bKcRbX0^5s~+}Z#UTY{Jkahg%*Nw;Z5pN#Zh>J z3-K5!XQ@F-RBVjs+|F;k!~_8KkJ~R!$iz51lsn~%s=b;KY5=Wux`tUfWHi$K-{M5 z3v?D{ObG_;^zBYhC63*WEoYD{!Htf?yYhj;CevJN9K4@!si%6Z(C*gwUVhEu%9bjM zp8k})`yO!}XBfqKLlx8PaE3mwi;W*$18WU)N?FsG^*d$Ot8)=u1SQffG8xma>alG8 zC)SvJ7rL!uXoSk_QQ>!O>GI=QyD3A=*4^OFGd$`G4Y2uq%N~c%+U*}ShH?ngTb!%e zsJ|5?B_B70vCUU%!Iqs(`H%)r%(B~q)^i-CPbcHxMV(owtHl1e?NHX&0)gr>CZvE5 zT0~&?)}`wL5wsUF=HFTJZ(sF$Gu{*0_x_Mx?@lrEQ5~#J$=+ziH+HPLlgWUEK}O>A?JGeTiwP1xgz zM;Cuw9u+Zhm8b6}xrKQk?xMJttTpVJ-Ph1etALx7VjP(^F>UQ7OAX^FNLa&<-2zPsf`2psi3fkP>WY zax<6enTOr<&!A%n{W8r5ofW4s_bady7(xKXsRGK)ro_^B{j=u8!(%u6|Lixq(oYF+ z22gtC{$D;*qA^?TN|#6XpmFf--)zM#8KpgOI#**k3sXD9vcJv!#>KvTl))~F>ei+t z{jg9Mv|rDLjC}1{TH%;k^LnEA|LL_#C#CPd4}&K?)At&{ntwqXG@y%zH2Cud=;3|M zWmPksz$o6?^(@jnOOI?qOy9R{fkoK8=yx?2BBkq{Kg;gVNJVU>t;gTK%)ft#%X>Dl4!gW_5L~aei zq=BV5P3EK#=9m>GWKeYQp+YyGA$sY) zlaQMOv#beHrUBPqA2WU-cCCP+H`&a>{4n+bn=FrA*=K{`nAk)}7V3px(P;7+1X{~X zU}emI>h844-eTv>Ow5YMS zx-@5j%e&3{v(0_m&XZy(g84(tVObIO-;WSp?aXmhIPI@^wR{|Vhjnhou%UAr-q}f0 zvfV42QMga!SgP-9O_Dh!XZUY1q>N{9)b}%@{mi+AhyC0dD7uhya~5*l1@~SY;Uw>0VWVXifRGAaoHZ&*>G8(=}=~ipe%UzjkVnJXFBW zTH%!^1O~61ZgQ1%3tI)y7ocN&sj9#XM7mrF5fe66So7ECRoW0sIG17b9f898wE#3@ zP5#wGFT@62T$&ZY?EN&#tCihn?}U$YxVc+Ftum_}TykW?9E<&F6yG{qVfm2Gj(dY; z*}_SpzPh&rdUh>i(HO1XiI>R+dVz(g$DykyXYXzUyXox0=)!bIpK=H^e#n{haR&z_ z{?Ud@Jik1%Q$YbJPlgc;n6zloU*~o7*Te7`HNH6nsF4CU+aBG=*H6u~Xod6kmRXhW za(#mD)A{*pP{Y}8J2G$B2OQdYdM)v{22@Q-n!;`+uZMpbeM4%v2~3J(3$dJ-HJUUf zc776p>aO5f56N;Z)S8SUH!~nT>>N5)`@abuN#+EGPYoAL;SH&oHAvnFNZVwiRWUrZ zIIg(8&|nJ>v^_^7#Rz(F_o41xhX3p9ZUc>Q7!R4d64pr*r0y&&!35ShX?xWg$bwBgr7QQoIR*ir5dKDnq6;?MPfq^JDJIrutT$FW@| zfDEzJoK#Nuu(~ZBkrb!tay48P6X$R5pC}}2HL&(z5vR) zyhNY-H_RlO3^EoZ8k0obzHti7z3TRIQ+7T*^W6S8P`}u1#+opUIVK0y7zgskZg^?B z{928L`eMWfOldP$%s)7hhuv#E^I4YZ_3uv_S3`=w#}qguB+jSXV7Imp&*=P={>Hm> zyg_q;cdtTp7M4aKGzGsUv_R(O*qoK3FqC)Pm0*oZC2iu@8ayQ}Zu^r&ZS(g4T|L^Y zwAuLUOzo)jr%n)qvbOqqg1xhdY{pY4&)q=#^F;QE9p681ygHlaswz>g*e0l&`kLc6 zn&)y6w&YTbgvW8qf__v53NRZf0|fU^CwP;q3;KcMSdHif)!~;kNbOc4kvK3=ueH8= za(#%_!|?jHvrd&%{djru6KWSjtA4QwuotT9aMMGPGC)Mpv==g)uE{sWW4``>G= zDZsY|>#cA2r(V`&$Xe2|>9Ls2j?mxlmH|G1XO9@(hYy(kKT0wmb@=c-!I-m_g7pE~ zm%k1-8ibgd65qWlm6Wr0rdqj;5*npqNBQC_WzEN22 z^=CMXT#Kwg3ESepMwxXR_9!n}KCY#kFDhB3;*Lb0SF*IWPxc!F8m9Q+ z>W&pJ1xPE|sg68&HTv>e=8C;sfrTpWQuO5lD}1yee&j^7N`YmBVcyZk_@KZu1?J?j zC(*`gUnEz}+Fq!Cvst~@mablMCE%+2KhC50XeoD_iP4>CVYSbS6qUA|(9doZ-L`^_ zPaukVTOM-EC|YCInuQbIK5b+ngFCl<(a0(jC%b*#$kGm{y$v+7#^NNm&vsg9;I3?6 zzCh8rZxyp`*lBv{Y1Z7AW{T3&?6GZSJdV9B7LNVD^Xc|Ra zGM`E`zSB3BS1e-#LBfHc+O=QxvNi~$AW+y73qb4IQ@Z&mZQK;>s&%!~xwTYggrmPfp2! z69i#L)nKod17{8u{xE~dgLQuuU2d>S#3e>Vq){cS(s>BS9`el*F6erUaK^9a3SvdzJPpB>YYOX zQ|H~|Z9i1QrD7!}x+7bpjgx4f1w-SpURQR7LX)jp#B=BUTm;?BwdH%V!xbx&L*}m_ zYh2M@d&p%FQXc6zqJ&NjSrA16ex#sWoT4NVey%=Be#MxW$anJ1*Io7{QGg+BM&)t^%TBPK? zp=;^Wiz@+3@-0fNx#u&_NDq%NyVNJMNZwboEhaOp1Fmc=Z-ie8m8=*|Ns9pOzC~SL zE_v!Dj$B|)<{_v(COgZheTEʹBR?oQ+2UUP7_IbjGMRDhXUtRHV3dHO*@lBb$< zf@Ju`%I?F`yoTwEwG0H_LC$-PJ z%*e64D)-~qSV`a@>~wT@Qp-3+ zUqU9Oee-akueN4-Y9u8!f|9ya2s_}k`1Zlz-3NoC4{Q!>^yh$Sei0%4^RWC3*-e*f zwSfkfeqln?ygXQ$m!{fPrJrqmwy#S6i0T43KYc4g!fC+)EMBtkyY_%xf=Qi-{QQX) znZlRsMc0`&{pO8FumiH-w3@_#A9HTIpxRw%c^1N)RYFi z6ReVWvM5Lqd^@J!Ajl2uF$GH`N|Vc#kJ}qDEF2TJ#+mw%58fZB&sEE`z^*%e_6`8B z>Sc^w7p(9Uit_isN%F7Ph^L`12kA*!Jb&k9Anu{&d4%>#$u|xl}UHCk0-#I4aKs{DX>h#<0Pllc~FoDxKd)D(k)QhneN*S3V z#$ElwfJNDa%y8HFhn14CiFTsKKlOwL8ADzEyAM7IqGV!UhaE(BDF|om-uomDk*@4= z78=?Onzy+n;hm3^uvii`3E&dPFs}f>eb(avZvWj%!tLEMJRsXmcvCz0w606iW>l~y+-p5O zgK+p!eafQ5mE<9UCTEOz(D{D*qB9|!LnKOJ>IN8Y!3W^}j-F{vpz3<7MV8YAo@d4n zKvmstR+B>Y_r3)z0rudbZC4Xv?gqhv^D{RYb3ZGhK<6N$;oBmeaP2|ZdJ@8g?Om~B zBK7|F%|x%`R#;~*7gHn>DNpCq+}^a6TPDGTL$4*Cevy1ytnG!ocu0lfs?e*p)Y5=L za^S4eq$g8-c*DSd@7S#Kr+?AHSsT`7KE*v^ibq(N+^xp(=U3pxsiu?*=OPB)&EMSL zEJoSXsU9I6^i9uC&&uv#XQ_Sf40UG3=60Tu@W_2d`bYPJkNtv+5|-G7){QI)ITZk6 zom_P2=?F?T%7`qw`uf^%mWuxPd70eBTeyzElqjVYcWeDoagS^L&*gVVzUbHx^6CkV zF@BX-gW*#%PqyU$xHfX%g=Du9@z~gwa>>k}jy=;s*VOmS!fjx>X3 z07BDmYYwwe^~Vj!+#=1(INUbP--`KIfwi%*1~YQ&RydzM`(nzMxKX!^D|urh4sRtD zV-{MM-ww7ef2}uN&Uan1%gSH-_0`+kMKb-q)Q#N9i@d9KmphRt^&kL#iR2G~89q7b z4g}|&_n-I%Nb*H>h!Iu7x%tgT8sr_vdMNn|?piqKiyNW2sllxrHcLF+? z=3#Fro&Z100bLn>e2ySy#s&p6z5uRLo$fRdsfF0*#`FR1eLY~x5|{sBW%kY}I=!t5 zf=;vq9VylCet!O;n|cDP*EKQCnfCkzk@gD5D3r05rhiQgbv3p9u#~1FG|(7I$)<5< zGlhRXx`;(tgHB@QJ*!_-e4m#Hq!i@|fL`?Cyak$w zQ)O~EG0!*GOMN?5_DBc4$&Q650*w=O=a2-7OsR~%R=`g#s0BGZA|m365!q91w_NZu zh1jiB?au3DVVTfthyIk>B+Vf(T0Bc6Yq<6^XY-krmxd|WSAhpGYG)H(bInm}Df z{9+N*i-nz*Fn47dIf>v`cP!4>koX0RNyFlrj>9r22h!9HmOoEDg5L85=z%?bAHRU@ ze`Cg55v>$A+z+Hf>fp;y4`xVGJlR@rw%68l+(v4P*(HXbenO=H(XzYT{wH>^MBSa}S*Sq1C)J1O6$a=K+ED_F z;Y4h5!~{^G>|cm<5J~=$(sWGD#J;LvGAWP4LOo=Ki@+>e%KU%DK%JXs=gn`30U~ zhseBe4eh4bm_jt4)u2c>tQCK+6eeEmuJ;!}1nY=&mgHIN^bznwx)PD3GwBSb#@8Xp z_h!egkQ+(D^vc_KGd$bZXHK;!v{`KHu$*Ll%J8c8uOG~V3XE@OEn%`S@gpDCRaDCH z@v+T5y)}=&QXSW=M{4Ju>OmU9O@hh)Y$DIK1MQ5rN1Ss7&~#-TIU)$w`^3uf_FP5w zesIHW74;iVVk_#@hq%XszRXUQEjZ$jnvm!|Oj8JXFbV1vIkZ=_(1v8F_6>vk4!c_j z~8K`>npWWT3hme^8NO&Ypm`Pw1sl8K)?|ycW$Vi3w=Tx$B2HBWXpV4HD+?6>KuzUB zq4c5t-V`(5OQ{V2f|`O!R_RT6JoWFSUme~&HsG+g&T*_JQvN4^qr!jdfW{%{ZY1?} z-9ovD98QwHjtJxMj(-1J+}jU>K0;0D)dz=1RTH}*clmPJ zH2H-1ZkZGcKSsZIn>>ChhI%X9x=wCTn_vT$O9Jr6M zxnqw(vT;XU{O=J{TZL}mo5(tQgmTgJp|nS)j>-ACvVZ?Mk?G9tSNuk6>|L2#uMdcK zX!IaPZqEZrHDExW%mv;C-M&C-Ucd{oT4%P|1^y|_KCf1Fs^I+g*Iu}dzcsZB?|}yZ zvYoe_ixm#K5d*b#2BLrG_owLYkzMnyniAwt)Hzp)-2@&nZ^pZ;JR5`3&0fpT&rt_o z+et+E{Tw1yegt8)Dk}maAlC*f=)v8Kn!1WpUH3f;2UN%yQG6jg@t=S^&JKdCp-(GO z<&IsoD`&-?toA2Y+XkXo&mc@7!{RHSjW3w0E6W)Z3fjLSo!@EN)K!JCX4E^Y&r}s~zTnD+d6i z_l5vrP{6M!ay2iN++_=0kvh$O&? z7N@!G8jPg7Ua3HyxQSDF?Gm+FV|GCOfsr$mBHy5|57_F^UkF^&C(wgQcgGQX^(NAa z!D7iw8w#OrNAPeye<~h-AXa~!o3W+a{y(1|Q+vp`{C+gDL@qj;z__+Tv_`iaH@jg6 zRl?=a9@Ei)mfn@rDio4zG7cGL+$WSL1GE{MmeirppJLFZn^?8w;jF@yPIDfChA8y> zGoBp{FT6J!d=INMz~qyD1B=~jE<6GO6EPIyP`~>dE)I-&d1%8%!>BZp-#jbUIuI3gU*GBQ@+UEsHl|<;%(m7_Is6=rM7?S7!^&zLcu&V}?X)5_K zPvmnl&Rba8kbi&EHa`0G*6sA^P!)CTTN=);5?Kz5JBu6qj5rqcT{m0#5j9S*eUo4X2lepZW$bk2kR$8*lt zP{wN9XSqp3_5U#X5X!h@m8bn5cuLCr5xHgP0CwN&|23^woQUKc2(JF0%H%-AUF_<8 zQtbfVfjjl<`UAGfHMvHK@PdMtLa=md=TVt2E}Wq3l0moN!-XcQ;(WyBgSUb`hdRB? z`e+DBf(Z*tzOV2#Clt;`pgBVmm1Bi!t(RWIciz&ilVkWrAJnJp91UtU^jPHqua=Xw ze^KEtlM8fW5szOJ@cFLcr!gL!lsp8X3Jyx3X< z8p8#@Ky6Y~BLWLH|GO?2*gIohy%SYKvJXZ*$}P@w&86oB>C+$j+QUq}@R#MpOnGGMOkWw^4VGF+`gl&qJD^#aC;5zNA zn&Xf*gRt6F_vV_>EpvmP!nRGu-LaM|L;WxP9#4dN!EGUC(~xP-5SaMS)AON+MUOUxMbyx>S72hkw)X53r z*!9HEz+g0y`IK7&VKRV-8@wENB2iTiZD$yUi&xmFtrra>h5_Q;_6Gxo9c81Fz(P~v z{QYPSNj%u$>u>yuWZ|!MBv7I(KfLWl4;KGlSGS#`1ViB(=KXmTYgF5~*n+18(M>3X ztSn;BryKI5+5+N&Hx)07d|YQAFFb8px-edI8_&Hhk7`69Wg7yRqq4T{HVs+A6TyAZ8L~PXCXE@g z6V|eIUPeC!@XDYxH{O_ndTHrIyC{|U&IineJ`))=xGLFEK0J%k+zRRCI-u9PS3gef z%bi~wO2)+!g}{u#Bg*Q)K&Zypc z6&Q67rZ6j8<~tV9rCx;^u`Va1+kNLFtMAE~V^&H7W+0Vhl$aF}#GxLz#Ax})s9C`d zvF=i9oB0N`jMHxx&lk{ihy3iI%JIgVy!O%R@vsgVz+b|gamf+Wz;n;5I+S_kp!l+n z5y@9MED--`UOek}H+RmRBTGr+=2lQwkj{#Tm_vxEq3JogDaUP!9^|V4{={Kac-OW) zK*z73Qj7ZpiJSVMtq88qC1G77uVc8-F4(H*8&#$*0?m?3xXSu%R zw3A;pvjcQdi~_|@YD3Kq(d7Lfox4l!h5VJ|Ah7>Q>kOuSrz_$=h|Rf&SW3#L1K3WS z0CK8b$KDw((S}0GS=?>Y>aM!;-Pa%NpXPM9W|GI3;knr}oY(5W1>woNJX}Fwgh)f} z^1;1PM%Nr!L&y=*=jk<*Ku-I(l;2f7-gdrU{10J<7Tspw=@x%9$m&V8Ik);*`H;1*t2h8rYRCNgp6P>-if*i%sJlR zWzy^Ynhob?9PVxKf7<79dHn{ zrMJ`+mxxoeWgK^;jij%QrLkr3o=*AD!(`Eq@uOb7$>+!RaC6*Gc9lx3{qAi2EoDdf z)f;UvK0lFFT2O4)X7#CjJKb?Sej^&IToX&Tp^3c_$p)ci?rYn0v|>QS>TSHlN<}h5 zm{a?Zr!=Zuk^J+O_XsZ}o9uR1vt9;_KHr-D@8NjMf1F`X) z8g>=wr{W{MJoS{F4nhPqm(7KG`e=MxJ~0LOykpKc-?#0e_fn}7{K z5l{F==rn_Gp8{4It45$)PXK5MbW^WvLO1QOY=<#d4k8!M!cd0w#I;jO0`p-kvm?u8 zzuu|)z4uTJ%1;p3blkS~*@Nq^s``+JzUhF`l5Nwo$JZIEhLA@m>EKb=w)5GO>mRDd z5MkeM&{5=e;Fw>}R$Q6j%#Cz8ny9x{Lml zt+VVjD0VO9sbV|0~s?cTWSG5rV-VeYH(a1Z)8>ZOT ziFsJcTDRzrh2`k;+bI+78O%yMi70d0v;8oa`FqyD{!WE8+*~r?3O}+Q_Z2$euqD%w9cE-CECtk30P3o!_*q{!c2@rYS~tjP8dhRwp1Gm!oWA#|AvWb30Xtf zBzqVwkAkbTj5Q3^Q!*o8Uc;Zs>+;o9!5_+77+cVZYV%c;{lpyW9(Y^Izpdgf-*4db ztp7!6p2(jQV^KhJRW(|#&2=g-PrE)?&W*10sM4f`3+}%lgxrhHO+mPAw87wxr+GOk zGY$#LR8YPoKx%)XUUi8~4)2!&)f85&rXp2HbB0Lm zKe20%Zv!i)Dujd6b1F@AFQ27R77mu9w&u?NddY+Gf12q0rmYC(R{hD*FBRPR_GR*4 z-eBP;TM{lXr?40Kj3?FSW>)#BrFInR!GdNL$@PDe;iLP3r@wHjjb2HgDx@9$fd*!! zUzS%Gnw!}rwAiM!*v7UDY;b*kUsomG&|3Z1qsm;;Y`nfzvGMAy%SHgU)|wLh67>G0 z(sP=P-fOUB|2DjA((Gto!nJB}Upctdn%)zRspl-&evEMqPU(D|U+vR3Us@mB)}Jbq z4yon;(0;OT`boM@3hNoS!^PpkrMrnrKt&nt7_hUm4-bdwaG98CJh|$RFBWAI9dGnH zaka2+HC>szlpDWnHTol|y|iKB<;&xSNIgGUy_yQl|Cr*AeCEWA#RPnQVoucHBFLbH(cMGN-P2~*Q)P1I-Xz?L z<4wfm98+GMzr^1#sp%BkihQeI^tQk9JFL3=l0tS~9Sym1`*jEh#0&eE3I}GC`L%@C z&K%oTSK5}VwcAGo#FhD%lm&istGANvcpcI3EFv)Za?|2y+$rch6*t38Kfxa#qoY&$6NG^Swm7T=fw-_T>e$vEZri9rvU4@CKAW>l-3 z!;FT{+EbA9d{f_Yrc9M%%Yz?G?LD+Oa4CRO70gwt*3E@!GQ4|Pex5$*kj&9w?%rtZ zj?UpY@0{Fa%!hI359eCN4%DuFs~DYP4`2SzOJT{bS6ql>C{g)CuDYcqki ze1)Ci>Vb@r$K2Qb@(t@pNW-?m&{fLyV7lvNzOAUxY~$mb0_`P{hbibr&)vJBd6tr& zjxu|h4u(t&U9uiEtfY%Iv5);RbzG}#HoLT9zO)8bNql*0SU&WmqQz*xh7&WNd*eX6 z1XDVSYnZ|{AsQ7Os1@H(E4joedM)ub@TOQx4SR|HQTU8h$n*84K`cFow7n!alw8jY zoqqeWh%d8-;^9pvE#R}D`jUu7Reu)D>DB%I(aZHCnh0X zSf-$wdispY`nqZNOEula7&@Q7nl=xi+f1j?Z@wMyPo|6x}!|^8Cw* zL~c~0*){vp=3Hr?`-lkw#2uCCbskqbi5itEls1kw*ps*!6<<^>dcmHU(jf@qZamla z(HxPujZf}Bz9V*JSUM}6^%kmSjmwxFt4p6>YkDW%z3mCC_@1XMb_US#fOZ$(qNMmg D+cO$& literal 0 HcmV?d00001 diff --git a/fonts/screenfont-x86_64.gz b/fonts/screenfont-x86_64.gz new file mode 100644 index 0000000000000000000000000000000000000000..fcaee505742edca8d8a8bb1c59797e27226b12c6 GIT binary patch literal 5473 zcmd5;`9Bkm|3|rUrHR}fB)P9#*^)|fBqDR)5^_YeVI)+p4(7-h6(UFOBZfK3u(>nG zc*|{uvCYQz>HA-NACK4L_5AJmdOV)b$Mf-g$)@n|^cUy@IZizD3iI)K>KpttTqR2H zn%gyPwyjT*(IOL+PAqR^e_Q}hnchwQqB4=h+ZuOVG|m@ap(Mo^J3n~zTIG(5SdBaB zEEGKtjg)U~)bT{$z1brwDTD>|(o)+a2n2sZlCP> zoXLV4vaalQWV7JVAbaENeKxm1!-*WLQc2rJBCIPlePv~GWo0E@9O-q(93wWQ!ldW* z)Sv6kp;*C|)|y|CN%^2)=Z8+$A1dSlCJcPSXZgr(IUs^JcJhrc%&vO30+UBSA?xfi zIj*K369KlBO$ib5)@<^1(r?Or~X$Kzi3(u_n_rpO`G-dVZJ0{@FFsEZojFLD0 z(F#6K`{3E(@6=?{N!}S>qZvO7h!THVTH0<|&~gsH_VL9}OM+G77Os?71Q#Rk+~&b1UzjsWw-3+2$_Y@+ zBK^VmUc0pyXg0C^*2Rdn48L3-i5T?BkRXI+JyA$*Y%IloDEVb5Fx2 zVa!nQMzx>Ub2i6z4d!zhW3U2nf=1Gm!5jERW9s7ziA-EQ;YY+k&1O9V07zqJRD5~C z`pq!>JUGK{_G1?V>wtLKhI(rF?Z{zjRXj^ z0JO5FWqi<<5V%S8`)2X6j^&RH=jxSx?=T)5b8ZQ+%H+TY*GKMY-C=mg%@Yg013DXq znWhX@6^#%X+h!67>4@k}7M@`Vzc;&l=6C938|NUQiZ)F_6dr9YO5RQ<^YS>2R@b{r?{!U*6> zU)g$oLk>JaID~b`#)yt|fWRS_)6Pk#067d2xKFmlV&Vqy2;uvvz<RQ*>QG zeN8E+=ni8;_RXkZs`gZ}G^4}tFfvrG8|LXxq$3?hH)Th+t3S~9&u2S69maa6V#Ve` zl4LbbR>c8!%V>~N02{&27#~2H-~eoblV0Z@wy>rnXQ65;(FHs<9cuFBLjEX2SAiZ0 zu*Q=wb*Q1qUyJeWu;as=F<8>Ex!2Xsd2v`mOc6_fBD}=>ZC<^GCDE8~d1EbOFBW9< z+a?_yj-C_WB6gCE)wk7}W3pDr=-Sv7a$*)Q`Ou@SbZU8(p`u#|5eDPH;wX3h_)_Gt6A^ZX>)`x zwCNZEoifbZvz?c8#2+P!#fWbivHX9*M6i(`J4mIK16@DbVYELH%*{gCO#|7zG4h8i zqNgYJU5nUQNB1tP!v;1-PrK>Q06xbgOm`RvKLojX)U596uCQhg{eB7kVCl@XDTpK; zeeiI4_&B!C48aqPLW{ROZb)$BPzqet+-At9KHd8|hDaj&kr}*=LBqklOU8%mNUBNk zaAR~Iufow6ebf_QgBiWML1R6W74&`>4Y3be(SVn;JfjF%);N|M5u0z7$cvvrDwUqNmeeM6*b{ic=n8>=LcSnfeQi978ZwZN4q z!RVwWaLfmvf`G0xJ>fXlrzX0?%(~EF^>whtjC@qzUK9{&I@0tSNrl$l4zthw7CXn) z=n!KLyh{j@CeRemd<&hbE`de4qg)sNRO5oqkBx8DqfB%=;69E7OXvMUt3wIaQXtS~ zf_^BLNvOLjF)9siXFaPWOb3=ug5s#B%AOxrhq1R<+=#UbAbfa>A9gAgU+`0&sl2g& z@LF=BH~3%8kNL6|5<}<*51c`Hw6x@=<*Xwm6-D%3%2boYk!>URUN(eGiEzz^*#IwT%(PI&0@{5qpfk(r>2sV zjQ*R92I`a}$rXu!=`4m^;Hbc@OMl>EgftgBwgJNu#c~?Rem2+I263PWcE2eMf(LK; zV8TE0UE`wBM}sBOyvTh}IKyzB9nVhUb}BhSnE1CG<|G{;+uR5L;LG<$ZK%4}BQmq7 ziWADr0SA9Q=Yh58Na6zTfbr&Rz@-Lz>bB7j@1HE=)Y?o5qu7wj#)!FxZ(i>FHOG<< zPS5Hr3zjey#SIngXvdSRB3+Otgt}o@q9fy6PbHu@*Z6D$t%+NFei_nUqu9xH%!z&E zy^y%Z$JcZ>=LBz#r)OwAONH3G>HO$ueBM}Hb?Uj+#@u1#L}sR|o6q=l5xc-kIV?dvh(rL8qr04RSL%ab`BaLYiJ5W;S#I$6uzOl zw(EScRh55d z9PXZ{KJ)m+h{f7ARII14WTBY0?F^?!Q}Krt{Vfwuk73ZIjc6rX@ zdh89J&pt9BEnhfo^+N02#0Snrp12UOdRkX>@hy6+~29Zi1-+ak1wvjlvac&gZGW<;dA@ORJG%uf1P`L zk!S_Q$>Bdzirf8V@!6Em$Lnkc?*xkz{57R-CXafA>q#4%jy@3itf-xpUg96l-@ERR zXVpKl8_prWb}P?V>sz{2@yB%$gDk7h5Ceq78o$BE;bJ+2rDERgI)6cg$?E8faNy8a zzO|dJuT@LT*KAr-RZErD?zO(HDhXI~Y)!8!m0Y`%XR13g6wWtyuW5uB&OK)qIWiY6 zG*k**2euZu83uL(?<(F1Wu~q_Yv>Y%=h7gtAOv+qk|MUQJ$%JSQm(~ zLDx!SD9VO4x4_T6#nH6@a}|sOJXG1RF4b>3(T4+5rQG(z!h0IwBLp{7hSqNN*6Lz_ z%8c5r{#p=*U75R9swYex;|(`)5cJVcT@Ha?a!B{qe=FaondoyBGon1^knZuOP70%m zSk{9tfvw!lYVv<+Ciq-7m&TYWE7aw8hh4?^D<3GA)@j$|cZFTXfR)YQbzmFi$eP*T zDGXItLS({AsKbhh#5QLSV*%J)xXjMem0 zV$F_!lte*%#18mM?<&#|D1=4x;ZC@{irAIEl9+uVwYn2RyPCNefCG%3PMY!%RE~Rw z6dq30UAP_v7*6INOl)#Dijo{ykZ$IgPb}DxapnMb&|{kU^A^Hrah0OoSvwcnwla`n z(fsX;fM!u(;-vru7|0FGa`d$k6rob(CF`83JCnG@d0h2vVLan1^wdzjEZEGxmQ z!5tol@UMtv!?hCx^qrj(n2fDRm?yYT5u+q<5cM<3`mU_0@h@ zj)V)sK}ZfJdQZVz0pnJ~`xhy;QuF~DdyTqpvpqNeM_|e{F*58vu*;~0y(&S{Q<2iO z-7HMGAvx8XrjaTZMvB3E`l5iAz zY7goBOLT~cVE;%n=hFlyPaW42Gyk0`TNJOCPVXd!%5BF{Z)W;+rl0H5h(2(bJ=MQB z*{tQ1=2zjeb2X>4y-~@Dlr;0-_Vr7Yg=ux(>LjCGu|M1aA#SsRRP>oYvTa@L&KvR0 z8^%$(QiFAYns;_j&k74Ij|!m?J0ahDFEzt2wZK0&!_NWPYTRT7IJ-_OTk_6%2mj{>9zwH#28@Qr22JPJZLY zR*B%vuY!H=@>1ajC#N1Hdww(EZ>vE6NH*Y@vNQE`kp7p2B%=utc~ z23)$Wvv;MF8x3T1?G@bJvN~foZhg1b3IXT&PB*?f2rzr zjL=E9n_AF|P}%-oh2GtO%-)`h1B|CNSL7wPeftzr+$tXVsA)lF!#@AZQ?$_pu{pc- z1l2zBzm5&n+52;8j0)%un~to|L+XFV8`9Su+EYGGK%-tmP7B!yEqZKtTz58lX*4bCc?&?4r`03fveiVol)a^1gDcS0+x+Oo%%9zb6Gl&liQCzl}^}=W*Tq zDlaE@nd=Mya7MN}Ue4mZ*aEvYUGOAtq{su+C$~8(c}`uiuZIWM_(Ch!flA=X-_Smv ztb@Jy)xVb{{{kd^(kyF-Uq$=cbkx{|1%9l)t|l3n9lZ6<()FE+YbNQZ94HFh_~Q2S zD7)vm9}0h7Mn$<$qD*4RC4Y0_put~2!)3L(%SiyyjNX7SL z%$O{7_VOz&U%{-)zutvvcsRb(rWg;wfSMVh1B#k|rHs=)-W*@=|832`_)8rLK&mdi zOE119W?haAadzvfwB1>gjEXo3L?pZQ3*+QZM(}&Yq`kJfR37}GLhJRW;rOOpUIeF# zK}x3Y`^KSEV#Kt46LGdSZDx|xur0kg*I-pRN2r@&&^d(m<+;Lz6E?a{jNV=_N-8NY Xy~X4eT!mU+;ov5Qb)m~ov9tXTd=@bZ literal 0 HcmV?d00001 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